假设你是某连锁餐饮集团新上任的主厨。你发现每家分店都自己买菜:东街店买的土豆叫“土豆”,西街店买的同款土豆叫“马铃薯”,南街店甚至叫“洋芋”。更头疼的是,每家店的土豆切法还不同——有的切块、有的切丝,端上桌的“土豆炖牛肉”味道参差不齐。于是你决定建一个中央厨房:统一采购、统一编号、统一清洗加工、统一质检,再把半成品配送到各分店。这个中央厨房,就是 AI 世界里人人都在聊的“特征平台”。 特征平台是机器学习团队的中央厨房。模型要吃的“食材”是特征——用户年龄、点击次数、消费金额等可计算的数据字段。食材从原始数据源采买回来,经过命名、加工、质检、储存,最终被实时配送到线上模型。而“特征平台最佳实践”,就是主厨总结出的一整套厨房管理制度:食材怎么编号(命名规范)、配方怎么存档(版本管理)、鲜度怎么抽检(质量监控)、在线和离线味道怎么保持一致(一致性校验)、食材怎么共享给多家分店(特征复用)、以及送餐时限怎么承诺(SLA 保障)。

岗位关联

掌握特征平台最佳实践,是 AI 工程化能力的分水岭——它决定你的团队是在反复“洗菜切菜”,还是把精力花在“研究新菜”上。对 ML Platform、特征工程和数据科学从业者,这是从“能做模型”走向“能规模化做模型”的必修课。

目录
  1. 可视化演示
  2. 特征命名规范:特征“身份证”
  3. 特征版本管理:配方档案与灰度
  4. 特征质量监控:鲜度体检与告警
  5. 在线离线一致:前后厨同味
  6. 特征复用共享:公共冷库与协作
  7. SLA运维保障:出餐时限与韧性
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示特征平台治理核心机制:版本管理演示Git commit绑定与血缘追溯的版本流转;一致性校验展示在线离线特征窗口差异与偏差检测;质量监控展示新鲜度/完整性/分布稳定性的质量三角与SLA保障。

本节配有交互动效(进入视口后自动加载,约 3KB)。

特征版本管理与血缘追溯 Git commit→注册→血缘追溯 Ver 特征定义绑定commit实现代码级追溯

特征命名规范:特征“身份证”

中央厨房开业第一天,采购员从三家供应商分别订到“土豆”“马铃薯”“洋芋”,后厨以为买了三种菜,炒了三遍同一种食材。主厨痛定思痛:所有食材必须先统一编号再入库。特征平台的第一个最佳实践,就是给每个特征办一张“身份证”。这张身份证的学名叫命名规范——没有它,后续所有治理动作都无从谈起。

AI 团队经常出现类似混乱:同一个“用户复购率”,A 组叫 repurchase_rate,B 组叫 buy_again_ratio,C 组叫 second_order_prob,三个模型各写一份特征,浪费人力还口径打架。特征平台要求所有特征按统一模板命名并登记在册,就像食材按品类统一编号。这样任何人看到特征名就能理解它的业务含义,搜索时能精确命中,重名冲突在登记环节就被拦截。

业界常用的命名模板是“域_实体_属性_统计”。例如 member_spend_total_30d 表示会员域、用户实体、消费金额属性、30 天总额统计。看到名字就懂口径,检索时能快速定位。配合元数据登记(owner、数据源、更新频率、特征含义),平台会沉淀出一份团队共享的特征目录,形成目录化管理,从源头规避命名冲突。

nfeature=[D]∥[E]∥[A]∥[S]\displaystyle n_{\text{feature}} = [\mathcal{D}] \Vert [\mathcal{E}] \Vert [\mathcal{A}] \Vert [\mathcal{S}]

1. 业务域 D:界定特征所属的业务范围,如会员、商品、内容,避免跨域同名。

[D]:member, item, content[\mathcal{D}]: \text{member, item, content}

2. 实体 E:描述特征作用的主体对象,是域下的具体角色。

