Русский
Русский
English
Статистика
Реклама

Data science vs COVID-19_Часть 1



Уже очевидно, что в 2021-м COVID-19 все еще будет оставаться, как говорится, на повестке дня. А значит, закономерно возникают вопросы: есть ли у нас инструменты для прогнозирования роста и снижения заболеваемости, можем ли мы предсказать развитие событий через неделю, месяц или даже год? Давайте разбираться.

Дано: колоссальные возможности data science, три талантливых специалиста.
Найти: способы предсказать распространение COVID-19 на неделю вперёд.

Решение:

На самом деле решений будет три, следите за публикациями. А сегодня мы обсудим одно из них, с Владиславом Крамаренко. Он нашёл модель, способную построить самый точный прогноз* для всего мира на неделю вперёд.

Владислав, привет. Давай подробно обсудим то, что ты сделал: что получилось, над чем еще предстоит работать, какие были ошибки и как их можно учесть в будущем. Начнем с главного: расскажи, какой алгоритм машинного обучения ты использовал?

Остановился на градиентном бустинге. Сложность была в том, что градиентные бустинги бывают разные и дают разную картину. У меня показал лучший результат adaboost, а на втором месте был Catboost.

В смысле, ты попробовал разные, и adaboost лучше всего зашёл?

Да. Лучше всего показал себя adaboost, он давал самый умеренный прогноз. Если мы видели, что всё бурно растёт, значит, для алгоритма и дальше всё будет бурно расти, и другие бустинги куда-то в облака прогноз устремляли. А вот adaboost был самый консервативный.

Как ты обучал модель?

Самая большая сложность в таких задачах найти правильный способ обучения моделей, то есть сделать правильный выбор тренировочной и тестовой выборок. Если в качестве тестовой выборки взять 1 день и разбить все данные на тренировочные и тестовые, то получается, что мы предсказываем всего на 1 день. Это не сложно нужно просто рандомно разбросать дни на тренировочные и тестовые, и 1 день можно будет предсказывать. Эту идею я сразу отбросил и предсказывал последнюю неделю: то есть последнюю неделю отсекал, остальные дни отдавал в тренировочные данные, и день за днём последней недели предсказывал честно, то есть брал для предсказания данные за неделю назад. Но и тут возникла сложность. Я сделал модель, которая идеально предсказывает вторую неделю, добавил кучу признаков, которые помогали в этом, но оказалось, что модель, которая очень хорошо предсказывает вторую неделю, очень плохо предсказывает третью. Начинаю думать, что, может быть, было бы проще поставить данные вручную и не использовать машинное обучение, и такая модель могла бы быть лучше.

Ты говоришь про то, чтобы посмотреть на количество глазами и линию провести дальше?

Проанализировать месячную статистику. Эти данные неплохо ложатся на какую-нибудь кривую. Вся эта статистика довольно странная, и не все заболевшие в неё попадают. Таким образом, статистика не отражает число заболевших. Я знаю, что некоторые ребята для такой задачи используют SEIR-модель (эпидемиологическую модель). Я тоже думал её использовать, но затем решил, что мы должны точно знать, сколько человек болеет, а мы не знаем. Эта модель привязана к тому, скольких заражает один человек, сколько человек болеет. Если мы эти данные не знаем, то с этим не получится работать. На мой взгляд, такая модель будет давать ошибочный прогноз.*

*Мы разберём достоинства и недостатки SEIR-модели с Николаем Кобало в следующей статье

Разумным мне кажется, что люди, которые этим занимаются, сначала должны всё сделать с помощью компьютера, а потом вручную отредактировать, исправить. Машина иногда выдаёт всякие глупости. Например, она видит, что в Китае долгое время не растёт количество заболевших, но при этом в других регионах также долгое время ничего не росло, а затем начался взрывной рост. И на основании этого машина понимает, что то же самое нужно сделать и для Китая, у которого, вообще-то, уже плато. И начинает давать не 80к, а резко в миллион уходит. У меня такое было в одной из моделей.

А традиционные модели? Что ты о них думаешь? Анализы временного ряда, типа ARIMA?

ARIMA я пробовал пару раз, но ни разу она не давала результат лучше, чем градиентный бустинг. Вроде, казалось бы, что с помощью ARIMA можно объяснить любой процесс, но оказалось, что не всегда она работает лучше. Там же куча параметров, процесс должен быть стационарный и так далее. Даже если проинтегрировать, не факт, что получится стационарный процесс.

Вопрос про деревья. Деревья же не экстраполируют. Как их заставить экстраполировать?

