2023年某广告平台发现,排序模型预估点击率0.08的广告位,实际点击率只有0.05,偏差60%。后果是出价虚高,ROI算出来比实际高35%。团队花两周做概率校准,AUC没变,但预算分配准确率提升22%。排序模型输出的是概率,概率不准,后面所有决策都会歪。
什么时候必须校准?3个场景。场景1,概率要参与出价或定价,比如广告eCPM=bid×pCTR,p偏了钱就花错。场景2,概率要跨模型比较,比如推荐和搜索的分数混排,未校准的分数不可比。场景3,概率要设阈值做拦截,比如风控里p>0.7才人工审核,偏差会让审核量忽高忽低。反过来,如果只关心排序顺序、不关心绝对值,校准可以缓一缓。
先看校准的诊断方法。把预估概率分10个桶(0到0.1、0.1到0.2……),每桶算实际正例率,画可靠性曲线。理想情况是对角线。某推荐模型在0.1到0.2桶里实际只有0.07,在0.6以上桶里实际0.72,典型的“中间低估、头部高估”。另一个指标是Brier分数,等于预测概率和真实标签的均方误差,越低越好,某模型校准前0.094、校准后0.071。
4步修复法。第1步,留出校准集,从训练集里切10%到20%,不能和训练集重叠,也不能用测试集(会泄漏)。第2步,选方法:样本量大于1万用等渗回归(isotonic),小于1万用Platt scaling(逻辑回归拟合),等渗容易过拟合小样本。第3步,在校准集上拟合映射函数,把原始分数映射到校准后概率。第4步,在独立测试集上验证,可靠性曲线贴近对角线、Brier下降才算通过。某团队跳过第4步直接上线,两周后发现在高分段过度校正,人工审核量涨了40%。
对比两种做法。做法A,重新训练模型并加校准损失。做法B,保持模型不变,后处理加映射层。A的效果上限高,但要重跑训练、重新上线,周期2到3周。B当天能上线,适合紧急修复,缺点是模型更新后映射函数要重拟合。经验值:线上偏差超过30%先用B止血,两周内排期做A。某电商2022年双11前用B方案3天修复,大促期间ROI计算误差从35%降到8%。
概率常识补两个。第1个,校准不改变排序,AUC和NDCG在校准前后完全相同,因为单调映射不改变顺序。所以别指望校准提升CTR,它提升的是决策质量。第2个,分层校准有时必要:新用户和老用户的点击率分布差很多,全局校准后新用户分段仍然偏。做法是按用户活跃度分2到3层,每层单独拟合映射,样本每层不少于5000。某内容平台分层校准后,新用户分段的Brier从0.12降到0.08。
落地检查按编号走。1)每周抽样1%线上请求,记录预估概率和真实点击,积累校准数据。2)每月画一次可靠性曲线,偏差超过20%触发校准流程。3)校准集独立切分,禁止和训练测试混用。4)上线前在独立测试集验证Brier和分桶偏差。5)模型版本更新后48小时内重拟合映射。6)监控高分段(p>0.5)的实际正例率,偏差超过15%告警。这6步做完,概率输出的可信度能稳定在可接受范围。