[E]:user, order, shop[\mathcal{E}]: \text{user, order, shop}

3. 属性 A:指明测量维度,如消费、点击、停留时长。

[A]:spend, click, view[\mathcal{A}]: \text{spend, click, view}

4. 统计 S:给出聚合方式与时间窗口,是口径的灵魂。

[S]:total_30d, avg_7d, max_1d[\mathcal{S}]: \text{total\_30d, avg\_7d, max\_1d}

有了统一编号,中央厨房的货架不再出现“土豆、马铃薯、洋芋”三盒同物;AI 团队的目录里也不会再有三个名字各异、出处却各不相同的“复购率”。命名规范是后面一切管理动作的地基——版本、质量、复用和 SLA 都要在这份目录上展开。

特征版本管理:配方档案与灰度

中央厨房的热销酱料“番茄肉酱”每年换一次配方。若直接停掉旧配方,去年签约的连锁餐厅还在用老菜单,只能关门。于是厨房规定:每个配方一本档案,新配方另立档案,旧档案永久保留。特征平台的第二个最佳实践,就是特征版本管理。

模型训练时用了某个特征版本,上线后的线上推理也必须继续用同一版本。若特征口径突变,线上模型在“新世界”里按“旧规则”做预测,效果必然崩盘。所以平台要求:特征版本一旦发布就不可变,任何改动必须生成新版本号,保证回溯兼容性——历史版本随时可用,这是给足了下游模型重训和迁移的时间窗口。

版本号采用语义化规则:主版本。次版本。修订号。口径大变(如“订单金额”改为“支付金额”)升主版本;向后兼容的增强(新增归一化开关但默认输出不变)升次版本;修复小缺陷(修正空值回填逻辑,输出几乎不变)升修订号。大版本升级要灰度:新旧版本协同并存,等下游模型验证后再切换。特征下线也要走流程,先通知依赖方、确认无人使用、再归档。

V=(Vmajor,Vminor,Vpatch)\displaystyle V = (V_{\text{major}}, V_{\text{minor}}, V_{\text{patch}})

1. 主版本 major:出现口径级破坏性变更时递增,消费者的升级成本最高。

Vmajor:1→2V_{\text{major}}: 1 \to 2

2. 次版本 minor:新增向后兼容能力时递增,旧逻辑仍可用。

Vminor:0→1V_{\text{minor}}: 0 \to 1

3. 修订号 patch:修复了对结果影响很小的问题,可以放心升级。

Vpatch:0→1V_{\text{patch}}: 0 \to 1

配方档案永远不会被撕掉,只是被新档案盖到前台。特征平台的历史版本就是主厨的“后悔药”:一旦新配方出了问题,一键回到旧配方,餐厅不至于停业。版本管理让特征资产的每一次演进都有据可查、有路可退。

特征质量监控:鲜度体检与告警

中央厨房每天早上对食材做鲜度抽检:发芽的土豆、变质的牛肉,一律丢弃并通知采购。主厨知道,一箱坏食材不会毁掉一道菜,但会让十道菜的味道都带上隐患。特征平台同样需要特征质量监控——在坏数据进入模型之前把它拦下来。

数据质量问题的可怕之处在于“静默”:特征从某天起大量缺失或取值漂移,模型不会报错,只会悄悄变蠢。质量监控要做三件事:覆盖率监控 统计非空样本占比,防止特征大面积缺失;分布漂移检测 观察均值和方差是否突变,用 PSI(群体稳定性指数,量化分布前后变化幅度的指标)衡量;异常值告警 在指标越界时通过告警通道通知负责人,并自动生成质量评估报告,形成“监控—告警—定位—修复”的闭环。

cov=nnon-nullntotal\displaystyle \text{cov} = \frac{n_{\text{non-null}}}{n_{\text{total}}}

1. 分子非空样本数:统计取值不是空值的样本量,样本量为零时覆盖率即为 0。

