> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/neuralprophet/novye-uroki/urok-5-regressory-s-zapazdyvaniem.md).

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

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

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

На момент времени *<mark style="color:purple;">**t**</mark>* прогнозирования, у нас есть доступ только к их наблюдаемым значениям в прошлом, включая период до *<mark style="color:purple;">**t − 1**</mark>*.

<figure><img src="/files/7bBt8n8pP3EjpSaNhUHJ" alt=""><figcaption></figcaption></figure>

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

```python
import pandas as pd

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

<table><thead><tr><th width="93"></th><th width="147">ds</th><th width="90">y</th><th>temperature</th></tr></thead><tbody><tr><td>0</td><td>2015-01-01</td><td>64.92</td><td>277.00</td></tr><tr><td>1</td><td>2015-01-02</td><td>58.46</td><td>277.95</td></tr><tr><td>2</td><td>2015-01-03</td><td>63.35</td><td>278.83</td></tr><tr><td>3</td><td>2015-01-04</td><td>50.54</td><td>279.64</td></tr><tr><td>4</td><td>2015-01-05</td><td>64.89</td><td>279.05</td></tr></tbody></table>

```python
# Опционально: Чтобы выровнять масштаб температуры с ценой энергии, мы конвертируем ее в Фаренгейты:
df["temperature"] = (df["temperature"] - 273.15) * 1.8 + 32
```

```python
fig = df.plot(x="ds", y=["y", "temperature"], figsize=(10, 6))
```

<figure><img src="https://neuralprophet.com/_images/tutorials_tutorial05_5_0.png" alt=""><figcaption></figcaption></figure>

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

```python
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)

```

```python
# Установка построения для фокусировки на горизонте прогнозирования 1 (единственный для нас здесь)
m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot(forecast)

```

<figure><img src="https://neuralprophet.com/_images/tutorials_tutorial05_8_0.svg" alt=""><figcaption></figcaption></figure>

```python
# Показать вклад прогноза компонентов
m.plot_components(forecast, components=["lagged_regressors"])
```

<figure><img src="https://neuralprophet.com/_images/tutorials_tutorial05_9_0.svg" alt=""><figcaption></figcaption></figure>

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

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

<figure><img src="https://neuralprophet.com/_images/tutorials_tutorial05_11_0.svg" alt=""><figcaption></figcaption></figure>

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

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

|     | MAE      | RMSE     | Loss    | RegLoss | epoch |
| --- | -------- | -------- | ------- | ------- | ----- |
| 172 | 4.936666 | 6.578746 | 0.00533 | 0.0     | 172   |

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

<figure><img src="https://neuralprophet.com/_images/tutorials_tutorial05_14_0.png" alt=""><figcaption></figcaption></figure>
