想象一位射击手在靶场练习。他每次瞄准都信心十足,觉得自己打出了完美的十环——但裁判递来的成绩单却让他困惑:自认为会命中靶心的子弹,实际落在八环;自认为要脱靶的一枪,靶纸上却出现了九环。这位射击手的枪法并不差,问题出在他的“自我感觉”与“真实成绩”之间存在系统性的偏差。他需要的不是更多练习,而是一位教练帮他建立一张“感觉↔实测”的对照表。 排序模型恰恰就是这位射击手。在推荐与广告系统里,模型输出一个 0 到 1 之间的分数(比如“点击率 0.8”),这其实是模型自己的“感觉”——它觉得某条广告有 80% 可能被点击。但这个数字往往不等于真实点击概率:模型可能过度自信,说 0.8 时实际只有 0.6。排序模型校准(Calibration)就是那张“实测对照表”:用 Platt Scaling 像“调准星”一样给模型一个整体修正,或用 Isotonic Regression 像“按环数查表”一样,把每个分数段映射到真实点击频率,让模型的“感觉”回归事实。校准不改变排序顺序,却决定了广告竞价中每一个出价的“含金量”。

岗位关联

排序模型校准是 CTR 预估落地的最后一道“质检”工序。掌握 Platt Scaling 与 Isotonic Regression,你就能让模型的概率输出从“看起来合理”升级为“真实可信”,直接影响广告竞价、流量分配等核心业务决策。

目录
  1. 可视化演示
  2. 校准问题:分数不是命中率
  3. 校准评估:先给射击手记一本明白账
  4. Platt Scaling:给准星一个整体修正
  5. Isotonic Regression:一张实测对照表
  6. 方法选型:调准星还是列对照表
  7. CTR 应用:真金白银的出价依据
  8. 实践要点:把校靶变成日常制度
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Platt Scaling与Isotonic Regression两种校准方法的原理对比、可靠性图分析,以及CTR预估校准在广告系统中的完整应用流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

可靠性图分析 校准前(BFR):模型输出分数与真实点击率存在偏差,可靠性曲线偏离对角线 校准后(AFT):校准后预测概率更接近真实频率,曲线趋近对角线 ECE = Σ |conf - acc| * n / N, lower is better

校准问题:分数不是命中率

射击手的故事里有个关键细节:他总把“瞄准的感觉”和“真实的环数”混为一谈。排序模型也一样。推荐系统常用的 CTR 模型,最后一层往往是一个 Sigmoid 函数,把任意实数压缩到 0 到 1 之间——于是模型说“这条广告的点击率是 0.8”。这个 0.8 是模型内部计算出的“置信度分数”,并不等于真实世界里 80% 的人都会点它。Sigmoid 只能保证值落在 0 到 1,无法保证这个值就是真实概率。

在广告场景中,模型往往表现出“过自信”:当它说“点击概率 0.8”时,真实点击率可能只有 0.6;当它说“0.9“时,真实可能只有 0.7。分数越高,”虚高”越明显,就像射击手越觉得自己厉害、偏差越大。于是我们引入一个严格的数学定义:校准(Calibration)要求,所有模型输出概率为 \(p\) 的样本,其真实正例比例也恰好等于 \(p\)。

\[

\mathbb{P}(y=1 \mid \hat{p}=p) = p, \quad \forall\, p \in [0,1]

\]

1. 条件概率:\(\displaystyle \mathbb{P}(y=1 \mid \hat{p}=p)\) 表示“在所有模型给出概率 \(p\) 的样本中,真实发生点击(\(y=1\))的比例”。

2. 预测分数:\(\hat{p}\) 是模型输出的分数,它可能是概率也可能是未经校准的置信度。

3. 相等条件:要求真实比例恰好等于模型分数 \(p\),不多不少。

4. 全区间成立:对 \(p \in [0,1]\) 的每一个取值都成立,才是完美校准。

回到射击场:校准,就是让射击手的“感觉环数”和“实际环数”在每一档上都对齐。如果模型说 0.5 时真实命中率也是 50%,说 0.8 时真实也是 80%,那么这张“成绩单”才真正可信。

校准评估:先给射击手记一本明白账

