Skip to content

一条风控规则的完整一生——该不该写、怎么管、什么时候该删 ​

风险科技 2026年9月21日 · 预计阅读 15 分钟

本文由 AI 辅助创作,数学推导与方法框架由作者完成。

(本篇为技术原理型文章,不含任何真实业务数据实验。文中公式为自洽推导,用于说明原理,不构成授信政策建议。)

风控策略里有一类工作,做的人很多、总结的人很少:一条规则从被写下来的那一刻,到被删掉的那一天,中间要经历什么。

写规则是最容易的部分。一句话:近三个月征信查询次数 > 6 且 无抵押 → 拒绝。五个字能说完动机,十个字能写完表达式。

难的是它之后的三件事:

第一件,该不该写成规则。 同样一句"近三个月查询多的人风险高",它可以被写成一个模型特征,也可以被写成一条硬规则。这两个选择不是"哪个更准",它们是两个不同的问题。选错了,后面所有工作都在错误的层面打转。

第二件,怎么管。 规则一旦上线就不是文本了,它变成了一台会持续做出决策、持续影响真实资金的机器。这台机器需要身份证、需要时间轴、需要变更记录、需要被比较的能力。缺哪一样,三年后你都会在某个审计场合发现补不回来。

第三件,什么时候该删。 这是最反直觉的一环:加规则和删规则的风险是不对称的,而且数据系统天然偏向"多留规则"。 原因是数学的——被拒绝的人没有结果标签。你看不见他们,所以永远无法证明"拒错了"。这条偏差会把任何策略系统慢慢推向臃肿。

这三件事构成一个闭环。下面按顺序走一遍。

先把三块各自的核心问题摆在前面,后面每一块展开时都用同一组坐标:

环节要回答的问题主要证据来源最容易出错的点
定界这个决策该由规则做,还是由模型做约束条件本身(不是数据)把"约束问题"当成"预测问题"
治理这条规则现在是什么、过去是什么、改了影响谁决策日志与版本记录只在文本层面做变更管理
退役这条规则还有增量价值吗反事实推断(不是观测数据)用观测数据评估反事实问题

一个提前的结论:这三块里,只有治理能靠工程手段彻底解决;定界只能靠判断;退役受制于数据本身的结构性缺陷,只能逼近、无法证明。


01 定界:哪些决策注定写不成模型 ​

三环闭环

1.1 先分清两个不同的优化问题 ​

绝大多数关于"规则还是模型"的争论,起点就错了:它们被当成了同一种东西的两个精度档位。实际上这是两个问题。

模型的本质是估计。

f:X→[0,1],f(x)≈P(y=1∣x)

它的目标是让估计尽量接近真实条件概率,评价标准是某种损失函数(AUC、KS、对数损失、Brier 分数)。它的输入是数据,输出是一个连续量,它的有效性依赖于训练分布对当前分布的覆盖程度。

策略的本质是决策。

g:X→A,A={accept,reject,review,…}

它的目标是让动作满足一组外部给定的约束 C,约束可能来自监管、来自资本充足率、来自产品规则、来自风险偏好。它的有效性依赖于约束是否正确表达,与数据分布无关。

g∗=arg⁡maxgE[profit(g)]s.t.g∈C

这两个问题的解不互相替代。 一个完美的模型 f∗ 不能替你回答"该不该拒绝"——因为"该不该"由损益函数和约束决定,而这两样都不在模型里。反过来,一个写得很好的策略也不需要一个准确的概率估计作为前提;它只需要一个能排序的分数,或者甚至不需要分数。

关键区别在这里:模型输出的是一个位在 [0,1] 里的连续信念;策略输出的是一个离散动作。连续量无法表达"绝对不允许"——这听起来像咬文嚼字,但它恰好是很多决策写不成模型的根本原因。

1.2 六个结构盲区 ​

下面六类决策,模型在结构上做不了。这里的"做不了"与效果好坏无关,它是问题的形态与模型能表达的东西不匹配。

① 一票否决与硬约束

模型的输出 f(x)∈[0,1] 是一个概率。概率永远严格大于 0——只要在训练数据里见过一个"这类人还了钱"的样本,这个群体的预测概率就不可能被压到 0。

于是"无论他其他条件多好,命中了欺诈名单就绝对不批"这句话,在模型的输出空间里没有对应的值。你只能取一个切点 τ 说"f(x)<τ 就拒",但那是一个可被其他特征补偿的阈值,不是一个不可逾越的约束。

