跳转至

特征 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.jsonvalid_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_splitobserved_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.jsonvalid_split_observed_schema.jsonevaluation_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,说明完整数据集多覆盖了一类

评论