nnon-null:count of valid valuesn_{\text{non-null}}: \text{count of valid values}

2. 分母总样本数:窗口内应当参与计算的全部样本。

ntotal:all samples in windown_{\text{total}}: \text{all samples in window}

3. 比值含义:覆盖率越接近 1 表示越健康,通常设定阈值,低于阈值触发告警。

0≤cov≤10 \le \text{cov} \le 1

鲜度体检让主厨在顾客吃到坏菜之前就把问题食材丢弃。特征质量监控让工程师在用户感受到“推荐越来越不准”之前就修复数据,把静默变质变成显式告警——这是模型长期稳定运行的隐形防线。

在线离线一致:前后厨同味

中央厨房开发新菜时,后厨试菜用大锅旺火;门店出餐用标准化料理包。若两种做法味道不同,顾客以为吃到的是另一道菜。AI 领域同样有两口锅:离线训练和在线服务。前者是后厨试菜,后者是门店出餐,两份“味道”必须一致。

训练模型时,特征由离线批量脚本计算;模型上线后,特征由在线实时服务计算。若两套逻辑各自实现,“同一特征”可能出现两个不同的值:离线算的是“近 30 天”,在线服务因为缓存只算到“近 28 天”,模型就被喂了不一致的数据,预测质量下降还难以察觉。根因通常是代码分叉、时间窗口不同、数据口径漂移。最佳实践是先定口径统一原则,再用校验双跑机制拦截偏差。

双跑机制的做法:把同一份请求同时喂给离线逻辑和在线逻辑,对比输出结果。偏差用归一化绝对误差度量,epsilon 防止除零。偏差超过阈值就触发偏差回归处置:检查口径定义、时间窗口、计算代码。每次校验结果沉淀为一致性报告,作为特征上线的前置条件。

dev=∣f^online−foffline∣∣foffline∣+ϵ\displaystyle \text{dev} = \frac{|\hat{f}_{\text{online}} - f_{\text{offline}}|}{|f_{\text{offline}}| + \epsilon}

1. 分子绝对差:取在线值与离线值之差的绝对值,衡量两者差距。

∣f^online−foffline∣|\hat{f}_{\text{online}} - f_{\text{offline}}|

2. 分母加 epsilon:用离线值的绝对值放大稳定项,防止除零。

∣foffline∣+ϵ|f_{\text{offline}}| + \epsilon

3. 比对阈值:dev 小于阈值视为通过,大于阈值则触发回归处置。

dev<τ:pass\text{dev} < \tau: \text{pass}

4. epsilon 趋零:极小正数,仅在离线值为零时起保护作用。

ϵ→0+\epsilon \to 0^+

一致性校验就是中央厨房的“试吃官”:每一批料理包出厂前,都要和后厨现炒的菜对比味道。味道一致才允许发货,不一致就回炉重做。线上线下一旦同味,模型才能放心地把训练时学到的经验搬到生产环境。

特征复用共享:公共冷库与协作

如果中央厨房的每家连锁餐厅都自己买菜、洗菜、切菜,成本翻倍且口味各异。聪明的厨房把土豆切成半成品,谁家需要谁领取。特征平台的第五个最佳实践,正是让特征从“每个团队自己做”变成“平台共建共享”——这就是特征复用共享。

许多公司里,推荐团队做了“用户 7 天点击率”,搜索团队又做一遍,广告团队再写一遍。三份代码、三个口径、三个调度任务,浪费资源还互相矛盾。特征平台把高频特征沉淀为公共资产,后建团队先检索再动手:通过特征发现检索(像内部搜索引擎,输入“点击率”秒出已有特征、口径和 owner),极大提升协作效率。

支撑机制包括:共享协作机制,每个特征有 owner 负责维护,其他团队申请即用;权限与安全,敏感特征按角色授权,脱敏后可复用,既开放又不裸奔;复用率统计是平台健康度的核心指标,被复用次数越多的特征资产价值越高,也越值得重点维护。

