层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.saaty)正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。——层次分析法 - MBA智库百科

对于一个复杂的系统来说,直接对比每一套方案的优劣是一件很困难的事情。定性尚且困难,更不用说定量确定“方案一比方案二优秀百分之多少”这样的命题了。
这种场景下层次分析法就能很好派上用场,它的原理是将对于方案的评价分层分解为不同的指标,再利用经验或者求助专家对各个指标进行评分,最终通过计算可以得出不同方案的权重,利用该权重就能对方案有定量的比较了。

疑问有很多,我们带着以下几个主要的问题来学习AHP:

  • “分层分解为不同的指标”是怎么回事?
  • “对各个指标进行评分”,一旦指标数量过多,指标与指标之间如何定夺其重要性?是否会导致结果过于主观?
  • “通过计算得到权重”,如何操作?是什么原理?

阅读完毕这篇文章,相信这些问题就能迎刃而解了。

建立层次结构模型

考虑选用供应商的场景,不同供应商有不同的优势,如果只关注供应商的供货价格而不考虑供应商的供货稳定性,可能导致实际生产过程中出现供货风险,从而不能及时交付产品。

建模举例

一种可能的层次结构模型如下:

模型解释

一般的层次结构模型应当包含三层:

  • 最高层(解决问题的目的)
  • 中间层(策略层、约束层、准则层)
  • 最低层(用于解决问题的各种措施、方案等)

最高层是我们的目标,即“供应商选择”。

对于每个供应商,我们考察其五个方面(准则层):

  1. 成本:即我作为采购方需要付给供应商的金额
  2. 能力:即乙方作为供应商的整体实力
  3. 服务:即供应商的服务水平
  4. 仓储:指示供应商供货能力
  5. 采购:考虑到可能有多个采购方同时对接一个供应商,需考虑其他采购方对我们造成的供货风险

这个场景中,准则层也还比较抽象,如果直接对供应商进行这5个方面的评分则不够直观。这种情况下我们就可以继续往下细分,将准则层的每个因素分解为更下一层的指标,我们称之为“指标层”。例如,我们将“能力”细分为以下指标:

  1. 项目管理能力
  2. 在大众中的口碑
  3. 在甲方中的口碑
  4. 工作人员水平和能力

至此每个指标已经变得足够简单,容易依照它们对供应商进行两两比较,分层则结束。

最底层是方案层,对于我们这个例子来说就是不同的供应商,每个供应商作为一个方案。

构造对比较矩阵

由上一节举的例子可以感受出,对于供应商的选择,我们最底层需要考虑14个不同因素。我们需要逐层计算出它们对上一层的贡献,最终汇总到对供应商选择的贡献,为此我们需要对每一个参数进行“评分”。
可问题是我们应该如何确定评分标准?这么多因素一起考虑,需要对每一个因素打出分数的“绝对值”,这无疑是非常困难的。

AHP中,我们使用比较矩阵,每次只考虑两个因素,两两比较时我们只需要考虑其相对重要性就好了,大大降低了评分的难度。
例如,对于“能力 s2”指标的四个因素,我们构造如下的比较矩阵:

s2 项目管理能力 t21 在大众中的口碑 t22 在甲方中的口碑 t23 工作人员的水平和能力 t24
项目管理能力 t21 1
在大众中的口碑 t22 1
在甲方中的口碑 t23 1
工作人员的水平和能力 t24 1

由其中对角线已经填好的“1”我们可以窥见这个表格应该怎么填:最左上角的“1”表示“项目管理能力 t21 和 项目管理能力 t21 具有同样的重要性”,这是显而易见的,因为两个相同的因素,没有优劣之分。对于其他格子,我们可以参照下表进行填写:

标度 含义
1 表示两个元素相比,具有同样的重要性
3 表示两个元素相比,前者比后者稍重要
5 表示两个元素相比,前者比后者明显重要
7 表示两个元素相比,前者比后者极其重要
9 表示两个元素相比,前者比后者强烈重要
2,4,6,8 表示上述相邻判断的中间值
1~9的倒数 表示相应量因素交换次序比较的重要性

