Урок 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()
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"])
Модель учится различным весам для каждого из лагов, что также может отражать изменения в направлении температуры.
Давайте исследуем, как улучшилась наша модель после добавления лагового регрессора.
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