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

如何在Python中用Rolling Regression实现股票次日调整收盘价预测

滚动回归预测次日调整收盘价的正确实现

你的代码存在三个核心问题,直接导致结果不符合预期:

  • 常数项未加入自变量矩阵:你虽然创建了const列,但exog参数只传入了Open和Close,模型根本没用到常数项
  • 预测目标错位:当前代码是用当日的Open、Close预测当日的Adj Close,而你需要的是用当日特征预测次日的调整收盘价
  • 窗口逻辑未匹配预测需求:窗口大小设为5时,需明确用前5天数据拟合模型,再预测第6天的价格

正确实现步骤

1. 预处理数据:创建滞后的目标变量

我们需要把Adj Close向后平移一期,让每一行的当日特征对应次日的调整收盘价,构建正确的预测关系:

# 生成次日调整收盘价作为预测目标,shift(-1)表示向下平移一行
df_20['next_adj_close'] = df_20['Adj Close'].shift(-1)
# 删除最后一行(无次日数据,无法用于预测)
df_20 = df_20.dropna(subset=['next_adj_close'])

2. 构建包含常数项的自变量矩阵

将你创建的const列加入自变量集合,确保模型包含截距项:

df_20['const'] = 1
# 自变量包含常数项、Open、Close
exog_vars = ['const', 'Open', 'Close']

3. 拟合滚动回归模型

窗口大小设为5,意味着用连续5天的数据拟合模型,再预测第6天的价格:

from statsmodels.regression.rolling import RollingOLS

# 目标变量是次日调整收盘价,自变量是包含常数项的特征集合
model = RollingOLS(endog=df_20['next_adj_close'], exog=df_20[exog_vars], window=5)
rres = model.fit()

4. 生成预测值与查看参数

拟合完成后,可查看滚动系数或生成对应预测值:

# 查看各窗口的回归系数
print(rres.params)

# 生成次日调整收盘价的预测值(前4行为NaN,因为凑不够5个样本的窗口)
df_20['predicted_next_adj_close'] = rres.predict()

结果说明

  • 前4行的参数和预测值为NaN:因为窗口大小为5,需要至少5个样本才能拟合第一个有效模型
  • 每个窗口的系数基于过去5天数据计算,对应的预测值是该窗口下一个交易日的调整收盘价

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:15:35