Простой сценарий Python фундаментальной эпидемиологической модели для демонстрации влияния социального дистанцирования и того, что произойдет, если блокировка будет снята слишком быстро.
Примечание редакции: Towards Data Science - это издание Medium, в основном основанное на изучении науки о данных и машинного обучения. Мы не являемся специалистами в области здравоохранения или эпидемиологами, и мнения, изложенные в этой статье, не следует интерпретировать как профессиональные советы. Чтобы узнать больше о пандемии коронавируса, нажмите здесь.
Вступление
COVID-19 - величайший глобальный кризис со времен Второй мировой войны и крупнейшая глобальная пандемия со времен испанского гриппа 1918–1919 годов надвигается на нас сегодня. Все смотрят на ежедневный рост числа погибших и быстрое экспоненциальное распространение этого нового штамма вируса.
Специалисты по анализу данных, как и многие люди из других слоев общества, также могут испытывать беспокойство. Они также могут захотеть увидеть, смогут ли они каким-либо образом внести свой вклад в борьбу с этим очень заразным патогеном.
У специалистов по обработке данных и специалистов по статистическому моделированию может быть множество возможностей внести свой вклад в это дело. Практически во всех случаях им следует тесно сотрудничать с экспертами в предметной области - вирусологами, медицинскими работниками, эпидемиологами. Без такого активного сотрудничества и совместной работы опасно и бессмысленно приступать к проекту прогнозного моделирования или прогнозирования распространения заболевания и усилий по смягчению его последствий.
Как утверждает широко популярный сайт моделирования данных Five-Thirty-Eight, чертовски сложно создать точную модель COVID-19.
Однако, даже не углубляясь в реальное прогнозное моделирование, можно продемонстрировать эффективность единственного основного оружия, которое у всех нас есть против вируса COVID-19 - « социальное дистанцирование » - простым программным подходом.
В этой статье мы покажем, как построить такую демонстрацию на Python, следуя простой, но фундаментальной эпидемиологической теории.
Это не попытка построить какую-либо модель прогнозирования. Никакие фактические данные, кроме вымышленных чисел, не будут использоваться для создания графиков и визуализаций.
Цель состоит в том, чтобы показать, что с помощью только базовой динамической модели можно понять ключевые концепции, такие как выравнивание кривой, коллективный иммунитет и слишком быстрое снятие блокировки . И вы можете запрограммировать такую модель с помощью элементарного Python и математических знаний.
Однако, даже не углубляясь в реальное прогнозное моделирование, можно продемонстрировать эффективность единственного основного оружия, которое у всех нас есть против вируса COVID-19 - «социального дистанцирования» - с помощью простого программного подхода.
(Эпидемиологическая) модель и класс Python
Мы создали класс Python под названием SEIRclass
на основе модели базовой эпидемиологии SEIR. Скрипт находится в SEIRclass.py
файле в моем репозитории Github, и для этой демонстрации необходимо импортировать класс.
Модель SEIR
Модель SEIR делит все население на четыре группы:
- Восприимчивые: люди, которые никогда не были инфицированы и у которых еще не выработался иммунитет.
- Выявлено: люди, которые подверглись воздействию вируса, но не проявляли никаких симптомов или не могут быть названы "инфицированными". Вирус находится в стадии инкубации.
- Зараженные: доля населения, которая активно инфицирована, проявляет легкие или тяжелые симптомы и может нуждаться в госпитализации. Это категория, которая имеет наибольшее значение для планирования возможностей здравоохранения, и почти все смертельные случаи происходят из этой группы населения.
- Выздоровел: люди по ту сторону кошмара! Тех, кто заразился и вылечился от этого. Обратите внимание, что в этой простой модели предполагается, что у этих людей есть «постоянный иммунитет», то есть они не могут снова вернуться в уязвимое или инфицированное население.
Справочная статья
Идея вдохновлена этой статьей, в которой четко излагаются эпидемиологическая модель и динамические уравнения: Социальное дистанцирование для замедления распространения коронавируса.
Вот репо на Github, соответствующее статье выше: https://github.com/dgoldman0/socialdistancing.
Динамические уравнения
Практически все компартментные модели распространения инфекционных заболеваний носят динамический характер, то есть описываются набором дифференциальных уравнений первого / второго порядка со временем как независимой переменной. Основные динамические уравнения следующие:
Следует отметить, что знаменитое число репродукции R0 - это соотношение бета и гаммы данной модели.
Здесь предполагается, что все коэффициенты (альфа, бета, гамма и т. Д.) Постоянны. На самом деле инфекционность возбудителя со временем может меняться.
Первые два уравнения немного изменяются с введением четвертого параметра 𝜌, который представляет социальное смешение. Чем выше 𝜌, тем меньше социального дистанцирования. Может иметь значение от 0 до 1.
Вот пара статей, показывающих, как программирование на Python можно использовать для численного решения таких динамических систем уравнений.
Основной класс Python
Определение частичного класса показано ниже. Тестовый блокнот Jupyter можно найти здесь. Класс модели - здесь. Они выпускаются под лицензией MIT, поэтому вам рекомендуется загрузить их и поиграть, улучшить, добавив другие полезные методы и т. Д.
Различные методы
В этом классе мы определяем различные служебные методы,
reinitialize
: повторно инициализирует модель с новыми значениями (совокупности)set_params
: устанавливает значения динамического параметра.reset
: сбрасывает внутренние списки в нулевое состояние, то есть в начальные значения.run
: запускает динамическое моделирование в течение заданного промежутка времени (с заданной дельтой временного шага).plot
: отображает основные результаты моделирования на оси времени.
Простая демонстрация
Динамическое моделирование и построение графиков
Начнем с импорта класса и создания объекта в качестве экземпляра.
Затем мы можем запустить динамическое моделирование в течение некоторого периода времени - скажем, 90 единиц времени. Это можно представить как 90 дней или любой другой отрезок времени.
Мы можем построить результат этого моделирования просто,
Сглаживание кривой - как социальное дистанцирование влияет на пик
Затем мы запускаем моделирование различных факторов социального дистанцирования, чтобы изучить их влияние на пик кривых. Обратите внимание, что здесь более высокое значение означает меньшее социальное дистанцирование, т.е. более высокое социальное взаимодействие / взаимодействие.
Мы наблюдаем, что более высокая степень социального смешения приводит к более высокому пику доли инфицированного населения, что потенциально может привести к перегрузке возможностей системы здравоохранения.
Настройка социального дистанцирования - ранний конец блокировки
Теперь мы исследуем, что происходит с досрочным прекращением изоляции или мерами« сидения дома », которые направлены на сокращение социального смешения, то есть на усиление социального дистанцирования.
Мы начинаем с определенного значения фактора социального дистанцирования, позволяем ему работать в течение определенного времени, а затем ослабляем нормы, то есть увеличиваем значение фактора социального дистанцирования, и смотрим, что происходит с инфицированной фракцией населения. Мы увидим появление второго пика. В зависимости от различных социальных и эпидемиологических факторов этот второй пик может быть выше первого.
Для этого исследования мы будем использовать две модели SEIR,
- Первая модель будет работать в течение определенного времени с низким коэффициентом социального смешения (строгая норма социального дистанцирования).
- Окончательные значения доли населения из этой модели будут введены во вторую модель.
- Вторая модель будет работать с более высоким значением социального смешения (смягченная норма социального дистанцирования).
Оптимизация периодов блокировки может снизить все пики
После того, как закон «сидеть дома» закончится и нормы социального дистанцирования будут несколько смягчены, неизбежно наступит еще один пик инфицированных. Вопрос в том, насколько это будет высоко и может ли более длительная изоляция как-то смягчить это.
С помощью этой простой модели мы можем наблюдать, что длительное выполнение первой «блокировки» потенциально может снизить абсолютное значение обоих пиков - одного во время блокировки и того, который неизбежно наступает после окончания блокировки.
Это связано с воздействием повышенного «коллективного иммунитета», т. Е. при более длительной изоляции уязвимая популяция постепенно медленно уменьшается с течением времени (без с резким пиком) . Таким образом, когда блокировка ослаблена, население становится менее восприимчивым к заражению вирусом!
Мы также отмечаем, что по прошествии 150 дней уровень восприимчивой фракции существенно не снижается, то есть не наблюдается видимого снижения со 150 дней до 180 дней и 210 дней. Следовательно, если целью является повышение коллективного иммунитета, продление блокировки может быть эффективным только до определенного периода.
В приведенном выше примере «корректировки социального дистанцирования» второй пик составил 0,05, т. Е. 5% населения заразилось. Здесь мы показываем, что продление первой блокировки может снизить оба пика. Фактически, мы видим, что первый пик в этом эксперименте выше и составляет всего около 0,018 или 1,8%.
Конечно, этот сценарий зависит от первоначального уровня заражения, параметров заболевания и социальной динамики. Это лишь один из возможных результатов, который можно выделить в нашей программе.
Это демонстрация, а не реальная модель COVID-19.
Опять же, эта работа была сделана, чтобы показать, как можно запрограммировать широко используемую динамическую модель эпидемиологии с помощью простого скрипта Python.
После того, как такая программная модель построена, многие популярные фразы, такие как «выравнивание кривой», «коллективный иммунитет» и «всплеск из-за раннего прекращения блокировки 'можно оценить, поиграв с параметрами модели и настройками симуляции.
Цель состоит в том, чтобы показать, что с помощью только базовой динамической модели можно понять ключевые концепции, такие как «сглаживание кривой», «коллективный иммунитет »и« слишком быстрое снятие блокировки ». И вы можете запрограммировать такую модель с элементарными знаниями Python и математикой.
Модель предельно упрощена. Отсутствует геопространственное взаимодействие, которое лежит в основе самых передовых моделей инфекционных заболеваний, использующих алгоритмы теории графов.
Модель не имеет какой-либо статистической оценки, которая лежит в основе оценки параметров (альфа, бета, гамма и т. Д.) Для запуска реалистичного моделирования.
Поэтому, пожалуйста, не воспринимайте эту модель как связанную с фактическими данными и прогнозами, относящимися к текущей ситуации, связанной с COVID-19. Есть много отличных ресурсов, чтобы проконсультироваться по этому поводу.
Однако даже такой упрощенный программный подход достаточно эффективен для создания ключевых визуализаций, которые отражают идею «не выходите из дома» и «сглаживают кривую».
Отличный (но длинный) фрагмент с отличной воспроизводимой анимацией JavaScript здесь,
Что будет дальше? Будущее COVID-19, объяснение с помощью игровых симуляторов
«Единственное, чего следует бояться, - это самого страха - глупый совет. Конечно, не копите туалетную бумагу, но если политики опасаются… ncase.me »
Опять же, тестовый ноутбук Jupyter можно найти здесь. Класс модели - здесь. Они выпускаются под лицензией MIT, поэтому вам рекомендуется скачать их и поиграть с ними.
Будьте в безопасности, все!
Примечание автора: Я полупроводниковый технолог, заинтересованный в применении науки о данных и машинного обучения для решения различных проблем, связанных с моей областью. У меня нет опыта или глубоких знаний в области медицины, молекулярной биологии, эпидемиологии или чего-либо подобного, связанного с COVID-19. Пожалуйста, не присылайте мне электронные письма с таким запросом.
Кроме того, вы можете проверить в репозиториях GitHub автора код, идеи и ресурсы по машинному обучению и науке о данных. Если вы, как и я, увлечены искусственным интеллектом / машинным обучением / наукой о данных, пожалуйста, не стесняйтесь добавить меня в LinkedIn или подписаться на меня в Twitter.