大型百货商场最近来了一位AI金牌导购“小推”,它负责给每位顾客推荐最合适的商品。商场经理阿智很高兴,但很快陷入了困惑:怎么知道小推推得好不好?他决定给小推设计一套考核体系:上岗前先做一场“模拟考核”——用过去三个月的顾客购买记录当考卷,看看小推能不能从中学会判断顾客口味;正式上岗后,再开启“顾客回访”——记录真实顾客的点击、停留、购买行为。这套考核体系,就是推荐系统的效果评估。 推荐效果评估分为两大阵营:离线指标与在线指标。离线指标像“模拟考成绩”,用历史数据检验模型能力,核心选手有AUC(区分好坏的能力)、NDCG(排序位置的艺术)、HitRate(命中率);在线指标像“真实营业的顾客反馈”,核心选手有CTR(点击率)和停留时长。当指标之间闹矛盾时,还需要权衡决策的智慧。了解这套体系的过程,就像陪伴阿智一点点建立对小推的信任——而这份信任,正是推荐系统从技术原型走向大规模生产的基石。

岗位关联

对AI从业者的价值:掌握推荐系统从离线到在线的完整评估指标体系,能够科学衡量模型好坏、定位线上问题、做出业务权衡决策,这是推荐算法工程师与数据分析师的核心竞争力。

目录
  1. 可视化演示
  2. 评估体系总览
  3. AUC计算原理
  4. NDCG排序质量
  5. HitRate命中率
  6. 在线指标监控
  7. 矛盾权衡决策
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

离线评估指标体系——AUC/NDCG/HitRate计算原理 ROC曲线:TPR vs FPR → AUC面积 NDCG@K: 排序质量归一化指标 Hit Rate@K: Top-K命中率 基线:对比模型表现基准 AUC = P(score(positive) > score(negative))

评估体系总览

阿智给小推制定考核计划时,先做了两件事:第一,把过去三个月顾客的购物小票整理成厚厚的“考卷”,让小推模拟答题——这叫离线评估;第二,让小推正式站上导购台,记录真实顾客的反应——这叫在线评估。这就像体育教练先用录像分析选手的模拟训练(离线),再让选手站上真实赛场看成绩(在线),两者缺一不可。

在推荐系统里,离线评估听上去很“实验室”,但它有个巨大优势:能在不打扰真实用户的前提下快速迭代模型。工程师把历史行为数据喂给模型,用 AUC、NDCG、HitRate 这些“试卷分数”快速筛选候选版本。而在线评估则像“真实赛场的计分牌”,观察 CTR、停留时长、留存率等真实反馈。只有把两个环节结合,才能完整回答“推荐效果到底好不好”。

完整的评估体系可以用一个加权公式来概括:把离线指标得分和在线指标得分各乘一个权重,相加得到综合评估值。权重由业务目标决定——比如新商品冷启动阶段,真实用户的在线反馈往往比历史模拟更有说服力。

阿智把模拟考成绩和真实顾客反馈按 4:6 加权,算出了小推的月度考核分。推荐系统工程师也这样做:离线指标用来定方向,在线指标用来验效果,缺一不可。

综合评估=α×离线指标+β×在线指标\displaystyle 综合评估 = \alpha \times 离线指标 + \beta \times 在线指标
公式说明:α 和 β 是两个权重系数,分别控制离线成绩与在线成绩在最终评估中的分量。业务越依赖真实反馈,β 就应设得越高。
  1. 读作综合评估等号左边是要输出的总体评价结果,相当于小推的最终考核总分
    综合评估\displaystyle 综合评估
  2. α 与 β两个可调权重,α 调节离线成绩的分量,β 调节在线成绩的分量
    α,β\displaystyle \alpha, \beta
  3. 乘法加权每个指标得分与对应权重相乘,重要的维度占更大份额
    α×离线指标,β×在线指标\displaystyle \alpha \times 离线指标, \quad \beta \times 在线指标
  4. 加法合并加权后的两部分相加,得到可比较的综合分数
    综合评估=α×离线指标+β×在线指标\displaystyle 综合评估 = \alpha \times 离线指标 + \beta \times 在线指标

