Prophet文档中文翻译--uncertainty_intervals

本文深入探讨了Facebook的Prophet预测模型如何处理预测中的不确定性,包括趋势、季节性和观测噪声的不确定性来源。通过调整参数,如changepoint_prior_scale和mcmc_samples,可以控制预测的灵活性和不确定性区间的宽度。
%matplotlib inline
from fbprophet import Prophet
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np
import logging
logging.getLogger('fbprophet').setLevel(logging.ERROR)
import warnings
warnings.filterwarnings("ignore")
df = pd.read_csv('examples/example_wp_log_peyton_manning.csv')
df = df.loc[:180,]  # Limit to first six months
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=60)

默认情况下,Prophet将返回预测的不确定性区间–yhat。这些不确定性区间背后有几个重要的假设。

预测中存在三个不确定性来源:趋势的不确定性,季节性估计的不确定性以及额外的观测噪声。

趋势中的不确定性

预测中最大的不确定性来源是未来趋势的变化。我们在本文档中已经看到的时间序列显示了历史上明显的趋势变化。Prophet能够发现和适应这些,但我们预期的趋势变化会是什么?我们无法确切地知道,所以我们做了最合理的事情–我们假设未来会看到与历史相似的趋势变化。特别是,我们假设未来趋势变化的平均频率和幅度将与我们在历史中观察到的相同。我们预测这些趋势变化并通过计算它们的分布来获得不确定性区间。

这种测量不确定性的方法之一是通过增加changepoint_prior_scale来允许更高的灵活性,这将增加预测的不确定性。这是因为如果我们在历史中模拟更多的变化,那么我们将来期望未来更多的不确定性,并使不确定性区间成为过度拟合的有用指标。

可以使用参数设置不确定区间的宽度(默认为80%)interval_width:

forecast = Prophet(interval_width=0.95).fit(df).predict(future)

同样,这些区间假设未来将看到与过去相同的频率变化频率和幅度。这种假设可能不正确,因此您不应期望在这些不确定区间内得到准确的覆盖。

季节性的不确定性

默认情况下,Prophet只会返回趋势和观察噪声的不确定性。为了获得季节性的不确定性,您必须进行完整的贝叶斯抽样。这是使用参数mcmc.samples(默认为0)完成的。我们在这里用快速启动例子中的Peyton Manning数据的前六个月做示范:

m = Prophet(mcmc_samples=300)
forecast = m.fit(df).predict(future)
WARNING:pystan:n_eff / iter for parameter beta_m[1] is nan!
WARNING:pystan:n_eff / iter for parameter beta_m[2] is nan!
WARNING:pystan:n_eff / iter for parameter beta_m[3] is nan!
WARNING:pystan:n_eff / iter for parameter beta_m[4] is nan!
WARNING:pystan:n_eff / iter for parameter beta_m[5] is nan!
WARNING:pystan:n_eff / iter for parameter beta_m[6] is nan!
WARNING:pystan:n_eff / iter below 0.001 indicates that the effective sample size has likely been overestimated
WARNING:pystan:Rhat for parameter beta_m[1] is nan!
WARNING:pystan:Rhat for parameter beta_m[2] is nan!
WARNING:pystan:Rhat for parameter beta_m[3] is nan!
WARNING:pystan:Rhat for parameter beta_m[4] is nan!
WARNING:pystan:Rhat for parameter beta_m[5] is nan!
WARNING:pystan:Rhat for parameter beta_m[6] is nan!
WARNING:pystan:Rhat above 1.1 or below 0.9 indicates that the chains very likely have not mixed

这用MCMC采样取代了的型MAP估计,并且可能需要更长的时间,具体取决于有多少观测值 - 期望几分钟而不是几秒钟。如果您进行完整采样,那么在绘制它们时,您将看到季节性成分的不确定性:

fig = m.plot_components(forecast)

png

您可以使用m.predictive_samples(future)方法在Python中访问原始后验预测样本。

PyStan for Windows中存在问题,这使得MCMC采样速度极慢。Windows中MCMC采样的最佳选择是在Linux VM中使用R或Python。

<think>嗯,用户遇到了Prophet模型保存时出现的AttributeError,提示'save_model'属性不存在。首先,我需要确认Prophet库的版本。因为可能在新旧版本中,保存模型的方法有所不同。旧版的Prophet可能没有save_model方法,或者用户可能混淆了不同库的API,比如scikit-learn的save_model。 我记得Facebook Prophet文档中提到,保存模型应该使用序列化的方法,比如用joblib或pickle。可能用户参考了过时的教程,或者误用了其他库的方法。需要检查Prophet的官方文档确认正确的方法。 另外,用户提供的引用内容中提到了使用concat来合并DataFrame,这可能和模型保存无关,但需要确保用户没有混淆代码片段。应该引导用户使用正确的保存方式,比如使用joblib.dump。同时,要提醒安装必要的库,如joblib,并提供示例代码。 还要考虑跨版本兼容性问题,可能用户使用的Prophet版本较旧,建议升级到最新版。同时,解释为什么save_model不可用,以及替代方法的工作原理。确保回答清晰,分步骤解决,避免用户进一步困惑。</think>### 解决Prophet对象无'save_model'属性问题 #### 问题原因 1. **版本兼容性问题**:`Prophet`库在部分旧版本中未提供`save_model()`方法,此方法可能存在于其他机器学习框架(如`scikit-learn`)的API中[^1]。 2. **API设计差异**:`Prophet`官方推荐使用序列化库(如`pickle`或`joblib`)直接保存模型对象,而非内置方法。 #### 解决方法 ##### 方法1:使用`joblib`保存模型 ```python from prophet import Prophet from joblib import dump model = Prophet() model.fit(df_train) dump(model, 'prophet_model.joblib') # 保存模型文件 ``` ##### 方法2:使用`pickle`保存模型 ```python import pickle with open('prophet_model.pkl', 'wb') as f: pickle.dump(model, f) # 二进制写入模式 ``` ##### 方法3:升级Prophet版本 ```shell pip install prophet --upgrade # 确认当前版本>=1.1 ``` #### 模型加载示例 ```python from joblib import load loaded_model = load('prophet_model.joblib') # 加载后可直接调用.predict() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值