Data Envelopment Analysis(数据包络分析)介绍

一、何为Data Envelopment Analysis(数据包络分析)

Data Envelopment Analysis(数据包络分析)是一种非参数评估方法。它是通过比较同一类目标的效率来进行数据的评估。Data Envelopment Analysis入门资料中通常采用线性规划来解决问题。

二、Data Envelopment Analysis的基本概念

Data Envelopment Analysis 根据线性规划思想,采用“包络面”的概念进行分析。即定义一个“包络面”,将数据点依据各项指标投射到这个“包络面”上,通过计算这些点在“包络面”上的投影面积,来确定各点之间的“相对效率”。评估对象要具有可比性,否则不能进行分析。

三、Data Envelopment Analysis的应用领域

Data Envelopment Analysis的应用领域非常广泛:

1、银行业:对银行各部门的效率进行评估;
2、教育领域:对教育部门的效率进行评估;
3、卫生保健:对卫生保健系统或医疗机构等的效率进行评估;
4、城市规划:对城市规划、可持续发展等问题进行研究;
5、环境保护:对环境保护局、公司等的管理效率进行评估。

四、Data Envelopment Analysis 的计算过程

Step 1

确定评估指标及其单位,收集数据

import pandas as pd

data=pd.read_csv('data.csv',index_col='id')
data.head()

Step 2

确定评估对象,根据指标数据,建立评价模型,确定数据可行性。

import numpy as np

from pyomo.environ import *

model=ConcreteModel()

n,m=data.shape
model.J=Set(initialize=range(n))
model.I=Set(initialize=range(m))

model.a=Param(model.J,model.I,initialize=data.values)

model.x=Var(model.I)
model.y=Var(model.J)

model.obj=Objective(expr=model.y[m-1],sense=maximize)

def ax_constraint(model,j):
    return sum(model.a[j,i]*model.x[i] for i in model.I )=0 

model.const2=Constraint(model.I,rule=ay_constraint)

def sumy_constraint(model):
    return sum(model.y[j] for j in model.J)==1

model.const_sumy=Constraint(rule=sumy_constraint)

Step 3

求解模型,确定相对有效环境单位数和效率结果

solver=SolverFactory('glpk')
solver.solve(model)

x=pd.Series([model.x[i]() for i in model.I],index=data.columns)
y=pd.Series([model.y[j]() for j in model.J],index=data.index)

Step 4

分析结果,确定应用方法

result=pd.DataFrame({'x':x,'y':y,'z':y/x})
result

五、Data Envelopment Analysis模型的改进

Data Envelopment Analysis模型的改进有很多种,其中最常见的是基于超越率TE和松弛度Slack的方法,分别在优化模型的约束中加入一个目标函数,使之更具可信度,但同时也增加了模型的复杂度。

TE模型

model.TE=Expression(expr=sum(x[i] for i in model.I))

def te_constraint(model,j):
    return sum(model.a[j,i]*model.x[i] for i in model.I)>=model.y[j]*model.TE

model.const3=Constraint(model.J,rule=te_constraint)

model.obj2=Objective(expr=model.TE,sense=minimize)

solver.solve(model)

x=pd.Series([model.x[i]() for i in model.I],index=data.columns)
y=pd.Series([model.y[j]() for j in model.J],index=data.index)

result=pd.DataFrame({'x':x,'y':y,'z':y/x})
result

Slack模型

model.Slack=Var(initialize=1)

def slack_constraint(model,j,i):
    return sum(model.a[j,i]*model.x[i] for i in model.I ) +model.Slack>=model.y[j]

model.const4=Constraint(model.J,model.I,rule=slack_constraint)

model.obj3=Objective(expr=model.Slack,sense=minimize)

solver.solve(model)

x=pd.Series([model.x[i]() for i in model.I],index=data.columns)
y=pd.Series([model.y[j]() for j in model.J],index=data.index)

result=pd.DataFrame({'x':x,'y':y,'z':y/x})
result

六、结语

Data Envelopment Analysis作为一种非参数评估方法,可以广泛应用于各个领域的数据分析与评估中。通过对Data Envelopment Analysis的概念、应用领域、计算过程和改进模型的介绍,希望读者能更深入地了解此方法,并在实际工作中进行实践探索。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/270480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-16 13:37
下一篇 2024-12-16 13:37

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29
  • Python如何打乱数据集

    本文将从多个方面详细阐述Python打乱数据集的方法。 一、shuffle函数原理 shuffle函数是Python中的一个内置函数,主要作用是将一个可迭代对象的元素随机排序。 在…

    编程 2025-04-29
  • Python根据表格数据生成折线图

    本文将介绍如何使用Python根据表格数据生成折线图。折线图是一种常见的数据可视化图表形式,可以用来展示数据的趋势和变化。Python是一种流行的编程语言,其强大的数据分析和可视化…

    编程 2025-04-29

发表回复

登录后才能评论