对于其他位于中间层的指标,我们也需要建立其比较矩阵。同时,对于最高层,我们也需要建立其相对于中间层指标的比较矩阵:

r 成本 s1 能力 s2 服务 s3 仓储 s4 采购 s5
成本 s1 1
能力 s2 1
服务 s3 1
仓储 s4 1
采购 s5 1

我们来尝试填写上表:

r 成本 s1 能力 s2 服务 s3 仓储 s4 采购 s5
成本 s1 1 7 6 6 7
能力 s2 1/7 1 2 1/3 1/3
服务 s3 1/6 1/2 1 1/3 1/3
仓储 s4 1/6 3 3 1 3
采购 s5 1/7 3 3 1/3 1

可以看到表中标出来的71/7,它们关于对角线对称,所以值也是对称的,即“成本”对应于“能力”的重要程度为“成本极其重要”,那么“能力”对应于成本则是其倒数(excel中设置矩阵的左下元素为=1/右上对应元素,则填写时只需填写表格的一半)。

层次单排序

有了比较矩阵,我们就可以计算出每个因素对于上一层的贡献,即权重了。权重计算有两种方法:

  • 方根法
  • 和积法

和积法理解简单,但方根法更适合用公式来表示,我们这里选择方根法进行计算。有以下步骤:

  • 按行元素求积,再求1n{1 \over n}次幂,得到wiw_i,公式为:

wiˉ=j=1maijm\bar{w_i} = \sqrt[m]{\prod_{j=1}^{m}a_{ij}}

  • wiw_i归一化,得到权值,也是后续需要使用的特征向量,公式为:

wi=wiˉj=1mwjˉw_i = {\bar{w_i} \over \sum_{j=1}^{m}\bar{w_j}}

使用excel求解,两步的公式参考如下(注意修改参数为实际表格坐标):

  • =POWER(PRODUCT(E18:I18),1/COUNT(E18:I18))
  • =E25/SUM(E25:E29)

求解得s1-5对应r的权重向量为:

方根法计算权重 wiˉ\bar{w_i} wiw_i
成本 s1 4.459639117 0.590811854
能力 s2 0.501577318 0.066448835
服务 s3 0.392026341 0.05193555
仓储 s4 1.350960039 0.178974842
采购 s5 0.84412088 0.111828919

显然,对于s1-s5这五个参数来说,成本是对于供应商选择最为重要的,其重要性达到了%59;而服务是最为不重要的,只占到了%5。

作一致性检验

我们虽然已经利用层次单排序求得了s1-5对应于r的权重值,但能否进行层次单排序其实是没有确定的,也就是说这个权重是否可以使用是没有经过检验的。而一致性检验就是为了完成这个工作。

因为比较矩阵是人为填写的,有时候可能会出现不符合逻辑的情况,比如说a的重要性是b的2倍,而b的重要性是c的4倍,这时候按道理说a的重要性是c的8倍;用定性的例子说,a的重要性比b高,而b的重要性比c高,此时按理来说a应当比c重要。但如果填写错误,可能填成了a的重要性是c的2倍,甚至a还不如c重要的情况,这就出现了逻辑错误,这种错误在一致性检验过程中是可以被发现的。

一致阵拥有如下的性质:

  • aij=1aij,aii=1(i,j=1,2,...,n)a_{ij}={1 \over a_{ij}}, a_{ii} = 1(i,j=1,2,...,n)
  • ATA^T也是一致阵;
  • AA的各行成比例,即AA矩阵秩为1;
  • AA的最大特征根(值)为λ=n\lambda=n,其余的n1n-1个特征根均等于0;
  • AA的任一列(行)都是对应于特征根nn的特征向量,AW=nWAW=nW

