4、机器学习基础回顾:监督学习与无监督学习、训练集/验证集/测试集划分、过拟合与欠拟合、交叉验证

好,咱们进入第四章。说实话,这一章是很多入门同学的「劝退点」。因为概念多,而且环环相扣。但我个人觉得,只要把这几件事理清楚,后面做ESG因子预测就会顺很多。

咱们先看一张图,把今天要聊的四个核心概念串起来。你想想看,机器学习建模就像训练一个学生——你得给他教材(数据)、安排考试(验证)、最后才能上考场(测试)。

机器学习基础回顾 · 知识体系 监督 vs 无监督 有标签 vs 无标签 数据划分 训练/验证/测试 过拟合 & 欠拟合 偏差与方差 交叉验证 K-Fold 核心逻辑:先选对方法 → 再分好数据 → 防止过拟合 → 用交叉验证稳定评估 最终目标:在ESG因子预测中,让模型既「学得会」又「不跑偏」

4.1 监督学习 vs 无监督学习

说白了,这两者的区别就一句话:有没有标签

监督学习,就是你有输入X,也有输出Y。模型的任务是学习从X到Y的映射。比如我们做ESG因子预测,历史数据里既有公司财报数据(X),也有它对应的ESG评分(Y),这就是典型的监督学习——回归问题。

无监督学习呢?只有X,没有Y。模型自己去找数据里的结构。比如把ESG评分相近的公司自动聚类,看看哪些公司「抱团」了。

重要区分:

  • 监督学习:回归(预测连续值)、分类(预测离散类别)
  • 无监督学习:聚类(K-Means、DBSCAN)、降维(PCA、t-SNE)

我在项目中遇到过一件事。有一次做ESG因子挖掘,一开始想用无监督学习找模式,结果发现数据里噪声太大,聚类结果完全没法解释。后来换成监督学习,用已有的ESG评级做标签,效果反而好很多。所以我的建议是:能用监督就别用无监督,除非你真的没有标签。

4.2 训练集 / 验证集 / 测试集划分

这个划分,我见过太多人搞混了。咱们捋清楚。

  • 训练集:模型学习的地方。相当于学生的课本。
  • 验证集:模型调参的地方。相当于模拟考试。
  • 测试集:最终评估的地方。相当于高考。

你想想看,如果一个学生拿着高考真题当练习题做,那高考成绩能反映真实水平吗?不能。同样的道理,测试集绝对不能参与训练过程,连看一眼都不行。

常见的划分比例:

数据集 常见比例 用途
训练集 60% - 80% 模型参数学习
验证集 10% - 20% 超参数调优、模型选择
测试集 10% - 20% 最终性能评估

我的小技巧:做ESG时序预测时,千万别随机打乱数据。时间序列必须按时间顺序划分。我曾经吃过这个亏——随机划分后模型表现极好,一上线就崩,因为未来数据泄露到了训练集里。

4.3 过拟合与欠拟合

这两个概念,我换个说法你就懂了。

欠拟合:模型太简单,连训练集都没学好。就像学生只背了目录就去考试。

过拟合:模型太复杂,把训练集的噪声都记住了。就像学生把课本上的印刷错误都背下来了,换本新书就懵。

怎么判断?看训练误差和验证误差的差距:

  • 训练误差高 → 欠拟合
  • 训练误差低、验证误差高 → 过拟合
  • 两者都低 → 刚刚好

⚠️ 避坑指南:我曾经做过一个ESG因子模型,训练集R²高达0.98,我高兴坏了。结果测试集上一跑,R²直接掉到0.3。这就是典型的过拟合。后来怎么解决的?加了L2正则化,减少了特征数量,才把差距拉回来。

解决过拟合的常用方法:

  1. 增加训练数据量
  2. 降低模型复杂度(减少层数、树深度等)
  3. 正则化(L1、L2)
  4. 早停(Early Stopping)
  5. Dropout(神经网络专用)

解决欠拟合就简单了:换更复杂的模型,或者增加特征。

4.4 交叉验证

交叉验证,说白了就是「穷举验证法」。它的核心思想是:不依赖某一次的数据划分,而是多次划分取平均。

最常用的是 K-Fold 交叉验证

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=100)
scores = cross_val_score(model, X, y, cv=5, scoring='r2')

print(f'5折交叉验证R²: {scores}')
print(f'平均R²: {scores.mean():.3f} (±{scores.std():.3f})')

这段代码做了什么事?把数据分成5份,每次用4份训练、1份验证,轮5次。最后取平均。这样评估结果更稳定,不会因为某次划分运气好或差而失真。

为什么交叉验证对ESG因子预测特别重要?

因为ESG数据通常样本量不大,而且噪声多。如果只用一次训练/测试划分,很可能因为随机性得到虚假的高分。交叉验证能帮你识别出「这个模型是真的好,还是只是运气好」。

我个人习惯在项目初期先用5折交叉验证快速筛选模型。等确定最终模型后,再用独立的测试集做一次最终评估。记住:交叉验证是帮你选模型的,不是帮你吹嘘最终成绩的

嗯,这里要注意:对于时间序列数据,不能用普通的K-Fold。要用TimeSeriesSplit,保证训练集的时间始终在验证集之前。否则就是「用未来预测过去」,这在金融领域是大忌。

好了,这一章的内容就这些。监督与无监督帮你选方向,数据划分帮你定规矩,过拟合与欠拟合帮你避坑,交叉验证帮你稳评估。这四个概念,是后面所有模型的基础。你想想看,如果连数据都没分对,模型再花哨又有什么用?


公众号:蓝海资料掘金营,微信deep3321