paper2skills Playbook

Ensemble Methods(集成学习方法)

Skill-Ensemble-Methods · 12-ML基础

forecasting广告与投放MAS与智能体工程WF-B 广告优化WF-H 复购增长
年化 ROI40-80 万元
实现难度⭐⭐⭐☆☆
业务视角
适用角色数据分析师 / 数据工程师 · 运营负责人 · 产品经理
适用平台选品评分 · 差评预测 · 用户流失预警 · 广告出价预测
什么情况下用想用机器学习解决业务问题,但不知道该选什么模型;模型上线后效果越来越差不知道为什么
成功是什么样的选对算法工具减少 50% 试错时间,模型上线后可监控可解释,数据团队和业务团队建立共同语言
业务痛点
不知道该用什么模型模型准确率不稳定业务不相信模型结果模型黑盒说不清为什么这么预测

1. 解决的问题

单独用 XGBoost 预测流失 AUC=0.82,单独用 LightGBM AUC=0.81,单独用 Random Forest AUC=0.78

2. 核心算法逻辑

三个臭皮匠胜过诸葛亮——将多个弱学习器组合成强学习器,通过"群体智慧"降低偏差(Boosting)或方差(Bagging),获得比任何单一模型更好的预测性能。

3. 业务应用场景

业务问题:单独用 XGBoost 预测流失 AUC=0.82,单独用 LightGBM AUC=0.81,单独用 Random Forest AUC=0.78。希望进一步提升到 0.85+ 以提升挽留策略精度。

数据要求:100K 用户特征 + 流失标签。第一层:XGBoost + LightGBM + CatBoost + Random Forest,第二层:Logistic Regression

预期产出:Stacking 集成后 AUC=0.86(+0.04),Recall 在相同 Precision 下提升 5pp。相比单一最优模型可多识别 75 个流失用户/月

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI 预估:Stacking 在流失/广告场景可提升 AUC 3-5pp,对应月增收 $40,000-50,000。实施成本低(仅代码集成,无需新数据/新系统)。年化贡献 40-80 万元
  • 实施难度:⭐⭐⭐☆☆(3 星)— 需要理解 Bagging/Boosting/Stacking 的区别和适用场景
  • 优先级评分:⭐⭐⭐⭐☆(4 星)— XGBoost/LightGBM 是 Kaggle 和工业界的事实标准,所有预测模型几乎都会用到
  • 评估依据:ML 基础层的高阶技能。学会了可以让已有模型无痛提升 3-5% 性能

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Ensemble Methods Toolkit
集成学习工具集 — Bagging / Boosting / Stacking / Blending
"""

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.metrics import roc_auc_score
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from typing import Dict, List, Tuple


def stacking_cv(
    X: np.ndarray,
    y: np.ndarray,
    base_models: Dict[str, object],
    meta_model=None,
    n_folds: int = 5,
    random_state: int = 42
) -> Tuple[object, np.ndarray]:
    """
    Stacking with cross-validation (防过拟合)
    
    Step 1: K-Fold 训练每个基模型,收集 out-of-fold 预测
    Step 2: 用 out-of-fold 预测训练元模型
    
    Args:
        X: 特征矩阵
        y: 标签
        base_models: {模型名: 模型实例}
        meta_model: 元模型(默认 LogisticRegression)
        n_folds: 折数
    
    Returns:
        (trained_meta_model, stacking_features) 
    """
    meta_model = meta_model or LogisticRegression(max_iter=1000)
    skf = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=random_state)
    
    # 存储每个基模型的 out-of-fold 预测
    oof_predictions = np.zeros((len(y), len(base_models)))
    
    # 存储训练好的基模型(用于后续 full fit)
    trained_base_models = {name: [] for name in base_models}
    
    for fold, (train_idx, val_idx) in enumerate(skf.split(X, y)):
        X_train, X_val = X[train_idx], X[val_idx]
        y_train, y_val = y[train_idx], y[val_idx]
        
        for i, (name, model) in enumerate(base_models.items()):
            m = clone_model(model, random_state + fold)
            m.fit(X_train, y_train)
            oof_predictions[val_idx, i] = m.predict_proba(X_val)[:, 1]
            trained_base_models[name].append(m)
    
    # 训练元模型

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。