如何预测股票分析--先知(Prophet)

上一篇中,我们探讨了自动ARIMA,但是好像表现的还是不够完善,接下来看看先知的力量!

先知(Prophet)

有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理。Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现。先知的输入是一个带有两列的数据框:日期和目标(ds和y)。

时间序列预测一直是预测问题中的难点,人们很难找到一个适用场景丰富的通用模型,这是因为现实中每个预测问题的背景知识,例如数据的产生过程,往往是不同的,即使是同一类问题,影响这些预测值的因素与程度也往往不同,再加上预测问题往往需要大量专业的统计知识,这又给分析人员带来了难度,这些都使得时间序列预测问题变得尤其复杂。传统的时间序列预测方法通常有如下缺陷:

    1. 适用的时序数据过于局限
    2. 缺失值需要填补
    3. 模型缺乏灵活性
    4. 指导作用较弱
    2017年2月24号facebook开源了时间序列预测框架prophet,目前支持R语言和python语言。托管在github上:https://github.com/facebookincubator/prophet。prophet是基于可分解(趋势+季节+节假日)模型的开源库,Prophet充分的将业务背景知识和统计知识融合起来,它让我们可以用简单直观的参数进行高精度的时间序列预测,并且支持自定义季节和节假日的影响。

Prophet官方文档:https://facebook.github.io/prophet/
Prophet论文:https://peerj.com/preprints/3190/
Prophet-github:https://github.com/facebook/prophet

 

先知试图在过去的数据中捕捉季节性,并且在数据集很大的时候依然表现良好。

#importing prophet 导入库函数

from fbprophet import Prophet

 

#creating dataframe 建立新的数据集框架,以长度为索引,取date和close这两列

new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])

 #给这个框架灌输数据

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的时间序列预测

 

 

参考:https://www.jiqizhixin.com/articles/2019-01-04-16

posted @ 2020-01-24 15:19  星涅爱别离  阅读(2350)  评论(0编辑  收藏  举报