数学上说:约束 g(x)=reject 的成立条件是外部给定的,它不来自 P(y=1∣x)。你可以把黑名单当作一个特征喂给模型,让它学会"黑名单命中的人坏账率高"——然后你会得到一个"通常拒绝"的策略,"永远拒绝"这种效果做不出来。这两者在尾部行为上完全不同,而尾部正是风控最关心的地方。

② 监管要求的是"理由",不是"解释"

这一点常被混淆,值得单独说清。

模型的可解释性工具(SHAP、LIME、部分依赖)给出的是事后归因:给定这个预测值,哪个特征贡献最大。它回答的问题是"模型为什么这么想"。

而监管与客户投诉场景需要的是事前理由:一条可以在拒绝通知里写出来、可以被申诉、可以被复核的命题——"本次拒绝的依据是近三个月征信查询次数超过六次"。

这两者的差别不是精度问题:

事后归因(解释)事前理由(依据)
方向由结果反推由规则正推
稳定性随模型版本变化与规则文本一致
可申诉难——"特征贡献度"不是可辩驳的命题可——"查询次数算错了"是可核验的
粒度全局或单样本的连续贡献值离散的、具名的条件

一个 SHAP 值 +0.12 无法作为拒绝理由递交;一条命中的规则编号可以。这不是技术水平高低,是输出形态决定的。

《个人信息保护法》第二十四条对自动化决策提出了透明度与结果公平公正的要求,并赋予个人要求说明的权利。要满足这一要求,系统里必须存在能够被陈述的决策依据——而这通常是规则层的产物。

③ 分布外行为

模型是内插器。它的可靠性边界大致等于训练数据的覆盖范围。当出现一个训练时没见过的新客群、新渠道、新地区,或者市场环境发生结构性变化时,模型的输出会平滑地外推到某个值——而这个值没有任何保证。

它会给出一个数,不会给出"我不知道"。

规则不受这个限制。年龄 < 18 → 拒绝 这条规则在任何分布下都成立,因为它的正确性不依赖数据。这类规则的集合构成了策略系统的底线层:无论模型多不确定,底线不动。

工程上这叫分布无关性(distribution-free):一条规则的成立与否不假设数据来自哪个分布生成过程。这个性质在模型上花钱也买不到。

④ 响应速度的物理下限

模型的生命周期包含数据积累、特征回溯、训练、验证、上线评审。这条链路的时间尺度以月计,因为其中每一步都依赖真实表现标签的积累——而标签本身需要时间成熟(一笔贷款要过几个账期才知道好坏)。

规则可以小时级上线。

这意味着当外部环境突变时——监管发布新规、突发性欺诈攻击、区域风险事件——只有规则能立即响应。这与"规则更灵活"的说法无关,它是两种技术各自的时延结构决定的分工:模型承担需要历史积累的判断,规则承担不能等历史的判断。

⑤ 组合约束与互斥逻辑

有一类决策压根不是预测问题,它属于约束满足问题(constraint satisfaction)。例如:

  • 同一客户不得同时命中两个互斥产品的准入条件
  • 一组规则覆盖的客户数需要落在某个区间(配额)
  • 若客户已被 A 类规则放行,则 B 类规则不应再改变其额度
  • 若干条件必须同时满足才成立(合取),单独任一条件不成立

这些命题的形态是逻辑关系,不是概率关系。模型输出一个分数,无法表达"这两个条件必须一起看"。你可以把这些约束编码成特征,但那样做只是把一个逻辑问题塞进统计框架,得到的仍是一个"平均意义上满足"的策略,而非"结构上满足"的策略。

⑥ 可证明性要求

在公平性与合规审计场景里,有时需要证明的东西与"结果大体公平"无关,它是"这套逻辑里没有出现某个变量"。

对规则系统,这个证明是结构性的:把规则集展开,检查每条规则的变量使用情况,结论是确定的。

对模型,你只能做统计检验(比如检测预测与受保护属性之间的相关性),而"未检测到显著相关"不等于"未使用"。这两者的证明强度不在一个层级上。

1.3 反过来:哪些决策注定写不成规则 ​

对称地说,也有规则做不了的:

决策特征更适合原因
需要综合几十上百个弱信号模型规则书写成本随条件数指数上升(组合爆炸)
信号与风险的关系是连续、非单调的模型规则天然是分段常值函数,表达连续关系需要极多分段
样本量足够、分布稳定、有成熟标签模型恰好是模型的主场
需要精细排序(定价、额度梯度)模型规则的输出是离散档位,粒度受限
相关性弱但联合有效模型单条规则无法表达"每一个都不强、合起来很强"

