2. 实验数据资产盘点

实验数据变更之所以难以评估影响,根本原因在于数据资产之间并非孤立存在,而是通过一条条隐式或显式的依赖链相互咬合。一次看似只改了一个字段类型的操作,可能沿着“数据表→特征→标签→指标→模型→报表”的链路一路传导,最终让某个业务看板上的核心指标发生偏移。因此,变更影响分析的第一步不是急着改代码,而是先把这条链上的资产和依赖关系盘清楚,形成一份可查询、可追溯的数据资产清单。

一、七类资产:盘点的基本对象

在实验数据体系中,需要盘点的资产可以归纳为七类,它们构成了依赖链上的不同节点:

  • 实验对象:实验所作用的业务实体,如“用户”“订单”“商品”“门店”。它决定了数据的主键粒度和分区方式。
  • 数据表:承载原始或加工数据的物理/逻辑表,如 dwd_user_action_di、dws_order_agg_1d。需记录表名、分层、分区字段、更新频率、负责人。
  • 特征:从数据表加工出的模型输入变量,如“近7日下单次数”“客单价分位”。特征往往有明确的加工口径和窗口。
  • 标签:监督学习的目标变量或实验的分组标识,如“是否复购”“实验组/对照组”。标签口径变化会直接改变模型训练目标。
  • 指标:用于衡量实验效果的统计量,如“转化率”“人均GMV”“次日留存”。指标依赖特征或标签的聚合结果。
  • 模型:消费特征与标签的算法产物,如排序模型、转化率预估模型。模型对输入特征的分布和类型高度敏感。
  • 报表:面向业务决策的展示层,如实验日报、AB 看板。报表通常消费指标,是变更影响的最终暴露面。

这七类资产之间存在方向明确的依赖:数据表产出特征与标签,特征与标签共同支撑指标和模型,指标与模型结果最终汇入报表。盘点的目标,就是为每个资产建立“它依赖谁、谁依赖它”的双向记录。

二、依赖关系的三种类型

依赖关系不能只记“有关系”,而要区分类型,因为不同类型的变更传导方式不同:

  • 结构依赖:字段名、类型、分区键的引用关系。例如特征 user_7d_orders 直接引用 dws_order_agg_1d.order_cnt_7d。改字段类型会直接破坏特征计算。
  • 口径依赖:计算逻辑或过滤条件的继承关系。例如指标“有效订单数”依赖标签“有效订单”的判定规则。口径变更不会报错,但会静默改变数值。
  • 时序依赖:上游产出时间与下游调度时间的先后约束。例如报表 T+1 早上 8 点刷新,要求指标表在 6 点前完成。上游延迟会直接导致报表空窗。

把依赖类型标注清楚,才能在变更时快速判断:这次改动是会让任务直接失败(结构依赖),还是让结果悄悄偏移(口径依赖),或是让链路整体延迟(时序依赖)。

三、资产清单的字段设计

一份可用的数据资产清单,不是简单的资产罗列,而应包含足够的元信息支撑影响分析。建议每条资产记录以下字段:资产唯一标识、资产类型、所属分层、负责人、上游依赖列表、下游影响列表、依赖类型、变更敏感度、最近变更时间。其中“变更敏感度”用于标记该资产被改动后影响范围的大小,可粗分为高、中、低三档,便于排优先级。

下面给出一份可直接参考的清单示例,覆盖从数据表到报表的完整链路。示例中的表名、特征名和数值均为教学假设,用于说明字段填写方式。

资产标识 类型 上游依赖 下游影响 依赖类型 敏感度
dwd_user_action_di 数据表 ods_user_action_log feat_user_active_7d 结构 高
feat_user_active_7d 特征 dwd_user_action_di model_repurchase_v3 结构+口径 高
label_repurchase_30d 标签 dws_order_agg_1d model_repurchase_v3 口径 高
metric_conversion_rate 指标 label_repurchase_30d rpt_ab_daily 口径 中
model_repurchase_v3 模型 feat_user_active_7d, label_repurchase_30d rpt_ab_daily 结构+口径 高
rpt_ab_daily 报表 metric_conversion_rate, model_repurchase_v3 业务决策 时序 中

四、依赖链的可视化:从表到报表的传导路径

清单是表格化的记录,而依赖链更适合用图来表达。下图展示了本节示例链路中,一次数据表字段变更如何沿依赖关系逐级传导到报表,并标注了每一跳的依赖类型。图中实线表示结构依赖,虚线表示口径依赖,点线表示时序依赖。

实验数据资产依赖链:从数据表到报表的变更传导 数据表 dwd_user_action_di 特征 feat_user_active_7d 标签 label_repurchase_30d 模型 model_repurchase_v3 指标 metric_conversion_rate 报表 rpt_ab_daily 结构 口径 结构 口径 口径 结构 时序 图例 结构依赖(字段/类型引用) 口径依赖(逻辑/过滤继承) 时序依赖(调度先后约束) 示例链路:dwd_user_action_di 字段变更 → 特征失效 → 模型输入异常 → 报表指标偏移

五、盘点落地的关键动作

资产清单不是一次性文档,而是需要持续维护的活数据。落地时建议抓住三个动作。第一,从下游反推上游:先列出所有报表和模型,再逐层向上追问“它读了哪些指标、特征、标签、表”,这样不容易遗漏隐式依赖。第二,为每条依赖标注类型和敏感度:结构依赖优先做字段级血缘,口径依赖优先记录计算 SQL 或规则版本,时序依赖优先记录调度时间和 SLA。第三,把清单接入变更流程:任何一次数据表或特征变更,都先查清单中的下游影响列表,按敏感度决定回归验证的范围和深度。

盘点的最小可用标准是:给定任意一个数据表或特征,能在清单中查到它的直接下游,并知道每条下游依赖属于结构、口径还是时序。做不到这一点,变更影响分析就只能靠经验猜测。
常见误区是把“表被谁引用”等同于“依赖关系”。实际上,很多口径依赖并不体现在 SQL 的 FROM 子句中,而是藏在过滤条件、时间窗口或标签定义里。盘点时必须把这类隐式依赖显式写出来,否则变更时极易漏判。

完成资产盘点后,团队就拥有了一张“变更影响地图”。后续无论是字段类型调整、特征口径修订,还是标签规则升级,都可以先在地图上定位受影响的下游资产,再决定回归验证的优先级和范围。这正是把变更影响分析从被动救火转为主动防控的基础。