使用如下定理:

  • nn阶一致阵的唯一非零特征根为nn
  • nn阶互反阵A(aij>0,aij=1aji,aii=1)A(a_{ij}>0,a_{ij}={1 \over a_{ji}},a_{ii}=1)最大特征根λ>=n\lambda>=n,当且仅当λ=n\lambda=n时,AA为一致矩阵。

可以推出,λ\lambda需要尽可能接近nn,如果λ\lambda越大,则说明矩阵越不具有一致性。

为了衡量这个值,我们定义一个一致性指标CICI

CI=λnn1CI={\lambda-n \over n-1}

这个值可以判断矩阵一致性,是因为:

  • CI=0CI=0,代表λ=n\lambda=n,矩阵为一致阵,具有完全的一致性;
  • CICI接近0,代表λ\lambda接近nn,矩阵一致性可以接受;
  • CICI大于一定阈值,说明一致性不过关。

使用excel求解公式举例:=(S18-COUNT(L18:L22))/(COUNT(L18:L22)-1)

公式中的nn是已知值,但λ\lambda需要求解,其公式为:

λmax=1ni=1n(Aw)iwi\lambda_{max}={1 \over n}\sum_{i=1}^{n}{(Aw)_i \over w_i}

使用excel求解公式举例:

  • AwAw: =SUM(L18:P18)
  • Aww{Aw \over w}: =Q18/F25
  • λmax\lambda_{max}: =SUM(R18:R22)/COUNT(L18:L22)

但如果直接用CICI来衡量矩阵一致性,不好确定阈值,于是引入了随机一致性指标RIRI,将我们的CICI值与标准的RIRI值相比,则得到一个相对比率,对这个比率确定阈值是可行的事情。其计算方法为构造非常多的一致阵,计算其平均CICI值。我们无需手动完成这个工作,查表即可。

矩阵阶数 n 1 2 3 4 5 6 7 8 9 10 11 12 13
RI 0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45 1.49 1.51 1.54 1.56

一致性比率CRCR

CR=CIRICR={CI \over RI}

一般,当一致性比率CR<0.1CR<0.1时,认为矩阵的一致性是可以接受的,一致性检验通过。

利用上述方法,我们求得s1-5对应r的各项数据如下:

  • λmax=5.404934181\lambda_{max}=5.404934181
  • CI=0.101233545CI=0.101233545
  • RI=1.12RI=1.12
  • CR=0.090387094CR=0.090387094

CR<0.1CR<0.1,一致性检验通过,则上一节计算出的权重向量wiw_i是可用的。

其他矩阵

现在我们求得了s1-5对应于r的权重向量wi=(0.590811854,0.066448835,0.05193555,0.178974842,0.111828919)Tw_i=(0.590811854, 0.066448835, 0.05193555, 0.178974842, 0.111828919)^T并通过了一致性检验,使用同样的方法,将t11-t12对s1、t21-t24对s2、t31-32对s3、t41-43对s4还有t51-53对s5的权重向量都求出来,建模部分就已经完成了,此时我们就可以使用层次总排序开始逐层往上确定方案选择了。

层次总排序及决策

因为目前还未让专家填写6个比较矩阵,如果自己拟造这么多数据担心有误导性,所以我们直接跳过其他几个矩阵的层次单排序和一致性检验过程,作如下假设:

  • w成本=(0.9,0.1)Tw_{\text{成本}}=(0.9, 0.1)^T
  • w能力=(0.4,0.1,0.1,0.4)Tw_{\text{能力}}=(0.4, 0.1, 0.1, 0.4)^T
  • w服务=(0.5,0.5)Tw_{\text{服务}}=(0.5, 0.5)^T
  • w仓储=(0.3,0.4,0.3)Tw_{\text{仓储}}=(0.3, 0.4, 0.3)^T
  • w采购=(0.2,0.6,0.2)Tw_{\text{采购}}=(0.2, 0.6, 0.2)^T

