层次分析法(AHP)Python实现

技术

AHP(层次分析法)是一种用于多标准决策的定量分析方法,它通过将决策问题层次化为多个层次,然后利用专家判断和数学计算来确定最佳决策方案

1. AHP的基本步骤:

  • 建立层次结构: 将决策问题分解为若干个层次,包括目标层、准则层和方案层
  • 构造判断矩阵: 对于每个层次,通过专家判断或者问卷调查,构建判断矩阵,用来衡量各个因素之间的相对重要性
  • 计算权重: 通过对判断矩阵进行特征值分解,计算出每个因素的权重
  • 一致性检验: 检验判断矩阵的一致性,以确保专家判断的一致性和可信度
  • 综合评价: 将权重和各个方案的得分 综合起来,得出最佳方案或排序

构造判断矩阵是AHP方法中的关键步骤之一,它用来衡量不同因素之间的相对重要性

2. 构造判断矩阵的步骤:

  • 确定判断矩阵的大小: 首先确定需要构造判断矩阵的因素个数,通常这些因素对应于AHP层次结构中的每一层,例如目标层、准则层和方案层
  • 定义比较标准: 对于每个层次中的因素,需要定义一个比较标准,即用来衡量两个因素之间相对重要性的指标。比如在准则层中,可以问自己:“相对于准则A,准则B有多重要?”
  • 建立判断矩阵: 根据比较标准,构建一个方阵,即判断矩阵。矩阵的大小为n x n,其中n是因素的个数。对于每对因素,填入一个数值来表示它们之间的相对重要性。通常采用1到9的量表,其中1表示两个因素等价,9表示一个因素远远重要于另一个因素,中间的数值表示相对的重要程度
  • 填充判断矩阵: 根据比较标准逐对填充判断矩阵。对于每对因素,根据你的判断,将适当的数值填入相应的位置。确保填充矩阵时保持一致性,即对于相同的比较标准,在不同的位置上填入的数值应该是一致的
  • 验证一致性: 填充完判断矩阵后,需要进行一致性检验,确保专家判断的一致性和可信度。通常采用一致性指标(如一致性比率CR)来检验矩阵的一致性。如果一致性指标超出了预设的阈值,就需要重新审查专家的比较结果或调整判断矩阵,直到满足一致性要求为止
  • 调整判断矩阵(可选): 如果发现判断矩阵存在较大的不一致性,可以通过重新审查专家意见或者使用平均化等方法进行调整,以提高判断矩阵的一致性和可信度

3. 案例引入

电动车正逐渐成为一种备受关注的选择,然而,要想在激烈的竞争中脱颖而出,制造商们需要了解各种因素对电动车销量的影响,并做出相应的决策,在这个复杂的决策过程中,AHP(层次分析法)提供了一种有效的解决方案。通过AHP方法,我们可以将影响电动车销量的因素层次化,系统地分析各个因素之间的关系,从而为制造商们提供科学的决策支持,当然这里是为了科普AHP,所以问题比较简化,如下为影响电动车销量的因素,从目标层、准则层到方案层

picture.image

假设其中市场因素的判断矩阵为:

picture.image

4. 利用Python求解


          
import numpy as np
          

          
def ahp(matrix):
          
    # 计算特征值和特征向量
          
    eigenvalue, eigenvector = np.linalg.eig(matrix)
          
    # 提取最大特征值对应的特征向量,并归一化
          
    max_eigenvalue_index = np.argmax(eigenvalue)
          
    max_eigenvalue = eigenvalue[max_eigenvalue_index]
          
    weight = eigenvector[:, max_eigenvalue_index]
          
    weight = weight / np.sum(weight)
          
    return weight, max_eigenvalue
          

          
def consistency_check(matrix, weight):
          
    n = len(matrix)
          
    # 计算一致性指标 CI
          
    lambda_max = np.sum(np.dot(matrix, weight) / weight) / n
          
    CI = (lambda_max - n) / (n - 1)
          

          
    # 随机一致性指标 RI 的值,这里我们假设矩阵大小不超过10
          
    RI_list = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.52, 1.54, 1.56, 1.58, 1.59, 1.61, 1.63, 1.64, 1.65]
          
    RI = RI_list[n - 1]
          

          
    # 计算一致性比例 CR
          
    CR = CI / RI
          
    return CI, CR
          

          
# 输入判断矩阵
          
matrix_1 = np.array([
          
        [1, 3, 5, 7],
          
        [1/3, 1, 4, 6],
          
        [1/5, 1/4, 1, 3],
          
        [1/7, 1/6, 1/3, 1],
          
    ])
          

          
# 计算判断矩阵的权重和最大特征值
          
weight_1, max_eigenvalue_1 = ahp(matrix_1)
          

          
# 检查一致性
          
CI1, CR1 = consistency_check(matrix_1, weight_1)
          

          
print("特征向量:")
          
print("Weight:", weight_1)
          
print("最大特征值:")
          
print("Max Eigenvalue:", max_eigenvalue_1)
          
print("CI值:")
          
print("CI:", CI1)
          
print("一致性检验结果:")
          
print("CR:", CR1)
      

picture.image

代码接受一个判断矩阵作为输入,然后通过特征值分解方法计算出矩阵的最大特征值和对应的特征向量,最终归一化得到权重。然后,它计算了一致性指标CI以及一致性比例CR,并与预先定义的随机一致性指标RI进行比较

5 . 结果解读

根据给定的结果,我们可以对消费者偏好、市场需求、市场竞争和营销策略的判断矩阵进行解释:

  • 特征向量: 该特征向量表示了每个因素在整体决策中的相对重要性。在这个特征向量中,消费者偏好的权重最大,为0.5536,其次是市场需求和市场竞争,分别为0.2889 和 0.1061,而营销策略的权重最小,为0.0513
  • 最大特征值: 这个值代表了判断矩阵中最重要的特征。在这个案例中,最大特征值为4.1725
  • CI值: CI(一致性指标)是用来评估判断矩阵的一致性程度的指标。CI的值为0.0575,表示相对于随机一致性指标,判断矩阵的一致性较好,因为CI值较小
  • 一致性检验结果(CR): 一致性比例(CR)是CI值与随机一致性指标(RI)的比值,用于判断判断矩阵的一致性是否可接受。在这个案例中,CR值为0.0639,小于1,这意味着判断矩阵的一致性是可接受的

综上所述,基于给定的判断矩阵结果,消费者偏好在整体决策中起着最重要的作用,其次是市场需求和市场竞争,而营销策略的影响相对较小,整体而言,判断矩阵表现出了较好的一致性,该判断矩阵结果可以使用,接下来可以计算其它所有判断矩阵的权重,将各个层次的权重进行组合根据AHP的结果做出明智的决策

6. 往期推荐

LightGBM模型房价预测实现

基于支持向量机(SVM)的红外光谱分类

ARIMA模型进阶——具有季节性的SARIMAX模型实现

长短期记忆网络LSTM在时序数据预测演示

深入浅出分析线性模型回归问题及python实现

时间序列预测神器Prophet python实现

弗洛伊德、迪杰斯特拉求最短路径

灰色预测模型

主成分分析PCA

基于熵权法的TOPSIS模型

基于K-means实现中草药红外光谱数据聚类

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论