AUC计算原理

阿智很快发现小推有个绝活:它一眼就能分辨“顾客肯定会喜欢”和“顾客肯定不喜欢”的商品。这个绝活对应的指标,就是AUC。AUC 的全称是 Area Under the ROC Curve,中文常译为“ROC 曲线下面积”。简单理解,它衡量的是:随机拿一个用户喜欢的商品和一个不喜欢的商品,模型能不能把喜欢的排在前面。

在推荐系统里,用户点击过或购买过的物品被称为正样本,没有产生行为的被称为负样本。模型给每个物品打一个预测分,如果正样本分数高于负样本分数,就是一次正确的“区分”。把所有历史行为铺开,统计这个胜出比例,就得到了 AUC 值。AUC 越接近 1.0,说明模型区分好坏的能力越强;越接近 0.5,说明跟瞎猜差不多。

数学上,设正样本集合为 D⁺、负样本集合为 D⁻,规模分别为 m⁺ 和 m⁻,则 AUC 的计算公式为:

小推的眼光越好,AUC 越接近 1。但阿智很快发现,AUC 再高也说明不了推荐顺序的细微差别——比如最好的商品是不是排在第一位?这是 NDCG 的战场。

AUC=1m+m−∑i∈D+∑j∈D−I(Si>Sj)\displaystyle AUC = \frac{1}{m^{+} m^{-}} \sum_{i \in D^{+}} \sum_{j \in D^{-}} \mathbb{I}(S_i > S_j)
公式说明:把所有“正样本 vs 负样本”的配对全部拿出来比较分数,正样本胜出的比例就是 AUC。这等价于“随机正样本得分高于随机负样本的概率”。
  1. 正样本集合 D⁺用户产生正向行为(点击、购买)的物品集合,规模为 m⁺
    D+={用户喜欢的物品},m+=∣D+∣\displaystyle D^{+} = \{ 用户喜欢的物品 \}, \quad m^{+} = |D^{+}|
  2. 负样本集合 D⁻用户未产生行为的物品集合,规模为 m⁻
    D−={用户未互动的物品},m−=∣D−∣\displaystyle D^{-} = \{ 用户未互动的物品 \}, \quad m^{-} = |D^{-}|
  3. 两两配对两个求和号把所有正负样本组合成 m⁺×m⁻ 个配对
    ∑i∈D+∑j∈D−\displaystyle \sum_{i \in D^{+}} \sum_{j \in D^{-}}
  4. 指示函数当前配对中正样本预测分 S_i 大于负样本 S_j 时计 1,否则计 0
    I(Si>Sj)={1Si>Sj0其他\displaystyle \mathbb{I}(S_i > S_j) = \begin{cases} 1 & S_i > S_j \\ 0 & 其他 \end{cases}
  5. 归一化分母除以配对总数,得到“胜出”的比例,即概率含义
    1m+m−\displaystyle \frac{1}{m^{+} m^{-}}

NDCG排序质量

阿智还想知道:小推推荐的顺序对不对?顾客最想要的那件商品,是不是正好排在第一位?这就像去餐厅,服务员端上五道菜,最好吃的那道放在最前面,顾客体验自然满分;如果放到最后,顾客可能早就吃撑了,再好吃的菜也失去意义。

NDCG(归一化累计折扣增益)就是衡量排序质量的指标。它给每个位置一个“折扣”:位置越靠后,折扣越狠,对总得分的贡献越小。同时,相关性越高的物品贡献越大。先计算前 K 个位置的累计折扣增益 DCG@K,再除以理想排序下的最大增益 IDCG@K,就得到 NDCG@K——值越接近 1,排序越接近理想。

DCG@K=∑i=1K2reli−1log⁡2(i+1)\displaystyle DCG@K = \sum_{i=1}^{K} \frac{2^{rel_i} - 1}{\log_2(i+1)}

NDCG@K=DCG@KIDCG@K\displaystyle NDCG@K = \frac{DCG@K}{IDCG@K}

1. 第 i 位的相关性 rel_i:排在位置 i 的物品与用户的实际相关程度,值越高越相关

reli∈{0,1,2,… }\displaystyle rel_i \in \{0, 1, 2, \dots\}

2. 指数增益 2^rel_i − 1:相关性越高,额外收益呈指数增长,拉大高分与低分的差距

2reli−1\displaystyle 2^{rel_i} - 1

3. 位置折扣 log₂(i+1):位置越靠后分母越大,贡献被打了折扣

log⁡2(i+1)\displaystyle \log_2(i+1)

4. DCG@K 求和:把前 K 个位置的加权相关性累加,得到当前排序的得分

DCG@K=∑i=1K2reli−1log⁡2(i+1)\displaystyle DCG@K = \sum_{i=1}^{K} \frac{2^{rel_i} - 1}{\log_2(i+1)}

5. IDCG@K 归一化:用理想排序的 DCG 值消除列表长度和相关性分布的影响

NDCG@K=DCG@KIDCG@K\displaystyle NDCG@K = \frac{DCG@K}{IDCG@K}

小推把顾客最想要的东西摆到第一位,NDCG 就接近 1,顾客满意度爆表。有了 NDCG,阿智就能科学地评价“排序顺序”这门手艺了。

HitRate命中率

阿智还关心一个更朴素的问题:小推推荐的五件商品里,顾客会不会至少买一件?这就像药店促销员给顾客递上一个购物篮,只要顾客从篮子里拿走了哪怕一样东西,这次推销就不算白费。

HitRate@K 关注的就是“前 K 个推荐中是否至少命中一个用户感兴趣的物品”。它只在乎有没有命中,不在乎命中在第几位,也不在乎命中了几个——这与 NDCG 的精细排序评价形成鲜明对比,是一种粗粒度但非常直观的指标。

HitRate@K=1∣U∣∑u∈UI(∃ 物品∈Rec(u,K) 且被用户u点击)\displaystyle HitRate@K = \frac{1}{|U|} \sum_{u \in U} \mathbb{I}\big(\exists\, 物品 \in Rec(u, K) \ 且被用户u点击\big)

1. 用户集合 U:参与评估的用户全体,|U| 是用户总数

U={u1,u2,…,un},∣U∣=n\displaystyle U = \{u_1, u_2, \dots, u_n\}, \quad |U| = n

2. 前 K 推荐 Rec(u,K):对用户 u 生成的推荐列表截取前 K 个物品

Rec(u,K)={前K个推荐物品}\displaystyle Rec(u, K) = \{ 前K个推荐物品 \}

3. 存在量词 ∃:表示“至少存在一个”,强调命中一次就算成功

∃ 物品∈Rec(u,K)\displaystyle \exists\, 物品 \in Rec(u, K)

4. 指示函数与平均:命中记 1、未中记 0,最后对所有用户求平均

1∣U∣∑u∈UI(⋯ )\displaystyle \frac{1}{|U|} \sum_{u \in U} \mathbb{I}(\cdots)

小推的“兜底能力”很强——至少能让顾客从推荐中选走一样东西。不过阿智提醒自己:命中了不代表排序最优,HitRate 只是一条及格线,想拿高分还要配合 NDCG 一起看。

在线指标监控

模拟考核顺利通过,小推正式上岗。阿智开启了实时“回访”:顾客每天有没有朝推荐货架看?看了以后有没有拿起商品?在货架前驻足了多久?这些真实环境里的数据,就是在线指标。

在线指标中最核心的是 CTR(点击率)和停留时长。CTR 反映推荐内容对用户的吸引力——曝光了 100 次,被点了 10 次,CTR 就是 10%。但如果只盯 CTR,容易掉进“标题党”陷阱:用户被夸张标题吸引点进来,发现货不对板,立刻退出,停留时长大跌。所以停留时长用来捕捉“沉浸感”,两者配合才能还原真实体验。

CTR=点击次数曝光次数\displaystyle CTR = \frac{点击次数}{曝光次数}

1. 分子 点击次数:用户在推荐位上产生点击行为的次数,通常统计一个时间窗口的累计值

点击次数=#{用户点击推荐位的事件}\displaystyle 点击次数 = \#\{ 用户点击推荐位的事件 \}

2. 分母 曝光次数:推荐内容被展示给用户的次数,是点击的“机会池”

曝光次数=#{推荐位被展示的事件}\displaystyle 曝光次数 = \#\{ 推荐位被展示的事件 \}

3. 比值:点击与曝光的商,表示每次曝光带来的点击概率

点击次数曝光次数\displaystyle \frac{点击次数}{曝光次数}

4. 百分比换算:工程上习惯乘以 100%,使其更容易阅读

CTR=点击次数曝光次数×100%\displaystyle CTR = \frac{点击次数}{曝光次数} \times 100\%

小推上岗后,CTR 稳定在 12%,顾客平均停留时长也提升了 30 秒。但阿智很快遇到新麻烦:CTR 涨了、时长跌了,指标开始打架——这意味着到了权衡决策的时刻。

矛盾权衡决策

小推曾推荐一款爆款商品,点击率很高,但顾客点进去后发现不是自己想要的,转头就走,停留时长反而下降。阿智困惑了:CTR 和停留时长,到底该信哪个?这就是推荐系统中常见的指标矛盾。

指标矛盾的本质,是不同指标优化方向不一致。提高 CTR 的模型可能靠吸引眼球的标题,牺牲了真实体验;增加停留时长的策略可能推荐了冗长内容,压低了成交转化。处理矛盾的原则只有一个:指标服务于业务目标。电商平台更关心 GMV,内容平台更关心时长,资讯 App 更关心留存。先明确业务目标,再为不同指标分配权重。

工程师通常把多个指标加权合并成统一的业务目标函数,并用小流量 A/B 实验验证决策方向:

max⁡  E[业务收益]=∑iwi×gi(指标i)\displaystyle \max \; \mathbb{E}[业务收益] = \sum_{i} w_i \times g_i(指标_i)

1. 数学期望 𝔼:表示平均意义下的收益,不是某一次试验的偶然结果

E[⋅]\displaystyle \mathbb{E}[\cdot]

2. 业务收益函数:把多个指标统一转化成业务收益,如 GMV、时长、留存

业务收益=f(CTR,停留时长,转化率,… )\displaystyle 业务收益 = f(CTR, 停留时长, 转化率, \dots)

3. 权重 w_i:每个指标携带的权重,数值越大代表业务上越重要

wi∈[0,1],∑iwi=1\displaystyle w_i \in [0, 1], \quad \sum_i w_i = 1

4. 求和与最大化:将所有加权收益相加,并寻找使总和最大化的策略

max⁡∑iwi×gi(指标i)\displaystyle \max \sum_{i} w_i \times g_i(指标_i)

阿智最终拍板:这个月主推“既要点击又要有质量”的推荐,把时长权重调高、CTR 权重适当调低。指标打架不可怕,可怕的是没有权衡的标准——推荐工程师的工作,就是当好那个“定权重的阿智”。

AI 应用场景

电商大促前的模型筛选

阶段:离线评估 + 在线验证

解决的问题:传统方式靠运营直觉判断商品推荐是否有效,人工抽查覆盖不足且主观性强。AI 方案先用离线指标 AUC 和 NDCG 在海量候选模型中快速筛选出表现最优者,再通过小流量在线实验验证真实效果,避免了盲目上线带来的收入损失。

具体案例:某电商平台在“618 大促”前,用历史大促数据离线评估了三个召回模型,选择 NDCG@10 最高的模型;上线后按 5% 流量做 A/B 实验,对比 CTR 和客单价,确认提升显著后才全量推广。

短视频平台的实时内容监控

阶段:在线指标监控与持续优化

解决的问题:传统监控只看曝光总量,无法分辨“推荐是否真正吸引用户”。AI 通过 CTR 与人均时长联合监控,快速捕捉“标题党低质内容”对体验的伤害,并及时回滚模型。

具体案例:某短视频 App 发现某天 CTR 提升了 5% 但人均时长下降 10%,数据分析师拆解后发现是推荐了夸张标题的低质内容,紧急回滚模型并调低该类内容权重,次日益指标恢复正常。

新闻资讯冷启动权衡

阶段:指标权衡与业务对齐

解决的问题:新用户没有历史行为数据,离线评估几乎失效;传统一刀切推热门内容导致留存差。AI 采用 HitRate@3 快速判断推荐是否命中新用户的兴趣,同时结合次日留存率做权衡。

具体案例:某新闻 App 对冷启动用户调整策略后,HitRate@3 从 42% 提升到 58%,次日留存率同步提升了 4 个百分点。团队据此确认“命中兴趣”是冷启动阶段最优先的指标。

Python 演示

python65 行
import randomimport math def compute_auc(scores, labels):    pos = [s for s, l in zip(scores, labels) if l == 1]    neg = [s for s, l in zip(scores, labels) if l == 0]    cnt = 0    for p in pos:        for n in neg:            if p > n:                cnt += 1    total = len(pos) * len(neg)    return cnt / total if total > 0 else 0.5 def compute_ndcg(scores, labels, k=None):    if k is None:        k = len(scores)    order = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)    dcg = 0.0    for i, idx in enumerate(order[:k]):        rel = labels[idx]        dcg += (2 ** rel - 1) / math.log2(i + 2)    ideal = sorted(labels, reverse=True)[:k]    idcg = 0.0    for i, rel in enumerate(ideal):        idcg += (2 ** rel - 1) / math.log2(i + 2)    return dcg / idcg if idcg > 0 else 0.0 def compute_hit_rate(rec_ids, liked_ids, k=3):    return 1 if any(i in liked_ids for i in rec_ids[:k]) else 0 def compute_ctr(clicks, impressions):    return clicks / impressions if impressions > 0 else 0.0 def simulate_session():    real_rel = [0.95, 0.85, 0.70, 0.55, 0.30, 0.15]    items = []    for i, r in enumerate(real_rel):        pred = max(0.05, min(0.95, r + random.uniform(-0.12, 0.12)))        liked = random.random() < r        items.append({"id": i + 1, "score": pred, "liked": liked})    items.sort(key=lambda x: x["score"], reverse=True)    return items def main():    random.seed(2024)    items = simulate_session()    scores = [x["score"] for x in items]    labels = [1 if x["liked"] else 0 for x in items]    rec_ids = [x["id"] for x in items]    liked_ids = {x["id"] for x in items if x["liked"]}    auc = compute_auc(scores, labels)    ndcg = compute_ndcg(scores, labels, k=6)    hr = compute_hit_rate(rec_ids, liked_ids, k=3)    ctr = compute_ctr(sum(labels), len(items))    print("==== 推荐效果评估报告 ====")    print("AUC       :", round(auc, 4))    print("NDCG@6    :", round(ndcg, 4))    print("HitRate@3 :", hr)    print("CTR       :", round(ctr, 4))    print("推荐列表   :", rec_ids)    print("用户点击   :", liked_ids) if __name__ == "__main__":    main()
目的:模拟一次推荐会话,完整计算 AUC、NDCG@6、HitRate@3 和 CTR 四项评估指标,输出一份推荐效果评估报告。
  1. pos = [s for s, l in zip(scores, labels) if l == 1]从分数-标签配对中筛出正样本,用于 AUC 计算
  2. for p in pos: for n in neg: if p > n: cnt += 1正负样本两两对决,统计正样本分数胜出的次数
  3. order = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)按预测分降序生成排序索引,模拟推荐列表
  4. dcg += (2 ** rel - 1) / math.log2(i + 2)每个位置按“相关性增益 ÷ 位置折扣”累加,体现位置重要性
  5. ideal = sorted(labels, reverse=True)[:k]构造理想排序,即把相关性最高的物品排在前面
  6. return any(i in liked_ids for i in rec_ids[:k])前 K 个推荐中只要有一个被点击,就记为命中
  7. pred = max(0.05, min(0.95, r + random.uniform(-0.12, 0.12)))模拟预测分:真实相关度加一点随机噪声,更贴近实际模型

