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

如何基于日期列数据完成未来销量预测并优化模型误差

预测值和训练集数量一致的原因

你调用model_rf.predict(X_train)时传入的是训练集的特征矩阵,输出结果自然和训练集样本数一致。要预测2022-01这类未来时间段的销量,必须先手动构造对应时间段的特征输入,再传入模型做预测。

RMSE是否过高的判断

你当前计算的是训练集上的误差,参考价值很低:

  • RMSE没有绝对的高低标准,和你的销量数值量级直接挂钩。如果你的单天销量本身就是千万级,795万的RMSE属于正常范围,你可以用RMSE / 销量均值计算误差的相对占比来判断是否符合预期。
  • 训练集R² 0.92只能说明模型对训练数据的拟合程度,不能代表模型的真实泛化能力,你拆分的测试集完全没有用到,应该先计算测试集上的误差再做判断。

现有代码的核心问题和改进方案

  • 禁止随机拆分时间序列数据:用sample随机抽取80%数据做训练集是典型错误,会造成数据泄露——相当于用未来的数据训练模型来预测过去,得到的拟合指标完全失真。正确做法是先把数据按日期升序排序,取前80%时间段的数据作为训练集,后20%作为测试集。
  • 年份独热编码错误:对Year列做独热编码会导致模型无法预测训练集未覆盖的年份,比如训练集只有2019-2021年的数据,特征里就没有Year_2022列,模型无法处理2022年的预测输入。建议把年份改为数值型特征,不要做独热编码。
  • 未来特征构造方法:以预测2022年1月为例,先用pd.date_range(start='2022-01-01', end='2022-01-31')生成该月所有日期,再提取年、月、日、星期几、年积日等特征,之后和训练集的特征列做对齐,缺失的列补0,多余的列删除后就可以传入模型预测。
  • 模型选型优化:随机森林属于树模型,不擅长时间序列的趋势外推,如果你的销量有明显的增长/下降、季节性规律,更推荐用Prophet、ARIMA这类专门的时间序列模型,开发成本更低,预测效果也更好。
  • 补充测试集误差计算:在训练完模型后加上以下代码即可得到真实的泛化误差:
X_test = test[predictors_train].values
y_test = test[target_column_train].values
pred_test_rf = model_rf.predict(X_test)
print("测试集RMSE:", np.sqrt(mean_squared_error(y_test,pred_test_rf)))
print("测试集R²:", r2_score(y_test, pred_test_rf))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:03