AHP层次分析法

AHP层次分析法

AHP层次分析法是一种层次权重决策分析法,解决多目标复杂问题的定性和定量的决策分析方法,用决策者的的经验判定各个衡量目标之间相对的重要程度,给出每个决策方案的权重,确定优先次序。

1、基本原理

消费者对包包的偏好


image.png

这是最简单的层次分析。

2、解决思路

我们的基本思路是将所要分析的问题层次化,把影响目标的因素分解成不同的因素,按照因素的关联关系和隶属关系形成不同的组合,这样就形成了一个多层次分析模型,并对比优劣。

3、层次分析模型的步骤

  • 1、创建层次目标
  • 2、设置分析法的标准(考虑的因素)
  • 3、设置分析法的子标准(考虑因素的子因素,可加可不加)
  • 4、设置方案层
  • 5、逐层矩阵计算,验证归一性
  • 6、最终得出权重占比

层次分析法所要解决的问题是关于最低层对最高层的相对权重的问题,按此相对权重可以对最低层中的各种方案、措施进行排序,从而在不同的方案中做出选择或形成选择方案的原则.

构建判断矩阵:

我们在构建矩阵的时候必须保持一致性,我们将因素两两比较的。

矩阵aij的评分标准,下面是9分标准,也可以设置5分标准、7分标准



注意:
我们在设置aij的评分的同时,aji的评分是aij评分的倒数,假如a12的评分是2,那个a21的评分是1/2

一致性验证:

我们得出求出矩阵的特征向量W和特征值λ之后,我们需要判断矩阵是否一致性标准。

定义一致性指标 CI=λ−n/n-1;
CI越接近0,表示一致性越好,越大表示一致性月差。
为了衡量CI的发小,我们引入随机一直项指标RI



定义一致性比率CR= CI/RI,当CR<0.1的时候我们就认为满足一致性校验,否则我们就需要重新对比矩阵,对其中的评分重新调整.

实例:

我们构建准则层对目标层的矩阵:


准则矩阵.png

计算特征向量的过程(计算权重占比的过程):
1、列向求和


列向求和.png

2、列向归一化
image.png

得到列向归一化矩阵:


列向归一化矩阵.png

3、行求和
行求和

4、归一化
image.png

颜色对应的求和0.3679/3,得到最终的权重占比
W=(0.1226,0.3202,0.5571)T
我们需要计算特征值λ,进而求出一致性指标CI
AW=λW,W是特征向量(0.1226,0.3202,0.5571)T
AW.png

得出AW的值便可以得出λ,此时λ,存在3个值,我们去其算数平均数
λ=(0.3692/0.1226+0.9684/0.3202+1.6879/0.5571)/3 = 3.0219
CI = λ-n/n-1= 0.01095
CR = CI/RI = 0.0189 < 0.1 所以符合一致性
通过上面的层次分析,我们得出评价是最重要的因素,影响消费者对包包的购买。

层次总排序以及一次性检验

  • 计算某一层次对总目标相当于重要性的权值,称为层次总排序
  • 这一过程是从最高层次到最低层次依次进行。
image.png

A层m个因素A1,A2,⋅⋅⋅,Am, ,对总目标Z的排序为a1,a2,⋅⋅⋅,am
B层n个因素对上层A中因素为Aj的层次单排序为b1j,b2j,⋅⋅⋅,bnj(j=1,2,3,⋅⋅⋅,m)


层次总排序的一致性比例
CR=(a1CI1+a2CI2+...+amCIm)/(a1RI1+a2RI2+...+amRIm),当CR<0.1的时候,我们认为层次总排序一致。

例子:
我们在上面选择包包的时候,我们第二层准则对目标的权向量W1=W=(0.1226,0.3202,0.5571)T,同样我们要求第三层对第二层每一个元素(准则)的权向量。


我们可以计算出

Bλ1= 3.0536      Bλ2 =3.0385      Bλ3 = 3.0037
BW1 = (0.7089,0.1786,0.1125)T
BW2 = (0.6370,0.2583,0.1047)T
BW3 = (0.5816,0.3090,0.1095)T

组合权向量

我们得到最终的矩阵权值:



RI = 0.58 ,我们可以验证CI<0.1,符合一致性检验

方案层对目标组合最终的权值向量是:(0.6149,0.2767,0.1083)T
所以我们可以得到LV包包是用户更关心的商品。

最终结果,我们将5-10人的评分结果都求取取来,然后去除最高和最低值,求每个解决方案的算数平均数,我们可以得到最终的解决方案。


