Урок 5: Регрессоры с запаздыванием

Задержанные регрессоры используются для корреляции других наблюдаемых переменных с нашим целевым временным рядом. Например, температура предыдущих дней может быть хорошим предиктором температуры следующего дня.

Они часто упоминаются как экзогенные переменные или как ковариаты. В отличие от будущих регрессоров, будущее запаздывающего регрессора нам неизвестно.

На момент времени t прогнозирования, у нас есть доступ только к их наблюдаемым значениям в прошлом, включая период до t − 1.

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

import pandas as pd

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

0

2015-01-01

64.92

277.00

1

2015-01-02

58.46

277.95

2

2015-01-03

63.35

278.83

3

2015-01-04

50.54

279.64

4

2015-01-05

64.89

279.05

# Опционально: Чтобы выровнять масштаб температуры с ценой энергии, мы конвертируем ее в Фаренгейты:
df["temperature"] = (df["temperature"] - 273.15) * 1.8 + 32
fig = df.plot(x="ds", y=["y", "temperature"], figsize=(10, 6))

Из данных мы видим, что существует слабая обратная связь между ценой на электроэнергию и температурой. Мы начинаем с нашей модели из предыдущего урока, а затем добавляем температуру как запаздывающий регрессор в нашу модель.

from neuralprophet import NeuralProphet, set_log_level

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

# Модель и прогнозирование
m = NeuralProphet(
    n_changepoints=10,
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=False,
    n_lags=10,  # Авторегрессия
)
m.set_plotting_backend("plotly-static")

# Добавление температуры последних трех дней как отстающего регрессора
m.add_lagged_regressor("temperature", n_lags=3)

# Продолжение обучения модели и создание прогноза
metrics = m.fit(df)
forecast = m.predict(df)
# Установка построения для фокусировки на горизонте прогнозирования 1 (единственный для нас здесь)
m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot(forecast)
# Показать вклад прогноза компонентов
m.plot_components(forecast, components=["lagged_regressors"])

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

# Визуализировать параметры модели отстающей регрессии
m.plot_parameters(components=["lagged_regressors"])

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

Давайте исследуем, как улучшилась наша модель после добавления лагового регрессора.

MAERMSELossRegLossepoch

172

4.936666

6.578746

0.00533

0.0

172

df_residuals = pd.DataFrame({"ds": df["ds"], "residuals": df["y"] - forecast["yhat1"]})
fig = df_residuals.plot(x="ds", y="residuals", figsize=(10, 6))

Last updated