目录

超效率DEA简述

一、为什么要用超效率 DEA?(传统模型的痛点)

二、超效率 DEA 的核心思想

三、超效率 DEA 的数学模型

传统 CCR 模型(对比用)

超效率 DEA 模型(论文公式 10)

论文复现:

一、摘要

二、符号说明

三、模型的建立

四、模型的求解

1.核心计算代码

2.求解器返回的结果

3.想要的结果:θ和G(全部可以自动求出)

4.完整代码

五、模型的应用

1.  θ值(节能减排效率)总体分析

2. G值(规模效率)总体分析

3. S⁻投入松弛变量

六、模型的缺点​编辑

论文重现


超效率DEA简述

一、为什么要用超效率 DEA?(传统模型的痛点

传统 CCR-DEA 模型的问题:

  • 评价结果中,往往多个 DMU 同时效率值 θ=1(都 DEA 有效)
  • 这些 "有效单元" 之间无法进一步排序和比较
  • 论文里就出现了:吉林、北京、上海、广东、陕西、安徽 6 个城市 θ 都等于 1,分不出谁更好

超效率 DEA 就是为了解决这个问题 —— 让有效的单元也能排出高低。


二、超效率 DEA 的核心思想

评价第 k 个 DMU 时,把它自己排除在外,用其他所有 DMU 的投入产出线性组合来构建前沿面。

对于原本就 DEA 有效的单元:

  • 它可以按比例增加投入,而仍然保持在有效前沿上
  • 这个 "投入增加的比例" 就是超效率值 θ
  • θ 越大 → 说明该 DMU 效率越高,"领先优势" 越大

对于原本 DEA 无效的单元:

  • 超效率值和传统 CCR 结果一样(θ < 1)
  • 因为它本来就不在前沿上,排不排除自己没区别

三、超效率 DEA 的数学模型

传统 CCR 模型(对比用)

超效率 DEA 模型(论文公式 10)

关键区别只有一个:求和时j \neq k,即排除被评价单元自身。


论文复现:

一、摘要

论文摘要讲述:节能减排是一个多投入、多输出的系统效率评价问题。故而建立起DEA模型

又指出:发现DEA模型无法对同时有效的决策单元做出进一步的评价和比较(也即是传统DEA的取缺点,上文提到:无非对有效的决策单元进行内部排名),作者提出将DEA模型改进为超效率DEA模型


二、符号说明

符号名称通俗解释论文里的具体含义
DMU决策单元就是你要评价的对象吉林、北京、上海等 8 个省市,每个省市就是一个 DMU
xDMU 输入投入的资源 / 成本能耗、COD 排放量、SO₂排放量、工业固废产生量(4 个投入指标)
yDMU 输出得到的产出 / 成果GDP、COD 削减量、SO₂削减量、固废综合利用量(4 个产出指标)
v输入的权系数每个投入指标的权重DEA 的精髓:不是人定的,是模型自动算的—— 每个 DMU 可以选对自己最有利的权重,让自己效率看起来最高
u输出的权系数每个产出指标的权重同上,自动计算,避免了主观赋权(比如 AHP)的偏见
θ节能减排效率核心评价结果,效率值- 传统 DEA:0 ≤ θ ≤ 1,θ=1 就是有效- 超效率 DEA:θ 可以 > 1,越大效率越高
G规模效益值判断规模合不合理G = Σλⱼ(所有 λ 加起来)G < 1:规模收益递增(投入还不够,加投入能赚更多)G = 1:规模收益不变(最优规模)G > 1:规模收益递减(投入太多了,再加不划算)
S⁻输入松弛变量投入里多余的部分比如陕西 SO₂排放松弛变量很大,说明 SO₂排放太多了,是 "浪费" 的投入
S⁺输出松弛变量产出里不足的部分比如某省 GDP 的 S⁺=500,说明还能再增加 500 亿 GDP 才到最优水平
L可节省投入量总共能省多少投入L = (1-θ) × 实际投入 + S⁻就是 "按比例缩减 + 砍掉冗余" 加起来的总节省量

三、模型的建立

DEA模型建立:

超效率DEA建立:

四、模型的求解

使用python中的线性规划求解器 = 一个函数,你告诉它"条件是什么、想最大化/最小化什么",它返回最优方案。你不需要自己推导怎么算,把方程写好丢进去就行。这就是为什么 DEA 代码的核心只有 60 行——复杂的数学计算全被 “linprog”包办了。求解器自动遍历所有可能(用数学技巧高效地找,不是真的一条条试),找到满足所有约束下目标最优的解。

1.核心计算代码

from scipy.optimize import linprog

result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
参数给的值含义
c[1, 0, 0, ..., 0]目标:最小化第 1 个变量(θ),其他变量不用管
A_eq(m+s) 行矩阵等式约束:每行一个方程
b_eq等式右边的数值产出约束=实际产出,投入约束=0
bounds全部 ≥ 0所有变量不能为负
method='highs'HiGHS 算法一个开源的高性能求解引擎

2.求解器返回的结果:

结果含义
result.x最优解向量——每个变量取什么值最好
result.x[0]θ 的最优值(效率分)
result.x[1:1+(n-1)]各 λ 的最优值(权重)
result.success求解是否成功

3.想要的结果:θ和G(全部可以自动求出)

 if result.success:

            theta[k] = result.x[0]                    # 超效率值

            lambda_vals = result.x[1 : 1 + (n-1)]     # λ值

            G[k] = np.sum(lambda_vals)                # 规模效益 G = Σλ

4.完整代码:

import numpy as np
from scipy.optimize import linprog

def super_efficiency_dea(X, Y):
    """
    超效率 CCR-DEA 模型(投入导向)
    
    参数:
        X: 投入矩阵, shape=(n, m), n个DMU, m个投入指标
        Y: 产出矩阵, shape=(n, s), n个DMU, s个产出指标
    
    返回:
        theta: 超效率值数组, shape=(n,)
        G: 规模效益值数组, shape=(n,)
    """
    n, m = X.shape  # n个DMU, m个投入
    s = Y.shape[1]  # s个产出
    
    theta = np.zeros(n)
    G = np.zeros(n)
    
    # 对每个DMU分别求解
    for k in range(n):
        # 排除第k个DMU
        idx = [i for i in range(n) if i != k]
        X_other = X[idx]   # (n-1, m)
        Y_other = Y[idx]   # (n-1, s)
        
        # ===== 变量定义 =====
        # x = [θ, λ_1, ..., λ_{n-1}, s⁻_1, ..., s⁻_m, s⁺_1, ..., s⁺_s]
        # 共 1 + (n-1) + m + s 个变量
        
        n_vars = 1 + (n - 1) + m + s
        
        # ===== 目标函数: min θ =====
        c = np.zeros(n_vars)
        c[0] = 1  # 只最小化θ
        
        # ===== 等式约束 =====
        # 约束1: 投入约束  Σλⱼ xᵢⱼ + sᵢ⁻ - θ xᵢₖ = 0
        # 约束2: 产出约束  Σλⱼ yᵣⱼ - sᵣ⁺ = yᵣₖ
        
        A_eq = np.zeros((m + s, n_vars))
        b_eq = np.zeros(m + s)
        
        # 投入约束 (m个)
        for i in range(m):
            A_eq[i, 0] = -X[k, i]                    # -θ * x_ik
            A_eq[i, 1 : 1 + (n-1)] = X_other[:, i]   # λ_j * x_ij
            A_eq[i, 1 + (n-1) + i] = 1               # s_i⁻
            b_eq[i] = 0
        
        # 产出约束 (s个)
        for r in range(s):
            row = m + r
            A_eq[row, 1 : 1 + (n-1)] = Y_other[:, r]  # λ_j * y_rj
            A_eq[row, 1 + (n-1) + m + r] = -1         # -s_r⁺
            b_eq[row] = Y[k, r]
        
        # ===== 变量边界 =====
        # θ ≥ 0, λ ≥ 0, s⁻ ≥ 0, s⁺ ≥ 0
        bounds = [(0, None)] * n_vars
        
        # ===== 求解 =====
        result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
        
        if result.success:
            theta[k] = result.x[0]                    # 超效率值
            lambda_vals = result.x[1 : 1 + (n-1)]     # λ值
            G[k] = np.sum(lambda_vals)                # 规模效益 G = Σλ
        else:
            theta[k] = np.nan
            G[k] = np.nan
    
    return theta, G


# ============== 用论文中的数据测试 ==============
# 2006年8个省市的节能减排数据(论文表2)

# 投入指标: [能耗(万吨), COD(万吨), SO2(万吨), 固废(万吨)]
X = np.array([
    [6801.786, 16.8, 33.6, 2802],    # 吉林
    [5981.4128, 0.9, 9.4, 1356],     # 北京
    [9049.841, 3.5, 37.4, 2063],     # 上海
    [20203.4763, 29.4, 124.7, 3057], # 广东
    [6450.8532, 14.9, 84.6, 4794],   # 陕西
    [7200.1628, 14.2, 51.9, 5028],   # 安徽
    [6843.4776, 10.6, 45.6, 5972],   # 云南
    [5006.4633, 5.4, 46.3, 2591],    # 甘肃
])

# 产出指标: [GDP(亿元), COD减少(万吨), SO2减少(万吨), 固废利用(万吨)]
Y = np.array([
    [4275.12, 2.5, 0.7, 1781],       # 吉林
    [7870.28, 0.2, 1.1, 1095],       # 北京
    [10366.37, 0.2, 0.1, 1953],      # 上海
    [26204.47, -0.6, -0.4, 2878],    # 广东
    [4523.74, -0.2, 2.7, 1825],      # 陕西
    [6148.73, 0.1, -2.7, 4123],      # 安徽
    [4006.72, 0.0, -4.6, 2463],      # 云南
    [2276.7, 0.3, 0.2, 723],         # 甘肃
])

provinces = ['吉林', '北京', '上海', '广东', '陕西', '安徽', '云南', '甘肃']

# 计算超效率
theta, G = super_efficiency_dea(X, Y)

# 输出结果
print("=" * 60)
print(f"{'省份':<6} {'超效率θ':<12} {'规模效益G':<12} {'规模收益':<10}")
print("=" * 60)
for i in range(len(provinces)):
    if G[i] < 0.999:
        scale = '递增'
    elif G[i] > 1.001:
        scale = '递减'
    else:
        scale = '不变'
    print(f"{provinces[i]:<6} {theta[i]:<12.4f} {G[i]:<12.4f} {scale:<10}")
print("=" * 60)

五、模型的应用

对解出的核心概念的实际应用(落地)

1.  θ值(节能减排效率)总体分析

文中说到:

  • 八个省市的θ值在四年内的平均值大于1,表示这些地区的节能减排效率相对较高
  • θ值较低的陕西,属于DEA弱有效,需要改进。
  • θ值越高,表明该地区节能减排效率越好,工作做得越到位

2. G值(规模效率)总体分析

G = Σλⱼ(所有 λ 加起来)结论:

  • G < 1:规模收益递增(投入还不够,加投入能赚更多)
  • G = 1:规模收益不变(最优规模)
  • G > 1:规模收益递减(投入太多了,再加不划算)

3. S⁻投入松弛变量

S⁻分析,可以支持优化的方向:

简单来说:投入松弛变量(S⁻)就是“纯浪费”的数量。

分析它能直接告诉你两件最重要的事:

  1. 具体减多少:在产出不变的情况下,某项投入(比如资金、人力)还能再硬生生砍掉多少,这部分是纯冗余,砍掉不影响产出。

  2. 短板在哪里:哪个指标的 S⁻ 最大,哪个就是资源浪费最严重的环节,应该优先优化。

所以作者通过S⁻分析,进行调整数据,指明优化方向


六、模型的缺点


​​​​​​​论文重现:

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