Прогнозирование потребности в энергии: Прогноз нагрузки для больницы в Сан-Франциско
Мы можем обучить прогнозирующую модель другой распространенной задаче в области энергетики. В данном случае мы обучаем прогнозиста на один шаг вперед для предсказания потребления электроэнергии зданием.
Данный набор данных содержит ежечасные наблюдения за один год. Обучение будет проводиться на основе данных за 11 месяцев, оставив последний месяц для оценки.
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 # может занять некоторое время
#!pip install neuralprophet # намного быстрее, но может не иметь последних обновлений/исправлений ошибок
import pandas as pd
from neuralprophet import NeuralProphet, set_log_level
set_log_level("ERROR")
data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
sf_load_df = pd.read_csv(data_location + "energy/SF_hospital_load.csv")
sf_load_df.head(3)
0
2015-01-01 01:00:00
778.007969
1
2015-01-01 02:00:00
776.241750
2
2015-01-01 03:00:00
779.357338
Общий прогноз: только функции, основанные на времени.
В этом первом разделе мы будем обучать модель только с функциями времени, как если бы мы делали это с Facebook Prophet.
m = NeuralProphet(
weekly_seasonality=6,
daily_seasonality=10,
trend_reg=1,
learning_rate=0.01,
)
df_train, df_test = m.split_df(sf_load_df, freq="H", valid_p=1.0 / 12)
metrics = m.fit(df_train, freq="H", validation_df=df_test, progress="bar")
metrics.tail(1)
108
57.975113
80.128593
0.008979
0.0
108
46.005161
63.305355
0.004436
0.0
forecast = m.predict(df_train)
m.set_plotting_backend("plotly-static")
m.plot(forecast)
forecast = m.predict(df_test)
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot(forecast[-7 * 24 :])
m.plot_parameters()
Прогноз на 1 шаг вперед с авторегрессией
m = NeuralProphet(
growth="off",
yearly_seasonality=False,
weekly_seasonality=False,
daily_seasonality=False,
n_lags=3 * 24,
ar_reg=1,
learning_rate=0.01,
)
df_train, df_test = m.split_df(sf_load_df, freq="H", valid_p=1.0 / 12)
metrics = m.fit(df_train, freq="H", validation_df=df_test, progress="bar")
metrics.tail(1)
108
24.246571
37.293633
0.002822
0.000877
108
23.822706
35.911766
0.002339
0.000877
forecast = m.predict(df_train)
m.set_plotting_backend("plotly-static")
m.plot(forecast)
forecast = m.predict(df_test)
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot(forecast[-7 * 24 :])
m.plot_parameters()
Прогноз на 1 шаг вперед с AR-Net: использование нейронной сети
Здесь мы будем использовать мощь нейронной сети для аппроксимации нелинейных закономерностей.
m = NeuralProphet(
growth="off",
yearly_seasonality=False,
weekly_seasonality=False,
daily_seasonality=False,
n_lags=3 * 24,
ar_layers=[32, 32, 32, 32],
learning_rate=0.003,
)
df_train, df_test = m.split_df(sf_load_df, freq="H", valid_p=1.0 / 12)
metrics = m.fit(df_train, freq="H", validation_df=df_test, progress="bar")
metrics.tail(1)
108
7.14312
10.696775
0.00016
0.0
108
6.197587
9.060362
0.000093
0.0
forecast = m.predict(df_train)
m.set_plotting_backend("plotly-static")
m.plot(forecast)
forecast = m.predict(df_test)
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot(forecast[-7 * 24 :])
m.plot_components(forecast[-7 * 24 :])
Last updated