reuse=nsharedntotal\displaystyle \text{reuse} = \frac{n_{\text{shared}}}{n_{\text{total}}}

1. 分子共享特征数:被至少两个团队使用的特征数量。

nshared:features used by multiple teamsn_{\text{shared}}: \text{features used by multiple teams}

2. 分母特征总数:平台上已登记的全部特征。

ntotal:all registered featuresn_{\text{total}}: \text{all registered features}

3. 比值解读:复用率越高,说明公共冷库越“热闹”,重复建设越少。

0≤reuse≤10 \le \text{reuse} \le 1

公共冷库让一筐土豆喂饱十家餐厅。特征复用让一份“用户 7 天点击率”喂饱推荐、搜索、广告三个模型。减少重复开发只是表面收益,更宝贵的是口径全局统一——所有模型讲同一种语言,协作效率自然水涨船高。

SLA运维保障:出餐时限与韧性

中央厨房与各家餐厅签订供货协议:每日 11 点前送达,断供须提前 2 小时预警并提供替代食材。这份承诺就是 SLA(服务等级协议)。特征平台同样要回答:下游模型的在线特征请求,你能在多长时间内、以多高概率返回正确结果?

特征平台本质是低延迟在线服务,线上模型每次推理都要实时拉取特征。若特征接口超时或不可用,模型服务直接失败,用户看到“推荐页空白”或“风控转人工”。SLA 是特征团队对模型团队的正式契约,也是平台工程化的衡量标尺。核心承诺是可用性,常见目标为 99.9%,即全年故障时间不超过约 8.7 小时。

为了兑现承诺,平台要做四件事:延迟监控盯住 P99 分位——99% 的请求都要在阈值内返回;容量与弹性——自动扩缩容扛住大促流量洪峰;快照归档——版本与数据快照可快速恢复;降级预案——主特征失败时用备用特征兜底,避免雪崩。

A=TupTup+Tdown×100%\displaystyle A = \frac{T_{\text{up}}}{T_{\text{up}} + T_{\text{down}}} \times 100\%

1. 分子正常运行时间:在统计周期内特征服务保持可用的总时长。

Tup:available timeT_{\text{up}}: \text{available time}

2. 分母总时间:正常运行与故障停摆时间之和,即整个统计周期。

Tup+Tdown:total timeT_{\text{up}} + T_{\text{down}}: \text{total time}

3. 百分比换算:乘以 100% 后得到 SLA 承诺值,如 99.9%。

×100%\times 100\%

SLA 就是中央厨房写在墙上的出餐时限。它让“今天能不能出菜”从随缘变成承诺,也让主厨有动力优化备菜流程、储备应急食材。对下游来说,SLA 是安全感;对平台来说,SLA 是责任状。

AI 应用场景

电商推荐系统的特征复用与口径统一

阶段:特征工程与特征服务

解决的问题:传统模式下推荐、搜索、广告三个团队各自开发“点击率”“加购率”等特征,重复建设严重,且口径不一致导致跨团队对比失真。AI 通过特征平台沉淀公共特征库,让三方共用一份“用户 7 天点击率”,大幅降低重复开发成本。

具体案例:某电商平台接入特征平台后,先检索再开发,新模型上线时间从 3 周缩短到 5 天;平台内被复用 2 次以上的特征占比达到 60%,而“大盘 GMV 口径”从三套收敛为一套,算法团队沟通成本显著下降。

金融风控的在线离线一致性与 SLA 保障

阶段:模型上线与运维监控

解决的问题:风控模型依赖“近 30 天消费行为”特征,但月初结算口径变化会导致离线训练与在线服务出现偏差,直接拉高误杀率。AI 通过双跑校验在每次特征上线前对比线上线下结果,用 SLA 契约保证实时评分接口的可用性和延迟。

具体案例:某消费金融公司发现“交易金额”特征在线/离线偏差高达 40%,双跑机制定位到时间窗口不一致(离线用 30 自然日,在线用 30×24 小时),修正后偏差降到 2% 以内,风控模型 AUC 回升 1.5 个百分点。

