面板数据进行熵值法

Posted spssau

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面板数据进行熵值法相关的知识,希望对你有一定的参考价值。

面板数据熵值法分析流程如下:

一、案例背景

当前有9家公司连续5年(2018-2022年)的财务指标数据,想要通过这份数据,确定各个财务指标的权重。熵值法根据指标离散程度确定赋权大小,客观公正准确度高。本次收集的指标数据不多,选择熵值法确定指标权重具有很强的操作性,运算过程简单易操作。

数据为9家公司连续5年的5个财务指标的数据,因为同时包含时间序列数据和截面数据,所以属于面板数据。应该有9*5=45行数据,5个财务指标各占一列,同时公司编号和年份各占一列,最后应该为45行*7列数据,最终应该将数据整理为如下格式:

数据虚构,仅做教学演示

二、数据处理

使用熵值法进行分析,需要对数据进行处理,包括数据方向处理和数据量纲处理。

(1)方向处理

本次分析的5个指标分别为营业利润、资产总额、负债总额、流动比率、销售成本。可以看出,这5个指标既有正向指标(越大越好的指标,如利润),又有逆向指标(越小越好的指标,如成本)。熵值法的运算规则中,正向指标越大越好,逆向指标越小越好,所以需要对数据进行方向处理。

将正向指标“营业利润”、“资产总额”、“流动比率”使用SPSSAU进行正向化处理;将逆向指标“负债总额”、“销售成本”使用SPSSAU进行逆向化处理。

SPSSAU【生成变量】->正向化/逆向化->确认处理,操作如下图:

同理,将其他两个指标进行逆向化处理即可。

(2)量纲处理

熵值法消除数据方向的影响后,还需要消除由于数据单位不同造成的影响,即进行量纲处理,SPSSAU提供十几种量纲处理方法,这里推荐使用数据归一化进行处理。

本案例因为上述分析中已经进行了正向/逆向此两种处理,而正向/逆向化处理可同时解决方向和量纲问题,所以不需要再次进行归一化处理。数据处理完成之后,接下来进行面板熵值法操作说明。

三、面板熵值法操作

熵值法是根据熵值进行权重确定的。“熵”原本是热力学的概念,后来被引入到信息论中,用于客观确定权重。熵值原理是通过指标的离散程度判断权重大小,离散程度越大说明不确定因素越多,对评价结果影响越大,权重越大。

从熵值的计算原理上看,并不会考虑是否为面板数据,面板数据与普通数据完全一致,直接放入分析即可。

从分析角度来看,针对面板数据,可以从两个角度进行熵值法分析,说明如下表:

接下来分别使用两种方法进行面板数据熵值法操作说明。

(1)一次法

在SPSSAU系统中,综合评价【熵值法】->将处理后的数据全部拖拽到分析框中->非负平移->开始分析

此时得到权重即为不区分是否面板数据,直接一次进行熵值法计算得到的指标权重。

补充非负平移:经过正向化/逆向化/标准化处理的数据,指标数据范围可以取到0,但是计算熵权时会进行取对数计算,出现0会导致计算无意义,所以需要对整体数据进行非负平移。SPSSAU非负平移功能是指,如果某列(某指标)数据出现小于等于0,则让该列数据同时加上一个“平移值”【该值为某列数据最小值的绝对值+0.01】,以便让数据全部都大于0,从而满足算法要求。

(2)多次法

分别筛选出2018-2022年的数据,进行5次熵值法,然后将得到的5次权重值进行取平均值的操作。

SPSSAU筛选操作如下:

筛选年份后,与一次法操作相同,分别进行5次熵值法,得到权重值,然后取平均值。

四、得到权重

(1)一次法权重计算结果

“一次法”进行面板数据熵值法得到权重结果如下:

使用熵值法对NMMS_负债总额等总共5项进行权重计算,从上表可以看出5个指标的权重值分别是18.58%、11.93%、19.45%、21/93%、28.11%。

SPSSAU输出权重可视化结果如下图:

(2)多次法权重计算结果

“多次法”进行面板数据熵值法,得到权重汇总结果如下表:

“多次法”进行熵值法,得到5个指标的权重值分别为37.54%、28.74%、29.97%、24.07%、18.46%、27.76%。

两种方法进行面板数据熵值法得到权重值对比见下表,可以看出两种方法计算面板数据的熵值法,得到的指标权重值接近。

提示:“多次法”进行面板数据熵值法分析,从原理上可行,此种做法是出于分析考虑,考虑了不同年份时数据的波动差异性。

五、总结

面板数据进行熵值法,与普通数据进行熵值法类似。首先需要统一数据方向,对正向指标进行正向化处理、逆向指标进行逆向化出理。如果数据单位不一致,需要消除量纲的影响,进行数据标准化处理。但是数据经量纲处理后,很可能出现负值,熵值法计算过程中包括取对数的操作,所以需要对数据进行非负平移,以确保分析结果能顺利得出。

面板数据进行熵值法有两种方法可以选择,分别是“一次法”和“多次法”。一次法不考虑是否面板数据,与普通数据一样做一次分析即可;多次法按年份分析,分别求出每一年指标的权重,然后取平均值。两种方法进行面板数据熵值法得到的指标权重值接近,多次法考虑了不同年份数据的波动差异性,两种方法研究人员可以自行选择来进行面板数据熵值法分析。

熵值法原理及python实现 附指标编制案例

文章目录


熵值法也称熵权法,是学术研究,及实际应用中的一种常用且有效的编制指标的方法。


             

1.简单理解 信息熵

机器学习中的决策树算法是对信息熵的一种典型的应用。
在信息论中,使用 (Entropy)来描述随机变量分布的不确定性。
假设对随机变量X,其可能的取值有 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn。即有n种可能发生的结果。其对应发生的概率依次为 p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1,p2,...,pn,则事件 p i p_i pi对应的信息熵为:

     H ( X ) = H ( p ) = ∑ i = 1 n p i log ⁡ 1 p i = − ∑ i = 1 n p i log ⁡ p i H(X)=H(p)=\\sum_i=1^np_i\\log \\frac1p_i=-\\sum_i=1^np_i\\log p_i H(X)=H(p)=i=1npilogpi1=i=1npilogpi

信息熵中log的底数通常为2,理论上可以使用不同的底数。

如何理解信息熵呢,假设已知今天是周日,则对于“明天是周几”这件事,只有一种可能的结果:是周一,且p=1。则“明天是周几”的信息熵 H ( X ) H(X) H(X) − 1 × log ⁡ 1 = 0 -1×\\log 1=0 1×log1=0,取信息熵的最小值0。表示“明天是周几”这个话题的不确定性很低,明天周几很确定。

再比如抛一枚硬币,则结果为正面和反面的概率都是0.5。则信息熵为 l o g 2 log2 log2,相比“明天周几”这件事的信息熵稍大些了。

假设某事情有100中可能的结果,每种结果发生的概率为0.01。则 H ( X ) = l o g 100 H(X)=log100 H(X)=log100,对于等概率均匀分布的事件,不确定的结果种类越多,则熵越大。


2.编制指标 (学术情景应用)

迁移到编制指标的情形,通过下边一个简单的示例理解熵权法在学术研究中的应用。
以陈浩,刘媛华的论文《数字经济促进制造业高质量发展了吗?——基于省级面板数据和机器学习模型的实证分析》
中部分内容展示为例:

对于离散型的随机变量,某指标在样本中出现的频率即可视为概率P,进而求出每个指标的熵值。
而对于上图中的连续型的随机变量,则在处理思想上与离散型随机变量有所不同。
通常可以先对数据做标准化处理,假设X指标中的第i个样本的标准化处理结果为 Z i Z_i Zi
(注意对正向指标和负)

则指标X中的第i个样本的权重为:

             P i = P_i = Pi= Z i ∑ i = 1 n Z i \\fracZ_i\\sum_i=1^nZ_i i=1nZiZi


上边说到,指标的熵值计算公式为:

         H ( p ) = ∑ i = 1 n p i log ⁡ 1 p i = − ∑ i = 1 n p i log ⁡ p i H(p)=\\sum_i=1^np_i\\log \\frac1p_i=-\\sum_i=1^np_i\\log p_i H(p)=i=1npilogpi1=i=1npilogpi