常见误区

误区“AUC 都 0.95 了,推荐系统肯定没问题!”很多初学者把 AUC 当万能指标,认为只要它足够高,其他一切都不用看了。

正解AUC 衡量的是“区分正负样本”的能力,不代表推荐的排序体验和业务收益。在场景区分度本身就大的情况下,AUC 容易虚高;而在“两个都不错的商品”之间做精细排序时,AUC 可能毫无区分力。就像小推能分清“明显好货”和“明显烂货”,但不代表它能判断“两个都还不错的商品”哪个更适合眼前这位顾客。

为何常见:业界普遍用 AUC 衡量分类模型,初学者容易把“模型好”等同于“业务好”,忽略了不同指标各有职责。

误区“离线 NDCG 提升了 0.05,上线后效果肯定会更好。”不少工程师习惯把离线实验当作最终结论。

正解离线评估用历史数据模拟,存在天然偏差——用户行为随时在变,推荐物品的分布也会漂移。历史上没点过的物品,不代表未来不会点。就像小推在模拟考里拿了高分,但真实顾客的心态、天气、流行趋势都在变化,必须靠在线指标和 A/B 实验做最终验证。

为何常见:“模拟考考得好 → 真实比赛一定打得好”的直觉在工程中并不总是成立,因为真实环境远比历史数据复杂多变。

