课程概览
打分函数是什么?
打分函数,说白了就是一个评分器。你给它一组特征,它给你一个分数——这个分数代表模型对某个结果的置信度、相似度或者概率。在机器学习里,打分函数随处可见:推荐系统给商品打分、人脸识别给相似度打分、排序模型给候选文档打分……你想想看,几乎每个预测任务背后都藏着这么个函数。
我个人习惯把打分函数分成两类:一类是内建在模型里的,比如逻辑回归的 sigmoid 输出;另一类是事后计算的,比如用余弦距离去比两个向量。不管哪种,它们的共同点都是——分数是跨样本比较的。这就引出了一个坑:如果你的打分函数在不同批次之间表现不一致,那你得到的分数就不能直接对比。
核心观点:打分函数是模型决策的“度量尺”,但一把尺如果刻度不准,量出来的数就全废了。
批次偏差为什么是个问题?
我在实际项目里遇到过一件让人头疼的事:离线评估时 AUC 很好看,上线后效果直接崩了。查了半天,最后发现是批次偏差在搞鬼。
批次偏差的来源其实挺多的。你想想看:
- 数据采样不均衡:你这批数据全是正样本,下批全是负样本,模型打分自然忽高忽低。
- 特征分布漂移:用户行为随时间变化,今天这批用户的点击率特征和昨天那批不一样。
- 模型更新节奏:线上模型每 1 小时更新一次,打分函数可能还没收敛就被拉上线。
这些问题会导致同一个输入在不同批次里拿到完全不同的分数。最要命的是——你以为分数是绝对值,其实它只是个相对值。我曾见过一个风控系统,因为批次偏差把正常交易误判为欺诈,损失不小。
| 场景 | 表现 | 典型影响 |
|---|---|---|
| 推荐系统离线 vs 在线 | 离线排序分数前10的 item,在线只有3个被点击 | 点击率下降 20% |
| 人脸识别门禁 | 白天批次识别率 99%,夜间批次降到 85% | 用户体验差,警报误报 |
| 广告 CTR 预估 | 不同广告位同模型打分差异巨大 | 出价策略失效,ROI 波动 |
注意:批次偏差不是模型过拟合,也不是数据噪声,它是评价体系内部的一致性缺失。你不控制它,所有的模型对比实验都会变味。
我们这课能帮你解决什么?
这门课不是我闭门造车想出来的,是踩了坑之后总结出来的实战经验。课程目标很直接:让你手里的打分函数在任意批次、任意场景下都能输出稳定可靠的分数。
具体来说,课程会涉及:
- 偏差诊断:怎么快速发现批次偏差?用统计检验还是可视化?
- 校正策略:均值平移、方差缩放、分位数对齐……什么时候用哪个?
- 在线自适应:在流水线里实时修偏,不能拖慢推理速度。
- 评估指标重建:用了校正后,原来的 AUC / NDCG 还能信吗?
我不打算讲花哨的理论,每个知识点都会配上可运行的代码片段。你拿过去改改就能用。
一个小技巧:如果你现在被批次偏差折磨得不行,可以先跳到第 3 章“快速诊断方法”,那里有一个三行命令就能跑起来的脚本。不过建议你还是按顺序学,基础打牢后面才爽。
你需要哪些前置知识?
嗯,这里要注意。我不是那种“从零开始”的老师,默认你已经有一些基础了:
- Python 基础:会写循环、会用 numpy/pandas。如果你只会调 sklearn 的接口,也行,但中间有些调优参数要自己改。
- 机器学习常识:知道什么是训练集/测试集,理解过拟合和欠拟合。不需要懂深度学习。
- 统计学基础:均值、标准差、分位数这些概念清楚了就行。你不需要推导公式,但要知道它们代表什么。
- 一点流水线经验:最好用过 MLflow、Kubeflow 或者自己搭过特征计算管道。没有的话也不影响,课程会提供最小化示例。
如果你觉得某个知识点卡住了,我建议你多用课程里的提示块——我专门在里面藏了很多避坑指南。
这张图把我们这一整章要讲的东西串起来了。中心点是“打分函数批次偏差控制”,周围是定义、作用、来源、影响、控制方法和课程目标。底部是前置知识——你如果觉得哪个节点还不够熟悉,建议先补一下那块内容再往下走。
一句话总结:这节课不是教你调模型,而是教你让模型的分数说人话——跨批次、跨场景、跨时间都站得住脚。