在R中使用开源大规模预测工具Prophet(二)

[复制链接]
发表于 : 2017-7-31 16:40:45 最新回复:2017-07-31 16:40:55
1579 1
建赟
建赟  专家

五、预测区间

在预测时,不确定性主要来源于三个部分:趋势中的不确定性、季节效应估计中的不确定性和观测值的噪声影响。

1. 趋势中的不确定性

预测中,不确定性最大的来源就在于未来趋势改变的不确定性。Prophet 假定 “未来将会和历史具有相似的趋势” 。尤其重要的是,我们假定未来趋势的平均变动频率和幅度和我们观测到的历史值是一样的,从而预测趋势的变化并通过计算,最终得到预测区间。

这种衡量不确定性的方法具有以下性质:变化速率灵活性更大时(通过增大参数changepoint.prior.scale 的值),预测的不确定性也会随之增大。原因在于如果将历史数据中更多的变化速率加入了模型,也就代表我们认为未来也会变化得更多,就会使得预测区间成为反映过拟合的标志。

预测区间的宽度(默认下,是 80% )可以通过设置 interval.width 参数来控制:

http://s4.51cto.com/wyfs02/M02/94/F2/wKioL1kQH2Hjre6HAABW1biYdHc266.jpg

2. 季节效应中的不确定性

默认情况下, Prophet 只会返回趋势中的不确定性和观测值噪声的影响。你必须使用贝叶斯取样的方法来得到季节效应的不确定性,可通过设置 mcmc.samples 参数(默认下取 0 )来实现。

http://s4.51cto.com/wyfs02/M00/94/F3/wKiom1kQH2uzrvRSAABVXSCjmf8008.jpg

上述代码将最大后验估计( MAP )取代为马尔科夫蒙特卡洛取样 ( MCMC ),并且将计算时间从 10 秒延长到 10 分钟。如果做了全取样,就能通过绘图看到季节效应的不确定性了:

http://s1.51cto.com/wyfs02/M02/94/F3/wKiom1kQH3bx3j4zAAAycuEAh6o700.jpg

http://s1.51cto.com/wyfs02/M01/94/F2/wKioL1kQH4iCF4YmAAC3xxWm8TA811.jpg

六、异常值

下面我们使用之前使用过的 R 语言维基百科主页对数访问量的数据来建模预测,只不过使用存在时间间隔并不完整的数据:

http://s4.51cto.com/wyfs02/M01/94/F3/wKiom1kQH5WAwiWlAAB2T7QaTB4396.jpg

http://s1.51cto.com/wyfs02/M01/94/F2/wKioL1kQH6CjozWqAABl72v7B1Q907.jpg

如上 R 输出图所示,趋势预测看似合理,预测区间的估计却过于广泛。

处理异常值最好的方法是移除它们,而 Prophet 使能够处理缺失数据的。如果在历史数据中某行的值为空( NA ),但是在待预测日期数据框 future 中仍保留这个日期,那么 Prophet 依旧可以给出该行的预测值。

http://s2.51cto.com/wyfs02/M01/94/F3/wKiom1kQH7mBg1rEAABzKX8YP00092.jpg

http://s5.51cto.com/wyfs02/M00/94/F3/wKiom1kQIBDRqForAACUGg3V26Y537.jpg

上述这个实例虽然影响了不确定性的估计,却没有影响到主要的预测值 yhat 。但是,现实往往并非如此,接下来,在上述数据集基础上加入新的异常值后再建模预测:

http://s2.51cto.com/wyfs02/M01/94/F3/wKiom1kQIBrAwTspAAB2Z403xLI886.jpg

http://s1.51cto.com/wyfs02/M02/94/F3/wKioL1kQIFSh3OopAACUIxdm1DI478.jpg

这里 2015年 6 月存在一些异常值破坏了季节效应的估计,因此未来的预测也会永久地受到这个影响。最好的解决方法就是移除这些异常值:

http://s1.51cto.com/wyfs02/M02/94/F3/wKioL1kQIF6SWY5bAABzf3z-jC0047.jpg

http://s1.51cto.com/wyfs02/M00/94/F3/wKioL1kQIGzwbuc-AACKQ4pGNNY118.jpg

七、非日数据

Prophet 处理的对象并非必须是日数据,不过要是试图通过非日数据来预测每日的情况或拟合季节性效应,往往会得到奇奇怪怪的结果。下面使用美国零售业销售量数据来预测未来 10 年的情况:

http://s5.51cto.com/wyfs02/M00/94/F3/wKioL1kQIYviGAZsAABscnt4dKI032.jpg

http://s2.51cto.com/wyfs02/M00/94/F3/wKiom1kQIX_x5NkJAAB4xBqknZA543.jpg

预测结果看起来非常杂乱,原因正是在于这个特殊的数据集使用的是月数据。当我们拟合年度效应时,只有每个月第一天的数据,而且对于其他天的周期效应是不可测且过拟合的。当你使用 Prophet 拟合月度数据时,可以通过在 make_future_dataframe 中传入频率参数只做月度的预测。

http://s4.51cto.com/wyfs02/M00/94/F3/wKiom1kQITeCleeoAABQ1Lq8dbk685.jpg

http://s3.51cto.com/wyfs02/M01/94/F3/wKiom1kQISmhwyNLAAEv08APEdo664.jpg

  • x
  • 常规:

点评 回复

跳转到指定楼层
建赟
建赟  专家 发表于 2017-7-31 16:40:55 已赞(0) 赞(0)

顶一个!
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录