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
效果图如下
![](https://img.haomeiwen.com/i659952/5f3e21452ef8ac43.png)
![](https://img.haomeiwen.com/i659952/ab8c6ed22044e123.png)
等过段时间,我缓缓在更新一波参数
我学习这个算法的时候其实是因为我老公忽悠我,说这个算法对时间序列表现优秀,但是我也在一些博客里看到了,只是比别的算法好一点而已,并不是特别优秀,我又在忧虑我公司那种刁钻的数据了,我试一下吧,再来更新一下。
----------------------------分割线--------------------------------------
我发现了一个有用的网址。
https://blog.csdn.net/wjskeepmaking/article/details/64905745
fbprophet目前仅支持以天为最小的时间粒度,下面这个网址介绍了修改代码,使得最小时间粒度变为小时。
https://blog.csdn.net/wjskeepmaking/article/details/65626872
网友评论