You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Statsmodels ARIMA分位数预测疑问:置信度与分位数的区别及替代方案

问题解答:时间序列多百分位数预测

目标

计算同一天的多百分位数预测值。

用户代码

# import the data
catfish_sales = pd.read_csv('/kaggle/input/time-series-toy-data-set/catfish.csv',
                           parse_dates = [0], index_col=0, date_parser=parse_date)
train_data, test_data = np.split(catfish_sales, 
                                 [int(len(catfish_sales)*0.95)])
forecast_data = pd.DataFrame()
for conf in range(0,101,10):
    # Perform arima fit and forecast
    aux_df = arima.fit().get_forecast(steps=len(test_data)).conf_int(alpha=(1-(conf/100)))
    #     print(forecast_data.dtypes)
    aux_df['Total_forecast'] = aux_df[['lower Total', 'upper Total']].mean(axis=1)
    conf_lbl = 'p'+str(conf)+'_'
    aux_df = aux_df.add_prefix(conf_lbl)
    print(aux_df.head())
    forecast_Data = pd.concat([forecast_data,aux_df],axis=0)

当前输出

p0_lower Total  p0_upper Total  p0_Total_forecast
2011-08-01    15273.493541    15273.493541       15273.493541
2011-09-01    14611.272886    14611.272886       14611.272886
2011-10-01    13929.948620    13929.948620       13929.948620
2011-11-01    11729.123604    11729.123604       11729.123604
2011-12-01    12358.778644    12358.778644       12358.778644
            p10_lower Total  p10_upper Total  p10_Total_forecast
2011-08-01     15130.404131     15416.582950        15273.493541
2011-09-01     14442.952828     14779.592943        14611.272886
2011-10-01     13747.205922     14112.691318        13929.948620
2011-11-01     11535.026991     11923.220217        11729.123604
2011-12-01     12154.903296     12562.653992        12358.778644

.....................

p90_lower Total  p90_upper Total  p90_Total_forecast
2011-08-01     13400.513982     17146.473099        15273.493541
2011-09-01     12408.034870     16814.510902        14611.272886
2011-10-01     11537.924366     16321.972875        13929.948620
2011-11-01      9188.481426     14269.765781        11729.123604
2011-12-01      9690.136982     15027.420306        12358.778644
            p100_lower Total  p100_upper Total  p100_Total_forecast
2011-08-01              -inf               inf                  NaN
2011-09-01              -inf               inf                  NaN
2011-10-01              -inf               inf                  NaN
2011-11-01              -inf               inf                  NaN
2011-12-01              -inf               inf                  NaN

技术问题解答

1. 置信水平与百分位数是否为同一概念?将90%置信度视为90分位数的假设是否正确?

二者不是同一概念,这个假设完全错误:

  • 置信水平:针对模型的预测均值,90%置信区间表示有90%的概率真实预测均值落在该区间内,它是围绕均值的对称区间(基于正态分布假设)。
  • 百分位数预测:针对未来实际观测值的分布,90分位数表示未来观测值有90%的概率小于等于该值,是分布上的一个分位点,和均值没有直接对称关系。

2. 为什么所有置信度下的均值完全相同?

这是因为你计算的是置信区间上下限的均值,而ARIMA的置信区间是以固定的预测均值为中心对称展开的(假设残差服从正态分布)。不管置信水平怎么调整,上下限的中点永远等于预测均值,所以所有置信度下的结果都一致。这说明你混淆了置信区间的中心和分位数的概念——分位数不是置信区间的中点,而是分布的某个临界值。

3. 若ARIMA不适合,推荐哪些替代模型实现多百分位数预测?

ARIMA本身可以做分位数预测,但不是用conf_int方法。更合适的模型包括:

  • 分位数ARIMA(QARIMA):直接针对不同分位数拟合ARIMA模型,输出对应分位数的预测值。
  • 树模型(XGBoost/LightGBM/GBRT):将时间序列转化为特征(如滞后值、时间特征、滚动统计量等),使用分位数损失函数训练模型,可直接输出多个分位数的预测结果。
  • Facebook Prophet:支持直接指定分位数输出预测,通过调整参数可以获取不同分位数的结果,使用门槛低。
  • GARCH类模型(如QGARCH):如果数据存在波动聚类特征,分位数GARCH模型可以更精准地捕捉不同分位数下的波动情况,输出分位数预测。

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:05:00