AHP層次分析法

AHP層次分析法

AHP層次分析法是一種層次權(quán)重決策分析法,解決多目標(biāo)復(fù)雜問題的定性和定量的決策分析方法,用決策者的的經(jīng)驗(yàn)判定各個(gè)衡量目標(biāo)之間相對(duì)的重要程度,給出每個(gè)決策方案的權(quán)重,確定優(yōu)先次序。

1、基本原理

消費(fèi)者對(duì)包包的偏好


image.png

這是最簡(jiǎn)單的層次分析。

2、解決思路

我們的基本思路是將所要分析的問題層次化,把影響目標(biāo)的因素分解成不同的因素,按照因素的關(guān)聯(lián)關(guān)系和隸屬關(guān)系形成不同的組合,這樣就形成了一個(gè)多層次分析模型,并對(duì)比優(yōu)劣。

3、層次分析模型的步驟

  • 1、創(chuàng)建層次目標(biāo)
  • 2、設(shè)置分析法的標(biāo)準(zhǔn)(考慮的因素)
  • 3、設(shè)置分析法的子標(biāo)準(zhǔn)(考慮因素的子因素,可加可不加)
  • 4、設(shè)置方案層
  • 5、逐層矩陣計(jì)算,驗(yàn)證歸一性
  • 6、最終得出權(quán)重占比

層次分析法所要解決的問題是關(guān)于最低層對(duì)最高層的相對(duì)權(quán)重的問題,按此相對(duì)權(quán)重可以對(duì)最低層中的各種方案、措施進(jìn)行排序,從而在不同的方案中做出選擇或形成選擇方案的原則.

構(gòu)建判斷矩陣:

我們?cè)跇?gòu)建矩陣的時(shí)候必須保持一致性,我們將因素兩兩比較的。

矩陣aij的評(píng)分標(biāo)準(zhǔn),下面是9分標(biāo)準(zhǔn),也可以設(shè)置5分標(biāo)準(zhǔn)、7分標(biāo)準(zhǔn)



注意:
我們?cè)谠O(shè)置aij的評(píng)分的同時(shí),aji的評(píng)分是aij評(píng)分的倒數(shù),假如a12的評(píng)分是2,那個(gè)a21的評(píng)分是1/2

一致性驗(yàn)證:

我們得出求出矩陣的特征向量W和特征值λ之后,我們需要判斷矩陣是否一致性標(biāo)準(zhǔn)。

定義一致性指標(biāo) CI=λ?n/n-1;
CI越接近0,表示一致性越好,越大表示一致性月差。
為了衡量CI的發(fā)小,我們引入隨機(jī)一直項(xiàng)指標(biāo)RI



定義一致性比率CR= CI/RI,當(dāng)CR<0.1的時(shí)候我們就認(rèn)為滿足一致性校驗(yàn),否則我們就需要重新對(duì)比矩陣,對(duì)其中的評(píng)分重新調(diào)整.

實(shí)例:

我們構(gòu)建準(zhǔn)則層對(duì)目標(biāo)層的矩陣:


準(zhǔn)則矩陣.png

計(jì)算特征向量的過程(計(jì)算權(quán)重占比的過程):
1、列向求和


列向求和.png

2、列向歸一化
image.png

得到列向歸一化矩陣:


列向歸一化矩陣.png

3、行求和
行求和

4、歸一化
image.png

顏色對(duì)應(yīng)的求和0.3679/3,得到最終的權(quán)重占比
W=(0.1226,0.3202,0.5571)T
我們需要計(jì)算特征值λ,進(jìn)而求出一致性指標(biāo)CI
AW=λW,W是特征向量(0.1226,0.3202,0.5571)T
AW.png

得出AW的值便可以得出λ,此時(shí)λ,存在3個(gè)值,我們?nèi)テ渌銛?shù)平均數(shù)
λ=(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 所以符合一致性
通過上面的層次分析,我們得出評(píng)價(jià)是最重要的因素,影響消費(fèi)者對(duì)包包的購(gòu)買。

層次總排序以及一次性檢驗(yàn)

  • 計(jì)算某一層次對(duì)總目標(biāo)相當(dāng)于重要性的權(quán)值,稱為層次總排序
  • 這一過程是從最高層次到最低層次依次進(jìn)行。
image.png

A層m個(gè)因素A1,A2,???,Am, ,對(duì)總目標(biāo)Z的排序?yàn)閍1,a2,???,am
B層n個(gè)因素對(duì)上層A中因素為Aj的層次單排序?yàn)閎1j,b2j,???,bnj(j=1,2,3,???,m)


