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

如何获取ETS模型拟合值的标准差与置信区间?

获取ETS模型拟合值的标准差与置信区间

问题背景

已为航空乘客时间序列应用ETS乘法模型,当前能输出拟合值,但需要获取拟合值对应的标准差与置信区间,现有实现代码如下:

import os
import numpy as np
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
from statsmodels.tsa.exponential_smoothing.ets import ETSModel

df_air = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv',
         parse_dates=['Month'], 
         date_parser=lambda x: pd.to_datetime(x, format='%Y-%m', errors = 'coerce'))
df_air = df_air.set_index('Month')
data = df_air['#Passengers']

model_mul = ETSModel(data, error="mul", trend="mul", seasonal="mul", damped_trend=True, seasonal_periods=12)
fit_mul = model_mul.fit(maxiter=10000)

print(fit_mul.fittedvalues)

解决方案

使用statsmodels提供的get_prediction()方法,针对样本内区间获取拟合值的完整统计信息,包括标准差和置信区间,具体步骤如下:

  1. 获取样本内预测结果:调用fit_mul.get_prediction()并指定样本的起始和结束索引,得到包含拟合统计量的结果对象
  2. 提取所需统计量:从结果对象中提取标准差、置信区间,同时可验证拟合值与原fittedvalues的一致性

完整代码示例

import os
import numpy as np
import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
from statsmodels.tsa.exponential_smoothing.ets import ETSModel

df_air = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv',
         parse_dates=['Month'], 
         date_parser=lambda x: pd.to_datetime(x, format='%Y-%m', errors = 'coerce'))
df_air = df_air.set_index('Month')
data = df_air['#Passengers']

model_mul = ETSModel(data, error="mul", trend="mul", seasonal="mul", damped_trend=True, seasonal_periods=12)
fit_mul = model_mul.fit(maxiter=10000)

# 获取样本内的预测(拟合)结果
prediction = fit_mul.get_prediction(start=data.index[0], end=data.index[-1])

# 提取拟合值(与fit_mul.fittedvalues完全一致)
fitted_values = prediction.predicted_mean
# 提取拟合值的标准差
fitted_std = prediction.se_mean
# 提取95%置信区间(alpha=0.05对应95%,可调整为0.1获取90%置信区间)
fitted_ci = prediction.conf_int(alpha=0.05)

# 输出结果示例
print("拟合值标准差:")
print(fitted_std.head())
print("\n95%置信区间:")
print(fitted_ci.head())

关键说明

  • get_prediction()默认针对样本内数据,指定start和end确保覆盖全部拟合区间
  • se_mean对应每个拟合值的标准误差(即标准差)
  • conf_int(alpha=...)中的alpha为显著性水平,可根据需求调整置信水平
  • 拟合值predicted_mean与原fit_mul.fittedvalues完全一致,可用于验证结果正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:33:23