Day 7:第一周复习与模型综合比较

Day 7 完整教程:第一周复习与模型综合比较

📋 目录

  1. 第一周知识点回顾
  2. 模型比较方法论
  3. 评估指标的深层理解
  4. 模型选择策略
  5. 量化交易中的模型评估
  6. 完整编程实战(多模型对比)

第一部分:第一周知识点回顾(2小时理论)

1.1 Day 1:机器学习基础与评估指标

核心概念

  • 监督学习、无监督学习、强化学习的区别
  • 过拟合:训练好测试差;欠拟合:两者都差
  • 数据集划分:训练集→验证集→测试集(按时间顺序)

评估指标

  • 回归:MSE、MAE、R²
  • 分类:准确率、精确率、召回率、F1、AUC

量化要点

  • 时间序列数据必须按时间划分,不能随机打乱
  • AUC比准确率更适合不平衡数据

1.2 Day 2:线性回归与正则化

核心算法

  • 最小二乘法:解析解 β=(XTX)−1XTyβ = (X^TX)^{-1}X^Tyβ=(XTX)−1XTy
  • 梯度下降:迭代优化 β:=β−α∇J(β)β := β - α∇J(β)β:=β−α∇J(β)

正则化

  • Ridge (L2):J=MSE+λ∑βj2J = \text{MSE} + λ \sum β_j^2J=MSE+λ∑βj2,系数收缩
  • Lasso (L1):J=MSE+λ∑∣βj∣J = \text{MSE} + λ \sum| β_j|J=MSE+λ∑∣βj∣,稀疏解

量化应用

  • 多因子模型的因子加权
  • 收益率预测的基准模型

1.3 Day 3:逻辑回归与分类

核心原理

  • Sigmoid函数:p=1/(1+e−z)p = 1/(1+e^{-z})p=1/(1+e−z),将线性输出转为概率
  • 决策边界:z=0z = 0z=0,即 βTx=0β^Tx = 0βTx=0(线性)
  • 交叉熵损失:L=−[ylog⁡(p)+(1−y)log⁡(1−p)]L = -[y \log(p) + (1-y)\log(1-p)]L=−[ylog(p)+(1−y)log(1−p)]

技术指标

  • RSI:动量指标,超买(>70)/超卖(<30)
  • MACD:趋势跟踪,金叉/死叉信号

1.4 Day 4:分类评估深入

ROC曲线

  • X轴:FPR,Y轴:TPR
  • AUC:随机正样本排在负样本前的概率
  • 优点:不受类别不平衡影响

PR曲线

  • X轴:召回率,Y轴:精确率
  • 更适合极度不平衡数据

阈值选择

  • 最大化F1:平衡精确率和召回率
  • 成本最小化:根据业务成本矩阵
  • 约束优化:给定精确率/召回率下限

1.5 Day 5:KNN与相似度

核心原理

  • 基于实例的学习,无需训练
  • 分类:多数投票;回归:平均

距离度量

  • 欧氏距离:∑(xi−yi)2\sqrt{\sum(x_i-y_i)^2}∑(xi−yi)2
  • 曼哈顿距离:∑∣xi−yi∣\sum|x_i-y_i|∑∣xi−yi∣
  • 余弦相似度:关注方向

K值选择

  • 小K过拟合,大K欠拟合
  • 交叉验证选择最佳K

维度灾难

  • 高维空间距离失效
  • 缓解方法:PCA降维、特征选择

1.6 Day 6:决策树

分裂准则

  • 信息增益(ID3):Gain=H(S)−H(S∣A)\text{Gain} = H(S) - H(S|A)Gain=H(S)−H(S∣A)
  • 基尼系数(CART):Gini=1−∑pi2\text{Gini} = 1 - \sum p_i^2Gini=1−∑pi2

过拟合控制

  • 预剪枝:max_depth, min_samples_split
  • 后剪枝:成本复杂度剪枝 (ccp_alpha)

优点 :可解释性强、自动特征选择
缺点:容易过拟合、不稳定

1.7 第一周核心公式总结

模型 核心公式 损失函数 超参数
线性回归 y=βTxy = β^Txy=βTx MSE α (正则化)
逻辑回归 p=σ(βTx)p = σ(β^Tx)p=σ(βTx) 交叉熵 C (正则化)
KNN 距离度量 - K, metric
决策树 树结构 基尼/熵 max_depth

第二部分:模型比较方法论

2.1 为什么要比较模型?

目的

  1. 找到最适合当前问题的模型
  2. 理解不同模型的优缺点
  3. 为集成学习提供基础
  4. 避免"一刀切"的选择

2.2 比较的维度

维度 说明 评估方式
预测性能 准确率、AUC等 测试集评估
稳定性 方差大小 交叉验证
训练速度 拟合时间 计时
预测速度 推理时间 计时
可解释性 能否理解决策过程 定性评估
内存消耗 存储需求 模型大小

2.3 公平比较的原则

必须遵守

  1. 相同的数据集划分
  2. 相同的评估指标
  3. 相同的随机种子
  4. 对每个模型进行适当的超参数调优

常见陷阱

  • 数据泄露(用未来信息训练)
  • 测试集污染(反复使用测试集调参)
  • 比较不匹配的指标

2.4 统计显著性检验

为什么需要:一个模型AUC比另一个高0.01,是真的更好还是随机波动?

方法

  • 配对t检验:比较同一测试集上的预测差异
  • McNemar检验:比较分类器的错误模式
  • DeLong检验:比较两个AUC的差异
python 复制代码
from scipy.stats import ttest_rel

# 配对t检验
t_stat, p_value = ttest_rel(pred1, pred2)
if p_value < 0.05:
    print("两个模型有显著差异")

