时间序列论文: NeuralProphet: Explainable Forecasting at Scale
NeuralProphet之一:安装与使用
NeuralProphet之二:季节性(Seasonality)
NeuralProphet之三:回归(Regressors)
NeuralProphet之四:事件(Events)
NeuralProphet之五:多时序预测模型
NeuralProphet之六:多元时间序列预测
NeuralProphet之七:NeuralProphet + Optuna
NeuralProphet之八:NeuralProphet部署
NeuralProphet官方示例一:建筑物用电量预测(Building load forecasting)
NeuralProphet官方示例二:日照辐射强度预测(Forecasting hourly solar irradiance)
代码来自:https://neuralprophet.com/html/energy_solar_pv.html
使用90%的数据用来训练,10%的数据用来测试。
加载库和数据
import pandas as pd
import matplotlib.pyplot as plt
from neuralprophet import NeuralProphet, set_log_level
set_log_level("ERROR")
# data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
data_location = 'datasets/'
sf_pv_df = pd.read_csv(data_location + 'energy/SF_PV.csv')
1 普通预测
日照辐射强度与季节和时间有关。
m = NeuralProphet(
yearly_seasonality=3,
weekly_seasonality=False,
daily_seasonality=8,
growth="off",
learning_rate=0.1,
)
df_train, df_test = m.split_df(sf_pv_df, freq='H', valid_p = 0.10)
metrics = m.fit(df_train, freq='H', validation_df=df_test, progress='plot')
forecast = m.predict(df_test)
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig_prediction = m.plot(forecast[-48:])
2 使用 Auto-Regression
使用滞后3天数据和AR-Net网络来训练
m = NeuralProphet(
growth='off',
yearly_seasonality=False,
weekly_seasonality=False,
daily_seasonality=False,
n_lags=3*24,
learning_rate=0.01,
)
df_train, df_test = m.split_df(sf_pv_df, freq='H', valid_p = 0.10)
metrics = m.fit(df_train, freq='H', validation_df=df_test, progress='plot')
forecast = m.predict(df_test)
m = m.highlight_nth_step_ahead_of_each_forecast(1)
fig = m.plot(forecast[-7*24:])
3 使用神经网络
滞后3天数据,同时使用一个4层的网络来训练
m = NeuralProphet(
growth='off',
yearly_seasonality=False,
weekly_seasonality=False,
daily_seasonality=False,
n_lags=3*24,
num_hidden_layers=4,
d_hidden=8,
learning_rate=0.003,
)
df = sf_pv_df.copy(deep=True)
df["I"] = np.append(0, sf_pv_df["y"].values[1:] - sf_pv_df["y"].values[:-1])
df_train, df_test = m.split_df(df, freq='H', valid_p = 0.10)
m = m.add_lagged_regressor("I", normalize="standardize")
metrics = m.fit(df_train, freq='H', validation_df=df_test, progress='plot')
m = m.highlight_nth_step_ahead_of_each_forecast(1)
forecast = m.predict(df_test)
fig = m.plot(forecast)
可视化
plt.show()