1.4 判据:一个问题该落在哪一层 ​

定界判据决策树

把上面的内容压缩成一组可操作的判据。按顺序问,第一个回答"是"的地方就是归属层:

  1. 这个约束是否来自系统外部(监管、合同、风险偏好),且不随数据变化? → 规则层。这是硬约束,模型学不会。
  2. 要求是否包含"必须给出可陈述的理由"或"必须证明未使用某变量"? → 规则层。
  3. 该决策是否需要在标签成熟前就生效? → 规则层。
  4. 它是否是逻辑组合/互斥/配额约束? → 规则层。
  5. 剩下的:需要综合大量弱信号、需要精细排序、分布稳定且标签充足 → 模型层。

第一环定界 判断依据:约束本身

① 问题形态
  <p>是"该做什么"还是"会发生什么"</p>
  <p>约束问题 → 规则</p>
  <p>估计问题 → 模型</p>
② 证据来源
  <p>来自外部规范与风险偏好</p>
  <p>不来自数据的统计规律</p>
  <p>因此不能用数据反驳</p>
③ 失效模式
  <p>把约束当成预测来做</p>
  <p>结果:尾部行为失控</p>
  <p>表面指标正常,极端情况失守</p>

一句话:这一环无法用数据回答——约束来自外部,你只能把它翻译对,不能把它算出来。


02 治理:一条规则的版本学 ​

定界决定了该写什么,治理决定了写下去之后怎么活。

先说一个常被低估的事实:规则一旦上线,它就不再是文本了。 它变成一台持续输出动作、持续影响资金的装置。对装置的管理要求与对文本的管理要求完全不同——文本需要的是保存,装置需要的是可追溯、可比较、可复现。

2.1 版本的对象是决策语义,不是文件 ​

最常见的做法是把规则文件放进版本控制,每次改动提交一次。这解决了一部分问题,但漏掉了核心:文件的历史不等于决策的历史。

原因在于两者之间存在一个映射,而这个映射不是单射:

  • 一次文本改动可能不改变任何决策(改了注释、调整了无关条件)
  • 一次微小的文本改动可能剧烈改变决策(一个不等号方向、一个边界值 > 改 >=)

第二类尤其危险。查询次数 > 6 改成 >= 6,文本上只多了一个字符,决策上可能多拒绝几万人。如果变更管理只盯着文本,这次改动的规模会被系统性低估。

所以版本管理的对象应当是:给定任意时刻,这套系统对任意样本会做出什么动作。 这才是需要被记录和比较的东西。

2.2 身份证:rule_id 为什么不能回收 ​

每条规则需要一个标识。这个标识的约束比想象中严格:

rule_id 在系统生命周期内唯一,且永不复用。

理由在于引用完整性。决策日志里记录的是 rule_id,规则全文不在日志里。如果一条规则被删除后,它的 id 被分配给了一条新规则,那么历史上所有引用这个 id 的决策记录,其归属都会静默地指向错误的规则。

这个错误的恶劣之处在于它不可检测:日志完整、格式正确、能查、能导出,只是查出来的"当时命中的规则"是另一条。审计场景下,这会直接摧毁证据链。

工程上的标准做法是用单调递增的序列或随机唯一标识作为 id,并在规则删除后标记为 retired 而非物理移除。id 是标识符,不是命名空间。

2.3 双时间轴:什么时候生效与什么时候被记录 ​

双时间轴

这一节讲一个数据结构概念,它在策略治理里的重要性远超它的一般知名度:双时间轴(bitemporal)。

一条规则的变更涉及两个独立的时间:

  • 有效时间(valid time):这条规则所描述的业务意图,在业务世界里覆盖哪一段时间
  • 记录时间(transaction time):这条规则的这条版本,是在哪个时刻被系统记录下来的

为什么必须分开?因为策略调整常常是追溯性的。

现实里很常见的一种情形:某个参数在业务上从月初就该生效,但配置直到月中才改过来。如果系统只有一个时间戳,就无法回答一个基本问题:"如果我在月初那次审计时查询,系统当时认为的规则是什么?"

两个时间轴的组合给出四种状态:

记录时间 ≤ t记录时间 > t
有效时间 ≤ t当时已生效且已知事后补录的追溯生效
有效时间 > t已录入但未生效尚未存在

