През последните няколко седмици бях любопитен да видя кога вероятно кривата на новите случаи на 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.