光说“感觉不准”还不够,教练需要一本能量化偏差的账本。最直观的工具是可靠性图(Reliability Diagram):把所有预测分数按大小分成若干个桶(比如 0~0.1、0.1~0.2……),横轴画每个桶的平均预测概率,纵轴画这个桶内的真实点击频率。如果所有点都落在对角线上,说明完美校准;如果点在对角线下方,说明模型过自信——它说的概率比实际高。

光看图不够精确,还需要两个数字指标。Brier Score 直接计算预测概率与真实标签的均方误差,相当于每一条样本的“预测偏差”的平方求和再平均,越小越好。期望校准误差(ECE) 则把可靠性图中的偏差按桶加权汇总,它先对每个桶求“平均预测概率与真实频率之差的绝对值”,再按桶内样本占比加权。二者衡量的是同一件事的两种切面:Brier 关心逐样本误差,ECE 关心分桶后的系统性偏差。

\[

\text{Brier} = \frac{1}{N}\sum_{i=1}^{N}\left(\hat{p}_i - y_i\right)^2

\]

1. 预测值:\(\hat{p}_i\) 是第 \(i\) 条样本的模型输出概率,比如模型说“这条广告点击率 0.8”。

2. 真实标签:\(y_i\) 是第 \(i\) 条样本的真实结果,点击为 1、未点击为 0。

3. 平方差:\((\hat{p}_i - y_i)^2\) 惩罚偏差,偏差越大惩罚越重,体现了“失之毫厘、谬以千里”。

4. 平均:\(\frac{1}{N}\sum\) 对所有 \(N\) 条样本取平均,得到整体校准质量。

教练的账本就这样建立起来:可靠性图是“体检报告”,Brier 是“综合评分”,ECE 是“分项扣分”。有了它们,射击手的每一次“自评”都能和“实评”对照,校准的效果也能被客观衡量。

Platt Scaling:给准星一个整体修正

教练看完成绩单后说:“你的枪法没问题,但准星偏了。我帮你调一下。”这就是 Platt Scaling 的思路——不重新训练模型,只学习一个简单的校正函数。做法是:把模型的原始分数先取 logit 变换(相当于把概率映射回实数空间),然后做一次线性变换 \(a z + b\),最后再用 Sigmoid 压回 0 到 1。参数 \(a\) 相当于“放大镜”,决定原始分数的拉伸程度;参数 \(b\) 相当于“平移”,修正系统性的高估或低估。

如何确定 \(a\) 和 \(b\)?用一份独立校准集(不能用训练集,否则会过拟合)来拟合,目标是最大化对数似然——通俗说,就是让校准后的概率和真实标签“对得上”。一个广为人知的特例是温度缩放(Temperature Scaling):只留一个参数 \(T\),令 \(a=1/T\)、\(b=0\)。当 \(T>1\) 时,输出分布被压得更加平滑温和;当 \(T<1\) 时,分布变得更尖锐自信。

\[

\hat{p}_{\text{cal}} = \sigma(a z + b) = \frac{1}{1 + e^{-(a z + b)}}

\]

1. 原始分数:\(z = \log\frac{\hat{p}}{1-\hat{p}}\) 是模型输出概率的 logit 变换,取值范围从负无穷到正无穷。

2. 线性变换:\(a z + b\) 对 logit 空间做拉伸与平移,\(a>0\) 时保持单调性,排序不受影响。

3. Sigmoid 映射:\(\sigma(\cdot)=\frac{1}{1+e^{-(\cdot)}}\) 把实数重新压回 \([0,1]\) 区间。

4. 校准概率:\(\hat{p}_{\text{cal}}\) 是修正后的概率,它继承了模型的排序能力,同时修正了概率绝对值。

调准星的好处是“一次修正、全局生效”:无论射击手站在哪个位置,准星的偏移都是统一的,所以 Platt 是稳定又经济的选择。但它也假设偏差的形式比较简单——如果偏差是弯弯曲曲的非线性,单一准星就不够用了。

Isotonic Regression:一张实测对照表

