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 采集架构,包含增量抽取、字段映射与质量校验三个关键阶段:
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 分类计算阶段:
- 完整性校验:核心字段缺失率为 0%,无空值记录。
- 唯一性校验:SKU + Data_Date 组合无重复。
- 范围校验:Quantity ≥ 0,Unit_Price > 0,Sales_Amount ≥ 0。
- 逻辑校验:Cost 与 Sales_Amount 的比例在 [0.1, 10] 区间内。
- 分布校验:各字段的偏度与峰度在清洗前后变化不超过 20%。
常见陷阱:不要对销售额和成本字段使用全局均值填充。库存数据通常呈现长尾分布,全局均值会严重扭曲 A 类 SKU 的边界值,导致分类结果失真。
完成上述数据准备与清洗步骤后,即可获得一份结构规范、质量可靠的库存数据集,为后续 ABC 分类参数调优提供坚实的工程基础。