乐于分享
好东西不私藏

App 风控建模系列|正式结尾

App 风控建模系列|正式结尾

  1. applist 相关文章1Applist 风险挖掘的四种实战思路,你用过几种?

  2. applist 相关文章2手把手教你构建一个 App 行为分类模型:用 Encoder 捕捉用户风险

  3. applist 相关文章3 :APP预训练

  4. applist 相关文章4APP finetune

  5. applist 相关文章序列建模中的自定义损失函数

前面几篇applist相关文章一路走下来,已经把整条路径跑通了:

从 App词表构建 -> app MLM 预训练 -> App逾期微调落地 ->loss优化。很多小童鞋看完之后,问了一些问题,这些问题都很关键,比如:

  • 这种 App-BERT,到底学到了啥?
  • embedding 里,哪些 App 会更“像”?
  • 只靠 App 行为,真的能识别风险?
  • 非得搞预训练吗,直接训不行?
  • 预训练时,Embedding 到底怎么初始化?

一、App-BERT 到底学到了什么?

这个问题,本质是在问:

没有语义、没有语法的序列,BERT还能学啥?

小编自己一开始其实也不是确定,但跑完几轮实验之后,可以看到它学的不是内容,而是行为结构

大概可以拆成几层理解:

1)行为共现:谁和谁经常一起出现

模型会自己学出一种东西: 哪些 App 是“经常一起被同一批人用的”。

比如:

  • 借贷类 App 会扎堆出现
  • 分期 / 信用卡 / 代偿类会形成一圈
  • 娱乐类、工具类也各自抱团

这些你不用做特征交叉,它自己就能从共现里学出来。

其实说白了:

它在还原“人群使用习惯”,而不是 App 本身。


2)用户的“行为圈层”

App 列表其实不是乱的,它背后是一个人的长期偏好。

比如以下3个组合:

  1. tiktok + 游戏 + FaceBook
  2. zoom + 邮箱 + 打车 +地图
  3. 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,让模型根据上下文预测还原,在海量用户行为序列中反复迭代训练,慢慢自发形成合理向量结构:

  1. 高频共生的 App,向量不断拉近
  2. 行为圈层完全割裂的 App,距离持续拉开

无监督训练,自动完成行为语义沉淀。

七、我们这套方案,还有哪些问题?

这套方案还有不少可以继续优化的地方:

1)特征还不够丰富

现在只用了AppList。

但其实还可以加:

  • app分类
  • app安装时间
  • app更新时间

这些加进来,表达能力会再上一个台阶。


2)多任务还可以继续扩

现在只是:

  • FPD1 / mob3

其实可以往:

  • 多头
  • 共债

统一做一个 backbone。


最后简单总结下

这整套方法,可以用一句话概括:

用无标签数据学“人是怎么用 App 的”,再用有标签数据学“哪些用法是有风险的”。

中间的复杂度,更多是工程和细节,而不是模型本身。

很多人一开始会觉得:

  • Transformer 很重
  • 预训练很复杂

但我们都知道:慢慢做、把数据抠细,比堆模型更重要。

至此,App 行为序列建模全系列内容,正式阶段性结束了。后续不会再更新该系列内容,需要完整项目代码、模型实操源码的伙伴们,可以私信联系小编,抽空统一分享。