误区“HitRate 和 CTR 不都是看用户点没点吗?”很多初学者把这两个指标混为一谈。

正解HitRate@K 是“用户级别”的粗粒度指标,只关心前 K 个推荐中有没有至少一个被点击;CTR 是“曝光级别”的细粒度指标,计算点击次数占总曝光次数的比例。一个用户点了 2 条推荐,HitRate 记 1 次命中,CTR 记 2 次点击,统计口径完全不同。

为何常见:两个指标都跟“点击”有关,初学者容易忽略它们的分母和统计粒度不同。

误区“监控的指标越多越全面,看得越安心。”有些团队把所有能算的指标都挂上监控大屏。

正解指标之间常有冗余甚至矛盾,同时监控几十个指标反而会分散注意力。比如 CTR 和停留时长都高时,再看“曝光量”意义不大;而当 CTR 与时长矛盾时,需要聚焦业务目标选核心指标。阿智的做法是:每次只看与当前目标最相关的三四个指标,其他作为参考。

为何常见:数据越多越安心的心理,加上监控大盘“多多益善”的惯性,容易让团队迷失在数字海洋里。

误区“CTR 那么高,说明用户一定很喜欢我的推荐!”标题党式推荐让点击率狂涨,很多运营人员因此沾沾自喜。

正解CTR 只反映“点击”这一浅层行为,用户点进去发现内容货不对板,会立刻退出,停留时长会非常低。真正高质量的内容应同时具备高 CTR 和合理的停留时长。就像顾客被橱窗里的夸张海报吸引进店,进店后发现货不对板转身就走——进店率高但成交率低,店铺依然不赚钱。

