当前位置: 首页 > article >正文

搜广推校招面经五十七

虾皮推荐算法

一、AUC有什么缺陷,有更合适的指标去解决这个问题

1.1. AUC 的缺陷

尽管 AUC 是一个广泛使用的指标,但它存在以下缺陷:

1.1.1. 无法反映真实的概率分布

AUC 仅考虑 正负样本的相对排序,不关心预测概率的具体数值。例如:

  • 预测值 {0.9, 0.8, 0.7, 0.6}{0.6, 0.5, 0.4, 0.3} 可能具有相同的 AUC,但第一个更可信。

1.1.2. 不考虑真实决策阈值

  • AUC 计算基于 所有可能的阈值,但实际应用(如信用风险、医疗诊断)通常有固定的阈值。
  • 例如,在医疗应用中,我们关心特定阈值下的 灵敏度(Recall)和特异性(Specificity),而 AUC 可能无法反映这一点。

1.1.3. 受数据分布影响

  • 类别极度不平衡 的情况下,AUC 可能高但实际表现差。例如,99% 的样本是负类时,AUC 可能看似良好,但模型可能无法正确分类正样本。

1.1.4. 误导性的解读

  • AUC 不能直接解释为误分类率。例如:
    • AUC = 0.8 并不意味着 80% 的样本被正确分类。
    • 它只表示正样本的预测得分比负样本大的概率是 80%。

1.2. 可能的替代指标

1.2.1. PR-AUC(Precision-Recall AUC)

  • 计算 精确率(Precision)-召回率(Recall)曲线 下的面积,更适用于 类别不平衡问题
  • PR-AUC 更关注正样本的识别能力,在极端不平衡数据上比 AUC 更具判别力。

1.2.2. F1-Score

  • 适用于 二分类任务,特别是 正负样本不均衡 时:
    F 1 = 2 × Precision × Recall Precision + Recall F1 = \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1=Precision+Recall2×Precision×Recall
  • 如果希望兼顾 精确率(Precision)召回率(Recall),F1-Score 是一个更好的选择。

二、因果推断中的倾向得分匹配(PSM)及倾向得分计算方法

因果推断旨在从观测数据中推断因果关系,通常用于评估干预(如政策、治疗)的效果。其核心问题是解决混杂变量(confounders)的影响,以确保因果效应的无偏估计。

2.1. 倾向得分匹配(PSM)

倾向得分匹配(Propensity Score Matching, PSM)是一种常用的因果推断方法,通过构建处理组和对照组的可比性来减少混杂变量的影响。

2.1.1. PSM的步骤

  1. 估计倾向得分:使用逻辑回归或机器学习模型(如随机森林)估计每个样本接受干预的概率(倾向得分)。
  2. 匹配样本:根据倾向得分,为处理组的每个样本找到对照组中倾向得分最接近的样本。
  3. 评估因果效应:在匹配后的样本中,比较处理组和对照组的结局变量,计算平均处理效应(ATE)。

2.2. 倾向得分的估计方法

2.2.1. 逻辑回归

  • 方法:逻辑回归是最常用的倾向得分估计方法,通过拟合一个二分类模型(如是否接受干预)来预测倾向得分。
  • 公式
    logit ( p i ) = log ⁡ ( p i 1 − p i ) = β 0 + β 1 X i 1 + ⋯ + β k X i k \text{logit}(p_i) = \log\left(\frac{p_i}{1 - p_i}\right) = \beta_0 + \beta_1 X_{i1} + \dots + \beta_k X_{ik} logit(pi)=log(1pipi)=β0+β1Xi1++βkXik
    其中, p i p_i pi 为样本 i i i 的倾向得分, X i 1 , … , X i k X_{i1}, \dots, X_{ik} Xi1,,Xik 为特征变量。

2.2.2. 随机森林

二、word2vec怎么训练的?采用负采样还是huffman树,分别是什么,为什么要用这两种方式?

Word2Vec 是一种用于学习词向量的模型,由 Google 在 2013 年提出。它通过将词语映射到低维向量空间,捕捉词语之间的语义关系。Word2Vec 包含两种模型架构:

  • CBOW(Continuous Bag of Words):通过上下文预测目标词。
  • Skip-Gram:通过目标词预测上下文。

2.1. Word2Vec 的训练方法

