Урок 7: События и праздники

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

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

import pandas as pd
from neuralprophet import NeuralProphet, set_log_level

# Загрузка набора данных для учебного пособия 4 с дополнительным столбцом температуры
df = pd.read_csv("https://github.com/ourownstory/neuralprophet-data/raw/main/kaggle-energy/datasets/tutorial01.csv")
df.head()

# Отключение сообщений журнала, кроме случаев ошибок
set_log_level("ERROR")

# Модель по умолчанию
m = NeuralProphet()
m.set_plotting_backend("plotly-static")

# Продолжение обучения модели и создание прогноза
metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)

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

Страновые праздники можно легко добавить с функцией add_country_holidays

m = NeuralProphet()
m.set_plotting_backend("plotly-static")

m = m.add_country_holidays("US")

metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)

Эффекты от особых событий или праздников могут возникать спорадически. Такие события моделируются аналогично будущим регрессорам, при этом каждое событие e представляется как бинарная переменная e ∈ [0, 1], указывающая, происходит ли данное событие в конкретный день или нет.

Пользовательские события

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

# https://eswd.eu/cgi-bin/eswd.cgi

df_events = pd.DataFrame(
    {
        "event": "extreme_weather",
        "ds": pd.to_datetime(
            [
                "2018-11-23",
                "2018-11-17",
                "2018-10-28",
                "2018-10-18",
                "2018-10-14",
            ]
        ),
    }
)

m = NeuralProphet()
m.set_plotting_backend("plotly-static")

m.add_events("extreme_weather")

df_all = m.create_df_with_events(df, df_events)

metrics = m.fit(df_all)
forecast = m.predict(df_all)
m.plot(forecast)
m.plot_components(forecast)
m.plot_parameters()

Last updated