在上一篇中,咱们探讨了自动ARIMA,可是好像表现的仍是不够完善,接下来看看先知的力量!html
时间序列预测一直是预测问题中的难点,人们很难找到一个适用场景丰富的通用模型,这是由于现实中每一个预测问题的背景知识,例如数据的产生过程,每每是不一样的,即便是同一类问题,影响这些预测值的因素与程度也每每不一样,再加上预测问题每每须要大量专业的统计知识,这又给分析人员带来了难度,这些都使得时间序列预测问题变得尤为复杂。传统的时间序列预测方法一般有以下缺陷:python
1. 适用的时序数据过于局限
2. 缺失值须要填补
3. 模型缺少灵活性
4. 指导做用较弱
2017年2月24号facebook开源了时间序列预测框架prophet,目前支持R语言和python语言。托管在github上:https://github.com/facebookincubator/prophet。prophet是基于可分解(趋势+季节+节假日)模型的开源库,Prophet充分的将业务背景知识和统计知识融合起来,它让咱们能够用简单直观的参数进行高精度的时间序列预测,而且支持自定义季节和节假日的影响。git
Prophet官方文档:https://facebook.github.io/prophet/
Prophet论文:https://peerj.com/preprints/3190/
Prophet-github:https://github.com/facebook/prophetgithub
先知试图在过去的数据中捕捉季节性,而且在数据集很大的时候依然表现良好。框架
#importing prophet 导入库函数函数
from fbprophet import Prophet测试
#creating dataframe 创建新的数据集框架,以长度为索引,取date和close这两列spa
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close']).net
#给这个框架灌输数据设计
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]
#对于数据内容表现形式的转换,这里是转化为年-月-日的格式,同时创建以这个时间的索引
new_data['Date'] = pd.to_datetime(new_data.Date,format='%Y-%m-%d')
new_data.index = new_data['Date']
#preparing data对数据集的列名重命名
new_data.rename(columns={'Close': 'y', 'Date': 'ds'}, inplace=True)
#train and validation划分训练集和测试集
train = new_data[:987]
valid = new_data[987:]
#fit the model创建模型,给模型喂训练集
model = Prophet()
model.fit(train)
#predictions 预测,make_future_datafram是库自带的函数,新建一个数据框,指明须要预测到未来多长时间
close_prices = model.make_future_dataframe(periods=len(valid))
forecast = model.predict(close_prices)
#rmse 计算rms
forecast_valid = forecast['yhat'][987:]
rms=np.sqrt(np.mean(np.power((np.array(valid['y'])-np.array(forecast_valid)),2)))
rms
57.494461930575149
#plot 绘图(老三样)
valid['Predictions'] = 0
valid['Predictions'] = forecast_valid.values
plt.plot(train['y'])
plt.plot(valid[['y', 'Predictions']])
先知(像大多数时间序列预测技术同样)试图从过去的数据中捕捉趋势和季节性。该模型一般在时间序列数据集上表现良好,但在本例中没有达到预期效果。
事实证实,股票价格没有特定的趋势或季节性。价格的涨跌很大程度上取决于目前市场上的状况。所以,像ARIMA、SARIMA和Prophet这样的预测技术并不能很好地解决这个特殊的问题。
跟多的关于理论的知识,你能够访问
https://blog.csdn.net/h4565445654/article/details/78398089 fbProphe时序预测----论文总结以及调参思路
http://blog.51cto.com/13591395/2066888 腾讯技术工程 | 基于Prophet的时间序列预测