През последните няколко седмици бях любопитен да видя кога вероятно кривата на новите случаи на covid-19 ще бъде изравнена. Интересувах се от решение, при което мога да имам едно табло за управление с ключови показатели за covid-19 и евентуално да прогнозирам низходящата крива на хиперболата. Това ме подтикна да започна да събирам данни за публикуваните нови случаи, излекувани и починали.

Затова създадох уеб интерфейс, използвайки AWS API Gateway и AWS Lambda за въвеждане на нови публикувани данни.

Данните от подаването на формуляра се преобразуват в csv, който се качва в AWS S3.

"event_day","weekday","cases","recoveries","deaths"
2020-04-29,"wednesday",549,148,9

S3 контейнерът се използва като езеро с данни, така че AWS Athena да може да се използва за запитване на данните чрез стандартен SQL. Събитието за качване на csv файла в s3 контейнер задейства работен поток AWS Stepfunction, който:

  • Изпълнява задание за обхождане на AWS Glue, за да създаде athena дял за наскоро актуализирания csv.
  • Обновете Spice DataSet в AWS Quicksight Dashboard

Прогнозиране с Facebook Prophet

Въпреки че прогнозирането на ML insights беше активирано за новите случаи, забелязах, че алгоритъмът не е гъвкав с тенденциите на несигурност. Намерих Facebook prophet като невероятен модел за прогнозиране на стойности на времеви серии и наистина лесен за интегриране с моя набор от данни. Prophet изисква DataFrame с две колони:

  • ds с тип datetime
  • y, което е числова стойност, която трябва да бъде предвидена
  • ширина на интервала от 0,90 (интервал на несигурност от 90%)

Резултатът от прогнозата се качва в контейнера s3, който задейства същата стъпкова функция, описана по-горе, за създаване на таблица Athena за анализ на Quicksight.

from io import StringIO
csv_buffer = StringIO()
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(14).to_csv(csv_buffer, index=False)
s3_client.upload(
  bucket, 'prediction/output.csv', csv_buffer.getvalue()
)

Вградено табло за управление на AWS Quicksight

Втората фаза на решението е визуално анализиране на набора от данни с AWS Quicksight. Quicksight ML insights също беше активиран за прогнозиране на случаи на covid-19 за следващите дни и сравняване на прогнозата с набора от данни от prophet.

Вграденото табло за управление и функциите за ML insight изискват „корпоративната версия да е фактически безплатна“ за един потребител.

Анализът на Quicksight беше запазен като табло за управление, което след това беше вградено в html страница с помощта на quicksight-embedded-sdk, както е показано по-долу:

Като изключим най-скоро публикувания брой нови случаи (462), които се отклоняват от събраните по-рано данни (557, 561, 567…), установихме, че прогнозата на пророка е повече и общата цена на облака е по-малко от $2.