目前学术界对于效率测度使用最多的是DEA的两个基本模型,即CCR模型与BBC模型。CCR模型与BBC模型均属于径向模型,对测度条件要求严格,且效率值无法实现有效排序,效率值小于1表示决策单元无效,等于1的则表示决策单元有效,当多个决策单元的DEA均达到有效时,难以进行横向上的区分比较。超效率SBM模型是在DEA模型基础上进一步演化而来,由Tone在2002年提出,该模型解决了上述一系列问题,可以有效区分决策单元为1的对象,超效率SBM模型中的效率值可以大于1,当多个决策单元的DEA有效时,能够进行有效排序,因此本文选择使用超效率SBM模型对全国16个城市的政府开放数据效率值进行排序。
#导入所需要的包
import pandas as pd
import numpy as np
from scipy import optimize
#导入数据
df = pd.read_excel("dea_data.xlsx", index_col=0)
data = df.values
x = data[:, 0:2]
x = x.T
y_g = data[:, 2:4]
y_g = y_g.T
y_b = data[:, 4]
y_b = y_b.reshape(1,-1)# reshape的原因是只有一个非期望产出变量,上一行得到的y_b是一个一维的向量,需要将其转换成一个1×n的二维行向量,否则后续进行矩阵操作容易报错
m, n = x.shape
s1 = y_g.shape[0]
s2 = y_b.shape[0]
theta = []# 用于存储结果,每一个DMU的效率值,也即目标函数值都会append到theta里
for i in range(n):
f = np.concatenate([np.zeros(n), -1/(m*x[:, i]),
np.zeros(s1+s2), np.array([1])])
Aeq1 = np.hstack([x,
np.identity(m),
np.zeros((m, s1+s2)),
-x[:, i, None]])
Aeq2 = np.hstack([y_g,
np.zeros((s1, m)),
-np.identity(s1),
np.zeros((s1, s2)),
-y_g[:, i, None]])
Aeq3 = np.hstack([y_b,
np.zeros((s2, m)),
np.zeros((s2, s1)),
np.identity(s2),
-y_b[:, i, None]])
Aeq4 = np.hstack([np.zeros(n),
np.zeros(m),
1/((s1+s2)*(y_g[:, i])),
1/((s1+s2)*(y_b[:, i])),
np.array([1])]).reshape(1, -1)
Aeq = np.vstack([Aeq1, Aeq2, Aeq3, Aeq4])
beq = np.concatenate([np.zeros(m+s1+s2),np.array([1])])
bounds = tuple([(0, None) for t in range(n+s1+s2+m+1)])
res = optimize.linprog(c=f, A_eq=Aeq, b_eq=beq, bounds=bounds)
theta.append(res.fun)
(二)python实现备用
from pyDEA.DEA import DEA
from pyDEA.InputData import InputData
from pyDEA.OutputData import OutputData
# 定义输入数据
input_data = InputData([10, 15, 12], ["Input1", "Input2", "Input3"])
# 定义输出数据
output_data = OutputData([200, 300, 250], ["Output1", "Output2", "Output3"])
# 创建DEA对象
dea = DEA(input_data, output_data)
# 计算效率得分
efficiency_scores = dea.get_efficiency_scores()
# 打印每个单位的效率得分
for i, score in enumerate(efficiency_scores):
print("Efficiency score for unit {}: {}".format(i + 1, score))
在上述代码中,首先创建了输入数据和输出数据的对象。然后,通过传入这些数据创建DEA对象。最后,调用get_efficiency_scores()
方法计算每个单位的效率得分,并将结果打印出来。此外,pyDEA
库还提供了其他功能,如投影法和前沿分析等,你可以根据需要进一步探索。
安装
pyDEA
库,可以使用以下命令在Python中安装它:
pip install pyDEA
[1]含非期望产出的SBM,超效率SBM模型求解及其python实现 - 知乎 (zhihu.com)