资讯详情

模型纠偏之保序回归

模型纠偏背景

广告系统和推荐系统有显著差异,广告模型需要绝对准确的估值,大多数推荐模型只需要一致的顺序,主要是因为广告模型设计到收费逻辑,所以需要确保绝对估值的准确性,模型水平,可以确保特征,数据样本准确,尽管如此,模型可能有估计偏差,所以在模型水平之外,需要更强有力的纠偏策略,这也是本文介绍的要点 reference

本文主要参考

[1]Predicting Good Probabilities With Supervised Learning [2]ACTIVE SET ALGORITHMS FOR ISOTONIC REGRESSION; A UNIFYING FRAMEWORK [3]1.15. Isotonic regression

两种纠偏方法

Platt Calibration

模型输出值f(x),platt calibration的方法是将f(x)作为输入,训练交叉熵模型 在这里插入图片描述 f对原模型进行预估,A以B为训练参数 相当于再设置一层模型来调整参数

保序回归 Isotonic Regression

保序回归问题的定义: 这里用sklearn的定义: 上式 w i w_i wi 样本i的权重, y i y_i yi 样本的真实值(实际上通常是后验), y i ^ \hat{y_i} yi^ 要求解的值, x i x_i xi​为样本i的模型预估值,需要保证的是对于任意的 x i ≤ x j x_i \le x_j xi​≤xj​都有 y i ^ ≤ y j ^ \hat{y_i} \leq \hat{y_j} yi​^​≤yj​^​ 这也就是保序的由来 保序的场景:在广告系统中,模型预估值会作用到后面的ranking排序,对于一个pv有n条候选,会预估出n个预估值 x i x_i xi​ ,同时会有对应的n个历史统计后验值 y i y_i yi​(一般是离线统计存在redis或者其他的存储介质里),保序回归需要在不能影响模型预估的序的情况下,做到纠偏值 y i ^ \hat{y_i} yi​^​ 尽量接近后验 y i y_i yi​ 求解方法 求解上述问题的方法又多种,这里介绍常见的一种,称之为PAVA的算法(reference[2]),PAV求解步骤如下 ​

翻译成人话,举个例子 5个样本,模型 x i x_i xi​ 预估值分别是 0.1 0.2 0.3 0.4 0.5,假设样本 w i w_i wi​ 权重都是1,真实后验 y i y_i yi​ 值是 0.3 0.4 0.2 0.0 0.6,求解步骤如下:

  • 对元组 ( x i , y i ) (x_i,y_i) (xi​,yi​)先按照 x i x_i xi​从小到大排序(以增序为例)
  • 从 x 0 x_0 x0​ 对应的 y 0 y_0 y0​开始,观察其后面的后验值是否大于前面,观察到0.3<0.4是递增序,那么 y i ^ \hat{y_i} yi​^​=0.3记为第一个 b l o c k 0 block_{0} block0​ ,同时将索引移动到 x 1 x_1 x1​
  • 发现0.2<0.4, 则将 y 1 y_1 y1​ 和 y 2 y_2 y2​ 都记为 b l o c k 1 block_{1} block1​,计算 b l o c k 1 block1 block1的平均值为0.3(如果权重不是1的话,那么计算加权平均值),再往后面观察,发现0.1仍然小于0.3,那么将0.1 也加到 b l o c k 1 block1 block1中,同时重新计算平均值为0.2,继续观察0.2<0.6,则 b l o c k 1 block1 block1停止拓展,其预估值为0.2
  • 继续移动索引,到0.6,因为是最后一个元素且是新的 b l o c k block block,则 b l o c k 3 block3 block3为0.6
  • 现在有3个 b l o c k block block,每个 b l o c k block block对应的值为0.3 0.2 0.6,显然仍然需要继续计算,重复上面计算过程最终会得到2个 b l o c k block block,第一个 b l o c k block block包含前4个元素,值为0.225,第二个 b l o c k block block包含一个元素,值为0.6

代码验证一下:

from sklearn.isotonic import IsotonicRegression from matplotlib.collections import LineCollection x = [0.1,0.2,0.3,0.4,0.5] y = [0.3,0.4,0.2,0.0,0.6] ir = IsotonicRegression() y_ = ir.fit_transform(x, y) y_ array([0.225, 0.225, 0.225, 0.225, 0.6 ]) 其纠偏图如下 ​

最后补充一个比较生动展示纠偏过程的动图,作为总结(图片来自Isotonic Regression,非营利性目的使用,若有侵权,请联系该账号简介中的邮箱,速删 ): ​

标签: 纠偏传感器光电开关hw

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司