层次分析法全流程:判断矩阵、权重计算、一致性检验与MATLAB实战
2026/9/18 16:29:21 网站建设 项目流程

层次分析法这个词,很多人在论文里写过、在报告里用过,可真要聊到判断矩阵怎么构造、一致性比率为什么是0.1、方根法和特征值法差在哪,能完整讲清楚的人并不多。我自己第一次接触层次分析法是在做一个供应商评价课题的时候,当时照着别人的模板把矩阵填了、把权重算出来了、CR算出来小于0.1就交差了,后来被问了一句"你这个0.1是哪来的",当场卡壳。从那以后我把这套方法的来龙去脉重新啃了一遍,也用MATLAB把每一步都自己写过一遍。这篇就按一个真正用过它的人的角度,把层次分析法从建模思路到代码落地完整捋一遍,适合正在写论文、做评价体系、做方案选型的朋友,也适合那些"会用但说不清"的人回头补课。

1. 为什么有人用了三年层次分析法还是没入门

1.1 一句话说清楚层次分析法到底在解决什么问题

层次分析法的本质,是把一个说不清道不明的"综合判断",拆成一层层可以说清楚的"两两比较"。你让一个人直接给"选哪个供应商"打分,他很难给出稳定的数字;但你让他回答"价格和质量哪个更重要、重要多少",他脑子里是有感觉的。层次分析法就是把这个感觉结构化、数值化,最后汇总成一个可以排序的权重向量。

它处理的是多准则决策问题:有若干个备选方案,有若干个评价准则,准则之间量纲不同、重要程度不同,怎么综合出一个排名。比如选供应商要看价格、质量、交期、售后;选城市要看房价、通勤、教育、医疗;选技术方案要看性能、成本、维护难度、团队熟悉度。这些问题的共同点是:没有一个统一的尺子,各因素之间也没法直接相加。

这里必须先纠正一个特别常见的误解:**层次分析法不是用来"算出一个客观真理"的,它是把决策者的主观判断显性化、结构化。**权重反映的是"你认为什么重要",而不是"客观上什么重要"。想清楚这一点,后面很多困惑——比如"为什么我算出来的权重和别人不一样"——就自然消解了。不同的专家、不同的判断矩阵,算出来的权重本来就该不一样,这不是方法出错,这是方法在如实反映输入。

1.2 什么时候该用层次分析法,什么时候别碰它

我见过太多硬套的场景,明明有客观数据可用,非要拉几个专家拍脑袋填矩阵,最后算出来的东西还不如直接加权求和靠谱。所以先划清楚适用范围。

适合用的场景有这几类:一是准则本身难以量化,比如"企业文化契合度""战略协同性"这种,你没法用数字直接测;二是样本量小、无法做统计回归,比如只有三五个备选方案,统计方法根本跑不动;三是需要把专家经验固化下来,形成一套可复用、可解释的评价体系;四是需要向别人解释决策过程,层次分析法的中间结果是可视化的,权重、一致性比率都摆在那里,比黑箱模型好解释得多。

不适合用的场景同样明确:有大量客观数据且数据质量不错的时候,直接上熵权法、CRITIC法、主成分分析这些客观赋权方法更合适;需要做预测而不是评价的时候,层次分析法帮不上忙;备选方案特别多的时候(比如上百个),两两比较的判断矩阵会膨胀到无法维护,此时更适合先做筛选再评价。

我个人的经验是:**层次分析法最适合做"准则层"的赋权,而不是做"方案层"的打分。**准则权重用专家经验定,方案得分尽量用客观数据算,两者结合是实际项目里最稳的玩法。纯主观的方案层打分,一旦专家之间分歧大,结果会非常飘。

1.3 三张表看懂层次分析法的完整流程

很多人学层次分析法是零散地记公式,记完就忘。我建议按"结构—矩阵—检验"三段式来记,每一段对应一个明确的产出物。

