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 分钟前
让 Fortran 模型自己调用 Agent:原生 Fortran 2008 实现深度剖析
人工智能·python·架构·机器人·开源·fortran
fly-iot16 分钟前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
郝学胜-神的一滴20 分钟前
游戏设计:原型与开发 17:数字化系统里的思维体操
人工智能·游戏·游戏程序·游戏策划·游戏设计
腾讯云大数据30 分钟前
腾讯云发布一站式多模态数据处理与模型训推方案,助力Physical AI释放生产力
大数据·人工智能·云计算·腾讯云
GitCode官方1 小时前
从大语言模型到具身智能:百度百舸 LoongForge 入驻 AtomGit
人工智能·react native·百度·harmonyos·atomgit
Easy_API9 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
GlobalInfo9 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
紧跟先前的步伐9 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
释厄62310 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
老金带你玩AI10 小时前
集万家所长,一键复制的Agent.md!
人工智能