背景

在进行一些综合评估类项目时,需要给一些指标确定一个合理的权重,用来计算综合得分,这种综合评估类项目在实际的业务中有很多应用,比如:学生奖学金评定方法、广告效果综合评估、电视节目满意度综合评估、用户满意度综合评估等。计算权重的方法比较多,下面主要介绍利用熵值法来确定确定。

一些名词解释

  • 个案
    一个个案,一条记录,也就是一个样本,在矩阵里面就是一行数据,不同地方叫法不一样
  • 属性
    属性就是样本所拥有的特性,也就是特征,在矩阵里面就是一列数据

熵值法概念

熵值法原理: 熵的概念源于热力学,是对系统状态不确定性的一种度量。在信息论中,信息是系统有序程度的一种度量。而熵是系统无序程度的一种度量,两者绝对值相等,但符号相反。根据此性质,可以利用评价中各方案的固有信息,通过熵值法得到各个指标的信息熵,信息熵越小,信息的无序度越低,其信息的效用值越大,指标的权重越大

熵是不确定性的度量,如果用PiP_{i}Pi​表示第iii个信息的不确定度(也就是出现的概率),则整个信息(设有nnn个)的不确定度量如下所示:
S=−K∑i=1nPilnPiS=-K\sum_{i=1}^{n}P_{i}lnP_{i}S=−Ki=1∑n​Pi​lnPi​
这就是熵,其中KKK为正常数,当各个信息发生的概率相等时,即Pi=1nP_{i}=\frac{1}{n}Pi​=n1​,SSS取值最大,此时熵最大,也就是信息无序度最大,各个信息都发生可能性一样

熵值法步骤

    1. 可利用信息熵的概念确定权重,假设多属性决策矩阵如下:
      M=A1A2⋮An[x11x12⋯x1mx21x22⋯x2m⋮⋮⋱⋮xn1xn2⋯xnm]M= \begin{matrix} A_{1} \\ A_{2} \\ \vdots \\ A_{n} \end{matrix} \left[ \begin{matrix} x_{11} & x_{12} & \cdots & x_{1m}\\ x_{21} & x_{22} & \cdots & x_{2m}\\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{nm} \end{matrix}\right] M=A1​A2​⋮An​​⎣⎢⎢⎢⎡​x11​x21​⋮xn1​​x12​x22​⋮xn2​​⋯⋯⋱⋯​x1m​x2m​⋮xnm​​⎦⎥⎥⎥⎤​
      则用Pij=xij∑i=1nxijP_{ij}=\frac{x_{ij}}{\sum_{i=1}^{n}x_{ij}}Pij​=∑i=1n​xij​xij​​ 表示第jjj个属性下第iii个方案AiA_{i}Ai​的贡献度
    1. 可以用EjE_jEj​来表示所有方案对属性XjX_jXj​的总贡献度:
      Ej=−K∑i=1nPijlnPijE_j=-K \sum_{i=1}^{n}P_{ij}lnP_{ij}Ej​=−Ki=1∑n​Pij​lnPij​ 其中,常数K=1ln(n)K=\frac{1}{ln(n)}K=ln(n)1​,这样,就能保证0=<Ej<=10=<E_j<=10=<Ej​<=1,即EjE_jEj​最大 1
      由式中可以看出,当某个属性各个方案(样本)的贡献度趋于一致时,EjE_jEj​趋于1

      那么各个方案(样本)的贡献度全相等时,就应该不考虑该属性在决策中的作用,也就是该属性的权重应该为0

    1. 这样可以看出属性的权重系数大小由各方案差异大小来决定,为此可定义djd_jdj​为第jjj属性的各方案贡献度的一致性程度
      dj=1−Ejd_j=1-E_jdj​=1−Ej​
    1. 进行归一化后,各属性权重如下:
      Wj=dj∑j=1mdjW_j=\frac{d_j}{\sum_{j=1}^{m}d_j}Wj​=∑j=1m​dj​dj​​当dj=0d_j=0dj​=0时,第jjj属性可以剔除,其权重等于0
    1. 如果决策者事先已有一些经验的主观估计权重λj\lambda_jλj​,则可借助上述的WjW_jWj​来对λj\lambda_jλj​进行修正
      Wj∗=λjWj∑j=1mλjWjW_{j}^{*}=\frac{\lambda_j W_j}{\sum_{j=1}^{m}\lambda_{j} W_{j}}Wj∗​=∑j=1m​λj​Wj​λj​Wj​​

熵值法最大的特点是直接利用决策矩阵所给出的信息计算权重,而没有引入决策者的主观判断,完全是依靠数据来决定