阶段核心动作产出物常见卡点
结构建模拆目标、定准则、列方案层次结构图准则之间不独立、层级过深
判断矩阵两两比较、按1-9标度赋值n阶正互反矩阵标度含义理解偏差、逻辑矛盾
权重计算特征值法/方根法/和积法权重向量w方法选错、不归一化
一致性检验算CI、查RI、求CRCR值不通过就硬改、乱改
综合排序逐层合成权重方案总得分忘记逐层归一化

这五步里,真正决定结果质量的是前两步,后面三步都是标准动作。判断矩阵填错了,后面算得再精确也没意义。我见过有人把一致性检验当成"走过场",CR大于0.1也照样往下算,这种结果拿去做决策是很危险的。

还有一点值得强调:层次结构图不是画得越深越好。准则层分三层、每层再分三四个子准则,看起来内容丰富,实际上判断矩阵数量会指数级增长,专家填到后面全是疲劳作答,数据质量反而下降。准则层控制在3到7个,是整个层次的黄金区间,这个数字不是随便说的,它和后面一致性指标RI的适用阶数直接相关。

2. 结构建模:把脑子里的判断变成可计算的骨架

2.1 目标层、准则层、方案层到底怎么定

标准的层次结构是三层:最上面是目标层,只有一个元素,就是你要解决的决策问题,比如"选择最优供应商"。中间是准则层,放评价维度。最下面是方案层,放备选对象。

看起来简单,坑在细节里。目标层的表述必须单一、可判定。如果你的目标是"提升企业竞争力",这不是一个可评价的目标,因为它没有明确的比较对象。正确的写法是"从三家候选供应商中选择一家作为未来两年的主供应商",有明确的行动、明确的对象、明确的时间范围。

准则层的每个准则都要满足独立可测。什么叫独立?就是准则之间不能互相包含。比如你已经有了"技术水平",就不要再单列"研发能力",因为后者基本被前者覆盖了。准则重叠会让权重失真——重叠的部分被计算了两次,实际重要性被放大。

方案层的处理有个小技巧:如果备选方案多于7个,先做一轮粗筛。可以用简单的打分卡剔除明显不合格的,剩下的再进层次分析法。我做过一个项目,最初有12家供应商入池,直接建矩阵的话准则层矩阵是12阶,专家填一份要半小时还错误百出。后来先用资质、财务、产能三个硬指标筛掉7家,剩5家再做,效率和准确度都上来了。

2.2 指标筛选的三种实用手法

准则怎么选,这是建模阶段最费脑子的地方。我常用的有三种手法,按项目情况选用。

第一种是文献频次法。去检索同主题的已有研究,把出现频率高的指标统计出来,取前若干个。这个方法的好处是有据可依,写论文的时候好交代来源;坏处是容易趋同,大家都是那几个指标,缺乏针对性。我一般用它来打底,形成候选池。

第二种是专家访谈法。找三到五位真正懂这个领域的人,每个人独立列一份自己认为重要的准则,然后取交集和并集。交集是共识指标,并集里出现两次以上的作为补充指标。访谈的时候有个关键技巧:不要问"你觉得什么重要",要问"如果只能保留三个指标你会保留哪三个",前者的答案往往是全面的废话,后者的答案才有区分度。

第三种是相关性过滤法。把候选准则两两做相关性分析,相关系数超过0.8的,保留其中一个。这一步需要数据支撑,样本少的时候做不了,但只要有数据就应该做,能有效避免指标冗余。

实际操作里我是这样组合的:先用文献法凑出10到15个候选,再用访谈法筛到6到8个,最后。如果样本够就用相关性过滤压到5个以内。最终准则层定5个左右是比较舒服的规模,判断矩阵15次比较,专家二十分钟能认真填完。

2.3 判断矩阵的1-9标度到底在表达什么

这是层次分析法最核心也最容易被误解的部分。1-9标度不是让你"给重要性打个分",而是让你回答两个元素之间相对重要多少

标度含义通俗解释
1同等重要两者差不多,谁高谁低看不出
3稍微重要略占优势,但不明显
5明显重要优势比较清楚
7强烈重要优势非常明显
9极端重要一个几乎可以单独决定结果
2,4,6,8上述判断的中间值拿不准时用
倒数反向比较a对b是3,b对a就是1/3

