利用熵值法确定指标权重---原理及Python实现
背景
在进行一些综合评估类项目时,需要给一些指标确定一个合理的权重,用来计算综合得分,这种综合评估类项目在实际的业务中有很多应用,比如:学生奖学金评定方法、广告效果综合评估、电视节目满意度综合评估、用户满意度综合评估等。计算权重的方法比较多,下面主要介绍利用熵值法来确定确定。
一些名词解释
- 个案
一个个案,一条记录,也就是一个样本,在矩阵里面就是一行数据,不同地方叫法不一样 - 属性
属性就是样本所拥有的特性,也就是特征,在矩阵里面就是一列数据
熵值法概念
熵值法原理: 熵的概念源于热力学,是对系统状态不确定性的一种度量。在信息论中,信息是系统有序程度的一种度量。而熵是系统无序程度的一种度量,两者绝对值相等,但符号相反。根据此性质,可以利用评价中各方案的固有信息,通过熵值法得到各个指标的信息熵,信息熵越小,信息的无序度越低,其信息的效用值越大,指标的权重越大。
熵是不确定性的度量,如果用PiP_{i}Pi表示第iii个信息的不确定度(也就是出现的概率),则整个信息(设有nnn个)的不确定度量如下所示:
S=−K∑i=1nPilnPiS=-K\sum_{i=1}^{n}P_{i}lnP_{i}S=−Ki=1∑nPilnPi
这就是熵,其中KKK为正常数,当各个信息发生的概率相等时,即Pi=1nP_{i}=\frac{1}{n}Pi=n1,SSS取值最大,此时熵最大,也就是信息无序度最大,各个信息都发生可能性一样
熵值法步骤
- 可利用信息熵的概念确定权重,假设多属性决策矩阵如下:
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=A1A2⋮An⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
则用Pij=xij∑i=1nxijP_{ij}=\frac{x_{ij}}{\sum_{i=1}^{n}x_{ij}}Pij=∑i=1nxijxij 表示第jjj个属性下第iii个方案AiA_{i}Ai的贡献度
- 可利用信息熵的概念确定权重,假设多属性决策矩阵如下:
- 可以用EjE_jEj来表示所有方案对属性XjX_jXj的总贡献度:
Ej=−K∑i=1nPijlnPijE_j=-K \sum_{i=1}^{n}P_{ij}lnP_{ij}Ej=−Ki=1∑nPijlnPij 其中,常数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
- 可以用EjE_jEj来表示所有方案对属性XjX_jXj的总贡献度:
- 这样可以看出属性的权重系数大小由各方案差异大小来决定,为此可定义djd_jdj为第jjj属性的各方案贡献度的一致性程度
dj=1−Ejd_j=1-E_jdj=1−Ej
- 这样可以看出属性的权重系数大小由各方案差异大小来决定,为此可定义djd_jdj为第jjj属性的各方案贡献度的一致性程度
- 进行归一化后,各属性权重如下:
Wj=dj∑j=1mdjW_j=\frac{d_j}{\sum_{j=1}^{m}d_j}Wj=∑j=1mdjdj当dj=0d_j=0dj=0时,第jjj属性可以剔除,其权重等于0
- 进行归一化后,各属性权重如下:
- 如果决策者事先已有一些经验的主观估计权重λ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λjWjλjWj
- 如果决策者事先已有一些经验的主观估计权重λj\lambda_jλj,则可借助上述的WjW_jWj来对λj\lambda_jλj进行修正
熵值法最大的特点是直接利用决策矩阵所给出的信息计算权重,而没有引入决策者的主观判断,完全是依靠数据来决定
案例
购买汽车的一个决策矩阵,给出了四个方案供我们进行选择,每个方案中均有相同的六个属性,我们需要利用熵值法求出各属性的权重
车型 | 油耗 | 功率 | 费用 | 安全性 | 维护性 | 操作性 |
---|---|---|---|---|---|---|
本田 | 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 |
计算步骤
- 求第jjj个属性下第iii个方案AiA_iAi的贡献度,公式为:
Pij=xij∑i=1nxijP_{ij}=\frac{x_{ij}}{\sum_{i=1}^{ n}x_{ij}}Pij=∑i=1nxijxij在excel中的话,先求出各列的和,然后用每行的数值比上列和,形成新的矩阵
- 求第jjj个属性下第iii个方案AiA_iAi的贡献度,公式为:
车型 | 油耗 | 功率 | 费用 | 安全性 | 维护性 | 操作性 |
---|---|---|---|---|---|---|
本田 | 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 |
- 求出所有方案对属性 XjX_{j}Xj 的贡献总量,公式为:
Ej=−K∑i=1nPijlnPijE_j=-K\sum_{i=1}^{n}P_{ij}lnP_{ij}Ej=−Ki=1∑nPijlnPij
在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就求出来了
- djd_jdj为第jjj属性下各方案贡献度的一致性程度,公式为:
dj=1−Ejd_j=1-E_jdj=1−Ej利用上面求得的EjE_jEj,可以得到djd_jdj
- djd_jdj为第jjj属性下各方案贡献度的一致性程度,公式为:
车型 | 油耗 |
---|---|
本田 | 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) ] |
- 利用下面公式进行归一化后,即可求得各属性的权重:
Wj=dj∑j=1mdjW_j=\frac{d_j}{\sum_{j=1}^{m}d_j}Wj=∑j=1mdjdj
经过计算后各属性的权重为:
车型 | 油耗 | 功率 | 费用 | 安全性 | 维护性 | 操作性 |
---|---|---|---|---|---|---|
权重 | 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实现相关推荐
- df满足条件的值修改_如何用python实现熵值法求指标权重(实例)
权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...
- 利用熵权法确定指标权重
利用熵权法确定指标权重 1. 熵权法的基本原理 熵权法的基本思路是根据指标变异性的大小来确定客观权重. 一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起 ...
- python中是什么意思权重_如何用python实现熵值法求指标权重(实例)
权重是指某一因素或指标相对于某一事物的重要程度,其不同于一般的比重,体现的不仅仅是某一因素或指标所占的百分比,强调的是因素或指标的相对重要程度,倾向于贡献度或重要性.而在我们的数据分析过程中,倘若各个 ...
- Python小案例(六)通过熵权法计算指标权重
Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...
- 各省三废排放量和利用熵值法计算环境规制综合指数(1997-2019年)
一.数据介绍 数据名称:[数据+过程]各省三废排放量和利用熵值法计算环境规制综合指数(1997-2019年) 数据年份:1997-2019年 数据说明:环境规制综合指数是由工业废水排放量.工业 SO2 ...
- 评价方法-熵权法确定指标权重
评价方法根据确定权重的方法,大体上可分为主观赋权,客观赋权:主观赋权依赖于"专家"的权重或较多独立个体的评判偏好,如层次分析法,功效系数法,模糊综合评价法,综合指数法:客观赋权法根 ...
- 【综合评价方法 熵权法】指标权重确定方法之熵权法
参考链接:http://blog.sina.com.cn/s/blog_710e9b550101aqnv.html 实战例子: 某医院为了提高自身的护理水平,对拥有的11个科室进行了考核,考核标准包括 ...
- C#实现利用熵值法确定权重
这里使用百度上的一个例子来演示,这个例子在百度上是利用Excel做的,这里用C#实现.该例子的链接:百度实例链接 代码如下: using System; using System.Collection ...
- 如何使用熵值法分组计算核心指标权重,并为项目打分
计算核心指标权重是一种常见的分析方法,常见的计算权重的方法的原理及使用条件可参考https://baijiahao.baidu.com/s?id=1661019965038118642&wfr ...
最新文章
- RPC是什么?为什么要学习RPC?
- 其他算法-两大随机采样方法简介
- 机器学习知识点(三十六)分类器性能度量指标f1-score
- php 删除数组的空元素,php删除数组空元素的方法_后端开发
- mybatis dao实现 || 接口代理方式实现
- ignite mysql_redis、ignite、mysql memory 内存数据库性能测试对比
- python自带网页解析器_python 之网页解析器
- Javascript中最常用的经典技巧
- python新手小项目实例-有没有简单一点的 Python 小例子或小项目?
- php发送sql,php学习笔记(二)php与mysql连接与用php发送SQL查询
- 【前端】javascript判断undefined、null、NaN;字符串包含等
- C语言自学之路八(数组(重点)详解)
- 抓包中情局特工后,是时候聊聊勒索黑客了!
- 读书笔记 : 人类简史
- phpstrom中的常用快捷键
- 新股发行制度五年改革历程
- 看看别人家的神仙公司
- 描写计算机硬件的英语作文,介绍关于电脑的英语作文
- 安卓手机里的短信删除了如何恢复
- SpringBoot集成Liquibase
热门文章
- Amanero combo 384 升级固件支持原生 DSD 解码
- seo提交工具_SEO必备的八大辅助工具
- ssh命令行远程连接服务器跑程序新手教程
- Java通过ssh连接服务器
- 浅析基于SQL Server PDW大数据解决方案
- 【你问我答】DDD(领域驱动设计)实践中遇到问题了?尽管问,我们负责解答!...
- 你不知道的JavaScript上卷-作用域和闭包
- Ubuntu 16.04 + Nvidia 显卡驱动 + Cuda 8.0 (问题总结 + 解决方案)
- Vue中使用Fullcalendar日历开发日程安排
- 嵌入式外包,LUA语言实现跟服务器通信