Компания Splunk (SPLK) недавно выпустила версию своей интерактивной информационной панели Covid-19 с открытым исходным кодом [https://covid-19.splunkforgood.com/coronavirus__covid_19_], которая использует данные, предоставленные Университетом Джона Хопкинса, для анализа в реальном времени и настройка.

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

Эти две модели можно комбинировать для создания прогноза ожидаемых подтвержденных случаев на основе тенденции смертности на протяжении всего временного ряда. Причиной такого дизайна является то, что другие исследователи связали смертность с уровнем заражения. Например: на каждую смерть от Covid-19 мы можем ожидать около 80–100 случаев заражения, предполагая, что уровень смертности составляет около 4%. Это недавно обсуждалось в 60-минутном интервью с профессором Габриэлем Леунгом, который руководил реагированием на вирус атипичной пневмонии 2003 года.

Некоторые из наиболее интересных анализов можно выполнить, используя данные временных рядов из пользовательского файла, найденного в приложении Splunk с открытым исходным кодом: https://github.com/splunk/corona_virus/tree/master/lookups. Файл combined_jhu.csv объединяет подтвержденные случаи смерти и подтвержденные случаи, что упрощает создание прогнозов и контролируемых моделей машинного обучения.

Для построения модели прогнозирования я воспользуюсь интеллектуальным помощником прогнозирования, который поможет настроить параметры алгоритма State Space Forecast. Этот алгоритм является пользовательской версией фильтра Калмана и основан на некоторых из тех же идей, что и алгоритм Саримакс. Цель этого эксперимента — определить тенденцию смертности и спрогнозировать эту тенденцию на следующие 7 дней. В целях тестирования и проверки мы будем хранить данные алгоритма за 3 дня, чтобы увидеть, насколько хорошо прогноз модели соответствует реальным данным. Имейте в виду, что это предназначено только для экспериментального тестирования и не предназначено для людей, принимающих важные решения.

Следующий SPL можно использовать для приведения данных Covid-19 в правильный формат и заполнения любых отсутствующих дат перед агрегированием для США.

| inputlookup combined_jhu.csv where Country="US" 
| eval _time=strptime(_time,"%m-%d-%y") 
| chart sum(Confirmed) as Confirmed sum(Deaths) as Deaths by _time 
| makecontinuous _time span=1d
| fillnull value=0.0
| addtotals Confirmed fieldname=ConfirmedCases 
| addtotals Deaths fieldname=ConfirmedDeaths

Используя параметры интеллектуального помощника по прогнозированию, мы можем настроить алгоритм прогнозирования на основе параметров, которые мы обсуждали выше.

Модель прогноза, созданная Splunk, является довольно точной моделью при рассмотрении значений R2 и RMSE. Эта модель создаст 7 точек данных (дней) в будущем, которые можно использовать в качестве входных данных для модели, которая прогнозирует количество подтвержденных случаев на основе подтвержденных смертей и увеличения во времени.

Модель на основе регрессии можно создать с помощью классического помощника в MLTK Splunk. Используя раскрывающиеся списки, вы можете использовать любой алгоритм регрессии, но для простоты я буду использовать линейную регрессию. Это также легче всего интерпретировать при анализе файла модели.

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

Можно внести коррективы в разделение обучения/тестирования, чтобы повысить способность модели выявлять недавние изменения в уровне заражения и смертности от Covid-19. Будьте осторожны с переобучением модели, поскольку взаимосвязь между этими переменными может меняться в зависимости от страны и типов политики, которую они реализуют, чтобы остановить распространение Covid-19. Италия, например, имеет гораздо более высокий уровень смертности, что меняет отношение (коэффициент) между двумя переменными.

Глядя на сводную информацию для файла модели, функция подтвержденных смертей имеет вес около 64,8. Для модели это означает, что на каждую 1 смерть мы можем ожидать около 68 инфекций или подтвержденных случаев. Мы отфильтровали данные для США, чтобы можно было сделать другие выводы для других стран, адаптировав запрос. Зная эту информацию, мы теперь можем использовать модель прогнозирования и использовать модель регрессии для предсказания или прогнозирования ожидаемого количества подтвержденных случаев.

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

| inputlookup combined_jhu.csv where Country="US" 
| eval _time=strptime(_time,"%m-%d-%y") 
| chart sum(Confirmed) as Confirmed sum(Deaths) as Deaths by _time 
| makecontinuous _time span=1d
| fillnull value=0.0
| addtotals Confirmed fieldname=ConfirmedCases 
| addtotals Deaths fieldname=ConfirmedDeaths 
| fit LinearRegression "ConfirmedCases" from "_time" "ConfirmedDeaths" fit_intercept=false into "pre_state_covid19_lr_death_confirmed"
| fit StateSpaceForecast "ConfirmedDeaths" output_metadata=true holdback=3 forecast_k=7day into "statespace_covid_forecast_deaths"
| rename ConfirmedDeaths as ActualDeaths, "predicted(ConfirmedDeaths)" as ConfirmedDeaths | eval ConfirmedDeaths = round(ConfirmedDeaths,0)
| fields _time ConfirmedCases ConfirmedDeaths ActualDeaths
| apply pre_state_covid19_lr_death_confirmed
| rename "predicted(ConfirmedCases)" as PredictedCases
| eval PredictedCases = round(PredictedCases,0)
| fields _time *

Внося небольшие изменения в SPL, вы можете подставлять токены в панель управления и искать. Теперь каждую страну можно прогнозировать на лету для потенциального самоанализа того, насколько хорошо работает политика каждой страны по борьбе с Covid-19.

На момент написания этого сообщения ожидается, что 1 апреля в Соединенных Штатах будет около 400 000 подтвержденных случаев. Ожидается, что глобальное количество подтвержденных случаев приблизится к 1 миллиону на основе этих двух моделей.

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