过拟合是指模型在训练数据上表现极好,但在未见过的新数据(样本外)上表现糟糕。模型“记住”了噪声而非潜在规律。
高方差 · 低偏差策略在历史回测中夏普比率 > 3.0,最大回撤 < 3%,但实盘或向前测试时迅速失效,收益崩塌。
曲线拟合好比学生死记硬背习题答案,考试遇到新题目完全不会。模型没有学会真正的市场动力学。
| 维度 | 过拟合 (Overfitting) | 欠拟合 (Underfitting) |
|---|---|---|
| 定义 | 模型学习噪声和异常,丧失泛化能力 | 模型未能捕捉数据中的有效结构 |
| 偏差/方差 | 低偏差,高方差 | 高偏差,低方差 |
| 训练误差 | 极低 (接近0) | 较高 |
| 测试误差 | 非常高 (泛化崩溃) | 较高 (但可能比过拟合稳定) |
| 量化策略表现 | 回测夏普 > 3.0,实盘为负 | 回测夏普通常 < 0.5,策略无信号 |
| 常见原因 | 参数过多、数据窥探、过度优化 | 模型容量不足、特征太少、迭代不足 |
| 解决方法 | 正则化、交叉验证、简化模型、样本外测试 | 增加特征、提升模型复杂度、减少约束 |
# 过拟合演示:使用高阶多项式拟合少量噪声点 import numpy as np import matplotlib.pyplot as plt np.random.seed(42) X = np.linspace(0, 1, 10) y = np.sin(2 * np.pi * X) + 0.2 * np.random.randn(10) # 过拟合:15阶多项式 (参数远多于样本) coeffs = np.polyfit(X, y, deg=15) poly = np.poly1d(coeffs) X_fine = np.linspace(0, 1, 200) y_pred = poly(X_fine) # 训练误差几乎为0,但震荡剧烈 —— 过拟合典型 print(f"训练残差: {np.mean((poly(X) - y)**2):.6f}") # 接近0