另一位教练提出了不同方案:“不猜准星歪多少了,我们直接做实验。”他把靶子从 0 环到 10 环划分成许多环带,每一环都安排大量实弹射击,记录“射击手以为的环数”和“实际的环数”,做出一张实测对照表。今后射击手说“我瞄的是 7 环”,就直接查表报告真实环数。这就是 Isotonic Regression(保序回归)的思想:不假设任何函数形式,直接用数据拟合一张“阶梯式”的对照表。

保序回归的目标是:找到一组拟合值,让它们与真实标签的平方误差最小,同时强制要求拟合值随原始分数单调不减——分数越高,校准后的概率也越高,排序逻辑不被破坏。由于输出是分段常数(阶梯),它比方正的 sigmoid 灵活得多,能捕捉任意形状的偏差,当然代价是需要大量数据才能把每一级“台阶”估计准确。

\[

\min_{\hat{y}} \sum_{i=1}^{n}\left(y_i - \hat{y}_i\right)^2 \quad \text{s.t.} \quad \hat{y}_1 \le \hat{y}_2 \le \cdots \le \hat{y}_n

\]

1. 真实标签:\(y_i\) 是按原始分数排序后第 \(i\) 条样本的真实结果(点击为 1、未点击为 0)。

2. 拟合值:\(\hat{y}_i\) 是待求解的校准后概率,也是阶梯函数在某一段上的取值。

3. 平方误差和:\(\sum (y_i - \hat{y}_i)^2\) 衡量拟合值与真实标签的差距,目标是把它最小化。

4. 单调约束:\(\hat{y}_1 \le \hat{y}_2 \le \cdots \le \hat{y}_n\) 强制拟合值单调不减,保住排序能力。

这张“对照表”的求解由 PAV 算法(Pool Adjacent Violators) 完成:从最底层开始,一旦发现相邻两块的均值违反单调性(前面比后面大),就合并成一块并取平均,不断重复直到整体单调。对照表灵活、贴切,但也更“挑剔”——数据不够时,它容易把噪声也当成规律。

方法选型:调准星还是列对照表

两位教练风格迥异,什么时候该找谁?关键看靶场的数据条件。Platt Scaling 只有两个参数 \(a\) 和 \(b\),哪怕只有几千条样本也能拟合得比较稳,就像调一次准星,简单可靠;而 Isotonic Regression 是非参数的,要估计很多级台阶,需要充足的样本量,数据一少就容易“照着噪声打”,过拟合风险高。样本量是选型的第一把尺子。

第二把尺子是偏差的复杂程度。如果模型的误差来源比较单一——比如整体高估、或整体方差偏大——Platt 的线性修正足够;如果可靠性图弯弯曲曲,不同分数段的偏差方向都不一样,Platt 就力不从心,而灵活的 Isotonic 阶梯能逐段贴合。第三把尺子是场景的稳定性:线上环境经常面临分布漂移,Platt 参数少、更新快,适合高频迭代;Isotonic 需要重新积累数据拟合阶梯,更新代价更高,往往用于离线低频校准。

实践中的经验法则很简单:小样本、求稳、在线场景,优先 Platt Scaling;大数据、非线性偏差明显、离线批量处理,优先 Isotonic Regression;两者也可以级联——先用 Platt 做粗调,再用 Isotonic 精修,兼顾稳定与灵活。回到射击场:人手不够时先调准星,弹药充足时再列对照表,最讲究的教练两者都做。

CTR 应用:真金白银的出价依据

校准在 CTR 预估里不是“锦上添花”,而是“真金白银”。广告系统最核心的公式是 eCPM(千次展示期望收益):广告主出价乘以预估点击率。这里的 pCTR 不是模型拿来排序的分数,而是直接参与乘法计算的概率绝对值。如果 pCTR 高估,系统会把不值钱的流量当成宝贝来争抢,预算像漏水的水桶一样流走;如果 pCTR 低估,真正优质的流量又被拱手让人。排序只用相对大小,竞价却要用绝对数值——这正是校准不可替代的原因。

\[

\text{eCPM} = \widehat{\text{pCTR}} \times \text{Bid} \times 1000

\]

1. 预估点击率:\(\widehat{\text{pCTR}}\) 是模型输出的校准后点击概率,必须接近真实点击率。

