python实现超效率-SBM模型

一、SBM模型简介

(一)SBM提出背景       

         目前学术界对于效率测度使用最多的是DEA的两个基本模型,即CCR模型与BBC模型。CCR模型与BBC模型均属于径向模型,对测度条件要求严格,且效率值无法实现有效排序,效率值小于1表示决策单元无效,等于1的则表示决策单元有效,当多个决策单元的DEA均达到有效时,难以进行横向上的区分比较。超效率SBM模型是在DEA模型基础上进一步演化而来,由Tone在2002年提出,该模型解决了上述一系列问题,可以有效区分决策单元为1的对象,超效率SBM模型中的效率值可以大于1,当多个决策单元的DEA有效时,能够进行有效排序,因此本文选择使用超效率SBM模型对全国16个城市的政府开放数据效率值进行排序。

(二)SBM模型原理介绍

 

 

二、python实现SBM模型

(一)python实现方法

#导入所需要的包
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)

### 回答1: 很抱歉,我是一名AI语言模型,无法提供具体的代码实现。但是,我可以为您提供一些有用的信息。 SBM-DEA(Slacks-based measure-Data Envelopment Analysis)是一种基于DEA的效率评价方法,它使用松弛变量来测量决策单元的效率。在Python中,可以使用DEApy库来实现SBM-DEA。 DEApy是一个Python库,用于数据包络分析(Data Envelopment Analysis,DEA)的实现。它支持多种DEA模型,包括SBM-DEA。以下是使用DEApy库实现SBM-DEA的基本步骤: 1. 安装DEApy库 可以使用pip命令在Python中安装DEApy库: ```python pip install deapy ``` 2. 导入DEApy库 在Python脚本中导入DEApy库: ```python from deapy import sbmdea ``` 3. 准备数据 SBM-DEA需要一个包含输入、输出和松弛变量的数据集。可以使用pandas库加载数据集: ```python import pandas as pd data = pd.read_csv("data.csv") inputs = data.iloc[:, 0:2] outputs = data.iloc[:, 2:4] slacks = data.iloc[:, 4:6] ``` 4. 运行SBM-DEA 使用sbmdea函数运行SBM-DEA: ```python results = sbmdea(inputs, outputs, slacks) ``` 结果是一个包含所有决策单元效率得分的pandas DataFrame对象。 以上是使用DEApy库实现SBM-DEA的基本步骤。需要注意的是,SBM-DEA的实现需要更多的参数设置和数据处理,具体实现请参考DEApy库的文档和示例代码。 ### 回答2: Python实现sbm-dea主要是通过编写代码来实现sbm-dea模型。以下是一个基本的Python代码示例,可以用来实现sbm-dea模型: ```python import numpy as np def sbm_dea(inputs, outputs): # 计算输入、输出的数量 num_inputs = len(inputs[0]) num_outputs = len(outputs[0]) # 计算输入、输出的平均值 mean_inputs = np.mean(inputs, axis=0) mean_outputs = np.mean(outputs, axis=0) # 创建SBM-DEA模型矩阵 sbm_dea_model = np.zeros((num_inputs, num_outputs)) # 计算各个输入、输出指标的权重 for i in range(num_inputs): for j in range(num_outputs): sbm_dea_model[i][j] = mean_outputs[j] / mean_inputs[i] return sbm_dea_model # 将输入数据和输出数据作为示例输入 inputs = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]]) outputs = np.array([[100, 150], [200, 250], [300, 350]]) # 调用sbm_dea函数计算SBM-DEA模型 sbm_dea_model = sbm_dea(inputs, outputs) # 打印输出SBM-DEA模型 print("SBM-DEA模型矩阵:") print(sbm_dea_model) ``` 以上代码中,首先定义了一个`sbm_dea`函数,该函数接受输入矩阵和输出矩阵作为参数,并返回一个SBM-DEA模型矩阵。然后,通过计算输入、输出的数量和平均值,创建一个用于存储SBM-DEA模型的矩阵,然后计算各个输入、输出指标的权重。最后,将示例输入数据和输出数据传递给`sbm_dea`函数,获得SBM-DEA模型矩阵,并将其打印出来。 请注意,以上代码只是一个基本示例,具体的实现可能因实际需求而有所不同。 ### 回答3: sbm-dea是一种基于数据包络分析(DEA)的模型,用于评估效率和效益的表现。Python作为一种广泛应用的编程语言,提供了许多功能强大的工具和库,可以很方便地实现sbm-dea模型。 首先,我们需要准备数据。数据通常包括多个输入指标和输出指标,代表不同投入和产出。 接下来,我们可以使用Python中的库,如numpy和pandas,来处理和计算数据。可以使用pandas库读取和处理数据,numpy库进行计算和运算。 然后,我们可以使用数据包络分析的方法,计算效率得分。在sbm-dea模型中,我们需要首先确定每个决策单元(Decision Making Units, DMUs)的权重,然后计算得到每个DMU的相对效率得分。 最后,我们可以使用Python中的数据可视化库,如matplotlib,将结果进行可视化展示。 总结起来,Python实现sbm-dea可以通过以下步骤实现: 1. 读取和处理数据,可以使用pandas库。 2. 进行计算和运算,可以使用numpy库。 3. 进行数据包络分析,计算模型中的指标和分数。 4. 使用数据可视化库进行结果可视化展示。 值得一提的是,对于复杂的模型和数据,可能需要一些额外的库和算法来支持。在Python中,有许多强大的工具和库可以应用于数据包络分析和效率评估,如DEAP库、PyDEA库等。因此,在实现sbm-dea模型时,根据具体的需求和数据,可以选择使用适当的工具和库来实现效率评估策略。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

封印师请假去地球钓鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值