4、机器学习基础回顾:监督学习与无监督学习、训练集/验证集/测试集划分、过拟合与欠拟合、交叉验证
好,咱们进入第四章。说实话,这一章是很多入门同学的「劝退点」。因为概念多,而且环环相扣。但我个人觉得,只要把这几件事理清楚,后面做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正则化,减少了特征数量,才把差距拉回来。
解决过拟合的常用方法:
- 增加训练数据量
- 降低模型复杂度(减少层数、树深度等)
- 正则化(L1、L2)
- 早停(Early Stopping)
- 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