判断矩阵有三个必须满足的性质,写代码的时候都要检查:

  • 正互反性:a_ij > 0,且 a_ij = 1 / a_ji,对角线全为1。这一条保证了矩阵的结构完整。
  • 传递性(理想状态):a_ij × a_jk = a_ik。实际中几乎不可能完全满足,所以才有一致性检验。
  • 有界性:取值落在1/9到9之间。这个范围的设定是有讲究的,心理学研究表明人同时辨别差异的极限大概是7±2个等级,1-9刚好覆盖这个区间。

提示:填矩阵的时候千万不要逐格去填。正确做法是先填上三角,下三角用倒数自动生成。这样既省时间,又天然保证了互反性,不会出现a_ij=3但a_ji=1/4这种低级错误。手写的时候我都先画一个上三角,填完再对称取倒数。

关于标度的选择,还有一个经常被忽略的点:**1-9标度适合"差异较大"的比较,如果两个准则差异很小,用1或者2就够了,不要动不动就上7和9。**很多判断矩阵一致性差,就是因为把所有比较都拉开成大分数,人为制造了矛盾。我的经验是,一个5阶矩阵里出现9的次数最好不要超过一次,出现7的次数控制在两次以内,整体标度分布偏小反而更稳定。

3. 权重计算:特征值法、方根法、和积法逐个拆解

3.1 特征值法:数学意义上的标准解法

层次分析法的理论基础来自正互反矩阵的一个性质:**完全一致的判断矩阵,其最大特征值恰好等于矩阵阶数n,对应的特征向量归一化后就是权重向量。**现实中矩阵不可能完全一致,最大特征值会略大于n,但对应的特征向量仍然可以作为权重的良好近似。这就是特征值法的由来。

具体步骤是:求矩阵A的全部特征值和特征向量,找到模最大的那个特征值λ_max,取它对应的特征向量,做归一化处理,得到的向量就是权重。

这里有个细节需要注意:λ_max对应的特征向量各分量未必同号,实际计算中可能出现负数分量。出现负值说明数值求解有误差,处理办法是取绝对值再归一化。MATLAB里用eig()函数求出来的是复特征值,需要取实部再处理。这些细节在教科书里往往一句带过,但真正写代码的时候不注意就会算出莫名其妙的权重。

特征值法的优点是数学上最严谨,是层次分析法原始文献采用的方法,论文里写出来最有说服力。缺点也很实在:计算量大,手算基本不可能,必须依靠工具;而且当矩阵接近奇异、或者存在多个接近最大特征值的特征值时,结果的稳定性会下降。我在做正式报告的时候用特征值法,做快速试算或者教学演示的时候用近似法。

3.2 方根法与和积法:手算和代码里的实用派

方根法(也叫几何平均法)的思路非常朴素:把判断矩阵每一行的元素连乘,开n次方,然后归一化。公式写出来是这样:

第一步,逐行连乘:M_i = ∏(j=1到n) a_ij

第二步,开n次方:W_i' = M_i^(1/n)

第三步,归一化:W_i = W_i' / Σ W_i'

和积法(也叫算术平均法)则是另一条路:先按列归一化,再按行求和,最后再归一化一次。

第一步,列归一化:b_ij = a_ij / Σ(i=1到n) a_ij

第二步,行求和:S_i = Σ(j=1到n) b_ij

第三步,归一化:W_i = S_i / Σ S_i

两种方法的手算量都不大,5阶矩阵十几分钟能算完。更关键的是,这两种方法算出来的权重和特征值法的结果非常接近,文献里做过大量对比,误差通常在千分之几的量级。所以在精度要求不是极端苛刻的场景下,用方根法完全够用。

我个人的建议是:**论文里主方法写特征值法,同时用方根法做验证,两者结果对得上说明计算无误,对不上就说明哪里算错了。**这是一个非常实用的自查手段,比反复检查公式有效得多。

3.3 三种方法的误差对比与选择建议

