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()
    }

相关推荐
血色橄榄枝1 分钟前
基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
人工智能·算法·机器学习
A hao5 分钟前
高对比度在XR虚拟背景中的作用
大数据·图像处理·人工智能·xr·广告
小二·13 分钟前
2026年AI Agent框架横评:OpenClaw vs LangGraph vs CrewAI vs Superpowers,选型指南
人工智能
tyqtyq2215 分钟前
旅行打包清单 App — HarmonyOS AI 应用开发技术博客
人工智能·学习·华为·生活·harmonyos
guo_xiao_xiao_16 分钟前
YOLOv11道路桥梁裂缝与坑洼目标检测数据集
人工智能·yolo·目标检测
邵宇然32 分钟前
Rust Unsafe 代码规范:不安全块要小到能被审查
人工智能
Haoxuekeji1 小时前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai
c238561 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
视觉AI2 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
科技发布2 小时前
拓氪科技一站式品牌营销平台使用手册 舆情风险预警管理教程
人工智能·科技