2.1.1 负采样(Negative Sampling)

  • 定义:负采样是一种优化方法,用于简化 Word2Vec 的训练过程。它通过随机采样负样本(非目标词)来近似计算 softmax 函数。
  • 步骤
    1. 对于每个训练样本(目标词和上下文词),随机选择 ( k ) 个负样本(通常 ( k ) 为 5-20)。
    2. 更新目标词和上下文词的向量,使其与正样本更接近,与负样本更远离。
  • 优点
    • 减少计算复杂度,避免计算全量 softmax。
    • 提高训练效率,尤其适用于大规模语料库。
  • 公式
    Loss = − log ⁡ σ ( v w O ⋅ v w I ) − ∑ i = 1 k log ⁡ σ ( − v w i ⋅ v w I ) \text{Loss} = -\log \sigma(v_{w_O} \cdot v_{w_I}) - \sum_{i=1}^{k} \log \sigma(-v_{w_i} \cdot v_{w_I}) Loss=logσ(vwOvwI)i=1klogσ(vwivwI)
    其中, v w O v_{w_O} vwO 是目标词的向量, v w I v_{w_I} vwI 是上下文词的向量, v w i v_{w_i} vwi 是负样本的向量。

2.2.2 霍夫曼树(Huffman Tree)

  • 定义:霍夫曼树是一种基于词频的二叉树结构,用于高效计算 softmax 函数。高频词位于树的浅层,低频词位于树的深层。
  • 步骤
    1. 根据词频构建霍夫曼树。
    2. 对于每个训练样本,从根节点到目标词节点的路径上更新向量。
  • 优点
    • 减少计算复杂度,高频词的计算路径较短。
    • 适用于词频分布不均匀的语料库。
  • 公式
    Loss = − ∑ j = 1 L ( w ) − 1 log ⁡ σ ( path ( j ) ⋅ v w I ) \text{Loss} = -\sum_{j=1}^{L(w)-1} \log \sigma(\text{path}(j) \cdot v_{w_I}) Loss=j=1L(w)1logσ(path(j)vwI)
    其中, L ( w ) L(w) L(w) 是目标词 w w w 的路径长度, path ( j ) \text{path}(j) path(j) 是路径上的节点向量。

2.2. 为什么使用负采样和霍夫曼树

2.2.1 计算效率

  • 全量 softmax 的问题:传统的 softmax 函数需要计算所有词语的概率分布,计算复杂度为 O ( V ) O(V) O(V), ( V 为词汇表大小) (V 为词汇表大小) V为词汇表大小),在大规模语料库中计算量巨大。
  • 负采样和霍夫曼树的优势
    • 负采样将计算复杂度降低到 O ( k ) O(k) O(k), ( k 为负样本数) (k 为负样本数) k为负样本数)
    • 霍夫曼树将计算复杂度降低到 O ( log ⁡ V ) O(\log V) O(logV)

2.2.2 模型性能

  • 负采样:通过随机采样负样本,能够更好地捕捉词语之间的语义关系,尤其适用于高频词。
  • 霍夫曼树:通过词频构建树结构,能够更高效地处理低频词,避免低频词的向量更新不足。

2.3. 总结

  • 负采样:通过随机采样负样本简化 softmax 计算,提高训练效率,适合高频词。
  • 霍夫曼树:通过词频构建二叉树,减少计算复杂度,适合低频词。
  • 选择方法:根据语料库的特点(如词频分布、规模)选择合适的训练方法。
    在这里插入图片描述

三、排序阶段的衡量指标

在推荐系统中,排序(Ranking)是核心任务之一,常见的衡量指标可以从 准确性指标排序质量指标多样性指标 三个方面考虑。

3.1. 准确性指标(Accuracy Metrics)

主要衡量推荐列表中用户感兴趣的物品与真实交互物品的匹配程度。

3.1.1. Precision@K(精确率)

计算前 K 个推荐项中相关项的比例:
Precision@K = ∣ 推荐列表 ∩ 用户真实交互物品 ∣ K \text{Precision@K} = \frac{|\text{推荐列表} \cap \text{用户真实交互物品}|}{K} Precision@K=K推荐列表用户真实交互物品

  • 适用于 Top-K 推荐,衡量用户真正感兴趣物品的比例。
  • 不能衡量推荐列表的 覆盖率排序合理性

3.1.2. Recall@K(召回率)

计算前 K 个推荐项覆盖了用户真实交互物品的比例:
Recall@K = ∣ 推荐列表 ∩ 用户真实交互物品 ∣ ∣ 用户真实交互物品 ∣ \text{Recall@K} = \frac{|\text{推荐列表} \cap \text{用户真实交互物品}|}{|\text{用户真实交互物品}|} Recall@K=用户真实交互物品推荐列表用户真实交互物品

  • 适用于 长尾推荐,衡量模型覆盖用户兴趣的能力。
  • 但只考虑命中率,不考虑排序优先级。

3.1.3. MAP(Mean Average Precision,均值平均精度)

