zoukankan      html  css  js  c++  java
  • 如何预测股票分析--先知(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

  • 相关阅读:
    11月28日总结
    12月06日总结
    12月02日总结
    11月26日总结
    12月05日总结
    11月30日总结
    软件设计职责链模式
    软件设计策略模式
    软件设计组合模式
    大数据竞赛练习题二
  • 原文地址:https://www.cnblogs.com/xingnie/p/12232234.html
Copyright © 2011-2022 走看看