状态空间模型与卡尔曼滤波:动态系统估计框架
1. 为什么需要状态空间
当系统里存在不可观测状态(潜在趋势、时变系数)时,传统 ARIMA 很难直接表达。
状态空间模型把“真实状态演化”和“观测机制”拆开建模。
2. 模型形式
状态转移方程:
$$ x_t = F_t x_{t-1} + G_t w_t $$
观测方程:
$$ y_t = H_t x_t + v_t $$
其中 $w_t, v_t$ 分别是过程噪声与观测噪声。
3. 卡尔曼滤波直觉
- 先用系统方程做一步预测(predict)。
- 再用新观测修正预测(update)。
- 修正幅度由卡尔曼增益自动决定。
这是一种“模型知识 + 数据证据”实时融合机制。
4. Python 示例
import statsmodels.api as sm
# local level model: y_t = level_t + noise
mod = sm.tsa.UnobservedComponents(
endog=y,
level="local level",
seasonal=12,
)
res = mod.fit(disp=False)
print(res.summary())
# 平滑后的潜在状态
state = res.smoothed_state
print(state.shape)
# 未来 12 期预测
pred = res.get_forecast(steps=12)
print(pred.summary_frame().head())
5. 典型应用
- 实时 GDP nowcasting。
- 动态因子模型(宏观多指标降维)。
- 时变参数回归(TVP)。
- 传感器融合与轨迹跟踪。
6. 常见误区
- 不检验噪声协方差设定,直接套默认参数。
- 把滤波值与平滑值混用却不说明口径。
- 忽略结构突变,导致状态转移假设失真。
状态空间模型的优势在于结构可解释与在线可更新,非常适合“持续到达数据”的业务场景。