python-變異係數法實現
阿新 • 來源:網路 • 發佈:2021-02-18
目前關於屬性指標確定權重的方法有三類:主觀賦權法、客觀賦權法、組合賦權法。
常用的主觀賦權法有專家調查法(Delphi法)、層次分析法(AHP)、二項係數法、環比評分法等。常用的主觀賦權法有變異係數法、熵值法、離差及均方差法、多目標規劃法等。組合賦權法則綜合客觀賦權和主觀賦權的優缺點,基於資料之間的規律和專家經驗對決策指標進行賦權。
由於工作的需要,會經常用到變異係數法和熵權法,這裡先實現變異係數法。
變異係數法:
變異係數法是直接利用各項指標所包含的資訊,通過計算得到指標的權重。在評價指標體系中,指標取值差異越大的指標,也就是越難以實現的指標,這樣的指標更能反映被評價單位的差距。
但是在使用變異係數法的時候要注意均值是否過小,因為當均值過小時,變異係數會過大,權重就會很大,這個時候就要注意檢查一下資料。

其中STD是指標標準差,MEAN是指標的均值
Python程式碼:
################### 計算變異係數權重 ###########################
def CvWeight(self, data,collist):
'''
data: dataframe型別資料
collist:需要計算權重的屬性列表
'''
print('計算變異係數法....')
statistic = data[collist].describe() # 描述統計值
cv = statistic.loc['std'] / abs(statistic.loc['mean']) # 計算CV值
cv_sum = cv.sum() # cv總和
print('變異係數總和:' + str(cv_sum))
cv_weight = cv / cv_sum # 計算權重
self.logger.info('%s 的權重是:%s ;' % (collist,[cv_weight[col] for col in collist]))
pass
return cv_weight
pass
