综合评价模型:层次 - 熵权 - 变异系数 - 博弈组合法 Python 实现
该模型旨在解决单一赋权法(如仅用 AHP 或仅用熵权法)的局限性。通过引入博弈论,将主观权重(层次分析法/AHP)与客观权重(熵权法/变异系数法)进行'谈判',最终得出最优的综合权重。
模型架构解析
本模型融合了定性与定量分析,主要分为四个核心模块:
-
主观赋权 (Subjective) 层次分析法 (AHP) 基于专家经验判断指标的重要性,构建判断矩阵并归一化,得到主观权重 W_sub。特点:考虑了人的认知与偏好。缺点:容易受专家主观臆断影响。
-
客观赋权 (Objective) 熵权 - 变异系数法基于数据本身的离散程度(信息量)来确定权重,得到客观权重 W_obj。特点:数据说话,剔除无效指标。缺点:忽略了指标的实际意义。
-
博弈组合 (Game Theory) 纳什均衡将主客观权重视为两个博弈方。通过迭代计算,寻找双方的平衡点,消除偏差,得到最优组合权重 W_opt。
-
综合评价 (Synthesis) 加权求和利用 W_opt 对标准化后的指标得分进行加权,得出最终的综合评价值。
Python 代码实现
以下代码展示了如何利用 numpy 和 pandas 实现上述逻辑。为了简化演示,我们假设已经完成了 AHP 判断矩阵的构建。
import numpy as np
import pandas as pd
def calculate_ahp_weight(matrix):
""" 计算层次分析法 (AHP) 权重
:param matrix: 判断矩阵 (n x n)
:return: 权重向量
"""
# 1. 计算几何平均列
geo_mean = np.prod(matrix, axis=0) ** (1/len(matrix))
# 2. 归一化得到权重
weights = geo_mean / sum(geo_mean)
return weights
def calculate_entropy_weight(data):
""" 计算熵权法权重
:param data: 标准化后的数据矩阵 (m x n)
:return: 客观权重向量
"""
# 1. 数据平移 (非负化)
data = data - data.min()
# 2. 计算比重
p = data / data.sum(axis=0)
# 3. 计算熵值
e = -np.sum(p * np.log(p + 1e-9), axis=0) / np.log((data))
g = - e
weights = g / (g)
weights
():
w_final = w_sub
_ (iterations):
alpha =
w_new = alpha * w_sub + ( - alpha) * w_obj
np.allclose(w_final, w_new):
w_final = w_new
w_final
np.random.seed()
data = np.random.rand(, ) *
df = pd.DataFrame(data, columns=[, , , ])
ahp_matrix = np.array([
[, , , ],
[/, , , ],
[/, /, , /],
[/, , , ]
])
w_sub = calculate_ahp_weight(ahp_matrix)
data_std = (data - data.()) / (data.() - data.())
w_obj = calculate_entropy_weight(data_std)
()
()
w_comb = game_theory_combination(w_sub, w_obj)
()
()
final_scores = np.dot(data_std, w_comb)
()
(final_scores)

