4、评分算法与计算:规则引擎评分、机器学习评分、评分归一化与阈值设定

好,咱们进入第四章。前面几章我们把信任评分的概念、数据来源和特征工程聊完了。现在到了最核心的部分——分数到底怎么算出来的。

说实话,我在刚做安全评分系统那会儿,也以为找个算法跑一下就行。结果发现,评分算法远不止“选个模型”那么简单。你得考虑业务场景、数据质量、计算效率,还得想清楚——这个分数出来之后,怎么用?

这一章,我带你过一遍实际项目中常用的几种评分方式。规则引擎、机器学习模型,还有归一化和阈值设定。嗯,都是硬骨头,但啃下来之后,你对信任评分的理解会上一个台阶。

4.1 规则引擎评分:简单、可解释、立竿见影

先聊规则引擎。说白了,就是人工定义一套打分规则。比如:

  • 如果用户登录IP属于高危地区,扣20分
  • 如果设备指纹与历史记录一致,加10分
  • 如果操作时间在凌晨3点到5点,扣15分

规则引擎的好处是透明。业务方问起来,你能直接告诉他:“因为IP在境外,所以扣了分。” 不需要解释什么特征权重、激活函数。

我在一个金融风控项目里,初期就是靠规则引擎撑起来的。数据量不够,机器学习模型跑不动,但业务又急着上线。我们就拉了风控专家和业务骨干,一起列了30多条规则。上线第一周,拦截率就达到了预期目标的80%。

我的建议:规则引擎适合冷启动阶段,或者对可解释性要求极高的场景。但别贪多,规则超过50条后,维护成本会指数级上升。

规则引擎的典型结构

一个规则通常包含三个部分:条件、权重、动作。我习惯用下面这种结构来组织:

规则ID: R001
条件: 登录IP国家 ∈ [“RU”, “KP”, “IR”]
权重: -20
动作: 扣分 + 触发二次验证

规则ID: R002
条件: 设备指纹匹配度 > 0.9
权重: +15
动作: 加分 + 跳过验证

实际计算时,把所有匹配规则的分数累加起来,就是规则引擎的原始评分。

核心公式: Scorerule = Σ (匹配规则的权重) + 基础分

4.2 机器学习评分:逻辑回归与决策树

当数据量上来之后,纯规则就不够用了。你会发现有些风险模式,人根本总结不出来。这时候就该机器学习上场了。

我重点讲两个模型:逻辑回归和决策树。它们不是最炫的,但在信任评分领域,绝对是最实用的。

4.2.1 逻辑回归:简单、快速、概率输出

逻辑回归虽然名字里有“回归”,但干的是分类的活。它输出的是一个0到1之间的概率值,正好可以映射成信任评分。

它的数学形式长这样:

P(y=1) = 1 / (1 + e-(w0 + w1x1 + w2x2 + ... + wnxn))

每个特征xi都有一个权重wi。权重越大,说明这个特征对评分的影响越大。我在做设备指纹评分时,发现“浏览器语言”这个特征的权重特别高——因为很多攻击脚本默认是英文环境,而正常用户大多是本地语言。

注意:逻辑回归对特征之间的相关性比较敏感。如果两个特征高度相关(比如“登录次数”和“活跃天数”),模型会不稳定。建议先用PCA或特征选择做一下预处理。

4.2.2 决策树:可解释性强、能处理非线性关系

决策树就不一样了。它通过一系列“是/否”问题,把数据一层层分下去。每个叶子节点对应一个评分。

举个例子:

根节点: 设备是否可信?
├── 是: 用户行为是否异常?
│   ├── 是: 评分 40
│   └── 否: 评分 85
└── 否: 登录地点是否匹配?
    ├── 是: 评分 60
    └── 否: 评分 20

决策树的优势在于直观。你可以直接把树画出来,给业务方看:“你看,走到这个分支,分数就是40。” 我曾经在一个反欺诈项目里,用决策树替换了原来的规则引擎,准确率提升了12%,而且业务方一看就懂,完全没有抵触情绪。

避坑指南:决策树容易过拟合。我建议把树的最大深度控制在5层以内,叶子节点最少样本数设为100。别让树长得太茂盛,否则在测试集上会很难看。

4.3 评分归一化:让分数站在同一起跑线

不管是规则引擎还是机器学习模型,输出的原始分数往往不在一个量级上。比如规则引擎输出的是-100到+100,逻辑回归输出的是0到1,决策树输出的是0到100。直接拿来用,会出问题。

归一化,就是把不同来源的分数映射到同一个标准区间。我常用的方法有两种:

方法 公式 适用场景
Min-Max归一化 Scorenorm = (Score - Min) / (Max - Min) × 100 分数范围已知,且分布均匀
Z-Score归一化 Scorenorm = (Score - Mean) / Std × 10 + 50 分数分布近似正态,有异常值

我个人更倾向于Z-Score归一化。为什么?因为Min-Max对异常值太敏感了。有一次,一个用户的评分因为数据错误变成了-999,结果Min-Max把所有正常用户的分数都压到了0附近。用Z-Score就不会有这个问题,异常值会被自动拉回。

归一化后的分数范围: 我一般统一映射到0-100分。低于20分视为高风险,高于80分视为低风险。中间区域是灰名单,需要进一步分析。

4.4 阈值设定:分数有了,怎么用?

评分算出来了,归一化也做了。然后呢?你得设定阈值,决定哪些分数是“可信”,哪些是“可疑”,哪些是“危险”。

阈值设定不是拍脑袋。我见过太多项目,直接拍一个“60分及格”,结果要么误杀太多,要么漏放太多。正确做法是:基于业务数据,做阈值调优。

阈值调优的步骤

  1. 收集历史数据:至少要有1万条以上带标签的数据(正常/异常)。
  2. 计算不同阈值下的指标:比如阈值设为50分时,精确率、召回率、F1值分别是多少。
  3. 画ROC曲线或PR曲线:找到最优的平衡点。
  4. 结合业务成本做决策:如果误杀一个用户的成本是100元,漏放一个攻击的成本是10000元,那阈值就应该偏向高召回。
我的经验:阈值不是一成不变的。业务高峰期(比如双十一),我会把阈值调低5-10分,宁可多拦截一些正常用户,也不能放走攻击。平时再调回来。

4.5 整体评分流程框架

说了这么多,我把整个评分流程画成一张图,方便你理解。

信任评分计算流程 信任评分计算流程 输入特征数据 数据量是否充足? 是 机器学习评分 否 规则引擎评分 评分归一化 (0-100) 阈值判定与决策输出 说明 数据量充足时走机器学习 数据量不足时走规则引擎 最终统一归一化后判定

你看,整个流程其实不复杂。关键是要根据数据量和业务阶段,灵活选择评分方式。冷启动用规则,数据多了上模型,最后统一归一化,设定阈值,输出决策。

总结一句话:评分算法没有银弹。规则引擎保底,机器学习提效,归一化统一口径,阈值决定最终效果。四者缺一不可。

好了,这一章的内容就到这里。评分算法这块,我建议你动手跑一遍。拿一份公开的欺诈检测数据集,先用规则引擎写一套规则,再用逻辑回归和决策树分别建模,对比一下效果。相信我,亲手做过一遍,比看十遍文章都管用。