原文:综合评价之熵权法
导读:实际工作生活中经常需要进行综合评价,如根据各科考试成绩对学生排名、根据用户薪资消费能力等维度对用户信用进行打分、各种方案中选择最优方案等等。好的综合评价方法可以帮我们进行目标的横向比较或自身变化趋势分析,已有的综合评价方法有很多,今天来介绍其中的熵权法。
信息熵
信息熵是不确定性的一个度量,反映信息量的多少。信息量多少与随机事件发生概率有关,概率越大,不确定性越小,包含信息就越少,所以随机事件的信息量随着其发生概率递减。信息熵计算公式如下:
其中,xi为随机变量X的取值,p为随机事件xi发生的概率。
熵权法
根据信息熵特性,可以用来衡量一个指标的离散程度,指标离散程度越大,该指标对综合评价对影响越大,权重越大。熵权法是一种依赖于数据本身离散性的客观赋值法,用于结合多种指标对样本进行综合打分,实现样本间比较。
实现步骤
假定有n条样本,m个维度,用如下方式表示每个随机变量的取值:
step 1 : 标准化处理
为避免量纲造成的影响,首先要对指标进行标准化处理。根据指标含义,可将指标分为正向指标(取值越大越好)和逆向指标(取值越小越好),分别通过如下方法进行标准化:
step 2 : 计算每个维度的熵
其中,
step 3 : 计算冗余度(差异)
step 4 : 计算权重
step 5 : 计算综合评分
R语言实现
选取有4个变量的2036条数据进行结果测试,输出权重及评分值。
#读入数据
data<-read.csv(file.choose(),header=F)
#step1:标准化处理
#逆向指标标准化
function1<-function(x){
for(iin1:length(x)){
x[i]=(max(x)-x[i])/(max(x)-min(x))
}
return(x)
}
#正向指标标准化
function2<-function(x){
for(iin1:length(x)){
x[i]=(x[i]-min(x))/(max(x)-min(x))
}
return(x)
}
#假定指标1,2为逆向指标,指标3,4为正向指标
y1<-apply(data[,c(1,2)],2,function1)
y2<-apply(data[,c(3,4)],2,function2)
y<-cbind(y1,y2)
#step2:计算每个维度的熵
function3<-function(x){
for(iin1:length(x)){
x[i]=x[i]/sum(x)
}
return(x)
}
#矩阵p
p<-apply(y,2,function3)
function4<-function(x){
n<-c(x)
for(iin1:length(x)){
if(x[i]==0){n[i]=0}
else{n[i]=n[i]*log(n[i])
}
return(n)
}
}
function5<-function(x){
n<-c(x)
for(iin1:length(x)){
n[i]=-sum(x)/log(length(x))
}
return(n)
}
e1<-apply(p,2,function4)
e2<-apply(e1,2,function5)
e<-e2[1,]
#step3:计算冗余度(差异)
d<-1-e
#step4:计算权重
w<-d/sum(d)
#step5:计算综合评分
s=as.vector( 100*as.matrix(y) %*% w)
根据计算,得到4个维度的权重如下:
评分结果示例如下:
后台回复“信息熵”得到完整数据及代码
往期推荐: