Привет от ODS. Мы откликнулись на идею tutu.ru поработать с их датасетом пассажиропотока РФ. И если в посте Milfgard огромная таблица выводов и научпоп, то мы хотим рассказать что под капотом.
Что, опять очередной пост про COVID-19? Да, но нет. Нам это было интересно именно с точки зрения математических методов и работы с интересным набором данных. Прежде, чем вы увидите под катом красивые картинки и графики, я обязан сказать несколько вещей:
- любое моделирование — это очень сложный процесс, внутри которого невероятное количество ЕСЛИ и ПРЕДПОЛОЖИМ. Мы о них расскажем.
- те, кто работал над этой статьей — не эпидемиологи или вирусологи. Мы просто группа любителей теории графов, практикующих методы моделирования сложных систем. Забавно, но именно в биоинформатике сейчас происходит наиболее существенный прогресс этой узкой области математики. Поэтому мы пониманием язык биологов, хоть и не умеем правильно обосновывать эпидемиологические модели и делать медицинские заключения.
- наша симуляция всего лишь распространение сферического коня в вакууме по территории РФ. Не стоит относиться к этому серьезно, но стоит задуматься об общей картине. Она определенно интересная.
- эта статья не существовала бы без датасета tutu.ru, за что им огромное спасибо.
- мы хотим пригласить других заинтересованных исследователей в ODS.ai и под инициативой ML for Social Good (канал #ml4sg в ODS) вместе улучшать эту модель, чтобы получить опыт и возможность применять ее в будущем. Все интересные задачи, которые мы еще не решили, будут помечены в статье как TODO.
Под катом — результаты нашего марш-броска на датасет.
Датасет пассажиропотока
Так как рабочих рук у нас было не слишком много, мы старались разделить направления работы, покрывая как можно больше возможных задач.
Лучше всего иллюстрирует датасет визуализация Вадима Сафронова (safronov).
Самое интересное, что мы нашли:
- В России есть 5 городов, на которые приходится половина всех перелетов: Москва, Санкт-Петербург, Симферополь, Краснодар, Сочи.
- На 26 направлений из 9736 (это все виды транспорта) приходится 80% всего пассажиропотока, а всего в датасете — 951 город.
Вывод: у нас сильно централизованная транспортная система и пассажиропоток. Это негативно влияет на распространение с одной стороны, но с другой позволяет быстро пресечь распространение болезни.
TODO: вся работа шла с пассажиропотоком за один месяц, что не позволяет говорить о какой-либо сезонности, хотя она определенно должна присутствовать. Было бы здорово добавить примерные коэффициенты сезонности к данным, которые можно вытащить из статистики рынка путешествий.
Модель
Мы решили использовать практически самое простое семейство эпидемиологических моделей: SIR. Но их конечно сильно больше. С помощью таких моделей можно прогнозировать, сколько людей заразятся какой-то болезнью в закрытой популяции, сколько восстановятся после нее и как быстро.
Для удобства восприятия результатов мы ввели для симуляции два основных параметра (изменяя которые смотрели на результаты):
contact_rate
можно рассматривать как скорость распространения болезни. Больше значение параметра -> быстрее распространяется болезнь.recovery_rate
— параметр, отвечающий за скорость выздоровления.
Для каждой пары "город отправления А" — "город прибытия Б" мы сделали следующий цикл:
- В день 0 у нас есть начальное число зараженных в А.
- Распространяем болезнь на 1 день в А (тут мы и используем SIR-модель).
- Считаем процент зараженных от численности населения А.
- Считаем число зараженных в пассажиропотоке из А в Б, просто используя процент заболевших из шага 2.
- В Б пересчитываем число инфицированных для запуска модели на следующий день. Кто-то приехал из А в Б зараженный, а значит и число зараженных для запуска модели внутри Б изменилось.
Так мы делаем на каждый день для каждого из 1000 городов нашего датасета. Повторяем в течении полугода.
Данные по начальному числу зараженных брали на 24 марта 2020ого года.
И вот настал тот самый момент, когда всплывают все ЕСЛИ, которые нам пришлось ввести.
- Сравнивая модели, мы предполагали, что социальная изоляция уменьшает contact_rate, что кажется вполне логичным.
- Мы НЕ пытались подогнать параметры модели под статистику реального распространения. Подобрали их лишь примерно, поэтому реальные числа можно воспринимать только для оценки порядка и динамики заболевания, а не как абсолютное значение.
- Мы НЕ учитывали возрастное распределение в каждом регионе. Это тоже влияет на распространение вируса.
- Мы НЕ учитывали вместимость больничных коек, смертность и другие вещи. Нам были интереснее маршруты распространения.
TODO: мы могли бы учитывать и передачу вируса внутри транспортного средства. Т.e. зная пассажиропоток из А в Б, мы можем посчитать, сколько требуется самолетов/поездов и для каждого транспортного средства произвести свой запуск модели внутри этого средства. Село 2 больных и 98 здоровых -> вышло 10 больных и 90 здоровых. Кроме того, задача оценки кросс-заражения между пассажирами идентична той, которую поручено исполнить операторами связи.
Результаты
Легенда:
- Размер метки на карте показывает население этого города. Больше кружок — больше людей.
- На карте не отображаются города, где нет ни одного заболевшего. Поэтому если город появился — значит там кто-то заболел.
- Цветом обозначается число заболевших. От зеленого (мало заболевших) до красного (много заболевших).
Мы провели два основных кейса на полгода вперед.
TODO: было бы интересно сделать симуляцию с возможностью закрыть часть маршрутов в любое время.
Первый кейс: ничто не происходит, никто не реагирует.
Все полеты происходят как обычно, в жизни людей ничего не меняется.
contact_rate
= 0.27
recovery_rate
= 0.05
Вывод: огромное число заболевших, болезнь не удается изолировать, страдают даже отдаленные от центральной части РФ города.Наблюдается восстановление в небольших городах к концу симуляции.
Второй кейс: социальная изоляция и уменьшение перемещений.
Во втором кейсе мы ввели социальную изоляция (понизили contact_rate), весь пассажиропоток снизили до 10% от обычных значений.
contact_rate
= 0.21
recovery_rate
= 0.05
Вывод: социальная изоляция вместе с ограничением перемещений работает, как уже было сказано огромное число раз. Она позволяет снизить пик и растянуть заболевание на более длительный срок, тем самым не перегружая медицинскую систему. Видно, что удаленные от центральной части РФ регионы в этом случае страдают меньше. Также, учитывая высокую централизацию транспортных потоков, жители крупных городов несут бОльшую ответственность и подвергаются бОльшей опасности. Поэтому кажутся правильными совсем недавние меры, принятые в Москве.
Итоги
Пожалуйста, соблюдайте рекомендации ВОЗ, чаще мойте руки и следите за собой. Снизьте число социальных контактов и путешествий.
Также мы хотели бы обратиться к операторам связи и крупным компаниям на транспортном рынке с просьбой делиться анонимными открытыми данными. Часто это может привести к приятному сотрудничеству и интересным исследованиям.
Было сделано распределенной командой ODS из Берлина, Санкт-Петербурга, Лиссабона и Москвы в канале #ml4sg. Отдельное спасибо всем участникам проекта и всем заинтересовавшимся.
Все данные и код есть в репозитории.
Берегите себя. Ваше ODS.
Автор: Anton Repushko