熵权法,物理学名词,按照信息论基本原理的解释,信息是系统有序程度的一个度量,熵是系统无序程度的一个度量;根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。
熵权法的基本原理
熵权法是一种客观赋值方法。在具体使用的过程中,熵权法根据各指标的变异程度,利用信息熵计算出各指标的熵权,再通过熵权对各指标的权重进行修正,从而得到较为客观的指标权重。
一般来说,若某个指标的信息熵指标权重确定方法之熵权法越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大。
相反,若某个指标的信息熵指标权重确定方法之熵权法越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。
对于任一事件(X),若已知相关信息量(I)越大,该事件的发生概率(P)也更加明确。由于信息量的增加与减少主要呈指数级趋势,因此可定义如下关系式:
I(X)=-k\ln(p(X))
用x_i来表示事件X的可能情况,由此可以定义事件X的信息熵为H(X):
H(X)=\sum^n_{i=1}(P(x_i)I(x_i))=-k\sum^n_{i=1}[P(x_i)\ln(P(x_i))]
当P(x_i)=\frac{1}{n}时,H(X)取最大值k\ln(n)。
熵权法赋权步骤
标准化指标值
假设给定了指标矩阵X:
X= \left[ \begin{aligned} &x_{11}\quad x_{12}\quad .....\quad x_{1m}\\ &x_{21}\quad x_{22}\quad .....\quad x_{2m}\\ &.....\quad .....\quad .....\quad .....\\ &x_{n1}\quad x_{n2}\quad .....\quad x_{nm}\\ \end{aligned}\right]
将指标值正向化:
正向指标:x_{ij}=x_{ij}\\ 负向指标:x_{ij}=\max x_{ij}-x_{ij}\\ 适度指标:设最优点为a,x_{ij}=1-\frac{|x_{ij}-a|}{\max(|x_{ij}-a|)}
将指标值归一化(min-max标准化):
z_{ij}=\frac{x_{ij}-\min\{x_j\}}{\max\{x_j\}-\min\{x_j\}}+0.001\\
建立概率矩阵
根据以下公式建立概率矩阵P(说偏离度矩阵可能更加合适)。
p_{ij}=\frac{z_{ij}}{\sum^n_{i=1}z_{ij}}
计算熵权
首先根据以下公式计算标准信息熵:
-\frac{1}{\ln(n)}\sum^n_{i=1}(p_{ij}\ln(p_{ij}))
再根据下述公式计算信息效用值:
d_j=1-e_j
最后将信息效用值归一化,即可获得每个指标的熵权:
W_j=\frac{d_j}{\sum^m_{j=1}d_j}
熵权法赋权的Python实现
可以使用Entropy类来完成,传入参数x为数据矩阵
import numpy as np
class Entropy:
@staticmethod
def normalizeMatrix(matrix:np.ndarray,positive=True):
z=np.copy(matrix)
min_z=np.min(z,axis=0)
max_z=np.max(z,axis=0)
if positive==True:
z=(z-min_z)/(max_z-min_z)+0.001
else:
z=(max_z-z)/(max_z-min_z)+0.001
return z
def __init__(self,x:np.ndarray):
self.x=x # 数据矩阵
self.n,self.m=self.x.shape # 个体数,指标数
self.z=self.normalizeMatrix(self.x) # 标准化矩阵
self.p=self.z/np.sum(self.z,axis=0) # 偏离度矩阵
self.e=-np.sum(self.p*np.log(self.p),axis=0)/np.log(self.n) # 标准信息熵
self.d=1-self.e # 信息效用值
self.w=self.d/sum(self.d) # 熵权
import numpy as np
class Entropy:
@staticmethod
def normalizeMatrix(matrix:np.ndarray,positive=True):
z=np.copy(matrix)
min_z=np.min(z,axis=0)
max_z=np.max(z,axis=0)
if positive==True:
z=(z-min_z)/(max_z-min_z)+0.001
else:
z=(max_z-z)/(max_z-min_z)+0.001
return z
def __init__(self,x:np.ndarray):
self.x=x # 数据矩阵
self.n,self.m=self.x.shape # 个体数,指标数
self.z=self.normalizeMatrix(self.x) # 标准化矩阵
self.p=self.z/np.sum(self.z,axis=0) # 偏离度矩阵
self.e=-np.sum(self.p*np.log(self.p),axis=0)/np.log(self.n) # 标准信息熵
self.d=1-self.e # 信息效用值
self.w=self.d/sum(self.d) # 熵权
self.s=np.sum(self.x*self.w,axis=1) # 加权得分
关于熵权法的说明
补充
熵权法是一种通过对已知数据的处理,从而获得影响因子权重的方法,其相比于层次分析法更加的客观,但是仍有不足。
例如对于保研这个评价指标,挂科是一个影响极大的因子,成绩是一个影响稍弱的因子,但是大家挂科数量均为0。而这里我们显然不能说挂不挂科没有影响。
由此可见,熵权法更加适用于主观下影响因素差不多大的,或者没有一锤定音的影响因子存在的场合。
但是在指标评价类题中的排序方面,基本都可以使用。
推广
由于AHP法过于依赖专家经验,熵权法又只从实测数据出发,因此可通过最小二乘法对上述两种方法求得的权值进行优化拟合,形成一种主客观结合的科学评价方法。