内容推荐的特征版本灰度与管理

阶段:特征版本管理与灰度发布

解决的问题:内容平台升级“用户活跃度”特征时,直接切换会导致尚未重训的模型消费新口径数据,推荐效果暴跌。AI 利用特征平台的版本共存机制,让新旧特征并行服务,待模型逐步重训完成后再关闭旧版本。

具体案例:某短视频应用将“用户活跃度”从 7 天窗口改为 14 天窗口(主版本升级),平台保留 v1 供未迁移模型使用,v2 供新实验使用。灰度两周后线上指标显著提升,且全程无推荐质量事故。

Python 演示

python67 行
import math  class FeaturePlatform:    def __init__(self):        self.registry = {}       # 特征注册表        self.versions = {}       # 版本档案        self.quality_log = {}    # 质量体检记录        self.consistency_log = []  # 一致性校验日志     def register_feature(self, name, owner, domain):        # 命名规范: 域_实体_属性_统计 四段校验        parts = name.split('_')        if len(parts) < 4:            raise ValueError('feature name must be domain_entity_attr_stat')        if name in self.registry:            raise ValueError('duplicated feature: ' + name)        self.registry[name] = {'owner': owner, 'domain': domain}        self.versions[name] = [{'version': '1.0.0', 'sql': 'SELECT ...'}]        return 'registered ' + name     def add_version(self, name, major=0, minor=0, patch=1, sql=''):        # 版本管理: 语义化版本号递增        current = self.versions[name][-1]['version']        base = [int(x) for x in current.split('.')]        base[0] += major        base[1] += minor        base[2] += patch        new_version = '{}.{}.{}'.format(base[0], base[1], base[2])        self.versions[name].append({'version': new_version, 'sql': sql})        return new_version     def audit_quality(self, name, values):        # 质量监控: 计算覆盖率, 均值与标准差        non_null = sum(1 for v in values if v is not None)        total = len(values)        coverage = non_null / total if total else 0.0        mean = sum(v for v in values if v is not None) / non_null if non_null else 0.0        std = math.sqrt(sum((v - mean) ** 2 for v in values if v is not None) / non_null) if non_null else 0.0        self.quality_log[name] = {'coverage': coverage, 'mean': mean, 'std': std}        return self.quality_log[name]     def check_consistency(self, name, online_value, offline_value, epsilon=1e-8):        # 在线离线一致性: 归一化偏差        dev = abs(online_value - offline_value) / (abs(offline_value) + epsilon)        self.consistency_log.append({'feature': name, 'dev': dev})        return dev     def shared_features(self):        # 复用统计: 按业务域聚合特征占比        share_counts = {}        for name, meta in self.registry.items():            dom = meta['domain']            share_counts[dom] = share_counts.get(dom, 0) + 1        total = len(self.registry)        return {dom: round(cnt / total, 2) for dom, cnt in share_counts.items()}  if __name__ == '__main__':    pf = FeaturePlatform()    print(pf.register_feature('member_spend_total_30d', 'alice', 'member'))    print(pf.register_feature('item_click_cnt_7d', 'bob', 'item'))    print(pf.add_version('member_spend_total_30d', major=1, sql='SELECT sum(amount) FROM orders'))    print(pf.audit_quality('member_spend_total_30d', [100, 200, None, 150, 80]))    dev = pf.check_consistency('member_spend_total_30d', 132.5, 130.0)    print('deviation:', round(dev, 4))    print('shared:', pf.shared_features())
目的:实现一个极简特征平台核心,覆盖命名校验、版本管理、质量监控、一致性校验和复用统计五个最佳实践。
  1. parts = name.split('_')按下划线切分特征名,检查是否满足“域_实体_属性_统计”四段结构。
  2. if name in self.registry:注册前查重,从源头规避命名冲突。
  3. base = [int(x) for x in current.split('.')]解析当前版本号三元组,为递增做准备。
  4. coverage = non_null / total if total else 0.0计算覆盖率,总样本为 0 时兜底为 0。
  5. dev = abs(online_value - offline_value) / (abs(offline_value) + epsilon)计算在线离线归一化偏差,epsilon 防止除零。
  6. share_counts[dom] = share_counts.get(dom, 0) + 1按业务域统计特征数,用于复用率聚合。
  7. print(pf.register_feature('member_spend_total_30d', 'alice', 'member'))以会员消费特征为例演示命名规范。

