熵值法
原理
熵值法是一种基于信息熵的客观赋权方法。啥是信息熵呢?简单来说,它是衡量信息不确定性的一个指标。在数据综合评价里,如果某个指标的信息熵越小,那就意味着这个指标在不同样本之间的差异越大,提供的信息量也就越多,在综合评价里的重要性就更高,权重自然也得给它加大;反之,信息熵大,权重就小。
在数据综合评价领域,信息熵的概念有着重要应用。如果某个指标的信息熵越小,意味着该指标在不同样本之间的差异越大。例如,在评估学生成绩时,“考试成绩”这个指标可能在不同学生之间差异较大,信息熵就小,说明这个指标能提供较多区分学生水平的信息,在综合评价中就更为重要,赋予的权重也就应该更大;反之,如果某个指标在不同样本间差异不大,信息熵大,那么它在综合评价中的权重就小。
实现路径
数据标准化:
原始数据通常具有不同的量纲和数量级,这会对评价结果产生干扰。为了消除这些影响,需要对数据进行标准化处理。常用的方法是极差标准化。
- 对于正向指标(指标值越大越好的指标),计算公式为:xij∗=max(xj)−min(xj)xij−min(xj)。其中,xij表示第i个样本的第j个指标值,xij∗表示标准化后的数值。例如,在评估学生成绩时,“考试成绩”是正向指标,通过这个公式可以将不同学生的成绩标准化到[0,1]区间。
- 对于负向指标(指标值越小越好的指标),计算公式为:xij∗=max(xj)−min(xj)max(xj)−xij。
计算比重:
在数据标准化后,需要计算每个样本在各指标下的比重。计算公式为:pij=∑i=1nxij∗xij∗。这里,n是样本数量,pij表示第j项指标下第i个样本的比重。例如,假设有三个学生,在“考试成绩”这一指标下,经过标准化后,他们的成绩分别为0.5、0.6、0.7,那么第一个学生在“考试成绩”指标下的比重就是0.5/(0.5+0.6+0.7)。
计算熵值:
通过比重来计算每个指标的熵值,公式为:ej=−k∑i=1npijln(pij),其中k=ln(n)1。熵值反映了指标的信息不确定性程度。
计算差异系数:
为了更直观地体现各指标在评价中的相对重要性差异,计算差异系数gj=1−ej。差异系数越大,说明该指标在评价中的相对重要性越高。
计算权重:
根据差异系数计算各指标的权重,公式为:wj=∑j=1mgjgj,m是指标数量。wj就是第j项指标的权重。
计算综合得分:
最后,通过权重和标准化后的数据计算每个样本的综合得分,公式为:Si=∑j=1mwjxij∗。
Python 实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import numpy as np
def entropy_weight_method(data): data = (data - data.min(axis = 0)) / (data.max(axis = 0) - data.min(axis = 0)) p = data / data.sum(axis = 0) e = -np.sum(p * np.log(p) / np.log(data.shape[0]), axis = 0) g = 1 - e w = g / g.sum() score = np.dot(data, w) return w, score
data = np.array([[10, 20, 30], [15, 25, 35], [20, 30, 40]])
weights, scores = entropy_weight_method(data) print("权重:", weights) print("综合得分:", scores)
|
优劣势
- 优势:
- 客观公正:熵值法完全基于数据本身的信息来确定权重,避免了人为因素的主观干扰,使得评价结果具有较高的可信度和可靠性。在一些对公平性要求较高的评价场景中,如科研成果评价、企业绩效评估等,这种客观性尤为重要。
- 计算简单:整个计算过程主要涉及基本的数学运算和矩阵操作,不需要复杂的数学模型和算法,容易理解和实现。对于初学者和非专业的数据分析人员来说,也能够快速掌握和应用。
- 数据适应性强:对数据的分布没有严格要求,无论是正态分布、偏态分布还是其他不规则分布的数据,都能进行有效的处理。这使得熵值法在实际应用中具有更广泛的适用性。
- 劣势:
- 信息利用有限:熵值法只考虑了指标数据的离散程度,即各样本在指标上的差异情况,而没有考虑指标之间的相关性。在实际问题中,很多指标之间可能存在一定的关联关系,忽略这些相关性可能会导致遗漏一些重要信息,影响评价结果的全面性和准确性。
- 数据质量依赖高:该方法对数据质量要求较高。如果数据存在缺失值或者异常值,会对熵值计算和权重确定产生较大影响,进而导致评价结果不准确。例如,在数据收集过程中,如果某个样本的某个指标值记录错误或缺失,可能会使该指标的熵值计算出现偏差,最终影响整体的权重分配和综合得分。
具体案例
假设一家电商平台要评估三家入驻商家的综合实力,评价指标有商品销量、好评率、店铺活跃度。收集到的数据如下:
商家 |
商品销量 |
好评率 |
店铺活跃度 |
商家 A |
1000 |
0.9 |
80 |
商家 B |
1500 |
0.85 |
90 |
商家 C |
2000 |
0.8 |
100 |
首先,将这些数据整理成矩阵形式: 1 2 3
| data = np.array([[1000, 0.9, 80], [1500, 0.85, 90], [2000, 0.8, 100]])
|
然后,按照熵值法的步骤进行计算:
- 数据标准化:
- 对于商品销量(正向指标):
- 最小值为 min(1000,1500,2000)=1000,最大值为 max(1000,1500,2000)=2000。
- 商家 A 的标准化值为 (1000−1000)/(2000−1000)=0。
- 商家 B 的标准化值为 (1500−1000)/(2000−1000)=0.5。
- 商家 C 的标准化值为 (2000−1000)/(2000−1000)=1。
- 对于好评率(正向指标):
- 最小值为 min(0.9,0.85,0.8)=0.8,最大值为 max(0.9,0.85,0.8)=0.9。
- 商家 A 的标准化值为 (0.9−0.8)/(0.9−0.8)=1。
- 商家 B 的标准化值为 (0.85−0.8)/(0.9−0.8)=0.5。
- 商家 C 的标准化值为 (0.8−0.8)/(0.9−0.8)=0。
- 对于店铺活跃度(正向指标):
- 最小值为 min(80,90,100)=80,最大值为 max(80,90,100)=100。
- 商家 A 的标准化值为 (80−80)/(100−80)=0。
- 商家 B 的标准化值为 (90−80)/(100−80)=0.5。
- 商家 C 的标准化值为 (100−80)/(100−80)=1。
标准化后的数据矩阵为: 1 2 3
| data_std = np.array([[0, 1, 0], [0.5, 0.5, 0.5], [1, 0, 1]])
|
- 计算比重:
- 对于商品销量指标:
- 商家 A 的比重为 0/(0+0.5+1)=0。
- 商家 B 的比重为 0.5/(0+0.5+1)=0.333(保留三位小数)。
- 商家 C 的比重为 1/(0+0.5+1)=0.667(保留三位小数)。
- 对于好评率指标:
- 商家 A 的比重为 1/(1+0.5+0)=0.667(保留三位小数)。
- 商家 B 的比重为 0.5/(1+0.5+0)=0.333(保留三位小数)。
- 商家 C 的比重为 0/(1+0.5+0)=0。
- 对于店铺活跃度指标:
- 商家 A 的比重为 0/(0+0.5+1)=0。
- 商家 B 的比重为 0.5/(0+0.5+1)=0.333(保留三位小数)。
- 商家 C 的比重为 1/(0+0.5+1)=0.667(保留三位小数)。
比重矩阵为: 1 2 3
| p = np.array([[0, 0.667, 0], [0.333, 0.333, 0.333], [0.667, 0, 0.667]])
|
- 计算熵值:
- 商品销量指标的熵值:
- k=1/ln(3)≈0.910
(保留三位小数)。
- e1=−0.910×(0×ln(0)+0.333×ln(0.333)+0.667×ln(0.667))≈0.811
(保留三位小数)。这里 ln(0) 在实际计算中按照极限处理为
0。
- 好评率指标的熵值:
- e2=−0.910×(0.667×ln(0.667)+0.333×ln(0.333)+0×ln(0))≈0.811
(保留三位小数)。
- 店铺活跃度指标的熵值:
- e3=−0.910×(0×ln(0)+0.333×ln(0.333)+0.667×ln(0.667))≈0.811
(保留三位小数)。
熵值向量为: 1
| e = np.array([0.811, 0.811, 0.811])
|
- 计算差异系数:
- 商品销量指标的差异系数:g1=1−0.811=0.189。
- 好评率指标的差异系数:g2=1−0.811=0.189。
- 店铺活跃度指标的差异系数:g3=1−0.811=0.189。
差异系数向量为: 1
| g = np.array([0.189, 0.189, 0.189])
|
- 计算权重:
- 总差异系数为 0.189+0.189+0.189=0.567。
- 商品销量指标的权重:w1=0.189/0.567=0.333(保留三位小数)。
- 好评率指标的权重:w2=0.189/0.567=0.333(保留三位小数)。
- 店铺活跃度指标的权重:w3=0.189/0.567=0.333(保留三位小数)。
权重向量为: 1
| w = np.array([0.333, 0.333, 0.333])
|
- 计算综合得分:
- 商家 A 的综合得分:S1=0×0.333+1×0.333+0×0.333=0.333(保留三位小数)。
- 商家 B 的综合得分:S2=0.5×0.333+0.5×0.333+0.5×0.333=0.5。
- 商家 C 的综合得分:S3=1×0.333+0×0.333+1×0.333=0.667(保留三位小数)。
综合得分向量为: 1
| scores = np.array([0.333, 0.5, 0.667])
|
综上,商品销量、好评率、店铺活跃度的权重分别是0.333、0.333、0.333,商家
A、B、C
的综合得分分别是0.333、0.5、0.667。根据这些得分,商家
C 的综合实力最强,其次是商家 B,最后是商家
A。电商平台可以根据这些结果进行资源分配、推荐策略等决策。