App 风控建模系列|正式结尾
-
applist 相关文章1:Applist 风险挖掘的四种实战思路,你用过几种?
-
applist 相关文章2:手把手教你构建一个 App 行为分类模型:用 Encoder 捕捉用户风险
-
applist 相关文章3 :APP预训练
-
applist 相关文章4: APP finetune
-
applist 相关文章:序列建模中的自定义损失函数

前面几篇applist相关文章一路走下来,已经把整条路径跑通了:
从 App词表构建 -> app MLM 预训练 -> App逾期微调落地 ->loss优化。很多小童鞋看完之后,问了一些问题,这些问题都很关键,比如:
-
这种 App-BERT,到底学到了啥? -
embedding 里,哪些 App 会更“像”? -
只靠 App 行为,真的能识别风险? -
非得搞预训练吗,直接训不行? -
预训练时,Embedding 到底怎么初始化?
一、App-BERT 到底学到了什么?
这个问题,本质是在问:
没有语义、没有语法的序列,BERT还能学啥?
小编自己一开始其实也不是确定,但跑完几轮实验之后,可以看到它学的不是内容,而是行为结构。
大概可以拆成几层理解:
1)行为共现:谁和谁经常一起出现
模型会自己学出一种东西: 哪些 App 是“经常一起被同一批人用的”。
比如:
-
借贷类 App 会扎堆出现 -
分期 / 信用卡 / 代偿类会形成一圈 -
娱乐类、工具类也各自抱团
这些你不用做特征交叉,它自己就能从共现里学出来。
其实说白了:
它在还原“人群使用习惯”,而不是 App 本身。
2)用户的“行为圈层”
App 列表其实不是乱的,它背后是一个人的长期偏好。
比如以下3个组合:
-
tiktok + 游戏 + FaceBook -
zoom + 邮箱 + 打车 +地图 -
Newcredit + FairMoney + OKash
其实这里小编使用 BERT 的双向建模,在这里的作用就是:把整段行为组合当成一个整体去理解,不是看某个 App,而是看这个人属于哪个使用圈层。
3)那些人工抓不到的“脏信号”
这个是小编觉得最有价值的一点。
很多风险信号,其实都藏在:
-
小众 App -
长尾工具 -
不太好分类的灰色软件
人工规则基本只能盯住头部,但模型不会,只要这些 App 在同一批高风险用户里反复出现,它就会把它们“拎出来”。
所以你会看到一种现象:一些你都没听过的 App,在 embedding 空间里会聚在一起,而且离正常用户很远
这其实就是模型在“自动打标签”。
4)统一的向量空间
所有 App 最后都会被映射到一个统一的 embedding 空间里。
-
可以直接算相似度 -
可以做聚类 -
可以跨任务复用
这一点其实比分类本身更有价值。
也顺带回答了第二个问题。
二、哪些 App 会更接近?
这个不用额外分析,直接看 embedding 分布就够了。
大概有几种典型情况:
同类 App 自动聚在一起
比如:
-
各种现金贷 -
分期 / 信用卡 -
娱乐 / 短视频
很自然,不需要人为干预。
“灰产小圈子”会自己抱团
有一类特别有意思:
一些很小众、甚至名字很奇怪的 App, 你单看完全不知道是干嘛的。
但在 embedding 里,它们会:自己聚成一个小团,而且离主流应用很远
这通常就是:高风险人群的专属工具集合。
不是按类别,而是按“人群重叠”
这个一定要强调一下:
模型并不关心 App 属于哪个行业分类。
它只关心:是不是被同一批人一起用过
哪怕两个 App 业务毫无关系,只要用户重叠多,它们就会靠近。
这点是人工标签完全做不到的。
三、为什么一定要“预训练 + 微调”?
这个问题其实争议挺大的,很多人都问过小编为什么要做预训练。
很多人会觉得直接拿 序列 + 标签 训练就可以了。
小编也做过对照实验,结论就是排序能力确实不如预训练模型效果好。
其实 MLM 做的事情,可以理解成:用全量用户行为,先学一个“通用行为模型”,没有标签,但信息量极大。然后微调阶段才去学 哪些行为是风险相关的。
就像我们要先学习 语数外 通识课程,然后再去学某一门比如 占卜 这门具体的课程。
先学世界,再学任务。
2)embedding 是可以复用的
这一点在业务上非常值钱。一套预训练出来的 App embedding,可以用在:
-
逾期预测 -
多头借贷 -
共债识别 -
用户分层
不用每个任务重新来一遍。
四、微调阶段的一些经验
小编当时其实跑了很多组合(池化 + loss + 多任务),最后沉淀下来一些比较实用的结论。
1)池化没有绝对最优
简单说:
-
CLS:快,但信息损失多 -
Mean:最稳,基本不踩坑 -
Attention:效果最好,但更重
2)loss 选对,可以提升排序能力
-
FocalLoss -
加权 BCE -
DiceLoss
多任务一起训(比如 FPD1 + mob3)
短期 + 长期风险一起学,排序效果比单任务更好。
3)数据处理细节可能比模型更重要
最后真正给业务带来提升的,反而是这些:
-
样本权重 -
数据清洗
这些东西不做,模型再复杂也很难稳定。
五、只靠 App 行为,能不能做风控?
直接说结论,不够,但很有用。
它的问题是:
-
信息不全面 -
没有资金、多头这些硬指标
但它的优势也很明显:能抓“别人抓不到的东西”
尤其是:
-
小众行为 -
隐蔽借贷 -
灰产习惯
所以更合理的用法是:把它当成高维增量特征,而不是唯一特征
和其他特征拼起来,效果会明显更好。
六、embedding 到底怎么初始化的
这个问题也有人私聊小编,但小编没有回复,这里说一下。
App Embedding 最开始完全随机初始化,没有任何外部语义预训练权重、没有人工先验知识,就是一个标准可学习的 Embedding 矩阵。
依靠 MLM 掩码预训练机制:随机遮挡序列中的单个 App,让模型根据上下文预测还原,在海量用户行为序列中反复迭代训练,慢慢自发形成合理向量结构:
-
高频共生的 App,向量不断拉近 -
行为圈层完全割裂的 App,距离持续拉开
无监督训练,自动完成行为语义沉淀。
七、我们这套方案,还有哪些问题?
这套方案还有不少可以继续优化的地方:
1)特征还不够丰富
现在只用了AppList。
但其实还可以加:
-
app分类 -
app安装时间 -
app更新时间
这些加进来,表达能力会再上一个台阶。
2)多任务还可以继续扩
现在只是:
-
FPD1 / mob3
其实可以往:
-
多头 -
共债
统一做一个 backbone。
最后简单总结下
这整套方法,可以用一句话概括:
用无标签数据学“人是怎么用 App 的”,再用有标签数据学“哪些用法是有风险的”。
中间的复杂度,更多是工程和细节,而不是模型本身。
很多人一开始会觉得:
-
Transformer 很重 -
预训练很复杂
但我们都知道:慢慢做、把数据抠细,比堆模型更重要。
至此,App 行为序列建模全系列内容,正式阶段性结束了。后续不会再更新该系列内容,需要完整项目代码、模型实操源码的伙伴们,可以私信联系小编,抽空统一分享。
夜雨聆风