[Машинное обучение] Data Science vs COVID-19_Часть 3
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Условия у нас следующие:
Дано: Колоссальные возможности data science, три талантливых специалиста.
Найти: Способы предсказать распространение COVID-19 на неделю вперёд.
И вот решение от Александра Желубенкова
— Александр, привет. Для начала расскажи немного о себе и своей работе.
— Я работаю в компании Lamoda руководителем группы анализа данных и машинного обучения. Мы занимаемся поисковым движком и алгоритмами ранжирования товаров в каталоге. Data Science меня заинтересовал, когда я учился в МГУ на факультете вычислительной математики и кибернетики.
— Знания и умения пригодились. Ты сделал качественную модель: достаточно простую, чтобы она была не переобученная. Расскажи, как удалось этого добиться?
— Задача прогнозирования временных рядов хорошо изучена, и какие к ней можно применять подходы — понятно. В нашей задаче достаточно маленькие по меркам машинного обучения выборки — несколько тысяч наблюдений в тренировочных данных и всего 560 предсказаний нужно делать для каждой недели (прогноз для 80 регионов на каждый день следующей недели). В таких случаях используют более грубые модели, которые неплохо проявляют себя на практике. По факту, у меня и получился в итоге аккуратно сделанный бейзлайн (baseline).
В качестве модели я использовал градиентный бустинг на деревьях. Можно заметить, что деревянные модели «из коробки» не умеют предсказывать тренды, но, если перейти к таргетам-приращениям, тогда спрогнозировать тренд станет возможным. Получается, нужно научить модель прогнозировать, на сколько вырастет количество заболевших относительно текущего дня в течение следующих Х дней, где Х от 1 до 7 — горизонт прогнозирования.
Какая еще была особенность – качество прогнозов модели оценивалось в логарифмической шкале, то есть штраф был не за то, на сколько ты ошибаешься, а за то, во сколько раз прогнозы модели оказались неточными. И это несло следующий эффект: на итоговое качество прогнозов по всем регионам очень сильно влияла точность прогнозов в маленьких регионах.
Были известны таймлайны для каждого региона: количество заболевших в каждый из дней в прошлом и буквально несколько качественных характеристик, таких как численность населения и доля городских жителей. По сути, это всё. На таких данных сложно переобучиться, если нормально сделать валидацию и определить, где в обучении бустинга стоит остановиться.
— Какую библиотеку градиентного бустинга ты использовал?
— Я по старинке — XGBoost. Знаю про LightGBM и CatBoost, но для такой задачи, мне кажется, выбор не столь важен.
— Окей. А вот всё-таки таргет. Что ты брал за таргет? Это логарифм отношений двух дней или логарифм абсолютного значения?
— В качестве таргета брал разность логарифмов количества заболевших. Например, если на сегодняшний день было 100 заболевших, а завтра стало 200 – то при прогнозе на один день вперед нужно научиться прогнозировать логарифм двукратного роста.
В целом известно, что первые недели идет экспоненциальный рост распространения вируса. А это означает, что если в качестве таргетов использовать приращения в логарифмической шкале, то по сути можно будет каждый день просто константу предсказывать, умноженную на горизонт прогнозирования. Градиентный бустинг – универсальная модель, и с такими задачами справляется хорошо.
Прогнозы модели на третью, финальную неделю конкурса
— А обучающую выборку ты какую брал?
— Для прогнозирования регионов я брал информацию о распространении по странам. Кажется, это помогало, так как где-то уже резкий рост замедлялся, и страны начинали выходить на плато. По регионам России начальный период я отрезал, когда какие-то единичные случаи были. Для обучения использовал данные, начиная с февраля.
— Валидировался ты как?
— Валидировался по времени, как для временных рядов и принято делать. Для теста использовал две последние недели. Если прогнозируем последнюю неделю, то для обучения используем все данные до неё. Если прогнозируем предпоследнюю — то используем все данные, без последних двух недель.
— А использовал ты что-то ещё? Какие-то дни, 10-й или 20-й день, значения оттуда?
— Основные факторы, которые были важны — разные статистики: средние, медиана, приросты, которые были за последние N дней. Для каждого региона можно посчитать отдельно. Можно ещё отдельно рядом сложить такие же факторы, только посчитанные для всех регионов сразу.
— Вопрос про валидацию. Ты больше смотрел на стабильность или на точность? Что было критерием?
— Смотрел на среднее качество модели, которое получалось на двух последних неделях, выбранных для валидации. При добавлении некоторых факторов получалась такая картина, что при фиксированной конфигурации бустинга и варьировании только параметра random seed качество прогнозов могло сильно скакать – то есть большая получалась дисперсия. Чтобы не переобучиться и получить более стабильную модель, такие сомнительные факторы в финальной модели в итоге не использовал.
— А что тебе запомнилось? Удивило? Фича, которая заработала, или какой-нибудь трюк с бустингом?
— Два урока я извлёк. Первый: когда я решил поблендить две модели: линейную и бустинг, и при этом для каждого региона коэффициенты, с которыми брать эти две модели (они разные получались), настроить просто на последней неделе – то есть на семи днях. По факту, 1-2 коэффициента я настраивал для каждого региона на 7 днях. Но открытие было такое: прогноз получился существенно хуже относительно того, если бы я их этих настроек не делал. На некоторых регионах модель сильно переобучилась, и в итоге прогнозы в них получились плохими. На третьем этапе конкурса я решил так не делать.
И второй момент: кажется, что в качестве фичи должно быть полезно количество дней от начала: от первого заболевшего, от десятого заболевшего. Пробовал их добавлять, но на валидации это ухудшало ситуацию. Объяснил это так: распределение значений в выборках со временем смещается. Если обучаться на 20-й день от начала распространения вируса, то при прогнозировании распределение значений этой фичи уедет на семь дней вперед, и, возможно, это не позволяет такого рода факторы применять с пользой.
— Ты говорил, что доля городского населения играла какую-то роль. А что ещё?
— Да, доля городского населения и для стран, и для регионов России всегда использовалась. Этот фактор стабильно давал небольшой буст к качеству прогнозов. В итоге кроме самого временного ряда я больше ничего в финальную модель не взял. Пробовал добавлять разное, но не работало.
— Твое мнение: SARIMA – это прошлый век?
— Модели авторегрессии – скользящего среднего – тяжелее настраивать, и в них более затратно добавлять дополнительные факторы, хотя, уверен, что и с (S)ARIMA(X) моделями можно было бы неплохие прогнозы сделать, но не такие качественные по сравнению с бустингом.
— А на более длительный период, чем неделя, можно прогнозы делать, как ты думаешь?
— Было бы интересно. Изначально у организаторов была идея собрать долгосрочные прогнозы. Месяц кажется переломным сроком, когда ещё можно попробовать те подходы, которые я делал.
— Как ты думаешь, что будет дальше?
— Нужно модель перестраивать, смотреть. Кстати, моё решение можно найти здесь:
https://github.com/Topspin26/sberbank-covid19-challenge
Познакомиться с последними новостями data science по COVID от международного сообщества можно здесь: https://www.kaggle.com/tags/covid19. И, конечно, приглашаем в канал #coronavirus в opendatascience.slack.com (по приглашению от ods.ai)
===========
Источник:
habr.com
===========
Похожие новости:
- [Программирование, Машинное обучение, Визуальное программирование] «ДЕЛАЙ КАК Я!» — ИЗУЧАЕМ ИМПЕРСОНАТОР
- [Машинное обучение, Natural Language Processing] Чёрный петух, жирный творог и альпийская корова, или Уменьшение предвзятости в классификации токсичности
- [Алгоритмы, Машинное обучение, Искусственный интеллект] Армия США обучает нейросеть распознавать лица в темноте
- [Big Data, Исследования и прогнозы в IT, Интернет-маркетинг, Статистика в IT] A/B Тестирование: Основы (перевод)
- [Высокая производительность, Машинное обучение, Научно-популярное, Биотехнологии, Здоровье] Nvidia и исследователи из Гарварда научили ИИ находить активные зоны в клеточных ДНК
- [Машинное обучение, Искусственный интеллект] Рыцари несправедливости. Дата-сайнтисты против смещения данных
- [Машинное обучение, Искусственный интеллект] В OpenAI показали, как обмануть нейросеть бумажкой с надписью
- [Машинное обучение, Разработка на Raspberry Pi, Гаджеты, DIY или Сделай сам] Умелец собрал детектор кота на Raspberry Pi Zero
- [Разработка под Linux, Софт, Здоровье, IT-компании] Google вместе с Debian работают над улучшением проекта Bazel для ковидных исследований
- [Google Chrome, Расширения для браузеров, Машинное обучение, Будущее здесь] Расширение для Chrome включает субтитры на YouTubе, когда пользователь громко ест чипсы
Теги для поиска: #_mashinnoe_obuchenie (Машинное обучение), #_data_science, #_covid19, #_ods.ai, #_blog_kompanii_tsentr_finansovyh_tehnologij_(tsft) (
Блог компании Центр Финансовых Технологий (ЦФТ)
), #_mashinnoe_obuchenie (
Машинное обучение
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:55
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Условия у нас следующие: Дано: Колоссальные возможности data science, три талантливых специалиста. Найти: Способы предсказать распространение COVID-19 на неделю вперёд. И вот решение от Александра Желубенкова — Александр, привет. Для начала расскажи немного о себе и своей работе. — Я работаю в компании Lamoda руководителем группы анализа данных и машинного обучения. Мы занимаемся поисковым движком и алгоритмами ранжирования товаров в каталоге. Data Science меня заинтересовал, когда я учился в МГУ на факультете вычислительной математики и кибернетики. — Знания и умения пригодились. Ты сделал качественную модель: достаточно простую, чтобы она была не переобученная. Расскажи, как удалось этого добиться? — Задача прогнозирования временных рядов хорошо изучена, и какие к ней можно применять подходы — понятно. В нашей задаче достаточно маленькие по меркам машинного обучения выборки — несколько тысяч наблюдений в тренировочных данных и всего 560 предсказаний нужно делать для каждой недели (прогноз для 80 регионов на каждый день следующей недели). В таких случаях используют более грубые модели, которые неплохо проявляют себя на практике. По факту, у меня и получился в итоге аккуратно сделанный бейзлайн (baseline). В качестве модели я использовал градиентный бустинг на деревьях. Можно заметить, что деревянные модели «из коробки» не умеют предсказывать тренды, но, если перейти к таргетам-приращениям, тогда спрогнозировать тренд станет возможным. Получается, нужно научить модель прогнозировать, на сколько вырастет количество заболевших относительно текущего дня в течение следующих Х дней, где Х от 1 до 7 — горизонт прогнозирования. Какая еще была особенность – качество прогнозов модели оценивалось в логарифмической шкале, то есть штраф был не за то, на сколько ты ошибаешься, а за то, во сколько раз прогнозы модели оказались неточными. И это несло следующий эффект: на итоговое качество прогнозов по всем регионам очень сильно влияла точность прогнозов в маленьких регионах. Были известны таймлайны для каждого региона: количество заболевших в каждый из дней в прошлом и буквально несколько качественных характеристик, таких как численность населения и доля городских жителей. По сути, это всё. На таких данных сложно переобучиться, если нормально сделать валидацию и определить, где в обучении бустинга стоит остановиться. — Какую библиотеку градиентного бустинга ты использовал? — Я по старинке — XGBoost. Знаю про LightGBM и CatBoost, но для такой задачи, мне кажется, выбор не столь важен. — Окей. А вот всё-таки таргет. Что ты брал за таргет? Это логарифм отношений двух дней или логарифм абсолютного значения? — В качестве таргета брал разность логарифмов количества заболевших. Например, если на сегодняшний день было 100 заболевших, а завтра стало 200 – то при прогнозе на один день вперед нужно научиться прогнозировать логарифм двукратного роста. В целом известно, что первые недели идет экспоненциальный рост распространения вируса. А это означает, что если в качестве таргетов использовать приращения в логарифмической шкале, то по сути можно будет каждый день просто константу предсказывать, умноженную на горизонт прогнозирования. Градиентный бустинг – универсальная модель, и с такими задачами справляется хорошо. Прогнозы модели на третью, финальную неделю конкурса — А обучающую выборку ты какую брал? — Для прогнозирования регионов я брал информацию о распространении по странам. Кажется, это помогало, так как где-то уже резкий рост замедлялся, и страны начинали выходить на плато. По регионам России начальный период я отрезал, когда какие-то единичные случаи были. Для обучения использовал данные, начиная с февраля. — Валидировался ты как? — Валидировался по времени, как для временных рядов и принято делать. Для теста использовал две последние недели. Если прогнозируем последнюю неделю, то для обучения используем все данные до неё. Если прогнозируем предпоследнюю — то используем все данные, без последних двух недель. — А использовал ты что-то ещё? Какие-то дни, 10-й или 20-й день, значения оттуда? — Основные факторы, которые были важны — разные статистики: средние, медиана, приросты, которые были за последние N дней. Для каждого региона можно посчитать отдельно. Можно ещё отдельно рядом сложить такие же факторы, только посчитанные для всех регионов сразу. — Вопрос про валидацию. Ты больше смотрел на стабильность или на точность? Что было критерием? — Смотрел на среднее качество модели, которое получалось на двух последних неделях, выбранных для валидации. При добавлении некоторых факторов получалась такая картина, что при фиксированной конфигурации бустинга и варьировании только параметра random seed качество прогнозов могло сильно скакать – то есть большая получалась дисперсия. Чтобы не переобучиться и получить более стабильную модель, такие сомнительные факторы в финальной модели в итоге не использовал. — А что тебе запомнилось? Удивило? Фича, которая заработала, или какой-нибудь трюк с бустингом? — Два урока я извлёк. Первый: когда я решил поблендить две модели: линейную и бустинг, и при этом для каждого региона коэффициенты, с которыми брать эти две модели (они разные получались), настроить просто на последней неделе – то есть на семи днях. По факту, 1-2 коэффициента я настраивал для каждого региона на 7 днях. Но открытие было такое: прогноз получился существенно хуже относительно того, если бы я их этих настроек не делал. На некоторых регионах модель сильно переобучилась, и в итоге прогнозы в них получились плохими. На третьем этапе конкурса я решил так не делать. И второй момент: кажется, что в качестве фичи должно быть полезно количество дней от начала: от первого заболевшего, от десятого заболевшего. Пробовал их добавлять, но на валидации это ухудшало ситуацию. Объяснил это так: распределение значений в выборках со временем смещается. Если обучаться на 20-й день от начала распространения вируса, то при прогнозировании распределение значений этой фичи уедет на семь дней вперед, и, возможно, это не позволяет такого рода факторы применять с пользой. — Ты говорил, что доля городского населения играла какую-то роль. А что ещё? — Да, доля городского населения и для стран, и для регионов России всегда использовалась. Этот фактор стабильно давал небольшой буст к качеству прогнозов. В итоге кроме самого временного ряда я больше ничего в финальную модель не взял. Пробовал добавлять разное, но не работало. — Твое мнение: SARIMA – это прошлый век? — Модели авторегрессии – скользящего среднего – тяжелее настраивать, и в них более затратно добавлять дополнительные факторы, хотя, уверен, что и с (S)ARIMA(X) моделями можно было бы неплохие прогнозы сделать, но не такие качественные по сравнению с бустингом. — А на более длительный период, чем неделя, можно прогнозы делать, как ты думаешь? — Было бы интересно. Изначально у организаторов была идея собрать долгосрочные прогнозы. Месяц кажется переломным сроком, когда ещё можно попробовать те подходы, которые я делал. — Как ты думаешь, что будет дальше? — Нужно модель перестраивать, смотреть. Кстати, моё решение можно найти здесь: https://github.com/Topspin26/sberbank-covid19-challenge Познакомиться с последними новостями data science по COVID от международного сообщества можно здесь: https://www.kaggle.com/tags/covid19. И, конечно, приглашаем в канал #coronavirus в opendatascience.slack.com (по приглашению от ods.ai) =========== Источник: habr.com =========== Похожие новости:
Блог компании Центр Финансовых Технологий (ЦФТ) ), #_mashinnoe_obuchenie ( Машинное обучение ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:55
Часовой пояс: UTC + 5