多属性决策启示录 第3期|AHP层次分析法:把我觉得变成数学
# 多属性决策启示录 第3期AHP把我觉得变成数学系列面向研究生与算法工程师的 MADM 深度教程标签多属性决策,AHP,层次分析法,主观赋权,Python,算法前言买车时的内心博弈你去 4S 店看车三款候选A 省油但空间小B 空间大但油耗高C 各方面均衡但贵。你心里在反复掂量——油耗比空间重要多了不对周末要带全家出游空间也很重要但贵两万块……这不是选择困难症。这是你的大脑在做多属性决策只是没有把它写成矩阵。AHPAnalytic Hierarchy Process层次分析法做的事情就是把这种模糊的我觉得 A 比 B 重要变成一套可计算、可验证的数学权重体系。一、AHP 的核心思想Saaty 在 1980 年提出 AHP 时做了一个天才的简化人脑不擅长同时比较多个对象但擅长两两比较。与其让你给油耗、空间、价格、动力、安全性五个指标一次性打分不如让你回答 10 个更简单的问题- 油耗和空间哪个更重要重要多少- 油耗和价格哪个更重要重要多少- ……然后通过矩阵运算把这 10 个两两比较的结果还原为 5 个指标的精确权重。二、Saaty 1-9 标度表两两比较需要一把尺子。Saaty 定义了 1-9 的标度标度含义解释1同等重要两个指标贡献相同3稍微重要经验和判断稍微倾向一方5明显重要经验和判断明显倾向一方7强烈重要一方非常强烈地被偏好9极端重要一方压倒性地重要于另一方2,4,6,8中间值介于上述判断之间倒数反向比较如果 A:B3则 B:A1/3为什么是 1-9 而不是 1-100Saaty 做过心理学实验。人的短期记忆只能同时处理 7±2 个信息块Miller 定律。1-9 正好在认知负荷的舒适区内。超过 9 级的区分度人脑的判断就不再可靠了。三、构建判断矩阵回到买车的例子。假设你对 5 个指标的相对重要性做如下判断油耗空间价格动力安全油耗13251/3空间1/311/231/5价格1/22141/4动力1/51/31/411/7安全35471解读一下这个矩阵-油耗 vs 安全 1/3你认为安全性比油耗稍微重要安全:油耗 3:1所以油耗:安全 1/3-安全 vs 动力 7安全性比动力强烈重要差 7 个等级- 对角线全是 1指标和自己比当然是同等重要- 左下角是右上角的倒数矩阵是互反矩阵这个矩阵记作A维度 n×n。四、从判断矩阵到权重AHP 提取权重有三种方法。推荐第三种特征向量法。4.1 和积法最简单Step 1逐列归一化每列除以该列之和油耗列10.3330.50.23 5.033归一化1/5.0330.199, 0.333/5.0330.066, ...Step 2逐行求和油耗行求和 0.1990.2310.2580.250.163 1.101Step 3再归一化总和 1.1010.4750.7520.1902.482 5.000油耗权重 1.101/5.000 0.2204.2 方根法几何平均Step 1逐行求几何平均油耗行: (1×3×2×5×1/3)^(1/5) (10)^0.2 ≈ 1.585Step 2归一化全部分别除以总和4.3 特征向量法最精确Saaty 推荐求解矩阵 A 的最大特征值 λ_max 对应的特征向量 wA × w λ_max × w标准化 w 使其分量之和为 1即为权重向量。三种方法的结果通常非常接近。科研论文中推荐使用特征向量法。五、一致性检验你的判断靠谱吗假设你说油耗 空间空间 价格那么按照逻辑油耗必然 价格。如果你的判断矩阵里却写价格 油耗说明你的判断出现了矛盾。AHP 用一致性比率CR, Consistency Ratio来检测这种矛盾。公式CI (λ_max - n) / (n - 1)CR CI / RI其中 RI随机一致性指标是查表得到的n12345678910RI000.580.901.121.241.321.411.451.49判定标准- CR 0.1判断矩阵通过一致性检验可以接受- CR ≥ 0.1需要重新调整判断矩阵中的某些值六、Python 完整实现pythonimport numpy as npimport pandas as pdclass AHP:层次分析法——从判断矩阵到权重向量def __init__(self, matrix):matrix: n×n 判断矩阵matrix[i][j] 指标i相对于指标j的重要性对角线1, 左下1/右上self.A np.array(matrix, dtypefloat)self.n len(self.A)self.weights Noneself.lambda_max Noneself.CR Nonedef by_eigenvector(self):特征向量法推荐eigenvalues, eigenvectors np.linalg.eig(self.A)self.lambda_max np.max(eigenvalues.real)idx np.argmax(eigenvalues.real)w np.abs(eigenvectors[:, idx].real)self.weights w / w.sum()self._check_consistency()return selfdef by_geometric_mean(self):方根法gm np.prod(self.A, axis1) ** (1/self.n)self.weights gm / gm.sum()# 近似 λ_maxAw self.A self.weightsself.lambda_max np.mean(Aw / self.weights)self._check_consistency()return selfdef by_sum_normalization(self):和积法col_sums self.A.sum(axis0)norm self.A / col_sumsself.weights norm.sum(axis1) / self.nAw self.A self.weightsself.lambda_max np.mean(Aw / self.weights)self._check_consistency()return selfdef _check_consistency(self):RI_table {1:0, 2:0, 3:0.58, 4:0.90, 5:1.12,6:1.24, 7:1.32, 8:1.41, 9:1.45, 10:1.49}CI (self.lambda_max - self.n) / (self.n - 1) if self.n 1 else 0RI RI_table.get(self.n, 1.49)self.CR CI / RI if RI 0 else 0def report(self, labelsNone):if labels is None:labels [f指标{i1} for i in range(self.n)]print(fλ_max {self.lambda_max:.4f})print(fCR {self.CR:.4f} , end)if self.CR 0.1:print(✅ 通过一致性检验)else:print(❌ 需要调整判断矩阵)print()for name, w in zip(labels, self.weights):bar █ * int(w * 50)print(f {name:8s} {w:.4f} {bar})return selfpython# ── 买车示例 ──A np.array([[1, 3, 2, 5, 1/3], # 油耗[1/3, 1, 1/2, 3, 1/5], # 空间[1/2, 2, 1, 4, 1/4], # 价格[1/5, 1/3, 1/4, 1, 1/7], # 动力[3, 5, 4, 7, 1 ], # 安全])ahp AHP(A).by_eigenvector()ahp.report([油耗, 空间, 价格, 动力, 安全])print(\n--- 方根法对比 ---)ahp2 AHP(A).by_geometric_mean()ahp2.report([油耗, 空间, 价格, 动力, 安全])输出λ_max 5.1327CR 0.0296 ✅ 通过一致性检验油耗 0.2202 ███████████空间 0.0952 ████价格 0.1472 ███████动力 0.0408 ██安全 0.4967 ████████████████████████权重排序安全(0.50) 油耗(0.22) 价格(0.15) 空间(0.10) 动力(0.04)。如果接下来用 TOPSIS 做最终评价这几个权重直接代入加权矩阵。七、AHP 的局限与应对局限表现应对方法主观性强不同人给出的权重可能完全不同群决策多专家打分取平均指标过多时难以一致n9 时 CR 容易超标分层处理把指标分组每组不超过 7 个线性假设隐含重要性与标度成线性关系灵敏度分析第 5 期会讲静态性权重不随时间变化动态 AHP不在本系列范围内改进方向ANP网络分析法把指标之间的相互影响也考虑进去模糊 AHP 用三角模糊数代替确定的 1-9 标度。本系列第 9 期会涉及模糊扩展。八、本期小结1.AHP 的核心把我觉得转化为可计算的两两比较矩阵2.三个步骤构造判断矩阵 → 求特征向量 → 一致性检验3.Saaty 1-9 标度不是拍脑袋定的是认知心理学实验的结果4.CR 0.1是判断矩阵合格的硬标准——超了就得回去重新掂量5.AHP 不是主观就不好——专家的经验判断本身就是高质量数据下期预告如果你的数据是客观测量值温度、速度、成本而不是主观判断怎么从数据本身提取权重熵权法和 CRITIC 法——从信息论的角度告诉你哪个指标最有话语权。AHP 说的是你心里那杆秤是可以写出来的。