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

如何搭建时序股价预测模型并实现滚动增量训练与预测?

实现方案

第一步:数据预处理

首先需要确保数据集按日期正序排列,避免时序数据泄露:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 转换日期格式并按时间排序
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date').reset_index(drop=True)

第二步:滚动训练+预测实现

核心逻辑是先拿前3000行训练初始模型,之后按天迭代:预测当日所有股票价格→将当日真实数据加入训练集→更新模型→预测下一日数据:

# 配置参数
initial_train_rows = 3000
all_unique_dates = df['Date'].unique()
# 定位初始训练集截止日期,后续所有日期都进入滚动预测流程
last_initial_date = df.loc[initial_train_rows - 1, 'Date']
predict_dates = all_unique_dates[all_unique_dates > last_initial_date]

# 初始化模型和初始训练集
model = LinearRegression()
X_train = df.loc[:initial_train_rows-1, ['Stock_id', 'last_price']]
y_train = df.loc[:initial_train_rows-1, 'price']
model.fit(X_train, y_train)

result_collect = []
for cur_date in predict_dates:
    # 取当日所有股票的待预测数据
    cur_data = df[df['Date'] == cur_date].copy()
    X_cur = cur_data[['Stock_id', 'last_price']]
    # 生成预测值
    cur_data['Predicted'] = model.predict(X_cur)
    # 存储结果
    result_collect.append(cur_data[['Date', 'price', 'Predicted']].rename(columns={'price':'Actual'}))
    # 将当日真实数据加入训练集,更新模型
    X_train = pd.concat([X_train, X_cur], ignore_index=True)
    y_train = pd.concat([y_train, cur_data['price']], ignore_index=True)
    model.fit(X_train, y_train)

# 输出格式化结果
final_result = pd.concat(result_collect, ignore_index=True)
final_result['Date'] = final_result['Date'].dt.strftime('%m-%d-%Y')
print(final_result)

优化建议

  • 原方案中随机拆分训练测试集的方法不适用时序预测场景,会引入未来数据导致效果评估失真,本次滚动训练的逻辑完全贴合真实线上预测的情况,结果可信度更高。
  • 线性回归拟合能力有限,可以尝试替换为XGBoost、LightGBM等树模型,对结构化数据的拟合效果更好,也不需要额外做特征标准化预处理。
  • 如果后续数据量持续增大,可以改用支持增量训练的模型(比如sklearn的SGDRegressor),无需每次全量重训,能大幅节省计算资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:06:01