Для этого нужно предсказывать не общее количество заражённых, а что-то другое. Понятно, что если мы будем предсказывать общее количество, то в каком-нибудь регионе вроде Москвы нельзя будет предсказать, так как деревья не могут предсказывать больше, чем они видели в тренировочной выборке. Я брал логарифм отношения заболевших за сегодняшний и предыдущий дни. Эти цифры (0.3,1, может, 2) есть в обучающей выборке и модель получается. Понятно, что мы не сможем предсказать резкий рост в 500 раз. Это модели не под силу. Но если мы говорим, например, про отношение прироста за сегодня к приросту за вчера, цифра будет около единицы, причём у нас в выборке есть разные такие значения в этом случае модель предсказывает прекрасно.

В качестве таргета в финальной модели ты брал логарифм отношения заболевших сегодня к заболевшим вчера?

Да. Я ещё пробовал соотношение дельт: на сколько выросло за сегодня, поделить на сколько выросло за вчера. Тоже неплохо работало. А вот общее количество и прирост заболевших за день работало плохо.

А что ты брал в качестве объясняющих переменных?

Я брал около 4-х предыдущих дней. Это работало. Брал информацию о численности населения, количестве курящих и т.п. Добавлял много разной статистики. А потом неделю потратил на то, чтобы посмотреть, какие факторы дают прирост, а какие нет. Но ситуация слишком меняется, эти факторы оказались не устойчивыми, скорее случайными.

Что оказалось устойчивым, кроме предыдущих значений?

Самое важное, что повлияло это количество дней с момента первого заболевания, десятого, сотого Сначала я брал количество дней с первого заражённого, но подумал, что это не очень хорошо, так как часто первого заражённого быстро изолируют, и он не приводит к резкому росту. Поэтому, я стал брать 10 заражённых, а потом докинул до 100 и 1000 заражённых.

На третьем этапе в этой задаче я добавил 50 и 500 заражённых, и это сыграло со мной злую шутку: модель сильно переобучилась и стала плохо предсказывать на следующей неделе.

Ещё из важных данных, я пробовал индекс самоизоляции. На какой-то неделе это давало сильный прирост, а на какой-то вообще не играло роли. Использовал данные об уровне здравоохранения: какие суммы перечисляются врачам, сколько вообще врачей в стране, сколько пожилых и т.п. Это было сделано для прогноза смертности.

Были разные проблемы, которые хотелось решить. Взять самоизоляцию, например. Я понял, что уровень самоизоляции влияет не на завтрашний день, а на дату через две недели. И не факт, что самоизоляция влияет на количество заболевших; может быть, наоборот количество заболевших влияет на уровень самоизоляции.

Кстати, проблемы и решения по оцениванию причинно-следственных связей подробно обсуждаются на треке Casual Inference in ML (https://ods.ai/tracks/causal-inference-in-ml-df2020/) рекомендуем посмотреть в рамках ДатаФест 2020 глобального события дата-саентистов, которое из-за COVID-19 прошло в формате треков, т.е. темы растянуты на несколько лекций и обсуждений, проходящих по отдельным дням.


Какой вывод ты бы сделал относительно моделей МО в общем, не применительно к этой задаче? Твое высказывание звучит так, что за моделями надо присматривать

Есть задачи, которые компьютер решает намного лучше, чем человек. Например, прошлые соревнования в которых я участвовал ЕГЭ по русскому языку. Моя модель решала эти задачи лучше, чем я. Но это обработка текстов

Почему в СПБ и МСК так много заболевших? Нас тестируют поголовно. Не скажу, что в других регионах так массово тестируют. Например, в статистику попало 100 человек. О чём это говорит? Три недели назад они заразились. В итоге мы предсказываем не количество заболевших, а какую-то другую цифру. И как эта цифра коррелирует с количеством заболевших не очень понятно. Компьютер не может ничего нормально предсказать, если мы ему даём непонятно какие цифры.

Кому интересно, вот моё решение: https://github.com/vlomme/sberbank-covid19-forecast-2020

Итак мы поняли, что используя модель машинного обучения можно делать предсказания на неделю вперед на основе истории развития заболевания когда было 10, 100, 1000 заболевших (сейчас, очевидно, такую модель нужно будет переучивать на последних данных).

Мы упоминали эпидемиологическая модель. Её разобрал и применил Николай Кобало. На ее основе, кажется, можно понять, будет ли конец истории, скажем, к лету 2021.

В следующей нашей статье мы разберём, в чём преимущество моделей, которые в качестве предположений используют теорию развития похожих ситуаций в истории.


*в рамках конкурса Forecast the Global Spread of COVID-19
Источник: habr.com
К списку статей
Опубликовано: 16.02.2021 16:13:42
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании центр финансовых технологий (цфт)

Машинное обучение

Covid-19

Коронавирус

Data science

Ods.ai

Категории

Последние комментарии

© 2006-2021, personeltest.ru