fbprophet预言者的使用测试

您所在的位置:网站首页 optimizationterminated fbprophet预言者的使用测试

fbprophet预言者的使用测试

#fbprophet预言者的使用测试| 来源: 网络整理| 查看: 265

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

----------------------------分割线-------------------------------------- 现在是2020年1月20日 到今天为止,最小的时间粒度还是天。 我在2018年5月的时候买了一个新电脑,用Linux系统(Ubuntu18),安装真的很简单,pip就可以 ----------------------------分割线-------------------------------------- 我自己写了一段代码,用于练习,预测的是天池大赛,资金流的流入流出预测,不构建特征,单纯使用时间序列。

数据和需求见如下网址,用2013年7月1日到2014年8月31日的数据,来预测2014年9月1日到30日的数据(仅买入和赎出的总量) https://tianchi.aliyun.com/competition/entrance/231573/information

# coding:utf-8 import pandas as pd from fbprophet import Prophet import matplotlib.pyplot as plt data = pd.read_csv("total_ds_y.csv") # 将时间列重命名为ds,将需要预测的列重命名为y data = data.rename(columns={'report_date': 'ds', 'total_redeem_amt': 'y'}) ds = data.get('ds') y = data.get('y') # 数据有多列仅拼接这两列 train_data = pd.concat((ds, y), axis=1) holidays = pd.DataFrame({ # 可以随意命名,这里是因为可以添加多个不一样的holiday 'holiday': 'holiday', # 节假日的日期 'ds': pd.to_datetime(['2013-09-19', '2013-09-20', '2013-09-21', '2013-10-01', '2013-10-02', '2013-10-03', '2013-10-04', '2013-10-05', '2013-10-06', '2013-10-07', '2014-01-01', '2014-01-31', '2014-02-01', '2014-02-02', '2014-02-03', '2014-02-04', '2014-02-05', '2014-02-06', '2014-04-05', '2014-04-06', '2014-04-07', '2014-05-01', '2014-05-02', '2014-05-03', '2014-05-31', '2014-06-01', '2014-06-02', '2013-11-11']), # 最小值为0(不是节假日),最大值为1(是节假日) 'lower_window': 0, 'upper_window': 1, }) m = Prophet(holidays=holidays) m.fit(data) # 预测的频率(天D,或者月M),时间长度30,是否包含历史数据 future = m.make_future_dataframe(freq='D', periods=30, include_history=False) # 建立数据预测框架,数据粒度为天,预测步长为一年 # 预测的结果,包含多种成分,最后一列即yhat列为最终的预测结果 forecast = m.predict(future) # print(forecast.ds) m.plot(forecast) # 绘制预测效果图 plt.show() m.plot_components(forecast) # 绘制成分趋势图 plt.show() # 保存结果 forecast.to_csv("forecast.csv") image.png image.png

预测效果一般,仅做练习用。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3