Week 2 机器学习与量化建模

Machine Learning & Quantitative Modeling

本周内容概览

理论部分 (2.5h)

  • ML基础:偏差-方差权衡、正则化、交叉验证
  • 回归家族:线性→Ridge/Lasso→GAM
  • 分类模型:逻辑回归→SVM→朴素贝叶斯
  • 树模型:CART→Bagging→RF→XGBoost/LightGBM
  • 模型可解释性:SHAP
  • AutoML与自动化建模
  • 无监督学习:PCA, K-means

实践部分 (1.5h)

  • 信用评分案例实现
  • XGBoost模型训练与调参
  • SHAP可解释性分析
  • 模型比较与报告

2.1 机器学习基础

ML Fundamentals

  • 什么是机器学习
  • 监督学习 vs 无监督学习
  • 偏差-方差权衡
  • 过拟合与正则化
  • 交叉验证
  • 评估指标
  • No Free Lunch定理

什么是机器学习?

"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E." — Tom Mitchell (1997)

金融工程中的ML任务

任务类型 金融应用 输入(X) 输出(y)
回归 资产定价、收益率预测 因子/特征 连续价格
分类 违约预测、欺诈检测 财务指标 违约/非违约
聚类 客户分群、风格分类 交易行为 群标签
降维 因子提取、噪声过滤 高维特征 低维表示
异常检测 市场操纵识别 交易数据 异常分数

监督学习流程

graph LR Data["历史数据
(X, y)"] --> Split["训练/测试
分割"] Split --> Train["训练集"] Split --> Test["测试集"] Train --> Model["模型训练
选择算法+调参"] Model --> Predict["预测"] Test --> Eval["评估
(MSE, Accuracy等)"] Predict --> Eval Eval --> Deploy{"部署决策"} Deploy -->|通过| Prod["生产环境"] Deploy -->|不通过| Model

金融注意事项

  • 时间序列数据必须按时间分割(禁止未来信息泄露)
  • 金融数据信噪比极低(<0.05),模型容易过拟合
  • 需要滚动窗口验证而非随机CV

偏差-方差权衡 (Bias-Variance Tradeoff)

graph LR subgraph "欠拟合 (High Bias)" A["线性模型
太简单
训练误差高
测试误差高"] end subgraph "最佳复杂度" B["适中复杂度
训练误差中等
测试误差最低"] end subgraph "过拟合 (High Variance)" C["深度树
太复杂
训练误差低
测试误差高"] end A --> B --> C

金融意义:金融数据信噪比极低,应优先选择偏保守的模型(高bias低variance),避免过拟合虚假模式。

正则化 (Regularization)

目的:通过约束模型复杂度来缓解过拟合

L1正则化 (Lasso)

  • 产生稀疏解(特征选择)
  • 适合高维数据
  • 不相关特征权重被置零

L2正则化 (Ridge)

  • 使权重均匀收缩
  • 处理多重共线性
  • 所有特征保留但权重变小

Elastic Net:结合L1 + L2,

交叉验证 (Cross-Validation)

K-Fold CV (k=5)

数据: [=====]====]====]====]=====
Fold 1: [TEST][TRAIN][TRAIN][TRAIN][TRAIN]
Fold 2: [TRAIN][TEST][TRAIN][TRAIN][TRAIN]
Fold 3: [TRAIN][TRAIN][TEST][TRAIN][TRAIN]
Fold 4: [TRAIN][TRAIN][TRAIN][TEST][TRAIN]
Fold 5: [TRAIN][TRAIN][TRAIN][TRAIN][TEST]

金融时序专用 - 滚动窗口CV

训练: [=====]       测试: [=====]
训练: [=========]   测试: [=====]
训练: [=============]  测试: [=====]

关键点:时间序列数据必须使用滚动窗口或扩展窗口CV,不能使用随机K-Fold,否则会造成未来信息泄露。

评估指标

任务 指标 公式 说明
回归 MSE 均方误差
回归 MAE 平均绝对误差
回归 解释方差比例
分类 Accuracy 准确率
分类 Precision 精确率(预测为真的正确率)
分类 Recall 召回率(真实为正的捕获率)
分类 F1-score Precision和Recall的调和平均
分类 AUC ROC曲线下面积 排序能力(金融最常用)

金融场景

  • 违约预测:
    关注Recall(少漏掉违约者)和AUC
  • 交易策略:
    关注Sharpe Ratio和Max Drawdown
  • 定价模型:
    关注MAE(解释性更强)和MSE

No Free Lunch定理

没有一个机器学习算法在所有问题上都优于其他算法。

金融工程含义

  • 没有"万能"的量化策略模型
  • 必须根据具体问题选择合适算法
  • 需要理解每个模型的假设和局限
  • 模型组合(Ensemble)通常优于单一模型
  • 在金融中,"简单有效"远比"复杂花哨"重要

实践建议

  1. 基线模型先行(线性回归、逻辑回归)
  2. 逐步增加复杂度(树模型、XGBoost)
  3. 交叉验证选择最优复杂度
  4. 注重模型可解释性
  5. 警惕过拟合——金融数据是过拟合的重灾区

学习曲线 (Learning Curves)

什么是学习曲线:模型性能随训练样本量变化的曲线

训练误差 -> (样本越多越难完美拟合)
验证误差 -> (样本越多泛化越好)
        两者收敛 → 模型合适

诊断高偏差 vs 高方差

现象 诊断 解决方案
训练误差高 ≈ 验证误差高 高偏差 (欠拟合) 增加模型复杂度、更多特征、减少正则化
训练误差低 ≪ 验证误差高 高方差 (过拟合) 更多数据、减少特征、增加正则化
训练误差和验证误差都低且接近 ✅ 理想状态 维持

金融中的特殊考虑

  • 金融数据信噪比低 → 验证曲线通常收敛慢
  • 市场结构变化 → 旧样本可能不再有效(样本有效性衰减)
  • 建议:即使学习曲线看似收敛,仍需预留最远期数据做最终验证

拟合曲线可视化

三图对比:同一数据集,不同模型复杂度

欠拟合 (Underfitting):              合适 (Good Fit):
  y ↑    *                             y ↑      *
  │    *   *                           │   *     *
  │  *       *                         │     *  *
  │*           *                       │  *     *
  │────(直线)──→ x                     │──(平滑曲线)──→ x
  R²_train=0.62, R²_test=0.60          R²_train=0.85, R²_test=0.83

