Coding

Financial Engineer Digital Employee

Try it

覆盖数据探查、单变量分析、特征工程、LR评分卡、XGBoost/DNN建模、超参数调优、模型解释、多模型对比、分群建模、DeepModel集成全流程。从数据到模型上线的一站式机器学习建模能力。

What it does

覆盖数据探查、单变量分析、特征工程、LR评分卡、XGBoost/DNN建模、超参数调优、模型解释、多模型对比、分群建模、DeepModel集成全流程。从数据到模型上线的一站式机器学习建模能力。

The skill document

Financial Engineer Digital Employee / 金融工程专家数字员工

⚠️ 能力声明 / Capability Notice

  • Type: Knowledge reference framework for financial professionals
  • Purpose: Provides analytical templates, reference data, and workflow guidance
  • No persistent storage, network calls, background execution, or credential collection
  • All outputs are for reference only and require human review before real-world application
  • This skill does NOT provide financial, legal, or insurance advice
  • Users must exercise their own judgment and consult qualified professionals

⚠️ 使用声明

  • 本技能提供金融行业专业知识参考框架,辅助专业人员进行分析和决策
  • 所有输出仅供专业参考,不构成投资建议、法律意见或合规保证
  • 实际业务操作中需结合具体监管要求和机构内部制度执行
  • 最终报告和数据须经相关责任人审核确认后方可提交或使用
  • 不替代专业培训师、合规官或审核人员的专业判断## Skill Overview / 技能概览

金融工程专家数字员工,集成以下14项核心能力模块:

  1. Module 1: 数据轮廓速览
  2. Module 2: 单变量分析
  3. Module 3: 特征深度分析
  4. Module 4: LR评分卡建模
  5. Module 5: LR评分卡调参
  6. Module 6: XGBoost建模
  7. Module 7: XGBoost调参
  8. Module 8: DNN深度学习建模
  9. Module 9: DNN调参
  10. Module 10: 多模型效果对比
  11. Module 11: 模型解释
  12. Module 12: 自主实验循环
  13. Module 13: 分群建模
  14. Module 14: DeepModel深度集成


Module 1: 数据轮廓速览

数据洞察报告 (portable)

基于 scripts/profiler.py 主脚本,对数据集进行轮廓扫描,生成数据概况报告。


参数说明

参数必选默认值说明
--data_path-数据文件路径(parquet/csv)
--outputdata_profiling_report.md报告输出路径
--output_dir./outputs/产物输出目录
--output_namedata_profiling_report报告基名(不含扩展名)
--config-JSON 配置文件路径

执行方式

python scripts/profiler.py \
  --data_path ./examples/toy.parquet \
  --output_dir ./outputs/profile_run

执行结束后:

  • 产物目录 / 下生成:
    • report.md — 数据概况报告
    • result.json — 结构化产物清单(见 PROTOCOL.md)
  • stdout 末行打印 result.json 绝对路径,Agent 读这个文件即可

产物示例

{
  "skill": "data-profiling",
  "status": "success",
  "files": [
    {"path": ".../report.md", "role": "report"}
  ],
  "metrics": {"n_rows": 10000, "n_cols": 28, "n_missing_cols": 5},
  "summary": "中等规模数据集(10,000行),28 个字段,数值型为主,发现 2 个高缺失字段"
}

报告输出结构

章节内容
1. 数据概览文件名、格式、大小、行列数、字段类型分布饼图
2. 字段详情清单每个字段的类型、缺失率、唯一值数、示例值
3. 数值特征分析描述性统计(均值/标准差/分位数/偏度/峰度)+ histogram 分布图
4. 类别特征分析唯一值数、Top 值占比、集中度 + bar chart
5. 缺失值分析缺失率排名表格 + 柱状图
6. 数据质量重复行、空列、常量列、高缺失列
7. 样本预览前 5 行数据展示

自适应展示

当数值/类别特征数量超过 20 个时,统计表格和图表只展示前 20 个,避免报告过长。


与其他 Skill 的关系

Skill用途区别
data-profiling快速了解数据轮廓,不做深度分析
feature-analysis深度特征分析(IV、PSI、相关性等),需要目标变量
xgb-modeling建模全流程,需要目标变量

建议流程

  1. 先用 data-profiling 了解数据基本情况
  2. 根据洞察结果,决定是否需要 feature-analysisxgb-modeling

注意事项

  1. 无需目标变量:本 Skill 不需要提供目标变量,纯数据描述
  2. 快速轻量:执行速度快,适合大数据集的快速扫描
  3. 自动类型推断:识别数值型、类别型、布尔型、时间型、文本型字段

Module 2: 单变量分析

单变量分析 (portable)

基于 scripts/analyzer.py 主脚本,对指定特征进行单变量级别的分布分析或预测力评估。


功能定位

模式目标变量核心功能使用场景
数据探索模式❌ 无分布分析、交叉分布刚上传数据、初步了解特征分布
特征筛选模式✅ 有IV值、分箱表、筛选建议建模前快速筛选特征

参数说明

参数必选默认值说明
--data_path-数据文件路径(parquet/csv)
--features-待分析特征列名,逗号分隔,或 "all"
--target-目标变量列名(可选,有则进入筛选模式)
--exclude_cols-排除的列,逗号分隔
--binning_methodquantile分箱方式:quantile(等频) / distance(等距)
--n_bins10分箱数量
--cross-交叉分布的两个特征,逗号分隔
--output自动生成报告输出名称
--output_dir./outputs/产物输出目录
--config-JSON 配置文件路径

执行方式

数据探索模式(无目标变量)

python scripts/analyzer.py \
  --data_path ./data.parquet --features "age,income,score" \
  --output_dir ./outputs/uni_run

特征筛选模式(有目标变量)

python scripts/analyzer.py \
  --data_path ./data.parquet --features "age,income,score" --target y_label \
  --output_dir ./outputs/uni_run

交叉分布分析

python scripts/analyzer.py \
  --data_path ./data.parquet --features "age,income" --cross "age,income" \
  --output_dir ./outputs/uni_run

常用场景

场景一:数据探索(无目标变量)

查看单特征分布:

python scripts/analyzer.py --data_path ./data.parquet --features "age,income,score" --output_dir ./outputs/uni_run

指定等距分箱:

python scripts/analyzer.py --data_path ./data.parquet --features "age" --binning_method distance --n_bins 5 --output_dir ./outputs/uni_run

场景二:交叉分布分析

查看两个特征的联合分布:

python scripts/analyzer.py --data_path ./data.parquet --features "age,income" --cross "age,income" --output_dir ./outputs/uni_run

场景三:特征筛选(有目标变量)

计算 IV 值,评估特征预测力:

python scripts/analyzer.py --data_path ./data.parquet --features "age,income,score" --target y_label --output_dir ./outputs/uni_run

报告输出结构

数据探索模式(无目标变量)

章节内容
1. 数据概览样本量、分析特征数
2. 基础统计各特征的均值、中位数、缺失率、基数等
3. 分布分析各特征的分箱分布表(区间、样本数、占比)+ 柱状分布图
4. 交叉分布两特征联合分布表(可选)
5. 数据质量标记缺失率过高、低基数等问题标记

特征筛选模式(有目标变量)