规范做法是:任何查询都带两个时间参数——as_of_valid 和 as_of_transaction。返回的是同时满足 valid_from ≤ as_of_valid 与 recorded_at ≤ as_of_transaction 的那个版本。

这在数据操作上就是一次 as-of join(时序连接),匹配条件用区间重叠,等值在这里不成立:

版本(tv,tr)={v:生效区间(v)∋tv}且记录时刻(v)≤tr

第一行要求版本 v 的生效区间覆盖你问的那个业务时点 tv;第二行要求它在 tr 之前已经被记录。两条都满足,才是当时真正的答案。

行业里把这类要求称为"时点可复现"(as-of reproducibility),是审计与合规的基本门槛之一。它不需要复杂技术,需要的是一开始就把两个时间字段都设计进去——这是典型的"事后补不回来"的设计决策。

2.4 diff 的语义:文件差异不等于决策差异 ​

有了版本,下一步是比较。这里的核心转换是:

比较的对象是规则作用在人群上产生的决策集,规则文本本身不参与比较。

给定两个版本 A、B 和一个人群样本集 S,真正的差异是两个集合的对称差:

Δ+={x∈S:A(x)=reject,B(x)=accept}Δ−={x∈S:A(x)=accept,B(x)=reject}
  • Δ+:新版本多放行的人(放宽的部分)
  • Δ−:新版本多拒绝的人(收紧的部分)

有了这两个集合,才能回答真正重要的问题:

  1. 规模:|Δ+|+|Δ−| 占总体的比例是多少?
  2. 方向:这次改动净效果是放宽还是收紧?
  3. 人群结构:差异集中在哪些特征维度上?这一条最关键——如果差异集中在某个地区、某个客群、某个年龄段,那可能不是策略问题,是合规问题。
  4. 质量:Δ+ 和 Δ− 这两个人群的既有表现如何?(有标签的部分)

第 3 点是很多变更评审漏掉的。整体差异 2% 看起来温和,但如果这 2% 全部落在同一个特征群体上,性质完全不同。均匀的影响可用损益评估,集中的影响需要合规评估。

2.5 归因必须自包含 ​

前面说了 rule_id 不能复用。但仅有一个稳定的 id 还不够——归因信息必须在决策发生时写入,不能事后重建。

原因很直接:事后重建需要读取"当前的规则版本",而规则已经变了。用今天的规则去解释昨天的决策,得到的必然是错的。

正确做法是让每条决策记录自包含:

D=(xt,v,hits,order,action,τ)
  • xt:决策时用到的输入(事实快照)
  • v:规则集版本
  • hits:命中的规则(以及它们的当时内容或引用)
  • order:命中规则的优先级顺序
  • action:最终动作
  • τ:决策时刻

注意 xt 这一项:它必须是快照,不能是对可变数据源的引用。 如果决策记录里存的是"客户 ID + 决策时间",事后去查客户的当前征信数据,得到的可能是完全不同的值——因为数据已经更新了。审计要求的是复现当时看到的东西。

这个要求在存储上有成本(每条决策要存相对完整的输入),但把它当开销是算错了账,它是能力:没有它,系统只能回答"现在规则是什么",无法回答"当时为什么拒了这个人"。

第二环治理 判断依据:决策日志与版本记录

① 记录什么
  <p>决策语义,不是规则文本</p>
  <p>两个时间轴:有效时间 + 记录时间</p>
  <p>决策记录自包含输入快照</p>
② 靠什么保证
  <p>rule_id 永不复用</p>
  <p>双时间查询(as-of join)</p>
  <p>比较用决策集对称差,不用文本 diff</p>
③ 失效模式
  <p>只做文本层变更管理</p>
  <p>结果:小改动造成大影响而无人预警</p>
  <p>事后重建归因,得到错误结论</p>

一句话:这一环可以靠工程手段彻底解决——但前提是设计阶段就把时间与标识放进结构里。事后补的代价高一个量级。

2.6 回滚与重做,是两件事 ​

"可回滚"是版本管理最常被提到的能力,但它常被理解成一件事,实际是两件:

回滚(rollback):从时刻 t 起,系统改用旧版本 v−1 的逻辑。

系统(t′>t)→v−1

重做(replay):对时刻 t 之前的那些决策,用旧版本 v−1 重新评估一次。

系统(t′<t)→v−1

回滚是工程操作,重做是业务操作,而且重做在风控里通常是做不到的。

