gauc&timeauc
1. AUC
AUC是评估模型对pair数据,将正样本的预测分数大于负样本的预测分数的能力;
计算方式,scala写的:
1 | // 预测值 + 标签 |
上面表达的是按预测分升序排列(负样本在前,正样本在后)后遍历,
每遇到一个正样本,将在它之前的负样本数量加上(表示模型预测对的pair数量),
每遇到一个负样本,则加1,
最后用预测对的pair对数量 处以 总的区分正负样本的pair对的数量,即得auc。
2. GAUC
在auc的基础上,按照用户、刷次等进行分组,剔除整组都是正样本或整组都是负样本的数据,
按照展现的样本数量比例为权重,计算得到模型的结果。
1 | // 预测值 + 标签 + 用户组 |
3. 逆序数
其实上面auc的计算,体现的也是逆序数的逻辑。
正序数、逆序数可作为模型效果的衡量指标。当样本的之间存在序关系时,由样本间两两组成的,若模型预测结果的序关系与之间的序关系相同,称为正序;若模型预测结果的序关系与之间的序关系相反,称为逆序。当正序数量越多、逆序数量越少时,表明模型对序关系的刻画越准确,模型效果越好。正逆序即为正序数量与逆序数量的比值。
逆序数的计算,可以参考LeetCode上的这道题:计算右侧小于当前元素的个数
1 | class Solution: |
4. TimeAUC
对于点击,我们可以直接使用auc、gauc来进行计算,衡量模型的排序能力。
对于时长目标的时候,我们同样可以参考逆序数和auc的计算逻辑,构造一个timeauc的指标衡量模型对有点击行为的时长预测的能力。
计算有点击的时长的时候,需要将时长等于0的样本过滤掉,
- timeAuc:
- 计算逆序数累加和(模型预测错误的数量)
- 1.0 - 逆序数累加和 / pair总数
其实在真正计算逆序率的时候,是根据肯德尔相关系数来计算的。
1 | import numpy as np |
同样的也可以计算GroupTimeAUC