为了让大家直观感受到差异,我拿一个实际用过的5×5判断矩阵做了对比测试,结果如下。

方法计算复杂度与特征值法最大偏差适用场景
特征值法基准论文、正式报告、精度要求高
方根法约0.3%~0.8%手算、快速试算、代码实现
和积法最低约0.5%~1.2%教学演示、粗略估计

这个表格里的偏差数字在100次随机测试中的统计结果,不是单次值。可以看到,方根法的表现确实优于和积法,这也是为什么我在代码里默认用方根法做快速计算。

还有一点值得提:**当判断矩阵的一致性很好(CR小于0.05)时,三种方法的结果几乎完全一致;一致性越差,方法之间的差异越大。**这其实给了我们一个额外的信号——如果你用两种方法算出来的权重差异很明显,那多半不是方法的问题,而是你的判断矩阵本身矛盾太多,应该回头去改矩阵,而不是纠结用哪种算法。

注意:不管用哪种方法,最后一步归一化都不能省。我见过有人算出权重向量(2.15, 1.14, 0.41)就往下用了,忘记除以总和,结果方案综合得分加起来不等于1,排序虽然没错,但数值完全没法解释,也没法和别人的结果对比。

4. 一致性检验:最容易被糊弄过去的一步

4.1 CI、RI、CR三个指标的来龙去脉

一致性检验要回答的问题是:你在判断矩阵里填的那些数字,逻辑上自洽吗?

举个例子,如果你认为A比B重要3倍,B比C重要2倍,那么按照传递性,A应该比C重要6倍。如果你在矩阵里填的A比C是2倍,那就出现了逻辑矛盾。这种矛盾在人的主观判断里很常见,程度轻一点不影响结果,程度重了就会让权重失去意义。

衡量这个矛盾程度的指标叫一致性指标CI,公式是:

CI = (λ_max - n) / (n - 1)

λ_max是最大特征值,n是矩阵阶数。完全一致时λ_max = n,CI = 0。偏差越大,CI越大。

但CI的大小和矩阵阶数有关:同样是0.1的CI,3阶矩阵里已经算偏差很大了,10阶矩阵里可能还算可接受。为了消除阶数影响,需要引入一个参照标准,这就是随机一致性指标RI

RI的获取方式是这样的:随机生成大量同阶的正互反矩阵(元素从1/9到9随机取),各自算出CI,取平均值。这个过程重复足够多次,得到的平均CI就是这个阶数的RI。所以RI本质上是一个"随机填矩阵时的典型矛盾水平"。

最后,一致性比率CR = CI / RI。当CR小于0.1时,认为一致性可以接受;大于等于0.1时,需要重新调整判断矩阵。

4.2 随机一致性指标RI表与阶数对应关系

这张表必须记住,或者至少知道去哪里查。我用的是Saaty原始文献给出的标准值:

阶数n12345678
RI000.580.901.121.241.321.41
阶数n9101112131415
RI1.451.491.511.541.561.581.59

有两个地方需要特别注意。第一,n=1和n=2时RI为0,这意味着这两种情况下一阶矩阵和二阶正互反矩阵天然完全一致,CI必然为0,检验环节可以直接跳过,不要在代码里除零。第二,n超过15以后RI值趋于稳定在1.59附近,但我不建议用超过10阶的矩阵,因为专家在填写15阶矩阵时需要做105次两两比较,数据质量根本没法保证。

提示:不同教材给出的RI值在小数点后第二位会有细微差异,这是随机模拟次数不同导致的。写论文时注明你采用的来源即可,不要因为差0.01就怀疑自己算错了。我一般在代码里把这张表硬编码进去,避免每次都要翻书。

4.3 CR不达标时应该怎么改,改法有优先级

这是实际操作中最折磨人的一步。CR算出来0.15,怎么办?很多人第一反应是"随便找几个数字改一下",这样改出来的矩阵虽然通过了检验,但已经失去了原本的判断含义,等于自己骗自己。

我总结了一套有优先级的调整方法,从最该改的到最不该改的依次是:

**第一优先级:检查有没有明显的填写错误。**比如上三角填了3,下三角填的是1/3以外的值,或者对角线不等于1。这类错误修正后往往CR立刻就下来了。

**第二优先级:找出矛盾最集中的元素。**计算每一行的"偏差贡献",也就是把矩阵的每一列与权重向量做比值,看哪一行的波动最大。波动最大的那一行对应的准则,往往是专家判断最没把握的,重新和他确认一遍。

**第三优先级:调整最大的标度。**把你填的9改成7,7改成5,整体把所有标度往1的方向压缩。因为一致性差很多时候就是因为标度拉得太开,压缩后矛盾自然减少。

**第四优先级:反向检查传递性链条。**找出所有的三元组(a, b, c),检查a_ab × a_bc与a_ac是否偏离太远,优先修正偏离最大的那个元素。

**最后才考虑:整体重填。**如果以上都试过还是不行,说明专家对这个问题的判断本身就不稳定,这时候要做的不是硬凑矩阵,而是把问题拆得更细,或者增加专家数量做群决策。

实测下来,按这个优先级处理,90%以上的不一致问题都能在前三步解决。真正需要重填的情况其实很少,多数人一上来就重填,纯粹是因为不知道怎么定位问题。

5. MATLAB实操:从输入矩阵到输出权重排名

5.1 完整的主程序代码

下面这套代码是我自己用了很多轮的版本,包含了权重计算、一致性检验、结果输出三个部分,可以直接跑。

function [w, CR, lambda_max, CI] = ahp_weights(A) % AHP_WEIGHTS 计算判断矩阵的权重向量与一致性比率 % 输入: A - n×n 正互反判断矩阵 % 输出: w - 归一化权重列向量 % CR - 一致性比率 % lambda_max - 最大特征值 % CI - 一致性指标 n = size(A, 1); if size(A, 2) ~= n error('判断矩阵必须是方阵'); end % ---------- 一致性检验 ---------- [V, D] = eig(A); lambda_max = max(real(diag(D))); CI = (lambda_max - n) / (n - 1); RI_table = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, ... 1.41, 1.45, 1.49, 1.51, 1.54, 1.56, 1.58, 1.59]; if n <= 15 RI = RI_table(n); else RI = 1.59; end if RI == 0 CR = 0; else CR = CI / RI; end % ---------- 权重计算(特征向量法)---------- [~, idx] = max(real(diag(D))); w = abs(real(V(:, idx))); w = w / sum(w); end

再给一个方根法的版本,方便做交叉验证:

function [w, lambda_max, CI, CR] = ahp_geomean(A) % 几何平均法(方根法)计算权重 n = size(A, 1); M = prod(A, 2); % 每行连乘 Wp = M .^ (1/n); % 开n次方 w = Wp / sum(Wp); % 归一化 % 用权重反推最大特征值 Aw = A * w; lambda_max = mean(Aw ./ w); CI = (lambda_max - n) / (n - 1); RI_table = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, ... 1.41, 1.45, 1.49, 1.51, 1.54, 1.56, 1.58, 1.59]; RI = RI_table(min(n, 15)); if RI == 0 CR = 0; else CR = CI / RI; end end

5.2 代码逐段拆解与参数说明

先说特征值法那段。eig(A)返回的是特征向量矩阵V和特征值对角矩阵D。判断矩阵是实对称吗?不一定,正互反矩阵只在完全一致时才对称,一般情况下不对称,所以特征值可能是复数。用real(diag(D))取实部是必须的,否则max会按复数模比较,得到的结果可能不符合预期。

lambda_max = max(real(diag(D)))这里还有个隐含假设:最大特征值是实数。对于正互反矩阵,Perron-Frobenius定理保证了存在唯一的正实特征值,且它是模最大的。所以这个取法是对的,不用太担心。

权重向量取abs(real(V(:, idx))),先取实部再取绝对值,最后归一化。为什么取绝对值?因为数值误差可能让本该是正数的分量变成-1e-15这种,直接用它算会出问题。取绝对值后权重向量保持非负,符合权重定义。

