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

如何通过statsmodels状态空间模型获取样本内外状态估计?

用statsmodels状态空间模型获取样本内外状态估计的方法

核心思路

基于训练集拟合得到的模型参数,将模型扩展到全样本数据(训练+测试),通过卡尔曼滤波或平滑方法获取样本内外的状态估计,无需重新拟合模型。

具体方法与代码示例

假设已完成训练集拟合,得到res_spx(MLEResults类型对象),训练集数据为y_train,测试集为y_test,全样本数据y_full = pd.concat([y_train, y_test])。若模型包含外生变量,需同步准备全样本外生变量exog_full。

方法1:获取全样本滤波/预测状态(不利用测试集观测修正样本内)

使用get_prediction方法覆盖全样本范围,样本内输出滤波状态(仅用当前及之前观测),样本外输出预测状态(基于训练集末尾状态向前推算):

# 指定全样本范围,可传入索引位置或时间标签(若数据带时间索引)
pred_full = res_spx.get_prediction(start=0, end=len(y_full)-1)
# 若用时间索引:pred_full = res_spx.get_prediction(start=y_train.index[0], end=y_full.index[-1])

# 提取状态估计结果
state_full_pred = pred_full.predicted_state

方法2:获取全样本滤波状态(用测试集观测逐步更新)

通过extend方法将测试集数据追加到模型,重新运行卡尔曼滤波,样本外每一步都会用新观测更新状态:

# 扩展模型的内生变量(若有外生变量,同步追加:res_spx.model.extend(exog=exog_test))
res_spx.model = res_spx.model.extend(endog=y_test)

# 运行滤波得到全样本结果
filter_results = res_spx.filter()

# 提取滤波后的状态:样本内为原训练集滤波结果,样本外为逐步更新后的状态
state_full_filter = filter_results.filtered_state

方法3:获取全样本平滑状态(利用所有观测修正所有状态)

如果需要事后最优的状态估计(用全样本观测包括测试集回溯修正所有状态),使用smooth方法:

# 更新模型的内生变量为全样本数据(若有外生变量,赋值为res_spx.model.exog = exog_full)
res_spx.model.endog = y_full

# 运行平滑算法
smooth_results = res_spx.smooth()

# 提取平滑后的状态,包含样本内和样本外的事后最优估计
state_full_smooth = smooth_results.smoothed_state

关键说明

  • 滤波状态:仅使用当前及之前的观测计算,适合实时状态估计场景;
  • 预测状态:不使用测试集观测,仅基于训练集末尾状态推算,适合纯预测场景;
  • 平滑状态:使用全部观测(包括测试集)回溯修正所有状态,适合事后分析场景;
  • 若模型包含外生变量,需确保扩展后的外生变量维度与全样本内生变量完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:32