第一章:打分函数一致性校验概述
大家好,欢迎来到《打分函数一致性校验实操指南》。我是这门课的主讲,一个在推荐系统、搜索排序和模型评估里摸爬滚打了好多年的工程师。
咱们第一站,先聊聊最基础的问题:什么是打分函数?为什么需要一致性校验?这玩意到底用在哪?
别小看这几个问题。说实话,很多做了两三年模型的人,对“一致性”的理解还停留在“A和B长得差不多”的层面。我当年也吃过这个亏,后面会讲到。
什么是打分函数
做个简单的解释。打分函数,就是一个映射关系。它接收输入,输出一个数值。这个数值通常代表某种“好坏”或“优先级”。
举个例子。你在电商APP里搜“运动鞋”,系统会给每个商品算个分。这个分综合考虑了相关性、销量、好评率、你个人的偏好等等。最后按分从高到低排出来,就是你看到的结果。
从数学上看,可以写成这样:
score = f(x)
其中 x 是输入特征向量
score 是输出的实数值
但现实场景远比这个复杂。比如在多目标排序里:
final_score = w1 * ctr_score + w2 * cvr_score + w3 * price_penalty
这里ctr_score是一个子模型输出的预估点击率,cvr_score是转化率。每个子模型都有自己的打分函数。
所以,什么叫一致性?说白了,就是同一个打分逻辑,在离线训练阶段、在线服务阶段、以及不同环境之间,它的行为应该保持一致。
为什么需要一致性校验
嗯,这是很多人容易忽略的地方。
模型在训练的时候,效果看着挺好的。AUC高,NDCG也好。但一上线,线上指标却跌了。为什么?
原因往往不是模型本身不行,而是"评分不一致"造成的。
我在项目中遇到过这么一件事。团队花了两周时间调一个召回模型,离线验证时AUC提升了1.5%。大家都觉得稳了。结果灰度上线后,线上点击率反而掉了0.8%。查了三天,发现原因很简单:离线训练时对某个特征做了log变换,但线上服务代码里忘加了。同一个打分函数,两边的输入不一样,输出当然不一样。
一致性校验要解决的问题,总结下来有三类:
- 计算一致性:同一个输入,在不同环境输出的分数是否相同。
- 排序一致性:两个模型对同一批物品的排序关系是否稳定。
- 分布一致性:打分值的整体统计分布(均值、方差、分位数)是否偏移。
为什么要做这件事? 说白了,就是为了让模型“言行一致”。
应用场景
一致性校验不是实验室里的理论问题。它是工程落地的一道硬门槛。下面这些场景,你一定遇到过:
| 场景 | 具体问题 | 校验重点 |
|---|---|---|
| 模型版本更新 | 新模型替换旧模型时,打分是否有预期变化 | 排序一致性、分布一致性 |
| 算法框架迁移 | 从TensorFlow换到PyTorch,或者从Python换到C++推理 | 计算一致性(逐样本对比) |
| 特征工程变动 | 新增特征、删除特征、特征处理逻辑变化 | 输入一致性 + 特征重要性对比 |
| 全量/增量训练 | 增量数据导致模型参数漂移,打分行为不一致 | 分布一致性 |
| AB实验置信度 | 实验组和对照组打分逻辑有隐蔽偏差 | 分桶一致性 |
你想想看,这些场景哪一个不重要?
一张图来总结本章的核心逻辑:
小结
这一章我们主要聊了打分函数的基础概念、一致性校验的必要性,以及它的实际应用场景。
记住这个核心认知:打分函数一致性校验,本质上是确保“设计意图”和“实际行为”之间的不脱节。 你希望模型怎么做,它就得怎么打分。不能离线一套、线上另一套。不能今天一套、明天另一套。
好了,这一章先到这儿。内容不多,但都是后面实操的基石。