常见误区

误区特征平台就是把特征存下来的地方,跟 Redis 差不多,能读能写就够了。

正解特征平台不是冷库而是中央厨房,核心价值在治理和调度:命名规范、版本管理、质量监控、一致性校验、复用共享、SLA 保障。单纯存储用 HDFS 或 Redis 即可,特征平台解决的是“怎么管、怎么用、怎么保证不出错”。

为何常见:很多团队最初从 Redis 存特征起步,只体验到“存取”能力,误以为平台等于存储。

误区新版本比旧版本好,上线新特征版本就应该立刻让所有线上服务切换过去。

正解线上模型可能还在用旧版本训练出的参数,强行切换等于让旧模型消费新口径数据,效果必然波动。正确做法是新旧版本灰度共存,等下游模型重训验证通过后再逐步切流,必要时保留一键回滚。

为何常见:直觉上“新比旧好”,忽略了特征与模型参数的耦合关系。

误区把在线特征值和离线特征值拉到一起,相等就说明一致,不相等就说明不一致。

正解数值相等不一定口径一致,还要对比分布、空值率和时间窗口。双跑机制要求输入完全相同的请求、同一份代码逻辑,否则测出来的“一致”是假一致。真正的校验是过程一致,而非结果巧合。

为何常见:表面数值对比最直观,最容易忽略隐藏的代码分叉和窗口漂移。

误区特征共享就要把所有特征一股脑放进公共池,谁都能查、谁都能用。

正解共享必须配合权限、脱敏和 owner 机制。手机号、身份证等敏感特征要按角色授权;没有 owner 的特征会被遗忘成无人维护的垃圾资产。中央厨房也不是所有食材都对所有餐厅开放,散装米面可以共享,贵重食材要有领用审批。

为何常见:共享理念被误读为“无限制开源”,忽略了数据安全和责任边界。

误区只要把接口延迟监控好,P99 不超时,SLA 就算达标了。

正解SLA 是完整契约,包含可用性(99.9%)、延迟(P99 阈值)、正确性(返回的特征值准确)、容量弹性(洪峰不宕机)和故障降级。只盯延迟会忽略“可用性已跌到 99%”或“接口返回了错误特征值”这类更致命的问题。

为何常见:延迟是线上最直观的指标,容易让人误以为监控住延迟就监控住了一切。

面试题

Q1. 特征平台中“统一命名”的首要价值是什么?

单选题 · easy

  • A.方便检索和特征复用← 正确答案
  • B.让数据库查询更快
  • C.减少模型训练时间
  • D.提升特征平台颜值

答案:A。统一命名相当于给特征办“身份证”,最直接的价值是让团队能检索、能发现、能复用已有特征,避免重复造轮子。数据库查询、训练时间、界面美观都与命名规范无关,因此正确答案是 A。

Q2. 语义化版本号 1.3.0 中"3"代表什么?

单选题 · easy

  • A.向后兼容的增强← 正确答案
  • B.破坏性口径变更
  • C.紧急缺陷修复
  • D.特征在线延迟

答案:A。语义化版本三元组中,第二位是次版本号,代表向后兼容的增强,比如新增一个默认不改变输出的归一化开关。破坏性变更应该升主版本,缺陷修复应该升修订号,延迟与版本号无关。

Q3. 覆盖率越低说明特征问题越接近哪一类?