方根法那段,prod(A, 2)是沿第二维求积,也就是每行元素的乘积。注意如果矩阵里有0就完蛋了,不过判断矩阵元素都是正数,不会有这个问题。mean(Aw ./ w)是标准的最大特征值近似公式,理论依据是当w是精确特征向量时Aw = λw,所以Aw./w的每个分量都等于λ。

这里有个数值细节:如果某个w分量非常小,Aw./w可能不稳定。实际使用中判断矩阵的权重不会出现极端小的值,除非矩阵质量很差,所以一般不用特殊处理。如果你想稳妥一点,可以用加权平均代替算术平均,但效果差别不大。

注意:MATLAB里**不是乘方运算符,要用.^。我看到过初学者在这个地方卡了很久,报错信息又不够直白。另外prod^的维度要对应好,M .^ (1/n)里的点号不能漏,漏了就变成矩阵的n次方根,结果完全不对。

5.3 一个完整的选供应商案例跑通全过程

理论说再多不如跑一个完整例子。假设你要从三家供应商中选一家,准则层定了四个:价格、质量、交付、服务。

**第一步,构造准则层判断矩阵。**经过和采购、质量、生产三个部门的人沟通,得到如下矩阵(行和列的顺序依次是价格、质量、交付、服务):

A = [1, 1/2, 3, 2; 2, 1, 4, 3; 1/3, 1/4, 1, 1/2; 1/2, 1/3, 2, 1];

含义是:质量比价格重要(2:1),价格明显比交付重要(3:1),质量比服务重要(3:1),交付比服务稍差(1:2)。这些判断来自访谈中的共识,不是我随手编的。

第二步,算权重和一致性。

[w, CR, lambda_max, CI] = ahp_weights(A); disp(w); disp(CR);

方根法手算的结果是:先把每行相乘,价格行1×0.5×3×2=3,开四次方得1.3161;质量行2×1×4×3=24,开四次方得2.2134;交付行0.3333×0.25×1×0.5=0.04167,开四次方得0.4518;服务行0.5×0.3333×2×1=0.3333,开四次方得0.7598。

四者之和是4.7411,归一化后得到权重:

  • 价格:0.2776
  • 质量:0.4669
  • 交付:0.0953
  • 服务:0.1603

一致性检验:矩阵乘权重向量得到(1.1176, 1.8842, 0.3847, 0.6453),逐项除以对应权重得到四个比值4.0258、4.0356、4.0368、4.0258,平均后λ_max约为4.0310。

CI = (4.0310 - 4) / 3 = 0.01033,4阶矩阵RI = 0.90,CR = 0.0115。远小于0.1,一致性非常好,这个矩阵可以用。

**第三步,构造方案层判断矩阵。**每个准则下,对三家供应商做两两比较。以价格准则为例,供应商A价格最低、B中等、C最高,得到:

P_price = [1, 2, 5; 1/2, 1, 3; 1/5, 1/3, 1];

同理构造质量、交付、服务三个矩阵:

P_qual = [1, 1/3, 1/2; 3, 1, 2; 2, 1/2, 1]; P_deliv = [1, 3, 4; 1/3, 1, 2; 1/4, 1/2, 1]; P_serv = [1, 1/2, 2; 2, 1, 3; 1/2, 1/3, 1];

分别算出四个矩阵的权重向量:

准则供应商A供应商B供应商C
价格0.58150.30900.1095
质量0.16340.53960.2969
交付0.62500.23850.1365
服务0.29700.53960.1634

**第四步,逐层合成。**用准则权重乘以各方案在该准则下的权重,再求和。

供应商A的总得分:0.2776×0.5815 + 0.4669×0.1634 + 0.0953×0.6250 + 0.1603×0.2970 = 0.1614 + 0.0763 + 0.0596 + 0.0476 = 0.3449

供应商B的总得分:0.2776×0.3090 + 0.4669×0.5396 + 0.0953×0.2385 + 0.1603×0.5396 = 0.0858 + 0.2519 + 0.0227 + 0.0865 = 0.4469