章节内容
1. 数据概览样本量、正样本率、分析特征数
2. 基础统计各特征的均值、中位数、缺失率、基数等
3. IV值分析各特征 IV 值排名及分箱明细表
4. 数据质量标记缺失率过高、低基数等问题标记
5. 筛选建议建议保留/剔除的特征清单

分箱说明

等频分箱(quantile)

按数据分位数划分,每箱样本量大致相等。适合分布不均匀的数据。

等距分箱(distance)

按数值区间等间隔划分。适合分布均匀的数据。

特殊值处理

  • 缺失值:单独一箱,标记为 Missing
  • 零值:当零值占比 > 5% 时单独一箱
  • 负数:当存在负数时单独处理

输出示例

分布分析表

特征: age | 分箱方式: 等频 | 分箱数: 10

| 区间          | 样本数  | 占比    | 累计占比 |
|---------------|---------|---------|----------|
| Missing       | 156     | 1.56%   | 1.56%    |
| [18, 23)      | 984     | 9.84%   | 11.40%   |
| [23, 28)      | 1,012   | 10.12%  | 21.52%   |
| ...           | ...     | ...     | ...      |

交叉分布表

age × income 交叉分布

|              | 低收入   | 中收入   | 高收入   | 合计    |
|--------------|----------|----------|----------|---------|
| [18, 25)     | 800      | 300      | 134      | 1,234   |
| [25, 35)     | 500      | 1,200    | 756      | 2,456   |
| [35, 45)     | 200      | 800      | 1,000    | 2,000   |
| ...          | ...      | ...      | ...      | ...     |

IV 分箱明细表(有目标变量)

特征: age | IV = 0.1523

| 区间          | 样本数  | 正样本数 | 正样本率 | WoE     | IV      |
|---------------|---------|----------|----------|---------|---------|
| [18, 23)      | 984     | 156      | 15.85%   | 0.32    | 0.0234  |
| [23, 28)      | 1,012   | 98       | 9.68%    | -0.15   | 0.0089  |
| ...           | ...     | ...      | ...      | ...     | ...     |

与 feature-analysis 的关系

维度univariate-analysisfeature-analysis
定位单特征快速分析全量特征深度分析
目标变量可选必须
相关性分析
PSI稳定性
方案推荐✅ 四套方案
典型用法建模前快速筛选特征工程完整报告

推荐工作流univariate-analysis(快速筛选)→ feature-analysis(深度分析)


注意事项

  1. 特征数量:建议单次分析不超过 50 个特征,大量特征请分批处理
  2. 分箱数量:默认 10 箱,可根据数据量调整(数据量少时建议 5 箱)
  3. 交叉分布:仅支持两个特征的交叉,建议选择离散或已分箱的特征
  4. IV 计算:需要目标变量为 0/1 二分类
  5. 产物位置:报告保存到 /

Module 3: 特征深度分析

建模特征分析报告 (portable)

基于 scripts/analyzer.py 主脚本,对数据集特征进行全面分析并生成 Markdown 报告。


参数说明

参数必选默认值说明
--data_path-数据文件路径(parquet/csv)
--target-目标变量列名(0/1 二分类)
--exclude_cols-排除列,逗号分隔
--baseline_filter-PSI 基准数据条件(pandas query)
--comparison_filter-PSI 对比数据条件(pandas query)
--top_n10输出 IV 排名前 N 的特征分箱明细(默认 10)
--specified_features-指定特征分箱明细,逗号分隔
--outputfeature_analysis_report.md报告输出名称
--output_dir./outputs/产物输出目录
--config-JSON 配置文件路径

执行方式

python scripts/analyzer.py \
  --data_path ./data.parquet --target y_label \
  --exclude_cols "cust_code,busi_dt" \
  --baseline_filter "busi_dt <= '20250501'" \
  --comparison_filter "busi_dt > '20250701'" \
  --output_dir ./outputs/fa_run

常用场景

场景一:基础分析(不含 PSI)

适用于无时间维度的数据集:

python scripts/analyzer.py --data_path ./data.parquet --target y_label --output_dir ./outputs/fa_run

场景二:完整分析(含 PSI)

适用于有时间切分条件的数据集:

python scripts/analyzer.py --data_path ./data.parquet --target y_label \
  --baseline_filter "busi_dt <= '20250501'" \
  --comparison_filter "busi_dt > '20250701'" \
  --output_dir ./outputs/fa_run

场景三:单变量深度分析

输出 IV Top N 或指定特征的完整分箱明细表:

python scripts/analyzer.py --data_path ./data.parquet --target y_label --top_n 10 --output_dir ./outputs/fa_run
python scripts/analyzer.py --data_path ./data.parquet --target y_label --specified_features "umeng_ALL,bscore" --output_dir ./outputs/fa_run

报告输出结构

生成的 feature_analysis_report.md 包含以下章节:

章节内容
1. 数据概览样本量、特征数、正样本率
2. 基础统计分析各特征的均值、标准差、缺失率、偏度、峰度等
3. IV值分析IV 排名 Top 20、IV 分布统计
4. PSI稳定性分析PSI 排名、不稳定特征清单
5. 相关性分析高相关特征对、共线性处理建议
6. 综合建议推荐保留/移除特征
7. 建模特征方案四套特征筛选方案(全量/去共线性/高IV/稳定性优先)
8. 单变量深度分析默认输出 Top 10 特征分箱明细,可通过 --top_n 调整

特征筛选方案说明

报告自动生成四套建模特征方案:

方案筛选条件适用场景
方案一:全量入模基础合格池(IV>=0.02, PSI<0.25, 缺失率<50%)XGBoost/LightGBM 等树模型
方案二:去共线性标准基础池 + 贪心去 |r|>=0.7逻辑回归、评分卡
方案三:高预测力精选IV>=0.1 + 去共线性特征受限、可解释性要求高
方案四:稳定性优先PSI<0.1 + 去共线性线上部署、高稳定性要求

与其他 Skill 的关系

Skill用途区别
feature-analysis全量特征深度分析+方案推荐,需要目标变量
data-profiling快速了解数据轮廓,不做深度分析
univariate-analysis少量特征快速分析,不含全量相关性和方案推荐

建议流程data-profiling(快速扫描)→ feature-analysis(深度分析+方案推荐)→ xgb-modeling(建模)


注意事项

  1. 目标变量:必须为数值型
  2. PSI 分析:需同时提供 baseline_filtercomparison_filter,否则跳过
  3. 相关性:仅对数值型特征有效,非数值列自动跳过
  4. 大数据集:报告默认展示 IV Top 20,完整数据在文件中
  5. 产物位置:报告保存到 /

Module 4: LR评分卡建模

LR 评分卡建模 (portable)

基于 WoE (Weight of Evidence) 编码 + Logistic Regression 进行二分类评分卡建模。

核心流程:原始特征 → WoE 最优分箱编码 → LR 训练 → 评分卡转换

适用场景

  • 风控评分卡开发(标准 A/B/C 卡)
  • 需要强可解释性的业务场景
  • 监管合规要求模型白盒化

参数说明

