用Python+DEApy实现CCR模型:从数据准备到效率评估全流程指南
在教育评估、企业绩效分析等领域,我们常常需要比较多个决策单元(如学校、分支机构)的效率。数据包络分析(DEA)中的CCR模型就是解决这类问题的利器。本文将带你用Python的DEApy库,从零开始完成一个完整的效率评估项目。
1. 环境配置与数据准备
工欲善其事,必先利其器。我们先搭建好分析环境:
bash复制pip install deapy pandas numpy matplotlib
假设我们要评估6所中学的效率,数据包含两个输入指标(生均投入、非低收入家庭百分比)和两个输出指标(生均写作得分、生均科技得分)。创建一个CSV文件schooldata.csv:
csv复制school,input1,input2,output1,output2
A,8.4,86.2,5.1,6.5
B,9.1,87.1,5.3,6.8
C,8.8,88.0,5.4,7.1
D,9.3,89.2,5.2,6.9
E,9.5,90.1,5.0,6.7
F,9.8,91.3,4.8,6.4
提示:输入指标通常是资源投入类数据,输出指标则是成果类数据。确保所有数据为正值,必要时进行归一化处理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CCR模型核心原理速览
CCR模型由Charnes、Cooper和Rhodes提出,其核心是通过线性规划计算各决策单元的相对效率。关键概念:
- 效率前沿:由表现最好的DMU构成的生产可能性边界
- θ值:效率得分,1表示前沿上的高效单元
- 松弛变量:显示投入过剩或产出不足的具体量
模型数学表达简化为:
code复制max θ
s.t.:
∑λX ≤ θX0
∑λY ≥ Y0
λ ≥ 0
3. 完整代码实现与解读
下面是用DEApy实现CCR模型的完整代码:
python复制import pandas as pd
from deapy import CCRModel
# 数据加载
data = pd.read_csv('schooldata.csv')
inputs = data[['input1', 'input2']].values
outputs = data[['output1', 'output2']].values
# 创建CCR模型
ccr = CCRModel(inputs, outputs, orientation='input')
# 计算效率
results = ccr.evaluate()
# 结果解析
for i, school in enumerate(data['school']):
print(f"{school}: 效率得分={results['efficiency'][i]:.3f}")
if results['efficiency'][i] < 1:
print(f" 投入可减少: {results['input_slack'][i]}")
print(f" 产出可增加: {results['output_slack'][i]}")
关键参数说明:
| 参数 | 说明 | 典型值 |
|---|---|---|
| orientation | 投入导向/产出导向 | 'input'/'output' |
| returns_to_scale | 规模报酬假设 | 'crs'(不变)/'vrs'(可变) |
| weight_restriction | 权重限制 | 可自定义 |
4. 结果可视化与分析技巧
将结果可视化能更直观地发现规律:
python复制import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.bar(data['school'], results['efficiency'], color='skyblue')
plt.axhline(y=1, color='r', linestyle='--')
plt.title('学校效率评估结果')
plt.ylabel('效率得分')
plt.xlabel('学校')
plt.show()
分析时重点关注:
- 标杆识别:效率得分为1的学校
- 改进空间:
- 低效学校的投入冗余量
- 产出不足的具体指标
- 敏感性分析:改变指标权重看结果稳定性
5. 实战进阶:处理常见问题
实际应用中常遇到这些问题:
问题1:指标量纲不一致
python复制from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_inputs = scaler.fit_transform(inputs)
问题2:包含分类变量
- 将分类变量转为虚拟变量
- 使用Tobit回归等半参数方法
问题3:小样本分析
- 采用交叉效率方法
- 结合Bootstrap增加结果可靠性
6. 项目扩展方向
掌握了基础应用后,可以尝试:
- 超效率模型:区分前沿面上的DMU
- 窗口分析:追踪效率随时间变化
- Malmquist指数:测量生产力变化
- 网络DEA:分析多阶段生产过程
python复制# 超效率模型示例
from deapy import SuperEfficiencyModel
se_model = SuperEfficiencyModel(inputs, outputs)
se_results = se_model.evaluate()
教育评估场景下,可以进一步结合生源质量、地区经济水平等环境变量,使用二阶回归分析效率影响因素。企业应用中,则可考虑将效率结果与财务指标关联分析。
