第30章 完整跑一遍 Cheat Sheet
小白一句话
前面 29 章拆了一堆零件,这一章把它们装成一条能一站站跑完的流水线,从原始明细到每日评分表,一条命令走到底。跑完你手里就有整本手册的总装图。
这一章在干嘛
手册写到这里,每个环节都单独讲透了。收官章做三件事:
- 把"数据 → 特征 → 标签 → 训练 → 校准 → 评分 → 发布"串成一条最小可复跑的流水线;
- 把上线前要做的事收拢成三件:模型指纹 (版本可追溯)、上线门禁 (五类元数据缺一不放行)、转正验收(新模型凭什么替换旧模型);
- 给一张通用参数模板,真实项目照着填。
一站一站走:整条流水线
用一个脚本 附件/08_上线篇/activity_cheatsheet.py 从明细一路跑到 07-23 的评分表,每站都有真实数字:
| 站 | 干什么 | 出处 | 这一站的关键参数 / 产物 |
|---|---|---|---|
| 1 数据门禁 | 明细列齐全、日期范围合理 | 第5章 | 1643 条记录,07-01 ~ 07-30,缺列 0 |
| 2 特征 + 双标签 | 10 维特征 + returned/sustained | 第7、6、24章 | FEATS 10 维;训练 105 行(回访 92、持续 62) |
| 3 时间外推切分 | 训练早、测试晚,测试不碰训练 | 第8章 | 训练 07-08/07-15,测试 07-22(回访 42) |
| 4 双头训练 + 校准 | 回访头全量、条件头子集,各自 sigmoid | 第12、25、16、26章 | 100 棵 / 深 3 / lr 0.1 / 种子 20260827;回访头 PR-AUC 0.805、条件头 0.904 |
| 5 每日评分 | 出 07-23 契约表 | 第17、26、29章 | 7 列:uid / 评分日 / 版本 / 回访分 / 持续分 / 风险档 / 兜底分 |
| 6 发布 | 指纹 + 门禁 + 转正验收 | 第30章 | 见下面三节 |
原始明细 → 数据门禁 → 特征+双标签 → 时间外推切分 → 双头训练+校准 → 每日评分 → 发布
第5章 第7/6/24章 第8章 第12/25/16/26章 第17/26/29章 第30章
一站一站走的时候,前面所有章节的红线都在生效:特征只用评分日左边(第8章)、条件头只在回访子集训练(第25章)、评分表带契约列(第29章)。流水线不是"重新发明一遍",是把已经讲过的步骤按固定顺序排好。
顺带把条件头的三个数字口径对齐一下,免得跨章对不上:第25章的 0.864 是未校准 的原始输出;第27章的 0.896 是 sigmoid 校准后的条件头本身 ;这里的 0.904 是乘积口径 ------拿 P(回访) × P(持续|回访) 在回访子集上评,回访头的信号也参与进来了,所以略高。三个数都是真实输出,口径依次不同而已。
A 模型指纹:版本可追溯
模型版本不是"换个号",而是参数 + 样本口径的签名。脚本里对两者做哈希:
版本 v2.3.0 | 参数 100棵/深3/lr0.1/种子20260827 | 样本口径 uid=58&asof=0708+0715&feats=10
指纹 04506a0515
指纹的意义:参数或样本口径任何一个变了,指纹就变。哪天线上分数不对劲,翻出结果表里的版本号,查指纹就知道这个模型是用什么参数、哪批样本训出来的------是不是有人悄悄改过特征列表、是不是训练集多了一天的数据,指纹一对比就现形。
B 上线门禁:五类元数据,缺一不放行
上线之前过一道检查,五类元数据齐了才允许发布:
| 类别 | 检查什么 | 对应章节 |
|---|---|---|
| 数据 | 明细表在不在、日期范围对不对 | 第5章 |
| 特征 | FEATS 10 维列表已冻结、带版本号 | 第7、15章 |
| 模型 | 双头参数 + 指纹已存档 | 第12、25章 |
| 聚类 | 行为分群带版本号(cluster_semantic_version) | 第11章 |
| 评分 | 当前版本的结果表已产出、契约列齐全 | 第29章 |
示例数据上 5/5 通过。门禁的价值在于把"忘了存"变成"不放行"------真实项目里最常见的翻车就是"模型跑完了,可没人记得它用什么参数、哪个特征版本",出问题无从查起。五类元数据是查案的起点。
C 转正验收:新模型凭什么替换旧模型
新模型(v2)要替换旧模型(v1),不是拍脑袋。第21章的同窗配对 bootstrap 在这里上岗:同一批测试样本反复抽样,看两个模型的 ΔPR-AUC 落在什么范围。
示例数据上,v2(当前全特征双目标)vs v1(上一版,去趋势特征):
- v2 回访 PR-AUC 0.805 ,v1 0.852(点估计上 v1 还略高);
- 500 次同窗配对 bootstrap:Δ 的 95% CI −0.109, +0.036,P(Δ>0) = 0.168;
- CI 跨 0 → 回访分上两个模型分不出高下。
那 v2 凭什么转正?这里要摆正验收逻辑:双目标升级的验收,不是"新模型全面更强",而是"主目标不显著劣化 + 新能力有增量"。
- 主目标(回访):CI 跨 0,不显著劣化------虽然点估计略低,但这是第21章那种"小样本上趋势特征分不出"的同一类噪声(第21章消融实验早演示过:去趋势的 AUC 还略高);
- 辅助目标(持续):v1 根本没有持续分,这是 v2 的增量能力(第23-27章一整篇都在讲它)。
所以结论是"转正通过",依据不是回访分更强,而是"主目标没做坏 + 新增了持续分"。真实项目的转正验收单上,这两行都要写清楚:主目标不劣化的证据(CI)+ 新能力的证明。
通用参数模板
真实项目换数据,参数不用重造,按这张表填:
| 参数 | 示例值 | 备注 |
|---|---|---|
| 评分日窗口 | 未来 7 天 | 标签成熟要 7 天,窗口定了回填节奏就定了 |
| 训练评分日 | 最近 2 个 | 时间外推的"训练截止日" |
| 特征列表 | 10 维(FEATS) | 冻结 + 带版本号,改动走版本升级 |
| 双标签 | returned / sustained(≥3天) | 阈值是可调旋钮(第24章) |
| 模型 | GBDT 100棵/深3/lr0.1 | 小表格数据起步参数(第12章) |
| 校准 | sigmoid ×2 | 回访头全量、条件头子集(第26章) |
| 风险规则 | 单日≥12次爆发日 | 启发式规则,宁可漏不可误杀(第28章) |
| 重训 | 每周起步 | 稳定后放双周/月度(第29章) |
这些数字全是示例数据的产物,真实项目每个都要按自己的数据重跑一遍定------模板给的是"要定哪些参数",不是"参数就该是这个值"。
从示例数据到真实项目
整本手册都在教"怎么对着一份 58 人的合成明细把活干完"。真实项目数据量大几个数量级,但每一步的位置不变:
- 1643 条明细 → 真实是几亿条,数据门禁和增量底座更重要了(第29章);
- 10 维特征 → 真实是几百维,特征工程的思路(第7章)和准入体检(第13章)按同样的顺序走;
- 105 行训练 → 真实是百万级,模型可以换更大的(第15章的选型思路),但流程骨架一模一样。
示例数据的意义,就是让每个环节都小到能亲手算一遍------真到大数据上,你只是在跑同一套流程的放大版。
它和前后章节的关系
收官章,把第1章到第29章装进同一条流水线。回到第2章那句话:"两个模型,装进同一条流水线里看"------到这里,流水线真的完整了:行为分群(第9-11章)喂特征,活跃度模型(第12-27章)出分数,上线篇(第28-30章)管它天天跑、出问题能查。
动手
- 跑
附件/08_上线篇/activity_cheatsheet.py,一站一站对着正文看:数据门禁 1643 条、105/57 切分、回访头 0.805、07-23 契约表、指纹、门禁 5/5、转正 CI。 - 把脚本里
GB_PARAMS的max_depth从 3 改成 4 重跑,看指纹变不变(应该变)------参数一动,版本签名就变,这就是"指纹可追溯"的实感。 - 在 C 部分把 v1 从"去 f_trend"换成"去 f_recency"重跑,看 Δ 和 CI 怎么变------换一个特征,转正结论可能就不同,这就是为什么验收不能只看点估计。
- 把通用参数模板抄到自己的项目笔记里,对照第 29 章的重训节奏,给"每周重训"写一行触发条件(比如 PSI > 0.25 提前重训)。
本章配套脚本
附件/08_上线篇/activity_cheatsheet.py(从明细到 07-23 评分表的一站式流水线 + 模型指纹 + 五类元数据门禁 + v1/v2 同窗配对 bootstrap 转正验收)。用 scikit-learn 与标准库,依赖在第4章附件/00_公共/requirements.txt。所有数字与前面章节同口径:回访头 0.805 与第16/19/26章一致,测试集 42 回访与全手册一致。