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

相关推荐
AI科技先锋报几秒前
如何为陪伴机器人搭建自然的对话式 AI?技术链路与声网方案怎么选?
人工智能·机器人·语音识别
新知图书3 分钟前
14.5 AI试驾预约系统的完整实现
人工智能·agent·ai agent·智能体
ZYJCSZKJ25 分钟前
基于大语言模型的地域实体语义增强:生成式引擎优化(GEO)中的多模态内容生成实践
android·人工智能·语言模型
北方的银狐-Zero27 分钟前
OntoL本体产品—案例说明—穿透式投资监管案例UI设计说明
人工智能·本体论
爱分享的康康29 分钟前
自动驾驶 HiL 测试选型|主流方案、供应商评估与仿真技术解析
人工智能·机器学习·自动驾驶
GIS数据转换器30 分钟前
智慧林草“一张图“平台
java·大数据·服务器·前端·javascript·数据库·人工智能
HealthGeek32 分钟前
临床预后研究:微创一站式瓣膜手术全周期诊疗在高危多瓣膜病变中的应用价值分析
人工智能
2401_8858850434 分钟前
国际语音php接口代码示例:PHP使用cURL快速调用语音发送API
android·开发语言·前端·人工智能·python·php·语音识别
leoZ23134 分钟前
AI+前端提效-08 AI自动化文档:前端组件、接口、项目文档自动生成
前端·人工智能·深度学习·神经网络·目标检测·自然语言处理·自动化
沫儿笙41 分钟前
焊接机器人节气系统
人工智能·机器人