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

摘要:
Prophet有许多时间序列技术可以用于股票预测数据集,但其中大多数都需要在拟合模型之前进行大量的数据预处理。由Facebook设计和开发的Prophet是一个时间序列预测库,它不需要数据预处理,而且非常容易实现。因此,ARIMA、SARIMA和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']])

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

推论

先知(像大多数时间序列预测技术一样)试图从过去的数据中捕捉趋势和季节性。该模型通常在时间序列数据集上表现良好,但在本例中没有达到预期效果。

事实证明,股票价格没有特定的趋势或季节性。价格的涨跌很大程度上取决于目前市场上的情况。因此,像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

免责声明:文章转载自《如何预测股票分析--先知(Prophet)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VMware虚拟机中配置静态IP的方法C#如何加载程序运行目录外的程序集下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R语言从经济时间序列中用HP滤波器,小波滤波和经验模式分解等提取周期性成分分析

原文链接:http://tecdat.cn/?p=9350 经济时间序列的分析通常需要提取其周期性成分。这篇文章介绍了一些方法,可用于将时间序列分解为它们的不同部分。它基于《宏观经济学手册》中Stock和Watson(1999)关于商业周期的章节,但也介绍了一些较新的方法,例如汉密尔顿(2018)替代HP滤波器,小波滤波和经验模式分解。 数据 我使用从...

时间序列八: 以NASA之名: 卡尔曼滤波器

以NASA之名: 卡尔曼滤波器 'That's one small step for man,one giant leap for mankind.' — Neil Alden Armstron 目录 以NASA之名: 卡尔曼滤波器 引言 荣耀骑士 卡尔曼滤波器* 参考文献: 引言 二十世纪的阿波罗登月计划在人类历史上是浓墨重彩的一笔, 是人类...

ggplot2绘图入门系列之五:时间序列(完)

ggplot2包也能对时间序列数据绘图,但在处理上需要有些注意的地方。下面我们以上证指数为例进行作图,首先利用quantmod包从yahoo数据源获取从1997年以来的数据,存于变量SSEC中,抽取收盘数字,然后分别提取时间数据和指数数值,绘图结果如下图。 1 library(quantmod) 2 library(ggplot2) 3 getSymbol...

【时间序列】-航空数据预测

学习预测时序数据,如有侵权,请联系删除。 主要参考: A comprehensive beginner’s guide to create a Time Series Forecast (with Codes in Python)   目的: 翻译学习文章编写方式 学习解决时间序列问题的基本步骤   介绍 时间序列(从现在开始称为TS)被认为是数据科学...

Temporal Link Prediction: A Survey时间链路预测综述

Keywords:Dynamic networks · Temporal networks · Link prediction 1 介绍 下图表示时变网络的三种常见表示,它们有助于捕获网络的动态 快照:网络被表示为一系列静态网络,每一步一个。 接触序列:如果交互持续时间可以忽略不计,则将网络表示为三个一组(i, j, t),其中i和j为实体,t为交互...

入选 SIGMOD2021 的时间序列多周期检测通用框架 RobustPeriod 如何支撑阿里业务场景?

简介: 本文除了介绍RobustPeriod的核心技术亮点,还将重点解释如何将它构筑成服务来解决阿里云的业务痛点。 近日,由阿里云计算平台和阿里云达摩院合作的时序多周期检测相关论文RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection被SIGMOD 2021...