单选题 · easy

  • A.缺失值过多← 正确答案
  • B.取值普遍偏大
  • C.命名不够规范
  • D.版本号不统一

答案:A。覆盖率等于非空样本数除以总样本数,覆盖越低意味着缺失值越多,属于质量监控中的缺失问题,而不是取值大小、命名或版本问题,所以选 A。

Q4. 模型已上线,特征主版本需要升级,正确做法是?

单选题 · mid

  • A.双版本共存并灰度← 正确答案
  • B.直接覆盖旧版本特征
  • C.删除线上模型等待从训
  • D.停止提供该特征服务

答案:A。主版本升级属于破坏性口径变更,线上模型可能还在消费旧版本。正确做法是让新旧版本灰度共存,等模型重训验证后再切流。直接覆盖会破坏旧模型,删除模型或停止服务更不可取,因此选 A。

Q5. 在线离线一致性校验中 epsilon 的作用是?

单选题 · mid

  • A.防止分母为零← 正确答案
  • B.提高特征覆盖率
  • C.加速双跑过程
  • D.统一特征命名格式

答案:A。一致性偏差公式的分母是离线值的绝对值加 epsilon。当离线值为 0 时,分母会变成 0 导致除法异常,epsilon 作为极小正数起到保护作用。它不影响覆盖率、双跑速度或命名格式,因此选 A。

Q6. 特征质量监控发现特征均值突然漂移,下一步应该?

单选题 · mid

  • A.触发告警并定位上游← 正确答案
  • B.立即删除该特征
  • C.将模型回滚到首版
  • D.提高特征版本号

答案:A。均值漂移说明数据分布发生异常,正确做法是触发告警并定位上游数据源和计算逻辑,找到根因后修复。直接删除特征、回滚模型或提升版本号都不能解决问题源头,因此选 A。

Q7. 特征复用能够带来哪些收益?

多选题 · mid

  • A.减少重复开发成本← 正确答案
  • B.保持口径全局统一← 正确答案
  • C.必然增加存储开销
  • D.加快新特征上线速度← 正确答案

答案:ABD。特征复用让多个团队共用同一份特征,自然减少重复开发并统一口径,新团队可以基于现成特征快速上线,因此 A、B、D 正确。复用会共享存储而非必然增加总开销,C 错误。

Q8. 下列属于特征平台 SLA 保障内容的有?

多选题 · hard

  • A.接口可用性不低于99.9%← 正确答案
  • B.延迟百分位 P99 达标← 正确答案
  • C.特征命名长度不超过 64 字符
  • D.降级方案与容量弹性← 正确答案

答案:ABD。SLA 是特征团队对下游的契约,包含可用性(如 99.9%)、延迟(如 P99)、正确性和降级预案、容量弹性,因此 A、B、D 正确。命名长度属于命名规范范畴,不属于 SLA 保障内容,C 错误。

Q9. 某团队把用户年龄缺失值从填 0 改为填均值,这属于何种版本变更?

单选题 · hard

  • A.主版本破坏性变更← 正确答案
  • B.次版本向后兼容增强
  • C.补丁版本缺陷修复
  • D.无需登记版本变更

答案:A。缺失值从填 0 改为填均值会显著改变特征分布和模型输入,属于口径级的破坏性变更,应升级主版本并让下游模型重训验证。次版本兼容增强要求默认输出不变,补丁修复要求结果几乎不变,都不符合这种大改动,因此选 A。

Q10. 在线离线特征不一致的典型根因包括?

多选题 · extreme

  • A.训练与服务代码分叉← 正确答案
  • B.统计时间窗口不同← 正确答案
  • C.上游数据口径漂移← 正确答案
  • D.特征复用率偏低

答案:ABC。在线离线不一致的三大根因正是代码分叉、时间窗口不同和上游口径漂移。代码分叉导致同一特征两套实现,窗口不同导致统计范围差异,口径漂移让数据源前后不一致。特征复用率低与不一致没有直接因果关系,因此选 A、B、C。