聊一个特别常见的场景:手里有三份工作机会,薪资、发展、强度、地点各有千秋,怎么选都像是要凭感觉拍脑袋。这种问题,用“打分+加权”总觉得主观,用“数据建模”又没标签。这时候可以试试层次分析法——把复杂的多准则决策拆成目标、准则、方案三个层次,再用两两比较把模糊的判断变成一组可计算的权重,最后排出个明明白白的优先序。
这篇是第一讲,不讲冰山的细节,只把主干和最常用的操作讲透:怎么建层次结构,怎么填判断矩阵,怎么算权重、做一致性检验,以及最终怎么把方案层汇总出总分。适合刚接触AHP、上课听过但没真正算过的人,也适合想快速把它用到实际方案评审里的朋友。
1. 层次分析法到底是什么,为什么决策绕不开它
1.1 先从一个人人都会遇到的决策说起
假设要选一个项目方案,评价维度有成本、效率、风险、影响力。你会发现一个麻烦:成本低但效率未必高,效率高可能风险也高,风险低影响力又不突出。这时候常规做法是“给每个维度设权重,然后打分”。问题是,权重是怎么来的?拍脑袋定两个数字,说服力不够。
层次分析法换了一条路:不直接问你“成本权重多少、效率权重多少”,而是把评价维度两两拎出来,问“成本比效率重要多少”。人对绝对数字不敏感,但做相对比较很在行。1比3、3比5这种比较,普通人也能给出靠谱判断。AHP把这种判断填进矩阵,再通过数学方法提炼出权重,整个过程逻辑闭环,而且结果能复现、能解释。
1.2 AHP解决的是哪类问题
AHP处理的是“多准则决策(MCDM)”问题。凡是“多个方案、多个评价维度、没有统一计量单位”的选优问题,都可以套进去。
典型包括:
- 选址:多个候选地点,评价维度有租金、客流、租金成本、竞争密度。
- 采购与供应商评比:价格、质量、交期、售后。
- 工作机会选择:薪资、成长性、通勤、团队氛围。
- 课题立项评审:创新性、可行性、预期成果。
- 个人消费决策:买房、换车、旅游安排。
它不要求数据是精确的,反而擅长把定性的经验、偏好转化为定量数值。这也是它在管理、工程、教育评价里一直有生命力的原因。
1.3 AHP为什么能说服别人
很多方法算出了结果,但决策者不买账,因为“不知道你这个数字怎么来的”。AHP的好处是过程完全透明:每一个权重都是来自某个判断矩阵,每一个矩阵都能拿出来看是不是符合逻辑(一致性检验)。哪怕是拍脑袋,也是在结构化的规则下“拍”,事后能溯源,能修正,能形成讨论文档。
这套思路很像做菜:别人给你一道菜,你能说出配方,还能解释为什么这个配方比另一个配方靠谱。实践中,做方案评审、立项答辩,用AHP给结论撑腰,比干巴巴说“综合考虑,建议选B”要有力得多。
2. 建模第一步:把决策问题搭成三层树
2.1 目标层、准则层、方案层,缺一不可
AHP的标准结构是三层:
- 目标层:要解决的总问题,一句话说清。
- 准则层:评价好坏的维度,可以是多个,也可以再细分。
- 方案层:待选的若干选项。
拿选工作举例:
- 目标层:选择最满意的工作机会。
- 准则层:薪资待遇、发展空间、工作强度、通勤地点。
- 方案层:公司A、公司B、公司C。
我在实际项目里见过不少人上来就填矩阵,结果矩阵填完了,层次结构还是乱的。AHP最值得花时间的其实不是后面的计算,而是前面这棵树的搭建。树搭歪了,后面算得再精确,方向也是错的。
2.2 准则层不要贪多,控制在5到7个
认知心理学里有个“7正负2”的说法:人同时能稳定处理的组块数量有限。准则太多,两两比较的次数会爆炸。n个准则,要比较的次数是n(n-1)/2,5个是10次,7个是21次,9个是36次。填到后面,人会被自己的矛盾判断搞晕,一致性检验自然过不了。
我倾向于把准则控制在7个以内,如果遇到指标特别多的复杂问题,先把准则分类,比如“综合效益”下面再拆“经济效益”“社会效益”,形成多级层次结构,再逐级比较。
2.3 可选的细分层:当准则层太粗时
有些问题一个准则内部差异很大,比如“公司发展空间”里既包含行业前景、也包含个人晋升路径。这时候可以把“发展空间”拆成“行业增长”“岗位晋升”“培训体系”,作为准则层下面的子准则。
子准则的权重需要再建一个判断矩阵来计算。所以原则很简单:你能把准则解释清楚,就不拆;解释不清楚,或者一个准则内部明显混着多个概念,就拆。
2.4 搭建时最容易踩的三个坑
第一个坑叫“目标层和方案层混在一起”。比如目标写成“选择性价比高的手机”,方案却写“苹果、华为、小米”,问题不大;如果目标写成“买什么手机”,方案里还有个“不买,继续用旧手机”,这就乱了,因为“不买”没有评价维度。
第二个坑叫“准则层方向不统一”。有的指标越大越好,比如薪资、发展;有的越小越好,比如工作强度。方向不统一会在填矩阵时把自己绕晕,后面总排序时更是容易翻车。统一的做法是,把每个准则都描述成“越什么越好”的方向,比如“通勤方便程度”而不是“通勤时间”。
第三个坑叫“方案之间差异过大”。方案A和方案B如果是同类型的候选方案,比较起来才有意义。A和B根本不是解决同一目标的思路,硬拉一起比较,后面的判断矩阵你都不知道怎么填。
3. 判断矩阵怎么填:1-9标度与两两比较
3.1 标度表就是一张对照表
判断矩阵里每一项代表“行准则相对列准则的重要程度”,用1到9的标度来表示。标度含义如下:
| 标度 | 含义 |
|---|---|
| 1 | 两个因素同样重要 |
| 3 | 一个比另一个稍微重要 |
| 5 | 一个比另一个明显重要 |
| 7 | 一个比另一个强烈重要 |
| 9 | 一个比另一个极端重要 |
| 2、4、6、8 | 介于上述相邻判断之间 |
| 倒数 | 后者相对于前者的重要程度 |
举个例子,我认为“薪资”比“发展空间”明显重要,就在矩阵第一行第二列填5,那么对称位置(第二行第一列)自动填1/5。为什么是倒数?因为“发展空间”比“薪资”就应该是1/5重要,逻辑上是同一个判断的对称表达。
3.2 填矩阵的顺序感很重要
我的习惯是:先把矩阵里的“上三角”填完,然后直接写下面的倒数,不跳着填。跳着填容易漏,也容易把相等关系搞乱。
再看一遍矩阵的样子,四阶示例:
薪资 发展 强度 地点 薪资 1 3 5 7 发展 1/3 1 3 5 强度 1/5 1/3 1 2 地点 1/7 1/5 1/2 1这个矩阵的意思是:薪资比发展稍微重要(3),比强度明显重要(5),比地点强烈重要(7);发展比强度稍微重要(3),比地点明显重要(5);强度比地点稍微重要(2)。
3.3 为什么矩阵经常填出前后矛盾
很多人第一次填判断矩阵都会遇到一个尴尬:填的时候觉得薪资远远大于地点,但发展又大于地点,算出来发现一致性很差。原因很简单,你给的是相对判断,但它们内部是联动的。A比B重要3倍,B比C重要5倍,那么A相对C就该是15倍左右。可标度表上限只有9,填不下,只能填7或9,这就带来了误差。
AHP并不要求绝对一致,只要求“大致一致”。一致性检验就是干这个的:看看偏差是不是在可容忍范围里。
3.4 准则方向反转,矩阵就翻车
“工作强度”这类准则,如果直接用原始数值填,容易填出反逻辑。规则是:比较矩阵永远按“谁更符合目标”来填,而不是按“谁数值更大”。
比如我们评价强度,目标是“强度低更好”,那么“公司A的工作强度比公司B更符合目标”时,就在对应位置填大于1。实际操作中,我总在矩阵上方先写一行备注:该准则按“工作强度越低越优”进行判断。避免填的时候脑子一热,填成“强度越大的公司分数越高”。
4. 权重计算与一致性检验:手算一遍才踏实
4.1 和积法:把判断矩阵变成权重
计算权重有特征根法、方根法、和积法等多种,结果差异很小。这里我演示最直观的和积法,也适合用Excel实现。
第一步,把每一列加起来。
以刚才的四阶矩阵为例:
- 列1之和:1 + 1/3 + 1/5 + 1/7 ≈ 1.6762
- 列2之和:3 + 1 + 1/3 + 1/5 ≈ 4.5333
- 列3之和:5 + 3 + 1 + 1/2 ≈ 9.5
- 列4之和:7 + 5 + 2 + 1 = 15
第二步,用每个元素除以它所在列的和,得到“归一化矩阵”,然后把每一行加起来再除以阶数n。
行1:1/1.6762 + 3/4.5334 + 5/9.5 + 7/15 ≈ 0.5966 + 0.6618 + 0.5263 + 0.4667;除以4,得到0.5629。
同样的方法,行2、行3、行4算出0.2672、0.1078、0.0622。这四个数就是薪资、发展、强度、地点的权重,合计约1。
到这里就可以初步得出结论:在这个人眼里,薪资权重约56%,发展约27%,强度和地点相对次要。这个权重分布其实很符合大多数求职者的直觉。
4.2 一致性检验:别让判断逻辑打架
权重算出来了,但矩阵是否合理,还要检验。
首先计算最大特征根λmax。做法是:用判断矩阵乘以权重向量,得到Aw,再看每个元素和权重的比值,求平均。
本例中,约算下来λmax ≈ 4.069。
然后计算一致性指标CI:
CI = (λmax - n) / (n - 1) = (4.069 - 4) / 3 = 0.023
再引入随机一致性指标RI。RI是大量随机矩阵的平均CI,与阶数有关,常用表如下:
| n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 |
最后得到一致性比例CR:
CR = CI / RI = 0.023 / 0.90 ≈ 0.026
判断标准:CR小于0.1,认为判断矩阵的一致性可接受;大于0.1,说明填矩阵的时候逻辑有明显矛盾,需要回查和调整。
n为1或2时,矩阵本身一定完全一致,不需要检验。
4.3 一致性不合格怎么调整
很多新手用软件算完发现CR超标,就机械地改几个数碰运气。我的调整办法是分三步走。
第一步,找到最离谱的判断。一般看“a> b > c”却出现“a相对c小于1”这种明显矛盾,先把这类改掉。
第二步,不要大幅度来回改同一个格子。你改一个位置,影响的是整个特征值。每次都小步调整,重新计算。
第三步,如果调了两轮还在0.15以上,建议放弃细节调整,重新审视判断矩阵是否合理。这种情况经常不是因为手误,而是你对准则之间的重要程度根本没想清楚。回到层次结构,重新考虑是否有些准则可以合并,或者你对某个方案的差异认知过于牵强。
4.4 遇事不决,写个小函数
手算只能搞定小矩阵,准则多、还要多个矩阵时,我习惯用Python跑。这里给一个可以直接用的版本:
import numpy as np def ahp(matrix): matrix = np.array(matrix, dtype=float) n = matrix.shape[0] # 归一化列 col_sum = matrix.sum(axis=0) norm = matrix / col_sum # 权重 = 行平均 weight = norm.mean(axis=1) # 最大特征值 aw = matrix.dot(weight) lambda_max = (aw / weight).mean() # 一致性 ci = (lambda_max - n) / (n - 1) 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} ri = ri_table.get(n, 1.49) cr = ci / ri if ri else 0 print("权重:", weight) print("λmax:", lambda_max) print("CR:", cr) criteria = [ [1, 3, 5, 7], [1/3, 1, 3, 5], [1/5, 1/3, 1, 2], [1/7, 1/5, 1/2, 1] ] ahp(criteria)输出结果基本和手算一致:权重约[0.563, 0.267, 0.108, 0.062],CR小于0.1。实际项目里,我还会顺手加一个输出“每个矩阵的Aw”的功能,方便回查。
5. 方案层打分与层次总排序:走完最后一公里
5.1 方案层也要建判断矩阵
准则层权重算完之后,每个准则下面都要对方案做两两比较。假设方案是公司A、公司B、公司C,在“薪资”准则下,公司A比公司B薪水高不少,B比C高一些,那么矩阵可以是这样:
A B C A 1 2 4 B 1/2 1 3 C 1/4 1/3 1算出来的方案权重约是:A=0.557,B=0.320,C=0.123。
“发展空间”下面可能是B公司最强,A和C差不多:
A B C A 1 1/3 1 B 3 1 3 C 1 1/3 1权重是A=0.200,B=0.600,C=0.200。
“工作强度”下面,谁强度更低谁占优。如果C强度最低,B次之,A较高,权重可能是A=0.164,B=0.297,C=0.539。
“通勤地点”下面,如果A和B都方便,C较远,权重可以是A=0.400,B=0.400,C=0.200。
注意,每个方案层的矩阵都要单独做一致性检验,不是只检查准则层就够了。只是方案层矩阵阶数通常较小,CR一般比较好看。
5.2 层次总排序:把准则权重和方案权重合成
每个方案的总得分 = Σ(准则权重 × 该方案在该准则下的得分)。
汇总一下:
| 准则 | 准则权重 | 公司A | 公司B | 公司C |
|---|---|---|---|---|
| 薪资 | 0.563 | 0.557 | 0.320 | 0.123 |
| 发展 | 0.267 | 0.200 | 0.600 | 0.200 |
| 强度 | 0.108 | 0.164 | 0.297 | 0.539 |
| 地点 | 0.062 | 0.400 | 0.400 | 0.200 |
公司A总得分 = 0.563×0.557 + 0.267×0.200 + 0.108×0.164 + 0.062×0.400 ≈ 0.410。
公司B总得分 = 0.563×0.320 + 0.267×0.600 + 0.108×0.297 + 0.062×0.400 ≈ 0.397。
公司C总得分 = 0.563×0.123 + 0.267×0.200 + 0.108×0.539 + 0.062×0.200 ≈ 0.193。
排序结果:公司A > 公司B > 公司C。
看到结果的那一瞬间,别急着下结论。总排序权重最好再做一次总一致性检验,公式是:CR总 = Σ准则权重×对应方案矩阵的CI / Σ准则权重×对应方案矩阵的RI。本项目方案矩阵一致性都很好,总CR远小于0.1,结果可信。
5.3 分数不是真理,是帮你结构化讨论的参考
总排序完成后,我始终提醒自己一件事,也是讲课时常说的:AHP的输出不是“唯一正确答案”,而是“在当前判断下的自洽答案”。
它最大的价值其实是把决策过程显性化了。如果某个评审委员说“我不同意最终结果”,你可以把他有异议的准则翻出来:是权重定高了,还是某个比较矩阵填得不符合他的想法?这样讨论就从“我觉得就是B好”变成了“你觉得发展空间比薪资重要多少倍合适”,讨论的质量完全不同,方向也更清晰。
6. 常见问题排查与个人实战心得
6.1 常见问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| CR一直大于0.1 | 判断矩阵内部矛盾大,或是准则方向混乱 | 先检查是否有的准则按“越好”填、有的按“越差”填;再逐对调整明显矛盾处 |
| 权重和不是1 | 手算四舍五入误差 | 用高精度小数计算,最后阶段再四舍五入 |
| 方案层缺失 | 只算了准则权重,忘了方案层矩阵 | 检查每个准则下面是否都有一组方案比较矩阵 |
| 总排序结果与直觉差很多 | 准则权重不一定符合潜台词 | 回到判断矩阵,逐项重新审视,往往是自己最初没想清 |
| 两两比较次数太多填不下去 | 准则超量 | 合并相关准则,或拆成多级层次 |
| 所有方案得分很接近 | 方案本身类似,或被填成了“都差不多” | 增加区分度更大的准则,或重新审视评价维度 |
6.2 建议在矩阵旁边留一张“填写备注”
我在做实际评审项目时,习惯在每个判断矩阵旁边附两句备注,比如“薪资指的是入职后三年内总包期望”“强度包括加班频率和通勤压力”。因为同一个维度,不同人理解可能差很远。
比如“发展空间”,有人理解成职位晋升,有人理解成能力成长。如果填矩阵的人和写备注的人理解不一致,后面再漂亮的计算也毫无意义。备注要写具体,写到别人看了也不会误解的程度。
6.3 和别的方法搭配使用效果更好
AHP不适合作“鸡肋填空题”。我真见过有人把100个指标塞进去,算出来的结果说服力很差。更务实的用法有几种。
第一种,AHP给权重,下面再配TOPSIS或加权得分,AHP负责把主观偏好量化,量化数据负责把差距拉大。
第二种,AHP用于计算主观权重,和客观权重(比如熵权法)做组合,这样可以避免完全依赖主观判断的批评,也能中和纯客观方法“数值高但不合常理”的缺点。
第三种,多个人参与时,用群组AHP的思路,每人填矩阵后取几何平均,而不是开会口头讨论出一个矩阵。几何平均能减少某个强势声音的主导。
6.4 我的一点体会
分享一个我踩过反复的坑:给一个方案排序类项目做咨询时,我第一轮只算了准则层权重就停了,直接拿各方案在数据表上的原始成绩评分加权。结果客户问“这个分数和你们的判断矩阵有什么关系,为什么方案C明明各项数据都看着不错,得分却垫底”。我回头检查才发现,问题出在方案层矩阵没有按数据逻辑填写,而是凭印象填,算出来的权重当然和实际数据矛盾。
一句话,AHP的精髓不是公式,而是“把决策逻辑说清楚”。真正花时间去推敲层次结构、判断方向、比较口径的人,最后计算都是几分钟的事;反而是那些一上来就急着套公式的人,最容易在结果解释上栽跟头。
第一讲先把这条主线跑通:建模、判断矩阵、权重计算、一致性检验、总排序。后面如果想继续深入,可以聊不一致矩阵的修复算法、指数标度、群组AHP,或者是和TOPSIS、熵权法的组合应用。方法论这块,学一套、练一套、用一套,比囤十套不落地要实在得多。