为何常见:点击是最显眼、最容易统计的行为信号,人们容易把“注意力”误当成“满意度”。

面试题

Q1. AUC 的直观含义是什么?

单选题 · easy

  • A.模型预测所有样本的速度快慢
  • B.随机正样本得分比负样本高的概率← 正确答案
  • C.推荐系统每天的活跃用户数量
  • D.模型在训练集上的准确率

答案:B。AUC 可以理解为“随机拿一个正样本和一个负样本,正样本得分更高的概率”,对应 B。A 说的是速度,C 是活跃用户数,D 是准确率,都与 AUC 的本质无关。

Q2. 关于 NDCG 的说明,正确的是?

单选题 · mid

  • A.只统计推荐列表中有没有用户喜欢的物品
  • B.位置越靠后的物品折扣越大,权重越低← 正确答案
  • C.与排序位置完全无关
  • D.数值越高说明推荐列表越长

答案:B。NDCG 的核心思想是“位置越靠前越重要,相关性越高增益越大”,B 正确。A 是 HitRate 的概念;C 与 NDCG 背道而驰;D 中的归一化设计恰恰是为了消除列表长度影响。

Q3. 某次评估中 HitRate@3 = 1.0,最合理的解读是什么?

单选题 · easy

  • A.前三个推荐每一条都被用户点击
  • B.所有用户在前三条推荐中至少命中一个← 正确答案
  • C.只有三位用户参与评估
  • D.推荐模型没有任何错误

