代码先看import numpy as np from scipy.optimize import linprog def dea_ccr(X, Y, eps1e-6): X, Y np.array(X, float), np.array(Y, float) n, m, s X.shape[0], X.shape[1], Y.shape[1] eff, lam np.zeros(n), np.zeros((n, n)) for k in range(n): c np.r_[1, np.zeros(n)] A, b [], [] for r in range(s): A.append(np.r_[0, -Y[:, r]]) b.append(-Y[k, r]) for i in range(m): A.append(np.r_[-X[k, i], X[:, i]]) b.append(0) res linprog(c, A_ubA, b_ubb, bounds[(None, None)] [(0, None)] * n, methodhighs) if res.success: eff[k], lam[k] res.x[0], res.x[1:] lam[np.abs(lam) eps] 0 return eff, lam if __name__ __main__: names [医院A,医院B,医院C,医院D,医院E,医院F,医院G,医院H,医院I,医院J] X np.array([[20,300],[30,200],[40,100],[20,200],[10,400],[50,50],[35,150],[25,250],[45,80],[60,180]]) Y np.array([[100,50],[150,80],[200,100],[80,120],[100,60],[200,150],[120,90],[110,70],[180,110],[160,130]]) eff, lam dea_ccr(X, Y) rank np.argsort(np.argsort(-eff)) 1 # 核心输出效率排名表 print(\nDEA效率评价CCR投入导向) print(DMU 效率θ 排名 解读) for i, name in enumerate(names): info 最优 if abs(eff[i]-1)1e-6 else f浪费{100-eff[i]*100:.1f}% print(f{name:6} {eff[i]:7.4f} {rank[i]:3} {info}) # 改进建议只输出非有效DMU print(\n改进建议目标投入 θ × 当前投入) print(DMU 当前(医生,床位) 目标(医生,床位) 可削减) for i, name in enumerate(names): if eff[i] 1: cur X[i] target eff[i] * cur red cur - target print(f{name:6} ({cur[0]:3.0f},{cur[1]:3.0f}) ({target[0]:5.1f},{target[1]:5.1f}) (-{red[0]:.0f}人,-{red[1]:.0f}床)) print()DEA 结果详解下面结合刚才运行的10家医院的结果把每一部分掰开揉碎讲清楚。第一部分效率排名表DMU | 效率θ | 排名 | 解读 ------------------------------------------------------------ 医院A | 0.7500 | 8 | 投入只需 75.0%浪费 25.0% 医院B | 0.9062 | 5 | 投入只需 90.6%浪费 9.4% 医院C | 1.0000 | 1 | 满分效率最优 ✅ 医院D | 1.0000 | 2 | 满分效率最优 ✅ 医院E | 1.0000 | 3 | 满分效率最优 ✅ 医院F | 1.0000 | 4 | 满分效率最优 ✅ 医院G | 0.7412 | 9 | 投入只需 74.1%浪费 25.9% 医院H | 0.7724 | 7 | 投入只需 77.2%浪费 22.8% 医院I | 0.8878 | 6 | 投入只需 88.8%浪费 11.2% 医院J | 0.6304 | 10 | 投入只需 63.0%浪费 37.0%1) θ效率值到底怎么来的DEA 的核心理念是拿你家的投入跟别人家拼一个虚拟的同龄人比对于每个医院问一个问题把其他医院当积木拼一个虚拟医院产出不低于你但投入最少能压到你的多少倍这个倍数就是 θ。以医院Jθ0.6304为例投入产出医院J 自己60人 180床160门诊 130住院虚拟目标(θ×当前)37.8人 113.5床≥160门诊 ≥130住院含义别的医院可以用D、C、F 三家拼出一个组合这个组合只用 37.8 人 113.5 床产出就不低于医院J。换句话说医院J浪费了37%的资源投入的 100% 中只用 63% 就够了。2) 为什么有 4 家医院 θ1.0θ1.0 意味着找不到任何组合能用更少的投入达到不低于它的产出。这 4 家C、D、E、F构成了生产前沿面production frontier。它们不一定完美只是在这个样本集合里它们是各自方向上的最优者C床少但产出极高100床 → 200门诊100住院D住院产出特别高200床 → 120住院结构独特E床虽多但产出一比也算高效F极致精干50人50床 → 200门诊150住院产出最高注意虽然 C、D、E、F 都是 θ1.0但排名并列 #1这是代码里用了argsort随机排的——实际上它们都是满分并列第一。第二部分标杆参考λ 向量医院Jθ0.6304参照 → 医院C(λ0.2174) 医院D(λ0.3478) 医院F(λ0.4435)λ 的含义在构造虚拟比较对象时每家标杆医院的占比权重。1) 怎么读这条信息意思是给医院J 找的虚拟比较对象是这样拼出来的虚拟医院 0.2174 × 医院C 0.3478 × 医院D 0.4435 × 医院F算一下这个虚拟医院的投入医生0.2174×40 0.3478×20 0.4435×50 8.7 7.0 22.2 37.9人 床位0.2174×100 0.3478×200 0.4435×50 21.7 69.6 22.2 113.5床刚好就是上面目标投入的 37.8人 113.5床2) 怎么用这个信息λ 最大的 → 最重要的标杆对医院J 来说Fλ0.4435最值得学投入精干但产出最高λ1.0 且指向自己→ 满分 DMUC、D、E、F 各指向自己说明别人拼不出来比它更优的组合第三部分改进建议目标投入量医院J | ( 60, 180) | ( 37.8, 113.5) | (-22人, -67床)怎么读当前投入目标投入可削减60人 180床37.8人 113.5床砍掉 22 人 67 床前提是产出不变160门诊130住院。这个目标投入不是拍脑袋想的而是 DEA 的线性规划求解器算出来的在效率前沿上你最少需要多少投入。总结一张表看懂三个模块模块核心问题怎么读效率排名谁高效谁低效θ1.0 满分越小越浪费标杆参考低效的该向谁学λ 最大的就是你的榜样权重越大越重要改进建议该怎么改目标投入 θ × 当前投入中间差就是可削减量三个必记原则DEA 是相对评价你在样本集合里的排名换一批 DMU 结果可能不同θ1.0 ≠ 绝对完美只是在这个集合里你是最优前沿真实世界可能还有更强组合DMU 数量要够一般要求n ≥ 3×(ms)否则区分度差太多满分当前 10 家刚好在临界线上核心重点DEA数据包络分析的核心价值在于在“多投入、多产出”的复杂系统中不预先假设生产函数客观地评价多个同质单元DMU的相对效率并为低效单元提供精确的量化改进路径。在数学建模竞赛如国赛、美赛中DEA 几乎是“多指标综合评价类”问题的杀手锏。以下是它的适用场景、独特优势及竞赛中的典型套用逻辑DEA 解决了传统方法的哪些痛点无需量纲统一投入如经费、人数和产出如论文数、利润可以单位不同直接计算省去了归一化的主观性。权重由数学规划内生不需要像 AHP层次分析那样由专家打分赋权DEA 针对每个 DMU 寻找最有利的权重客观性强。给出“投影”值不仅告诉“你不行”还精确告诉“你该如何减投入或增产出”来达到有效这是 DEA 独有的杀手锏。常见应用领域与评价指标对照以下表格梳理了数据包络分析DEA等效率评价方法在五大典型领域的投入-产出指标对照关系供建模选题与指标体系设计时参考应用领域典型投入指标典型产出指标建模目的宏观经济/区域发展土地、固定资产投资、劳动力、能源消耗GDP、财政收入、居民可支配收入评价省份/城市的经济发展质量或绿色全要素生产率环境与碳排放热门资本、劳动力、能源消费量期望产出GDP、非期望产出CO₂、SO₂评价低碳试点城市或工业园区的生态效率常用 SBM-DEA教育/医疗评估师资数量、教学经费、床位数、医生数升学率、就业率、就诊人数、治愈率评价高校/医院的办学或运营效率金融/投资绩效员工人数、营业成本、风险资产净利润、不良贷款率逆指标处理、市场份额评价银行分行/基金公司的盈利能力与风控平衡国防/科技创新RD 经费、研发人员全时当量专利授权数、技术合同成交额、新产品销售收入评价高新技术企业或科研院所的创新转化效率