基于tidymodels建模的实际值vs预测值图异常原因问询
实际值vs预测值图异常原因解读
异常形态的核心含义
从你提供的图像来看,所有测试样本的预测值高度集中在一个极窄的区间,而实际值的分布范围却很宽。这说明你的所有模型都退化成了常数预测器——它们没有学到任何能区分样本的有效模式,只是在输出训练集目标变量(log_shares)的均值(或中位数)。
为什么所有模型/配方都出现这个问题?
这种跨模型、跨配方的一致异常,不是单一模型的调参或拟合问题,核心原因大概率是以下两类:
- 特征与目标变量几乎无关联:
不管是全变量配方还是EDA筛选后的配方,所有输入特征和log_shares的相关性都极低,模型无法从数据中学习到任何能预测目标的信号,只能退而求其次输出最“安全”的常数预测值。 - 目标变量的分布特性导致模型学习失效:
如果原始shares是极端偏态分布(比如绝大多数样本的分享数极低,仅有极少数样本分享数极高),即使取对数后,log_shares仍可能大量聚集在某一区间。这种情况下,模型预测均值就能获得相对较低的RMSE,自然会放弃学习复杂模式。
排查方向
- 验证目标变量分布:
绘制训练集log_shares的直方图,看是否存在极端聚集;计算训练集log_shares的均值,对比图中预测值的集中值是否一致——如果完全吻合,就坐实了模型在输出均值。 - 检查特征与目标的相关性:
对数值特征,用cor()计算与log_shares的皮尔逊相关系数;对分类特征,用卡方检验看是否和目标有显著关联。如果所有特征的相关性都接近0,那就是特征本身无预测价值。 - 检查交叉验证结果:
用collect_metrics()查看交叉验证过程中的RMSE值,如果所有fold的RMSE都很高且差异极小,说明模型在训练阶段就没有学到有效信息。 - 验证配方处理后的数据:
执行prep(all_recipe) %>% bake(new_data = pop_train),查看处理后的特征是否合理——有没有出现全部为同一值、或方差接近0的无效特征。
内容的提问来源于stack exchange,提问作者nth1824
相关产品推荐
相关产品推荐