原因是不可逆性:决策已经执行了。钱放出去了,额度给了,合同签了。你无法"重新决策"一笔已经发生的业务,只能做补偿动作(降额、提前催收、标记观察、要求补充材料)。而补偿动作的效力远低于事前拒绝。

这个不可逆性推出一条重要的工程原则:

不要指望靠回滚来纠正策略错误。回滚能止损,不能消除损失。

既然事后纠正能力有限,风险就必须在事前控制。这就是灰度与影子运行的统计学意义——下面单开一节。

2.7 被忽略的变更面:规则顺序也是策略 ​

这一节讲一个几乎总是被漏掉的治理对象。

多条规则同时命中一个样本时,系统需要一套冲突解决规则。这个机制在决策模型规范里有正式定义——命中策略(hit policy),包括以下类型:

命中策略语义输出数量
U Unique规则不允许重叠,只能有一条命中(规范默认值)单条
A Any可多条命中,但所有命中的输出必须相同,取任一单条
P Priority可多条命中,取输出优先级最高的那条单条
F First按规则在表中的顺序自上而下,取第一条命中单条
C Collect收集全部命中,输出为一个任意序列表多条
R Rule order收集全部命中,按规则在表中的顺序输出多条
O Output order收集全部命中,按输出优先级降序输出多条

(七种命中策略的定义出自决策模型与标记法的标准族;上表语义按标准文档与实现文档的表述整理。需要注意:不同实现平台的支持范围不同,例如 Camunda 明确说明其尚未支持 P 与 O,需要用 C 加自定义聚合来模拟。选用策略前应先核对具体引擎的支持矩阵。)

工程实践中最常见的是 F(first hit),因为它直观、执行快、单条命中即可短路。但它带来一个隐蔽后果:

在 F 策略下,规则顺序本身就是策略,而顺序通常不在版本管理的范围内。

把两条规则换个位置,任何一条规则的内容都没变,规则集的文本 diff 是空的,但决策集可能变了。这构成了治理上的一个盲区:变更管理系统会报告"无变更",而系统行为已经改变。

修法不复杂,但需要意识到:

  1. 规则顺序必须作为受版本管理的属性;它在配置文件里只是排版
  2. 顺序变更要触发与内容变更相同的评审流程
  3. 顺序变更要产生决策集 diff(因为它的影响和内容变更是同一量级的)

换个说法:只要系统允许"顺序影响结果",顺序就是策略的一部分,就必须按策略来管。

2.8 灰度对比的统计下限 ​

前面说了重做做不到,所以风险要在事前控制。事前控制的标准手段是灰度(champion-challenger):把一个切片分给新版本,观测足够样本再决定是否全量。

这里有一个常被忽略的定量约束:样本量决定了你能检测多大的差异,而这往往比想象的大得多。

比较两组比例(如通过率)所需的最小样本量(每组):

n=2(z1−α/2+z1−β)2σ2δ2

其中 σ2=p(1−p)(比例的方差),δ 是希望检测出的差异,α 是第一类错误率,β 是第二类错误率。

代入一组典型取值:p=0.6(通过率六成,此时 σ2=0.6×0.4=0.24 接近最大值)、α=0.05(z=1.96)、β=0.2(检验功效 80%,z=0.8416)、δ=0.005(半个百分点):

n=2×(1.96+0.8416)2×0.240.0052≈1.51×105

每组约十五万样本。

这个数字的实践含义是:如果一个渠道一天只有几千笔申请,想检测半个百分点的通过率差异,需要几十天。而"上线一周看看数据"这种节奏,在这个精度要求下根本不成立——不是数据不好看,是样本量不足以支持任何结论。

反过来说,如果只关心较大的差异(比如 2 个百分点),所需样本量按 δ2 反比下降,约为一万量级——这个在多数场景下是几天能攒出来的。

按同一组取值(p=0.6、α=0.05、功效 80%)算出不同精度要求下的样本量:

想检测的差异 δ每组所需样本量一天 3000 笔申请时所需天数
0.5 个百分点≈ 150,700≈ 100 天
1 个百分点≈ 37,700≈ 25 天
2 个百分点≈ 9,400≈ 6 天

(天数按两组各半分流、每天 3000 笔估算,即每天每组 1500 笔。)

这张表的用法是反向的:先看你手上有多少流量、愿意等多少天,就能算出你能发现的最小差异是多少。反过来先定一个"想发现 0.5 个百分点",再去凑流量,通常会发现流量差得远。

