fbprophet预言者的使用测试

2019-01-04  本文已影响42人  曦宝

https://blog.csdn.net/qq_23860475/article/details/81354467

原博在这里

import pandas as pd
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt


df = pd.read_excel('example_wp_peyton_manning.xlsx')
df['y'] = np.log(df['y'])
playoffs = pd.DataFrame({
  'holiday': 'playoff',
  'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',
                        '2010-01-24', '2010-02-07', '2011-01-08',
                        '2013-01-12', '2014-01-12', '2014-01-19',
                        '2014-02-02', '2015-01-11', '2016-01-17',
                        '2016-01-24', '2016-02-07']),
  'lower_window': 0,
  'upper_window': 1,
})
superbowls = pd.DataFrame({
  'holiday': 'superbowl',
  'ds': pd.to_datetime(['2010-02-07', '2014-02-02', '2016-02-07']),
  'lower_window': 0,
  'upper_window': 1,
})
holidays = pd.concat((playoffs, superbowls))  # 季后赛和超级碗比赛特别日期
m = Prophet(holidays=holidays)  # 指定节假日参数,其它参数以默认值进行训练
m.fit(df)  # 对过去数据进行训练
future = m.make_future_dataframe(freq='D',periods=365)  # 建立数据预测框架,数据粒度为天,预测步长为一年
forecast =m.predict(future)
m.plot(forecast)  # 绘制预测效果图
plt.show()
m.plot_components(forecast)  # 绘制成分趋势图
plt.show()

原博上的代码,我这里用来测试一下功能。
因为图片不能显示,闪退,我改了一点代码
运行结果如下

Initial log joint probability = -8.22805
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
      99       9754.87    0.00578108       1381.96           1           1      122   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     199       9782.15    0.00377384       666.677           1           1      229   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     299       9787.99   0.000453574        230.12      0.4708           1      341   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     399       9792.73    0.00082002        441.99      0.7395      0.7395      460   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     499        9796.1    0.00110105       162.415           1           1      575   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     576       9798.58   1.47631e-05       163.594   8.109e-08       0.001      716  LS failed, Hessian reset 
     599       9799.37    0.00529958       698.865           1           1      740   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     699       9801.22   2.23812e-05       63.8531           1           1      855   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     799       9801.78    0.00237766       463.774           1           1      972   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     831       9801.93   5.75156e-06       66.1005   6.997e-08       0.001     1053  LS failed, Hessian reset 
     899       9802.31   0.000111814       185.348     0.06377      0.6098     1134   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
     926       9802.53   1.17466e-05       121.538   6.346e-08       0.001     1215  LS failed, Hessian reset 
     959       9802.76   8.95068e-06         96.06   7.093e-08       0.001     1304  LS failed, Hessian reset 
     999       9802.82   2.78071e-05       108.203     0.04923      0.9352     1355   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1099       9803.99    0.00139863       302.943           1           1     1466   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1199        9804.9   0.000434855       145.147           1           1     1589   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1278       9805.48   1.79259e-05       173.491   1.337e-07       0.001     1711  LS failed, Hessian reset 
    1299       9805.66    0.00045454       147.286           1           1     1738   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1399       9805.93   6.79296e-05       98.3221           1           1     1866   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1473       9806.04   2.18264e-05       182.704   1.669e-07       0.001     1993  LS failed, Hessian reset 
    1499       9806.05   0.000101355       111.128      0.5452           1     2030   
    Iter      log prob        ||dx||      ||grad||       alpha      alpha0  # evals  Notes 
    1508       9806.06   5.64245e-06        75.287   6.175e-08       0.001     2084  LS failed, Hessian reset 
    1522       9806.06   7.78665e-07       52.5976      0.9696      0.2839     2107   
Optimization terminated normally: 
  Convergence detected: relative gradient magnitude is below tolerance

Process finished with exit code 0

效果图如下


image.png
image.png
等过段时间,我缓缓在更新一波参数

我学习这个算法的时候其实是因为我老公忽悠我,说这个算法对时间序列表现优秀,但是我也在一些博客里看到了,只是比别的算法好一点而已,并不是特别优秀,我又在忧虑我公司那种刁钻的数据了,我试一下吧,再来更新一下。
----------------------------分割线--------------------------------------
我发现了一个有用的网址。
https://blog.csdn.net/wjskeepmaking/article/details/64905745

fbprophet目前仅支持以天为最小的时间粒度,下面这个网址介绍了修改代码,使得最小时间粒度变为小时。
https://blog.csdn.net/wjskeepmaking/article/details/65626872

上一篇 下一篇

猜你喜欢

热点阅读