多指标客观赋权重及熵权法的python实现

多指标客观赋权重及熵权法的python实现

  • 背景
  • 熵权法理论背景及实现步骤
  • 结果预览
  • 完整代码
  • 熵权法优缺点
  • 引入专家权重

背景

手里有一张数据表,里面涵盖了上海市115个板块的交通,商业,教育,医疗,景观周游和生活娱乐共6个指标的得分,现在要根据这些指标给各板块的综合评分,某同事调侃按照高考成绩,把各指标数据加起来求一个总和当作综合得分得了。后来有同事提出用熵权法可以客观赋权重然后按权重求和, 于是有了这篇熵权法的python实现。
多指标客观赋权重及熵权法的python实现_第1张图片

熵权法理论背景及实现步骤

  • 理论知识

熵权法主要用到信息论知识,信息熵是信息论里面一个非常重要的概念,主要用来度量信息的不确定性。如果某个信息源(指标)的不确定性越大,其提供的信息越多,该指标起的作用越大,应该给予其更高的权重,反之,权重更小。

  • 实现步骤

step1 数据标准化
step2 计算第 j j j个指标各分量的占比,计算公式如下
p i j = x i j ∑ i x i j p_{ij}=\frac{x_{ij}}{\sum\limits_{i} x_{ij}} pij=ixijxij
其中 x i j x_{ij} xij 是该指标的第 i i i个分量的值, ∑ i x i j \sum\limits_{i} x_{ij} ixij是该指标的列求和。
step3 计算第 j j j个指标的信息熵值,计算公式如下
e j = − ∑ i p i j l o g 2 p i j e_j=-\sum\limits_{i}p_{ij}log_2p_{ij} ej=ipijlog2pij
step4 计算第 j j j个指标的权重,计算公式如下
w j = 1 − e j ∑ j ( 1 − e j ) w_j=\frac{1-e_j}{\sum\limits_j (1-e_j)} wj=j(1ej)1ej
其中 1 ≤ j ≤ k 1\leq j \leq k 1jk, k k k是指标数, 1 ≤ i ≤ n 1\leq i \leq n 1in, n n n为样本数。

结果预览

多指标客观赋权重及熵权法的python实现_第2张图片

完整代码

有了实现步骤,接下来就是用代码体现出来

# -*- coding: utf-8 -*-
"""
project_name:熵权法赋权重
@author: 帅帅de三叔
Created on Mon Nov  4 11:05:25 2019
"""
import numpy as np #导入数值计算拓展模块
import pandas as pd #导入数据分析模块
from sklearn import preprocessing
data=pd.read_excel(r"D:\Python项目\上海配套\2018\熵权法.xlsx",sheename="Sheet2",index_col="板块名称") #读取数据
zdata=preprocessing.MinMaxScaler().fit_transform(data) #极大极小标准化
def entropy(data): #定义熵函数,返回综合得分
    m,n=np.shape(data) #数据维度
    data[np.where(data==0)]=0.0001 #替换0值
    data=pd.DataFrame(data).values #数据框化后矩阵化
    col_sum=data.sum(axis=0) #求列和
    pij=data/col_sum #占比
    entrop=-np.sum(pij*np.log(pij),axis=0) #信息熵
    w=(1-entrop)/np.sum(1-entrop,axis=0) #权重
    print(w) #观察权重是否合理
    score=np.dot(data,w) #得分
    return score
if __name__=="__main__":
    score=pd.DataFrame(entropy(zdata),index=data.index) #得分
    score.columns=["综合得分"] #给出列名
    result=pd.concat([data,score],axis=1) #沿着列的方向水平延伸合并
    #print(result) #测试
    result.to_excel("output.xlsx") #保存为excel

熵权法优缺点

  • 优点
    客观有理论基础,代码实现比较简单,与标准化各指标后直接加和的排名大抵不差。

  • 缺点
    因其本质是反映了数据变异性,有时候权重高的不一定最重要的,这是可以考虑引进变异系数作为惩罚项来正则目标函数。
    最后得到的权重差异性也较小,比如这里6个指标,得出的权重大多分布在1/6≈0.16左右,这时候可以考虑引入专家权重,作向量乘积算出综合权重从而扩大权重差异化。

引入专家权重

延申阅读 决策树(中篇)

你可能感兴趣的:(数据挖掘)