分析背景#

采购部门提出需求:

我们和 50+ 家供应商合作,但不知道哪些供应商的价格偏高,哪些有议价空间。

目标:

  1. 识别价格异常的供应商
  2. 发现同品类不同供应商的价格差异
  3. 分析价格随时间的变化趋势

口径定义#

数据来源#

  • 数据源:ERP 采购订单表
  • 时间范围:2023-01-01 至 2023-12-31
  • 筛选条件
    • 订单状态 = 已完成
    • 金额 > 0
    • 排除退货订单

核心指标#

指标 定义 计算公式
单价变动率 同一物料的价格波动程度 (最高价 - 最低价) / 平均价
供应商集中度 采购金额在供应商间的分布 前5供应商金额 / 总金额
价格离散度 同品类不同供应商的价格差异 标准差 / 平均值

数据范围#

# 数据筛选逻辑
df = df[
    (df['订单状态'] == '已完成') &
    (df['金额'] > 0) &
    (df['订单类型'] != '退货')
]

数据处理#

数据清洗#

import pandas as pd

# 读取数据
df = pd.read_excel("采购订单.xlsx")

# 数据清洗
df['单价'] = df['金额'] / df['数量']
df['月份'] = pd.to_datetime(df['订单日期']).dt.to_period('M')

# 剔除异常值(单价为0或负数)
df = df[df['单价'] > 0]

# 物料名称标准化
df['物料名称'] = df['物料名称'].str.strip().str.upper()

处理逻辑#

# 1. 计算每个物料的价格统计
price_stats = df.groupby('物料编码').agg({
    '单价': ['mean', 'std', 'min', 'max', 'count']
}).round(2)

price_stats.columns = ['平均价', '标准差', '最低价', '最高价', '采购次数']
price_stats['变动率'] = (price_stats['最高价'] - price_stats['最低价']) / price_stats['平均价']

# 2. 识别高变动物料
high_variance = price_stats[
    (price_stats['变动率'] > 0.2) &  # 变动超过20%
    (price_stats['采购次数'] >= 3)    # 至少采购3次
]

# 3. 供应商价格对比
supplier_compare = df.groupby(['物料编码', '供应商']).agg({
    '单价': 'mean',
    '数量': 'sum'
}).reset_index()

分析结果#

主要发现#

  1. 价格波动大的物料:共发现 23 种物料价格变动超过 20%,主要集中在 LED 模组类

  2. 供应商价格差异

    • 同一型号 LED 模组,供应商 A 比供应商 B 贵 15%
    • 但供应商 A 的交货准时率更高
  3. 价格趋势

    • Q2-Q3 芯片类物料价格上涨约 8%
    • Q4 有所回落

可视化#

主要图表(略,实际项目中用 Plotly 生成):

  • 物料价格波动 Top 10 柱状图
  • 供应商采购金额分布饼图
  • 关键物料价格趋势折线图

结论与建议#

  1. 议价重点:对 LED 模组类物料重新询价,预计可节省 5-8%
  2. 供应商整合:部分小额供应商可考虑整合
  3. 价格监控:建立月度价格监控机制,异常波动及时预警

局限性#

  • 数据局限:只有采购订单数据,缺少市场价格对比
  • 方法局限:未考虑质量差异、账期差异等因素
  • 时效性:分析基于历史数据,市场情况可能已变化