首行的数字值得多看一眼:在一个日均三千笔的渠道上,想可靠地发现半个百分点的通过率差异,需要灰度一百天。 多数策略变更的评审周期根本容不下这个时间尺度——这意味着实际工作中,"灰度验证"能提供的保证,通常比参与评审的人以为的要弱得多。承认这一点,比走一遍形式上的灰度更诚实。

所以灰度的设计要从**「我想发现多大的问题」**倒推,先算样本量,再定灰度比例和观测时长。灰度比例不是拍出来的,是算出来的。

2.9 灰度分流的偏差问题 ​

还有一个技术细节:分流的分配方式会影响结论的有效性。

  • 随机分流:样本随机分配,两组可比,可以直接比较
  • 按时间分流(如上午跑新版本、下午跑旧版本):混淆了时间效应,不合格
  • 按渠道/地区分流:两组客群结构不同,测得的是"客群差异 + 策略差异"的混合

如果能做到随机,直接用双样本比例检验。如果不能(业务上给不了随机),就必须做分层比较或匹配:按关键维度(渠道、额度段、客群等级)分层,在层内比较再汇总,用加权平均抵消结构差异。

δ^分层=∑kwkδ^k,wk=NkN

其中 k 是层,wk 是层的权重。这一做法对应的标准工具是分层抽样与倾向得分匹配。

不做这一步的灰度对比,得到的数字不能作为决策依据——它测的是两组人群的差异,不是两个策略的差异。


03 退役:一条规则的死后验尸 ​

治理讲完,剩最后一环,也是最难的一环。

一条规则上线后,怎么判断它该退休?

3.1 换点分析:把一条规则的价值拆开 ​

先明确问题:一条规则的价值是什么?

直觉答案是"它拦截了多少坏人"。这个答案是错的,而且错得很关键——它没有区分规则拦下的部分里,有多少是模型本来就会拒的。

设模型分数为 s(x),模型在切点 τ 下的拒绝集为:

Mτ={x:s(x)≤τ}

规则 R 的拒绝集为 R={x:R(x)=reject}。

两个集合的关系可以拆成三块:

R=(R∩Mτ)⏟冗余∪(R∖Mτ)⏟增量Mτ=(Mτ∩R)⏟冗余∪(Mτ∖R)⏟模型专有

只有"增量部分" R∖Mτ 是规则的净贡献——这些人是模型会放行、而规则拒掉的。

如果这个集合很小,说明模型已经学到了这条规则所表达的规律,规则是冗余的。这就是第一条退役判据的数学来源:

增量率=|R∖Mτ||R|

增量率接近 0,规则可以退;增量率高,规则保留了模型没有的信息。

3.2 增量价值的检验口径 ​

仅有增量还不够,还要看增量部分的质量。这里可以用一个条件独立性检验来表述:

规则 R 在给定模型分数 s(x) 之后,是否还提供关于 y 的额外信息?

H0:P(y=1∣R,s)=P(y=1∣s)H1:两者存在显著差异

如果不能拒绝 H0,说明在控制了模型分数之后,规则命不命中与结果好坏无关——规则不提供增量信息。

实操上不容易直接做这个检验(因为需要条件概率函数),但可以用分层近似:按分数分段,在每一段内比较"规则命中"与"规则未命中"两组的表现差异,再用分层加权汇总。这与 2.9 节的分层比较是同一套技术。

3.3 四个退役判据 ​

退役判据

把上面内容整理成判据表。四条要一起看,任何单独一条都不足以决定删除:

判据问的问题数据来源门槛方向
增量归因它拒的人里,有多少模型也会拒?决策日志 + 模型分数增量率低 → 倾向退役
稳定性命中率的时间序列是否漂移?命中率时序漂移大 → 需重估而非直接删
合规性它依赖的依据是否还有效?外部规范依据失效 → 必须退役(非数据判断)
成本收益维护成本 vs 净损益贡献工程计量 + 损益测算成本 > 收益 → 权衡退役

四个判据的性质不同,这一点值得强调:

  • 增量归因是数据判据,可以量化
  • 稳定性是监测判据,用来区分"规则失效"和"规则需要的输入变了"
  • 合规性不是数据判据——它由外部规范决定,数据算不出来
  • 成本收益是工程判据

第 2 条要展开说一点:命中率的漂移有两种方向,含义完全不同。

  • 命中率上升:可能因为规则依赖的变量分布整体右移(比如经济下行期查询次数普遍增加)。这时规则的有效性可能没变,但它开始影响过多人群——规模问题。
  • 命中率下降:规则依赖的变量在新客群中不再常见。这时它可能已经失去作用——效力问题。

