搜广推校招面经五十七
虾皮推荐算法
一、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的步骤
- 估计倾向得分:使用逻辑回归或机器学习模型(如随机森林)估计每个样本接受干预的概率(倾向得分)。
- 匹配样本:根据倾向得分,为处理组的每个样本找到对照组中倾向得分最接近的样本。
- 评估因果效应:在匹配后的样本中,比较处理组和对照组的结局变量,计算平均处理效应(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(1−pipi)=β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 函数。
- 步骤:
- 对于每个训练样本(目标词和上下文词),随机选择 ( k ) 个负样本(通常 ( k ) 为 5-20)。
- 更新目标词和上下文词的向量,使其与正样本更接近,与负样本更远离。
- 优点:
- 减少计算复杂度,避免计算全量 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σ(vwO⋅vwI)−i=1∑klogσ(−vwi⋅vwI)
其中, 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 函数。高频词位于树的浅层,低频词位于树的深层。
- 步骤:
- 根据词频构建霍夫曼树。
- 对于每个训练样本,从根节点到目标词节点的路径上更新向量。
- 优点:
- 减少计算复杂度,高频词的计算路径较短。
- 适用于词频分布不均匀的语料库。
- 公式:
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=1∑L(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=1∑NAPi
其中,
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=1∑Nranki1
- 只关注 第一个相关项的排名,排名越靠前,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=1∑Klog2(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=1−K(K−1)1i=j∑sim(i,j)
sim(i, j)
是物品i
和j
的相似度(如基于嵌入计算余弦相似度)。- 适用于防止 推荐结果同质化,提高用户体验。
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 | 搜索、信息检索 | 结合准确率和排序 |
MRR | QA 系统、搜索 | 最重要项的排名 |
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=1−K(K−1)1i=j∑sim(i,j)
sim(i, j)
是物品i
和j
的相似度(如基于嵌入计算的余弦相似度)。- 适用场景:防止推荐内容同质化,提高用户体验。
4.5. 长尾比例(Long-tail Percentage)
衡量召回的物品中 长尾物品(低曝光物品)的占比:
Long-tail Percentage
=
∣
召回的长尾物品
∣
∣
召回物品总数
∣
\text{Long-tail Percentage} = \frac{|\text{召回的长尾物品}|}{|\text{召回物品总数}|}
Long-tail Percentage=∣召回物品总数∣∣召回的长尾物品∣
- 适用场景:长尾推荐,避免系统过度推荐热门物品。