答案:B。HitRate@3 统计“前三条推荐中至少有一个被点击的用户占比”,等于 1.0 说明所有用户都命中了,对应 B。A 把“至少一个”误解成“每一条”;C 是样本量猜测,与指标定义无关;D 夸大了指标含义。

Q4. CTR 的正确计算方式是?

单选题 · easy

  • A.曝光次数除以点击次数
  • B.点击次数除以曝光次数← 正确答案
  • C.点击用户数除以注册用户数
  • D.推荐商品数除以用户总数

答案:B。CTR 是“点击次数 ÷ 曝光次数”,反映每次曝光带来点击的概率,对应 B。A 把分子分母颠倒;C 混淆了用户维度;D 与点击率无关。

Q5. 离线评估与在线评估最本质的区别是什么?

单选题 · mid

  • A.离线评估只评估模型排序,在线评估只评估点击率
  • B.离线用历史数据模拟用户,在线观测真实用户行为← 正确答案
  • C.离线评估完全不需要模型参与
  • D.在线评估只关注模型速度忽略效果

答案:B。离线评估像模拟考,用历史数据回放;在线评估像真实营业,观测真实用户行为,B 正确。A 以偏概全;离线评估同样需要模型打分,C 错误;在线评估的重点正是效果而非速度,D 错误。