用统计过程控制的方法(如 CUSUM、KS 检验)可以把"正常波动"与"结构性漂移"区分开。没有这一步,就只能靠人眼盯报表,而人眼在几十条规则上不可靠。

第三环退役 判断依据:反事实推断

① 判据
  <p>增量率(控制模型分数后的净贡献)</p>
  <p>命中率时序漂移</p>
  <p>合规依据是否仍有效</p>
  <p>维护成本与损益贡献</p>
② 数据来源
  <p>决策日志 + 分数分布</p>
  <p>需要的是反事实标签</p>
  <p>而反事实标签天然缺失</p>
③ 失效模式
  <p>规则只增不减,系统臃肿</p>
  <p>结果:维护成本上升、可解释性下降</p>
  <p>且没有任何指标会报警</p>

一句话:这一环最弱——不是方法不够好,是被拒人群没有结果标签,观测数据在结构上回答不了反事实问题。

3.4 为什么删规则比加规则难:损失函数的不对称 ​

上面都是方法层面。但真正让规则只增不减的原因在组织层面,而它的根源是数学的。

加规则的代价是不可观测的,删规则的代价是可观测的。

具体说:

  • 加一条规则 → 多拒了一批人。这些人后续表现如何?不知道——他们没被放款,没有结果。所以"这条规则误拒了多少好人"这个数,在数据里不存在。
  • 删一条规则 → 多放了一批人。这些人后续表现如何?会知道——他们会出现在放款数据和表现数据里。如果他们是坏人,坏账率上升是可见的。

于是任何一次变更评审面对的都是这样一个不对称:

收益代价
加规则拦截的坏账(可见,但需推断)误拒的好人利润(不可见)
删规则释放的误拒利润(不可见)新增的坏账(可见)

两边的收益和代价各有一半落在不可见的一侧。 而人(和指标体系)天然对可见的量更敏感。

这不是判断力问题,是信息结构问题。它导致一个稳定但错误的均衡:加规则总是"稳妥"的,删规则总是"冒险"的。

长期后果是策略系统单调膨胀。第 3.5 节给出这个偏差的数学表述,第 3.6 节给出三种可能的部分修正。

3.5 反事实缺失:被拒的人没有标签 ​

把上面的现象写成数学。

设样本 x 被策略拒绝,则其真实结果 y 不可观测。我们能观测到的只有被接受人群的结果:

可观测样本={(x,y):策略(x)=accept}

而被拒绝人群的 y 整体缺失——这被称为反事实缺失(counterfactual missingness),在信用风险领域也常被称作拒绝推断问题。

后果是一个选择性偏差。假设想估计"某条规则拒绝人群的坏账率" P(y=1∣reject)。任何基于观测数据的估计都只能使用代理,而代理的偏差依赖于两个分布:

偏差∝|P(y=1∣reject)−P(y=1∣accept)|
  • 如果被拒人群的风险确实显著更高,比值很大,用接受人群的表现去代理会低估规则价值(把规则的作用算小了)
  • 如果两者接近,代理误差小,但那时规则本身的价值也小
  • 极端一点:若规则拒掉的人里有相当比例其实会还钱,那么规则的价值被系统性高估——因为这部分误拒永远不出现在坏账统计里

关键在于:偏差的方向和大小都依赖那个观测不到的量。 这是问题的结构性缺陷,不是估计技巧能消除的。

3.6 三个补标签的办法,各自的代价 ​

既然直接观测不可得,实践中发展出三类方法。它们的共同特征都是用某种代价换取部分反事实信息。

① 拒绝推断(reject inference)

思路:用被接受人群训练一个模型,再用这个模型对拒绝人群做推断,把推断结果当作伪标签纳入评估。

代价与局限:这是一个自洽性假设——它假设"被接受人群学到的规律在拒绝人群上也成立"。如果两者分布不同(这正是拒绝的原因),假设本身就成问题。方法有效性与分布差异成反比,而分布差异无法被验证。

② 相似样本迁移(swap / nearest-neighbor 类比)

思路:对每个被拒样本,在被接受人群里找特征相似的样本,用他们的表现作代理。

代价与局限:相似性的定义是主观的(用哪些维度、什么距离度量),而且高维空间里"相似"本身不可靠(维度灾难)。结果对相似度定义敏感,稳定性有限。

③ 主动探索(随机放行一小部分)

思路:按某个小比例 ε,随机放行一部分本会被拒的申请,直接获得他们的真实结果。

