1. 程式人生 >實用技巧 >其它 >python-變異係數法實現

python-變異係數法實現


技術標籤:Pythonpython資料分析

目前關於屬性指標確定權重的方法有三類:主觀賦權法、客觀賦權法、組合賦權法。

常用的主觀賦權法有專家調查法(Delphi法)、層次分析法(AHP)、二項係數法、環比評分法等。常用的主觀賦權法有變異係數法、熵值法、離差及均方差法、多目標規劃法等。組合賦權法則綜合客觀賦權和主觀賦權的優缺點,基於資料之間的規律和專家經驗對決策指標進行賦權。

由於工作的需要,會經常用到變異係數法和熵權法,這裡先實現變異係數法。

變異係數法:

變異係數法是直接利用各項指標所包含的資訊,通過計算得到指標的權重。在評價指標體系中,指標取值差異越大的指標,也就是越難以實現的指標,這樣的指標更能反映被評價單位的差距。

但是在使用變異係數法的時候要注意均值是否過小,因為當均值過小時,變異係數會過大,權重就會很大,這個時候就要注意檢查一下資料。

python-變異係數法實現

其中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