考虑推荐项的排名位置:
M A P = 1 N ∑ i = 1 N A P i MAP = \frac{1}{N} \sum_{i=1}^{N} AP_i MAP=N1i=1NAPi
其中, A P i AP_i APi(单用户的 Average Precision)计算方式:
A P = ∑ k = 1 K P ( k ) ⋅ 1 ( item k ∈ 真实交互物品 ) ∣ 真实交互物品 ∣ AP = \frac{\sum_{k=1}^{K} P(k) \cdot \mathbb{1}(\text{item}_k \in \text{真实交互物品})}{|\text{真实交互物品}|} AP=真实交互物品k=1KP(k)1(itemk真实交互物品)

  • 适用于 信息检索、搜索场景
  • 比 Precision 和 Recall 更关注排序质量

3.2. 排序质量指标(Ranking Quality Metrics)

主要衡量推荐列表的 排序合理性

3.2.1. MRR(Mean Reciprocal Rank,平均倒数排名)

M R R = 1 N ∑ i = 1 N 1 rank i MRR = \frac{1}{N} \sum_{i=1}^{N} \frac{1}{\text{rank}_i} MRR=N1i=1Nranki1

  • 只关注 第一个相关项的排名,排名越靠前,MRR 越高。
  • 适用于 单一目标最重要的推荐任务(如查询搜索)。

3.2.2. NDCG@K(归一化折损累积增益)

衡量推荐列表中的 排序合理性
D C G @ K = ∑ i = 1 K rel i log ⁡ 2 ( i + 1 ) DCG@K = \sum_{i=1}^{K} \frac{\text{rel}_i}{\log_2(i+1)} DCG@K=i=1Klog2(i+1)reli
N D C G @ K = D C G @ K I D C G @ K NDCG@K = \frac{DCG@K}{IDCG@K} NDCG@K=IDCG@KDCG@K
其中:

  • r e l i rel_i reli 代表第 i 个推荐项的相关性(如点击/评分)。
  • IDCG@K 是理想排序下的 DCG(最大可能 DCG)。

优点:

  • 考虑了 相关性评分(如 5 星比 4 星更重要)。
  • 高排位命中项 给予更高权重,符合现实场景。

3.3. 多样性与覆盖率指标(Diversity & Coverage Metrics)

衡量推荐结果的 多样性,避免推荐过于集中。

3.3.1. Coverage(覆盖率)

Coverage = ∣ 被推荐的不同物品 ∣ ∣ 所有物品 ∣ \text{Coverage} = \frac{|\text{被推荐的不同物品}|}{|\text{所有物品}|} Coverage=所有物品被推荐的不同物品

  • 适用于衡量 长尾推荐效果
  • 避免只推荐热门物品。

3.3.2. Novelty(新颖度)

衡量推荐是否偏向热门物品:
Novelty = − ∑ i ∈ 推荐列表 P ( i ) log ⁡ P ( i ) \text{Novelty} = - \sum_{i \in \text{推荐列表}} P(i) \log P(i) Novelty=i推荐列表P(i)logP(i)

  • P(i) 是物品的流行度(如被交互次数)。
  • 适用于鼓励 冷门物品 推荐。

3.3.3. Diversity(多样性)

衡量推荐列表中物品的相似度:
Diversity = 1 − 1 K ( K − 1 ) ∑ i ≠ j sim ( i , j ) \text{Diversity} = 1 - \frac{1}{K(K-1)} \sum_{i \neq j} \text{sim}(i, j) Diversity=1K(K1)1i=jsim(i,j)

  • sim(i, j) 是物品 ij 的相似度(如基于嵌入计算余弦相似度)。
  • 适用于防止 推荐结果同质化,提高用户体验。

3.4. 商业价值指标(Business-Oriented Metrics)

在商业场景下,推荐系统的最终目标是 提升用户参与度、转化率或收益,因此一些业务相关指标也很重要。

3.4.1. CTR(Click-Through Rate,点击率)

衡量推荐列表的吸引力:
C T R = 点击次数 推荐曝光次数 CTR = \frac{\text{点击次数}}{\text{推荐曝光次数}} CTR=推荐曝光次数点击次数

  • 适用于 广告、新闻推荐 等需要提升点击率的场景。

3.4.2. CVR(Conversion Rate,转化率)

衡量推荐带来的 实际购买/交互
C V R = 转化次数 点击次数 CVR = \frac{\text{转化次数}}{\text{点击次数}} CVR=点击次数转化次数

  • 适用于 电商、订阅服务 等需要提高 实际收益 的推荐系统。

3.5. 总结与应用场景

