[Машинное обучение] DATA SCIENCE vs COVID-19_ЧАСТЬ 1

Автор Сообщение
news_bot ®

Стаж: 6 лет 4 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
16-Фев-2021 17:32


Уже очевидно, что в 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
===========

Похожие новости: Теги для поиска: #_mashinnoe_obuchenie (Машинное обучение), #_covid19, #_koronavirus (коронавирус), #_data_science, #_ods.ai, #_blog_kompanii_tsentr_finansovyh_tehnologij_(tsft) (
Блог компании Центр Финансовых Технологий (ЦФТ)
)
, #_mashinnoe_obuchenie (
Машинное обучение
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 04-Июл 12:59
Часовой пояс: UTC + 5