过拟合 (Overfitting):
  y ↑  *  *
  │ *  **  *                          诊断口诀:
  │**  **  **                         训练R² ≫ 测试R² → 过拟合
  │*  **    *                         训练R² ≈ 测试R² ≈ 低 → 欠拟合
  │──(扭曲曲线)──→ x
  R²_train=0.97, R²_test=0.61

时间序列交叉验证

金融数据不能用普通K-Fold CV!

原因:金融数据是时间序列,随机打乱会引入前视偏差

Time Series Split

Fold 1: [Train: t₁...t₁₀₀] → [Test: t₁₀₁...t₁₂₀]
Fold 2: [Train: t₁...t₁₂₀] → [Test: t₁₂₁...t₁₄₀]
Fold 3: [Train: t₁...t₁₄₀] → [Test: t₁₄₁...t₁₆₀]
...

代码实现

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    X_train, X_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]
    # 注意: 测试集始终在训练集之后!
    model.fit(X_train, y_train)
    score = model.score(X_test, y_test)

金融定制变种

  • Purged K-Fold:在训练/测试边界去除重叠样本(避免信息泄露)
  • Embargo:测试集之前增加禁运期(防止lag特征前视)
  • Combinatorial Purged CV:多次TS Split的组合平均

No Free Lunch定理深入

No Free Lunch定理的数学直觉

对所有可能的数据分布取平均,所有算法的期望表现相同

对金融模型选择的含义

  • 如果不知道数据分布 → 所有模型等价
  • 如果我们知道金融数据的特征 → 可以选更好的模型
  • 关键不是"哪个模型最好",而是"我们的数据有什么特征"

金融数据的已知特征 → 模型选择指南

数据特征 适合的模型 不适合的模型
特征多(>100) + 样本少 Lasso/Ridge/XGBoost 深度神经网络
特征高度相关 Ridge/PCR/PLS 普通OLS
非线性关系 GAM/树模型/样条 线性模型
类别不平衡 XGBoost(scale_pos_weight) 朴素贝叶斯
需要概率输出 逻辑回归/XGBoost SVM
需要可解释性 线性模型/GAM/SHAP 深度神经网络

2.1.1 特征工程

好的特征 = 差的模型 > 差的特征 = 好的模型

特征构造方法

方法 描述 金融示例
数学变换 log, sqrt, 平方 对数收益率、平方收益率
滞后特征 过去N期值 过去5日收益率
滚动统计 滚动均值/方差/偏度 20日滚动波动率
交叉特征 特征相乘/相除 市盈率×市值
分箱 连续值离散化 PE分位数分组
编码 类别特征数值化 行业One-Hot编码
# 金融特征工程示例
def create_financial_features(df):
    features = pd.DataFrame(index=df.index)
    
    # 滞后特征
    for lag in [1, 5, 10, 20]:
        features[f'return_lag_{lag}'] = df['return'].shift(lag)
    
    # 滚动统计
    for window in [5, 10, 20, 60]:
        features[f'ma_{window}'] = df['close'].rolling(window).mean()
        features[f'vol_{window}'] = df['return'].rolling(window).std()
        features[f'max_{window}'] = df['high'].rolling(window).max()
        features[f'min_{window}'] = df['low'].rolling(window).min()
    
    # 技术指标
    features['rsi_14'] = compute_rsi(df['close'], 14)
    features['macd'] = compute_macd(df['close'])
    features['bb_position'] = (df['close'] - df['close'].rolling(20).mean()) / \
                              (df['close'].rolling(20).std() * 2)
    
    return features

2.1.2 特征选择方法

为什么需要特征选择

  • 金融数据维度高(1000+因子)
  • 维度灾难:特征越多需要的样本量指数增长
  • 冗余特征降低模型解释性
  • 去除噪声提高泛化能力

三种特征选择方法

方法 描述 优点 缺点 金融适用性
Filter(过滤法) 统计指标筛选(IC/互信息) 计算快 忽略特征交互 初步筛选
Wrapper(包装法) 递归特征消除(RFE) 考虑模型效果 计算慢 特征<50时
Embedded(嵌入法) Lasso/Tree重要性 结合训练过程 可能过拟合 最常用
# Lasso特征选择
from sklearn.linear_model import LassoCV

lasso = LassoCV(cv=5, max_iter=10000)
lasso.fit(X_train, y_train)
selected_features = X_train.columns[lasso.coef_ != 0]
print(f"压缩前特征数: {X_train.shape[1]}")
print(f"压缩后特征数: {len(selected_features)}")

# Tree特征重要性
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train, y_train)
importance = pd.DataFrame({
    'feature': X_train.columns,
    'importance': rf.feature_importances_
}).sort_values('importance', ascending=False)

2.1.3 分类阈值调整

金融分类问题的阈值选择

from sklearn.metrics import precision_recall_curve

# 对于违约预测这样的不平衡分类问题
# 简单用0.5作为阈值通常不是最优

def find_optimal_threshold(y_true, y_prob):
    """找到最大化F1的阈值"""
    precisions, recalls, thresholds = precision_recall_curve(
        y_true, y_prob
    )
    f1_scores = 2 * (precisions * recalls) / (precisions + recalls + 1e-10)
    optimal_idx = np.argmax(f1_scores[:-1])
    return thresholds[optimal_idx]

# 不同场景的阈值选择策略
# 违约预测: 低阈值(0.2-0.3) 捕获更多违约
# 交易信号: 高阈值(0.6-0.7) 减少虚假信号
# 欺诈检测: 动态阈值 根据成本调整

阈值选择的金融含义

降低阈值 → 更多交易信号,更高交易量,更多佣金
         → 可能捕获更多盈利机会,但也增加亏损交易
提高阈值 → 更少信号,更高质量
         → 机会成本(错过盈利)vs 风险控制(减少亏损)

2.2 回归模型

Regression Models

  • 线性回归与OLS
  • 多项式回归
  • 正则化回归
  • 样条回归
  • 广义可加模型(GAM)
  • 稳健回归
  • PLS偏最小二乘

线性回归 (Linear Regression)

模型

OLS估计

解析解

假设条件

  1. 线性关系
  2. 误差独立同分布
  3. 同方差性 (Homoscedasticity)
  4. 无多重共线性
  5. 误差正态分布(对推断重要)