我们在标准层的下方,继续写子标准,例如颜色分成红、黑、橙3中,我们求取去特征向量W,之后就能求出每个颜色是消费者最喜欢的,方法类似上面的流程。

python 代码:

# coding=UTF-8
import numpy as np
'''
@Description:求解矩阵的权向量
@para:成对比较矩阵
@return:权向量
'''
def abhWeightVector(Mat):
    sizeMat = Mat.shape[0]
    #print(Mat)
    #print(sizeMat)

    # 计算矩阵A的特征值,特征向量
    eigenvalueMat, eigenvectorMat = np.linalg.eig(Mat)
    #print("特征值:", eigenvalueMat)
    #print("特征向量:", eigenvectorMat)
    
    # 将所有特征值取绝对值
    absEigenvalueMat = map(abs, eigenvalueMat)
    absEigenvalueMat = list(absEigenvalueMat)  
    #print(absEigenvalueMat)
    
    # 绝对值最大的特征值
    maxEigenvalueMat = max(absEigenvalueMat)
    #print("绝对值最大的特征值:", maxEigenvalueMat)
    
    # 绝对值最大的特征值的索引
    maxEigenvalueIndexMat = absEigenvalueMat.index(maxEigenvalueMat)
    #print(maxEigenvalueIndexMat)
    
    # 绝对值最大的特征值对应的特征向量
    maxEigenvectorMat = eigenvectorMat[:, maxEigenvalueIndexMat]
    #print("绝对值最大的特征值对应的特征向量:", maxEigenvectorMat)
    
    # 将上述特征向量标准化,即权向量   
    standardizeVectorMat = list(map(abs, maxEigenvectorMat)) / sum(list(map(abs, maxEigenvectorMat)))
    #print(standardizeVectorMat)
    
    # 计算不一致程度CI
    CI = (maxEigenvalueMat - sizeMat) / (sizeMat - 1)
    #print(CI)
    
    # 平均随机一致性指标RI
    listRI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45]
    
    #计算随机一致性比率
    CR = CI / listRI[sizeMat - 1]
    #print(CR)
    
    return standardizeVectorMat
   

MatA = np.array([[1, 2, 7, 5 ,5],
                 [1/2, 1, 4, 3, 3],
                 [1/7, 1/4, 1, 1/2, 1/2],
                 [1/5, 1/3, 2, 1, 1],
                 [1/5, 1/3, 3, 1, 1]])
standardizeVectorMatA = abhWeightVector(MatA)
print(standardizeVectorMatA)

MatB1 = np.array([[1, 1/3, 1/8],
                  [3, 1, 1/3],
                  [8, 3, 1]])
standardizeVectorMatB1 = abhWeightVector(MatB1)
print(standardizeVectorMatB1)

MatB2 = np.array([[1, 2, 5],
                  [1/2, 1, 2],
                  [1/5, 1/2, 1]])
standardizeVectorMatB2 = abhWeightVector(MatB2)
print(standardizeVectorMatB2)

MatB3 = np.array([[1, 1, 3],
                  [1, 1, 3],
                  [1/3, 1/3, 1]])
standardizeVectorMatB3 = abhWeightVector(MatB3)
print(standardizeVectorMatB3)

MatB4 = np.array([[1, 3, 4],
                  [1/3, 1, 1],
                  [1/4, 1, 1]])
standardizeVectorMatB4 = abhWeightVector(MatB4)
print(standardizeVectorMatB4)

MatB5 = np.array([[1, 4, 1/4],
                  [1, 1, 1/4],
                  [4, 1, 1]])
standardizeVectorMatB5 = abhWeightVector(MatB5)
print(standardizeVectorMatB5)

MatB = np.array([standardizeVectorMatB1, 
                 standardizeVectorMatB2, 
                 standardizeVectorMatB3, 
                 standardizeVectorMatB4, 
                 standardizeVectorMatB5])
print(MatB)

sumY1 = 0
sumY2 = 0
sumY3 = 0
for i in range(0, MatA.shape[0]):
    sumY1 += standardizeVectorMatA[i] * MatB[i][0]
    sumY2 += standardizeVectorMatA[i] * MatB[i][1]
    sumY3 += standardizeVectorMatA[i] * MatB[i][2]
    
sumY = [sumY1, sumY2, sumY3]
print(sumY)
maxY = max(sumY)
theBestIndex = sumY.index(maxY)
print(theBestIndex)

在线工具避免个人计算:
wis-ai
spssau

参考Blog:
层次分析法(AHP)详细步骤

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容