2 min read

欺诈检测的流程优化与归因分析

欺诈检测的流程优化与归因分析

表格数据里的欺诈识别,主流做法还是梯度提升树,也就是把很多棵决策树串起来打分。模型在历史交易上训练一轮就上线,此后不再动。新冒出来的手法、换过一遍的人群,都指望它自己泛化。判别力往下掉的时候,系统里没有报警信号。

重训是常规办法,可风控的样本不是想训就能训的。一笔单要先过规则引擎,再过初审模型,被拦下的那些不留记录,进训练集的只有放行的流量;模型上线后面对的,是全量人群。论文把这一条摆在最前面。

他们没有改模型,改的是分数出来以后、与报警线比较之前的那一段,在那里加了一层可以撤掉的加法。把它撤掉,分数回到原样。

链路上就卡在"打完分、还没判"这一段。这一段平时没有能改动的地方,分一出来,能动的只有报警线,而线一挪,动的是全部告警量。

一、整条流程

环节 手上有什么 做什么 拿到什么
1 取材 冻结的模型、近一个月有标签的单 拉一个不参与评估的时间窗 适配窗口
2 定位 窗口里的欺诈单 每个字段算平均归因值,按中位数切一刀 待补字段名单、分桶表
3 生成 名单、分桶表、树结构摘要 三个模型各写 10 遍,一遍 50 条 最多 1,500 条判断
4 筛选 1,500 条判断 换阈值、试跑、去重、按分数段试站 三个模型各留 19、14、17 遍
5 校准 通过筛选的判断 每个分数段各估一版倍数 判断与倍数
6 叠加 判断、倍数、原分数 按对数逐项相加,再取平均 叠加后的分数
7 映射 叠加后的分数 查换算表 0 到 1000 的刻度
8 上线 百分位表、判断与倍数、换算表 逐单比条件 过线告警

上线之后线上一律不跑语言模型,只做条件比较和查表。撤掉第 8 环那张表,分数回到原样。

二、归因值只切了一刀

归因值是把模型打分拆到各个字段头上的数,这里用的是常见那种拆法。对窗口里的欺诈单逐字段求平均,按中位数切一刀:上半边是模型一直盯着的字段,下半边是它不太看的。

下半边每个字段再配一张分桶表,按百分位或者类别切开,每桶写着多少单、里面多少是欺诈、这个欺诈率是整批的几倍。

语言模型拿到手就三样东西:一段任务说明,讲清字段怎么编码;一份树结构摘要,里面是各字段被用了几次、贡献多少、高分路径上常一起出现的字段组合;再有就是那张名单和分桶表。模型本体它看不到,逐单的归因值也没给它。

题目末尾压了几条不许违的规矩。每条判断的头一个条件必须从待补那批字段里挑,模型重点依靠的字段只准摆在后头当补充;阈值一律写成百分位;条件之间只许用"并且"连接;每次写 50 条。

三、模型写出来的是 if 判断

电商那组数据上,推理型那个模型写过这么一条:同一收货地址 14 天内支付失败次数超过第 90 百分位,并且买家分群超过第 80 百分位。它给的理由是同址反复支付失败,多半在试卡授权。这条在窗口里命中 6,249 单,其中欺诈的比例是整批的 71.6 倍。

公开的银行账户欺诈基准上换用另一个模型,把会话时长超过第 90 百分位、使用免费邮箱、名下无房这三个条件摞在一起,命中 862 单,倍数 6.7。

每条判断都带一个名字、一段为什么骗的人会这样的说明、一句对应的数据依据,外加用到了哪些字段。这些都在本地一台工作站上跑完,内存 128 GB,没调外部接口,交易数据没出过机器。

四、一笔单怎么过线

模型给某个分数,下面按不同的倍数看结果。前两列是模型原本给的,后三列是叠加之后的结果。

原分数 原概率 原赔率 命中倍数 叠加后赔率 叠加后概率 是否过 988 线
994 30% 0.43 3.33 1.43 58.8% 不过,仍漏
994 30% 0.43 25 10.75 91.5% 过,报警

表里只用了两个换算式:赔率等于概率除以"一减概率",概率等于赔率除以"赔率加一"。倍数只乘在赔率上,所以抬不动的那些判断,加了也等于没加。

五、结果

数据 同样精度下的召回 同样召回下的精度
电商那组数据 +2.26 个百分点 +1.60 个百分点
银行账户欺诈基准 −0.13 到 +0.27 +0.02 到 +0.30

电商那组数据的六个报警档,头尾两档:

报警档 精度(原→后) 召回(原→后)
998 56.48% → 57.51% 23.47% → 24.37%
993 30.32% → 30.91% 62.86% → 64.00%

银行基准的七个切分里,同样召回下的精度全为正,同样精度下的召回有两组为负。论文写的是不造成损害。

拆掉部件之后,电商那组数据的召回变化:

改动 召回变化
只按条件触发率打分 −24.76%
整层叠加都去掉 −35.73%
整批估一个倍数 −2.41%
完整流程 +2.26%

六、重训为什么退

做法 召回变化 精度变化
加 100 轮训练 −46.39% −34.80%
只加一轮、学习率 0.03 −7.69% −2.85%
历史数据加适配数据全量重训 −46.39% −41.73%
本方法 +2.26% +1.60%

作者写的补救办法是给样本加权或者校正筛选倾向,没做。理由是筛选机制本身是另一个模型,它的分数拿不到。

这套流程跑完会剩下一张字段名单,上面都是模型没用上、数据上却有区分度的字段。它可以拿去补特征,也可以喂给下一版重训。

七、按周期整批换掉

时间 做什么
第 1 步 拉近一个月有标签的单
第 2 步 定待补字段,写判断,筛出可用的
第 3 步 各分数段估倍数,冻结成表
第 4 步 上线,只做条件比较
下个周期 整批重做,旧表整体换掉

它不在线上逐笔抓漏。单笔漏过凑不出统计,一条判断得在窗口里命中好几单、欺诈比例明显高于整批,才算得出倍数。

判断也不能往同一张表里一直加。一笔单同时命中五条,对数全加起来,分数没有上限;而这些判断又都拟合在同一段窗口上,越加越贴着那一个月,换个窗口就失效。

八、作者自己列的空缺

没有跟规则挖掘那类方法做对比,作者说这是主要空白。三个模型的组合大约要三倍的语言模型计算开销。全部结果是离线评估,没做线上对照实验。


参考文献

Qu, B., Wang, Z., Zahradnik, F., & Ouyang, M. (2026). Patching the blind spots: Reversible LLM rule overlay for frozen fraud detectors. arXiv Preprint arXiv:2611.08714. https://arxiv.org/abs/2611.08714