排序-评价指标

排序-评价指标


最近要跳到排序的组,之前都是做QP相关的,基本就是query分类(行业、意图),NER实体抽取,query改写,纠错,连qd相关性的模型都很少做,感觉突然跨到搜索链路后端也有点慌。来一起从零学习一下叭。

整体来说,召回之后,我们得到若干个doc 内容(可能包括title,abs,前置label,pv,uv,时效性,权威性等特征),需要与query侧特征+用户侧特征进行交互,得到满足query+用户需求的 多个doc的打分,进行排序展示给用户


评价指标

指标物理含义敏感因素日常波动
CTR点不点位置、封面0.1~0.2%
AUC正负序样本不平衡0.1‰ 就显著
GAUC用户内序新用户占比0.3‰ 就显著
NDCG@20排序位置relevance 档位1% 以上才显著
完播率内容质量视频时长0.5% 可见
时长消费深度长剧/短剧占比2% 以上可见
RPM竞价库存5% 以上可见
  1. CTR 点击率
ctr = clicks.sum() / impressions.sum()

使用ctr 点击率作为label 时,也需要考虑完播率/播放时长。同时对新物料权重偏低

  1. AUC

随机抽一个正样本和一个负样本,模型把正样本打分更高的概率

from sklearn.metrics import roc_auc_score
auc = roc_auc_score(y_true, y_score)

面试过程有时候面试官会问一下AUC计算公式

import numpy as np

def auc_manual(y_true, y_score):
    pos_score = y_score[y_true == 1]
    neg_score = y_score[y_true == 0]
    M, N = len(pos_score), len(neg_score)
    # 广播构造 M×N 比较矩阵
    mat = (pos_score[:, None] > neg_score).sum() + \
          0.5 * (pos_score[:, None] == neg_score).sum()
    return mat / (M * N)

# 测试
y_true  = np.array([1, 0, 1, 0, 0])
y_score = np.array([0.8, 0.7, 0.6, 0.6, 0.5])
print(auc_manual(y_true, y_score))   # 0.75
  1. GAUC

将样本按照(用户+场景) 分组,每组算AUC,再按权重评价

def gauc(df, group='user_id', y_true='label', y_score='score', weight='impressions'):
    return df.groupby(group).apply(
        lambda x: roc_auc_score(x[y_true], x[y_score]) * x[weight].sum()
    ).sum() / df[weight].sum()

注意:

  • 用户行为稀疏:单用户全是 0 或全是 1 时 AUC 无定义,需过滤或平滑。
  • 新用户占比高时 GAUC 会整体下降,不代表模型变差。
  1. NDCG

常用于相关性检索指标

计算当前预测相关性结果的DCG
DCG@K=∑i=1K2reli−1log⁡2(i+1) {DCG@K}=\sum_{i=1}^{K}\frac{2^{rel_i}-1}{\log_2(i+1)} DCG@K=i=1Klog2(i+1)2reli1
计算label 最佳情况IDCG
IDCG@K=∑i=1K2reli∗−1log⁡2(i+1) {IDCG@K}=\sum_{i=1}^{K}\frac{2^{rel_i^*}-1}{\log_2(i+1)} IDCG@K=i=1Klog2(i+1)2reli1
最终NDCG
NDCG@K=DCG@KIDCG@K∈[0,1] {NDCG@K}=\frac{\mathrm{DCG@K}}{\mathrm{IDCG@K}}\in[0,1] NDCG@K=IDCG@KDCG@K[0,1]

from sklearn.metrics import ndcg_score
ndcg = ndcg_score([y_true], [y_score], k=20)
  1. 完播率

完播率 = 播放时长 ≥ 视频时长 · 90% 的次数 / 播放总次数(90% 可调,短视频常用 100%,长剧常用 70%)

注意:视频本身时长分布极不均匀,必须分 bucket 看(0–30s,30–300s…)

  1. 播放时长(观看秒数)
  • 长剧一集 45 分钟,会把 loss 带偏;需做平方根或对数变换。
  • 自动播放/连播场景要扣除非主动点击的时长,否则模型会偏向“自动”物料。
  1. RPM

RPM = 1000 · 总营收 / 曝光量
对会员业务可换“会员转化收入”算钱。

注意:

  • 广告竞价实时变化,RPM 掉可能是广告主预算减少,不一定是模型差。
  • 高 RPM 广告往往时长低,会拉低完播率,需要 Pareto 前沿权衡。

指标间的“跷跷板”关系

  1. CTR↗1% 时,完播率可能↘0.5%(标题党)。
  2. 时长↗3% 时,RPM 可能↘2%(长剧多、广告位少)。
  3. AUC 涨 0.5% 不一定带来 GAUC 涨,必须看用户分组。
  4. NDCG@20 涨,首页前 20 位“更好看”,但总量下降可能导致 RPM 掉。

上线判赢原则

  • 核心指标:GAUC 涨 ≥0.3% 且 RPM 不掉 >0.5% → 可直接全量。
  • 保护指标:完播率跌幅 >1% 或 时长跌幅 >1.5% → 打回调参。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值