4. ABC分类的实战案例
理论框架建立后,本章将聚焦于ABC分类的落地执行。我们将通过两个最常用的工具——Excel(适合单次、小规模分析)和Python(适合周期性、大规模自动化)——完成从数据准备到分类输出的全流程。无论你身处哪个行业,掌握这两种方法都能让你在库存分析中游刃有余。
4.1 实战案例背景:某电子元器件仓库数据
为统一演示,我们使用以下模拟数据集。该数据集包含10个SKU,涵盖年用量与单价信息,是典型的ABC分析输入格式。
| SKU编号 | 物料名称 | 年用量(件) | 单价(元) |
|---|---|---|---|
| A001 | 主控芯片IC-01 | 5,000 | 120.00 |
| A002 | 高频电容C-100 | 50,000 | 0.85 |
| B001 | 连接器CON-8P | 12,000 | 3.50 |
| B002 | 电阻R-1K | 200,000 | 0.12 |
| C001 | 散热片HS-40 | 800 | 45.00 |
| C002 | LED指示灯绿 | 30,000 | 0.60 |
| D001 | 电源模块PM-12 | 1,200 | 85.00 |
| D002 | 贴片电感L-10 | 15,000 | 1.20 |
| E001 | 晶振X-16M | 6,000 | 2.80 |
| E002 | 铝电解电容CAP-100 | 8,000 | 4.50 |
数据准备要点:确保年用量数据覆盖完整12个月周期,单价采用加权平均采购成本。若存在汇率波动或批量折扣,建议使用标准成本。
4.2 使用Excel进行ABC分类实操(手动流程)
Excel是快速验证分类逻辑的首选工具。以下步骤将引导你从原始数据生成ABC分类结果。
步骤1:计算年度金额与排序
- 新增列“年度金额” = 年用量 × 单价。
- 按“年度金额”降序排列整个数据集。
- 新增列“累计金额”,从最大项开始向下累加。
- 新增列“累计金额占比” = 累计金额 / 总金额。
步骤2:设定分类阈值并标记类别
使用标准阈值:A类(前70%~80%累计占比)、B类(80%~95%)、C类(95%~100%)。在Excel中可使用IF嵌套函数实现自动标记。
=IF(E2<=0.7, "A", IF(E2<=0.95, "B", "C"))
其中E列为累计金额占比。将公式向下填充即可完成分类。
步骤3:结果验证与可视化
使用Excel的柱状图+折线图组合绘制帕累托图:柱状图显示各SKU年度金额,折线图显示累计占比。快速检查A类物料是否确实为少数高价值项。
| SKU | 年度金额(元) | 累计占比 | ABC类别 |
|---|---|---|---|
| A001 | 600,000 | 38.5% | A |
| D001 | 102,000 | 45.0% | A |
| C001 | 36,000 | 47.3% | B |
| E002 | 36,000 | 49.6% | B |
| B001 | 42,000 | 52.3% | B |
| … | … | … | … |
Excel实操避坑:排序前务必锁定数据区域,避免排序后公式错乱。建议先将原始数据粘贴为数值,再执行排序操作。
4.3 使用Python进行ABC分类自动化(脚本流程)
当SKU数量超过500个或需要每月重复分析时,Python脚本能大幅提升效率。以下代码使用pandas库实现全流程自动化。
核心代码实现
import pandas as pd
import numpy as np
# 1. 读取数据
df = pd.read_excel('inventory_data.xlsx')
# 2. 计算年度金额
df['Annual_Value'] = df['Annual_Usage'] * df['Unit_Price']
# 3. 按金额降序排序并重置索引
df = df.sort_values('Annual_Value', ascending=False).reset_index(drop=True)
# 4. 计算累计金额与累计占比
df['Cumulative_Value'] = df['Annual_Value'].cumsum()
total_value = df['Annual_Value'].sum()
df['Cumulative_Percent'] = df['Cumulative_Value'] / total_value
# 5. 定义分类函数
def abc_classifier(percent):
if percent <= 0.70:
return 'A'
elif percent <= 0.95:
return 'B'
else:
return 'C'
# 6. 应用分类
df['ABC_Class'] = df['Cumulative_Percent'].apply(abc_classifier)
# 7. 输出结果
df.to_excel('abc_classified_output.xlsx', index=False)
print("ABC分类完成,结果已保存。")
print(df[['SKU', 'Annual_Value', 'Cumulative_Percent', 'ABC_Class']].head(10))
脚本扩展建议
- 参数化阈值:将0.70和0.95定义为变量,便于根据不同业务场景调整。
- 多维度分类:可扩展为同时考虑金额与缺货风险的二维矩阵分类。
- 自动生成报告:集成
matplotlib库,在脚本运行后自动输出帕累托图。
Python自动化注意事项:确保输入数据无空值,且金额列数据类型为数值型。建议在脚本开头加入数据校验步骤,避免因数据格式错误导致分类偏差。
4.4 Excel vs Python:方法对比与选型建议
| 对比维度 | Excel方法 | Python方法 |
|---|---|---|
| 上手难度 | 低,基础操作即可 | 中,需基础编程能力 |
| 处理规模 | 适合<5000行数据 | 可处理百万级数据 |
| 重复执行效率 | 低,每次需手动操作 | 高,一键运行 |
| 可追溯性 | 依赖操作步骤记录 | 代码即文档,版本可控 |
| 可视化能力 | 内置图表,交互性强 | 需额外库,静态图为主 |
| 适用场景 | 临时分析、快速验证 | 月度/季度定期分析、数据管道 |
选型建议:对于初创企业或SKU少于200个的团队,Excel完全够用。当企业进入成长期,SKU突破1000且需要与ERP系统对接时,建议迁移至Python自动化方案。
4.5 ABC分类自动化流程架构
下图展示了从数据输入到分类输出的完整自动化流程,适用于Python脚本或任何编程语言实现的分类系统。
4.6 实操检查清单
无论选择哪种工具,完成ABC分类后请对照以下清单进行质量检查:
- 完整性检查:所有SKU是否都被分配了类别?无遗漏项。
- 合理性检查:A类SKU数量是否占总SKU数的5%~15%?金额占比是否在60%~80%?
- 边界检查:位于阈值边界(如累计占比69.5%或70.5%)的SKU是否被正确归类?
- 一致性检查:同一物料编码在不同数据源中的分类结果是否一致?
- 可操作性检查:分类结果是否能直接指导后续的盘点策略、采购策略和安全库存设置?
关键认知:ABC分类不是一次性的工作。建议每季度或每半年重新运行一次分类流程,因为产品生命周期、市场需求和采购价格都在动态变化。将分类自动化脚本纳入月度运营流程,是库存精细化管理的第一步。