2. 广告出价:\(\text{Bid}\) 是广告主为单次点击愿意支付的价格(单位通常为元)。

3. 乘 1000:把单次点击收益换算为千次展示(impression)的期望收益,即 eCPM。

4. 综合结果:\(\text{eCPM}\) 参与广告竞价排序,eCPM 越高,广告获得展示的机会越大。

流量分配同样依赖校准:一个广告平台同时服务多个广告主,要把预算分配到不同的流量上,必须依赖“每块钱能换来多少点击”的准确估计。校准让所有模型输出的概率站在同一把尺子上——不同场景、不同模型的分数因此可比。射击手的成绩单如今变成了广告主的花钱指南,校准就是那张把“感觉”换算成“价值”的标准汇率表。

实践要点:把校靶变成日常制度

优秀的射击队不会只在赛前调一次准星,而是建立一套日常制度。校准也是如此,落地的关键在于流程化。第一件要事是数据划分:永远用独立的校准集拟合校准参数,绝不能用训练集——否则校准层会记住训练集的噪声,就像教练照着射击手的“自评”而非“实评”来调准星。第二件要事是分场景校准:不同场景(首页推荐、搜索广告、详情页)的数据分布差异巨大,应当分别建桶、分别拟合,避免“一张对照表走天下”。

第三件要事是在线更新。数据分布会漂移,模型也会迭代,校准参数需要随之滚动更新。一种轻量做法是用指数加权移动平均(EWMA)平滑地追踪最新统计量,让校准层跟上环境变化。

\[

\hat{\mu}_{t+1} = (1 - \alpha)\,\hat{\mu}_t + \alpha\,x_t

\]

1. 新观察值:\(x_t\) 是当前时刻的新统计量,比如最新一个时间窗内的实际点击率。

2. 历史估计:\(\hat{\mu}_t\) 是上一时刻的累计估计值,承载了历史信息。

3. 平滑系数:\(\alpha\) 控制新旧信息的权重,\(\alpha\) 越大对新数据越敏感。

4. 加权合并:\((1-\alpha)\hat{\mu}_t + \alpha x_t\) 得到新的估计,实现平滑更新。

最后是效果监控:线上持续追踪 Brier Score 与 ECE,一旦发现偏差持续扩大,立即触发重新校准。冷启动的新模型没有历史数据,可以先借用同类场景的校准参数,再随着数据积累逐步替换。射击队的制度让每一次校准都有据可依、有账可查——这正是校准从“一次性修正”走向“长期工程能力”的关键。

AI 应用场景

实时竞价广告系统(RTB)

阶段:模型后处理与收益优化

解决的问题:传统广告系统中,CTR 模型直接输出的概率未校准,导致广告主出价与真实流量价值脱节。高估 pCTR 会让预算浪费在低价值流量上,低估则错失优质流量。校准层将模型分数映射到真实点击概率,使 eCPM 计算有据可依。

具体案例:某 DSP 平台在模型之后接入 Platt Scaling 校准层,用最近一周的曝光点击日志拟合参数,并将校准前后对比。上线后,相同预算下广告点击量提升约 8%,成本波动率下降明显,广告主 ROI 更稳定。

多场景流量统一分配

阶段:跨场景模型融合与流量调度

解决的问题:同一个推荐产品有首页、搜索、详情页等十余个场景,各场景的模型独立训练,分数尺度不同、无法直接比较。传统做法是人工为每个场景调阈值,效率低且不精确。用 Isotonic Regression 将各场景分数校准到统一的概率尺度后,可以全局比较流量价值。

具体案例:某电商平台为每个场景分别训练保序回归校准器,将校准后的 pCTR 作为统一“价值度量”,用于跨场景预算分配。大促期间,校准后的分配方案使整体 GMV 提升约 5%,且各场景的流量占比更符合预期。

Python 演示

