3. 支出集中度基础:赫芬达尔-赫希曼指数(HHI)原理与计算
在供应商支出分析中,赫芬达尔-赫希曼指数(Herfindahl-Hirschman Index, HHI)是衡量采购支出集中度的核心指标。它通过计算供应商支出份额的平方和,量化支出在供应商之间的分布集中程度,帮助采购团队快速识别“单一供应商依赖”或“过度分散”的风险。
3.1 HHI 的定义与数学原理
HHI 的计算公式如下:
HHI = Σ (Sᵢ)² × 10000
其中:
- Sᵢ = 第 i 个供应商的支出金额占总支出金额的百分比(以小数表示,如 0.35 代表 35%)
- Σ = 对所有供应商的份额平方求和
- × 10000 = 将结果放大,使指数落在 0 到 10000 之间,便于直观比较
关键理解: HHI 对份额较大的供应商赋予更高的权重(平方效应)。一个占 50% 份额的供应商,其贡献值为 0.25(0.5²),而一个占 10% 的供应商仅贡献 0.01(0.1²)。因此,HHI 对头部供应商的集中度变化极为敏感。
3.2 HHI 数值的解读区间
根据美国司法部(DOJ)和联邦贸易委员会(FTC)在反垄断领域的标准,结合采购管理实践,HHI 通常按以下区间解读:
| HHI 区间 | 集中度等级 | 采购风险特征 | 建议行动 |
|---|---|---|---|
| 0 – 1000 | 低度集中(分散) | 供应商数量多,单一供应商依赖度低;但可能管理成本高、议价能力分散 | 评估整合机会,识别战略供应商进行集中采购 |
| 1000 – 2500 | 中度集中 | 少数供应商占据较大份额,存在一定依赖风险,但仍有替代选择 | 建立供应商分级管理,对头部供应商制定风险预案 |
| 2500 – 10000 | 高度集中 | 极少数供应商(甚至单一供应商)主导支出,断供风险极高,议价空间受限 | 立即启动供应商多元化计划,开发备选资源 |
注意: 采购场景下的 HHI 阈值可根据品类特性调整。对于关键战略物料,即使 HHI 在 1500 以下,若头部供应商为唯一具备技术能力的厂商,仍需按高度集中管理。
3.3 手工计算示例:从原始数据到 HHI
假设某品类年度支出数据如下,共 5 家供应商:
| 供应商 | 支出金额(万元) | 支出占比(小数) | 份额平方 |
|---|---|---|---|
| A | 450 | 0.45 | 0.2025 |
| B | 250 | 0.25 | 0.0625 |
| C | 150 | 0.15 | 0.0225 |
| D | 100 | 0.10 | 0.0100 |
| E | 50 | 0.05 | 0.0025 |
| 合计 | 1000 | 1.00 | 0.3000 |
计算步骤:
- 计算各供应商支出占比:450/1000 = 0.45,250/1000 = 0.25,以此类推。
- 对每个占比求平方:0.45² = 0.2025,0.25² = 0.0625,0.15² = 0.0225,0.10² = 0.0100,0.05² = 0.0025。
- 求和:0.2025 + 0.0625 + 0.0225 + 0.0100 + 0.0025 = 0.3000。
- 乘以 10000:0.3000 × 10000 = 3000。
该品类 HHI = 3000,属于高度集中区间,供应商 A 占 45% 份额,需重点关注单一依赖风险。
3.4 HHI 计算流程与逻辑架构
以下 SVG 图展示了从原始支出数据到 HHI 输出及风险判定的完整计算流程:
3.5 使用 Python 批量计算 HHI
当供应商数量较多(如数百家)时,手工计算效率低下。以下代码演示如何用 Python 快速计算 HHI:
import pandas as pd
import numpy as np
def calculate_hhi(expenditure_series):
"""
计算赫芬达尔-赫希曼指数 (HHI)
参数:
expenditure_series: pandas Series, 各供应商支出金额
返回:
hhi: float, HHI 值 (0-10000)
shares: pandas Series, 各供应商支出占比
"""
total = expenditure_series.sum()
shares = expenditure_series / total
hhi = (shares ** 2).sum() * 10000
return round(hhi, 2), shares
# 示例数据
data = {
'供应商': ['A', 'B', 'C', 'D', 'E'],
'支出金额': [450, 250, 150, 100, 50]
}
df = pd.DataFrame(data)
hhi_value, share_series = calculate_hhi(df['支出金额'])
print(f"HHI = {hhi_value}")
print("各供应商支出占比:")
print(share_series.round(4))
# 输出:
# HHI = 3000.0
# 各供应商支出占比:
# 0 0.45
# 1 0.25
# 2 0.15
# 3 0.10
# 4 0.05
# dtype: float64
3.6 HHI 在采购分析中的典型应用场景
- 品类组合风险扫描: 按品类分别计算 HHI,快速定位“单一供应商依赖”的高风险品类。
- 供应商整合效果评估: 对比整合前后的 HHI 变化,量化集中度提升幅度。
- 采购组合优化: 设定目标 HHI 区间(如 1500-2500),指导供应商数量与份额分配。
- 价格方差异常定位: 结合 HHI 与价格方差,识别“高度集中 + 高价格方差”的异常供应商组合。
实践建议: 在月度或季度采购报告中,将 HHI 作为固定监控指标。当 HHI 单月环比上升超过 200 点时,触发预警,要求采购经理提交集中度变化说明。
3.7 HHI 的局限性及补充指标
| 局限性 | 说明 | 补充方案 |
|---|---|---|
| 忽略供应商间替代性 | HHI 仅看份额,不区分供应商是否可替代 | 结合供应商技术能力、认证状态做定性评估 |
| 对极小型供应商不敏感 | 大量微小供应商的平方和贡献极小,可能掩盖“长尾风险” | 同时计算 CR4(前4家集中度)或 CR8 作为辅助 |
| 静态指标 | 反映某一时点的集中度,无法体现趋势 | 绘制 HHI 时间序列折线图,监控变化方向 |
| 不反映价格合理性 | 高集中度不一定意味着价格异常 | 引入价格方差分析,定位“集中 + 高价”组合 |