对于方案层,我们需将每个方案对应于指标层的比较矩阵都列出来,例如:

t11 供应商 A 供应商 B 供应商 C
供应商 A 1
供应商 B 1
供应商 C 1

表的意思是,在指标“产品价格 t11”下,三个供应商两两比较,孰优孰劣。当然填写完成也需要做一致性检验。

同样的,为了方便说明,我们作如下假设:

  • w供应商-产品价格=(0.4,0.3,0.3)Tw_{\text{供应商-产品价格}}=(0.4, 0.3, 0.3)^T
  • w供应商-运输费用=(0.2,0.4,0.4)Tw_{\text{供应商-运输费用}}=(0.2, 0.4, 0.4)^T
  • w供应商-项目管理能力=(0.2,0.5,0.3)Tw_{\text{供应商-项目管理能力}}=(0.2, 0.5, 0.3)^T
  • w供应商-在大众中的口碑=(0.4,0.3,0.3)Tw_{\text{供应商-在大众中的口碑}}=(0.4, 0.3, 0.3)^T
  • w供应商-在甲方中的口碑=(0.3,0.5,0.2)Tw_{\text{供应商-在甲方中的口碑}}=(0.3, 0.5, 0.2)^T
  • w供应商-工作人员的水平和能力=(0.2,0.3,0.5)Tw_{\text{供应商-工作人员的水平和能力}}=(0.2, 0.3, 0.5)^T
  • w供应商-售后处理速度=(0.3,0.3,0.4)Tw_{\text{供应商-售后处理速度}}=(0.3, 0.3, 0.4)^T
  • w供应商-售后处理方案=(0.3,0.3,0.4)Tw_{\text{供应商-售后处理方案}}=(0.3, 0.3, 0.4)^T
  • w供应商-现货数量=(0.2,0.3,0.5)Tw_{\text{供应商-现货数量}}=(0.2, 0.3, 0.5)^T
  • w供应商-交付及时性=(0.2,0.3,0.5)Tw_{\text{供应商-交付及时性}}=(0.2, 0.3, 0.5)^T
  • w供应商-供货稳定性=(0.3,0.2,0.5)Tw_{\text{供应商-供货稳定性}}=(0.3, 0.2, 0.5)^T
  • w供应商-对接多少采购方=(0.5,0.2,0.3)Tw_{\text{供应商-对接多少采购方}}=(0.5, 0.2, 0.3)^T
  • w供应商-在采购方中的优先级=(0.3,0.4,0.3)Tw_{\text{供应商-在采购方中的优先级}}=(0.3, 0.4, 0.3)^T
  • w供应商-其他采购方采购数量=(0.4,0.3,0.3)Tw_{\text{供应商-其他采购方采购数量}}=(0.4, 0.3, 0.3)^T

计算方案总权重

有了假设数据,其实我们已经可以求出方案层每个方案对应于目标层的权重了,也就是每个方案的定量对比,结果如下:

目标层 准则层 指标层
内容 权重 内容 权重 总权重
供应商选择 r 成本 s1 0.590811854 产品价格 t11 0.9 0.531730669
运输费用 t12 0.1 0.059081185
能力 s2 0.066448835 项目管理能力 t21 0.4 0.026579534
在大众中的口碑 t22 0.1 0.006644884
在甲方中的口碑 t23 0.1 0.006644884
工作人员的水平和能力 t24 0.4 0.026579534
服务 s3 0.05193555 售后处理速度 t31 0.5 0.025967775
售后处理方案 t32 0.5 0.025967775
仓储 s4 0.178974842 现货数量 t41 0.3 0.053692453
交付及时性 t42 0.4 0.071589937
供货稳定性 t43 0.3 0.053692453
采购 s5 0.111828919 有多少采购方采购该芯片 t51 0.2 0.022365784
在采购方中的优先级 t52 0.6 0.067097351
其他采购方采购数量 t53 0.2 0.022365784
例如“产品价格 t11”的总权重,即为它对于“成本 s1”的权重0.9乘以“成本 s1”对于“供应商选择 r”的权重0.590811854。