python105 行
import numpy as np  def sigmoid(z):    return 1.0 / (1.0 + np.exp(-z))  def logit(p):    p = np.clip(p, 1e-6, 1 - 1e-6)    return np.log(p / (1 - p))  def generate_data(n=20000, seed=42):    rng = np.random.default_rng(seed)    z = rng.normal(0, 1.5, n)    q = sigmoid(z)                      # 模型输出的未校准分数    p_true = sigmoid(z - 1.2 + 0.5 * np.sin(z))  # 真实点击率(带非线性偏差)    y = rng.binomial(1, p_true).astype(float)    return q, y  def platt_fit(q_train, y_train):    z = logit(q_train)     def nll(theta):        a, b = theta        p = sigmoid(a * z + b)        return -np.mean(y_train * np.log(p + 1e-9) +                        (1 - y_train) * np.log(1 - p + 1e-9))     from scipy.optimize import minimize    res = minimize(nll, [1.0, 0.0], method="BFGS")    return res.x  def platt_predict(q, a, b):    return sigmoid(a * logit(q) + b)  def pava(y):    blocks = []    for v in y:        blocks.append([v, 1.0])        while len(blocks) >= 2 and \                blocks[-2][0] / blocks[-2][1] > blocks[-1][0] / blocks[-1][1]:            s = blocks[-2][0] + blocks[-1][0]            c = blocks[-2][1] + blocks[-1][1]            blocks[-2:] = [[s, c]]    out = np.empty_like(y)    idx = 0    for s, c in blocks:        out[idx:idx + int(c)] = s / c        idx += int(c)    return out  def isotonic_fit(q_train, y_train):    order = np.argsort(q_train)    q_sorted = q_train[order]    y_sorted = y_train[order]    return q_sorted, pava(y_sorted)  def isotonic_predict(q, q_sorted, fit):    return np.interp(q, q_sorted, fit)  def brier_score(pred, y):    return np.mean((pred - y) ** 2)  def ece(pred, y, bins=10):    edges = np.linspace(0, 1, bins + 1)    idx = np.clip(np.searchsorted(edges, pred, side="right") - 1, 0, bins - 1)    val = 0.0    for b in range(bins):        mask = idx == b        if mask.sum() == 0:            continue        val += mask.sum() / len(y) * abs(y[mask].mean() - pred[mask].mean())    return val  def main():    q, y = generate_data()    split = len(q) // 2    q_tr, y_tr = q[:split], y[:split]    q_va, y_va = q[split:], y[split:]     print("未校准  Brier=%.4f ECE=%.4f" %          (brier_score(q_va, y_va), ece(q_va, y_va)))     a, b = platt_fit(q_tr, y_tr)    q_platt = platt_predict(q_va, a, b)    print("Platt    Brier=%.4f ECE=%.4f (a=%.2f b=%.2f)" %          (brier_score(q_platt, y_va), ece(q_platt, y_va), a, b))     q_sorted, fit = isotonic_fit(q_tr, y_tr)    q_iso = isotonic_predict(q_va, q_sorted, fit)    print("Isotonic Brier=%.4f ECE=%.4f" %          (brier_score(q_iso, y_va), ece(q_iso, y_va)))  if __name__ == "__main__":    main()
目的:模拟一个“过自信”的 CTR 模型,分别用 Platt Scaling 和自实现的 PAV 保序回归做校准,对比校准前后的 Brier Score 与 ECE。
  1. p_true = sigmoid(z - 1.2 + 0.5 * np.sin(z))构造带非线性偏移的真实点击率,模拟模型在 logit 空间同时存在线性与非线性偏差。
  2. def platt_fit(q_train, y_train)在独立校准集上拟合 Platt 参数,使用极大似然(最小化交叉熵)。
  3. p = sigmoid(a * z + b)Platt 校准核心:在 logit 空间做线性变换再压回概率。
  4. def pava(y)实现 PAV 算法:相邻块均值违反单调性时合并,直到整条序列单调。
  5. blocks[-2:] = [[s, c]]将两个违反单调性的相邻块替换为合并后的新块,是算法的关键一步。
  6. np.interp(q, q_sorted, fit)用阶梯函数对新样本做查表插值,得到 Isotononic 校准概率。
  7. def ece(pred, y, bins=10)分桶计算期望校准误差,加权平均各桶的置信度与真实频率之差。

常见误区

误区模型最后一层是 Sigmoid,输出的值在 0 到 1 之间,那它当然就是点击概率啊!我看到 0.8 就认为有 80% 的人会点。