参数必选默认值说明
--data_path / -d-数据文件路径(parquet/csv)
--target / -t-目标变量列名(0/1 二分类)
--time_colbusi_dt时间列名
--train_filter自动切分训练集筛选条件(pandas query)
--oot_filter按时间切出OOT 跨时间测试集条件
--oot_ratio0.20未传 --oot_filter 时按时间切 OOT 的比例
--val_ratio0.25从 train_full 切 val 的比例
--random_seed42随机种子
--exclude_cols-排除列,逗号分隔
--features-指定特征列表,逗号分隔;不传则自动按 IV 筛选
--max_n_bins8WoE 分箱最大箱数
--min_bin_size0.05最小分箱比例
--iv_threshold0.02IV 筛选阈值(低于此值的特征排除)
--regularizationl2正则化类型:l1 / l2 / elasticnet
--C1.0正则化强度(越小正则化越强)
--max_iter1000LR 最大迭代次数
--base_score600评分卡基础分
--pdo50评分卡 PDO(分数翻倍点)
--base_odds50.0基础 Odds(好坏比)
--model_name自动生成模型名称
--report_output自动生成报告输出路径
--output_dir./outputs/产物输出目录
--config-JSON 配置文件路径

执行方式

python scripts/modeling.py \
  --data_path ./data.parquet --target y_label \
  --time_col busi_dt \
  --exclude_cols "cust_code,busi_dt" \
  --output_dir ./outputs/lr_run

指定特征建模:

python scripts/modeling.py \
  --data_path ./data.parquet --target y_label \
  --features "feat1,feat2,feat3,feat4" \
  --regularization l1 --C 0.5 \
  --output_dir ./outputs/lr_run

常用场景

场景一:默认参数快速建模

python scripts/modeling.py --data_path ./data.parquet --target y_label --output_dir ./outputs/lr_run

场景二:指定特征建模

python scripts/modeling.py --data_path ./data.parquet --target y_label \
  --features "feat1,feat2,feat3" --output_dir ./outputs/lr_run

场景三:自定义评分卡参数

python scripts/modeling.py --data_path ./data.parquet --target y_label \
  --base_score 650 --pdo 40 --output_dir ./outputs/lr_run

输出产物

  1. 建模报告(Markdown)— 含数据切分、WoE分箱表、LR系数表、评分卡转换表、三段式评估指标、稳定性分析
  2. 模型文件(joblib)— LR 模型 + WoE 编码器序列化
  3. 评分卡表(JSON)— 可直接用于部署的分箱-分数映射
  4. result.json — 结构化产物清单

与其他建模 Skill 的对比

维度lr-modelingxgb-modelingdnn-modeling
算法Logistic RegressionXGBoostMLP (PyTorch)
特征编码WoE 分箱编码原始特征直接输入StandardScaler
可解释性白盒(系数 × WoE = 贡献)黑盒(需 SHAP 解释)
非线性能力弱(仅通过分箱引入)强(树结构天然支持)强(多层激活)
适用场景评分卡 / 合规 / 白盒高精度 / 特征交互高维复杂交互
评估体系AUC/KS/BCR/PSIAUC/KS/BCR/PSIAUC/KS/BCR/PSI

上下游关系

  • 前置data-profilingfeature-analysis / univariate-analysis(特征筛选)
  • 后续lr-tuning(调参优化)、model-comparison(多算法对比)
  • 平行:与 xgb-modeling / dnn-modeling 可做横向对比(同数据不同算法)

