Мультипликативная Сезонность

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

if "google.colab" in str(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 pd
from neuralprophet import NeuralProphet, set_log_level, df_utils

set_log_level("ERROR")
data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
df = pd.read_csv(data_location + "air_passengers.csv")
m = NeuralProphet()
metrics = m.fit(df, freq="MS")
m.set_plotting_backend("plotly-static")
future = m.make_future_dataframe(df, periods=50, n_historic_predictions=len(df))
forecast = m.predict(future)
m.plot(forecast)
# m.plot_parameters()

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

NeuralProphet может моделировать мультипликативную сезонность, если установить в аргументах ввода

m = NeuralProphet(seasonality_mode="multiplicative")
metrics = m.fit(df, freq="MS")
m.set_plotting_backend("plotly-static")
future = m.make_future_dataframe(df, periods=50, n_historic_predictions=len(df))
forecast = m.predict(future)
m.plot(forecast)
# m.plot_parameters()

Фигура компонентов теперь будет показывать сезонность как процент от тренда:

m.plot_components(forecast)

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

Установка seasonality_mode="multiplicative" позволит моделировать все сезонные колебания как мультипликативные, включая пользовательские сезонности, добавленные с помощью add_seasonality.

Last updated