Внедрение модели машинного обучения для прогнозирования смертности от 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 в Бразилии. С другой стороны, полиномиальная линейная регрессия завышала прогнозы. Этот тип анализа следует использовать очень осторожно, поскольку мы имеем дело с серьезной проблемой здравоохранения.
Построение прогноза с использованием модели полиномиальной регрессии
Поскольку полиномиальная регрессия привела к лучшему совпадению, давайте посмотрим на график прогнозов случаев смерти:
Недооценка данных в этом случае плоха, потому что этот тип исследования можно использовать для определения государственной политики по сдерживанию пандемии. С другой стороны, переоценка может вызвать панику среди населения. Поэтому важно, помимо показа графиков с оценками, уточнить сделанные соображения и возможные недостатки модели.
Что касается данных из Бразилии, в частности, следует отметить, что у нас была большая задержка с уведомлениями, поскольку вначале тестировалось недостаточное количество людей. Кроме того, была задержка с сообщением о смертях позже. Поскольку мы рассматриваем только данные, относящиеся к количеству и датам смерти, это может быть источником потери точности.
Кроме того, можно рассмотреть другие методы для улучшения прогнозов, например, включение в модель более важных функций. Это усложнит модель и может потребовать некоторых методов разработки признаков, таких как одно горячее кодирование (если новые признаки являются категориальными переменными) и масштабирование (если новый набор данных содержит переменные со слишком разными числовыми диапазонами).