案例

购买汽车的一个决策矩阵,给出了四个方案供我们进行选择,每个方案中均有相同的六个属性,我们需要利用熵值法求出各属性的权重

车型 油耗 功率 费用 安全性 维护性 操作性
本田 5 1.4 6 3 5 7
奥迪 9 2 30 7 5 9
桑塔纳 8 1.8 11 5 7 5
别克 12 2.5 18 7 5 5
计算步骤
    1. 求第jjj个属性下第iii个方案AiA_iAi​的贡献度,公式为:
      Pij=xij∑i=1nxijP_{ij}=\frac{x_{ij}}{\sum_{i=1}^{ n}x_{ij}}Pij​=∑i=1n​xij​xij​​在excel中的话,先求出各列的和,然后用每行的数值比上列和,形成新的矩阵
车型 油耗 功率 费用 安全性 维护性 操作性
本田 5 1.4 6 3 5 7
奥迪 9 2 30 7 5 9
桑塔纳 8 1.8 11 5 7 5
别克 12 2.5 18 7 5 5
总计 34 7.7 65 22 22 26

PPP矩阵:

车型 油耗 功率 费用 安全性 维护性 操作性
本田 5/34 1.4/7.7 6/65 3/22 5/22 7/26
奥迪 9/34 2/7.7 30/65 7/22 5/22 9/26
桑塔纳 8/34 1.8/7.7 11/65 5/22 7/22 5/26
别克 12/34 2.5/7.7 18/65 7/22 5/22 5/26
    1. 求出所有方案对属性 XjX_{j}Xj​ 的贡献总量,公式为:

Ej=−K∑i=1nPijlnPijE_j=-K\sum_{i=1}^{n}P_{ij}lnP_{ij}Ej​=−Ki=1∑n​Pij​lnPij​

在excel操作中,将刚才生成的矩阵每个元素变成每个元素与该元素自然对数的乘积

只列出油耗计算过程,其他属性同理

车型 油耗
本田 5/34 * ln(5/34)
奥迪 9/34 * ln(9/34)
桑塔纳 8/34 * ln(8/34)
别克 12/34 * ln(12/34)
总计 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)

求出常数kkk,kkk为1/ln(方案数)1/ln(方案数)1/ln(方案数),本例中有 4 个方案,所以求得kkk为1/ln(4)1/ln(4)1/ln(4),再求kkk与新矩阵每一列和的乘积,这样获得的 6 个积为所有方案对属性xjx_jxj​的贡献度

车型 油耗
本田 5/34 * ln(5/34)
奥迪 9/34 * ln(9/34)
桑塔纳 8/34 * ln(8/34)
别克 12/34 * ln(12/34)
总计 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)
EjE_jEj​ 1/ln(4) * [ 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]

至此所有的EjE_jEj​就求出来了

    1. djd_jdj​为第jjj属性下各方案贡献度的一致性程度,公式为:
      dj=1−Ejd_j=1-E_jdj​=1−Ej​利用上面求得的EjE_jEj​,可以得到djd_jdj​
车型 油耗
本田 5/34 * ln(5/34)
奥迪 9/34 * ln(9/34)
桑塔纳 8/34 * ln(8/34)
别克 12/34 * ln(12/34)
总计 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34)
EjE_jEj​ 1/ln(4) * [ 5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]
djd_jdj​ 1 - 1/ln(4) * [5/34* ln(5/34) + 9/34* ln(9/34) + 8/34* ln(8/34) + 12/34* ln(12/34) ]
    1. 利用下面公式进行归一化后,即可求得各属性的权重:

Wj=dj∑j=1mdjW_j=\frac{d_j}{\sum_{j=1}^{m}d_j}Wj​=∑j=1m​dj​dj​​

经过计算后各属性的权重为:

车型 油耗 功率 费用 安全性 维护性 操作性
权重 0.14 0.07 0.49 0.16 0.04 0.10

所以在购买汽车时,据所提供信息,利用熵值法计算得出的权重为油耗占 14%,功率占 7%,费用占 49%,安全性占 16%,维护性占 4%,操作性占 10%。故我们在进行购买决策时,更多是考虑车型的价格和安全性等重要因素,这是从权重角度考虑的。

利用Python实现熵值法:

代码如下:(可左右滑动查看)

