前言
博主参与八次数学建模大赛,其实数学建模和大数据分析有很多相似之处,可以说差不多是共通的。经历了这么多次比赛个人总结一些建模必备的数据分析方法是必须要完全掌握。本篇博客的愿景是希望我或者读者通过阅读这篇博客能够学会熵权法方法并能实际运用,而且能够记录到你的思想之中。当然个人不是数学专业对一些专业性的知识可能不是很了解,希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。
一、熵权法介绍
在确定各项评价指标权重的算法中,熵权法在很多评价法作为计算指标权重的一只核心基础算法,如秩和比综合评价法RSR或是优劣解距离法TOPSIS。易于理解的话来讲,熵权法就是看该指标数据是否相对集中或是相对离散,要是基本上都差不多的数据,那么这些数据熵就很小,比较集中。说明在这个指标上面体现不出样本的差异性,导致这个指标并不是那么重要。所以该指标权重就小,相反数据差距很大,权重就大。
熵值法根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重)就越大,如果某项指标的值全部相等,则该指标在综合评价中不起作用。因此,可利用信息熵这个工具,计算出各个指标的权重,为多指标综合评价提供依据。
二、使用步骤
1.数据预处理
拿到第一手数据后肯定不能直接使用的,需要进行数据预处理才能更好建模。
想对数据预处理方法了解更清楚的可以去看这篇:数据预处理归一化详细解释
这里我们使用数据处理方法之一的min-max标准化:
对于指标来说,一般分有正向指标和负向指标之分:
正向指标:指标值越大评价越好的指标,如脱单率,脱贫率。
负向指标:指标值越大评价越差的指标,如死亡率,失业率。
2.计算指标信息熵
(1)计算第j项指标下第i个样本值占比重:
(2) 计算各指标的信息熵:
第j项指标的数据差异越大,熵值越小;反之,熵值越大。
(3)计算信息效用值d
(4)计算j指标权重
3.相关代码
import numpy as np import pandas as pd data = pd.read_csv(r"C:\Users\指标.csv",sep=',') data.info() data #标准化数据 data_test1=data.iloc[:,1:5] data_test1 data_test2 = (data_test1 - data_test1.min())/(data_test1.max() -data_test1.min()) data_test2 m,n=data_test2.shape #将dataframe格式转化为matrix格式 data_test3=data_test2.values data_test3 k=1/np.log(m) yij=data.sum(axis=0) pij=data/yij #第二步,计算pij test=pij*np.log(pij) test=np.nan_to_num(test) #计算每种指标的信息熵 ej=-k*(test.sum(axis=0)) #计算每种指标的权重 wi=(1-ej)/np.sum(1-ej)
三、实例运用
这里我们选择27个公司的数据开发投资数据:
四、总结
优点
- 能深刻反映出指标的区分能力,进而确定权重
- 是一种客观赋权法,相对主管赋权具有较高的可信度和精确度
- 算法简单
缺点
- 不够智能,没有考虑指标与指标之间的影响,如:相关性、层级关系等
- 若无业务经验指导,权重可能失真
- 对样本的依赖性较大,随着建模样本不断变化,权重会发生一定波动
适用范围
当业务经验不会使得权重发生失真,则比较适用于熵权法;反之,若经常发生权重失真的情况,则需要结合专家打分或评判才能较好的发挥熵权法的优势。同时,确定权重前需要确定指标对目标得分的影响方向,对非线性的指标要进行预处理或者剔除。