题目重点:题目只给餐馆推荐 ML Design 题型;以明确训练假设设计营业/配送硬过滤、多路召回、下单排序、冷启动、反馈偏差和市场双边评估。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练场景取用户打开 Eats 首页时的餐馆卡片列表,目标为提高可完成、用户满意的订单,而非只提高点击;实际面试要先确认首页/搜索/活动页等放置位置。
- 候选必须满足营业、配送覆盖、可接单、用户地区及服务合规限制;展示价格、预计送达和菜品可用性来自实时服务。
- 训练容量示例为 100 万日活、每次请求召回 500 家候选、排序返回前 20,在线预算 150ms;数字仅用于分阶段预算,不代表 Uber 内部值。
解题路线
- 先定义决策单位 (user,session,location,time,restaurant) 和业务漏斗:曝光→点击→加购→下单→完成→复购;主目标可用完成订单的价值,结合取消/退款/送达体验惩罚,先与产品方对齐权重。
- 第一阶段按地理半径、配送区域和营业状态生成可行集合,再多路召回:附近高质量、历史偏好/相似餐馆、菜系主题、新店探索。召回输出附来源及候选版本,去重后再走实时硬过滤,避免推荐已关门或无法配送的餐馆。
- 排序特征分用户/会话、餐馆、位置与供给三组:近期浏览/订单、菜系偏好、价格带、距离/ETA、当前营业和备餐负载。离线训练使用曝光日志及观察窗口标注完成订单,按事件时间切分,特征只可取决策时已知值,防止未来订单或最终 ETA 泄漏。
- 模型先用可解释基线,例如分段规则或梯度提升树,再考虑双塔召回和深度排序;服务链路给特征、召回、排序各设超时与降级。新用户靠位置/时间上下文与地区热度,新店靠菜单/菜系内容和受控探索,防止老店曝光反馈循环。
- 离线看校准、排序质量及按城市/新旧用户/新旧店分组表现;训练数据有历史策略的曝光偏差,要记录候选集、位置和倾向信息。在线用地区或用户随机实验,但司机与餐馆容量会产生干扰,应选择合适分桶并监控完成订单、取消率、ETA、商家负载和品类多样性。
手动走一遍
某用户在晚饭时段位于区域 A,召回系统得到附近热门、历史偏好和新店三路候选。营业/配送过滤去掉无法下单的店;排序预测完成订单概率并考虑送达体验。若实时 ETA 特征服务超时,回退到经营业核验、距离与历史质量排序的列表,并记录 fallback 便于评估。
规模与取舍
若区域内可行餐馆 R、召回候选 C、返回 K,直接对全部 R 运行复杂模型代价约 O(R·模型成本);多路检索把在线排序缩至 C≪R,排序为 O(C·模型成本+C log K)。日志/特征规模随曝光数、窗口长度及区域数增长,缓存必须因营业/配送变化失效。
易错点与追问
容易失分的边界
- 把点击率当唯一目标,导致耸动卡片获得点击却没有完成订单或带来高取消。
- 只做模型打分不先过滤营业/配送覆盖,给用户展示无法下单的餐馆。
- 用订单结果或实际送达时长做线上决策时不可知的特征,线下分数虚高。
- 用历史曝光训练并把从未曝光的新店视为用户不喜欢,形成受旧排序策略支配的闭环。
继续深挖
- 如果目标从首页推荐改成搜索页的‘附近披萨’,召回相关性与查询意图如何加入?
- 大城市极热区域的餐馆因推荐流量集中而超载时,如何把商家供给、司机压力和 ETA 加入约束?
- 若通过 switchback 比较策略,怎样处理跨区用户/司机和商家库存的干扰?
