模型校准

在广告场景下,我们不仅模型对样本的排序能力,模型的预估准确性也是需要关注的。因为预估值的准确与否会影响计费,预估不准会导致我们的计费出现过高或者过低的情况。模型校准的评估一般使用可靠性图(reliability diagram)。

可靠性图的做法比较简单,先把所有样本按照预估值进行排序,并将每个样本分到对应的bin中。然后计算每个bin中的样本的预估均值和实际label的均值;最后搜集所有bin的预估均值和label均值,绘制出来就得到可靠性图。下面就是一个可靠性图示例。

从图中,我们可以看到模型在哪个区间预估的不准,也可以看到到底是偏低了还是偏高了。

下面说下模型校准的具体方法。主要有两种方法,一个是Platt Scaling,一个是Isotonic Regression,即保序回归。

Platt Scaling 比较简单,该方法以预估模型的输出作为输入特征,使用逻辑回归模型重新预估一遍,损失函数为交叉熵损失。该方法引入的参数较少,由于只有一个特征,所以参数只有一个w和b,且都是标量。需要注意的是,该方法的训练数据不能和预估模型的训练数据一样,因为两个模型都去拟合同一份数据,很容易出现过拟合现象。

保序回归好像用的更多一些。该方法使用PAV(Pool Adjacent Violators)算法 来进行校准。

保序回归的过程是这样的:

首先,搜集reliability diagram需要的数据,即每个样本的预估值和真实值。

然后,按照样本的预估值进行升序排列,将样本分到不同的分桶中。统计分桶中的样本的预估均值和实际均值。

最后,应用PAV算法对实际均值序列进行调整。调整后的实际均值序列就是有序的,即单调非递减。且不违背原始序列的排序。

上线时,将每个分桶的校准后的预估值(应该是真实均值)做成词表,线上先根据预估值判断落到了哪个分桶(如果分桶大小相等,可以直接根据预估值得到落入哪个分桶;分桶大小不等时可以使用二分查找),然后使用这个分桶中的校准值作为校准后的预估值。

引用校准时需要特别注意的一点,为了不引入偏差,校准用的数据集和模型训练的数据集是不同的。

另外,分桶数目需要根据实验来确定,理论上bin分得越小越好,但是也得保证bin内的样本数量不能太少,不然校准会不准确。

参考:

使用 Isotonic Regression 校准分类器

宁雨 /
Published under (CC) BY-NC-SA in categories MachineLearning  tagged with
comments powered by Disqus