层次总排序一致性比率

在使用上述概率来计算题解之前,我们需要计算层次总排序的一致性比率CRCR,如果算出来CR<0.1CR<0.1,则说明层次总排序通过一致性检验,可以进行求解。

层次总排序的一致性比率计算公式如下:

CR=i=1maiCIii=1maiRIiCR={\sum_{i=1}^{m}a_i CI_i \over \sum_{i=1}^{m}a_i RI_i}

其中aia_i表示我们求得的表中14个总权重,CIiCI_i表示我们在求解14个w供应商-xxxxw_{\text{供应商-xxxx}}权重向量的过程中进行一致性检验得到的14个CICI,同理RIiRI_i也是我们在做那些一致性检验过程中查表获得的每个RIRI

求解

现在,对于“供应商 1”,我们有它对于“产品价格 t11”的权重为0.4,而“产品价格 t11”对于“供应商选择 r”的总权重为0.531730669,于是“供应商 1”在“产品价格 t11”上获得了0.4×0.531730669=0.212692267分,将其余指标的权重与总权重相乘,得到其余分数,获得下表:

内容 总权重 供应商1 得分 供应商2 得分 供应商3 得分
产品价格 t11 0.531730669 0.4 0.212692267 0.3 0.159519201 0.3 0.159519201
运输费用 t12 0.059081185 0.2 0.011816237 0.4 0.023632474 0.4 0.023632474
项目管理能力 t21 0.026579534 0.2 0.005315907 0.5 0.013289767 0.3 0.00797386
在大众中的口碑 t22 0.006644884 0.4 0.002657953 0.3 0.001993465 0.3 0.001993465
在甲方中的口碑 t23 0.006644884 0.3 0.001993465 0.5 0.003322442 0.2 0.001328977
工作人员的水平和能力 t24 0.026579534 0.2 0.005315907 0.3 0.00797386 0.5 0.013289767
售后处理速度 t31 0.025967775 0.3 0.007790333 0.3 0.007790333 0.4 0.01038711
售后处理方案 t32 0.025967775 0.3 0.007790333 0.3 0.007790333 0.4 0.01038711
现货数量 t41 0.053692453 0.2 0.010738491 0.3 0.016107736 0.5 0.026846226
交付及时性 t42 0.071589937 0.2 0.014317987 0.3 0.021476981 0.5 0.035794968
供货稳定性 t43 0.053692453 0.3 0.016107736 0.2 0.010738491 0.5 0.026846226
有多少采购方采购该芯片 t51 0.022365784 0.5 0.011182892 0.2 0.004473157 0.3 0.006709735
在采购方中的优先级 t52 0.067097351 0.3 0.020129205 0.4 0.026838941 0.3 0.020129205
其他采购方采购数量 t53 0.022365784 0.4 0.008946314 0.3 0.006709735 0.3 0.006709735
总分 0.336795026 0.311656914 0.35154806

最后一行即为那一列中供应商得分的总和,我们发现,虽然“产品价格 t11”占了%53的总权重,而“供应商 1”在这个指标下有0.1之多的优势,但是由于“供应商 3”在其他方面优于“供应商 1”,所以“供应商 3”的得分为0.35154806,是大于“供应商 1”的0.336795026分的,所以这种情况下其实选择“供应商 3”是更优的策略,而非单由于“供应商 1”能够提供更低的价格就选择它。
另一方面,如果方案的选择不是互斥的,而是可以分配采购额度,那么这种情况下我们也可以将这个权重当作比率使用,比如说跟“供应商 1”采购33.7%的份额,跟“供应商 2”采购31.2%的份额,剩下的额度从“供应商 3”那里采购。

至此,AHP层次分析法的流程全部跑通,如果要把模型运用到某个具体的案例中,我们只需重新进行一次层次总排序即可。