正解Sigmoid 只保证把任意实数压缩到 [0,1] 区间,并不保证数值等于真实概率。模型可能过自信或欠自信,就像射击手的“手感”可能系统性地偏离真实环数。判断一个分数是不是概率,要看可靠性图:把输出 0.8 的样本收集起来,如果真实点击率真的接近 80%,才是概率;否则只是“看起来像概率”的分数。

为何常见:神经网络输出层用 Sigmoid 与“二分类概率”在教科书里常常绑定出现,初学者很容易把“值域正确”误当成“语义正确”。

误区校准前后 AUC 一点不变,那校准就是在做无用功。反正模型排序已经够好了,概率准不准无所谓。

正解AUC 只衡量排序能力,不衡量概率绝对值。CTR 预估在广告竞价中直接参与 eCPM 乘法计算,高估 20% 与低估 20% 对出价的影响天差地别。校准的作用不是“重新排序”,而是把分数放到正确的绝对值刻度上——就像一把尺子刻度印错了,用它量东西的相对长短没问题,但报出的绝对长度全是错的。

为何常见:评估排序模型时大家习惯了只看 AUC/NDCG 等排序指标,容易忽略 Brier/ECE 这类概率指标,于是低估了校准的独立价值。

误区Isotonic Regression 是非参数的、更灵活,所以它肯定比只有两个参数的 Platt Scaling 更准。直接无脑上 Isotonic 就对了。

正解灵活是双刃剑。非参数方法需要大量样本才能把每一级阶梯估计稳,数据少时会把噪声也拟合进去,产生严重过拟合。Platt 只有两个参数,在小样本下往往更稳健。实践中应该按样本量和偏差复杂度选型:样本多、偏差非线性强用 Isotonic;样本少、求稳定用 Platt。

为何常见:“越复杂越强大”的直觉在机器学习中很常见,但忽略了对样本量和泛化能力的约束。

误区模型是在训练集上学的,校准也在训练集上拟合不就行了?反正都是同一个模型的数据。

正解校准层如果放在训练集上拟合,会把训练集的噪声也当作规律记住,导致校准参数过拟合。正确做法是留出一份独立校准集,确保校准参数反映的是模型在未见数据上的真实偏差。形象地说,射击手的准星要根据正式比赛的实弹成绩来调,而不是根据他平时打固定靶的“自我感觉”来调。

为何常见:训练集、验证集、测试集的划分意识不牢固,加上“多一点数据更好”的直觉,容易把校准集省掉。

误区校准层上线时效果不错,之后就不用管了。模型反正定期重训,校准参数跟着走就行。

正解数据分布会漂移,新模型上线后偏差模式也会改变,校准参数会逐渐失效。需要持续监控 Brier/ECE,并用滑窗或 EWMA 的方式在线更新校准参数。就像射击手的准星会因为磨损、换枪而偏移,优秀射击队会定期复验成绩,而不是一次调准就再也不看。

为何常见:把校准当成“一次性后处理”而非“需要持续维护的在线组件”,忽略了真实业务环境中的分布漂移问题。

面试题

Q1. 模型输出 Sigmoid 概率后,下列说法正确的是?

单选题 · easy

  • A.可直接当作真实点击概率
  • B.不可直接使用需要校准← 正确答案
  • C.大模型输出无需再校准
  • D.归一化之后即可放心使用

答案:B。Sigmoid 只保证数值落在 0 到 1,不保证等于真实概率。模型常有过自信或欠自信的系统性偏差,所以需要额外校准。A 忽略了值域与语义的区别;C、D 也没有理论依据,大模型同样存在校准问题。

Q2. Platt Scaling 的映射形式是什么?

单选题 · easy

  • A.直接线性修正预测概率
  • B.logit 变换加 Sigmoid 输出← 正确答案
  • C.分桶取均值作为新概率
  • D.最大值最小值做归一化输出

答案:B。Platt Scaling 先把概率做 logit 变换到实数空间,再做线性变换 \(az+b\),最后用 Sigmoid 压回 [0,1]。A 缺少 logit 变换;C 是保序回归的思路;D 是常见的归一化手段,与校准无关。