金融应用

  • CAPM:
  • Fama-French因子模型
  • 套利定价模型(APT)

线性回归的局限性

问题1:线性假设太强

  • 金融数据通常呈现非线性关系
  • 例如:波动率与收益率的关系(杠杆效应)
  • 例如:市值与收益率的非线性关系

问题2:对异常值敏感

  • 金融数据常有极端值(金融危机)
  • OLS受异常值影响大
  • 需要稳健估计方法

问题3:多重共线性

  • 金融因子之间相关性高
  • 导致系数估计不稳定
  • 需要正则化或降维

问题4:过拟合

  • 高维金融数据(p > n)容易过拟合
  • 需要特征选择或正则化

正则化回归家族

graph TD OLS["OLS
普通最小二乘"] -->|存在共线性| Ridge["Ridge回归
L2正则化
系数收缩但不为零"] OLS -->|高维特征选择| Lasso["Lasso回归
L1正则化
系数稀疏化"] Ridge --> Elastic["Elastic Net
L1+L2
兼顾两者优势"] Lasso --> Elastic

选择指南

  • 特征少、共线性严重 → Ridge
  • 高维、需要特征选择 → Lasso
  • 高维且特征成组相关 → Elastic Net
  • 需要解释性 → Lasso(自动选特征)

多项式回归与样条

多项式回归

  • 简单引入非线性
  • 高次项容易过拟合
  • 全局性质,局部调整困难

样条回归 (Splines)

  • 在每个区间拟合低次多项式
  • 节点(knots)处平滑连接
  • B-spline:数值稳定
  • Natural Cubic Spline:边界线性约束

金融应用

  • 利率期限结构拟合
  • 波动率微笑(Smile)建模
  • 衍生品定价曲面

样条回归的数学基础

从分段到光滑的演进

Step 1 — 阶梯函数 (Step Functions)

将X分为K个区间: (-∞, c₁], (c₁, c₂], ..., (c_K, ∞)
模型: y = β₀ + β₁·I(x∈区间₁) + ... + β_K·I(x∈区间_K)
问题: 区间内常数,区间边界处不连续(跳跃)

Step 2 — 分段多项式 (Piecewise Polynomials)

每个区间拟合独立的多项式:
区间₁: y = β₀₁ + β₁₁x + β₂₁x²
区间₂: y = β₀₂ + β₁₂x + β₂₂x²
...
问题: 节点(knot)处仍可能不连续,曲线"断裂"

Step 3 — 约束样条 (Constrained Splines)

在节点处施加连续性约束:
  f(c₁⁻) = f(c₁⁺)     (函数值连续 — 0阶连续)
  f'(c₁⁻) = f'(c₁⁺)   (一阶导连续 — 光滑)
  f''(c₁⁻) = f''(c₁⁺) (二阶导连续 — 曲率连续)

为什么需要导数连续性?

  • 金融市场中,利率曲线、波动率曲面都要求光滑
  • 不光滑的曲线意味着套利机会(在节点处可构造无风险收益)
  • 监管要求定价曲面必须无套利

截断幂基表示

Truncated Power Basis — 样条的显式表示

一个在ξ处有节点的d次样条可表示为:

其中 为截断幂函数

直观理解

d=1 (线性样条):
  f(x) = β₀ + β₁x + Σ b_k·(x-ξ_k)_+
  每个截断项在ξ_k处"折弯"曲线
  折弯后的斜率 = β₁ + Σ_{j=1}^k b_j
d=3 (三次样条):
  f(x) = β₀ + β₁x + β₂x² + β₃x³ + Σ b_k·(x-ξ_k)³_+
  每个截断项在ξ_k处改变三阶弯曲度

截断幂基的问题:数值不稳定(当x很大时(x-ξ)^d爆炸)→ B-spline解决

自然样条 (Natural Splines)

问题:普通样条在边界处方差很大(外推极不稳定)

自然样条约束
在边界节点之外(x < ξ₁ 和 x > ξ_K),函数为线性

为什么好

  • 边界处方差显著降低
  • 自由度降低(每增加一个边界线性约束,减少2个自由度)
  • 外推更稳健(不会出现多项式边界爆炸)
  • 金融中:利率曲线两端通常用线性外推

与多项式回归的对比

高次多项式 (d=15):
  边界处剧烈摆动 → Runger现象
  局部点变化影响全局
  
自然三次样条 (knots=5):
  边界线性 → 无摆动
  局部点变化主要影响邻近区间

平滑样条 (Smoothing Splines)

思想:不选择节点(所有点都是潜在节点),用惩罚项控制光滑度

  • 第一项:拟合误差(忠实度)
  • 第二项:曲率惩罚(光滑度)
  • :光滑参数
    • :完美插值(连接所有点,最曲折)
    • :线性回归(最光滑)
    • 通过交叉验证选择

有效自由度,其中 为平滑矩阵(

金融应用对比

方法 需要选节点 自由度 适用场景
回归样条 ✅ (关键选择) K+d 节点位置有金融含义
自然样条 ✅ K (d=3) 利率曲线
平滑样条 ❌ (选λ) df_λ 不需要节点含义
B样条 ✅ K+d-1 数值稳定,最常用

GAM (广义可加模型)

模型

其中 是平滑函数(样条、局部回归等)

优点

  • 保持可加性(可解释)
  • 每个变量可非线性
  • 灵活性与可解释性平衡

金融应用

违约概率 = β₀ + f₁(杠杆率) + f₂(盈利能力) + f₃(规模) + ...
              ↑           ↑              ↑          ↑
             样条函数     样条函数       线性函数    线性函数

降维回归:PCR与PLS

金融数据中预测变量高度相关(多重共线性),普通OLS不稳定。两种降维回归方法:

主成分回归 (PCR, Principal Component Regression)

Step 1: 对X进行PCA → 提取前k个主成分 Z₁, Z₂, ..., Zₖ
Step 2: 用Y对主成分回归 → Y = γ₀ + γ₁Z₁ + ... + γₖZₖ
Step 3: 将系数转换回原始变量空间
  • 优点:消除共线性、降维降噪、可处理 p > n 的情况
  • 缺点:主成分按X方差而非Y相关性选取(可能与Y无关)

偏最小二乘 (PLS, Partial Least Squares)

Step 1: 寻找线性组合 T₁ = w₁'X,使得 Cov(T₁, Y) 最大化
Step 2: 用残差重复步骤1,提取后续成分
Step 3: 用Y对 PLS 成分回归
  • 关键区别:PLS同时考虑X方差和Y相关性(监督降维)

PCR vs PLS vs Ridge/Lasso 对比

方法 降维方式 使用Y信息 适用场景
PCR PCA → 回归 ❌ 预测变量高度相关
PLS 最大化Cov(X,Y) ✅ Y引导降维(预测导向)
Ridge L2收缩 系数收缩 所有特征都有贡献
Lasso L1稀疏化 特征选择 需要自动特征选择

金融应用:PLS常用于宏观经济因子与资产收益的关系建模;PCR常用于高维因子组合的降维。

回归算法选择决策表

数据特征 推荐方法 原因
特征少 (<10),线性 OLS 简单、可解释
存在多重共线性 Ridge 收缩系数,稳定模型
高维,需要特征选择 Lasso 自动稀疏化
兼顾收缩+选择 Elastic Net L1+L2组合
p > n (特征多于样本) Lasso / Elastic Net / PLS 稀疏性或降维
非线性关系 样条回归 / GAM 灵活建模非线性
多因子共线+预测导向 PLS 监督降维
纯降维去噪 PCR 无监督降维
离群值多 稳健回归 (Huber) 减少异常值影响
需要完全可解释 OLS / GAM 每个变量贡献清晰

稳健回归 (Robust Regression)

为什么金融数据需要稳健回归?

金融数据中离群值的来源:

  • 1987年黑色星期一(单日暴跌20%+)
  • 2008年金融危机(极端相关性)
  • 2020年COVID崩盘
  • 个股的异常停牌/复牌

OLS对离群值敏感:一个极端点可能大幅改变回归线

Huber损失 (Huber Loss)

  • 残差小时用平方损失(高效率)
  • 残差大时用绝对值损失(抗离群值)
  • :切换阈值(通常1.345,保证95%高斯效率)

Huber回归参数

δ=1.345: 95% 高斯效率 (默认)
δ=0.7:   更稳健 (接近L1)
δ=∞:    退化为OLS
δ→0:    退化为LAD (最小绝对偏差)

Quantile回归

其中 为check函数

  • :中位数回归(最稳健)
  • :建模条件上尾(VaR)
  • :建模条件下尾

金融应用

  • 稳健因子收益估计(减少极端月份影响)
  • 条件VaR建模(分位数回归)
  • 衍生品对冲比率(需要抗离群值)

2.3 分类模型

Classification Models

  • 逻辑回归
  • 线性判别分析(LDA)
  • 二次判别分析(QDA)
  • 朴素贝叶斯
  • 支持向量机(SVM)
  • 核方法

逻辑回归 (Logistic Regression)

模型

决策边界

损失函数 (交叉熵)

金融应用

  • 信用风险评估:预测企业违约概率
  • 市场方向预测:涨/跌分类
  • 欺诈检测:异常交易识别

为什么金融中用逻辑回归多?

  • 输出概率值(可解释)
  • 可以排序(AUC评估)
  • 正则化版本(L1/L2)成熟
  • 计算效率高

SVM与核方法

线性SVM:找到最大化间隔的超平面

核技巧 (Kernel Trick)
将数据映射到高维空间,使非线性可分变为线性可分

核函数 公式 参数
线性核
多项式核
RBF核
Sigmoid核

金融应用:信用评级分类、市场状态识别、异常交易模式检测

朴素贝叶斯 (Naive Bayes)

原理:基于贝叶斯定理,假设特征条件独立

优点

  • 计算简单、速度快
  • 小样本表现好
  • 对缺失数据不敏感
  • 概率校准好

金融应用

  • 文本分类(新闻情感分类)
  • 客户流失预测
  • 交易策略分类

局限性:特征独立假设在金融中通常不成立(因子之间高度相关)

LDA (线性判别分析)

原理:假设每个类别服从多元正态分布,协方差矩阵相同

决策规则:将x分配给使后验概率最大的类

LDA的决策边界

  • 线性边界(因为协方差相同→二次项抵消)
  • 本质上找到最大化类间方差/类内方差的方向

LDA金融应用

  • 信用评级迁移:将企业分为投资级/投机级/违约级
  • 市场状态分类:牛市/熊市/震荡市 → 有利于择时策略
  • Z-score的现代版:Altman Z-score本质上是LDA的特例

LDA vs 逻辑回归

维度 LDA 逻辑回归
假设 正态+等协方差 无分布假设
效率 假设满足时更高效(~30%少样本) 假设不满足时更稳健
多分类 天然支持 需要扩展
可解释性 判别方向可视化 系数=对数几率

QDA (二次判别分析)

QDA vs LDA:QDA允许各类别有自己的协方差矩阵

决策边界为二次曲线(因为不相等→二次项无法抵消)

什么时候用QDA?

  • 各类别的散布形状明显不同(如:牛市vs熊市的波动率结构不同)
  • 样本量足够大(QDA参数多 → 需要更多样本)
  • LDA假设检验失败(Box's M检验拒绝等协方差假设)

经验法则

样本量 n < p²/2  → 用LDA (QDA过参数化)
样本量 n > p²    → 考虑QDA
金融中p通常很大 → LDA更常用,但QDA在小规模精选特征后有效

多元逻辑回归 (Multinomial Logistic Regression)

模型(K个类别):

(其中一个类别设为基准,

Softmax损失

金融应用

  • 信用评级预测:AAA/AA/A/BBB/BB/B/CCC多级分类
  • 市场方向:大涨/小涨/震荡/小跌/大跌 (5类)
  • 资产配置:根据宏观状态选择股/债/商品/现金
  • 订单流分类:机构/散户/做市商 → 交易对手识别

生成式 vs 判别式分类器

核心区别

生成式 (Generative):
  建模 P(x, y) = P(x|y)·P(y) → 推断 P(y|x)
  例: LDA, QDA, 朴素贝叶斯
  优势: 可生成新样本,缺失数据处理
  劣势: 建模联合分布更难

判别式 (Discriminative):
  直接建模 P(y|x)
  例: 逻辑回归, SVM, XGBoost
  优势: 专注分类边界,通常更准
  劣势: 不可生成数据

金融应用场景选择

场景 推荐 原因
信用评分 (需概率) 判别式 (逻辑回归) 直接估计PD
数据增强 (样本少) 生成式 (LDA) 可生成合成样本
高维分类 判别式 (SVM/XGBoost) 对高维更稳健
缺失特征 生成式 可边际化缺失变量
监管合规 (需解释) 两者皆可 (逻辑回归/LDA) 都有清晰的决策规则

分类器评估:超越准确率

混淆矩阵详解

                    预测
              正类      负类
实际  正类     TP        FN      (TP+FN)
      负类     FP        TN      (FP+TN)
              (TP+FP)  (FN+TN)

核心指标及其金融含义

指标 公式 金融含义
Precision (精确率) TP/(TP+FP) 预测为"买入"的股票中,真正涨了的比例
Recall (召回率) TP/(TP+FN) 真正涨了的股票中,被模型选出的比例
Specificity TN/(TN+FP) 没涨的股票中,被正确排除的比例
F1-Score 2PR/(P+R) 精确率和召回率的调和平均

ROC曲线与AUC

ROC: TPR (Recall) vs FPR (1-Specificity)
AUC = 1.0: 完美分类
AUC = 0.5: 随机猜测
AUC < 0.5: 比随机还差(可反向使用!)

AUC在金融中的解释:
  AUC=0.80: 随机选一个正样本和一个负样本,
            模型给正样本更高分的概率为80%

Precision-Recall曲线(类别不平衡时更有用):

  • 金融中违约样本通常<5% → PR曲线比ROC更信息
  • 关注PR曲线下的面积,特别是在高Recall区间的Precision

分类算法选择决策表

应用场景 推荐方法 原因
违约预测(不平衡数据) XGBoost/LightGBM + 阈值调整 处理非线性 + 类别权重
欺诈检测(极度不平衡) XGBoost + SMOTE 或 Isolation Forest 异常检测+过采样
市场方向预测(涨/跌) 逻辑回归(基线)→ XGBoost 简单可解释 → 复杂提升
信用评分(需可解释性) 逻辑回归 + WOE分箱 监管要求可解释
文本情感分类 朴素贝叶斯(基线)/ FinBERT 轻量基线 → 深度模型
高维特征分类 SVM + RBF核 / XGBoost 处理复杂边界
客户分群后分类 随机森林 对噪声鲁棒
实时交易决策 LightGBM 推理速度快
监管合规要求高 逻辑回归 / 决策树(单棵) 完全可解释
预测精度优先 XGBoost/LightGBM/CatBoost 集成方法通常最优

通用选择原则

  1. 先跑逻辑回归(基线 + 可解释)
  2. 再加XGBoost/LightGBM(提精度)
  3. 如果样本量 < 1000 → 逻辑回归或SVM
  4. 如果特征 > 10000 → 先降维再用XGBoost
  5. 如果可解释性 > 精度 → 逻辑回归 + SHAP

2.4 树模型与集成学习

Tree Models & Ensemble

  • CART决策树
  • Bagging
  • 随机森林
  • Boosting原理
  • XGBoost核心机制
  • LightGBM创新点
  • CatBoost特性

CART决策树

分类与回归树 (Classification And Regression Tree)

graph TD X1["X1 < 阈值?"] -->|是| X2["X2 < 阈值?"] X1 -->|否| X3["X3 < 阈值?"] X2 -->|是| Leaf1["叶节点: y=0.1"] X2 -->|否| Leaf2["叶节点: y=0.3"] X3 -->|是| Leaf3["叶节点: y=0.6"] X3 -->|否| Leaf4["叶节点: y=0.9"]

分裂准则

  • 回归:最小化MSE
  • 分类:基尼指数或交叉熵

剪枝 (Pruning):控制树复杂度,防止过拟合

金融应用:简单直观的规则提取,如"PE < 15 且 ROE > 15% → 买入"

Bagging与随机森林

Bagging (Bootstrap Aggregating)

  1. 从原始数据有放回抽样B个样本集
  2. 每个样本集训练一个决策树
  3. 取所有树的平均(回归)或投票(分类)

随机森林 (Random Forest)

  • 在Bagging基础上,分裂时随机选择m个特征(而非全部)
  • 进一步降低树之间的相关性
  • 泛化能力更强

关键超参数

  • n_estimators: 树的数量(越多越好,收益递减)
  • max_depth: 最大深度(控制过拟合)
  • max_features: 分裂时考虑的特征数
  • min_samples_leaf: 叶节点最小样本数

金融应用

  • 因子重要性排序(自带特征重要性)
  • 多因子选股
  • 风险因素识别

Boosting原理

核心思想:串行训练弱学习器,每个新模型纠正前一个的错误

graph LR Data["数据
初始权重"] --> Tree1["树1"] Tree1 --> Error1["残差/错误"] Error1 --> Weight1["调整权重
加大错误样本权重"] Weight1 --> Tree2["树2"] Tree2 --> Error2["残差"] Error2 --> Weight2["调整权重"] Weight2 --> Tree3["树3"] Tree3 --> Final["加权组合"]

AdaBoost:调整样本权重,关注难分类样本

Gradient Boosting:每棵树拟合前一轮的梯度方向(负梯度残差)

其中 是学习率, 拟合残差

XGBoost核心机制

XGBoost (eXtreme Gradient Boosting) 是金融领域最流行的ML算法之一。

关键创新

  1. 二阶泰勒展开:使用一阶+二阶梯度信息,收敛更快

  2. 正则化目标函数

    : 叶节点数, : 叶节点权重

  3. 列采样:类似随机森林,防止过拟合

  4. 缺失值自动处理:学习默认分裂方向

  5. 并行化:特征维度并行(但树仍串行)

LightGBM vs XGBoost

特性 XGBoost LightGBM
树生长策略 Level-wise (层次生长) Leaf-wise (叶节点生长)
分裂点查找 预排序+遍历所有 GOSS + 直方图
类别特征 需编码 原生支持
训练速度 中等 更快(快约5-10倍)
内存占用 较高 更低
小样本表现 更稳定 容易过拟合
默认参数 稳健 需要更多调参

金融实践建议

  • 数据量大(>10万样本)→ LightGBM(速度快)
  • 数据量小或需要稳定性 → XGBoost(鲁棒性更好)
  • 高精度要求 → 两者都试,选最优
  • LightGBM的leaf-wise生长更容易过拟合,需要控制 num_leavesmin_data_in_leaf

CatBoost特性

CatBoost (Categorical Boosting):Yandex开发,专门处理类别特征

关键创新

  1. 有序提升 (Ordered Boosting):无偏梯度估计
  2. 原生类别特征支持:无需One-Hot编码,使用目标编码+平滑
  3. 对称决策树:预测速度更快

金融应用

  • 信用评分(类别特征多:行业、地区、所有制等)
  • 欺诈检测(交易类型、渠道等类别变量)
  • 客户分群

XGBoost vs LightGBM vs CatBoost 选择

场景 推荐
纯数值特征 XGBoost
大数据量 LightGBM
多类别特征 CatBoost
竞赛/精度优先 三者Ensemble

2.5 模型可解释性

SHAP & Interpretability

  • 为什么需要可解释性
  • SHAP原理
  • SHAP值解读
  • 特征重要性分析
  • 金融应用案例

金融中的模型可解释性

为什么金融中可解释性格外重要?

需求 说明 监管要求
模型审计 监管机构需要理解模型决策逻辑 Basel III, 银保监会
风控合规 风控拒绝贷款需要提供理由 《个人信用信息基础数据库管理暂行办法》
模型改进 理解错误来源才能改进
信任建立 交易员不会盲目信任黑箱
公平性 防止歧视性预测 反歧视法规

可解释性 vs 性能的权衡

  • 线性模型:可解释性强,性能有限
  • 树模型:中等可解释性,强性能
  • 深度学习:可解释性弱,最强性能

SHAP原理

SHAP (SHapley Additive exPlanations) 基于博弈论中的Shapley值

核心思想:每个特征对预测的贡献 = 该特征在所有特征组合中的边际贡献的平均值

直观理解

  • 基准值 = 所有样本的平均预测值
  • SHAP值 = 每个特征使预测偏离基准的程度

优点

  • 一致性:特征贡献加起来等于预测值
  • 公平性:所有特征组合都被考虑
  • 全局+局部可解释性

SHAP可视化解读

1. 全局特征重要性 (Summary Plot)

import shap

# 训练XGBoost模型后
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

# 特征重要性汇总图
shap.summary_plot(shap_values, X_test)

输出解读

  • 每个点代表一个样本
  • 颜色代表特征值(红高蓝低)
  • x轴是SHAP值(正=推高预测,负=拉低预测)
  • 特征按重要性排序

2. 局部单样本解释 (Waterfall Plot)

# 对第i个样本解释
shap.plots.waterfall(shap_values[i])

输出解读

  • 展示每个特征如何将预测从基准值推到最终预测
  • 红色箭头 = 正向贡献
  • 蓝色箭头 = 负向贡献

SHAP在信用评分中的应用

案例:企业违约预测模型解释

模型:XGBoost违约预测模型
样本:某制造企业

基准违约概率:5%(训练集平均值)
样本预测违约概率:23%

SHAP分解:
特征                    SHAP值    说明
资产负债率 68%          +8.5%    ← 杠杆率偏高,违约风险↑
流动比率 0.8            +6.2%    ← 短期偿债能力不足
行业=制造业              +3.1%    ← 该行业整体风险偏高
营收增长率 12%          -2.5%    ← 增长良好,风险↓
现金流/负债 0.15        +2.7%    ← 现金流覆盖不足
其他特征合计            +5.0%    ← 其他因素

合计: 5% + 8.5% + 6.2% + 3.1% - 2.5% + 2.7% + 5.0% = 23%

监管价值:可以向借款企业解释"为什么被拒贷"的具体原因

金融ML完整Pipeline代码走查

端到端量化因子建模流程

# ============ Step 1: 数据加载与清洗 ============
import pandas as pd
import numpy as np
from sklearn.model_selection import TimeSeriesSplit

df = pd.read_parquet('factor_data.parquet')
# 处理缺失值:金融数据用前向填充+中位数回退
df = df.ffill().fillna(df.median())
# 去除停牌日(成交量=0)
df = df[df['volume'] > 0]
# ============ Step 2: 特征工程 ============
# 原始因子
factors = ['momentum_1m', 'momentum_6m', 'volatility_1m',
           'turnover_1m', 'size_log', 'bm_ratio', 
           'roe', 'leverage', 'beta_1y']
# 交叉特征
df['mom_vol_ratio'] = df['momentum_1m'] / df['volatility_1m']
df['quality_score'] = df['roe'] / df['leverage']
# 行业中性化 (关键!)
for f in factors:
    df[f'{f}_neutral'] = df.groupby('industry')[f].transform(
        lambda x: x - x.mean()
    )
# ============ Step 3: 标签构建 ============
# 未来5日经行业中性化后的收益
df['fwd_return'] = df.groupby('industry')['return'].transform(
    lambda x: x.shift(-5)
)
df['label'] = (df['fwd_return'] > df['fwd_return'].quantile(0.8)).astype(int)
# ============ Step 4: 时间序列分割 ============
tscv = TimeSeriesSplit(n_splits=5)
feature_cols = [c for c in df.columns if c.endswith('_neutral')]
# ============ Step 5: 模型训练与评估 ============
from xgboost import XGBClassifier
from sklearn.metrics import roc_auc_score

aucs = []
for fold, (train_idx, test_idx) in enumerate(tscv.split(df)):
    X_train, X_test = df.iloc[train_idx][feature_cols], \
                      df.iloc[test_idx][feature_cols]
    y_train, y_test = df.iloc[train_idx]['label'], \
                      df.iloc[test_idx]['label']
    
    model = XGBClassifier(
        n_estimators=200, max_depth=4, learning_rate=0.05,
        subsample=0.8, colsample_bytree=0.8,
        eval_metric='auc', early_stopping_rounds=20
    )
    model.fit(X_train, y_train,
              eval_set=[(X_test, y_test)], verbose=False)
    
    auc = roc_auc_score(y_test, 
                        model.predict_proba(X_test)[:, 1])
    aucs.append(auc)
    print(f"Fold {fold}: AUC = {auc:.4f}")

print(f"\nMean AUC: {np.mean(aucs):.4f} ± {np.std(aucs):.4f}")
# ============ Step 6: 特征重要性 ============
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test, show=False)

模型融合策略

Stacking (堆叠泛化)

Layer 1 (基学习器):
  ├─ XGBoost  → 预测 ŷ₁
  ├─ LightGBM → 预测 ŷ₂
  ├─ CatBoost → 预测 ŷ₃
  └─ RandomForest → 预测 ŷ₄
  
Layer 2 (元学习器):
  ŷ_final = LogisticRegression(ŷ₁, ŷ₂, ŷ₃, ŷ₄)
  (简单模型避免过拟合)

Blending (混合)
与Stacking类似,但元学习器只用hold-out集训练(更简单,防泄露)

策略层面的集成

量化多策略融合:
  策略1 (价值): y₁ = XGBoost(value_factors)
  策略2 (动量): y₂ = LightGBM(momentum_factors)
  策略3 (质量): y₃ = CatBoost(quality_factors)
  
  最终信号 = w₁·y₁ + w₂·y₂ + w₃·y₃
  权重w基于: 滚动Sharpe / 信息比率 / 动态风险预算

金融ML集成注意事项

  • 基学习器的相关性必须低(否则等于一个模型)
  • 元学习器必须简单(防止二次过拟合)
  • 金融中常用时间加权:近期fold的权重更大
  • 集成≠万能——多个差模型集成还是差模型

回归模型评估指标

全面评估体系

指标 公式 优点 缺点 金融适用
MSE 可导/优化方便 对离群值敏感 OLS损失函数
MAE $\frac{1}{n}\Sigma y_i-\hat{y}_i $ 抗离群值
RMSE 与y同单位 同MSE 常用汇报
MAPE $\frac{1}{n}\Sigma\frac{ y_i-\hat{y}_i }{y_i}$ 百分比直观
解释方差比例 过度使用 基线参考
Adj 惩罚模型复杂度 模型选择
IC (信息系数) RankCorr(预测, 实际) 关注排序 忽略幅度 因子评价首选
Rank IC Spearman ρ(pred, actual) 稳健排序 量化核心指标

金融中的评估层次

L1 统计层: RMSE, R², MAE (模型拟合质量)
L2 排序层: IC, Rank IC (截面预测能力)
L3 投资层: Sharpe, MaxDD, Turnover (策略实际表现)
L4 归因层: 因子贡献分解, 行业/风格暴露

关键: L1好 ≠ L3好!必须在投资层面验证

离群值检测与处理

金融数据中的离群值类型

类型 示例 是否正确值 处理方法
真实极端值 1987崩盘日收益-20% ✅ 保留或Winsorize
数据错误 PE录入0.001而非10.0 ❌ 删除或修正
结构性断点 会计准则变更 ✅ 标记+分段处理
停牌恢复 复牌首日涨跌>100% ✅ 标记处理

检测方法

# 1. Z-score法
z_scores = np.abs((df - df.mean()) / df.std())
outliers = z_scores > 3  # 3σ规则
# 2. IQR法
Q1, Q3 = df.quantile(0.25), df.quantile(0.75)
IQR = Q3 - Q1
outliers = (df < Q1 - 1.5*IQR) | (df > Q3 + 1.5*IQR)
# 3. MAD法 (中位数绝对偏差, 最稳健)
from scipy.stats import median_abs_deviation
mad = median_abs_deviation(df)
outliers = np.abs(df - df.median()) > 3 * mad
# 4. Isolation Forest (多变量异常检测)
from sklearn.ensemble import IsolationForest
iso = IsolationForest(contamination=0.01)  # 预期1%异常
outlier_labels = iso.fit_predict(df)  # -1 = 异常

处理策略

  • Winsorization (缩尾): 将1%/99%分位数之外的值截断
  • 稳健标准化: 使用中位数和MAD而非均值和标准差
  • 分段建模: 正常期/危机期分别建模

完整案例:A股多因子选股模型

场景:使用ML构建月度多因子选股模型

Step 1 — 因子库 (20个因子)

价值因子: B/P, E/P, S/P, CF/P, DIV
动量因子: 1M_rev, 3M_mom, 6M_mom, 12M_mom
质量因子: ROE, ROA, Accruals, AssetTurnover
波动因子: 1M_vol, 3M_vol, Beta, IdioVol
规模因子: LnMCap, LnPrice
流动性因子: Amihud, Turnover

Step 2 — 数据处理

  • 行业中性化(30个申万行业)
  • 市值中性化(避免小盘股主导)
  • Winsorization(1%/99%缩尾)
  • Z-score标准化(截面:每期横截面上标准化)

Step 3 — 模型选择

基线: OLS (单因子IC≈0.03)
对比: Ridge (惩罚多重共线性)
最优: XGBoost (IC≈0.05, Rank IC≈0.06)

Step 4 — 分层回测 (Top-Bottom Decile)

L1 (最好): 年化收益+22%, Sharpe 1.4
L5 (中位): 年化收益+8%, Sharpe 0.6
L10 (最差): 年化收益-12%, Sharpe -0.8
L1-L10: 年化收益+34%, 多空Sharpe 2.1

关键发现:XGBoost的Rank IC(0.06)相比于OLS(0.03)提升一倍,但换手率也从30%升至45%

2.6 AutoML

Automated Machine Learning

  • AutoML概述
  • 超参数优化
  • 特征工程自动化
  • 模型选择
  • 金融场景AutoML

AutoML在金融中的价值

传统ML工作流

数据 → 特征工程 → 模型选择 → 超参调优 → 评估 → 部署
          人工         人工         人工

AutoML工作流

数据 → [特征工程 → 模型选择 → 超参调优] → 评估 → 部署
                自动化搜索最佳管线

金融价值

  • 提高建模效率(尤其对中小型金融机构)
  • 降低对数据科学家的依赖
  • 系统性搜索比人工调参更全面
  • 标准化建模流程,便于审计

局限性:AutoML不是万能,金融领域仍需领域知识指导

超参数优化方法

方法 原理 优点 缺点 适用场景
网格搜索 枚举所有组合 简单、可并行 维度灾难 参数少(<3)
随机搜索 随机采样参数空间 高效、覆盖好 可能错过最优 参数适中
贝叶斯优化 用代理模型引导搜索 高效、智能 串行计算 参数多且评估慢
遗传算法 进化式搜索 全局优化 收敛慢 复杂空间
Optuna 树状采样+剪枝 高效、自动 需配置 通用推荐
import optuna

def objective(trial):
    params = {
        'max_depth': trial.suggest_int('max_depth', 3, 12),
        'learning_rate': trial.suggest_float('lr', 0.01, 0.3),
        'n_estimators': trial.suggest_int('n_est', 50, 500),
        'subsample': trial.suggest_float('subsample', 0.5, 1.0),
        'colsample_bytree': trial.suggest_float('colsample', 0.3, 1.0),
    }
    model = XGBRegressor(**params)
    score = cross_val_score(model, X_train, y_train, cv=5).mean()
    return score

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50)

常用AutoML框架

框架 特点 金融适用性
AutoGluon (AWS) 多层级Ensemble,表格数据强 ⭐⭐⭐⭐⭐ 推荐
H2O AutoML 成熟稳定,可解释性好 ⭐⭐⭐⭐⭐ 推荐
TPOT 遗传编程搜索管线 ⭐⭐⭐
AutoSklearn 基于sklearn,全面 ⭐⭐⭐⭐
FLAML (微软) 高效低成本,支持时间序列 ⭐⭐⭐⭐

金融推荐:AutoGluon和H2O AutoML在表格数据上表现最优,且有较好的可解释性支持。

2.7 无监督学习

Unsupervised Learning

  • PCA主成分分析
  • K-means聚类
  • 金融应用案例

PCA主成分分析

原理:找到数据方差最大的方向进行投影

关键概念

  • 主成分 = 协方差矩阵的特征向量
  • 方差解释比例 = 对应特征值 / 总特征值
  • 降维 = 只保留前k个主成分

金融应用

  • 利率曲线分解:PC1 = 水平(解释~90%),PC2 = 斜率,PC3 = 曲率
  • 风险因子提取:从大量资产中提取主要风险因子
  • 噪声过滤:用PCA降噪后再建模
from sklearn.decomposition import PCA

pca = PCA(n_components=3)
pca.fit(returns)
print(f"方差解释比例: {pca.explained_variance_ratio_}")
# 输出类似:[0.89, 0.07, 0.03] (前三主成分解释99%方差)

K-means聚类

算法

  1. 随机选择K个中心点
  2. 每个样本分配到最近的中心
  3. 重新计算中心(该簇均值)
  4. 重复2-3直到收敛

金融应用

  • 市场状态分类:牛市/熊市/震荡市
  • 客户分群:交易行为聚类
  • 风格分类:价值/成长/动量风格
  • 异常检测:小簇可能是异常交易行为

选择K:肘部法则(Elbow Method)、轮廓系数(Silhouette Score)

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 对市场状态进行聚类
scaler = StandardScaler()
features_scaled = scaler.fit_transform(market_features)
kmeans = KMeans(n_clusters=3, random_state=42)
states = kmeans.fit_predict(features_scaled)
# states: 0=牛市, 1=熊市, 2=震荡

2.8 实践环节

信用评分+SHAP分析

  • 信用评分案例
  • XGBoost模型训练
  • 超参数调优
  • SHAP可解释性
  • 实践报告要求

实践:信用评分模型 (1.5h)

# 1. 数据加载与探索
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import xgboost as xgb
import shap

# 加载信用评分数据集(Kaggle或自制)
df = pd.read_csv("credit_data.csv")
# 特征:收入、负债率、信用历史长度、逾期次数、...
# 目标:是否违约 (0/1)

# 2. 训练/测试分割(按时间)
df = df.sort_values("申请日期")
split_idx = int(len(df) * 0.8)
train = df.iloc[:split_idx]
test = df.iloc[split_idx:]

X_train = train.drop(["是否违约", "申请日期"], axis=1)
y_train = train["是否违约"]
X_test = test.drop(["是否违约", "申请日期"], axis=1)
y_test = test["是否违约"]
# 3. 训练XGBoost
model = xgb.XGBClassifier(
    n_estimators=200,
    max_depth=5,
    learning_rate=0.05,
    subsample=0.8,
    colsample_bytree=0.8,
    eval_metric="auc",
    early_stopping_rounds=20
)

model.fit(
    X_train, y_train,
    eval_set=[(X_test, y_test)],
    verbose=False
)

# 4. 评估
from sklearn.metrics import roc_auc_score, classification_report
y_pred_prob = model.predict_proba(X_test)[:, 1]
print(f"AUC: {roc_auc_score(y_test, y_pred_prob):.4f}")
# 5. SHAP解释
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

# 全局特征重要性
shap.summary_plot(shap_values, X_test)

# 单个样本解释(被拒客户)
shap.plots.waterfall(shap_values[0])

# 特征依赖图
shap.dependence_plot("负债率", shap_values, X_test)

实践报告要求

提交内容:
1. Jupyter Notebook
   - 完整数据预处理 → 建模 → SHAP分析流程
   - 关键步骤添加注释说明
   - 输出评估结果和图表

2. 分析报告要点:
   - 模型选择的理由
   - 最重要的3个特征及其金融含义
   - SHAP分析揭示的关键业务洞察
   - 模型局限性和改进方向

3. 思考题:
   - 为什么金融评分模型不推荐使用深度学习?
   - 如何处理样本不平衡(违约样本通常<5%)?
   - SHAP值是否能作为监管解释的依据?

本周总结

核心收获

  1. 理解偏差-方差权衡对金融建模的意义
  2. 掌握回归到树模型的演进路线
  3. 理解XGBoost/LightGBM的核心机制
  4. 学会用SHAP解释模型预测
  5. 了解AutoML在金融中的适用边界

预习准备

  • 复习神经网络基础(激活函数、梯度)
  • 阅读:DQN论文摘要
  • 安装:PyTorch或TensorFlow

下周预告
Week 3: 深度学习与强化学习

  • MLP与反向传播
  • CNN架构演进
  • RNN/LSTM序列建模
  • Transformer进阶
  • GAN与扩散模型
  • Deep RL: DQN, DDPG, PPO
  • LLM+DRL混合架构

延伸阅读

教材

  • Hastie et al. "The Elements of Statistical Learning"
  • James et al. "An Introduction to Statistical Learning"

论文

  • Chen & Guestrin (2016): "XGBoost: A Scalable Tree Boosting System"
  • Ke et al. (2017): "LightGBM: A Highly Efficient Gradient Boosting Decision Tree"
  • Lundberg & Lee (2017): "A Unified Approach to Interpreting Model Predictions"

实践资源