在教育评估、企业绩效分析等领域,我们常常需要比较多个决策单元(如学校、分支机构)的效率。数据包络分析(DEA)中的CCR模型就是解决这类问题的利器。本文将带你用Python的DEApy库,从零开始完成一个完整的效率评估项目。
工欲善其事,必先利其器。我们先搭建好分析环境:
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
提示:输入指标通常是资源投入类数据,输出指标则是成果类数据。确保所有数据为正值,必要时进行归一化处理。
CCR模型由Charnes、Cooper和Rhodes提出,其核心是通过线性规划计算各决策单元的相对效率。关键概念:
模型数学表达简化为:
code复制max θ
s.t.:
∑λX ≤ θX0
∑λY ≥ Y0
λ ≥ 0
下面是用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 | 权重限制 | 可自定义 |
将结果可视化能更直观地发现规律:
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:指标量纲不一致
python复制from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_inputs = scaler.fit_transform(inputs)
问题2:包含分类变量
问题3:小样本分析
掌握了基础应用后,可以尝试:
python复制# 超效率模型示例
from deapy import SuperEfficiencyModel
se_model = SuperEfficiencyModel(inputs, outputs)
se_results = se_model.evaluate()
教育评估场景下,可以进一步结合生源质量、地区经济水平等环境变量,使用二阶回归分析效率影响因素。企业应用中,则可考虑将效率结果与财务指标关联分析。