自动化风控模型训练工具
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/kins--risk-model-trainer01.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @kins/risk-model-trainer01。只要提供数据,就能训练风控模型。
阅读全文 (展开查看完整说明)
概述
<!– =====================================================================版权所有 © 金实宏成本技能为「基础版本」,仅供使用与分发,禁止修改、反编译或去除所有权标识。任何改动将破坏完整性并使授权失效。详见同目录 NOTICE.md。===================================================================== –>
风控模型训练器(risk-model-trainer)
🐑 一句话:把用户上传的图片/PDF/Excel/CSV 数据变成可用的风控模型——
自动选算法、可联邦、能测试、可导出 PMML / CSV / Python 三种格式。
一、何时使用(触发词)
用户出现以下任一意图时,优先调用本技能:
| 类别 | 触发表达示例 |
|---|---|
| 显式训练 | "用这份数据训练一个风控模型"、"帮我建模"、"训练个违约预测模型"、"风控建模" |
| 上传待办 | 用户只甩来文件并说"看看这个"、"用这些数据建模"、"这数据能训练吗" |
| 联邦需求 | "联邦学习训练"、"多方联合建模"、"数据不出域建模" |
| 测试评估 | "测试一下这个模型"、"评估模型效果" |
| 导出部署 | "导出 PMML"、"把模型导成 Python"、"模型导出成 csv" |
| 英文/混合 | "train a risk model"、"federated learning"、"export model" |
| 模型关系问答 | "模型用了哪些指标"、"哪些指标最重要"、"模型和指标什么关系"、"讲解下这个模型" |
| 无标签训练 | "数据没有标签怎么训练"、"自动区分好坏样本"、"没有好坏标注" |
| 迭代/重训 | "模型效果不好"、"再训练一次"、"换个算法试试"、"按我的反馈改模型"、"迭代训练" |
| 新手/帮助 | "怎么用这个技能"、"新手"、"FAQ"、"帮助"、"支持什么数据" |
不要用于:纯数据清洗(无建模意图)、普通文件格式转换(交给 file-format-converter)、仅做风险报告(交给 risk-report-generator)。
二、核心原则
- 先校验,再加载,后建模:所有上传文件先跑
data_validator.py,
损坏/不可解析(ERROR)一律阻断并反馈,绝不拿坏数据硬训。
- 意图不清主动追问:用户只传数据无训练意图 → 用
AskUserQuestion追问
训练什么模型、用什么算法;用户无算法偏好 → 自动选型(见 §四)。
- 默认安全可解释:风控场景默认优先可解释模型(逻辑回归基线),
大数据再升级树模型;异常检测默认孤立森林。
- 联邦可选、默认降级安全:开启
--federated对接 Flower/FATE;
若环境无联邦框架,自动降级本地训练并明确告知(不再满足数据不出域)。
- 交付即呈现:模型、报告、导出文件用
present_files交给用户预览/下载。 - 数据不足则降级「规则指标」:若用户数据不支持建模(如仅有司法舆情等单源、缺可用特征、
样本 < 30、或无主键无法聚合为企业级宽表),不做模型训练,改为输出「规则指标清单」——逐项定义可用指标、作用机理(结合联网权威口径)、阈值/一票否决规则与风险判定,并明确标出缺失维度。详见 §三·五 与 references/rule-indicators.md。
- 上传即自动判断模型:收到数据后,Skill 自行判定该训什么模型(有标签→有监督分类;
无标签+欺诈意图→无监督异常检测;无标签+分群意图→聚类),仅在完全无意图时简短确认一次,不反复追问。
- 无标签也能训(自动区分好坏样本):检测到数据无好坏标签列时,先用
auto_label.py
自动打"好/坏"伪标签(孤立森林异常分数 / 规则评分 top 占比),再用有监督训练,并在交付时明示这是自动标签。
- 迭代训练闭环:模型交付后,用户可反复追问"效果/不足",Skill 按反馈(换算法、调参、增删特征、
改标签阈值、重采样)再次训练并对比效果,直到用户满意为止(见 §十一)。
- 新手友好:首次使用给一句引导并指向
references/faq.md;主动解答 FAQ,确保没有 ML 背景也能操作。
三、执行逻辑(主工作流)
[1] 接收文件
└─ 收集本次上传的所有文件路径(区分新传 vs 历史)
[2] 校验(data_validator.py)
├─ 任一 ERROR → 反馈损坏原因 + 解决方案 → 等用户重传(阻断)
└─ 全部 OK/WARN → 继续
[3] 加载(data_loader.py)
├─ CSV/Excel → 直接解析
├─ PDF → 抽表;纯文本/扫描件 → 提示需视觉读取或 OCR
└─ 图片 → 多模态视觉读取 → 生成中间 CSV → 再加载
└─ 输出:结构化 CSV(UTF-8-SIG)
[4] 自动判断模型类型(不再反复追问)
├─ 用户已指定"模型+算法" → 直接用指定算法
├─ 用户只传数据/无明确意图 → Skill 自行判定(§四):
│ 有标签列 → 有监督分类;无标签+欺诈/异常意图 → 孤立森林;
│ 无标签+分群意图 → K-Means;完全无意图 → 默认孤立森林并一句话说明
└─ 仅当判定歧义大时,用 AskUserQuestion 简短确认一次
[4.5] 数据充分性评估(关键决策门)
├─ 充足:单源但字段可作特征且样本充足,或≥2 源可聚合为企业级宽表 → 继续 [4.6]
├─ 不足:仅单源且不可建模 / 缺特征 / 样本<30 / 无主键无法 join
│ → 【不训练统计模型】,转「规则指标兜底」分支(见 §三·五 / §九)
│ → 用规则评分模型"覆盖用户数据"(仍是可交付的风险模型),并标缺失维度
└─ 输出:sufficiency_report.{json|md}
[4.6] 标签检测与自动区分好坏样本
├─ 检测到好坏标签列(如 违约/好坏/label/y/is_bad) → 直接进入 [5] 有监督训练
├─ 无标签列 → 调用 auto_label.py 自动打"好/坏"伪标签:
│ 孤立森林异常分数 top 占比 或 规则评分分位 → 标为"坏"(1)/"好"(0)
└─ 输出:带 label 的训练宽表 + auto_label_report(方法/分布/占比,明示"自动标签")
[5] 训练(model_trainer.py)
├─ 有监督:--target <列名> --algorithm <指定|auto>(auto_label 后目标列=auto_label)
├─ 无监督:--task clustering|anomaly
└─ 联邦:--federated(对接 Flower/FATE,缺失则降级并提示)
└─ 输出:model.pkl + train_report.json(含所用特征列表)
[6] 测试(model_tester.py,默认执行)
└─ 有监督:accuracy/precision/recall/F1/ROC-AUC/混淆矩阵
└─ 无监督:silhouette / 异常占比 / 分数分布
└─ 输出:test_report.json + 可选可视化
[7] 导出(model_exporter.py)
└─ --format pmml|csv|python|all → model.pmml / model_params.csv / predictor.py
[8] 交付初版(present_files)+ 一句话引导(新手见 §十二 / FAQ)
[9] 模型与指标关系问答(model_explainer.py,按需)
└─ 用户问"哪些指标重要 / 模型和指标什么关系" → 输出特征重要性/系数排序
└─ 结合 rule-indicators.md 口径,用自然语言讲清每个指标如何影响判断
[10] 迭代训练闭环(按需,循环至满意)
└─ 用户反馈效果/不足 → 调整(换算法/调参/增删特征/改标签阈值/重采样)
└─ 再次 [5][6] 训练并对比 test_report,present_files 反馈 → 回到 [9]/[10]三·五、数据充分性评估与规则指标兜底(优化分支)
核心思想:模型不是目的,风险识别才是。当用户数据不足以支撑训练时,不强训,
而是把现有数据加工成可解释的规则指标,并联网补全指标的权威定义与作用,交付用户。
1. 何时判定"数据不足"(触发规则指标兜底)
满足任一即视为不足,跳过建模:
| 情形 | 判定 |
|---|---|
| 仅单源且无可建模字段 | 如只有"司法数据"一条清单,没有企业级特征宽表 |
| 缺少主键无法聚合 | 各 Sheet 无统一企业 id/名称,无法 join 成一行一企业 |
| 样本量 < 30 | 统计上不足以训练稳定模型 |
| 目标列缺失且无无监督价值 | 既无标签、字段又无法构造异常/分群特征 |
典型例子:用户只给了司法裁定书数据(无企业基础、无财务)→ 只有司法指标可用,不做模型训练,直接输出司法风险规则指标(涉诉次数、被执行人、失信、终本占比…)。
2. 规则指标兜底的产出(不训练模型)
输出 rule_indicators_report.md + sufficiency_report.json,结构:
- 可用数据清单:列出本次能用的源(如"司法数据 797 条")。
- 规则指标逐项(按源分组):每项含
- 指标名(如
涉诉次数)、口径(如何统计)、 - 作用机理(结合联网权威口径,说明该指标为何预示风险)、
- 风险方向(越大越危险 / 越小越危险)、阈值/一票否决建议。
- 指标名(如
- 缺失维度提示:明确告诉用户"还缺哪些数据才能升级为模型",如缺财务→无法算资产负债率/流动比。
- 联网指标加工:对可用指标,联网检索其在监管/银行实务中的官方释义与阈值(如邮储银行负面规则集、
国家企业信用信息公示系统栏目、赤峰科技型企业信用评价体系减分项),把"指标作用"讲清楚。
3. 指标口径与阈值库
权威指标定义、作用与阈值(司法/行政处罚/经营异常/负面舆情/工商股权等)见references/rule-indicators.md,由本技能在兜底时按需引用,并向用户说明来源。
4. 与建模路径的关系
- 充足 → 仍建议同时给出一份规则指标摘要(可解释性互补,满足监管/业务方对"为什么"的追问)。
- 不足 → 纯规则指标交付,并给出"补齐哪些数据即可升级为模型"的明确清单。
四、自动判断模型类型与标签检测(无要求时)
Skill 自行判断该训什么模型,仅在歧义大时简短确认一次。详见 references/algorithms.md。快速决策:
- 检测到好坏标签列(列名含 违约/逾期/好坏/label/y/is_bad/target 等)→ 有监督分类
- 样本 < 5k 且特征 < 40 →
logistic(监管可解释) - 否则装了 xgboost →
xgboost,否则random_forest
- 样本 < 5k 且特征 < 40 →
- 无标签列(用户也没说好坏)→ 先
auto_label.py自动区分好坏样本(§九),再走有监督 - 无标签 + 异常/欺诈意图(或纯特征无标签且适合异常检测)→ 无监督
isolation_forest(风控默认) - 无标签 + 分群/分层意图 → 无监督
kmeans(默认 k=5) - 只传数据、完全无要求 → 默认
isolation_forest并一句话说明(异常检测最通用)
标签检测:扫描列名关键词判断是否有监督目标;若无且用户未要求无监督,则自动打伪标签,
并在交付时明确标注"自动标签",避免用户误以为是真实标注。
五、文件上传失败 / 损坏的反馈与方案
校验脚本 data_validator.py 输出 OK/WARN/ERROR。ERROR 时向用户逐项说明:
| 问题 | 反馈话术要点 | 解决方案 |
|---|---|---|
| 文件不存在/未上传成功 | "附件似乎未成功附加" | 重新拖拽/上传;命令行传入确认路径 |
| 空文件(0 字节) | "文件为空,可能上传中断" | 检查网络重传;确认源文件非空 |
| 图片损坏(无 IEND/EOI) | "图片未完整写入或已损坏" | 重新截图/导出;避免微信压缩损坏 |
| PDF 无 %%EOF / 不可解析 | "PDF 损坏或为非标准格式" | 重新导出 PDF;用 Adobe/打印另存 |
| Excel 不是有效 OOXML 包 | "xlsx 结构损坏" | 用 Excel 打开另存为 .xlsx;修复文件 |
| CSV 编码/列不一致 | "CSV 解码失败或列数不齐" | 转 UTF-8/GBK;确认分隔符;用 Excel 另存 csv |
| 纯扫描件 PDF / 图片表 | "无法直接抽表,需视觉读取" | 由助手视觉读取转 CSV;或用 file-format-converter 转 Excel |
原则:在用户修复/重传前,不对问题文件建模;其余 OK 文件可先并行处理。
六、联邦学习对接
详见 references/federated-learning.md。要点:
- 开关:
model_trainer.py --federated,角色--fed-role guest,参与方--fed-party-id。 - 框架:Flower(默认轻量对接层)/ FATE(强合规同态加密)。
- 缺框架 → 自动降级本地训练,并明确告知用户已不满足数据不出域。
七、模型导出格式
| 格式 | 用途 | 命令 |
|---|---|---|
| PMML | 跨平台部署(Java/规则引擎/风控系统) | --format pmml(需 sklearn2pmml/nyoka) |
| CSV | 模型参数表(系数/重要性/聚类中心) | --format csv |
| Python | 自包含预测脚本(无需 pickle) | --format python |
PMML 导出依赖
sklearn2pmml(另需 jpmml-sklearn 后端)或nyoka;未安装时脚本给出明确安装提示,不静默失败。
八、脚本调用速查
PY=~/.workbuddy/binaries/python/envs/default/bin/python
SK=~/.workbuddy/skills/risk-model-trainer/scripts
# 1) 校验
$PY $SK/data_validator.py --src <文件> [--src <文件2>] --json /tmp/val.json
# 2) 加载(图片先视觉转CSV)
$PY $SK/data_loader.py --src <文件> --out /tmp/data.csv [--sheet 0]
# 3) 训练(自动选算法)
$PY $SK/model_trainer.py --data /tmp/data.csv --target 违约 --out-model /tmp/m.pkl
# 或 无监督异常检测
$PY $SK/model_trainer.py --data /tmp/data.csv --task anomaly --out-model /tmp/m.pkl
# 或 联邦
$PY $SK/model_trainer.py --data /tmp/data.csv --target 违约 --federated --out-model /tmp/m.pkl
# 4) 测试
$PY $SK/model_tester.py --model /tmp/m.pkl --test /tmp/test.csv --target 违约 --out-report /tmp/test.json
# 5) 导出(三种全要)
$PY $SK/model_exporter.py --model /tmp/m.pkl --format all --out /tmp/export
# 6) 无标签自动区分好坏样本(有真实标签则用 --label-col 指定跳过)
$PY $SK/auto_label.py --data /tmp/data.csv --out /tmp/data_labeled.csv --method isolation --contamination 0.08
# 7) 模型与指标关系问答(特征重要性/系数 + 指标作用)
$PY $SK/model_explainer.py --model /tmp/m.pkl --data /tmp/data.csv
--out-md /tmp/model_explanation.md --out-csv /tmp/feature_importance.csv九、自动区分好坏样本(无标签也能训)
当用户数据没有好坏标签列时(最常见情况),Skill 不卡住、不强要标签,而是自动区分好坏样本后训练:
- 脚本:
scripts/auto_label.py - 方法(按数据自动选):
- 异常分数法(默认):用孤立森林对全部样本算异常分数,将最异常的
contamination(默认 5%~10%)标为"坏"(1),其余"好"(0)。 - 规则评分法:若有明确风险特征,按规则打分后取高分位标"坏"。
- 异常分数法(默认):用孤立森林对全部样本算异常分数,将最异常的
- 输出:带
auto_label列的训练宽表 +auto_label_report(方法、好坏占比、阈值),明示"自动标签、非真实标注"。 - 之后照常走有监督训练(目标列=
auto_label)。交付时必须在报告中标注"本模型基于自动标签训练,建议补充真实标签后再固化"。
$PY $SK/auto_label.py --data /tmp/data.csv --out /tmp/data_labeled.csv
--method isolation --contamination 0.08
# 指定真实标签列则跳过自动打标:--label-col 违约十、模型与指标关系问答
用户生成模型后常问"哪些指标最重要?模型怎么用这些指标判断?"——本技能必须能答:
- 脚本:
scripts/model_explainer.py(输入model.pkl+ 训练数据) - 输出:
- 特征重要性 / 系数排序(逻辑回归看系数符号与大小;树模型看 importance)。
- 指标作用说明:结合
references/rule-indicators.md口径,用自然语言讲清
每个指标为何影响风险判断(如"涉案金额越大,违约概率越高")。
- 正向/负向指标标注(哪些指标升高→风险升高)。
- 呈现:用
present_files给出model_explanation.md(可读版)+feature_importance.csv。 - 对话中可直接回答用户追问,例如:"模型最看重的前 3 个指标是 X/Y/Z,其中 X 每升 1 单位,
违约概率约升 a%,因为……(引用权威口径)"。
$PY $SK/model_explainer.py --model /tmp/m.pkl --data /tmp/data.csv
--out-md /tmp/model_explanation.md --out-csv /tmp/feature_importance.csv十一、迭代训练闭环(反复追问至满意)
模型不是一次性交付。生成后用户可持续反馈不足,Skill 据此再次训练并对比效果,直到满意:
- 收集反馈:用户说"效果不好 / 换个算法 / 漏了某特征 / 坏样本太少"等 → 用 AskUserQuestion
或自由文本厘清具体诉求(准确率低?某类漏判?想加特征?)。
- 选择调整动作(任一或组合):
- 换算法(
--algorithm改 logistic/xgboost/rf/isolation_forest) - 调超参(树深度、contamination、阈值)
- 增删特征(加入用户提到的指标列 / 去掉噪声列)
- 改标签:调整 auto_label 的 contamination,或改用用户提供的真实标签列
- 重采样(类别不平衡时过/欠采样)
- 换算法(
- 再次训练+测试:重跑 [5][6],生成新的
train_report/test_report。 - 对比反馈:把本轮与上一轮的关键指标(accuracy/F1/ROC-AUC/异常占比)并列对比,
用 present_files 交付,并说明"改了什么、为何变好/变差"。
- 循环:回到步骤 1,直到用户说"满意"或主动结束。
每次迭代建议在交付物文件名带轮次(如
m_v2.pkl、test_v2.json),便于追溯。
十二、新手引导与 FAQ
首次调用或用户说"新手/怎么用/FAQ/帮助"时:
- 给一句引导:"我是风控建模助手,把你的数据(Excel/CSV/PDF/图片)发我,我会自动判断并训练模型;
没有好坏标签也能训(自动区分),数据不够会给你规则指标。不确定就问我。"
- 推送
references/faq.md(常见问题:支持什么数据、要多少样本、数据不足怎么办、
模型怎么解读、联邦学习是什么、迭代怎么用等)。
- 主动用平实语言解答,不让没有 ML 背景的用户卡住。
十三、所有权与授权
本技能由金实宏成所有。允许为使用目的安装、使用、分发(须保持完整且未修改);禁止修改、反编译、去除所有权标识或分发修改版本。完整条款见 NOTICE.md。