4. 数据准备与清洗:库存数据采集、字段定义与异常处理

ABC 分类参数调优的工程基础是高质量、可追溯的库存数据集。本章聚焦于从业务系统原始数据到分析就绪数据集的完整链路,涵盖字段定义、采集策略、异常值检测与缺失值填充。数据质量直接决定分类边界的可信度与后续调优效果,因此本环节必须建立可复用的工程规范。

4.1 核心字段定义与数据字典

库存 ABC 分类所需的最小字段集包含 6 个核心维度。下表定义了每个字段的名称、类型、业务含义及来源系统:

字段名 数据类型 业务含义 来源系统
SKU VARCHAR(50) 库存单位唯一编码,粒度决定分类精度 ERP / WMS
Quantity DECIMAL(12,2) 当前可用库存数量(含在途预留) WMS 实时库存表
Unit_Price DECIMAL(10,2) SKU 标准采购单价或加权平均成本 采购模块 / 财务系统
Sales_Amount DECIMAL(14,2) 过去 12 个月累计销售额(含税) 销售订单明细
Cost DECIMAL(14,2) 过去 12 个月累计采购成本 采购入库单 / 成本核算
Data_Date DATE 数据快照日期,用于时间切片分析 系统时间戳
工程建议:SKU 字段必须保证全局唯一且大小写一致。建议在采集层统一转为大写并去除前后空格,避免因编码不一致导致分类结果偏移。

4.2 数据采集流程与 ETL 架构

库存数据通常分布在 ERP、WMS、财务系统三个异构源中。下图展示了标准 ETL 采集架构,包含增量抽取、字段映射与质量校验三个关键阶段:

库存数据采集 ETL 架构 ERP 系统 SKU / 单价 / 成本 WMS 系统 库存数量 / 库位 财务系统 销售额 / 成本核算 增量抽取层 基于时间戳 / 变更日志的增量拉取 字段映射与标准化 统一字段名 / 数据类型 / 单位换算 质量校验与异常标记 空值检测 / 范围校验 / 逻辑一致性检查

4.3 异常值检测与处理策略

库存数据中常见的异常类型包括:负库存数量、单价为零或异常高、销售额与成本倒挂、SKU 重复记录。下表汇总了各类异常的检测规则与工程处理方案:

异常类型 检测规则 处理策略 优先级
负库存数量 Quantity < 0 标记为待盘点,暂用 0 替代 P0
单价为零 Unit_Price = 0 取同品类加权均价填充 P0
销售额异常高 Sales_Amount > 均值 + 3σ 截断至 99.5% 分位数 P1
成本 > 销售额 Cost > Sales_Amount 保留数据,标记为“倒挂” P2
SKU 重复 同 SKU 多条记录 按 Data_Date 取最新一条 P0
关键原则:异常值处理应遵循“先标记、后处理、可回滚”的工程规范。所有修改操作必须记录在数据血缘日志中,便于后续审计与参数调优回溯。

4.4 缺失值填充方法

缺失值主要出现在 Unit_Price、Cost 和 Sales_Amount 三个字段。根据缺失率与业务含义,采用分层填充策略:

  • 低缺失率(< 5%):使用同品类中位数填充,保持分布稳定性。
  • 中缺失率(5% ~ 15%):采用 KNN 回归(k=5),基于相似 SKU 的完整记录预测缺失值。
  • 高缺失率(> 15%):该 SKU 数据不可靠,整条记录标记为“低置信度”,不参与 ABC 分类计算。

以下 Python 代码实现了基于品类中位数的缺失值填充逻辑:

import pandas as pd

def fill_missing_by_category(df, fill_col='Unit_Price', group_col='Category'):
    """
    按品类中位数填充缺失值
    """
    category_median = df.groupby(group_col)[fill_col].median()
    df[fill_col] = df.apply(
        lambda row: category_median[row[group_col]] 
        if pd.isna(row[fill_col]) else row[fill_col],
        axis=1
    )
    return df

# 示例调用
inventory_df = pd.read_csv('inventory_raw.csv')
inventory_df = fill_missing_by_category(inventory_df, 'Unit_Price', 'Category')
inventory_df = fill_missing_by_category(inventory_df, 'Cost', 'Category')

4.5 数据清洗后的质量校验清单

清洗完成后,必须通过以下 5 项质量校验才能进入 ABC 分类计算阶段:

  1. 完整性校验:核心字段缺失率为 0%,无空值记录。
  2. 唯一性校验:SKU + Data_Date 组合无重复。
  3. 范围校验:Quantity ≥ 0,Unit_Price > 0,Sales_Amount ≥ 0。
  4. 逻辑校验:Cost 与 Sales_Amount 的比例在 [0.1, 10] 区间内。
  5. 分布校验:各字段的偏度与峰度在清洗前后变化不超过 20%。
常见陷阱:不要对销售额和成本字段使用全局均值填充。库存数据通常呈现长尾分布,全局均值会严重扭曲 A 类 SKU 的边界值,导致分类结果失真。

完成上述数据准备与清洗步骤后,即可获得一份结构规范、质量可靠的库存数据集,为后续 ABC 分类参数调优提供坚实的工程基础。