大家好,欢迎来到IT知识分享网。
层次分析法(Analytic Hierarchy Process,简称AHP)
AHP通过将复杂问题分解为多个层次、准则和子准则,建立判断矩阵,并通过对各个层次的比较和权重计算,最终得出最优的决策方案。
1.问题分解(层次结构模型的构建):
首先,将复杂的决策问题分解成一个层次结构。通常分为目标层、准则层和方案层。目标层是决策的最终目标,准则层是影响决策的因素,方案层是可能的选项或方案。
2.构建判断矩阵:
对每一层次的各个元素(行与列)进行成对比较,建立判断矩阵。这一步要求决策者根据经验或数据,对两个元素的相对重要性进行判断。判断矩阵中的元素值通常是1到9的标度值,1表示两个元素同等重要,9表示一个元素比另一个元素极端重要。
3.层次单排序:
通过判断矩阵的特征向量计算各个元素的相对权重。这个过程通常涉及到数学运算,如矩阵的特征值计算和特征向量的归一化处理。
计算权重
方法:
方根法:计算每行乘积的m次方得到一个m维向量,再将向量标准化得到权重向量
和法:矩阵每列进行标准化(归一化),再将各元素按行求和,再将求和结果标准化
求解最大特征根与CI值
对于不是一致矩阵的矩阵,Saaty等人建议用其最大特征根𝜆𝑚𝑎𝑥对应的归一化特征向量作为权向量W,W={w₁,w₂,w₃,…,wn},AW=λW。
公式为:
4.一致性检验:
检查判断矩阵的逻辑一致性。由于人工判断可能会存在不一致性,因此需要通过一致性比率(Consistency Ratio,CR)的计算来确定判断矩阵是否可以接受。
用一致性指标 CI 来检验判断的一致性指标:
C.I.=0 表示判断矩阵完全一致,C.I.越大,判断矩阵的不一致性程度越严重。为衡量CI 的大小,引入随机一致性指标 RI,Satty 模拟 1000 次得到的随机一致性指标 R.I.取值表:
根据CI、RI值求解CR值,判断其一致性是否通过。
当 C.R.<0.1 时,表明判断矩阵 A 的一致性程度被认为在容许的范围内,此时可用 A 的特征向量开展权向量计算;若 C.R.≥0.1, 则应考虑对判断矩阵 A 进行修正。
5.计算综合权重:
将各个层次的权重进行综合,最终计算出每个决策方案的总权重,帮助决策者选择最优方案。
优缺点:
优点:
能够处理复杂决策问题,尤其是当定性和定量因素混合时。
结构清晰,易于理解和应用。
可以在决策过程中充分考虑专家的经验和主观判断。
缺点:
判断矩阵的构建和权重的计算依赖于决策者的主观判断,可能导致偏差。
当问题过于复杂时,构建判断矩阵可能变得非常繁琐。
层次分析法是一种有效的决策工具,特别适用于多准则决策问题。通过将复杂问题分解为多个层次,并通过逐层分析和比较,AHP为决策者提供了科学的决策支持。
在实际代码中,我们将定义一个层次结构模型,并加载Excel数据。让我们开始吧:
- 加载Excel数据
import pandas as pd import numpy as np # 加载Excel数据 file_path = '你的数据文件.xlsx' # 替换为你的Excel文件路径 data = pd.read_excel(file_path) # 检查数据,确保数据正常加载 print(data.head())
- 定义层次结构模型
在层次分析法中,我们需要确定目标和准则。假设我们关注的目标是“累产气量”,准则是数据中的各个指标。
目标层: 确定哪个因素对累产气影响最大。
准则层: 选择你认为对累产气影响可能最大的指标。
# 选择目标变量和准则变量 target = '...' # 假设这个是目标变量的名称 criteria = [ ... ]
- 构建判断矩阵
这一过程通常依赖于专家意见来评估各个准则的重要性。由于直接从数据中得出准确的判断矩阵比较困难,尤其是当准则较多时,我们可以采用以下几种方式:
专家打分法:邀请相关领域的专家根据经验打分,来确定各准则的重要性。
数据相关性分析:使用统计方法,如相关系数分析,来评估各个准则与目标(累产气量)的相关性。
机器学习方法:使用特征重要性分析(如随机森林或XGBoost中的特征重要性)来评估各准则的相对重要性。
使用统计方法来分析各准则对累产气的影响,可以通过计算每个准则与累产气量之间的相关性系数。常用的相关性分析方法有:
皮尔逊相关系数(Pearson Correlation Coefficient):用于衡量两个连续变量之间的线性关系,适用于正态分布的数据。
斯皮尔曼秩相关系数(Spearman Rank Correlation Coefficient):用于衡量两个变量之间的单调关系,适用于非正态分布或有序数据。
偏相关分析(Partial Correlation):用于衡量某个变量在控制其他变量的影响后的相关性。
# 数据预处理:删除缺失值或进行填补 data = data.dropna(subset=[target] + criteria) # 删除包含缺失值的行 # 计算相关性系数 correlation_matrix = data[criteria + [target]].corr(method='pearson') # 皮尔逊相关系数矩阵 # 提取准则与目标之间的相关性 correlations = correlation_matrix[target].drop(target) # 按相关性绝对值排序 correlations_sorted = correlations.abs().sort_values(ascending=False) # 输出排序后的相关性 print('准则与累产气量的相关性排序:') print(correlations_sorted)
计算判断矩阵
# 提取相关性值和准则名称 correlation_values = correlations_series.values criteria_names = correlations_series.index.tolist() # 构建判断矩阵 n = len(correlation_values) judgment_matrix = np.ones((n, n)) # 填充判断矩阵 for i in range(n): for j in range(n): if correlation_values[j] != 0: judgment_matrix[i, j] = correlation_values[i] / correlation_values[j] else: judgment_matrix[i, j] = 1 # 打印判断矩阵 print("\n判断矩阵:") print(judgment_matrix)
- 计算权重
根据判断矩阵,通过特征向量法或其他方法计算每个准则的权重。权重反映了每个准则对累产气影响的相对重要性。
# 计算判断矩阵的归一化矩阵 normalized_matrix = judgment_matrix / judgment_matrix.sum(axis=0) # 计算权重向量(每行的平均值) weights = normalized_matrix.mean(axis=1) # 打印权重向量 print("\n权重向量:") print(weights)
- 一致性检验
层次分析法要求判断矩阵的一致性,否则结果可能不可靠。需要计算一致性比率(CR):
CR = CI / RI
CI 是一致性指标,CI = (λ_max – n) / (n – 1)
λ_max 是判断矩阵的最大特征值,n 是矩阵的阶数
RI 是随机一致性指标,可以查表获得
如果CR < 0.1,矩阵具有可接受的一致性。
# 计算最大特征值 eigenvalues, _ = np.linalg.eig(judgment_matrix) lambda_max = np.max(eigenvalues.real) # 一致性指标 CI CI = (lambda_max - n) / (n - 1) # 随机一致性指标 RI RI_dict = {
1: 0, 2: 0, 3: 0.58, 4: 0.9, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45, 10: 1.49} RI = RI_dict.get(n, 1.49) # 默认使用 10 的 RI # 计算一致性比率 CR CR = CI / RI # 打印一致性检验结果 print("\n一致性指标 CI:", CI) print("随机一致性指标 RI:", RI) print("一致性比率 CR:", CR) # 检查一致性 if CR < 0.1: print("判断矩阵的一致性可以接受") else: print("判断矩阵的一致性不可以接受,请检查数据")
- 计算综合得分并排序
将每个方案(样本点)的各项指标值乘以相应的权重,求和得到综合得分。然后按综合得分对方案排序,以判断哪个因素对累产气的影响最大。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/116140.html