ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

效果类广告面试避坑指南:5个核心考点拆解

效果类广告面试避坑指南:5个核心考点拆解 效果类广告面试避坑指南:5个核心考点拆解 很多后端或算法工程师,面试时背得滚瓜烂熟的 HTTP 协议、Redis 集群、MySQL 索引,一碰到“效果类广告”相关的业务题就卡壳。你懂技术,但不懂业务逻辑,导致在场景题中无法给出贴合生产环境的方案,甚至因为不懂 eCPM 计算逻辑而被淘汰。 效果类广告(Performance-based Advertising)是互联网变现的核心,也是大厂广告系统面试的重灾区。不同于品牌广告注重曝光,效果类广告追求的是“点击”、“转化”和“ROI”。如果你只把它当成普通的推荐系统来做,大概率会挂。 这篇文章不聊虚的,直接拆解效果类广告在面试中的 5 个高频考点,结合我在广告引擎团队实战的避坑经验,给你一份可以直接复用的标准答法。 考点一:eCPM 计算与排序策略 考点梳理 面试官最爱问的第一题通常是:“请解释 eCPM 的计算公式,以及为什么它比 CPM 更重要?” 这里有个巨大的坑:很多候选人只知道 \(eCPM = CTR \times CVR \times CPA \times 1000\),却不知道在实时竞价(RTB)场景中,这个公式是如何被简化和优化的。 标准答法 回答时,先抛出核心公式,再解释业务含义。 eCPM(每千次展示期望收益)是广告排序的核心指标。在 CPC(按点击付费)模式下,公式为 \(eCPM = P(Click) \times Bid\)。在 CPA(按转化付费)模式下,公式为 \(eCPM = P(Click) \times P(Convert|Click) \times TargetCPA\)。 重点强调:排序的本质是“预期收益最大化”。系统需要在毫秒级内预估 CTR(点击率)和 CVR(转化率),结合广告主的出价(Bid),算出 eCPM,然后降序排列。 避坑指南 不要只说公式,要提到“校准”(Calibration)。预估的 CTR 和 CVR 往往是概率值,需要与真实数据对齐,否则 eCPM 会失真,导致高价值广告被低出价广告挤掉。这是区分初级和中级工程师的关键点。 考点二:冷启动问题与探索利用平衡 考点梳理 “新广告主没有历史数据,怎么预估 CTR?新用户没有行为数据,怎么推荐广告?” 这是效果类广告最头疼的问题,也是考察你工程思维的地方。 标准答法 这里要分两种情况回答:新广告(Cold Start Ad):通常采用“先验概率”或“相似广告迁移”。比如,根据广告的行业、创意类型、落地页特征,找到历史上表现相似的广告,借用其 CTR 先验值。随着曝光数据积累,逐渐切换到实时数据。 新用户(Cold Start User):利用人口统计学特征(年龄、地域、性别)进行粗排,或者利用上下文特征(时间、设备、网络环境)。 核心策略是 EE(Exploration and Exploitation),即探索与利用的平衡。可以用 Thompson Sampling(汤普森采样)或 UCB(Upper Confidence Bound)算法,在“利用已知高 CTR 广告”和“探索未知新广告”之间找到平衡点,避免陷入局部最优。避坑指南 不要只说“用深度学习模型解决”,冷启动阶段样本稀疏,深度学习反而容易过拟合。要强调“规则兜底”+“小样本机器学习”的组合拳。提到 Thompson Sampling 会让面试官眼前一亮,因为这体现了你对概率图模型的理解。 考点三:归因窗口与转化追踪 考点梳理 “用户点击了广告 A,又看了广告 B,最后下单了,这笔转化算谁的?归因窗口设多久合适?” 这是效果类广告最容易被忽视,但最影响结算准确性的考点。 标准答法 回答要包含三个要素:归因模型、归因窗口、去重逻辑。归因模型:常见的有 Last Click(最后一次点击)、First Click(第一次点击)、Linear(线性)、Time Decay(时间衰减)。大厂通常采用 Last Non-Direct Click 或混合归因模型,既要反映最后一次点击的即时效果,也要给早期种草行为一定权重。 归因窗口:通常点击后 1-7 天,展示后 1-24 小时。具体时长取决于行业,电商类转化快,窗口短;B2B 或高客单价产品转化慢,窗口长。 去重逻辑:同一用户在窗口期内多次点击同一广告,只记一次转化;不同广告主竞争同一用户,按规则分配。避坑指南 很多候选人会忽略“跨设备归因”。用户手机点广告,电脑下单,怎么关联?要提到 ID-Mapping 技术,通过手机号、邮箱、Cookie 等标识进行多端身份打通。这是广告系统底层能力的重要体现。 代码实现:简易 eCPM 排序与冷启动处理 为了让你更直观地理解,这里给出一段 Python 伪代码,模拟广告召回后的粗排逻辑,包含冷启动处理。 import random from dataclasses import dataclass from typing import List, Dict@dataclass class Ad:ad_id: strbid: float # 出价pctr: float # 预估点击率is_new: bool # 是否新广告industry: str # 行业标签class AdRanker:def __init__(self, calibration_model: Dict[str, float]):# 校准模型:行业 - 先验 CTRself.calibration = calibration_modelself.exploration_rate = 0.1 # 10% 流量用于探索新广告def get_prior_ctr(self, ad: Ad) - float:获取新广告的先验 CTRif ad.is_new:return self.calibration.get(ad.industry, 0.01)return ad.pctrdef calculate_ecpm(self, ad: Ad, user_context: Dict) - float:计算 eCPM加入探索因子:对新广告给予一定加分base_ecpm = self.get_prior_ctr(ad) * ad.bid * 1000# 冷启动探索:如果是新广告,且有流量预算,给予随机扰动加分if ad.is_new and random.random() self.exploration_rate:exploration_bonus = base_ecpm * 0.2return base_ecpm + exploration_bonusreturn base_ecpmdef rank_ads(self, candidates: List[Ad], top_k: int = 10) - List[Ad]:对候选广告进行排序scored_ads = []for ad in candidates:ecpm = self.calculate_ecpm(ad, user_context={})scored_ads.append((ecpm, ad))# 降序排序scored_ads.sort(key=lambda x: x[0], reverse=True)# 返回 Top Kreturn [ad for _, ad in scored_ads[:top_k]]# 模拟数据 calibration_data = {E-commerce: 0.03,Game: 0.05,Finance: 0.01 }ranker = AdRanker(calibration_data)ads = [Ad(ad_1, bid=5.0, pctr=0.02, is_new=False, industry=E-commerce),Ad(ad_2, bid=10.0, pctr=0.01, is_new=True, industry=Game),Ad(ad_3, bid=8.0, pctr=0.03, is_new=False, industry=Finance) ]ranked = ranker.rank_ads(ads, top_k=3) for i, ad in enumerate(ranked):print(fRank {i+1}: {ad.ad_id}, ECPM Score: {ranker.calculate_ecpm(ad, {}):.2f})代码解析校准字典:模拟了不同行业的先验 CTR,这是处理冷启动的关键。 探索因子:通过 random.random() 模拟 Thompson Sampling 的简化版,给新广告随机加分,确保新广告有机会被曝光,积累数据。 eCPM 计算:严格遵循 CTR * Bid * 1000 的逻辑,体现了广告系统的核心数学模型。追问与延伸:实时性与数据一致性 考点梳理 面试官可能会追问:“如果用户点击了广告,但转化数据延迟 2 小时才回来,你的模型怎么实时更新?如何保证数据一致性?” 标准答法 这里要体现你对数据链路的理解。实时特征流:点击日志实时写入 Kafka,Flink 消费 Kafka,更新 Redis 中的用户实时特征(如最近 1 小时点击次数)。模型训练侧,采用增量学习(Incremental Learning)或在线学习(Online Learning),每 5-10 分钟更新一次模型参数,而不是每天离线训练。 转化延迟处理:采用 Two-Phase Prediction(两阶段预测)。第一阶段快速预估 CTR,第二阶段在转化数据回来后,进行 CVR 修正。在结算时,使用“预估转化”进行实时计费,定期(如 T+1)进行“真实转化”对账,多退少补。 数据一致性:使用消息队列保证日志不丢失,使用幂等性设计防止重复计算。对于跨服务的调用,采用最终一致性,而非强一致性,因为广告系统对延迟敏感,但对极端精度容忍度较高。避坑指南 不要说“用数据库事务保证一致性”,广告系统 QPS 极高,数据库事务会成为瓶颈。要强调“缓存 + 异步消息 + 定期补偿”的架构模式。 记忆口诀与总结 为了方便你在面试中快速回忆,我给你总结了效果类广告面试五字诀:排:eCPM 是核心,CTR×CVR×Bid,校准别忘记。 冷:新客新广告,先验+探索,Thompson 采样好。 归:Last Click 主流,窗口看行业,跨端 ID-Mapping。 实:Flink 实时流,Redis 存特征,在线学习快。 结:预估实时结,T+1 对账补,多退少补稳。最后的互动 效果类广告系统非常复杂,不同公司的架构差异很大。比如,有的公司把粗排和精排合并,有的公司专门做了创意生成模块。 你公司项目里是怎么处理冷启动问题的?是用的规则还是机器学习?欢迎在评论区分享你的实战经验,我们一起避坑!
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进