Прогноз из черного ящика: применяем машинное обучение к предсказанию пандемии COVID-19

Мнение редакции может не совпадать с мнением автора

В апреле «Сбербанк» вместе с сообществом Open Data Science проводил конкурс, участники которого состязались в точности алгоритмических прогнозов изменения числа заболевших COVID-19 за неделю для разных стран и городов. Владислав Крамаренко, сделавший лучшее публичное решение для конкурса (посмотреть его можно тут), рассказал нам о том, что может и чего не может сказать алгоритм о будущем.

Эпидемии моделируют при помощи модели SIR (от Susceptible, Infected, Recovered — то есть восприимчивых, зараженных, выздоровевших) и ее вариаций: SEIR (которая делит жертв болезни на «контактных» и зараженных людей), SIRS (которая учитывает «срок годности» иммунитета переболевших) и других. Они отличаются в основном тем, каким типам инфекций лучше подходят.

Такое моделирование можно назвать моделированием «из первых принципов» — вы определяете, с какими факторами имеете дело, определяете законы, которым эти факторы подчиняются, подбираете коэффициенты и получаете инструмент для прогноза.

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

Мы не знаем, например, какой точно у COVID-19 базовый коэффициент воспроизведения (R0) — скольких человек заражает один больной. А этот параметр для модели ключевой. Есть те, кто считает что R0 у коронавируса равен четырем, есть те, кто считает, что двум — но отклонение на единицу приводит к тому, что полученные графики очень сильно отличаются.

Можно заниматься подгонкой этих цифр, конечно, и этим много кто занимается, но ценность подобного — особенно на короткой дистанции, типа недели — сомнительна. Тот же самый базовый коэффициент воспроизведения это не абсолютная метрика, на нее влияет множество внешних причин. Где-то вводят карантин, и коэффициент должен упасть, но насколько — сказать нельзя: в разных странах это происходит по-разному, поэтому однозначно эффект карантина оценить невозможно. Кроме того, нам неизвестно точное число заболевших (это сильно завязано, в частности, на количество тестов), неизвестно количество бессимптомных носителей, и так далее. А все это тоже влияет на то, что предсказывает модель.

Я посмотрел на инструменты этого типа: открыл несколько научных статей и быстро понял, что попытка построить краткосрочный прогноз на решении дифференциальных уравнений почти безнадежна. Только один, по-моему, из участников всего конкурса, так поступил, там R0 каждый день немного меняется: его модель не самые плохие результаты показывает, но и не самые лучшие. 

Поэтому я зашел со стороны машинного обучения. Машина ничего не знает про вирусы, ничего не знает про эпидемии, она имеет дело с рядом чисел и просто делает предсказание о том, как он будет меняться дальше. В этом предсказании она будет учитывать факторы, которые вы ей дадите.

Я взял данные, которые собрали на платформе kaggle в рамках инициативы CORD-19 (COVID-19 Open Research Dataset), запущенной в марте правительством США: там есть уже размеченные данные о населении стран, площади, степени урбанизации, проценте пожилых людей, количестве курящих, данные Всемирного банка об уровне медицины: количестве врачей, медсестер, трат государства на медицину, числе тестов на коронавирус в день. Часть данных предоставили организаторы. Также помогла информация о мобильности людей от Google и уровне самоизоляции от Яндекса. Информация о числе новых случаев в России бралась с сайта Роспотребнадзора.

Затем все эти параметры по странам, вместе с данными по изменению числа заболевших за несколько дней, «скармливались» разным алгоритмам. Самыми значимыми параметрами оказались число дней с первого (десятого, сотого, тысячного) зараженного, а также изменение числа зараженных за прошлый день.

Эффективнее всего сработала модель градиентного бустинга над решающими деревьями. Она на каждом шаге оценивает данные за выбранный день в конкретном регионе (стране, области или городе) — население, площадь, урбанизацию и изменение числа зараженных за прошлый день — по какому-то параметру, чтобы в конце прийти в вершину, наиболее подходящую данным. В этой вершине может содержаться, например, количество новых случаев, обнаруженных в этот день, или процент прироста. Например, сначала модель может посмотреть, был ли введен карантин в стране. Если да, модель идет по первой ветви, если нет, то по второй. Далее спросит, прошло ли больше 30 дней после первого зараженного, и опять происходит разветвление, и так далее. Порядок этих вопросов она определяет сама, пытаясь на каждом шаге уменьшить энтропию. 

Основная проблема таких прогнозов — это плохие исходные данные. Если мусор на входе, то мусор и на выходе. Мой опыт за этот месяц показывает, что данные разных стран нельзя напрямую сравнивать, так как в каждой стране своя специфика. Где-то тестируют только тяжело больных, где-то почти всех, а где-то данные запаздывают на неделю.

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

А так — то если, например, увеличить горизонт модели с недели до года, она скорее всего просто продолжит предсказывать увеличение числа зараженных, может наверняка и за пределы населения уйти. Там никакого потолка нет, она же не знает, что ряд, который она продолжает, это число зараженных людей в популяции, которая конечна. 

Когда мы делали предсказание по странам, модели пришлось тяжело: многие из стран начали выходить на плато — а она им продолжала прибавлять, потому что не понимала, что происходит. Или наоборот: вот есть Ненецкий автономный округ, там очень долго был ровно один заболевший, а потом однажды раз — и плюс 27. Конечно, модель этого предсказать не могла. Она исправилась, но ей для этого потребовалось еще два дня.

Все прогнозы по регионам России можно посмотреть тут.

Подготовил Сергей Кузнецов

Нашли опечатку? Выделите фрагмент и нажмите Ctrl+Enter.