一、何為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/zh-tw/n/270480.html