原文:綜合評價之熵權法
導讀:實際工作生活中經常需要進行綜合評價,如根據各科考試成績對學生排名、根據用戶薪資消費能力等維度對用戶信用進行打分、各種方案中選擇最優方案等等。好的綜合評價方法可以幫我們進行目標的橫向比較或自身變化趨勢分析,已有的綜合評價方法有很多,今天來介紹其中的熵權法。
信息熵
信息熵是不確定性的一個度量,反映信息量的多少。信息量多少與隨機事件發生概率有關,概率越大,不確定性越小,包含信息就越少,所以隨機事件的信息量隨著其發生概率遞減。信息熵計算公式如下:
其中,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個維度的權重如下:
評分結果示例如下:
后臺回復“信息熵”得到完整數據及代碼
往期推薦: