NeuralProphet может делать прогнозы для временных рядов с субдневными наблюдениями, если передать в него датафрейм со временными метками в столбце ds. Формат временных меток должен быть YYYY-MM-DD HH:MM:SS - см. пример csv файла здесь. Когда используются субдневные данные, дневная сезонность будет автоматически учитываться.
В этом разделе мы применяем NeuralProphet к данным с разрешением в 5 минут (ежедневные температуры в Йосемити).
if"google.colab"instr(get_ipython()):# Удаляем предустановленные пакеты из Colab, чтобы избежать конфликтов!pip uninstall -y torch notebook notebook_shim tensorflow tensorflow-datasets prophet torchaudio torchdata torchtext torchvision!pip install git+https://github.com/ourownstory/neural_prophet.git@examples_cond_seas # может занять некоторое время#!pip install neuralprophet # намного быстрее, но может не иметь последних обновлений/исправлений ошибокimport pandas as pdfrom neuralprophet import NeuralProphet, set_log_level, df_utilsset_log_level("ERROR")
Теперь мы попытаемся предсказать погоду на следующие 7 дней. Разрешение данных 5 минут означает, что у нас есть 60/5*24=288 значений в день. Таким образом, мы хотим сделать прогноз на 7*288 периодов вперёд.
Используя здравый смысл, мы устанавливаем:
Во-первых, мы отключаем недельную сезонность, поскольку природа не следует календарю человеческой недели.
Во-вторых, мы отключаем точки изменения, поскольку набор данных содержит только данные за два месяца.
Повседневная сезонность кажется логичной, если учитывать, что время записывается в формате GMT, тогда как местное время в Йосемити — GMT-8
Улучшение тренда и сезонности
Поскольку у нас записано 288 ежедневных значений, мы можем увеличить гибкость daily_seasonality, без риска переобучения.
Далее, нам, возможно, следует пересмотреть наше решение об отключении точек изменения, поскольку данные явно показывают изменения тренда, что типично для погоды. Мы вносим следующие изменения:
увеличиваем changepoints_range, так как мы делаем краткосрочный прогноз
увеличиваем n_changepoints, чтобы позволить адаптироваться к внезапным изменениям тренда
тщательно регулируем точки изменения тренда, устанавливая trend_reg, чтобы избежать переобучения