真实面经题目 · 原创解析
推荐系统中的用户画像和特征工程如何实现,怎样保证训练样本与线上特征口径一致?
这道题考察推荐特征工程的体系化能力。好答案不只是列画像字段,而要说明画像分层、特征定义、时间窗口、训练样本构造、线上读取、point-in-time correctness、特征平台复用和训练服务一致性,否则很容易出现泄漏、口径漂移和线上效果回退。
真实面经题目 · 原创解析
这道题考察推荐特征工程的体系化能力。好答案不只是列画像字段,而要说明画像分层、特征定义、时间窗口、训练样本构造、线上读取、point-in-time correctness、特征平台复用和训练服务一致性,否则很容易出现泄漏、口径漂移和线上效果回退。
我会先把用户画像拆成静态画像、长期兴趣、短期兴趣、实时上下文和统计特征。实现时为每个特征定义 feature spec:数据源、主键、事件时间、窗口长度、聚合方式、默认值、TTL、版本和线上读取方式。训练样本构造时,以曝光或预测时间 T 为截断点,只能 join T 之前已经可见的特征,正样本来自点击、下单或转化,负样本最好来自真实曝光未点击或未转化。为了保证线上线下一致,离线训练和线上 serving 应共享同一套特征定义或 transformation 代码,通过 feature store、日志回放、特征 diff、覆盖率和分布漂移监控来验证。
静态画像包括城市、设备、会员等级、注册时长;长期兴趣来自 7 天、30 天、90 天点击、购买、搜索偏好;短期兴趣来自最近 session 或最近若干次行为;上下文包括时间、地点、入口和设备;统计特征包括曝光、点击率、转化率、价格带和类目偏好。
特征不能只是临时 SQL。每个特征应有数据源、主键、时间语义、窗口、聚合方式、缺失值、分桶或归一化规则、TTL、版本、负责人和线上读取路径。这样才能复用、测试、回放和排查。
point-in-time correctness 是一致性的底线。训练样本在时间 T 预测点击或转化时,只能使用 T 之前产生且线上可见的行为和统计。用全量历史或目标之后行为,会让离线 AUC、GAUC 虚高。
推荐排序的负样本通常应来自真实曝光未点击或未转化,而不是随机 item。随机负样本会让模型学成区分被召回物品和随机物品,和线上在已曝光候选中排序的目标不一致。
更稳的方式是通过 feature store 或统一 transformation 代码生成离线训练特征和线上 serving 特征。默认值、hash、归一化、分桶、窗口边界和时区都要一致,否则模型上线会遇到 training-serving skew。
上线前用 shadow serving 或请求日志回放比对同一用户同一时刻的线上、离线特征。上线后监控特征覆盖率、缺失率、PSI、KS、均值方差、top value 占比、读取延迟和异常率。
核心是统一 feature spec 和 transformation。离线 store 支持时间点 join 训练样本,线上 store 提供低延迟读取;两者共享特征定义、版本、默认值和窗口规则,并用日志回放做 diff。
训练时看到的特征分布、窗口、缺失处理或归一化和线上服务时不一样。典型例子是离线用全量统计,线上只能用延迟统计;离线缺失填 0,线上填空字符串;离线按自然日,线上按滚动 24 小时。
先定义优先级和时间语义。短期兴趣通常优先实时或近线,长期统计优先离线稳定特征;还要给实时缺失、延迟和异常准备降级值,并在模型中暴露 freshness 或 missing indicator。
看离线增益、线上 A/B、覆盖率、稳定性、计算成本和可解释性。也要做特征重要性、分桶效果、漂移监控和反事实下线实验,避免长期保留无效或泄漏特征。