这是唯一能直接获得反事实标签的方法,本质上是**探索-利用权衡(exploration-exploitation)**在风控中的应用:牺牲少量确定收益,换取对策略的有效性做出无偏估计的能力。

代价是真实的:放行的那部分人里确实会有坏账,这是确定的损失。所以 ε 要小到可承受,又要大到能积累统计效力——这两个要求相互冲突,需要定量设计:

ε≳n所需N期间总申请量

也就是用 2.8 节的样本量公式先算出需要多少标签,再倒推探索比例。探索不是随便放一点,它是一次有样本量要求的实验。

三者的取舍可以概括为:

方法是否获得真实反事实主要代价可信度
拒绝推断否(推断值)依赖分布假设中,且假设不可验证
相似样本迁移否(代理值)对相似度定义敏感中低
主动探索是确定的坏账损失高(但样本量受限)

没有一个方法是免费的。 这也是为什么"策略退役"在实践中的状态通常是:有方法,但很少严格执行——执行的成本是真实可见的,而不执行的代价是缓慢累积的。


04 收束:这条闭环里,哪一环最弱 ​

把三块放在一起看,能得到一个比单看任何一块都更清楚的判断。

定界决定的是系统能不能做对的事。它靠判断,不靠数据——因为约束来自外部。这一环出错的后果是系统的行为在结构上偏离业务意图,而所有表面指标可能都正常。

治理决定的是系统能不能被信任。它靠工程,且可以在设计阶段一次性做对:双时间轴、不复用的 id、自包含的决策记录、决策集 diff、顺序纳入版本管理。这一环是三者中唯一可以彻底解决的。

退役决定的是系统能不能长期保持可用。它受制于数据本身的结构缺陷——被拒人群没有标签。这一环只能逼近,无法证明。

三者的解决程度不同,这个不同本身就是结论:

定界⏟靠判断>治理⏟靠工程,可彻底解决>退役⏟受数据限制,只能逼近

(这里的">"指"可被确定性解决的程度",不是重要性排序。)

一个统一的视角:这是三个不同的时间尺度 ​

换个角度看,三环对应的其实是三种时间尺度上的问题:

环节时间尺度核心困难
定界一次性(设计时)约束来自外部,需要把它翻译准确
治理每次变更需要在结构里预留位置,事后补不回来
退役长期(季度/年度)反事实缺失,没有干净的判据

这三者中,唯一在"设计时为未来留下能力"的是治理。 另两环分别是"当下判断"和"长期观测"。

所以如果只能做一件事——把治理做对。因为它是三环里唯一一次投入、长期受益、且不依赖未来数据可得性的环节。

而治理里最容易被省掉的两项,恰好是影响最大的两项:

  1. 双时间轴——省掉它,事后永远无法回答"当时系统认为的规则是什么"
  2. 决策集 diff——省掉它,变更评审只能看文本差异,而文本差异与影响规模之间没有稳定关系

这两项的共同点是:做的时候看不出价值,需要的时候补不回来。

一条规则的完整一生 ​

回到开头那条规则:近三个月征信查询次数 > 6 且 无抵押 → 拒绝。

它的一生大致是这样:

第一天,它被写下来。在这一步要回答的是定界问题:这个约束为什么必须写成规则?如果答案是"因为业务上不允许",那它属于规则层;如果答案是"因为数据显示这类人风险高",那它应该先去模型层试试。

上线那天,它获得一个永不复用的 id,带上两个时间戳(生效与记录),进入版本管理。它的顺序位置也被记录下来,因为顺序会影响结果。

运营期间,每次改动都会产生一次决策集 diff,让评审看到"这次多拒了谁、多放了谁、这些人分布在哪些维度上"。

若干季度后,它需要被重新评估:控制模型分数后,它还有增量吗?命中率是否漂移?依据是否仍有效?维护成本与损益贡献是否匹配?

最后,如果四条判据都指向退役,它被标记为 retired——id 保留,不回收,因为历史上引用过它的那些决策记录,还需要它能被查到。

这条规则的真正结局是"被完整地记录了一生"——删掉只是其中一刻。


说明:本篇为技术原理型文章,不含任何真实业务数据实验。文中数学推导(增量率的集合分解、灰度样本量公式、反事实缺失的偏差表述)为自洽推导,用于说明原理,不构成授信政策建议。

说明:本文只讨论策略方法、工具形态与数学原理,不涉及任何机构的内部流程与未公开信息。

关注公众号:QIAN数据