拟合过去很容易
只要给模型足够的自由度,它就能拟合任何训练数据,连噪声也不放过。这就是过拟合:样本内拟合很漂亮,一遇到新数据就崩溃。欠拟合则相反,是模型太简单,抓不住规律。两者的解药都是用模型没见过的数据来评判它。样本内的 在加入预测变量时永远不会下降,因此奖励了过拟合,而调整后的 会惩罚每个额外的预测变量。
(1)
折交叉验证把数据分成 折,用其中 折训练,在留出的那一折上评分,再对 个分数取平均。另有一个只在最后动用一次的独立测试集,给出最终诚实的估计;验证折则会被诸如惩罚 这样的选择消耗掉。对时间序列,打乱顺序是错误的:随机划分会用晚于测试日的数据训练,等于泄露了未来。应改用向前滚动(walk-forward)验证,始终用过去训练、在随后的一段上测试,必要时留出间隔以避免标签重叠。
数折数与惩罚预测变量1000 个观测、5 折时,每折有 200 个,每个模型用 800 个训练、200 个测试。一个 、 个预测变量的回归,;调整后的值为 ,低得多。向前滚动验证是:用第 1 到 3 年训练、第 4 年测试;用第 1 到 4 年训练、第 5 年测试;依此类推。对样本外分数取平均,比任何样本内拟合都更诚实。
- 过拟合:训练数据上很好,新数据上很差。欠拟合:两者都差。
- 交叉验证:用部分折训练、在留出折上评分并取平均;留一个测试集到最后用。
- 时间序列:绝不打乱;用过去训练,在未来的块上测试(向前滚动)。
泄露悄无声息任何在测试之前使用测试期信息的步骤都是泄露,它会在没有任何报错的情况下抬高结果。用全样本均值对特征做标准化、在划分之前用全部数据挑选特征、把明天的价格当作特征,都属于泄露。每个变换都应只在训练折内拟合,再原样应用到测试折。
实验:评分内容
- 训练集的大小10 分
- 为什么不能打乱15 分
- 向前滚动测试15 分
- 调整后的 R 方15 分
- 术语15 分
- 识别泄露15 分
- 为什么样本内拟合说明不了什么15 分