供应商C的总得分:0.2776×0.1095 + 0.4669×0.2969 + 0.0953×0.1365 + 0.1603×0.1634 = 0.0304 + 0.1386 + 0.0130 + 0.0262 = 0.2082

三个得分相加等于1.0000,验证了归一化没有问题。最终排序是B优于A优于C。有意思的是,A在价格和交付上都排第一,但因为质量准则的权重最高(0.4669),而A恰恰在质量上最弱,最终被B反超。这个结果拿给采购部门看的时候,讨论的焦点就集中在"质量权重给到0.47是不是偏高"上,这比单纯争论"选谁"有效得多。

6. 常见问题与排查技巧实录

6.1 一张速查表覆盖八成报错场景

我在帮别人看代码和审论文的过程中,整理了一批高频问题,做成速查表。

现象可能原因解决方向
CR大于0.1标度拉得过开、存在逻辑矛盾压缩大标度、定位矛盾三元组
权重全是0或NaN矩阵含0或负数、忘记归一化检查正互反性、补归一化步骤
权重和有明显偏差浮点误差或手工计算错误用两种方法交叉验证
λ_max小于n计算错误,理论上不可能检查eig结果实部取值
方案排名和直觉差很远准则权重或方案打分有问题逐一检查方案层矩阵
不同专家结果差异大判断标准不统一做群决策几何平均聚合
某个准则权重极低该准则和其他准则高度相关考虑剔除或合并准则

这张表里最值得说的是"λ_max小于n"这条。理论上正互反矩阵的最大特征值必然大于等于n,等号只在完全一致时成立。如果你的代码算出来λ_max小于n,百分百是计算过程出了问题,最常见的坑是特征值取了复数模而不是实部,或者矩阵本身填错了(比如把0.5填成了2.5这种手误)。

6.2 群决策:多个专家意见不一致怎么办

实际项目里很少是一个人填矩阵,通常是三到五个专家各自填一份。这时候怎么聚合?常见的有三种做法,各有适用场景。

第一种是聚合判断矩阵:把各位专家填的矩阵对应元素做几何平均,得到一个综合矩阵,再算权重。几何平均的公式是a_ij = (∏ a_ij^(k))^(1/m),m是专家数量。注意是几何平均不是算术平均,因为判断矩阵的元素是比值关系,只有几何平均才能保持互反性。如果对a_ij做算术平均,对a_ji也做算术平均,两者乘积不一定等于1,矩阵就破坏了。

第二种是聚合权重:每位专家各自算权重,再对权重做算术平均。这种方法的好处是能保留每位专家的完整判断,也能算权重标准差来反映分歧程度。

第三种是先讨论后统一:把分歧大的元素拿出来,组织专家面对面讨论,达成一致后再填一份统一的矩阵。

我一般推荐第二种加第一种结合:先各自算权重,看看分歧大不大。如果标准差很小(比如各权重标准差不超过0.05),直接用第二种的平均权重;如果标准差很大,说明专家意见确实分裂,这时候用第一种聚合矩阵的结果更稳妥,同时把分歧情况在报告里说明。

提示:专家数量建议不少于5人,且最好来自不同岗位。全是同一个部门的人,判断会高度趋同,群决策的意义就不大了。另外每个专家填之前要给他们同一套准则定义和标度说明,定义不统一是群决策结果离散的最大原因。

6.3 权重差别很小的排序陷阱

有一种情况特别容易误导人:算出来两个方案的得分是0.3452和0.3418,差了0.0034,你就宣布前者更优。这个结论其实站不住脚,因为输入数据本身的判断误差可能就有0.01的量级了。

处理这个问题有两个办法。一是做敏感性分析:把准则权重上下浮动10%,看排序会不会翻转。如果浮动5%排序就变了,那说明两个方案本质上难分伯仲,报告里应该如实说明。二是设定区分阈值:比如约定得分差小于0.02视为"无明显差异",需要结合其他因素决定。

