【时间序列】时序工具包之NeuralProphet

kaggle竞赛宝典干货

作者:杰少

NeuralProphet

简介

几乎绝大多数做时间序列的朋友都了解Facebook的Prophet模型,因为其在准确性、可解释性等方面有着良好的性能,而且可以为用户自动化许多元素(如超参数选择或特征工程),因而它获得了广泛的应用。本文我们介绍一个最新的NeuralProphet时,从名字就可以看出,这个是神经网络和Prophet的结合,与传统的黑盒NN不同,本文我们就介绍的NeuralProphet模型集成了Prophet的所有优点,不仅具有不错的可解释性,还有优于Prophet的预测性能。

NeuralProphet

01


Prophet

Prophet如果认为是基本自回归的扩展(除了使用lagged的目标值,还对输入变量使用傅立叶变换,这使得我们可以通过调模型拿到更好的结果)。

  • Prophet可以使用额外的信息,不仅仅是target的延迟值;

  • 模型能融入节假日信息;

  • 可以自动检测趋势的变化;

02


NeuralProphet

和许多黑盒子的NN不同,NeuralProphet保留了Prophet的所有优势,同时,通过引入改进的后端(Pytorch代替Stan)和使用自回归网络(AR网络),将神经网络的可扩展性与AR模型的可解释性结合起来,提高其准确性和可扩展性。

  • AR网络——它是一个单层网络,经过训练可以模拟时间序列信号中的AR过程,但规模比传统模型大得多。

03


NeuralProphet VS Prophet

  • NeuralProphet使用PyTorch的梯度下降进行优化,使得建模速度更快;

  • 利用自回归网络对时间序列自相关进行建模;

  • 滞后回归器使用单独的前馈神经网络建模;

  • NeuralProphet具有可配置的前馈神经网络的非线性深层;

  • 模型可调整到特定的预测范围(大于1);

  • 提供自定义的损失函数和度量策略;

代码

1.数据读取

# !pip install neuralprophet
import pandas as pd
from fbprophet import Prophet
from neuralprophet import NeuralProphet
from sklearn.metrics import mean_squared_error

# plotting
import matplotlib.pyplot as plt

# settings
plt.style.use('seaborn')
plt.rcParams["figure.figsize"] = (16, 8)
df = pd.read_csv('./data/wp_log_peyton_manning.csv')
print(f'The dataset contains {len(df)} observations.')
df.head()
The dataset contains 2905 observations.

dsy
02007-12-109.590761
12007-12-118.519590
22007-12-128.183677
32007-12-138.072467
42007-12-147.893572
df.plot(x='ds', y='y', title='Log daily page views');

2.Prophet预测


test_length = 365
df_train = df.iloc[:-test_length]
df_test = df.iloc[-test_length:]
prophet_model = Prophet()
prophet_model.fit(df_train)
future_df = prophet_model.make_future_dataframe(periods=test_length)
preds_df_1 = prophet_model.predict(future_df)
prophet_model.plot_components(preds_df_1);
prophet_model.plot(preds_df_1);

 3. NeuralProphet

nprophet_model = NeuralProphet()
metrics = nprophet_model.fit(df_train, freq="D")
future_df = nprophet_model.make_future_dataframe(df_train, 
                                                 periods = test_length, 
                                                 n_historic_predictions=len(df_train))
preds_df_2 = nprophet_model.predict(future_df)
nprophet_model.plot(preds_df_2);

4.效果比较

  • NeuralProphet的效果比Prophet好了很多。

df_test['prophet'] = preds_df_1.iloc[-test_length:].loc[:, 'yhat']
df_test['neural_prophet'] = preds_df_2.iloc[-test_length:].loc[:, 'yhat1']
df_test.set_index('ds', inplace=True)

print('MSE comparison ----')
print(f"Prophet:\t{mean_squared_error(df_test['y'], preds_df_1.iloc[-test_length:]['yhat']):.4f}")
print(f"NeuralProphet:\t{mean_squared_error(df_test['y'], preds_df_2.iloc[-test_length:]['yhat1']):.4f}")

MSE comparison ----
Prophet:	0.3576
NeuralProphet:	0.3057

小结

NeuralProphet在时间序列预测的效果上面一般会比Prophet好很多,在遇到时间序列问题的时候强烈建议大家尝试一下。

参考文献

  1.  https://towardsdatascience.com/facebooks-prophet-deep-learning-neuralprophet-76796aed1d86

建议阅读:

高考失利之后,属于我的大学本科四年

【资源分享】对于时间序列,你所能做的一切.

【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

【AI蜗牛车出品】手把手AI项目、时空序列、时间序列、白话机器学习、pytorch修炼

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步



个人微信
备注:昵称+学校/公司+方向
如果没有备注不拉群!
拉你进AI蜗牛车交流群



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值