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

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

Мы изложили инструкции таким образом, чтобы их было легко модифицировать для ваших собственных анализов. Как всегда, если у вас есть вопросы, пишите нам на [email protected].

Шаг 1: Что мы хотим протестировать

Конкретные вопросы, на которые мы отвечаем здесь:

  1. Какое количество «активных случаев» следует ожидать завтра в Нью-Джерси?
  2. Какое количество смертей мы должны ожидать в Нью-Джерси завтра?

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

Чтобы построить эту модель, мы собираемся использовать общедоступный набор данных, поддерживаемый Центром системных наук и инженерии Университета Джона Хопкинса (CSSE). Данные были собраны для визуальной панели CSSE Novel Coronavirus Visual Dashboard, но опубликованы на GitHub.

В конце этой статьи мы предлагаем несколько предложений по адаптации и расширению этого подхода для других приложений, а пока продолжим наш исследовательский вопрос для Нью-Джерси.

Шаг 2. Импорт данных

Вы можете получить доступ к данным CSSE здесь. Нажав зеленую кнопку Код в верхней части экрана, можно получить доступ к данным из командной строки с помощью git clone, а также просто загрузить данные в виде zip-файла. Загрузите данные в каталог на вашем компьютере. Если вы загрузили zip-файл, вам нужно распаковать его.

Нас особенно интересует подкаталог внутри набора данных под названием csse_covid_19_daily_reports_us. Он содержит CSV-файл с данными о COVID за каждый день с тех пор, как CSSE начала отслеживать эту информацию. Мы собираемся использовать эти данные для создания набора данных временных рядов для импорта в Monument и прогнозирования будущих тенденций.

Поскольку эти данные не публикуются в виде временных рядов, мы должны преобразовать их перед импортом в Monument. Мы написали скрипт Python, который автоматизирует этот процесс.

Мы вставили весь скрипт в блок кода ниже. Он был запущен на Python 3.9, но должен работать на 3.7 и выше. Перенесите его в текстовый редактор, например Блокнот, и сохраните его с расширением файла .py. Затем вы сможете выполнить скрипт Python и получить доступ к выходному файлу, который мы будем использовать в Monument.

Прежде чем продолжить, есть два места, где вам нужно будет отредактировать код:

  1. Рядом с началом кода, где установлена ​​переменная path. Это сообщает сценарию, где вы сохранили необработанные данные CSSE.
  2. В самом конце, где мы указываем скрипту, куда сохранить выходной файл.
import glob
import pandas as pd
import os
import csv
myList = []
# Define the path to where you have saved the CSVs
path = "/path/to/your/repo/copy/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports_us/*.csv"
# In this example, we're predicting New Jersey active cases based on data from New Jersey and neighboring states.
targetStates = ['New Jersey', 'Pennsylvania', 'Delaware', 'New York']
targetColumns = ['Province_State', 'Confirmed', 'Active', 'Deaths', 'Recovered', 'Incident_Rate', 'Hospitalization_Rate', 'Mortality_Rate', 'Testing_Rate']
for fname in glob.glob(path):
    df = pd.read_csv(fname)
# Get the targetColumns for the targetStates
    targetID = [list(df['Province_State']).index(state) for state in targetStates]
    row = df.reindex(index=targetID, columns=targetColumns)
# pivot
    row = (
            row.assign(idx=row.groupby('Province_State').cumcount()).pivot(index='idx', columns='Province_State')
          )
# rename
    row.columns = [f'{y}_{x}' for x,y in row.columns]
# Put the date in, derived from the CSV name
    dateFromFilename = os.path.basename(fname).replace('.csv','')
    row['Date'] = dateFromFilename
myList.append(row)
concatList = pd.concat(myList, sort=True)
# Define where you want to save the output CSV
concatList.to_csv('/path/to/output/file.csv', index=False, header=True)

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

Примечание. Возможно, вам придется открыть CSV-файл в Excel и отсортировать данные по столбцу «Дата», чтобы убедиться, что они расположены в правильном порядке. Кроме того, если какие-либо столбцы начинаются или заканчиваются значениями Null, вам придется заменить эти начальные или конечные Null на 0 или что-то подобное. Монумент скоро представит функциональность для обработки таких ситуаций, но пока это необходимо решить до импорта данных.

Шаг 3: Построение моделей

Когда вы откроете Monument, вам нужно нажать «Новый проект» на экране приветствия. Это приведет вас в новое рабочее пространство с пустым узлом «INPUT». Нам нужно загрузить данные CSSE в этот узел, нажав кнопку «CSV» под узлом и найдя выходной файл из нашего скрипта Python.

Экран будет выглядеть так:

После нажатия «ОК» в правом нижнем углу экрана Monument автоматически создаст узел «СБОРКА МОДЕЛИ». Это рабочее пространство, которое позволяет нам отображать данные и применять алгоритмы машинного обучения, перетаскивая их на данные.

Во-первых, давайте перетащим таблетку «Дата» в область «ЦВЕТЫ (X)» диаграммы. Затем перетащите таблетку под названием «New Jersey_Active» в область «ROWS (Y)». В итоге вы получите диаграмму, подобную приведенной ниже.

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

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

Алгоритм LinReg (линейная регрессия) неплохо улавливает тренд, но немного отстает от фактических значений в период обучения. Вы можете увидеть это ясно, если вы используете ползунок в нижней части графика для увеличения.

Алгоритм ARIMA работает намного лучше, как вы можете видеть на снимке экрана ниже. (Совет: вы можете скрыть данные, которые хотите игнорировать, щелкнув метку диаграммы данных в верхней части диаграммы.)

Давайте также настроим параметры алгоритма на что-то более разумное для контекста. Мы можем сделать это, щелкнув стрелку раскрывающегося списка, которую мы видим при наведении курсора на таблетку алгоритма, и нажав «Параметры».

Очевидным местом для начала является период ретроспективного анализа, который мы изменим с 10 на 7. Период ретроспективного анализа сообщает алгоритму, сколько периодов следует учитывать при создании следующего прогноза вперед. Большинство из нас живет по стандартным 7-дневным циклам: 5 рабочих дней и 2 выходных дня. В частности, поскольку многие люди выходят из карантина и постепенно больше общаются по выходным, существует вероятность того, что эта социальная деятельность циклически влияет на уровень заражения.

Действительно, когда мы меняем период ретроспективного анализа на 7, мы видим, что частота ошибок проверки для ARIMA падает с 12,78 до 12,76. Чем ниже частота ошибок валидации, тем точнее модель — поэтому мы просто улучшили нашу модель!

Еще один параметр, который вы, возможно, захотите настроить, — это Lookahead Period. По умолчанию Monument прогнозирует на один период вперед. Мы делаем это потому, что по причинам, которые могут быть интуитивными, предсказания ближайших признаков более надежны, чем предсказания, направленные в более далекое будущее.

Вы можете экспериментировать с разными алгоритмами и различными комбинациями «независимых», сокращенно от «независимых переменных». Используйте свою интуицию, чтобы понять, какие независимые с большей вероятностью внесут свой вклад в предсказательную силу алгоритма. (В качестве крайнего примера вы могли бы, например, найти и включить набор данных о том, сколько раз «Битлз» звучали по радио каждый день, и предоставить его алгоритму. Алгоритм попытается использовать эти данные, но он вряд ли улучшить вашу модель!)

Вы также можете перетащить «New Jersey_Deaths» — или любую другую таблетку данных, которую вы хотите спрогнозировать! — и применить к ней алгоритмы. Для разных наборов данных больше подходят разные алгоритмы.

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

Вы можете увидеть значения, полученные путем изменения стиля просмотра на «сетку». Вы также можете экспортировать результаты в формате CSV, щелкнув узел OUTPUT в конвейере.

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

  • Наша модель LSTM для активных случаев предсказала 213 522, а фактическое значение составило 214 809. Мы были в пределах 1287 случаев — или 0,5% — от фактического.
  • Наша модель LinReg для смертей предсказывала 16 497 смертей, в то время как на самом деле было 16 522. Мы были в пределах 25 — или 0,2% — от фактического.

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

Вы можете увидеть фактические значения, указанные в репозитории CSSE — или в вашей локальной копии.

Вывод

Это было введением в использование данных CSSE для построения модели COVID для Нью-Джерси с использованием как данных Нью-Джерси, так и данных из соседних штатов.

Существует множество способов адаптации и расширения модели, в том числе:

  • Выберите новый набор «целевых» и «соседних состояний».
  • Расширьте значение слова «соседний», чтобы учесть общие коридоры для путешествий (например, включите округ Колумбия и Калифорнию в модель для Нью-Йорка),
  • Добавьте столбец в набор входных данных, который является вычислением «ежедневной скорости роста активных случаев».
  • Имея более подробные данные, вы также можете прогнозировать уровень заражения на уровне округа или района.

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

Поскольку вы работаете каждый день, вы захотите git clone репозиторий CSSE или каждый день загружать файлы в виде zip-файла, чтобы получать последние данные перед созданием своих моделей.

Мы надеемся, что вы узнали немного о том, как использовать Monument, и почувствовали себя способными создавать свои собственные модели COVID.

Хотите узнать больше о монументе? Закажите бесплатный ознакомительный звонок в Zoom здесь.