📈 过拟合概述

量化策略 · 第1课
🔍 什么是过拟合 Overfitting in Quant

🧠 定义

过拟合是指模型在训练数据上表现极好,但在未见过的新数据(样本外)上表现糟糕。模型“记住”了噪声而非潜在规律。

高方差 · 低偏差

🎯 量化特例

策略在历史回测中夏普比率 > 3.0,最大回撤 < 3%,但实盘或向前测试时迅速失效,收益崩塌。

曲线拟合

🧩 直观理解

好比学生死记硬背习题答案,考试遇到新题目完全不会。模型没有学会真正的市场动力学。

⚡ 量化策略中的过拟合表现
欠拟合 (高偏差) 过拟合 (高方差) ✅ 合适拟合 (泛化良好)
图1 · 不同拟合程度对比(蓝:欠拟合;红:过拟合;绿:理想)
⚖️ 过拟合 vs 欠拟合 对比
维度 过拟合 (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
🛡️ 过拟合防范 · 架构流程
数据分区 交叉验证 正则化 样本外测试 🔁 迭代验证 · 避免数据窥探 · 简化模型 稳健策略 → 低过拟合风险
图2 · 过拟合防范流程 (数据分区 → 交叉验证 → 正则化 → 样本外测试)