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散度、均值差),判断是否发生漂移。
批次与数据漂移的关系框架 参考批次 训练期数据 当前批次 生产期数据 批次N 中间批次 偏移度量(PSI / KL散度 / 均值差) 对比参考批次与当前批次的特征分布差异 判断是否发生数据漂移及漂移程度 诊断结论:稳定 / 轻度漂移 / 严重漂移

2.4 批次划分的常见陷阱与避坑

  • 批次粒度不匹配: 训练批次按“月”划分,生产批次按“天”划分,导致对比基准不一致。应保持参考批次与当前批次的粒度相同。
  • 批次数据量过小: 批次内样本量不足(如<100条),统计分布不稳定,偏移度量结果不可信。建议每个批次至少包含500~1000条样本。
  • 忽略时间对齐: 比较“周一”与“周日”的数据分布,可能因星期效应产生假阳性漂移。应使用同期对比(如本周一 vs 上周一)。