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=βTxMSEα (正则化)
逻辑回归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的差异
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 指标之间的权衡

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

3.3 超越单一指标

多指标评估矩阵:

模型准确率精确率召回率F1AUC训练时间(s)推理时间(ms)
LR0.720.680.650.660.750.10.01
KNN0.700.660.630.640.7300.5
DT0.710.670.640.650.740.050.001

选择建议:

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

第四部分:模型选择策略

4.1 没有免费午餐定理

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

含义:

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

4.2 模型选择流程

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

4.3 模型选择决策树

# 伪代码
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 量化模型的评估框架

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