ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

大模型赋能反欺诈:混合架构与落地实践复盘

大模型赋能反欺诈:混合架构与落地实践复盘 这两年我在某风控团队里做反欺诈模型最大的感受是规则引擎还没淘汰机器学习模型还在服役但大模型已经不讲武德地杀进来了。尤其是当欺诈手法从“群控脚本刷单”进化到“AI伪造证件、深度合成语音、话术诱导”之后传统风控模型越来越吃力。我所在的团队在过去的半年里做了一个内部代号叫“反欺诈鹰眼”的试点项目核心思路就是用大模型重新搭一条反欺诈研判链路实际效果确实是肉眼可见的突破。这篇东西不是学术论文就是我们项目落地时的真实复盘。我会把整体设计、数据准备、模型选型、微调实操、上线部署以及踩过的坑全部拆开讲。如果你正在做风控、反欺诈、用户异常行为识别这类工作或者你是算法工程师、数据产品经理甚至是对大模型落地感兴趣的业务方这篇复盘应该都能对得上你的需求。放心我不会堆概念能白嫖的代码和配置我都贴出来。1. 先理思路大模型反欺诈不是把系统推倒重来1.1 反欺诈问题的本质到底是什么做反欺诈这么多年我越来越觉得这个问题本质上是在和一群人对抗。黑产从业者不是静态的他们有一套完整的产业链养号、引流、分发、变现。你封一批号他换一套设备指纹再来你识别出了一种话术他立刻改个说法继续试探。传统反欺诈体系通常分三层。第一层是规则引擎比如“新注册账号当天高频下单”“同一设备关联超过五个账号”这类规则简单直接但隐蔽性差一点的黑产早就学会了规避。第二层是机器学习模型像GBDT、XGBoost这种在表格型特征上表现很好但它的天花板是“特征决定上限”。第三层才是近几年兴起的深度模型、图神经网络和大模型。问题出在哪儿呢黑产的话术、图片、视频、认知策略都是非结构化的。一条客服申诉工单里可能写着“我是代购帮朋友买了不少东西为什么封我号”和真正的黑产话术“我这是正常购买你们乱封号我要投诉”在字面上差别极小但语义意图完全不同。传统模型只看特征统计量根本捕捉不到这种语义差异。大模型擅长的恰恰是这个——理解上下文、理解意图、理解隐含的语义关联。所以我们的核心判断是反欺诈系统不应该推倒重来而应该把大模型嵌入到原有体系中去解决那些“语义研判”类的问题。1.2 大模型到底补了哪块短板传统反欺诈模型有三个公认的短板第一是冷启动。新上线的业务、新出现的欺诈模式几乎没有历史标签传统模型直接抓瞎。而大模型凭借通用知识预训练过的语义理解能力能对“从没见过的新型话术”做出一定判断这叫零样本或少样本学习能力。第二是长文本和跨模态。欺诈证据往往藏在哪里藏在申诉文本、客服对话、手机截图、合同扫描件、语音记录里。这不是一两列数值特征能表达的需要模型有处理多模态、长上下文的能力。第三是可解释性。传统机器学习模型尤其是树模型虽然能输出特征重要性但业务方追问“为什么这个账号是欺诈”时你只能说“因为设备号关联度高”。大模型能生成自然语言的研判理由这个输出直接就能给审核团队用。当然大模型不是万能的。它的推理延迟高、单次调用成本贵、偶尔还会出现幻觉。如果把全量交易请求都丢给大模型线上系统会直接被打爆。所以方案的选型原则是各干各擅长的活大模型只处理它值得处理的那部分流量。1.3 混合架构规则引擎、传统模型和大模型的三级协同我们最终落地的是“三级漏斗式”的混合架构这条链路现在已经稳定运行了几个月。第一级是规则引擎和名单库负责拦截那些“特征已经明确”的已知风险比如命中黑名单、设备指纹关联多个异常账号、短时间频繁操作。这一级的拦截率大概占了整条链路的70%左右速度快、成本低。第二级是传统机器学习模型处理那些规则没有覆盖到、但特征维度上能看出异常的场景比如交易行为偏离用户历史行为习惯。这里我保留了一个基于梯度提升树和神经网络的双通道模型线上大概能再拦掉一部分风险。第三级才是大模型研判只处理前两级放行的高价值案件以及需要语义理解的场景。比如高风险申诉工单、疑似团伙欺诈的群聊对话、OCR识别出的合同时刻、客服和用户之间的多轮沟通记录。大模型会输出一个风险评分、风险类型和研判理由。这套架构的好处在于既保证了大流量的低延迟高吞吐又把大模型的智力和语义理解用在了刀刃上。一句话总结就是——让大模型做“分析师”别让它当“门卫”。2. 数据与特征工程决定上限的脏活累活2.1 反欺诈标签的构造思路大模型落地反欺诈第一个绕不开的问题是数据。风控领域最大的痛点是黑样本极少正负样本极端不平衡。你说欺诈率是万分之几那都是乐观的。我们的方案是把传统有监督学习和大模型的训练目标分开来看。传统模型那边我用的是历史上有明确结论的样本经过人工审核坐实欺诈的账号加上明确无风险的正常账号做一个二分类。大模型那边我换了一种思路。不直接训练“欺诈/正常”的二分类器而是用一个“语义研判任务”来训练。什么意思呢我把样本组织成“案件描述提问”的形式让模型输出针对性的研判结论。比如输入一段申诉工单问题上写着“该用户是否存在恶意申诉或身份伪造的可能请结合上下文输出风险等级和判断理由”。这样模型输出的不是简单标签而是结构化的风险评估文本。另外负样本不能只看没被标记为欺诈的样本因为很多未被识别的欺诈就藏在里面。我加了一个半监督的步骤先用规则和传统模型跑一遍大盘数据把高概率异常但没有实锤的样本标为“疑似风险”作为大模型训练用的候选负样本再通过人工抽样复核来校正。这一步虽然费时但能明显缓解冷启动问题。2.2 文本类特征申诉工单、客服对话、备注文本文本数据是这次项目里增量收益最大的部分。我大概梳理了一下反欺诈场景里天然存在几类高价值文本用户申诉工单与客服对话记录。这是最直接的用户自述里面有大量关于“我是谁”“我做了什么”“我为什么被限制”的描述。交易备注和留言。电商场景里经常有“帮忙代付”“刷信誉”“线下返款”这类包含异常暗示的文本。商品或店铺描述。团伙欺诈常会在商品标题里嵌入暗语比如“资源号”“一拖三”这类黑话。合同、协议、证明材料的OCR识别文本主要在信贷和供应链金融场景。这些文本有些是短文本有些是长文本。我的建议是不要只做截断长文本要分段后再聚合或者用支持长上下文的模型来处理。我们最后踩了好几个坑才明白直接把两千字的申诉工单全部塞给模型做截断分分钟就把关键信息截没了。2.3 行为序列与多模态特征只有文本还不够。黑产行为往往体现在序列上账号在一天内注册、绑卡、下单、申请退款整个过程时间轴高度压缩或者一个设备在凌晨三点突然开始大量操作。我在数据侧的特征工程分成了四类设备指纹类设备ID、IP归属地、系统版本、屏幕分辨率、传感器信息。行为统计类频率、间隔、时段偏好、操作路径的复杂度。关联关系类与高风险账号的共同设备、共同IP、共同收货地址、共同手机号。内容理解类文本向量、图像相似度、语音情绪特征。其中内容理解类特征就是给大模型用的。对于OCR文本和语音转写文本我直接用文本编码器做向量化对于行为轨迹我把它序列化成类似“事件流的文字描述”再扔给大模型做行为序列的语义理解。举个例子一条事件流可以表示成[账号A] 2024-11-20 14:03:21 首次登录设备D [账号A] 2024-11-20 14:05:44 修改绑定手机号 [账号A] 2024-11-20 14:06:12 添加新银行卡 [账号A] 2024-11-20 14:07:38 发起首笔大额转账这种事件序列转成自然语言之后大模型能比传统特征工程更敏锐地捕捉到“时间高度压缩”和“多个异常动作连续发生”的语义模式。这一步是我从日志分析中得到的灵感效果出奇的好。2.4 数据清洗与隐私合规的几个注意点反欺诈数据涉及大量用户隐私这个红线碰不得。我这边做数据清洗时定了几个硬规矩手机号、身份证号、银行卡号等敏感字段在建模前做脱敏和匿名化用哈希映射替代。文本数据要过一遍隐私识别把可能包含地址、姓名、联系方式的内容打码后再送入模型训练。模型产出的研判理由不能包含原始敏感信息只允许输出风险标签和抽象化描述。合规不是技术问题是生存问题。模型效果再好一旦在数据处理环节出了差错整个项目都会被叫停。3. 模型选型与落地实操从通用大模型到风控研判模型3.1 基座模型怎么选通用模型还是领域模型做这一步时我们先盘点了市面上可用的基座模型。当时的想法是与其从零训练一个风控大模型不如基于开源的通用中文大模型做领域微调成本可控、落地周期短。选基座时重点看几个维度中文语义理解能力尤其是对口语化、不规范文本错别字、火星文、谐音字的容忍度。上下文窗口长度至少要能容纳完整的申诉工单和对话序列。支持的能力范围包括文本分类、实体抽取、文本生成、文本向量化。开源社区活跃度遇到问题能不能快速找到解决方案。我们初期对比了两类基座一类是参数量相对较小的通用模型速度快、部署成本低但复杂语义理解稍微弱一点另一类是规模更大的通用模型效果更好但对显存和推理延迟压力很大。最终在两个场景上用了不同的策略线上高并发推理场景用中小尺寸模型离线复杂研判场景用大尺寸模型。这里明确一下不完全是为了省成本而是反欺诈链路里确实存在两种不同节奏的任务。高并发的场景更看重响应时间复杂研判的场景更看重推理效果分而治之才是合理的。3.2 继续预训练让模型真正懂反欺诈黑话微调之前我建议你做一步继续预训练。这一步不是必选项但做了之后模型对业务领域词汇的敏感度会提升很多。什么叫领域黑话比如在电商风控里“跑单”可能不是外卖跑腿而是指订单异常流失“白号”是指没有任何交易记录的新账号“养号”是指黑产通过模拟正常行为来提升账号权重。通用模型没见过这些词在风控语境下的真实用法。我们的做法是收集了脱敏后的历史工单、客服对话、风控规则描述、风险案例报告大概攒了几千万条领域语料然后对基座模型做了多轮继续预训练。这个阶段不调整任务头只是让模型在长文本上下文中充分“浸泡”领域数据让它的词向量表征更贴近业务实际。这步做完之后我们做了个很直观的测试把同一段包含黑话的申诉工单分别送给继续预训练前后的模型问它“用户是否存在异常操作”前一个模型的回答比较泛泛后一个模型的回答明显能聚焦到“代付”“刷单”这些具体行为上。差距非常明显。3.3 微调策略指令微调与偏好对齐继续预训练之后进入微调阶段。这个阶段的核心不是让模型死记硬背标签而是让模型学会“怎么按照风控分析师的方式思考”。我用的是指令微调加偏好对齐的组合方案。指令微调阶段我把历史风险研判案例整理成结构化的指令数据。每条数据包括指令instruction描述任务是什么比如“请判断该账号是否存在团伙欺诈特征”。输入input案件上下文包括申诉文本、行为序列、设备信息等。输出output标准化的研判结论包含风险等级、风险类型、一句话理由。光有指令微调还不够因为指令微调能学会“怎么说”但不一定能学会“怎么说得对”。我又用偏好对齐的方式进一步校准让模型在“说得合理”和“说得准确”之间找到平衡。具体做法是构建偏好对对同一个案件准备一个优秀研判回答和一个普通研判回答然后让模型学习选择优秀回答。这个过程的本质是把风控专家几十年的经验“蒸馏”到模型偏好里。这一步做完后模型输出明显更克制不再动不动就给高风险因为偏好数据里有大量“这个案例不能轻易判定”的正确示例。3.4 核心代码基于开源框架的微调流程为了方便你参考我把微调的整个流程压缩成一个最简可运行的结构。这只是骨架实际业务中还需要补充分布式配置和数据处理细节。# 主流程示例指令微调 from transformers import AutoModel, AutoTokenizer, Trainer, TrainingArguments from datasets import Dataset model_name your-base-model tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModel.from_pretrained(model_name) # 构造指令数据 samples [ { instruction: 请判断该账号是否存在团伙欺诈特征并输出风险等级。, input: 用户申诉我是代购经常帮朋友买日用品近期账号被限制。行为序列注册后72小时内在多台设备上登录。, output: 风险等级中风险。风险类型设备聚集。理由账号短期内关联多台设备但用户自述为代购需进一步核验。, }, # ... 更多样本 ] def preprocess(example): prompt f指令{example[instruction]}\n输入{example[input]}\n输出 enc tokenizer(prompt, truncationTrue, max_length1024) target tokenizer(example[output], truncationTrue, max_length256) enc[labels] target[input_ids] return enc dataset Dataset.from_list(samples).map(preprocess) training_args TrainingArguments( output_dir./fraud_llm_ckpt, per_device_train_batch_size4, gradient_accumulation_steps8, learning_rate2e-5, num_train_epochs3, fp16True, ) trainer Trainer( modelmodel, argstraining_args, train_datasetdataset, ) trainer.train()注意几个点max_length要根据你的显存调整。我之前在一张消费级显卡上跑小模型时设了1024再大会显存溢出。指令数据的“输入”部分必须保证脱敏这是合规红线。如果业务场景里有大量结构化特征不要硬塞进文本而是先做一个特征摘要再拼接效果更好。3.5 效果评估不能只看准确率模型微调完之后评估是最容易被忽视但又最重要的环节。反欺诈场景里我强烈建议不要只看准确率因为样本极度不平衡的情况下把所有样本都判成正常准确率也有99%以上但这毫无意义。我更关注这几个指标召回率Recall真正欺诈案件里模型能抓出来多少。精确率Precision模型标记为高风险的案件里有多少是真正的欺诈。F1分数平衡精确率和召回率的综合指标。KS值或AUC衡量模型把正负样本区分开的能力。误杀率正常用户被误判为高风险的比例这个直接关系到用户体验和客诉量。我们的目标设定是高风险案件的召回率不低于70%同时误杀率控制在0.5%以下。如果只能抓出高风险但误杀一堆正常用户那业务方是不会买单的。评估集也要认真建。我特意留了一批“时间上靠后”的样本做测试模拟模型上线的效果。因为欺诈手法一直在变用历史数据评估出来的分数往往比实际效果乐观。4. 上线部署与推理优化让大模型跑得又快又便宜4.1 大小模型协同的推理链路模型训完只是第一步上线才是生死关。我前面提过大模型不能处理全量流量所以线上链路的编排很关键。我们的线上流程大概是这样的请求进来先过规则引擎规则命中直接拒绝或放行未命中的请求进入传统机器学习模型输出一个风险概率模型概率落在某个灰色区间比如0.4到0.8之间的案件才被送入大模型做深度研判大模型输出的结果再叠加规则校验最终给出决策。这个灰色区间的设定直接决定了大模型的流量比例。我最初把区间设得偏宽结果大模型每天要处理十几万次推理请求GPU集群直接过载。后来通过调整阈值把大模型的流量压到总流量的5%以内既保住了效果又保住了成本。用一张表格表达不同层级的分工会更清晰层级处理对象核心算法目标流量占比第一级全量请求规则引擎、名单库快速拦截明确风险70%以上第二级规则未命中传统机器学习模型识别行为异常20%-25%第三级灰色区间案件大模型研判语义理解、小样本推理3%-5%4.2 推理延迟优化量化、蒸馏和缓存大模型上线之后大家最关心的永远是延迟。我们这边的目标是大模型单次推理压到500毫秒以内复杂案件可以放宽到3秒。几个亲测有效的优化手段半精度推理把模型参数从FP32转到FP16显存占用几乎减半速度提升近一倍。精度损失在可接受范围内。模型量化使用INT8量化和结构化剪枝在效果轻微下降的前提下大幅压缩模型体积。这一步要看具体业务对精度的容忍度我的经验是风控场景里INT8量化后的效果差异很小。推理服务缓存对重复出现的案件文本做语义哈希命中缓存直接返回历史结论。团伙欺诈的文案经常高度相似这个优化能砍掉不少重复计算。请求级别并行同一个案件里的多个子任务并行推理比如同时做文本分类、实体抽取和摘要生成把串行改并行端到端延迟能降一个量级。还要强调一点模型服务一定要和线上主链路解耦。如果大模型服务抖动或者GPU故障不能影响主交易链路。我的做法是在大模型前面加了一层降级开关一旦大模型超时或异常案件自动降级到传统模型的决策结果。保底逻辑必须时刻在线这是风控系统的基本素养。4.3 监控与反馈闭环对抗黑产也得自我进化反欺诈模型上线不是终点而是起点。因为黑产在持续进化模型的效果会随时间衰减。我搭了一个完整的监控与反馈闭环。第一层是数据监控实时观察大模型服务的流量、延迟、显存、CPU占用。第二层是效果监控每天统计高风险案件的人工复核结果和大模型的预测是否一致两者不一致的案例进入次日重训候选池。第三层是业务指标监控关注误杀率、客诉率、人工复核通过率。这些指标一旦出现异常波动立刻触发告警。第四层是自动重训机制每天把新增的坐实欺诈样本和误杀样本回灌到训练集每周做一次增量微调每个月做一次全量重训。这个闭环跑起来之后模型效果不是越用越差而是越用越准。我们上线头一个月模型在新增欺诈样本上的召回率还不到60%第二个月就稳步爬升到70%以上。4.4 可解释性模型判了得让人看得懂大模型在风控里推不开最大的阻力不是效果而是可解释性。业务审核团队和合规部门都会问“你说它是团伙欺诈凭什么”所以我从一开始就把“模型输出研判理由”作为硬性要求。我们让大模型在给出风险等级的同时一定要输出结构化的理由包括风险因素是什么、哪些行为序列支撑了判断、和已知风险模式的相似度有多高。实际效果是审核团队拿到输出之后不再需要自己从头看原始工单效率提升明显。而且因为理由是可读的自然语言业务方对大模型的信任度也在逐步提升。当然大模型生成的理由偶尔也会出现一本正经地胡说八道所以我没有完全让它自由发挥。我把输出格式死死约束住要求它先输出“命中特征”再输出“研判依据”最后输出“风险结论”格式不对就重试一次。几次调优下来输出质量稳定了很多。5. 常见问题与排障实录那些年我们踩过的坑5.1 问题一小样本场景下通用大模型也学不动一开始我们天真地以为通用大模型有一点语义理解能力就能直接上。结果在某个细分业务线上能用的坐实欺诈样本只有几百条微调出来的模型怎么测都过不了及格线。排查下来发现问题不在微调方法而在样本本身。几百条样本根本覆盖不了欺诈手法的多样性模型记住了这几条样本的“表面模式”遇到变体就抓瞎。我的解法是用“两阶段训练法”先用规则引擎和历史异常日志构造海量“疑似样本”模型在这些弱标签上做预训练这一步是让模型建立业务感知第二阶段用少量高置信坐实样本做精调让模型学习精确决策边界。这个组合比直接用小样本硬训效果好了不止一个档次。5.2 问题二大模型输出“幻觉式理由”把正常用户判成高风险这是上线初期的重灾区。明明一个老用户正常买了几件商品在途的物流信息正常结果大模型给出的理由是“用户行为序列与历史习惯不一致存在盗号可能”直接把用户限额降了。问题出在我一开始给模型的指令里没有明确告诉它“证据不够充分时应该输出低风险”。模型为了完成指令倾向于输出一段看起来合理的理由哪怕证据不足也会硬凑。这个问题靠的是偏好对齐解决的同时我在推理链路里加了一个“置信度校准”模块如果模型生成的理由里没有出现明确命中特征就强制降级为低风险。另外从业务层面我也把高风险的定义收敛了一把让模型在“不确定”和“高风险”之间有一个清晰的安全区。5.3 问题三新欺诈手法出现时模型还是反应慢半拍模型再强也追不上黑产的进化速度这是客观规律。有一次我们发现某个新的欺诈团伙在短时间内薅走了大量新客权益等到标注样本积累出来损失已经不可逆了。后来我建立了一个“新手法快速感知”机制把异常事件聚类结果、最新客诉文本、黑产短信模板等非结构化信息每天自动跑一遍大模型的零样本研判输出的疑似案例直接推送给人工复核团队。这样从“新手法出现”到“模型介入拦截”的时间窗口从平均两周缩短到48小时以内。这个机制的本质是让大模型扮演“侦察兵”而不是等标签够了才被动反应。5.4 问题排查速查表我还整理了一份高频问题排查表直接对应到症状、原因和解决方案大家可以按图索骥症状可能原因解决办法大模型误杀率高指令不够清晰、偏好对齐不足增加“证据不足判低风险”的偏好对推理延迟过高模型过大、未做量化切小模型、INT8量化、请求并行文本被截断导致关键信息丢失上下文长度设置太短分段处理并做关键片段摘要新欺诈手法识别滞后缺乏新样本感知链路建立零样本研判人工复核快速闭环模型输出格式混乱指令约束弱强制结构化输出模板并做失败重试6. 经验沉淀三个我认为最值钱的心法多轮迭代下来我最大的体会是大模型不是魔法它是一个放大器。你喂给它的数据质量高、指令设计得好、业务链路理得清它的效果会爆发式增长反过来数据一团糟、指令模棱两可、业务逻辑混乱它也就比传统模型强一点点。第一个心法是把“大模型赋能”落到非常具体的问题上。不要只说“用大模型做反欺诈”要落到“用大模型做申诉工单的语义研判”“用大模型做新欺诈手法的零样本初筛”“用大模型生成人工可读的研判理由”。问题定义得越具体落地概率越高。第二个心法是永远留一条降级路径。大模型再强也是模型它可能因为数据突变、服务异常、甚至是恶意攻击而产生错误决策。反欺诈系统永远要有保底手段宁可保守也不能让系统整个趴窝。最后再分享一个小技巧。我们在做模型迭代时每次改完模型都会做“对抗性回放”把过去半年里误判的案例、黑产新变体案例全部收集起来重新跑一遍新模型看它的决策变化。这一步能提前发现模型在新场景下的不适应不用等到上线后被业务方追着骂才发现。大模型赋能反欺诈这条路目前还处在早期阶段很多坑都是自己摸出来的。如果你正准备做类似的事希望这篇复盘能让你少走点弯路。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表