層次總排序的一致性比例
CR=(a1CI1+a2CI2+...+amCIm)/(a1RI1+a2RI2+...+amRIm),當(dāng)CR<0.1的時(shí)候,我們認(rèn)為層次總排序一致。

例子:
我們?cè)谏厦孢x擇包包的時(shí)候,我們第二層準(zhǔn)則對(duì)目標(biāo)的權(quán)向量W1=W=(0.1226,0.3202,0.5571)T,同樣我們要求第三層對(duì)第二層每一個(gè)元素(準(zhǔn)則)的權(quán)向量。


我們可以計(jì)算出

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

組合權(quán)向量

我們得到最終的矩陣權(quán)值:



RI = 0.58 ,我們可以驗(yàn)證CI<0.1,符合一致性檢驗(yàn)

方案層對(duì)目標(biāo)組合最終的權(quán)值向量是:(0.6149,0.2767,0.1083)T
所以我們可以得到LV包包是用戶更關(guān)心的商品。

最終結(jié)果,我們將5-10人的評(píng)分結(jié)果都求取取來,然后去除最高和最低值,求每個(gè)解決方案的算數(shù)平均數(shù),我們可以得到最終的解決方案。


我們?cè)跇?biāo)準(zhǔn)層的下方,繼續(xù)寫子標(biāo)準(zhǔn),例如顏色分成紅、黑、橙3中,我們求取去特征向量W,之后就能求出每個(gè)顏色是消費(fèi)者最喜歡的,方法類似上面的流程。

python 代碼:

# coding=UTF-8
import numpy as np
'''
@Description:求解矩陣的權(quán)向量
@para:成對(duì)比較矩陣
@return:權(quán)向量
'''
def abhWeightVector(Mat):
    sizeMat = Mat.shape[0]
    #print(Mat)
    #print(sizeMat)

    # 計(jì)算矩陣A的特征值,特征向量
    eigenvalueMat, eigenvectorMat = np.linalg.eig(Mat)
    #print("特征值:", eigenvalueMat)
    #print("特征向量:", eigenvectorMat)
    
    # 將所有特征值取絕對(duì)值
    absEigenvalueMat = map(abs, eigenvalueMat)
    absEigenvalueMat = list(absEigenvalueMat)  
    #print(absEigenvalueMat)
    
    # 絕對(duì)值最大的特征值
    maxEigenvalueMat = max(absEigenvalueMat)
    #print("絕對(duì)值最大的特征值:", maxEigenvalueMat)
    
    # 絕對(duì)值最大的特征值的索引
    maxEigenvalueIndexMat = absEigenvalueMat.index(maxEigenvalueMat)
    #print(maxEigenvalueIndexMat)
    
    # 絕對(duì)值最大的特征值對(duì)應(yīng)的特征向量
    maxEigenvectorMat = eigenvectorMat[:, maxEigenvalueIndexMat]
    #print("絕對(duì)值最大的特征值對(duì)應(yīng)的特征向量:", maxEigenvectorMat)
    
    # 將上述特征向量標(biāo)準(zhǔn)化,即權(quán)向量   
    standardizeVectorMat = list(map(abs, maxEigenvectorMat)) / sum(list(map(abs, maxEigenvectorMat)))
    #print(standardizeVectorMat)
    
    # 計(jì)算不一致程度CI
    CI = (maxEigenvalueMat - sizeMat) / (sizeMat - 1)
    #print(CI)
    
    # 平均隨機(jī)一致性指標(biāo)RI
    listRI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45]
    
    #計(jì)算隨機(jī)一致性比率
    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)

在線工具避免個(gè)人計(jì)算:
wis-ai
spssau

參考Blog:
層次分析法(AHP)詳細(xì)步驟

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容