在互联网精准广告中,可以从多个角度来评估一个 CTR 模型的性能,但通常以 AUC 作为模型评估的最直接指标,直观上讲,AUC 是从排序能力的角度来对模型进行评估。下面将详细解释 AUC 的含义及其计算方式,
2.1 ROC 曲线理解
ROC(Receiver Operating Characteristic)曲线和 AUC 常被用来评价一个二值分类器的优劣,分类器算法,常用的评价指标主要有 precision,recall,F-score;
一个典型的 ROC 曲线如下图所示:
ROC 曲线的横坐标为 false positive rate(FPR),纵坐标为 true positive rate(TPR),下面详细说明 FPR 和 TPR 是如何定义的:
TP:预测是正的样本,实际上也是正的样本
TP:预测是正的样本,实际上是负样本
FN:预测是为负样本,实际上是正样本
TN:预测是为负样本,实际上也是负样本
正确率:测试出来准确的正样本 / 所有的正样本:TP/(TP + FP)
召回率:测试出来正确的正样本 / 所有的正样本:TP/(FP + FN)
TPR:true positive rate,TPR = TP / (TP + FN),表示预测为正的正确结果 TP 在所有正样本 T 中的占比,显然 TPR 越大,模型的预估能力更好;
FPR:false positive rate,FPR = FP / (FP + TN),表示预测为正的错误结果 FP 在所有负样本 F 中的占比,显然 FPR 越大,模型的预估能力越差;
接下来,我们考虑 ROC 曲线上的四个点和一条线:
- 第一个点 (0, 1),即 FPR = 0, TPR = 1,这意味着,FN = 0,并且 FP = 0,这是一个完美的分类器,将所有的样本都正确分类;
- 第二个点 (1, 0),即 FPR = 1, TPR = 0,这意味着,TP = 0,并且 FN = 0,这是一个最糟糕的分类器,因为它成功避开了所有的正确答案;
- 第三个点 (0, 0),即 FPR = 0, TPR = 0,这意味着,TP = 0, FP = 0,这意味着,分类器将所有的样本都预测为负样本;
- 第四个点 (1, 1) 即 FPR = 1, TPR = 0,这意味着,FN = 0, TN = 0,也就是分类器将分类器将所有的样本都预测为正样本;
经过以上分析,我们可以断定,ROC 曲线越接近左上角,分类器的性能越好。
下面考虑 ROC 曲线 y=x 上的点。这条对角线上的点其实表示的是一个采用随机猜测策略的分类器结果,例如 (0.5, 0.5),即 TP = FN, FP = TN,表示该分类器随机对于一半的样本猜测为正样本,另外一半的样本为负样本。
这里需要思考一个问题:
给一堆训练样本,那么得到一个分类结果,得到 FPR 和 TPR,那么对应的是 ROC 上的一个点,ROC 曲线是如何获取的呢?
Wikipedia 上是这么解释的:
In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.
这里的关键在于 “as its discrimination threshold is varied”,如何理解?我们忽略了分类器的一个重要功能 “概率输出”,即表示分类器某个样本具有多大的概率属于正样本(或者负样本),这里应该对分类器判断为正样本的概率阈值进行一定的调整,获得多组坐标点数据,进而得到 ROC 曲线。
2.2 ROC 曲线绘制
假设模型 M 对样本进行预测,当预测值大于阈值 r 时,采用下面的函数来预测最后的结果:
然后,对每一个 r,模型对所有的样本预测一遍,计算所得到的 TPR 和 FPR,对所有的点 (FPR, TPR) 在 ROC 图上进行标注就可以得到 ROC 曲线,AUC 就是指 ROC 曲线下方的面积。举一个例子来说明,下表中有 10 个样本,5 个正样本,5 个负样本,即 T = 5, F = 5,
第一列表示模型 M 对样本的打分,第二列表示样本实际为正 / 负样本,我们让 r 从正无穷逐渐减小到负无穷,对每一个区间的 r 计算 (FPR,TPR),计算结果如下:
以上就是 ROC 曲线的含义及其绘制步骤。
3.1 AUC 计算
(1)方法一:计算 ROC 面积法
由上文所述,AUC 即为 ROC 曲线下方的面积,按梯形法计算上图的面积为 0.62。
(2)方法二:随机抽选正负样本对法
在所有标注样本中,正样本共有 T 个,负样本共有 F 个,如果随机抽取一个正样本和负样本,共有 TF 个 pair,其中如果有 s 个 pair 的正样本 pair 满足正样本的 score 高于负样本(权重为 1),v 个 pair 的正负样本 score 相同(权重为 0.5),则 AUC 就等于:
(s + 0.5 v) / (T F)
上例中,s = 15, v = 1,则 AUC = ( 15 + 1 0.5) / (5 * 5),和梯形法计算结果一致。
整体上对于一个样本 pair:的权重 Wij 的计算如下:
s(i) 和 s(j) 分别表示正样本和负样本的 score。
(3)方法三:排序求和法
上面提到了两种计算 AUC 的方法,一种梯形法,另一种权重法,然而这两种方法在单机上计算复杂度比较高,下面这种方式计算 AUC 比较简单:
我们可以将所有样本按升序排好后,通过样本的序号 (或者是排序位置,从 1 开始)rank 来计算,计算公式如下:
AUC = ((所有正样本的 rank 相加) - T(T + 1)/2) / (T F)
对相等 score 的样本,需要赋予相同的 rank,即把所有这些 score 相等的样本的 rank 和取平均值。
上表中结果重新排序如下:
所有正样本的 rank 相加 = 10 + 9 + (5 + 6) /2 + 4 + 2 = 30.5,注意 5 和 6 由于 score 相同,需要均分 rank 和。
AUC = (30.5 - 5 6 / 2) / (5 5) = 0.62
3.2 AUC 理解
上例中给出了 10 个样本,其中 5 个正样本 5 个负样本,1 表示样本发生了 click,0 表示样本有曝光但是没有被 click,score 表示样本的预估 ctr(pCtr),我们的期望是我们的预估的 ctr 高的广告,其实际应该有 click,这样就说明我的预估是有效且准确的,当然没有 click 发生也是可以理解,预估目前还做不到 100% 的准确。也就是说,被点击的样本预估的 pCtr 应该要高于没有被点击的样本,当所有被点击的样本 pCtr 都要大于未被点击的样本 pCtr 时,模型是最优的,当然这只是理想情况。
理想的排序能力是按照 pCTR 进行预估降序排列后,所有的正样本都排在负样本的前面,即预估会排在前面的广告都会被 click,模型优化的目标就是朝这个理想目标靠拢。
AUC 的值不会大于 1,又由于 ROC 曲线一般都处于 y=x 这条直线的上方,所以 AUC 的取值范围一般在 0.5 到 1 之间。使用 AUC 作为评价标准是因为很多时候 ROC 曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应 AUC 更大的分类器效果更好。而且 ROC 越靠近左上角越好,对应着 AUC 面积越大越好。
先 AUC 是一个概率值,当随机挑选一个正样本以及一个负样本时,当前的分类器根据计算得到的 score 值将这个正样本排在负样本前面的概率就是 AUC 值。当然 AUC 越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
为什么使用 ROC?既然有这么多评价标准,为什么还要用 ROC 和 AUC 呢?因为 ROC 有个很好的特性:当测试机中的正负样本分布变化的时候,ROC 曲线能够保持不变。
在实际的数据集中,经常会出现类不平衡现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。