第三部分:评估指标的深层理解

3.1 不同场景下的指标选择

应用场景 推荐指标 原因
涨跌预测(平衡) 准确率、AUC 直观
涨跌预测(不平衡) AUC、F1 不受不平衡影响
收益率预测 MSE、MAE 回归任务
信号质量要求高 精确率 减少误报
抓住机会重要 召回率 减少漏报
策略比较 夏普比率 风险调整后收益

3.2 指标之间的权衡

text 复制代码
精确率 ↑ → 阈值 ↑ → 召回率 ↓
召回率 ↑ → 阈值 ↓ → 精确率 ↓
F1分数 = 2 * (P * R) / (P + R)  # 平衡两者

3.3 超越单一指标

多指标评估矩阵

模型 准确率 精确率 召回率 F1 AUC 训练时间(s) 推理时间(ms)
LR 0.72 0.68 0.65 0.66 0.75 0.1 0.01
KNN 0.70 0.66 0.63 0.64 0.73 0 0.5
DT 0.71 0.67 0.64 0.65 0.74 0.05 0.001

选择建议

  • 追求最高AUC → 选择AUC最高的
  • 追求可解释性 → 选择LR或DT
  • 追求推理速度 → 选择DT或LR
  • 追求稳定性 → 选择CV方差小的

第四部分:模型选择策略

4.1 没有免费午餐定理

没有任何一个模型在所有问题上都优于其他模型。

含义

  • 需要针对具体问题选择模型
  • 简单模型可能是最好的起点
  • 复杂模型不一定更好

4.2 模型选择流程

text 复制代码
1. 理解问题(分类/回归?数据规模?特征类型?)
   ↓
2. 选择候选模型(2-5个代表性模型)
   ↓
3. 交叉验证评估(同一数据划分)
   ↓
4. 多指标比较(不只看一个指标)
   ↓
5. 选择最佳模型或集成

4.3 模型选择决策树

python 复制代码
# 伪代码
if n_samples < 100:
    if n_features < 10:
        recommend = "逻辑回归 / 朴素贝叶斯"
    else:
        recommend = "线性回归 + 正则化 / SVM"
elif n_samples > 10000:
    if need_interpretability:
        recommend = "决策树 / 逻辑回归"
    else:
        recommend = "随机森林 / XGBoost / LightGBM"
else:
    if need_interpretability:
        recommend = "逻辑回归 / 决策树"
    else:
        recommend = "随机森林 / SVM"

第五部分:量化交易中的模型评估

5.1 回测与模型评估的区别

方面 模型评估 策略回测
关注点 预测准确率 收益、风险
时间框架 样本外预测 完整交易周期
考虑因素 特征、标签 交易成本、滑点
输出 准确率、AUC 夏普比率、回撤

5.2 量化模型评估的特殊性

1. 时间序列特殊性

  • 必须按时间划分,不能随机
  • 使用TimeSeriesSplit交叉验证

2. 过拟合风险更高

  • 金融数据信噪比低
  • 需要严格的样本外测试

3. 业务指标更重要

  • 夏普比率 > 准确率
  • 最大回撤 > AUC

5.3 量化模型的评估框架

python 复制代码
def evaluate_quant_model(model, X_train, X_test, y_train, y_test, prices):
    """量化模型评估框架"""
    
    # 1. 基础预测评估
    y_pred = model.predict(X_test)
    y_proba = model.predict_proba(X_test)[:, 1] if hasattr(model, 'predict_proba') else None
    
    # 2. 分类指标
    metrics = {
        'accuracy': accuracy_score(y_test, y_pred),
        'precision': precision_score(y_test, y_pred),
        'recall': recall_score(y_test, y_pred),
        'f1': f1_score(y_test, y_pred),
        'auc': roc_auc_score(y_test, y_proba) if y_proba is not None else None
    }
    
    # 3. 策略指标(假设根据预测信号交易)
    signals = y_proba > 0.5 if y_proba is not None else y_pred
    returns = prices.pct_change().shift(-1)
    strategy_returns = signals * returns
    sharpe = strategy_returns.mean() / strategy_returns.std() * np.sqrt(252)
    
    # 4. 稳定性评估
    cv_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc')
    
    return {
        'prediction_metrics': metrics,
        'strategy_sharpe': sharpe,
        'cv_auc_mean': cv_scores.mean(),
        'cv_auc_std': cv_scores.std()
    }

相关推荐
小超同学你好2 小时前
Transformer 27. Vision Transformer(ViT):把图像当作「词序列」的编码器
人工智能·深度学习·transformer
玛丽莲茼蒿2 小时前
Leetcode hot100 买卖股票的最佳时机【简单】
算法·leetcode·职场和发展
登山人在路上2 小时前
RAGAS 中的已知偏差详解
人工智能·全文检索·ai编程
空白诗2 小时前
ModelEngine Nexent:一句话创建智能体的全新范式
人工智能·nexent
元直数字电路验证2 小时前
AI入门体系化知识框架
人工智能
阿Y加油吧2 小时前
两道 LeetCode 题的复盘笔记:从「只会暴力」到「懂优化」
笔记·算法·leetcode
zhangshuang-peta2 小时前
MCP 与治理:当 Agent 成为组织决策的一部分
大数据·人工智能·ai agent·mcp·peta
SCBAiotAigc2 小时前
2026.4.21:在做yolo26分类任务时出现save_dir一直是个固定的一个值的避坑技巧
人工智能·具身智能·yolo26
原我归来是少年2 小时前
一 InsightMemory - 从 RAG 到 Memory:AI 应用缺的不是搜索,而是持续认知
人工智能