我自己做项目时,只要前两名差距小于0.03,就会在结论里加一句"两者综合表现接近,建议结合实地考察或试用结果确定"。这句话看起来是废话,其实体现的是对方法的尊重——层次分析法的精度是有限的,不能把它算出来的小数点后四位当成硬结论。

6.4 几个只有踩过才知道的实操心得

**心得一:判断矩阵填之前先让专家做一次"排序"。**只让专家把准则按重要性排个序,不填具体数字。等填矩阵的时候如果出现"排第2的准则标度比排第1的还大"这种矛盾,立刻就能发现。这个方法特别管用,能提前拦住大部分一致性事故。

**心得二:RI表按阶数查,不要按准则数量查。**这里容易混淆——如果你的层次结构有两层判断矩阵,一个是4阶(准则层),一个是3阶(方案层),那就要分别查RI。我见过有人用4阶的RI去检验3阶矩阵,算出来的CR偏小,误以为通过。

**心得三:代码里加一个输入校验函数。**检查矩阵是否为正互反的标准是:所有元素大于0,对角线等于1,且|a_ij × a_ji - 1| < 1e-8。加这一步能避免大量手工录入错误,特别是从Excel导入数据的时候。

**心得四:结果一定要做一次"合理性回看"。**把算出来的权重念一遍,问自己"这个排序符合我原本的判断吗"。如果权重最高的准则和你直觉上认为最重要的不一致,先别急着改,去看看判断矩阵里是不是有填反的地方。我碰到过一次,算出来"售后"权重最高,回头一查是填矩阵的人把行和列搞反了。

**心得五:判断矩阵的来源要存档。**每一份判断矩阵对应哪位专家、什么时候填的、当时的口径是什么,都要记录。这类项目往往要经历好几次评审,评审人一问"这个数是怎么来的",你能立刻翻出来,可信度完全不一样。

7. 如果你还想往下走,这几个方向值得看看

层次分析法本身到上面基本讲完了,但真正把它用好,还需要知道它和其他方法的组合方式。这里简单说说我接触过的几个方向,有兴趣的可以按需深入。

模糊层次分析法,解决的是"专家说不清程度"的问题。传统方法要求专家在1到9之间给一个确定值,但很多时候专家的判断是"大概在3到5之间"。模糊层次分析法用三角模糊数或者区间数来表示这种不确定性,最后做去模糊化处理。它的计算量比经典方法大不少,适合不确定性要求高的场景。

层次分析法加熵权法组合赋权,这是我个人最推荐的组合。层次分析法负责主观权重,熵权法负责客观权重,两者按一个系数加权得到综合权重。这样既保留了专家经验,又让数据说话。系数怎么定是个学问,常见做法是用距离函数或者博弈论组合,简单点就直接五五开。用这个组合,能规避"纯主观拍脑袋"和"纯客观没解释力"两个极端。

层次分析法加TOPSIS,解决的是方案层打分的问题。准则权重用层次分析法算,方案得分用TOPSIS算,两者结合形成"权重—得分"两步走。比纯层次分析法的优势是方案层不需要专家填矩阵,直接输入原始数据,减少了主观成分。这套组合在工程评价类论文里非常流行,代码量也不大。

最后分享一个我自己用下来最舒服的做法:**准则权重用层次分析法,方案数据用客观指标,最后用加权标准化矩阵做综合排序。**这套流程既满足了"方法有理论依据"的评审要求,又避免了方案层主观打分带来的争议。判断矩阵那部分永远是最容易被人质疑的,所以我在报告里会把每个判断的来源写清楚——哪位专家、什么依据、为什么给这个标度,越是能追溯到源头的判断,越经得起推敲。

这些年在不同项目里反复用层次分析法,最深的一个体会是:**这个方法的难点从来不在数学上,方根法三行公式谁都能背下来,难的是怎么把一个模糊的决策问题拆解得既完整又不冗余,怎么让专家的判断真实且一致地表达出来。**矩阵和权重只是最后那个出口,前面的结构设计和数据采集才是决定成败的地方。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询