Q3. 校准不会改变模型的哪个性质?

单选题 · easy

  • A.概率绝对值大小分布
  • B.样本之间的相对排序← 正确答案
  • C.模型对噪声的敏感程度
  • D.输出概率的可解释性

答案:B。Platt(a>0)与 Isotonic 都是单调变换,因此会保持样本间的相对排序,AUC 不变。校准改变的是概率绝对值与真实频率的对应关系,不是排序。C、D 与校准无直接关系。

Q4. 以下哪个指标专门衡量概率校准质量?

单选题 · mid

  • A.AUC 排序能力指标
  • B.Brier Score 概率指标← 正确答案
  • C.NDCG 排序质量指标
  • D.召回率覆盖能力指标

答案:B。Brier Score 计算预测概率与真实标签的均方误差,直接反映概率与事实的贴合程度。AUC 和 NDCG 都是排序指标,不关心绝对值;召回率衡量正样本覆盖,与校准无关。

Q5. ECE(期望校准误差)的计算思路是什么?

单选题 · mid

  • A.对全体样本误差直接求平均
  • B.分桶后比较置信度与频率← 正确答案
  • C.对排序位置做加权求和
  • D.计算预测熵与真实熵之差

答案:B。ECE 先把预测概率分成若干桶,对每个桶计算“平均预测概率”与“真实正例频率”的绝对差,再按桶内样本占比加权求和。A 是 Brier 的粗略思路;C、D 与校准度量无关。

Q6. 关于校准与排序的关系,下列说法正确的是?

多选题 · mid

  • A.校准不会改变样本之间的排序← 正确答案
  • B.校准会显著提升模型的 AUC
  • C.校准修正概率的绝对值尺度← 正确答案
  • D.校准让概率更接近真实频率← 正确答案

答案:ACD。Platt(a>0)和保序回归都是单调变换,保持相对排序,因此 AUC 不变,A 对 B 错。校准的核心价值正是修正概率绝对值,让预测更接近真实点击率,C、D 正确。

Q7. 小样本场景下,校准方法应优先选择?

单选题 · hard

  • A.保序回归灵活拟合数据
  • B.Platt Scaling 参数少稳健← 正确答案
  • C.两种方法效果完全相同
  • D.数据太少直接跳过校准

答案:B。Platt 只有两个参数,小样本也能稳定拟合;Isotonic 非参数、台阶多,小样本极易过拟合。跳过校准则模型输出概率不可信。小样本求稳,选 Platt。

Q8. 广告竞价中 pCTR 参与 eCPM 计算的作用是?

单选题 · hard

  • A.决定广告最大展示频次
  • B.与出价相乘得到期望收益← 正确答案
  • C.控制创意素材的渲染质量
  • D.调节点击后的转化概率

答案:B。eCPM = pCTR × Bid × 1000,pCTR 是期望收益公式中的关键乘子。它要求概率绝对值准确,排序相对值在这里不够用。频次、素材、转化率都与 eCPM 中的 pCTR 无直接关系。

Q9. 点击率被系统性高估会带来哪些后果?

多选题 · hard

  • A.广告出价虚高浪费预算← 正确答案
  • B.预算消耗过快难以控制← 正确答案
  • C.竞价优势但缺乏真实转化← 正确答案
  • D.排序不变所以没有任何影响

答案:ABC。高估 pCTR 使 eCPM 偏大,系统会为低价值流量支付过高价格,预算加速消耗,且拍下的流量实际转化不足。虽然单模型内排序不变,但竞价与流量分配依赖绝对值,影响巨大,D 错误。

Q10. 线上数据分布发生漂移后,已校准模型应如何处理?

单选题 · extreme

  • A.校准参数仍然持续有效
  • B.需要重新拟合校准参数← 正确答案
  • C.只调整 Sigmoid 的温度即可
  • D.校准层无法再被二次更新

答案:B。分布漂移会让模型输出与真实频率的关系改变,校准参数会失效,需要用新数据重新拟合。温度缩放只是 Platt 的特例,能否解决取决于漂移形式,不能一概而论;校准层当然可以滚动更新,D 错误。