基于预测值作为真值的Pandas时间序列股票价格预测技术问询
股票收盘价时序预测的后续实践建议
你已经完成了时序预测中最核心的预处理步骤——用
pandas.DataFrame.shift()构建了7日滞后特征,还特意保留最后两周的真实滞后数据来模拟未来预测场景,这个思路完全贴合真实业务里的预测逻辑,做得非常到位!
接下来可以按这几个步骤推进你的项目:
1. 合理划分训练与验证集
- 从主数据集
df中剔除最后两周的test_df,剩余部分作为训练集; - 建议再从训练集里拆分出最近1-2个月的数据作为验证集,用来调整模型超参数,避免直接用测试集调参导致的过拟合问题。
2. 选择适配的模型方向
根据你的数据规模(一年数据)和特征类型(滞后特征),推荐几个落地性强的模型:
- 基线模型:线性回归:能快速验证你的滞后特征是否有效,作为后续模型的性能参考基准;
- 传统时序模型:ARIMA/SARIMA:如果你的股票数据有明显的趋势或季节性,这类模型能精准捕捉时序规律;
- 机器学习模型:XGBoost/LightGBM:擅长处理非线性关系,对滞后特征的兼容性极佳,训练和推理速度也适合小规模数据;
- 深度学习模型:LSTM/GRU:如果想尝试捕捉更长周期的时序依赖,可以用这类模型,但需要更多的调参和数据预处理工作(比如归一化)。
3. 模拟真实滚动预测(重点环节)
既然你想用test_df模拟未来两周的预测,一定要避免数据泄露——真实场景中你不可能提前拿到未来的滞后值,所以得用滚动预测的方式:
- 先用训练集训练模型,预测第1天的收盘价;
- 把第1天的预测值作为新的
t-1特征,替换test_df中第2行对应的真实t-1值,同时把原t-2到t-7依次前移一位(变成t-1到t-6); - 重复这个过程,直到完成两周的所有预测。
- 这里给你一段简化的示例代码:
import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression # 初始化并训练基线模型 model = LinearRegression() X_train = train_df[['t-7', 't-6', 't-5', 't-4', 't-3', 't-2', 't-1']] y_train = train_df['close_price'] model.fit(X_train, y_train) # 初始化第一组滞后特征(来自test_df的第一行) current_lags = test_df.iloc[0][['t-7', 't-6', 't-5', 't-4', 't-3', 't-2', 't-1']].values.reshape(1, -1) predictions = [] # 滚动预测两周 for _ in range(len(test_df)): pred = model.predict(current_lags)[0] predictions.append(pred) # 更新滞后特征:左移一位,把最新预测值放到最后一位 current_lags = np.roll(current_lags, -1) current_lags[0, -1] = pred # 将预测结果合并到测试集 test_df['predicted_close'] = predictions
4. 模型效果评估
- 用适合时序数据的指标:MAE(平均绝对误差)、RMSE(均方根误差)、MAPE(平均绝对百分比误差)——MAPE对股票这类关注相对波动的场景更有参考价值;
- 可视化真实收盘价与预测值的走势曲线,能更直观地看到模型在涨跌节点的预测表现。
内容的提问来源于stack exchange,提问作者anon_swe
相关产品推荐
相关产品推荐