为了方便求变异系数,这里计算熵值的时候常常在该公式的基础上再乘以一个常数K,即

         H ( p ) = − K ∑ i = 1 n p i log ⁡ p i H(p)=-K\\sum_i=1^np_i\\log p_i H(p)=Ki=1npilogpi

其中 K = K= K= 1 l n ( n ) \\frac1ln(n) ln(n)1,n是样本的个数。易知,乘以常数后计算出的熵值,通常范围都是在区间[0,1]内的。

举个例子,假设一共有十个样本,且十个样本的连续型X指标数值非常相近,甚至完全一致。
对数的底数取10,则每个样本的权重都有接近或等于1/10。
通过公式 H ( p ) = − K ∑ i = 1 n p i log ⁡ p i H(p)=-K\\sum_i=1^np_i\\log p_i H(p)=Ki=1npilogpi计算出的熵值则为1,
然后引入一个新的指标“差异系数”来刻画数据之间的差异性大小(即使用1减去熵值得到所谓“差异系数”,不要跟变异系数混淆),

第j个指标的差异系数 d j = 1 − H j d_j=1-H_j dj=1Hj(H_j为第j个指标的熵值)

计算可知差异系数为0。则说明该指标在数值上不存在任何差异(雀食如此)。
随着数据本身数值上的差距的提升,指标的熵值会逐步减小,差异系数逐渐增大。这样说相信很容易理解了。

指标的熵值越小(差异系数越大),则该指标在最终要编制的指标中所占的权重则越大。

具体的权重计算公式为:
          ω j = d j ∑ j = 1 m \\omega_j=\\fracd_j\\sum_j=1^m ωj=j=1mdj

即某指标差异系数占所有指标差异系数和的比重。


上图的情景中,作者首先对二级指标进行衡量,然后使用熵权法,求出每个二级指标的熵值,进而求出权重,分别计算出四个一级指标;
然后再对四个一级指标再次使用熵权法计算权重,进而得到最终指标:制造业高质量发展水平


3.python实现

3.1 数据准备

为方便读者测试,这边手动生成一段数据作为示例。
将指标1,指标2,指标3,指标4,合并编制为一个“综合指标”。

import pandas as pd
import numpy as np

# 1. 初始数据 假设指标4是负向指标,其余三个为正向指标
df1 = pd.DataFrame('指标1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                    '指标2': [2, 4, 6, 8, 10, 2, 4, 6, 8, 10],
                    '指标3': [1, 2, 1, 3, 2, 1, 3, 2, 3, 1],
                    '指标4': [3, 1, 2, 3, 5, 8, 7, 8, 8, 9]
                   )
print(df1)            

数据为DataFrame格式,效果展示如下:
           


3.2 数据预处理

然后是数据预处理部分,这里定义一个泛用性较强的标准化处理函数,
该函数对于正向指标和负向指标(越大越好的指标和越小越好的指标),可以分别进行不同的处理。
(处理逻辑通过代码可以很容易看出)
同时该函数也可以兼容只进行其中一种处理的情景。

# 2.数据预处理 定义标准化处理函数
def Standardization(data,cols1=None, cols2=None):
    """
    :param data:目标数据
    :param cols1: 需要处理的正向指标列名列表,类型为列表或None [col1, col2, col3]
    :param cols2: 需要处理的负向指标列名列表,类型为列表或None [col1, col2, col3]
    :return: 输出处理结果
    """
    if cols1 == None and cols2 == None:
        return data
    elif cols1 != None and cols2 == None:
        return (data[cols1] - data[cols1].min())/(data[cols1].max()-data[cols1].min())
    elif cols1 == None and cols2 != None:
        return (data[cols2].max - data[cols2])

以上是关于面板数据进行熵值法的主要内容,如果未能解决你的问题,请参考以下文章

用”熵值法确定权重“怎么用MATLAB软件实现?

基于matlab因子指标赋权:主成分分析+熵值法+博弈论的组合赋权法

熵值法原理及python实现 附指标编制案例

求python 熵值法实现代码

matlab—熵权法

spssau数据处理难度