跳到主内容
研究主线时间序列与统计套利 · 第43–50讲7/8 · 配套练习模块导览 →
练习

第49讲:卡尔曼滤波 (Kalman Filters) · 练习

调整过程噪声与观测噪声并比较滤波结果,估计股票对 ETF 的动态暴露,再检查参数敏感性与残差。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

习题1:卡尔曼滤波参数敏感性分析#

问题描述#

在"实例1:下落小球跟踪"中,调整观测噪声协方差参数(observation_covariance)取值分别为1、10、50,完成以下任务:

  1. 生成对应噪声水平的观测数据

  2. 运行不同参数配置的卡尔曼滤波器

  3. 绘制不同噪声水平下的滤波效果对比图

  4. 分析卡尔曼增益随噪声参数变化的规律

依赖代码#

code
import numpy as np
import matplotlib.pyplot as plt
from pykalman import KalmanFilter

# 基础参数配置
tau = 0.1
g = -9.8
true_initial_position = 30
true_initial_velocity = 10

# 生成真实轨迹
t = np.arange(40)
real_positions = true_initial_position + true_initial_velocity*t + 0.5*g*tau**2*t**2

# 不同噪声水平的观测数据生成
noise_levels = [1, 10, 50]
observations = {
    f'noise_{nl}': real_positions + np.random.randn(len(t))*nl
    for nl in noise_levels
}

# 此处留空用于滤波器配置和运行

习题2:动态风险敞口分析#

问题描述#

选取新能源汽车行业股票(如TSLA)与科技行业ETF(QQQ),完成以下任务:

  1. 获取2021年1月1日至2023年12月31日的日收益率数据

  2. 实现动态Beta估计算法

  3. 绘制Beta系数随时间变化曲线

  4. 比较与传统60日滚动回归计算的Beta差异

依赖代码#

code
import yfinance as yf
import pandas as pd

# 数据获取与预处理
symbols = ['TSLA', 'QQQ']
start_date = '2021-01-01'
end_date = '2023-12-31'

data = yf.download(symbols, start=start_date, end=end_date)['Close']
returns = data.pct_change().dropna()

# 数据对齐
market_returns = returns['QQQ'].values
stock_returns = returns['TSLA'].values

# 观测矩阵构建(包含市场收益和截距项)
observation_matrix = np.ones((len(market_returns), 1, 2))
observation_matrix[:, 0, 0] = market_returns

# 此处留空用于卡尔曼滤波器配置和运行

完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。