Q6. 计算 AUC 时,一个正样本与三个负样本比较全部胜出,该正样本贡献多少计分?

单选题 · hard

  • A.0 分,不参与比较
  • B.1 分,只计一次结果
  • C.2 分,约占胜负对总数
  • D.3 分,每个对决各计一次← 正确答案

答案:D。AUC 遍历所有正负样本对,一个正样本要和每个负样本各比较一次,三个对决全部胜出就贡献 3 次计数,对应 D。A、B、C 都低估了对决次数,AUC 不是“一次比较定英雄”。

Q7. 下列哪些属于在线评估指标?

多选题 · mid

  • A.CTR 点击通过率← 正确答案
  • B.用户平均停留时长← 正确答案
  • C.离线计算的 AUC 曲线面积
  • D.次日留存率波动← 正确答案

答案:ABD。在线指标来自真实环境的用户行为反馈,CTR、停留时长、留存率都属于在线指标,对应 A、B、D。AUC 通常基于历史数据离线计算,属于离线指标,C 不选。

Q8. NDCG 的设计中包含哪些关键因素?

多选题 · mid

  • A.相关性越高增益越大← 正确答案
  • B.位置越靠前权重越大← 正确答案
  • C.通过 IDCG 消除列表长度影响← 正确答案
  • D.完全不依赖相关性排序

答案:ABC。NDCG 用 2^rel−1 体现“相关性越高增益越大”(A),用 log₂(i+1) 实现“位置越前权重越大”(B),除以 IDCG 归一化消除长度影响(C)。D 与 NDCG 论背道而驰,不选。

Q9. 当 CTR 提升但 GMV 下降时,合理的调查步骤有哪些?

多选题 · hard

  • A.拆解点击到购买的转化漏斗← 正确答案
  • B.检查推荐物品的价格带变化← 正确答案
  • C.立即回滚推荐服务
  • D.小流量 A/B 实验对比新旧版本← 正确答案

答案:ABD。遇到指标矛盾应系统排查:先拆漏斗看转化在哪一步流失(A),再检查价格带等业务因素(B),最后用小流量实验验证(D)。“立即回滚”过于激进,应该先定位原因再决策,C 不选。

Q10. 某视频平台离线 AUC 从 0.82 提升到 0.85,但线上人均时长反而下降 8%,最可能的原因是什么?

单选题 · extreme

  • A.AUC 提升必然带来时长提升,需要等更多数据
  • B.离线指标与线上业务目标存在偏差,需重新排查← 正确答案
  • C.离线 AUC 计算代码存在语法错误
  • D.用户行为数据量不足需要更长时间观察

答案:B。离线指标与在线业务目标不一致是常见现象——AUC 提升表示排序区分能力变强,但人均时长还受内容生态、用户偏好变化等因素影响,B 正确。A 违背“离线不等于在线”的常识;C 中语法错误会直接导致程序报错而非数值变化;D 中时间延长并不会自动修复偏差。