指标适用场景主要关注点
Precision@K资讯、社交推荐推荐准确性
Recall@K电影、电商推荐召回覆盖率
MAP搜索、信息检索结合准确率和排序
MRRQA 系统、搜索最重要项的排名
NDCG@K评分推荐、广告兼顾排序和权重
Coverage长尾推荐是否只推荐热门内容
Novelty冷启动推荐是否推荐新/冷门物品
Diversity娱乐、社交推荐避免同质化推荐
CTR广告、新闻推荐吸引力
CVR电商、应用推荐变现能力

不同指标适用于不同场景,实际应用时可以 结合多个指标 进行综合评估,如:

  • 精准推荐NDCG@K + Precision@K
  • 长尾推荐Recall@K + Coverage
  • 商业化推荐CTR + CVR

四、召回阶段衡量指标

见【搜广推校招面经五十四】
在推荐系统中,召回(Recall) 是第一步,即从海量候选物品中筛选出一部分高相关性物品,以便后续排序。召回阶段的核心目标是提高 覆盖率相关性。以下是常见的衡量指标:

4.1. 召回率(Recall)

衡量推荐列表覆盖了用户真实交互物品的比例:
Recall@K = ∣ 推荐列表 ∩ 真实交互物品 ∣ ∣ 真实交互物品 ∣ \text{Recall@K} = \frac{|\text{推荐列表} \cap \text{真实交互物品}|}{|\text{真实交互物品}|} Recall@K=真实交互物品推荐列表真实交互物品

  • 适用场景:长尾推荐,衡量推荐系统是否能召回足够多的相关物品。
  • 缺点:不考虑推荐结果的排名顺序。

4.2. 覆盖率(Coverage)

衡量推荐系统能够覆盖的不同物品种类:
Coverage = ∣ 被推荐的不同物品 ∣ ∣ 所有可推荐物品 ∣ \text{Coverage} = \frac{|\text{被推荐的不同物品}|}{|\text{所有可推荐物品}|} Coverage=所有可推荐物品被推荐的不同物品

  • 适用场景:评估召回系统是否集中于热门物品。
  • 低覆盖率问题:如果大多数用户收到相同的推荐,系统可能存在多样性不足的问题。

4.3. 新颖度(Novelty)

衡量推荐结果中是否包含 冷门物品,定义为:
Novelty = − ∑ i ∈ 推荐列表 P ( i ) log ⁡ P ( i ) \text{Novelty} = - \sum_{i \in \text{推荐列表}} P(i) \log P(i) Novelty=i推荐列表P(i)logP(i)

  • P(i) 是物品的流行度(如历史交互次数)。
  • 适用场景:冷启动推荐、个性化推荐。

4.4. 多样性(Diversity)

衡量推荐列表中物品的相似性:
Diversity = 1 − 1 K ( K − 1 ) ∑ i ≠ j sim ( i , j ) \text{Diversity} = 1 - \frac{1}{K(K-1)} \sum_{i \neq j} \text{sim}(i, j) Diversity=1K(K1)1i=jsim(i,j)

  • sim(i, j) 是物品 ij 的相似度(如基于嵌入计算的余弦相似度)。
  • 适用场景:防止推荐内容同质化,提高用户体验。

4.5. 长尾比例(Long-tail Percentage)

衡量召回的物品中 长尾物品(低曝光物品)的占比:
Long-tail Percentage = ∣ 召回的长尾物品 ∣ ∣ 召回物品总数 ∣ \text{Long-tail Percentage} = \frac{|\text{召回的长尾物品}|}{|\text{召回物品总数}|} Long-tail Percentage=召回物品总数召回的长尾物品

  • 适用场景:长尾推荐,避免系统过度推荐热门物品。

http://www.kler.cn/a/599168.html

相关文章:

  • C语言入门教程100讲(40)文件定位
  • search_fields与filterset_fields的使用
  • 【参考资料 II】C 运算符大全:算术、关系、赋值、逻辑、条件、指针、符号、成员、按位、混合运算符
  • 多线程编程
  • 模糊数学 | 模型 / 集合 / 关系 / 矩阵
  • endnote相关资料记录
  • V8引擎源码编译踩坑实录
  • vue3 如何清空 let arr = reactive([])
  • React Native集成到现有原生Android应用
  • WebGPU实战:Three.js性能优化新纪元
  • SpringMVC请求和响应
  • 练习题:101
  • 腾讯云大模型知识引擎x deepseek:打造智能服装搭配新体验
  • 详解Spark executor
  • vue中keep-alive组件的使用
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功能组合的导出表格示例
  • C++——权限初识
  • 炫酷的3D卡片翻转画廊实现教程
  • 使用ES支持树状结构查询实战
  • 蓝桥杯 - 中等 - 智能停车系统