注意事项

  1. 目标变量:必须为 0/1 二分类
  2. 时间切分:建议按时间切分,确保 OOT 为未来数据
  3. 特征筛选:不传 --features 时自动按 IV 筛选(阈值 --iv_threshold
  4. WoE 分箱:使用 optbinning 做最优分箱,每特征最多 --max_n_bins
  5. 评分卡公式Score = base_score - factor × ln(odds),其中 factor = pdo / ln(2)
  6. 不提供调参:需要调参请切 lr-tuning(搜索 WoE 分箱 + LR 正则化参数)
  7. 模型保存:模型和评分卡保存到 /models/

Module 5: LR评分卡调参

LR 评分卡参数调优 (portable)

LR 评分卡调参的唯一入口,基于 _vendor/tuning/lr_engine.LRTuningEngine

核心设计:WoE 分箱参数与 LR 正则化参数联合搜索,确保最优组合。


调优流程

基线 LR 模型 → 诊断分析(过拟合/欠拟合) → 约束空间构造 → Optuna 搜索 → 最优参数 → 迭代

执行模式

模式触发条件行为
交互式(默认)用户说"调参"/"帮我调一下LR"每轮暂停等待用户反馈
AUTO用户说"自动调优"/"帮我调到最优"Agent 自动迭代直到收敛

参数说明

参数必选默认值说明
--data_path / -d-数据文件路径
--target / -t-目标变量列名
--features自动推断特征列表,逗号分隔
--time_colbusi_dt时间列名
--train_filter自动切分训练集筛选条件
--val_filterval_ratio 切出验证集筛选条件
--oot_filter按时间切出OOT 条件
--oot_ratio0.20OOT 占比
--val_ratio0.25Val 占比
--random_seed42随机种子
--exclude_cols-排除列
--max_n_bins8当前 WoE 分箱数
--iv_threshold0.02当前 IV 阈值
--C1.0当前正则化强度倒数
--regularizationl2正则化类型
--round / -r0当前轮次
--max_rounds5最大调优轮数
--auto-自动调优模式(flag)
--metricauc评估指标
--model_name自动生成模型名称
--output_dir./outputs/产物输出目录
--config-JSON 配置路径

搜索空间

参数类型范围说明
max_n_binsint3-15WoE 分箱数(越大越精细)
iv_thresholdfloat(log)0.005-0.10IV 筛选阈值(越低入模特征越多)
Cfloat(log)0.01-100正则化强度倒数(越大正则化越弱)
regularizationcategoricall1/l2/elasticnet正则化类型

诊断驱动策略

诊断Civ_thresholdmax_n_bins
过拟合↓ 收紧↑ 抬高(减少特征)↓ 减少
欠拟合↑ 放松↓ 降低(更多特征)↑ 增大
拟合良好±微调±微调±微调

执行方式

交互式模式(单轮)

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label \
  --round 1 --output_dir ./outputs/lr_tuning

AUTO 模式

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label \
  --auto --max_rounds 5 --output_dir ./outputs/lr_tuning

调优策略

策略1:抗过拟合

适用条件:Train-OOT Gap > 0.05

调整方向

  • C: 当前值 × 0.5(收紧正则化)
  • iv_threshold: 当前值 × 1.5(减少入模特征)
  • max_n_bins: 当前值 - 1(降低分箱精细度)

策略2:增强拟合

适用条件:OOT AUC < 0.58 且 Gap < 0.03

调整方向

  • C: 当前值 × 2(放松正则化)
  • iv_threshold: 当前值 × 0.5(增加入模特征)
  • max_n_bins: 当前值 + 2(提升分箱精细度)

策略3:精细微调

适用条件:Gap ∈ [0.03, 0.05],模型状态良好

调整方向

  • C: 小幅调整 ±20%
  • max_n_bins: 微调 ±1
  • 其他参数保持不变

策略4:收敛判定

条件:连续2轮 OOT 指标提升 < 0.001

行为:停止调优,输出最终结果


输出格式规范

每轮调优结束后,必须输出以下结构化信息:

### 第 N 轮 LR 调优结果

**参数变化**:
| 参数 | 上一轮 | 本轮 | 调整原因 |
|------|-------|------|----------|
| C | 1.0 | 0.5 | 收紧正则化 |
| iv_threshold | 0.02 | 0.03 | 减少入模特征 |
| max_n_bins | 8 | 6 | 降低过拟合 |

**效果对比**:
| 指标 | 上一轮 | 本轮 | 变化 |
|------|-------|------|------|
| OOT AUC | 0.72 | 0.73 | +0.01 ✓ |
| OOT KS | 0.17 | 0.18 | +0.01 ✓ |
| Gap | 0.06 | 0.04 | -0.02 ✓ |

**诊断结论**: 轻微过拟合(Gap 下降但仍 > 0.03)

**下一步建议**: 可继续微调 C 值,或接受当前结果

与其他技能的关系

技能职责关系
lr-modeling基线建模前置:需先用其训练出基线模型
model-comparison多算法对比后续:可与 XGB/DNN 做公平对比
xgb-tuningXGBoost 调参平行:同数据不同算法的调参

注意事项

  1. 数据要求:目标变量必须为 0/1 二分类
  2. 联合搜索:WoE 分箱与 LR 参数联合优化,确保最优组合
  3. 收敛判定:连续2轮提升不足 0.001 自动停止
  4. 最大轮数:默认最多 5 轮
  5. 产物位置:模型和报告保存到 /models//

Module 6: XGBoost建模

XGBoost 建模 (portable)

基于 XGBoost 进行二分类建模,支持自动特征筛选、多方案对比、稳定性分析。可运行在任何 Python 环境,无平台耦合。调参请用 xgb-tuning

核心流程:数据加载 → 特征筛选(四大算子)→ 多方案对比 → 最优方案训练 → 三段式评估 → 稳定性分析 → 报告生成

参数

通用参数 spec 定义在 _vendor/xgb_cli.py(domain=modeling)。

参数必选默认值说明
--data_path / -d-数据文件路径(parquet/csv)
--target / -t-目标变量列名(0/1 二分类)
--time_colbusi_dt时间列名
--train_filter自动切分训练集筛选条件(pandas query)
--val_filterval_ratio 切出验证集筛选条件
--oot_filter按时间切出OOT 跨时间测试集条件
--oot_ratio0.20未传 --oot_filter 时按时间切 OOT 的比例
--val_ratio0.25未传 --val_filter 时从 train_full 切 val 的比例
--random_seed42随机种子
--exclude_cols-排除列,逗号分隔
--features-指定单套特征,逗号分隔
--feature_sets-JSON 多方案;复杂嵌套优先放到 --configfeature_sets 字段
--feature_scheme-指定单套自动筛选方案:full/decorr/high_iv/stable;不传或传空则走 --auto_select 全量对比
--auto_selecttrue自动特征筛选(四大算子全量对比;指定 --feature_scheme 时忽略本参数)
--baseline_filter同 trainPSI 基准条件
--comparison_filter同 ootPSI 对比条件
--sample_strategyauto_weightauto_weight / undersample / none
--model_name自动生成模型名称(不含扩展名)
--report_outputxgb_modeling_report报告基名
--output_dir./outputs/portable 独有:产物输出目录
--config-JSON 配置文件路径(命令行 > config > 默认)

复杂嵌套参数(如 feature_sets)不要用命令行拼转义 JSON,改走 --config config.json 结构化通道。


执行方式

python scripts/modeling.py \
  --data_path ./examples/toy.parquet \
  --target y_label \
  --time_col busi_dt \
  --output_dir ./outputs/run1

复杂 feature_sets 通过 --config 传入:

python scripts/modeling.py \
  --data_path ./examples/toy.parquet \
  --target y_label \
  --config ./config.json \
  --output_dir ./outputs/run1

执行结束后 / 下生成:

  • xgb_modeling_report.md — 建模报告(数据概览、方案对比、最优方案、稳定性分析…)
  • models/.json — XGBoost 模型文件
  • models/_meta.json — 模型元数据(特征列表等)
  • models/_card.json — ModelCard
  • result.json — 结构化产物清单(见 PROTOCOL.md)

stdout 末行打印 result.json 绝对路径,Agent 读这个文件即可获取全部产物路径与 metrics。

产物示例(result.json)

{
  "skill": "xgb-modeling",
  "status": "success",
  "files": [
    {"path": ".../xgb_modeling_report.md", "role": "report"},
    {"path": ".../models/xgb_model_20260512_143000.json", "role": "model",
     "meta": {"feature_count": 8, "scheme_name": "去共线性", "model_type": "xgboost"}},
    {"path": ".../models/xgb_model_20260512_143000_meta.json", "role": "meta"}
  ],
  "metrics": {
    "oot_auc": 0.7823, "oot_ks": 0.4215,
    "auc_gap": 0.0214, "ks_gap": 0.0312,
    "n_features": 8, "overall_score_psi": 0.0423
  },
  "summary": "xgb-modeling 完成:最优方案「去共线性」,OOT AUC=0.7823,OOT KS=0.4215,特征数=8,Gap=0.0214"
}

跨 skill 串联

下游(如 model-explanation)通过 --model_path 传入上游 result.json 中 role=model 的文件路径:

# 从上游 result.json 提取模型路径
MODEL_PATH=$(jq -r '.files[] | select(.role=="model") | .path' ./outputs/run1/result.json)

python ../model-explanation/scripts/explain.py --model_path "$MODEL_PATH" --data_path ./examples/toy.parquet

常用场景

场景一:自动特征筛选建模

不指定特征,自动执行四大算子生成四套方案对比:

python scripts/modeling.py --data_path ./examples/toy.parquet --target y_label

场景二:指定特征建模

使用指定的特征列表:

python scripts/modeling.py --data_path ./examples/toy.parquet --target y_label --features "feat1,feat2,feat3"

场景二-b:指定单套自动筛选方案

只跑一种筛选方案(如"去共线性"):

python scripts/modeling.py --data_path ./examples/toy.parquet --target y_label --feature_scheme decorr

可选值:full(全量入模) / decorr(去共线性) / high_iv(高预测力) / stable(稳定性优先)

场景三:多方案对比

传入多套特征方案(优先用 --config,避免命令行拼 JSON 转义):

{
  "feature_sets": {
    "方案A": ["f1", "f2"],
    "方案B": ["f1", "f3"]
  }
}
python scripts/modeling.py --data_path ./examples/toy.parquet --target y_label --config ./config.json

场景四:保存模型

训练完成后保存最优模型,供后续 model-explanation 使用:

python scripts/modeling.py --data_path ./examples/toy.parquet --target y_label --model_name my_best_model

模型自动保存,输出:

  • 模型文件:/models/my_best_model.json
  • 元数据文件:/models/my_best_model_meta.json(含特征列表、参数等)

报告结构

章节内容
执行摘要4 行业务结论:最优方案、Gap 状态、PSI 状态、头部特征风险
1. 数据概览样本量、正样本率(Train/Test/OOT)
2. 特征方案对比各方案 AUC/KS/Gap 横向对比
3. 最优方案详情AUC/KS/Gini 指标、模型分数 IV 最优分箱、Lift 表、特征重要性、BCR @ Top5/10/20/30%、Brier Score + 校准曲线
4. 稳定性分析按月 AUC/KS(含 95% Bootstrap 置信区间)、Mann-Kendall 趋势检验、分数 PSI
5. 最终模型总结特征列表、综合表现

与其他建模 Skill 的对比

维度xgb-modelinglr-modelingdnn-modeling
算法XGBoostLogistic Regression + WoEMLP (PyTorch)
特征处理原始值直接输入WoE 分箱编码StandardScaler
非线性能力强(树结构)弱(仅通过分箱引入)强(多层激活)
可解释性中(需 SHAP)强(系数 × WoE)
训练速度很快
适用数据量任意任意>10k
评估体系AUC/KS/BCR/PSIAUC/KS/BCR/PSIAUC/KS/BCR/PSI

上下游关系

  • 前置data-profilingfeature-analysis(特征筛选)
  • 后续xgb-tuning(调参优化)、model-explanation(SHAP 解释)
  • 平行:与 lr-modeling / dnn-modeling 可做横向对比(同数据不同算法)

依赖

requirements.txt(核心:xgboost, scikit-learn, optbinning)。


注意事项

  1. 目标变量:必须为 0/1 二分类
  2. 时间切分:建议按时间切分,确保 OOT 为未来数据
  3. 自动特征筛选:需要数据同时满足 IV、PSI、缺失率条件
  4. 样本策略:强不均衡场景(正样本率 < 2%)建议 --sample_strategy undersample,一般场景用默认 auto_weight
  5. 不提供调参:需要调参请切 xgb-tuning(基于 Optuna TPE + 诊断驱动的约束搜索)
  6. 模型保存:每次训练自动保存最优模型至 /models/,无需传 --save_model;可用 --model_name 自定义文件名
  7. 稳定性分析:基准月份取自训练集时间段;Bootstrap CI 需样本量 >= 100 才计算
  8. BCR/校准曲线:BCR(Bad Capture Rate)反映拒绝 Top K% 人群能捕获多少坏客户;校准曲线反映模型概率输出可信度

Module 7: XGBoost调参

XGBoost 参数调优 (portable)

XGBoost 调参的唯一入口,基于 _vendor/tuning_engine.TuningEngine。核心设计:

  1. 基线参数智能推断 — 根据数据特征推荐合理起点
  2. 模型状态诊断 — 过拟合/欠拟合判定(diagnose_model
  3. 约束式贝叶斯搜索 — 诊断结论定向收缩 Optuna 搜索空间
  4. 用户知识融合 — 接受用户领域经验调整策略

调优流程

用户需求 → 数据特征分析 → LLM 推断基线参数 → 训练评估 → 诊断分析 → 参数调整 → 迭代直到满意
                                         ↑                                        ↓
                                         └───────────── 用户反馈/知识输入 ─────────────┘

执行模式

模式触发条件行为
交互式(默认)用户说"调参"/"帮我调一下"/"优化一下"每轮暂停等待用户反馈
AUTO用户说"自动调优"/"帮我调到最优"/"一直调到收敛"Agent 自动迭代直到收敛,每轮输出进度

默认模式: 交互式(更安全,用户可控)

交互式模式行为规范

  1. 单轮调优后必须暂停,输出结构化诊断报告,等待用户反馈
  2. 用户可能的反馈:
    • "继续" / "再调一轮" → 执行下一轮
    • "Gap 还是大" / "再保守点" → 调整策略后执行
    • "可以了" / "停" → 生成最终报告
  3. 禁止在交互式模式下连续执行多轮调优

AUTO 模式行为规范

  1. 每轮调优后同样输出完整的结构化诊断报告(格式同交互式模式),然后自动进入下一轮
  2. 收敛条件:Gap < 0.03 或 连续2轮提升 < 0.002
  3. 收敛后自动生成最终报告

参数说明

通用参数 spec 定义在 _vendor/xgb_cli.py(domain=tuning)。

参数必选默认值说明
--data_path / -d-数据文件路径(parquet/csv)
--target / -t-目标变量列名(0/1 二分类)
--features / -f-特征列表,逗号分隔
--time_colbusi_dt时间列名
--train_filter自动切分训练集筛选条件(pandas query)
--val_filterval_ratio 切出验证集筛选条件(已全面替代旧 --test_filter
--oot_filter按时间切出OOT 测试集条件
--oot_ratio / --val_ratio0.20 / 0.25自动切分比例
--random_seed42随机种子
--exclude_cols-排除列,逗号分隔
--params / -p默认参数当前参数(JSON;推荐放 --configparams 字段
--baseline / -b-基线参数(JSON;推荐放 --configbaseline 字段
--round / -r0当前轮次
--prev_val_metric-上一轮 val 指标(用于收敛判断)
--max_rounds5最大调优轮数
--auto-启用自动调优模式(flag)
--metricks评估指标(auc/ks
--model_name自动生成模型名称(不含扩展名)
--report_output / -o自动生成报告输出路径
--output_dir./outputs/portable 独有:产物输出目录
--warm_start-WarmStartBundle JSON 字符串或文件路径
--config-JSON 配置文件路径(由 --config 自动注入,一般无需手传)

--params / --baseline 传复杂 JSON 时优先放 --config,避免命令行双引号转义问题。


基线参数智能推断

Agent 应根据 tuner.py 输出的数据摘要推断合理的基线参数,而非使用固定默认值。

数据摘要字段

tuner.py 会输出以下数据特征供 Agent 分析:

字段说明影响参数
train_samples训练集样本量max_depth, n_estimators
oot_samplesOOT 样本量subsample
n_features特征数量colsample_bytree
pos_rate正样本率min_child_weight, scale_pos_weight

推断规则

样本量与树深度

训练集样本量max_depth 建议理由
< 5万3样本少,低复杂度防过拟合
5万 - 20万4中等样本,适中复杂度
20万 - 100万5样本充足,可稍复杂
> 100万5-6大样本支撑更高复杂度

正样本率与叶节点

正样本率min_child_weight 建议理由
< 1%300+正样本极少,需更大叶节点防止噎声
1% - 5%100-200不平衡,适当约束
5% - 20%50-100较平衡,标准约束
> 20%20-50平衡数据,可稍宽松

特征数与采样率

特征数colsample_bytree 建议理由
< 200.9-1.0特征少,充分利用
20 - 500.7-0.9中等特征,适度采样
> 500.5-0.7特征多,增加随机性

推断示例

数据摘要:
  训练集: 150,000 样本
  OOT: 50,000 样本
  特征数: 35 个
  正样本率: 2.5%

Agent 推断基线参数:
  max_depth: 4        <- 样本量中等
  min_child_weight: 150  <- 正样本率低
  colsample_bytree: 0.8  <- 特征数中等
  reg_alpha: 0.3      <- 特征多,适当正则
  reg_lambda: 1.0
  learning_rate: 0.05
  n_estimators: 500
  subsample: 0.8

场景化策略

Agent 应根据用户提供的场景信息调整调参策略。

金融风控场景

特点: 模型长期使用,稳定性优先

参数建议值理由
max_depth3-4低复杂度,抗过拟合
min_child_weight150+叶节点要稳定
reg_alpha0.3-0.5强正则化
reg_lambda1.0-2.0强正则化

调参优先级: Gap 控制 > KS 提升

终止条件: Gap < 0.02,即使 KS 略低也接受

营销响应场景

特点: 短期使用,效果优先

参数建议值理由
max_depth4-5允许较高复杂度
min_child_weight50-100可以稍宽松
reg_alpha0.1-0.2适中正则

调参优先级: KS 提升 > Gap 控制

终止条件: KS 达标,Gap < 0.05 可接受

平衡场景(默认)

特点: 兼顾效果和稳定性

参数建议值
max_depth4-5
min_child_weight100
reg_alpha0.1-0.3
reg_lambda0.5-1.0

终止条件: KS >= 0.30 且 Gap < 0.03


执行方式

复杂参数(params/baseline)建议通过 --config JSON 文件传入:

# 自动调优(推荐:通过 config.json 传复杂参数)
python scripts/tuner.py \
  --data_path ./data.parquet --target y_label --features "f1,f2,f3" \
  --auto --max_rounds 5 --output_dir ./outputs/tuning \
  --config ./config.json

config.json 示例:

{
  "params": {"max_depth": 4, "learning_rate": 0.05, "n_estimators": 500},
  "baseline": {"max_depth": 4, "learning_rate": 0.1}
}

交互式模式(单轮调优)

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label --features "f1,f2,f3" \
  --round 1 --output_dir ./outputs/tuning

AUTO 模式(自动调优循环)

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label --features "f1,f2,f3" \
  --auto --max_rounds 5 --metric auc \
  --output_dir ./outputs/tuning

脚本通过单出口协议 [RESULT:{json}] 输出模型、报告、state 更新;LLM 不要复述脚本已产出的图表


诊断知识库

模型状态诊断

诊断结果判定条件说明
过拟合Train-OOT Gap > 0.05训练集表现远超测试集,模型记忆训练数据
轻微过拟合Gap ∈ [0.04, 0.05]存在一定过拟合风险,需关注
拟合良好Gap ∈ [0.02, 0.04]模型泛化能力正常
欠拟合OOT AUC < 0.55 且 Gap < 0.02模型拟合能力不足
收敛连续2轮提升 < 0.001优化空间有限,可停止

过拟合信号

  • Train AUC 持续上升,OOT AUC 下降或停滞
  • Train-OOT Gap 逐轮增大
  • 验证集效果不稳定

欠拟合信号

  • Train AUC 和 OOT AUC 都较低
  • 增加训练轮数后效果持续提升
  • Gap 很小但整体 AUC 不足

XGBoost 参数语义

参数作用取值范围过拟合时欠拟合时
max_depth树深度,控制模型复杂度2-8↓ 减小↑ 增大
min_child_weight叶节点最小样本权重10-300↑ 增大↓ 减小
reg_alphaL1 正则化强度0-2.0↑ 增大↓ 减小
reg_lambdaL2 正则化强度0.1-10↑ 增大↓ 减小
subsample样本采样率0.5-1.0↓ 减小↑ 增大
colsample_bytree特征采样率0.5-1.0↓ 减小↑ 增大
learning_rate学习率0.005-0.15↓ 减小↑ 增大
n_estimators树数量100-1000↓ 减小↑ 增大

参数调整优先级

过拟合场景(按优先级):

  1. 增大 reg_alpha / reg_lambda(最直接)
  2. 减小 max_depth(控制复杂度)
  3. 增大 min_child_weight(限制分裂)
  4. 减小 subsample / colsample_bytree(增加随机性)

欠拟合场景(按优先级):

  1. 增大 max_depth(增加复杂度)
  2. 增加 n_estimators(更多迭代)
  3. 减小正则化参数
  4. 适当增大 learning_rate

用户指令理解

用户表达参数映射调整幅度
"正则化大一点"reg_alpha ↑ 或 reg_lambda+50%~100%
"正则化小一点"reg_alpha ↓ 或 reg_lambda-30%~50%
"树深度深一点"max_depth+1
"树深度浅一点"max_depth-1
"学习率低一些"learning_rate-30%~50%
"学习率高一些"learning_rate+30%~50%
"多训几轮"n_estimators+50%~100%
"少训几轮"n_estimators-30%~50%
"防过拟合"综合:正则化↑, 深度↓, subsample↓组合调整
"拟合强一点"综合:深度↑, 正则化↓组合调整
"更激进一点"learning_rate ↑, max_depth较大幅度
"更保守一点"learning_rate ↓, 正则化↑较小幅度
"继续自动调优"从当前参数启动新一轮 AUTO-
"就用这个" / "确认"结束调优,输出最终配置-

调优策略

策略1:抗过拟合

适用条件:Gap > 0.05

调整方向

  • reg_alpha: 当前值 × 2(如 0.1 → 0.2)
  • reg_lambda: 当前值 × 1.5
  • max_depth: 当前值 - 1(最小为 2)
  • min_child_weight: 当前值 × 1.5

策略2:增强拟合

适用条件:OOT AUC < 0.58 且 Gap < 0.03

调整方向

  • max_depth: 当前值 + 1(最大为 8)
  • n_estimators: 当前值 × 1.5
  • reg_alpha: 当前值 × 0.5
  • learning_rate: 当前值 × 1.2

策略3:精细微调

适用条件:Gap ∈ [0.03, 0.05],模型状态良好

调整方向

  • learning_rate: 小幅调整 ±20%
  • subsample: 小幅调整 ±10%
  • 其他参数保持不变

策略4:收敛判定

条件:连续2轮 OOT 指标提升 < 0.001

行为:停止调优,输出最终结果

策略 5:约束空间下的定向搜索

tuner.py 在 AUTO 模式下每轮调用 TuningEngine.run_round(diagnosis, tried_directions) 在诊断约束空间内跑 5 个 Optuna trial,直接取本轮最优参数进入下轮。tried_directions 会自动记录每轮参数增减方向及效果,若某个方向未改善,下一轮会自动冻结该维度。Agent 无需手动追踪,但在每轮报告中应说明"本轮诊断为 XX → 搜索空间重点是 XX",帮助用户理解调优推演。


输出格式规范

核心原则:每轮必须完整输出 禁止只输出最终调参报告。每一轮调参完成后,不论交互式还是 AUTO 模式,必须立即输出该轮的完整诊断分析过程和结果,包括:参数变化及调整理由、训练指标详情、与上一轮的对比、诊断结论、下一步建议。用户需要看到每一轮的诊断推理过程,而非仅看到最终参数。

单轮调优输出(每轮必须使用,交互式和 AUTO 模式均适用)

每轮调优结束后,必须输出以下结构化信息:

### 第 N 轮调优结果

**参数变化**:
| 参数 | 上一轮 | 本轮 | 调整原因 |
|------|-------|------|----------|
| max_depth | 4 | 3 | 降低过拟合 |
| reg_alpha | 0.1 | 0.3 | 增强正则化 |

**效果对比**:
| 指标 | 上一轮 | 本轮 | 变化 |
|------|-------|------|------|
| OOT KS | 0.17 | 0.18 | +0.01 ✓ |
| OOT AUC | 0.72 | 0.73 | +0.01 ✓ |
| Gap (KS) | 0.06 | 0.04 | -0.02 ✓ |

**诊断结论**: 轻微过拟合(Gap 下降但仍 > 0.03)

**下一步建议**: 可继续微调正则化,或接受当前结果

最终报告(调优结束时生成,不能替代逐轮输出)

当用户确认结束或 AUTO 模式收敛时,在逐轮输出完毕后,额外生成完整汇总报告:

注意:最终报告是对逐轮输出的汇总补充,不能替代逐轮输出。即使是 AUTO 模式,也必须先逐轮输出再汇总。

# XGBoost 调参报告

## 1. 调优概览

| 项目 | 内容 |
|------|------|
| 执行模式 | 交互式 / AUTO |
| 总轮数 | 3 |
| 收敛原因 | Gap < 0.03 达标 / 用户确认停止 |

## 2. 调参推演记录

| 轮次 | 参数 (depth/eta/reg) | OOT KS | OOT AUC | Gap (KS) | 诊断 | 调整决策 |
|------|---------------------|--------|---------|----------|------|----------|
| 基线 | 4 / 0.1 / 0.1 | 0.16 | 0.71 | 0.08 | 过拟合 | 降低 depth |
| R1 | 3 / 0.1 / 0.2 | 0.17 | 0.72 | 0.05 | 轻微过拟合 | 增强正则化 |
| R2 | 3 / 0.08 / 0.5 | 0.18 | 0.73 | 0.03 | 良好 | 收敛停止 |

## 3. 最终效果

| 指标 | 基线 | 最终 | 提升 |
|------|------|------|------|
| OOT KS | 0.16 | 0.18 | +0.02 |
| OOT AUC | 0.71 | 0.73 | +0.02 |
| Gap (KS) | 0.08 | 0.03 | -0.05 |

## 4. 最终参数

```json
{
  "max_depth": 3,
  "learning_rate": 0.08,
  "reg_alpha": 0.5,
  "reg_lambda": 1.0,
  "min_child_weight": 100,
  "subsample": 0.8,
  "colsample_bytree": 0.8,
  "n_estimators": 500
}

5. 调参结论

相比基线模型,最终模型:

  • OOT KS 提升 0.02(0.16 → 0.18)
  • OOT AUC 提升 0.02(0.71 → 0.73)
  • Gap (KS) 降低 0.05(0.08 → 0.03)
  • 稳定性显著改善,可安全部署

如需进一步探索,请给出您的调优建议。


---

## 与其他技能的关系

| 技能 | 职责 | 关系 |
|------|------|------|
| `xgb-modeling` | 基线建模 | 前置:需先用其训练出基线模型 |
| `model-explanation` | SHAP 解释 | 后续:调参完成后解释最优模型 |
| `model-comparison` | 多算法对比 | 平行:可与 LR/DNN 调参后做公平对比 |
| `auto-experiment` | 特征探索 | 区别:本 Skill 调参数,auto-experiment 探索特征 |

---

## 注意事项

1. **数据要求**:目标变量必须为 0/1 二分类
2. **特征要求**:需提供已筛选的特征列表(`--features` 必填)
3. **基线参数**:可传入自定义基线参数,否则使用默认值
4. **收敛判定**:连续2轮提升不足 0.001 自动停止
5. **最大轮数**:默认最多 5 轮,避免过度调优
6. **复杂 JSON**:`--params` / `--baseline` 等复杂 JSON 优先通过 `--config config.json` 传入
7. **产物位置**:模型和报告保存到 `/models/` 和 `/`


---

## Module 8: DNN深度学习建模

# DNN 深度学习建模 (portable)

基于 PyTorch 实现 MLP (Multi-Layer Perceptron) 进行二分类建模。

**核心流程**:特征标准化 → MLP 训练(BatchNorm + Dropout + Early Stopping) → 概率预测 → 三段式评估

**适用场景**:
- 高维特征交互建模
- 特征间存在复杂非线性关系
- 数据量充足(>10k 样本)
- 对模型性能有极致追求(可与 XGBoost 做 ensemble)

---

## 参数说明

| 参数 | 必选 | 默认值 | 说明 |
|------|:----:|--------|------|
| `--data_path` / `-d` | ✅ | - | 数据文件路径(parquet/csv) |
| `--target` / `-t` | ✅ | - | 目标变量列名(0/1 二分类) |
| `--time_col` | | `busi_dt` | 时间列名 |
| `--train_filter` | | 自动切分 | 训练集筛选条件(pandas query) |
| `--oot_filter` | | 按时间切出 | OOT 跨时间测试集条件 |
| `--oot_ratio` | | `0.20` | 未传 `--oot_filter` 时按时间切 OOT 的比例 |
| `--val_ratio` | | `0.25` | 从 train_full 切 val 的比例 |
| `--random_seed` | | `42` | 随机种子 |
| `--exclude_cols` | | - | 排除列,逗号分隔 |
| `--features` | | - | 指定特征列表,逗号分隔;不传则自动推断 |
| `--hidden_dims` | | `128,64,32` | 隐藏层维度,逗号分隔 |
| `--dropout` | | `0.3` | Dropout 比率 |
| `--learning_rate` | | `0.001` | 学习率 |
| `--batch_size` | | `512` | 批次大小 |
| `--epochs` | | `100` | 最大训练轮次 |
| `--patience` | | `10` | 早停耐心轮数 |
| `--weight_decay` | | `1e-4` | 权重衰减(L2 正则化) |
| `--pos_weight` | | `auto` | 正样本权重(auto=自动计算) |
| `--model_name` | | 自动生成 | 模型名称 |
| `--report_output` | | 自动生成 | 报告输出路径 |
| `--output_dir` | | `./outputs/` | 产物输出目录 |
| `--config` | | - | JSON 配置文件路径 |

---

## 执行方式

默认参数运行:

```bash
python scripts/modeling.py \
  --data_path ./data.parquet --target y_label \
  --time_col busi_dt \
  --exclude_cols "cust_code,busi_dt" \
  --output_dir ./outputs/dnn_run

自定义网络结构:

python scripts/modeling.py \
  --data_path ./data.parquet --target y_label \
  --hidden_dims "256,128,64" \
  --dropout 0.4 \
  --learning_rate 0.0005 \
  --epochs 200 \
  --output_dir ./outputs/dnn_run

常用场景

场景一:默认参数快速建模

python scripts/modeling.py --data_path ./data.parquet --target y_label --output_dir ./outputs/dnn_run

场景二:自定义网络结构

python scripts/modeling.py --data_path ./data.parquet --target y_label \
  --hidden_dims "256,128,64" --dropout 0.4 --learning_rate 0.0005 \
  --output_dir ./outputs/dnn_run

场景三:指定特征建模

python scripts/modeling.py --data_path ./data.parquet --target y_label \
  --features "feat1,feat2,feat3" --output_dir ./outputs/dnn_run

输出产物

  1. 建模报告(Markdown)— 含数据切分、网络结构、训练曲线、三段式评估指标、稳定性分析
  2. 模型文件(.pt)— PyTorch state_dict + 模型配置
  3. 训练日志(JSON)— 每 epoch 的 loss/AUC/KS 记录
  4. result.json — 结构化产物清单

与其他建模 Skill 的对比

维度dnn-modelingxgb-modelinglr-modeling
算法MLP (PyTorch)XGBoostLR + WoE
特征处理StandardScaler原始值WoE 分箱
非线性能力强(多层激活)强(树结构)
可解释性中(SHAP)强(系数)
训练速度很快
适用数据量>10k任意任意
评估体系AUC/KS/BCR/PSIAUC/KS/BCR/PSIAUC/KS/BCR/PSI

上下游关系

  • 前置data-profilingfeature-analysis(特征筛选)
  • 后续dnn-tuning(调参优化)、model-comparison(多算法对比)
  • 平行:与 xgb-modeling / lr-modeling 可做横向对比

注意事项

  1. 数据要求:目标变量必须为 0/1 二分类
  2. 数据量:建议训练样本 > 10k,DNN 在小样本上易过拟合
  3. 缺失值:脚本自动使用中位数填充 + 添加缺失指示列
  4. 标准化:自动对数值特征做 StandardScaler 标准化
  5. 早停:当 val loss 连续 patience 轮不下降时自动停止
  6. 不提供调参:需要调参请切 dnn-tuning(搜索网络架构 + 训练参数)
  7. GPU:自动检测 CUDA,无 GPU 时回退到 CPU
  8. 模型保存:模型文件保存到 /models/

Module 9: DNN调参

DNN 深度学习参数调优 (portable)

DNN 调参的唯一入口,基于 _vendor/tuning/dnn_engine.DNNTuningEngine

核心设计:搜索期间缩减 epochs(加速),诊断驱动动态约束搜索空间。


调优流程

基线 DNN 模型 → 诊断分析(过拟合/欠拟合) → 约束空间构造 → Optuna 搜索(30 epochs) → 最优参数 → 迭代

执行模式

模式触发条件行为
交互式(默认)用户说"调参"/"帮我调一下DNN"每轮暂停等待用户反馈
AUTO用户说"自动调优"/"帮我调到最优"Agent 自动迭代直到收敛

默认模式: 交互式(更安全,用户可控)


参数说明

参数必选默认值说明
--data_path / -d-数据文件路径(parquet/csv)
--target / -t-目标变量列名(0/1 二分类)
--features自动推断特征列表,逗号分隔
--time_colbusi_dt时间列名
--train_filter自动切分训练集筛选条件
--val_filterval_ratio 切出验证集筛选条件
--oot_filter按时间切出OOT 条件
--oot_ratio0.20OOT 占比
--val_ratio0.25Val 占比
--random_seed42随机种子
--exclude_cols-排除列,逗号分隔
--n_layers3隐藏层数
--layer_width128首层宽度
--dropout0.3Dropout 率
--learning_rate0.001学习率
--weight_decay1e-4L2 正则化
--batch_size512批次大小
--epochs100完整训练 epochs
--search_epochs30搜索期间 epochs(加速)
--round / -r0当前轮次
--max_rounds5最大调优轮数
--auto-自动调优模式(flag)
--metricauc评估指标
--model_name自动生成模型名称
--output_dir./outputs/产物输出目录
--config-JSON 配置路径

搜索空间

参数类型范围说明
n_layersint2-4隐藏层数
layer_widthint32-256首层宽度(递减结构)
dropoutfloat0.1-0.5Dropout 比率
learning_ratefloat(log)1e-4 ~ 0.01Adam 学习率
weight_decayfloat(log)1e-5 ~ 1e-3L2 正则化
batch_sizecategorical128/256/512/1024批次大小

诊断驱动策略

诊断dropoutweight_decayn_layerslayer_width
过拟合↑ 抬高↑ 增强↓ 减少↓ 缩小
欠拟合↓ 降低↓ 减弱↑ 增加↑ 增大
拟合良好±微调±微调±微调±微调

执行方式

交互式模式(单轮调优)

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label \
  --round 1 --output_dir ./outputs/dnn_tuning

AUTO 模式(自动调优循环)

python scripts/tuner.py \
  --data_path ./data.parquet --target y_label \
  --auto --max_rounds 5 --output_dir ./outputs/dnn_tuning

调优策略

策略1:抗过拟合

适用条件:Train-Val Gap > 0.05

调整方向

  • dropout: 当前值 + 0.1(上限 0.5)
  • weight_decay: 当前值 × 2
  • n_layers: 当前值 - 1(最小为 2)
  • layer_width: 当前值 - 32(最小为 32)

策略2:增强拟合

适用条件:Val AUC < 0.58 且 Gap < 0.03

调整方向

  • n_layers: 当前值 + 1(最大为 4)
  • layer_width: 当前值 + 32(最大为 256)
  • weight_decay: 当前值 × 0.5
  • learning_rate: 当前值 × 1.2

策略3:精细微调

适用条件:Gap ∈ [0.03, 0.05],模型状态良好

调整方向

  • learning_rate: 小幅调整 ±20%
  • dropout: 小幅调整 ±0.05
  • 其他参数保持不变

策略4:收敛判定

条件:连续2轮 Val 指标提升 < 0.001

行为:停止调优,输出最终结果


输出格式规范

与 xgb-tuning 保持一致的逐轮诊断报告格式。

每轮调优结束后,必须输出以下结构化信息:

### 第 N 轮 DNN 调优结果

**参数变化**:
| 参数 | 上一轮 | 本轮 | 调整原因 |
|------|-------|------|----------|
| n_layers | 3 | 3 | 不变 |
| layer_width | 128 | 96 | 降低过拟合 |
| dropout | 0.3 | 0.4 | 增强正则化 |

**效果对比**:
| 指标 | 上一轮 | 本轮 | 变化 |
|------|-------|------|------|
| Val AUC | 0.72 | 0.73 | +0.01 ✓ |
| OOT AUC | 0.70 | 0.71 | +0.01 ✓ |
| Gap | 0.06 | 0.04 | -0.02 ✓ |

**诊断结论**: 轻微过拟合(Gap 下降但仍 > 0.03)

**下一步建议**: 可继续微调 dropout,或接受当前结果

与其他技能的关系

技能职责关系
dnn-modeling基线建模前置:需先用其训练出基线模型
model-comparison多算法对比后续:可与 XGB/LR 做公平对比
xgb-tuningXGBoost 调参平行:同数据不同算法的调参

注意事项

  1. 数据要求

Related skills

覆盖准入规则扫描、风险规划、案件接件审核、抵质押风险管理、关联交易检测、贷前分析、审查备忘录全流程。帮助信贷审查人员提升风险识别能力。

7 installs

个人金融素养教育工具,提供基础金融概念、理财入门与风险意识培养。Use when 用户需要financial-literacy-tool-free相关功能时使用。不适用于超出本技能能力范围的复杂需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。

覆盖贷前尽调、行业分析、股权穿透、财报分析、拜访计划、产品路演、授信申请、拜访备忘录全流程。助力对公客户经理高效完成信贷全流程作业。

7 installs

金融行业经验萃取Skill - 专注于银行、保险、证券、投资管理等金融领域的最佳实践和方法论。涵盖风险管理、客户服务、数字化转型、合规管理等核心能力提升。当用户从事金融业务、要求学习金融行业经验、提炼金融方法论时使用。核心能力:风险管控、客户服务、合规管理、数字化运营。

3 installs

覆盖行业规则生成、大额风险暴露管理、信贷政策分析、风险协作、风险信息提取、贷后监控预警、贷后管理、VLM验证全流程。帮助银行信用风险管理人员实现风险闭环管理。

7 installs

由 model-distillation 从教师技能 fintech-engineer 蒸馏并增强的超越型元技能, 在教师能力之上叠加自验证、自我反思、super-agent 编排与持续自进化闭环,逐步超越教师。