)
效率评估模型实战指南从DEA到超效率SBM的精准选择当面对各省份绿色经济发展效率评估这类复杂问题时许多研究者常陷入模型选择的困境。数据包络分析DEA及其衍生模型如SBM、超效率DEA等各有特点但如何根据具体研究需求选择最合适的模型本文将带您深入理解不同模型的适用场景并提供Python代码帮助您做出科学决策。1. 效率评估模型的核心分类与演进脉络效率评估领域的数据包络分析DEA模型发展至今已有四十余年历史形成了丰富的模型家族。理解这些模型的核心差异需要从三个关键维度切入模型结构、效率边界和产出类型。基础模型CCR与BCC构成了DEA方法的两大基石CCR模型1978年提出假设规模报酬不变适合评估整体技术效率BCC模型1984年提出放宽了这一假设能够区分纯技术效率和规模效率这两种传统模型存在两个显著局限径向计算方式忽略了投入产出的松弛改进空间无法处理非期望产出如污染排放这类特殊变量# 传统CCR模型效率计算示例 def basic_ccr_dea(inputs, outputs): num_units len(inputs) efficiencies [] for i in range(num_units): # 构建线性规划问题 c [0]*num_units [-1] # 目标函数系数 A_eq [outputs[i].tolist() [-1]] # 等式约束 b_eq [0] # 等式约束右侧值 # 添加投入约束 for j in range(len(inputs[i])): A_eq.append(inputs[:,j].tolist() [0]) b_eq.append(inputs[i][j]) # 求解线性规划 result linprog(c, A_eqA_eq, b_eqb_eq, bounds(0, None)) efficiencies.append(1/result.fun) return efficiencies表DEA模型演进关键节点模型类型提出年份核心创新典型应用场景CCR模型1978规模报酬不变假设技术效率基准评估BCC模型1984规模报酬可变纯技术效率评估SBM模型2001非径向、非角度计算存在松弛改进的场景超效率DEA1993突破效率值1的限制有效单元间的比较非期望产出SBM2003纳入不良产出变量环境效率评估2. 模型选择的四步决策框架面对具体研究问题时可按照以下系统化流程选择最合适的效率评估模型2.1 明确研究数据的产出类型关键判断点在于产出变量是否包含不希望出现的坏产出仅有期望产出如GDP、专利数传统DEA模型可能足够同时存在期望产出和非期望产出如SO2排放、废水排放必须选择能处理非期望产出的模型# 判断是否需要非期望产出模型的简单函数 def need_undesirable_model(outputs): 通过产出数据特征判断模型选择 if pollution in outputs.columns or emission in outputs.columns: print(建议使用考虑非期望产出的SBM模型) return True else: print(传统DEA模型可能足够) return False2.2 评估是否需要区分有效单元当研究需要对高效单元进一步排序时超效率模型成为必选项传统DEA模型效率值上限为1无法区分多个高效单元超效率DEA模型允许效率值1可对高效单元进行精细比较注意超效率模型计算复杂度显著增加当样本中高效单元较少时10%可能不需要使用2.3 考虑规模报酬假设根据研究对象的特点选择合适的规模报酬假设CRS规模报酬不变适用于所有决策单元都在最优规模下运作的场景VRS规模报酬可变更贴近现实能分离出纯技术效率和规模效率# 规模报酬假设选择建议 def select_scale_assumption(data): 通过数据特征建议规模报酬假设 if data[scale_variation] 0.3: # 规模差异小 return CRS可能更合适 else: return 建议使用VRS假设2.4 模型组合策略根据上述判断可得出以下模型选择组合基础场景仅有期望产出无需区分高效单元 → CCR/BCC模型环境效率评估存在非期望产出 → SBM模型考虑非期望产出高效单元排序需要区分多个高效单元 → 超效率DEA综合复杂场景非期望产出高效单元排序 → 超效率SBM模型3. 非期望产出SBM模型的Python实现考虑非期望产出的SBM模型是当前环境效率评估的主流选择其核心优势在于直接处理松弛变量避免径向计算的偏差将非期望产出纳入目标函数反映真实效率效率值计算更加精确import numpy as np from scipy.optimize import linprog def undesirable_sbm(inputs, good_outputs, bad_outputs): 考虑非期望产出的SBM模型实现 :param inputs: 投入指标矩阵 (n_samples x n_inputs) :param good_outputs: 期望产出矩阵 (n_samples x n_good_outputs) :param bad_outputs: 非期望产出矩阵 (n_samples x n_bad_outputs) :return: 各决策单元的效率值 n, m inputs.shape # n个单元m个投入 s1, s2 good_outputs.shape[1], bad_outputs.shape[1] # 期望和非期望产出数量 efficiencies [] for k in range(n): # 目标函数效率值最小化 c [1] [0]*(ms1s2n) # θ 松弛变量 λ # 约束条件 A_eq [] b_eq [] # 投入约束 for i in range(m): row [0]*(1ms1s2n) row[1i] 1 # s_i- row[0] -inputs[k,i] for j in range(n): row[1ms1s2j] inputs[j,i] A_eq.append(row) b_eq.append(0) # 期望产出约束 for r in range(s1): row [0]*(1ms1s2n) row[1mr] -1 # s_r row[0] good_outputs[k,r] for j in range(n): row[1ms1s2j] -good_outputs[j,r] A_eq.append(row) b_eq.append(0) # 非期望产出约束 for t in range(s2): row [0]*(1ms1s2n) row[1ms1t] 1 # s_tb row[0] -bad_outputs[k,t] for j in range(n): row[1ms1s2j] bad_outputs[j,t] A_eq.append(row) b_eq.append(0) # 凸性约束 (VRS) row [0]*(1ms1s2n) for j in range(n): row[1ms1s2j] 1 A_eq.append(row) b_eq.append(1) # 变量边界 bounds [(0, None)]*(1ms1s2n) # 求解线性规划 res linprog(c, A_eqA_eq, b_eqb_eq, boundsbounds) efficiencies.append(res.x[0]) return efficiencies表SBM模型结果解读关键指标指标类型变量表示经济含义优化方向投入松弛s⁻投入过量程度最小化期望产出松弛s⁺产出不足程度最小化非期望产出松弛sb不良产出过量程度最小化λ系数λ参考单元权重-4. 超效率SBM模型的进阶应用当研究需要对高效单元进行精细比较时超效率SBM模型成为理想选择。该模型结合了SBM和超效率DEA的双重优势突破效率值1的限制允许高效单元的效率值1实现完全排序保持SBM模型的精确性继续考虑松弛变量和非期望产出提供更丰富的比较信息显示高效单元间的相对优劣程度def super_sbm(inputs, outputs, undesirable_maskNone): 超效率SBM模型实现 :param inputs: 投入指标矩阵 :param outputs: 产出指标矩阵包含期望和非期望产出 :param undesirable_mask: 标识哪些列是非期望产出 :return: 超效率值可能1 n, m inputs.shape s outputs.shape[1] if undesirable_mask is None: undesirable_mask [False]*s efficiencies [] for k in range(n): # 构建目标函数 theta 1 # 效率值初始化为1 # 构建约束条件 A_eq [] b_eq [] # 投入约束 for i in range(m): row np.zeros(1 m s n) row[1i] 1 # s_i- row[0] -inputs[k,i] for j in range(n): if j ! k: # 排除当前评估单元 row[1msj] inputs[j,i] A_eq.append(row) b_eq.append(0) # 产出约束区分期望和非期望产出 for r in range(s): row np.zeros(1 m s n) row[1mr] -1 if not undesirable_mask[r] else 1 # 松弛变量符号 row[0] outputs[k,r] * (1 if not undesirable_mask[r] else -1) for j in range(n): if j ! k: # 排除当前评估单元 row[1msj] -outputs[j,r] if not undesirable_mask[r] else outputs[j,r] A_eq.append(row) b_eq.append(0) # 凸性约束VRS row np.zeros(1 m s n) for j in range(n): if j ! k: row[1msj] 1 A_eq.append(row) b_eq.append(1) # 变量边界 bounds [(0, None)]*(1 m s n) # 求解线性规划 res linprog(c[1][0]*(msn), A_eqA_eq, b_eqb_eq, boundsbounds) # 计算超效率值 input_term 1 - (1/m) * sum(res.x[1:1m]/inputs[k]) good_outputs [outputs[k,r] for r in range(s) if not undesirable_mask[r]] s_plus [res.x[1mr] for r in range(s) if not undesirable_mask[r]] output_term 1 (1/len(good_outputs)) * sum(s_plus/good_outputs) bad_outputs [outputs[k,r] for r in range(s) if undesirable_mask[r]] s_bad [res.x[1mr] for r in range(s) if undesirable_mask[r]] if bad_outputs: bad_term 1 (1/len(bad_outputs)) * sum(s_bad/bad_outputs) efficiency (input_term) / (0.5*output_term 0.5*bad_term) else: efficiency input_term / output_term efficiencies.append(efficiency) return efficiencies提示超效率SBM模型计算复杂度较高当决策单元超过200个时建议使用专业DEA软件如DEAP或MaxDEA以提高计算效率