import pandas as pd
import numpy as np
import math
from numpy import array# 定义熵值法函数  熵值法计算变量的权重
def cal_weight(df):#求krows = df.index.size  # 行cols = df.columns.size  # 列k = 1.0 / math.log(rows)# 矩阵计算、信息熵x = array(df)lnf = [[None] * cols for i in range(rows)]lnf = array(lnf)for i in range(0, rows):for j in range(0, cols):if x[i][j] == 0:lnfij = 0.0else:p = x[i][j] / np.sum(x, axis=0)[j]lnfij = math.log(p) * p * (-k)lnf[i][j] = lnfijlnf = pd.DataFrame(lnf)E = lnf# 计算一致性程度d = 1 - E.sum(axis=0)# 计算各指标的权重w = [[None] * 1 for i in range(cols)]for j in range(0, cols):wj = d[j] / sum(d)w[j] = wjw = pd.DataFrame(w)w.index = df.columnsw.columns = ['权重']return w

以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号,不定期分享纯干货

利用熵值法确定指标权重---原理及Python实现相关推荐

  1. df满足条件的值修改_如何用python实现熵值法求指标权重(实例)

    权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...

  2. 利用熵权法确定指标权重

    利用熵权法确定指标权重 1. 熵权法的基本原理 熵权法的基本思路是根据指标变异性的大小来确定客观权重. 一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起 ...

  3. python中是什么意思权重_如何用python实现熵值法求指标权重(实例)

    权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...

  4. Python小案例(六)通过熵权法计算指标权重

    Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...

  5. 各省三废排放量和利用熵值法计算环境规制综合指数(1997-2019年)

    一.数据介绍 数据名称:[数据+过程]各省三废排放量和利用熵值法计算环境规制综合指数(1997-2019年) 数据年份:1997-2019年 数据说明:环境规制综合指数是由工业废水排放量.工业 SO2 ...

  6. 评价方法-熵权法确定指标权重

    评价方法根据确定权重的方法,大体上可分为主观赋权,客观赋权:主观赋权依赖于"专家"的权重或较多独立个体的评判偏好,如层次分析法,功效系数法,模糊综合评价法,综合指数法:客观赋权法根 ...

  7. 【综合评价方法 熵权法】指标权重确定方法之熵权法

    参考链接:http://blog.sina.com.cn/s/blog_710e9b550101aqnv.html 实战例子: 某医院为了提高自身的护理水平,对拥有的11个科室进行了考核,考核标准包括 ...

  8. C#实现利用熵值法确定权重

    这里使用百度上的一个例子来演示,这个例子在百度上是利用Excel做的,这里用C#实现.该例子的链接:百度实例链接 代码如下: using System; using System.Collection ...

  9. 如何使用熵值法分组计算核心指标权重,并为项目打分

    计算核心指标权重是一种常见的分析方法,常见的计算权重的方法的原理及使用条件可参考https://baijiahao.baidu.com/s?id=1661019965038118642&wfr ...

最新文章

  1. RPC是什么?为什么要学习RPC?
  2. 其他算法-两大随机采样方法简介
  3. 机器学习知识点(三十六)分类器性能度量指标f1-score
  4. php 删除数组的空元素,php删除数组空元素的方法_后端开发
  5. mybatis dao实现 || 接口代理方式实现
  6. ignite mysql_redis、ignite、mysql memory 内存数据库性能测试对比
  7. python自带网页解析器_python 之网页解析器
  8. Javascript中最常用的经典技巧
  9. python新手小项目实例-有没有简单一点的 Python 小例子或小项目?
  10. php发送sql,php学习笔记(二)php与mysql连接与用php发送SQL查询
  11. 【前端】javascript判断undefined、null、NaN;字符串包含等
  12. C语言自学之路八(数组(重点)详解)
  13. 抓包中情局特工后,是时候聊聊勒索黑客了!
  14. 读书笔记 : 人类简史
  15. phpstrom中的常用快捷键
  16. 新股发行制度五年改革历程
  17. 看看别人家的神仙公司
  18. 描写计算机硬件的英语作文,介绍关于电脑的英语作文
  19. 安卓手机里的短信删除了如何恢复
  20. SpringBoot集成Liquibase

热门文章

  1. Amanero combo 384 升级固件支持原生 DSD 解码
  2. seo提交工具_SEO必备的八大辅助工具
  3. ssh命令行远程连接服务器跑程序新手教程
  4. Java通过ssh连接服务器
  5. 浅析基于SQL Server PDW大数据解决方案
  6. 【你问我答】DDD(领域驱动设计)实践中遇到问题了?尽管问,我们负责解答!...
  7. 你不知道的JavaScript上卷-作用域和闭包
  8. Ubuntu 16.04 + Nvidia 显卡驱动 + Cuda 8.0 (问题总结 + 解决方案)
  9. Vue中使用Fullcalendar日历开发日程安排
  10. 嵌入式外包,LUA语言实现跟服务器通信