特征 Schema 参考¶
本项目现在需要区分两类 schema:
- 声明式 schema:原始
schema.json,描述列布局、特征 FID、词表大小上界和 multi-hot 维度。训练、评估、推理加载数据时首先读取这一份。 - 观测 schema:按真实 parquet 内容统计得到的 sidecar,和
schema.json形状一致,但基数与实际 multi-hot 维度来自当前数据切片。
Schema 会随数据集规模变化而变化。样本量越大,观测到的唯一值越多,基数越接近真实分布;因此 Train / Eval 不能再直接抄运行日志里的 Loaded PCVR schema,必须使用 split-specific observed schema sidecar。
[!IMPORTANT] 当前运行日志里的
PCVR train schema payload/PCVR valid schema payload是压缩成单行 JSON 的声明式schema.json,便于日志检索,但它们不是 Train / Eval 独立统计结果。当前实现中,真正用于回填 Train / Eval 列的文件是: - 训练:
train_split_observed_schema.json、valid_split_observed_schema.json- 评估:evaluation_observed_schema.json
数据集与 Schema 对应关系¶
| Schema | 来源 | 样本量 | 用途 | 状态 |
|---|---|---|---|---|
| Infer | 数据集或 checkpoint 侧车 schema.json(声明式) |
全量数据集;当前 AMS 日志示例总计 1,010,000 行 | taac-evaluate infer 线上打分,无 label |
已有 |
| Eval | evaluation_observed_schema.json(观测) |
当前 AMS 日志示例 102,619 行 / 100 Row Groups | taac-evaluate single 本地验证,有 label |
已实现,待回填表格 |
| Demo | data/sample_1000_raw/schema.json |
1000 | 本地开发、单元测试 | 已有 |
| Train | train_split_observed_schema.json / valid_split_observed_schema.json(观测) |
当前 AMS 日志示例 907,381 / 102,619 行 | 训练时内部验证(Row Group split) | 已实现,待回填表格 |
当前实现约定¶
taac-train训练结束后会返回observed_schema_paths.train_split和observed_schema_paths.valid_split。taac-evaluate single会在evaluation.json中返回observed_schema_paths.eval,对应evaluation_observed_schema.json。taac-evaluate infer当前仍以声明式schema.json为准,不额外生成 infer observed schema sidecar。- 当前 AMS 训练日志示例的 Row Group 切分为
900 train / 100 valid,对应907,381 train rows / 102,619 valid rows。
流程说明¶
训练时: schema.json (声明式) ──► train_loader (前90% Row Groups) ──► trainer.train()
└► valid_loader (后10% Row Groups) ──► trainer.evaluate() → AUC / early stopping
└► train_split_observed_schema.json / valid_split_observed_schema.json
评估时: taac-evaluate single ──► experiment.evaluate()
└► evaluation.json (AUC + CI)
└► evaluation_observed_schema.json
打分时: taac-evaluate infer ──► experiment.infer() → predictions.json (user_id: score)
特征格式说明¶
每个整数特征以 [fid, cardinality, multi_hot_dim] 三元组定义:
| 字段 | 说明 |
|---|---|
fid |
特征 ID |
cardinality |
唯一值数量(基数) |
multi_hot_dim |
multi-hot 编码维度,1 表示单值特征 |
稠密特征以 [fid, dim] 二元组定义,序列特征以 [fid, cardinality] 二元组定义。
声明式 schema 和观测 schema 共享同一形状,因此 Train / Eval sidecar 可以直接按本文表格结构回填。
用户整数特征 (user_int)¶
共 46 个特征。
下表直接给出 user_int 在 Infer / Eval / Demo / Train 之间的基数对比,重点关注高基数用户 ID、用户分群以及多值交叉特征的覆盖差异。
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 | Infer Multi-Hot | Eval Multi-Hot | Demo Multi-Hot | Train Multi-Hot | 说明 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 6 | 5 | 1 | 1 | 用户基础属性 | ||||
| 3 | 1725 | 1840 | 1 | 1 | 用户 ID | ||||
| 4 | 957 | 987 | 1 | 1 | 用户分群 | ||||
| 15 | 1167 | 1172 | 26 | 13 | 高基数用户特征 | ||||
| 48 | 101 | 100 | 1 | 1 | 用户行为统计 | ||||
| 49 | 3 | 3 | 1 | 1 | |||||
| 50 | 4 | 2 | 1 | 1 | |||||
| 51 | 144 | 151 | 1 | 1 | |||||
| 52 | 177 | 175 | 1 | 1 | |||||
| 53 | 548 | 558 | 1 | 1 | |||||
| 54 | 2848 | 2844 | 1 | 1 | |||||
| 55 | 40 | 42 | 1 | 1 | |||||
| 56 | 1423 | 1435 | 1 | 1 | |||||
| 57 | 241 | 251 | 1 | 1 | |||||
| 58 | 3 | 3 | 1 | 1 | |||||
| 59 | 17 | 15 | 1 | 1 | |||||
| 60 | 3 | 3 | 2 | 2 | 用户交叉特征 | ||||
| 62 | 11 | 11 | 6 | 5 | |||||
| 63 | 49 | 46 | 19 | 11 | |||||
| 64 | 51 | 51 | 26 | 18 | |||||
| 65 | 425 | 443 | 111 | 49 | |||||
| 66 | 1403 | 1473 | 150 | 66 | |||||
| 80 | 13 | 13 | 6 | 5 | |||||
| 82 | 24 | 24 | 1 | 1 | |||||
| 86 | 241 | 246 | 1 | 1 | |||||
| 89 | 10 | 10 | 10 | 10 | 用户序列统计 | ||||
| 90 | 10 | 10 | 10 | 10 | |||||
| 91 | 10 | 10 | 10 | 10 | |||||
| 92 | 3 | 3 | 1 | 1 | |||||
| 93 | 38 | 38 | 1 | 1 | |||||
| 94 | 7 | 7 | 1 | 1 | |||||
| 95 | 4 | 4 | 1 | 1 | |||||
| 96 | 4 | 4 | 1 | 1 | |||||
| 97 | 4 | 4 | 1 | 1 | |||||
| 98 | 4 | 4 | 1 | 1 | |||||
| 99 | 4 | 4 | 1 | 1 | |||||
| 100 | 4 | 3 | 1 | 1 | |||||
| 101 | 4 | 4 | 1 | 1 | |||||
| 102 | 4 | 4 | 1 | 1 | |||||
| 103 | 4 | 4 | 1 | 1 | |||||
| 104 | 4 | 4 | 1 | 1 | |||||
| 105 | 4 | 4 | 1 | 1 | |||||
| 106 | 4 | 4 | 1 | 1 | |||||
| 107 | 4 | 3 | 1 | 1 | |||||
| 108 | 8 | 8 | 1 | 1 | |||||
| 109 | 8 | 8 | 1 | 1 | |||||
上表同时覆盖 user_int 的 multi-hot 维度变化,可直接对比完整数据、开发样本和后续待补齐的 split 观测结果。 |
物品整数特征 (item_int)¶
共 14 个特征。
下表直接展示 item_int 的基数与 multi-hot 差异,尤其适合观察物品 ID、内容特征和交叉特征在不同数据规模下的离散程度。
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 | Infer Multi-Hot | Eval Multi-Hot | Demo Multi-Hot | Train Multi-Hot | 说明 |
|---|---|---|---|---|---|---|---|---|---|
| 5 | 309 | 326 | 1 | 1 | 物品类目 | ||||
| 6 | 912 | 978 | 1 | 1 | 物品属性 | ||||
| 7 | 2443 | 2807 | 1 | 1 | 物品标签 | ||||
| 8 | 2131 | 2432 | 1 | 1 | 物品来源 | ||||
| 9 | 42 | 38 | 1 | 1 | 物品统计 | ||||
| 10 | 300 | 310 | 1 | 1 | |||||
| 11 | 21528 | 32506 | 20 | 20 | 物品 ID(高基数) | ||||
| 12 | 2443 | 2778 | 1 | 1 | |||||
| 13 | 9 | 9 | 1 | 1 | |||||
| 16 | 23700 | 35260 | 1 | 1 | 物品内容特征 | ||||
| 81 | 3 | 3 | 1 | 1 | 物品交叉特征 | ||||
| 83 | 32 | 32 | 1 | 1 | |||||
| 84 | 234 | 227 | 1 | 1 | |||||
| 85 | 1084 | 1002 | 1 | 1 |
用户稠密特征 (user_dense)¶
共 10 个特征。
下表直接比较 user_dense 的维度变化,用于判断 embedding 向量、统计特征和序列聚合特征在不同 schema 下是否保持一致。
| FID | Infer 维度 | Eval 维度 | Demo 维度 | Train 维度 | 说明 |
|---|---|---|---|---|---|
| 61 | 256 | 256 | 预训练 embedding 向量 | ||
| 62 | 6 | 5 | 稠密特征 | ||
| 63 | 19 | 11 | |||
| 64 | 26 | 18 | |||
| 65 | 111 | 49 | |||
| 66 | 150 | 66 | |||
| 87 | 320 | 320 | |||
| 89 | 10 | 10 | |||
| 90 | 10 | 10 | |||
| 91 | 10 | 10 |
序列特征 (seq)¶
共 4 条行为序列,支持跨域兴趣建模。
下文按域分别列出序列特征基数,便于直接比较各行为域在完整数据、开发样本和后续观测 sidecar 之间的覆盖范围与时间戳统计差异。
seq_a — 域 A 序列¶
- 前缀:
domain_a_seq - 时间戳 FID: 39
- 特征数: 9
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 |
|---|---|---|---|---|
| 38 | 745286 | 1201293 | ||
| 39 | 0 | 1772725488 | ||
| 40 | 19 | 19 | ||
| 41 | 11 | 12 | ||
| 42 | 1005 | 1018 | ||
| 43 | 3342 | 3450 | ||
| 44 | 12735 | 15147 | ||
| 45 | 7612 | 9213 | ||
| 46 | 18 | 18 |
seq_b — 域 B 序列¶
- 前缀:
domain_b_seq - 时间戳 FID: 67
- 特征数: 14
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 |
|---|---|---|---|---|
| 67 | 0 | 1772725643 | ||
| 68 | 28 | 28 | ||
| 69 | 64710562 | 143233600 | ||
| 70 | 726 | 734 | ||
| 71 | 2669 | 2691 | ||
| 72 | 10203 | 10490 | ||
| 73 | 6761 | 7239 | ||
| 74 | 476333 | 638924 | ||
| 75 | 31 | 30 | ||
| 76 | 132080 | 164032 | ||
| 77 | 166 | 168 | ||
| 78 | 4229 | 4320 | ||
| 79 | 11387 | 11781 | ||
| 88 | 199678 | 288959 |
seq_c — 域 C 序列¶
- 前缀:
domain_c_seq - 时间戳 FID: 27
- 特征数: 12
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 |
|---|---|---|---|---|
| 27 | 0 | 1772725681 | ||
| 28 | 73 | 75 | ||
| 29 | 5764358 | 8227608 | ||
| 30 | 846 | 858 | ||
| 31 | 6805 | 7086 | ||
| 32 | 7 | 7 | ||
| 33 | 5 | 4 | ||
| 34 | 1031305 | 1986300 | ||
| 35 | 2896 | 3004 | ||
| 36 | 977479 | 1511293 | ||
| 37 | 9433 | 9975 | ||
| 47 | 86335515 | 278677640 |
seq_d — 域 D 序列¶
- 前缀:
domain_d_seq - 时间戳 FID: 26
- 特征数: 10
| FID | Infer 基数 | Eval 基数 | Demo 基数 | Train 基数 |
|---|---|---|---|---|
| 17 | 5 | 5 | ||
| 18 | 966 | 975 | ||
| 19 | 3300 | 3420 | ||
| 20 | 10785 | 11298 | ||
| 21 | 4929 | 5106 | ||
| 22 | 404398 | 510191 | ||
| 23 | 606041 | 674034 | ||
| 24 | 531 | 603 | ||
| 25 | 15 | 15 | ||
| 26 | 0 | 1772725621 |
Infer vs Demo 差异总结¶
- 当前日志里的
PCVR train schema payload/PCVR valid schema payload已改为单行打印,便于平台日志检索;它们表示声明式 schema,不表示 Train / Eval 的 observed schema。 - Train / Eval 列后续应从
train_split_observed_schema.json、valid_split_observed_schema.json、evaluation_observed_schema.json回填,而不是从日志里的单行 payload 复制。 - multi-hot 维度差异显著:Infer 来自完整数据集,multi-hot 更大(如 FID 65: 111 vs 49)
- 物品 ID 基数:Demo 32506 > Infer 21528,Demo 样本的物品分布更分散
- 时间戳 FID(39/67/27/26):Demo 有实际值(如 1772725488),Infer 为 0(线上 schema 未统计时间戳范围)
- FID 100/107 基数:Demo 为 3,Infer 为 4,说明完整数据集多覆盖了一类