Внедрение модели машинного обучения для прогнозирования смертности от COVID-19 в Бразилии

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

Данные о COVID-19 являются хорошим источником данных для практического анализа данных и концепций машинного обучения, поскольку у нас есть много доступных данных. Это хорошо для реализации модели машинного обучения.

Данные, использованные в этом исследовании, доступны на kaggle. Код решения, которое я опишу в этом посте, можно найти здесь.

Основным набором данных является файл covid_19_data.csv в папке. Этот файл постоянно обновляется и будет рассматриваться в части анализа данных этого исследования. В этом исследовании набор данных обновлял точки данных до 15.11.2020.

1 — Чтение данных и проверка статуса мировых дел

Знакомство с набором данных:

Это набор данных с 8 столбцами и 156 292 строками:

Набор данных изначально имеет 8 столбцов:

  • Сно — Серийный номер
  • ObservationDate — Дата наблюдения в MM/DD/YYYY
  • Провинция/Штат — Провинция или штат наблюдения
  • Страна/регион — Страна наблюдения
  • Последнее обновление — время в формате UTC, когда строка обновляется для данной провинции или страны. (Не стандартизировано, поэтому перед использованием очистите его)
  • Подтверждено — совокупное количество подтвержденных случаев до этой даты.
  • Deaths — Совокупное количество смертей до этой даты
  • Выздоровевшие — совокупное количество выздоровевших случаев до этой даты.

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

Визуализация статуса на последнюю дату регистрации в наборе данных:

Итак, на 15.11.2020 в мире зарегистрировано 54 370 186 случаев COVID-19, из них: 64,3% выздоровели, 33,3% были активны и 2,42% закончились летальным исходом.

2 — Создание нового фрейма данных для случаев из Бразилии

Столбец активных случаев уже находится в этом новом фрейме данных, поскольку мы сохранили исходный файл с этой новой информацией. Теперь у нас есть набор данных с 9 столбцами и 4964 строками.

Статус случаев COVID-19 в Бразилии на последнюю дату, зарегистрированную в наборе данных, был следующим:

По сравнению с мировыми заболеваемостью уровень смертности от COVID-19 был несколько выше: 2,83%.

3 — данные EDA по Бразилии

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

Типы переменных

Столбец ObservationDate должен быть преобразован в дату и время, чтобы мы могли визуализировать эволюцию во времени:

Повторяющиеся значения

Проверка дублирующихся строк:

Нулевые значения

В столбце «Провинция/Штат» есть 85 строк с нулевыми значениями. Проверка всех состояний, присутствующих в наборе данных:

Это тип данных, которые невозможно легко заменить, поскольку это связано с местом, где данные были собраны. Поскольку есть категория «Неизвестно», значения NAN будут заменены на «Неизвестно»:

Динамика подтвержденных случаев по месяцам

Для этого я создал новый столбец во фрейме данных с информацией, собранной по месяцам (изначально она собиралась по дате наблюдения).

Для корректного отображения информации фрейм данных был отсортирован по дате. Сюжет показан ниже:

Эволюция по дате наблюдения

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

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

4 — Модель прогнозирования смертности от COVID-19 в Бразилии

Для реализации модели машинного обучения для прогнозирования случаев смерти в Бразилии был рассмотрен новый набор данных: time_series_covid_19_deaths.csv. Это полезный набор данных для этого случая, так как он содержит только данные, необходимые для реализации модели.

В этом файле случаи смерти указаны в столбцах, каждый столбец соответствует дате наблюдения.

Подготовка данных для модели

Столбцы с 0 по 4 содержат ненужные данные для нашей модели машинного обучения, поэтому будут выбраны только столбцы с 5 до последнего:

Следующим шагом является создание матриц X (входная переменная) и y (что я хочу предсказать). В этом случае y будет матрицей, содержащей числа смертей, а X будет хранить даты.

Эти матрицы генерируются путем преобразования исходных данных в массивы numpy, как показано ниже:

Наконец, была создана матрица прогнозов для прогнозирования случаев смерти на следующие 15 дней. В данном случае имеются в виду прогнозы на вторую половину ноября, так как рассматриваемый для данного исследования набор данных имел информацию до 15.11.2020.

Разделение модели на обучение и тестирование

Используя scikit-learn, 15% набора данных будут разделены как тестовые данные, а остальные будут данными обучения, которые будут использоваться для обучения модели.

Линейная регрессия

Самый простой способ выполнения регрессии модели с непрерывными переменными — это линейная регрессия. Он уложит данные в прямую линию (уравнение показано ниже).

Линейная регрессия — это частный случай полиномиальной регрессии, который будет показан в следующем разделе.

Реализация модели:

Проверка предсказаний на сюжете:

Полиномиальная регрессия

Если у вас сложная взаимосвязь между данными, возможно, лучше всего подойдет модель полиномиальной регрессии. Следует отметить, что это по-прежнему линейная регрессия, но допускает нелинейную связь между X (зависимая переменная) и Y (независимая переменная). Для этого исследования был рассмотрен полином четвертого порядка, как показано в уравнении ниже:

Реализация модели:

Проверка результатов модели:

Оценка показателей

Ошибки для модели линейной регрессии:

Ошибка для модели полиномиальной линейной регрессии:

MAE (средняя абсолютная ошибка) измеряет среднюю величину ошибок в наборе прогнозов.

В RMSE (среднеквадратичная ошибка) ошибки представляют собой среднеквадратичное значение. В этом случае большим ошибкам присваивается гораздо больший вес. Это означает, что ошибка в 50 единиц наказывается больше, чем, например, ошибка в 5 единиц.

Полиномиальная линейная регрессия продемонстрировала лучшее соответствие, поскольку MAE и RMSE были ниже, чем значения для линейной регрессии. Следует отметить, что линейная регрессия недооценила смертность от COVID-19 в Бразилии. С другой стороны, полиномиальная линейная регрессия завышала прогнозы. Этот тип анализа следует использовать очень осторожно, поскольку мы имеем дело с серьезной проблемой здравоохранения.

Построение прогноза с использованием модели полиномиальной регрессии

Поскольку полиномиальная регрессия привела к лучшему совпадению, давайте посмотрим на график прогнозов случаев смерти:

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

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

Кроме того, можно рассмотреть другие методы для улучшения прогнозов, например, включение в модель более важных функций. Это усложнит модель и может потребовать некоторых методов разработки признаков, таких как одно горячее кодирование (если новые признаки являются категориальными переменными) и масштабирование (если новый набор данных содержит переменные со слишком разными числовыми диапазонами).