性能评估

8/2/2021 性能评估

# 请说出几种离线评估的指标。

1、准确率

分类准确率是指分类正确的样本占总样本个数的比例,即

其中,为被正确分类的样本个数,为总样本个数。

准确率较直观,可解释性较强,但当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。如负样本占99%,那么分类器把所有样本都预测为负样本也可以获得99%的准确率。

2、精确率和召回率

精确率是分类正确的正样本个数占分类器判定为正样本的样本个数的比例。

召回率是分类正确的正样本个数占真正的正样本个数的比例。

排序模型中,通常没有一个确定的阈值把预测结果直接判定为正样本或负样本,而是采用TopN排序结果的精确率和召回率来衡量排序模型的性能,即认为模型排序的TopN的结果及时模型判定的正样本,然后计算Precision@N和Recall@N。

3、F1-score

精确率和召回率是矛盾统一的两个指标,为提高精确率,分类器需要尽量在“更有把握时”才把样本预测为正样本,但往往会因过于保守而漏掉很多“没有把握”的正样本导致召回率降低。

为综合反映Presion和Recall的结果,可使用F1-score,它是精确率和召回率的调和平均值。其定义如下:

4、对数损失

在一个二分类问题中,LogLoss的定义如下:

其中,为输入实例的真实类别,为预测输入实例是正样本的概率,为样本总数。

LogLoss是逻辑回归的损失函数,采用LogLoss作为评估函数能够非常直观地反映模型损失函数的变化,非常适用于观察模型收敛情况的评估指标。

5、均方根误差

其中是第i个样本点的真实值,是第i个样本点的预测值,n是样本点的个数。

# 请说出P-R曲线、ROC曲线和AUC的含义和关系。

P-R曲线(Precision-Recall曲线)

为综合评价一个排序模型的好坏,不仅要看模型在不同TopN下的Precision@N和Recall@N,而且最好能绘制出模型的Precision-Recall曲线。

P-R曲线的横轴表示召回率,纵轴表示精确率。对于排序模型来说,其P-R曲线上的一个点代表”在某一阈值下模型将大于该阈值的结果判定为正样本,将小于该阈值的结果判定为负样本时,排序结果对应的召回率和精确率“。

整条P-R曲线是通过从高到低移动正样本阈值生成的。下图中实线代表算法1的P-R曲线,虚线代表算法2的P-R曲线。横轴0点附近代表阈值最大时模型的精确率和召回率。随着召回率的升高,精确率以不同的速度变化,只用一个点的精确率和召回率是不能全面衡量模型性能的。P-R曲线底下的面积越大表示模型的排序能力越好。

ROC曲线(the Receiver Operating Characteristic)曲线的横坐标为False Positive Rate(FPR,假阳性率);纵坐标为True Positive Rate(TPR,真阳性率)。FPR和TPR的计算方法如下:

其中是真实的正样本数量,是真实的负样本数量;TP指的是P个正样本中被分类器预测为正样本的个数,FP指的是N个负样本中被分类器预测为正样本的个数。

ROC也是通过不断移动正样本阈值生成的,动态调整截断点,从最高的得分开始,逐渐调整至最低得分,每个截断点都对应一个FPR和TPR,在ROC图上绘制,连接即可得到ROC曲线。AUC指的就是ROC曲线底下的面积。

# 如何巧妙地绘制ROC曲线?

首先根据样本标签统计出正负样本数量,正样本数量为P,负样本数量为N,接下来,把横轴的刻度间隔设置为,纵轴的刻度间隔设置为;再根据模型输出的预测概率对样本进行排序;依次遍历样本,同时从零点开始绘制ROC曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,直到遍历完所有样本,曲线最终停在(1,1)这个点,ROC曲线就绘制完成了。

# 线下AUC提升,一定会带来线上指标的提升吗?为什么?

不一定。

虽然AUC表示了模型对正样本评分高于负样本的概率,但线下AUC的提高并不总是意味着线上点击率的提高。造成这种不一致现象的一个根本原因是,线下的AUC评估往往是将所有样本混杂在一起进行的:

比如,对于用户维度,线下AUC的提高可能是将一部分用户的正样本排到了另一部分用户的负样本之前导致的,如有两组用户A和B,记用户组A的正负样本集分别为,B组用户的正负样本集为,当前模型排序为,模型改进之后的排序为,AUC提高了,但是对于线上实验而言,点击率不会发生变化,因为对于各组用户而言,他们看到的推荐结果仍然是一样的(A组用户看到的排序为,B组用户看到的排序为)。换言之,B组的用户并不能穿越去点击A组用户的负样本,因而将这一组样本提升到前没有任何意义。

针对这一问题,我们可以对各个维度进行聚合计算AUC,即GAUC,这样就可以消除各个维度之间样本交叉的可能。

此外,线下验证集样本的分布、线上线下特征不一致也会导致AUC变化与点击率变化不一致的现象。

# 如何解决离线和线上auc和线上点击率不一致的问题?

  • 特征不一致

    • 仔细得在上线后排查一下特征传输是否为空,然后尽可能在线实时请求打分的时候落地实时特征,训练的时候就不用特征拼接,只需要根据正负样本生成策略处理一下instance的label。
  • 离线提升不置信

    • 评估指标不合理首先我们要有业务sense,离线设置的指标是否能跟线上真实对应。比如你离线优化ctr模型的auc,那么线上就关注ctr的线上指标,而cvr、留存等都没有关系。
    • 其次,对于线上目标,我们是否可以用更好的离线指标来对应?我同事之前做多个position的整体排序优化,那么相对于AUC和GAUC,使用NDCG就更加合理
  • 数据分布不一致

    • 离线训练模型的本质是,用公式去拟合训练样本集合的分布。那么离线指标提升了,只能说明对于这个样本分布我们找到了一个更好的公式去拟合,可是训练样本分布并不等同于真实样本分布。
    • 其原因有很多,比较常见的是我们在处理数据经常会用负采样,可是这种采样哪怕再均匀也一定有偏;其次推荐场景下通常我们会选取展示未点击作为负样本的一部分,那么未展现的样本我们并不知道是否会被点击,这不就是让新模型去拟合旧模型么,旧模型打分低的部分在新模型训练样本中还是负样本,很明显也不太好。

https://www.zhihu.com/question/305823078/answer/1627340815