2. 数据批次概念:时间窗口划分、批次ID生成、批次与数据漂移的关系
在特征稳定性分析中,“批次”是核心分析单元。批次不是简单的数据集合,而是按照严格的时间窗口或业务事件划分的数据切片。理解批次的概念,是后续使用SQL窗口函数进行偏移诊断的基础。
2.1 时间窗口划分:批次的边界定义
时间窗口决定了批次的数据范围。常见的划分方式有三种:
| 窗口类型 | 定义方式 | 适用场景 | 示例 |
|---|---|---|---|
| 固定日历窗口 | 按自然日、周、月、季度划分 | 业务周期稳定,如日报、月报 | 2024-01-01 ~ 2024-01-31 |
| 滑动时间窗口 | 按固定时长(如7天、30天)滑动 | 实时监控、滚动评估 | 最近7天(含今天) |
| 事件驱动窗口 | 按业务事件(如版本发布、促销活动)划分 | 业务有明确里程碑 | V2.0上线后3天 |
实践建议: 在特征稳定性诊断中,优先使用固定日历窗口(如按天)作为基础批次单元。它天然对齐业务报表周期,且便于与历史同期数据对比。滑动窗口更适合做实时漂移告警,而非深度诊断。
2.2 批次ID生成:SQL实现与最佳实践
批次ID是每个数据行的“批次归属标签”。在SQL中,通常使用日期函数或窗口函数生成批次ID。以下是两种最常用的生成方式:
方式一:基于时间戳截断(推荐用于固定窗口)
-- 按天生成批次ID:格式为 'YYYY-MM-DD'
SELECT
order_id,
order_time,
DATE(order_time) AS batch_id_day -- 批次ID = 日期
FROM orders;
-- 按周生成批次ID:使用ISO周
SELECT
order_id,
order_time,
CONCAT(YEAR(order_time), '-W', LPAD(WEEK(order_time, 1), 2, '0')) AS batch_id_week
FROM orders;
方式二:基于窗口函数编号(推荐用于滑动窗口或自定义区间)
-- 按连续7天滑动窗口生成批次ID
SELECT
order_id,
order_time,
FLOOR(DATEDIFF(order_time, '2024-01-01') / 7) AS batch_id_sliding
FROM orders;
-- 按业务事件:每1000条记录为一个批次
SELECT
order_id,
order_time,
CEIL(ROW_NUMBER() OVER (ORDER BY order_time) / 1000.0) AS batch_id_event
FROM orders;
注意: 批次ID必须满足唯一性和单调性。唯一性确保每个批次可独立聚合;单调性(时间递增)是后续计算偏移量的前提。避免使用随机数或哈希值作为批次ID。
2.3 批次与数据漂移的关系:诊断的起点
数据漂移(Data Drift)是指模型输入特征的统计分布随时间发生变化。批次是观察这种变化的“显微镜”。没有批次划分,就无法量化“变化”。
批次与数据漂移的核心关系可以概括为:
- 参考批次(Reference Batch): 通常选取模型训练期的数据批次,作为分布基准。
- 当前批次(Current Batch): 生产环境中最新的数据批次,用于与参考批次对比。
- 偏移度量: 通过计算两个批次之间特征分布的差异(如PSI、KL散度、均值差),判断是否发生漂移。
2.4 批次划分的常见陷阱与避坑
- 批次粒度不匹配: 训练批次按“月”划分,生产批次按“天”划分,导致对比基准不一致。应保持参考批次与当前批次的粒度相同。
- 批次数据量过小: 批次内样本量不足(如<100条),统计分布不稳定,偏移度量结果不可信。建议每个批次至少包含500~1000条样本。
- 忽略时间对齐: 比较“周一”与“周日”的数据分布,可能因星期效应产生假阳性漂移。应使用同期对比(如本周一 vs 上周一)。