搜广推校招面经四十
字节-广告算法
一、离线AUC涨了,但AB实验没涨,可能的原因?
1.1. 线上线下得样本空间不一致(SSB)
线上模型使用的是实时获取的点击、曝光数据。线下使用的离线数据。这可能导致数据分布存在偏差。
- 线上数据受曝光机制、冷启动、新品推荐等因素影响,与离线数据不完全匹配。
- 线下数据存在采样偏差
1.2. AUC这些指标无法衡量线上打分准确性。
AUC毕竟只是衡量排序
1.2.1. 引申:PCOC(预估值/真实后验概率)不准确
线上效果与PCOC相关,但是AUC不能直接衡量PCOC的准确性。
1.3. 链路一致性问题:精排过后,受后续策略影响。
AUC仅仅衡量精排的效果。但在实际推荐系统中,精排打分后,还有融分、重拍、混排等过程。
二、时长/ LTV 预估任务应该作为回归任务建模么?和普通回归任务有什么区别?可以采用什么 loss function &激活函数?为什么?
用户生命周期价值(LTV)预估任务通常被视为一种回归任务,因为它的目标是预测一个连续值——即用户在整个生命周期中可能为产品或服务带来的总收益。
2.1. LTV 预估作为回归任务的特点
- 数据分布特性:LTV 数据往往具有显著的零膨胀现象,意味着有很多用户的LTV为零,因为他们没有进行任何购买行为。此外,LTV 分布通常是长尾的,少量高消费用户贡献了大量的收入。
- 预测时间跨度:LTV 通常需要考虑较长的时间范围,这增加了预测的不确定性,并可能导致更复杂的模式和趋势出现。
- 业务应用场景:在营销策略制定、资源分配等方面,准确的LTV预估至关重要,因此模型不仅要能够给出点估计,还应该提供预测的置信区间或者概率分布。
2.2. 损失函数选择
- MAPE+log变换:
- 零膨胀对数正态(ZILN)损失:专门为LTV标签设计,可以同时捕捉流失概率并考虑LTV的重尾特性,提供了点预测的不确定性量化。
2.3. 核心指标 MAPE
- 分群验证:将人群分为:新客、老客、沉默用户分别统计误差和偏差。防止群体差异带来干扰
- 品类隔离:高复购的品类(日百)和低频品类(家电)独立计算,确保可比性。
- 时间窗口加权
- 业务口径对齐
三、20. 有效的括号
- 思路:
创建一个哈希表(或者数组),遍历字符串,1:遇到左括号,保存对应的右括号,2:遇到右括号,直接判断栈顶的左括号是否与右括号为同一类型。 - 代码:
class Solution:
def isValid(self, s: str) -> bool:
if len(s) % 2: # s 长度必须是偶数
return False
st = []
for c in s:
if c == '(':
st.append(')') # 遇到左括号,入栈对应的右括号
elif c == '[':
st.append(']') # 遇到左括号,入栈对应的右括号
elif c == '{':
st.append('}') # 遇到左括号,入栈对应的右括号
elif not st or st.pop() != c: # 遇到右括号,1.栈是否为空(右括号是否多于做左括号),2.出栈是否为对应左括号
return False
return not st # 所有左括号必须匹配完毕