基于 AHP-TOPSIS 的区域科技创新能力综合评价
基于 AHP-TOPSIS 的区域科技创新能力综合评价
摘要
本文针对区域科技创新能力评价问题,建立 AHP-TOPSIS 组合模型。首先构建「目标层—准则层—指标层」三层指标体系,涵盖创新投入、创新产出、创新环境三个维度共 7 项指标;其次识别指标类型并作正向化处理(极大型 4 项、极小型 1 项、中间型 1 项、区间型 1 项);然后对正向化矩阵作向量归一化,用层次分析法确定权重,最后用 TOPSIS 计算各方案与理想解的距离及贴近度。求解得 10 个省份的贴近度为:F 省 0.8767、E 省 0.8756、J 省 0.8022、B 省 0.7960、H 省 0.7676、A 省 0.7420、I 省 0.7205、G 省 0.4971、C 省 0.4379、D 省 0.3035。结果表明:排名靠后的省份均存在明显短板指标(D 省在科技成果转化率与政策支持强度上同时得 0),而领先省份各指标均无严重短板,印证了 TOPSIS 对短板指标的惩罚特性。
关键词:AHP;TOPSIS;组合赋权;正向化;区域创新能力
一、问题描述
为服务科技强国战略布局,需对各区域的科技创新能力进行科学评价与排序。要求从创新投入、创新产出、创新环境三大层面构建多维度指标体系,对若干省份进行综合评价,挖掘区域优势与短板,为政策制定提供依据。
题目特别说明两项指标的最优取值:
- 科技成果转化率:过低说明成果难以落地,过高可能虚报理想值,设理想值为 60%;
- 政策支持强度:表示政策扶持的合理性,理想区间为 [70, 90],过高或过低都可能影响创新生态。
评价对象为 10 个省份(A~J),指标数据共 7 项。
二、模型假设
- 各指标之间相互独立,不存在显著交互作用;
- 数据真实可靠,不存在测量误差;
- 科技成果转化率与政策支持强度的最优取值由题目给定,具有合理性;
- 判断矩阵中的标度值能真实反映决策者对各指标重要性的判断;
- 环境层仅含「政策支持强度」一个指标,其层内权重取 1。
三、符号说明
| 符号 | 含义 |
|---|---|
| $A$ | 原始数据矩阵,$m \times n$ |
| $m, n$ | 方案个数(10)、指标个数(7) |
| $\tilde{x}_{ij}$ | 正向化后的指标值 |
| $x_{best}$ | 中间型指标的最优值(60) |
| $[a,b]$ | 区间型指标的最佳区间([70, 90]) |
| $M$ | 中间型/区间型指标正向化时的归一化因子 |
| $z_{ij}$ | 标准化后的指标值 |
| $z_j^+, z_j^-$ | 第 $j$ 项指标的理想最优解 / 理想最劣解 |
| $w_j$ | 第 $j$ 项指标的综合权重 |
| $D_i^+, D_i^-$ | 方案 $i$ 到理想最优解 / 理想最劣解的加权距离 |
| $S_i$ | 方案 $i$ 的贴近度 |
四、模型建立与求解
4.1 指标体系构建
| 目标层 | 准则层 | 指标层 | 指标类型 |
|---|---|---|---|
| 区域科技创新能力 | 创新投入 | 经费 | 极大型 |
| 研发人员 | 极大型 | ||
| GDP能耗 | 极小型 | ||
| 创新产出 | 高企数量 | 极大型 | |
| 专利数 | 极大型 | ||
| 科技成果转化率 | 中间型($x_{best}=60$) | ||
| 创新环境 | 政策支持强度 | 区间型($[70,90]$) |
4.2 指标正向化
四项极大型指标无需处理。其余三类分别处理:
极小型指标(GDP能耗):
$$ \tilde{x} = \max(x) - x $$
中间型指标(科技成果转化率,$x_{best} = 60$):
$$ \tilde{x} = 1 - \frac{|x - x_{best}|}{M}, \qquad M = \max_i|x_i - x_{best}| = 15 $$
区间型指标(政策支持强度,$[a,b] = [70,90]$):
$$ \tilde{x} = \begin{cases} 1 - \dfrac{a - x}{M}, & x < a \\[6pt] 1, & a \le x \le b \\[6pt] 1 - \dfrac{x - b}{M}, & x > b \end{cases} \qquad M = \max\{a - \min(x),\ \max(x) - b\} = \max\{10,\ 5\} = 10 $$
正向化后,7 项指标全部统一为「数值越大越优」。例如:D 省科技成果转化率 45%,偏离最优值 15,正向化得 0;政策支持强度 60,低于下界 10,正向化得 0。
4.3 数据标准化
$$ z_{ij} = \frac{\tilde{x}_{ij}}{\sqrt{\sum_{i=1}^{m} \tilde{x}_{ij}^{2}}} $$
标准化后各列平方和为 1,消除量纲差异。
4.4 AHP 确定权重
(1)构造判断矩阵
准则层(创新投入 / 创新产出 / 创新环境):
$$ A_1 = \begin{bmatrix} 1 & 1 & 2 \\ 1 & 1 & 2 \\ 0.5 & 0.5 & 1 \end{bmatrix} $$
投入层(经费 / 研发人员 / GDP能耗):
$$ A_2 = \begin{bmatrix} 1 & 0.5 & 1 \\ 2 & 1 & 2 \\ 1 & 0.5 & 1 \end{bmatrix} $$
产出层(高企数量 / 专利数 / 科技成果转化率):
$$ A_3 = \begin{bmatrix} 1 & 1 & 0.5 \\ 1 & 1 & 0.5 \\ 2 & 2 & 1 \end{bmatrix} $$
(2)一致性检验
三个矩阵均为 $n = 3$,取 $RI = 0.58$。
$$ CI = \frac{\lambda_{max} - n}{n - 1}, \qquad CR = \frac{CI}{RI} $$
计算结果:三个矩阵的最大特征值均为 3,故 $CI = 0$,$CR = 0 < 0.1$,全部通过一致性检验。这是因为三个判断矩阵均满足完全一致性(各行成比例),说明赋值逻辑自洽。
(3)权重计算
三种方法(算术平均法、几何平均法、特征值法)计算结果完全一致:
| 层次 | 权重 |
|---|---|
| 准则层 | 创新投入 0.4、创新产出 0.4、创新环境 0.2 |
| 投入层 | 经费 0.25、研发人员 0.5、GDP能耗 0.25 |
| 产出层 | 高企数量 0.25、专利数 0.25、科技成果转化率 0.5 |
(4)三层权重合成
环境层只有一个指标,层内权重取 1。按「准则层权重 × 层内权重」合成总权重:
$$ w = [\,0.4\times0.25,\ 0.4\times0.5,\ 0.4\times0.25,\ 0.4\times0.25,\ 0.4\times0.25,\ 0.4\times0.5,\ 0.2\times1\,] $$
$$ w = [0.1,\ 0.2,\ 0.1,\ 0.1,\ 0.1,\ 0.2,\ 0.2] $$
即研发人员、科技成果转化率、政策支持强度三项权重最高(各 0.2),其余四项各 0.1,权重和为 1。
4.5 TOPSIS 计算贴近度
取标准化矩阵各列最大值构成理想最优解 $z_j^+$,最小值构成理想最劣解 $z_j^-$:
$$ z^+ = [0.387433,\ 0.373242,\ 0.425780,\ 0.352548,\ 0.357426,\ 0.415227,\ 0.365148] $$
$$ z^- = [0.243529,\ 0.248828,\ 0,\ 0.285243,\ 0.278792,\ 0,\ 0] $$
计算加权欧氏距离与贴近度:
$$ D_i^+ = \sqrt{\sum_{j=1}^{n} w_j\left(z_{ij} - z_j^+\right)^2}, \qquad D_i^- = \sqrt{\sum_{j=1}^{n} w_j\left(z_{ij} - z_j^-\right)^2} $$
$$ S_i = \frac{D_i^-}{D_i^+ + D_i^-} $$
五、结果分析
| 省份 | 贴近度 $S_i$ | 排名 |
|---|---|---|
| F 省 | 0.8767 | 1 |
| E 省 | 0.8756 | 2 |
| J 省 | 0.8022 | 3 |
| B 省 | 0.7960 | 4 |
| H 省 | 0.7676 | 5 |
| A 省 | 0.7420 | 6 |
| I 省 | 0.7205 | 7 |
| G 省 | 0.4971 | 8 |
| C 省 | 0.4379 | 9 |
| D 省 | 0.3035 | 10 |
头部竞争激烈:F 省与 E 省仅相差 0.0011,几乎并列第一。E 省在研发人员(180,最高)、科技成果转化率(60%,正好取到最优值)和政策支持强度(80,落在最佳区间)三项上均取到最优;F 省则以较高的经费投入(3.3)和较多的专利数(2350)见长,且无任何短板。
尾部短板明显:
- D 省(第 10):科技成果转化率仅 45%,偏离最优值最远,正向化得 0;政策支持强度 60,低于最佳区间下界,正向化也为 0。两项零分且权重均为 0.2,直接导致垫底。
- C 省(第 9):GDP能耗 0.91 为 10 省最高,作为极小型指标正向化得 0;政策支持强度 95 高于上界,仅得 0.5。
- G 省(第 8):GDP能耗 0.88 偏高(正向化 0.03),科技成果转化率 50%(正向化 0.3333),两项均弱。
结论:排名靠后的省份并非所有指标都差,而是存在权重较高且得分极低的短板指标。由于 TOPSIS 采用加权欧氏距离,任何一项指标偏离理想解都会拉大 $D_i^+$,因此该模型对短板特别敏感。政策建议应优先补齐这些短板指标,而非继续强化已有优势项。
六、模型评价
优点
- AHP 与 TOPSIS 互补:AHP 解决「各指标相对重要性」的主观判断问题,TOPSIS 解决「多指标下如何排序」的客观计算问题,两者结合兼顾了专家经验与数据信息;
- 三层权重合成使权重分配与指标体系结构一致,避免了对 7 项指标直接两两比较(需 21 次比较)的繁琐;
- 完整覆盖四类指标(极大型、极小型、中间型、区间型),适用面广;
- 结果以贴近度呈现,物理意义明确,便于排序与解释。
局限
- 判断矩阵仍依赖主观赋值,三个矩阵虽通过检验但均为完全一致矩阵,实际决策中难以总是如此;
- 环境层仅一个指标,权重直接取 1,未体现该层内部的权重分配;
- 理想解依赖方案集本身,增减省份可能导致排序变化;
- 未对权重作敏感性分析,排序结果的稳健性有待检验。
改进方向
- 权重可引入熵权法,与 AHP 结果组合赋权,进一步降低主观性;
- 可对准则层权重作敏感性分析,检验头部省份排名(F 与 E 仅差 0.0011)是否稳健。
附录:Python 代码
"""
通过:
创新投入、创新产出、创新环境
去评价所有城市的发展状况。
"""
# 题目
"""
Topsis 法 —— 小试牛刀
为加快我国科技强国战略布局,需要对各区域的科技创新能力进行科学评价和合理排序。
本题旨在通过构建一套多维度指标体系,从“创新投入、创新产出、创新环境”三大层面
对若干省份进行综合评价,挖掘区域优势与短板,为政策制定提供依据。
注:
① 科技成果转化率:转化率过低说明成果难以落地,过高可能虚报理想值,设理想值为 60%;
② 政策支持强度:表示政策扶持的合理性,理想区间为 [70, 90],过高或过低都可能影响创新生态。
"""
import numpy as np
# 经费 研发人员 GDP能耗 高企数量 专利数 科技成果转化率 政策支持强度
A = np.array([
[2.8, 165, 0.75, 1020, 2300, 55, 85], # A省
[3.5, 120, 0.68, 890, 1950, 62, 70], # B省
[2.2, 140, 0.91, 1100, 2500, 66, 95], # C省
[3.1, 155, 0.74, 980, 2100, 45, 60], # D省
[2.5, 180, 0.70, 950, 2400, 60, 80], # E省
[3.3, 170, 0.72, 1050, 2350, 58, 75], # F省
[2.9, 130, 0.88, 970, 2000, 50, 88], # G省
[2.6, 160, 0.76, 930, 2250, 63, 90], # H省
[3.0, 150, 0.69, 1000, 2150, 59, 65], # I省
[2.4, 145, 0.73, 960, 2050, 61, 78], # J省
])
"""
创新投入 创新产出 创新环境
经费 研发人员 GDP能耗 高企数量 专利数 科技成果转化率 政策支持强度
A省 2.8 165 0.75 1020 2300 55 85
B省 3.5 120 0.68 890 1950 62 70
C省 2.2 140 0.91 1100 2500 66 95
D省 3.1 155 0.74 980 2100 45 60
E省 2.5 180 0.70 950 2400 60 80
F省 3.3 170 0.72 1050 2350 58 75
G省 2.9 130 0.88 970 2000 50 88
H省 2.6 160 0.76 930 2250 63 90
I省 3.0 150 0.69 1000 2150 59 65
J省 2.4 145 0.73 960 2050 61 78
"""
# 经费、研发人员、高企数量、专利数肯定是越多越好 --> 极大型指标
# GDP能耗 是越低越好 --> 极小型指标
# 科技成果转化率(最好 60) --> 中间型指标,x_best = 60
# 政策支持强度(最好是 70 - 90) --> 区间型指标
x_transform_best = 60 # 科技成果转化率(中间型指标)的最优值
policy_a = 70 # 政策支持强度(区间型指标)的最佳区间下界
policy_b = 90 # 政策支持强度(区间型指标)的最佳区间上界
"""
原始矩阵正向化(将指标数据转换为极大项指标)
"""
# 极大型不需要转
# 极小型指标:
A_min = np.column_stack([
np.max(A[:, 2]) - A[:, 2]
])
print('极小型指标:')
print(A_min)
# 中间型指标:
A_M_mid = np.max(np.abs(A[:, 5] - x_transform_best))
A_mid = np.column_stack([
1 - (np.abs(A[:, 5] - x_transform_best)) / A_M_mid
])
print("中间型指标:")
print(A_mid)
# 区间型指标:
A_M_range = max(policy_a - np.min(A[:, 6]), np.max(A[:, 6] - policy_b))
A_range = np.column_stack([
np.select(
[
A[:, 6] < policy_a,
(A[:, 6] >= policy_a) & (A[:, 6] <= policy_b),
A[:, 6] > policy_b
],[
1 - (policy_a - A[:, 6]) / A_M_range,
np.ones_like(A[:, 6]),
1 - (A[:, 6] - policy_b) / A_M_range
]
)
])
print("区间型指标:")
print(A_range)
# 合并成一个矩阵
X = np.column_stack([
A[:, 0],
A[:, 1],
A_min,
A[:, 3],
A[:, 4],
A_mid,
A_range
])
print("正向化矩阵:")
print(X)
"""
正向化矩阵标准化(按列)
"""
# 分母
Z = np.sqrt(np.sum(X ** 2, axis=0))
# 加上分子
Z = X / Z
print("标准化后:")
print(Z)
"""
找出理想最优解、理想最劣解(按列)
"""
z_plus = np.max(Z, axis=0)
z_minus = np.min(Z, axis=0)
print(f'理想最优解:{z_plus}')
print(f'理想最劣解:{z_minus}')
"""
给定指标权重(本次使用层次分析法,熵权法暂时不用)
"""
# 判断矩阵 A1:准则层(创新投入 / 创新产出 / 创新环境)
A1 = np.array([
[1, 1, 2],
[1, 1, 2],
[0.5, 0.5, 1],
])
# 判断矩阵 A2:投入层(经费 / 研发人员 / GDP能耗)
A2 = np.array([
[1, 0.5, 1],
[2, 1, 2],
[1, 0.5, 1],
])
# 判断矩阵 A3:产出层(高企数量 / 专利数 / 科技成果转化率)
A3 = np.array([
[1, 1, 0.5],
[1, 1, 0.5],
[2, 2, 1],
])
# 注意了,一致性检验需要用原始矩阵
n = 3
# 环境层只有「政策支持强度」一个指标,不用矩阵,权重 = 1
RI = 0.58 # n = 3
# A1的一致性检验
eigenvalues_A1, eigenvectors_A1 = np.linalg.eig(A1) # 特征值+特征向量(可求λ_max)
eigenvalues_A1_max = np.max(np.real(eigenvalues_A1))
CI_A1 = (eigenvalues_A1_max - n) / (n - 1)
CR_A1 = CI_A1 / RI
# A2的一致性检验
eigenvalues_A2, eigenvectors_A2 = np.linalg.eig(A2)
eigenvalues_A2_max = np.max(np.real(eigenvalues_A2))
CI_A2 = (eigenvalues_A2_max - n) / (n - 1)
CR_A2 = CI_A2 / RI
# A3的一致性检验
eigenvalues_A3, eigenvectors_A3 = np.linalg.eig(A3)
eigenvalues_A3_max = np.max(np.real(eigenvalues_A3))
CI_A3 = (eigenvalues_A3_max - n) / (n - 1)
CR_A3 = CI_A3 / RI
if CR_A1 < 0.1 and CR_A2 < 0.1 and CR_A3 < 0.1:
print("----> 全部满足一致性检验")
print('算术平均法:')
# 算术平均法:判断矩阵按列归一化 -> 按行求平均
A1_norm = A1 / A1.sum(axis=0)
A2_norm = A2 / A2.sum(axis=0)
A3_norm = A3 / A3.sum(axis=0)
w1_A1 = A1_norm.mean(axis=1) # 准则层:创新投入 / 创新产出 / 创新环境
w1_A2 = A2_norm.mean(axis=1) # 投入层:经费 / 研发人员 / GDP能耗
w1_A3 = A3_norm.mean(axis=1) # 产出层:高企数量 / 专利数 / 科技成果转化率
print(f'准则层:{np.round(w1_A1, 4)}')
print(f'投入层:{np.round(w1_A2, 4)}')
print(f'产出层:{np.round(w1_A3, 4)}')
print('几何平均法:')
# 几何平均法:按行相乘 -> 开 n 次方 -> 归一化
w2_A1 = np.prod(A1, axis=1) ** (1/n)
w2_A1 = w2_A1 / w2_A1.sum()
w2_A2 = np.prod(A2, axis=1) ** (1/n)
w2_A2 = w2_A2 / w2_A2.sum()
w2_A3 = np.prod(A3, axis=1) ** (1/n)
w2_A3 = w2_A3 / w2_A3.sum()
print(f'准则层:{np.round(w2_A1, 4)}')
print(f'投入层:{np.round(w2_A2, 4)}')
print(f'产出层:{np.round(w2_A3, 4)}')
print('特征值法:')
# 特征值法:最大特征值对应的特征向量 -> 归一化
k_A1 = np.argmax(np.real(eigenvalues_A1))
w3_A1 = np.real(eigenvectors_A1[:, k_A1])
w3_A1 = w3_A1 / w3_A1.sum()
k_A2 = np.argmax(np.real(eigenvalues_A2))
w3_A2 = np.real(eigenvectors_A2[:, k_A2])
w3_A2 = w3_A2 / w3_A2.sum()
k_A3 = np.argmax(np.real(eigenvalues_A3))
w3_A3 = np.real(eigenvectors_A3[:, k_A3])
w3_A3 = w3_A3 / w3_A3.sum()
print(f'准则层:{np.round(w3_A1, 4)}')
print(f'投入层:{np.round(w3_A2, 4)}')
print(f'产出层:{np.round(w3_A3, 4)}')
# 三种方法取平均,得到每层权重
w_A1 = np.array([w1_A1, w2_A1, w3_A1]).mean(axis=0) # 准则层
w_A2 = np.array([w1_A2, w2_A2, w3_A2]).mean(axis=0) # 投入层
w_A3 = np.array([w1_A3, w2_A3, w3_A3]).mean(axis=0) # 产出层
# 合成总权重:准则层权重 × 各层局部权重(环境层只有 1 个指标,权重 = 1)
w = np.concatenate([
w_A1[0] * w_A2, # 创新投入 × 投入层
w_A1[1] * w_A3, # 创新产出 × 产出层
np.array([w_A1[2]]), # 创新环境 × 1
])
print(f'总权重 w:{np.round(w, 4)}')
"""
计算各方案与最优解、最劣解的距离
"""
D_plus = np.sqrt(np.sum(w * (z_plus - Z) ** 2, axis=1))
D_minus = np.sqrt(np.sum(w * (z_minus - Z) ** 2, axis=1))
S = D_minus / (D_plus + D_minus)
print(f'最终得分:\n{S}')运行结果
极小型指标:
[[0.16]
[0.23]
[0. ]
[0.17]
[0.21]
[0.19]
[0.03]
[0.15]
[0.22]
[0.18]]
中间型指标:
[[0.66666667]
[0.86666667]
[0.6 ]
[0. ]
[1. ]
[0.86666667]
[0.33333333]
[0.8 ]
[0.93333333]
[0.93333333]]
区间型指标:
[[1. ]
[1. ]
[0.5]
[0. ]
[1. ]
[1. ]
[1. ]
[1. ]
[0.5]
[1. ]]
理想最优解:[0.38743277 0.37324241 0.42577994 0.35254781 0.35742563 0.4152274
0.36514837]
理想最劣解:[0.24352917 0.24882828 0. 0.28524322 0.27879199 0.
0. ]
----> 全部满足一致性检验
算术平均法:
准则层:[0.4 0.4 0.2]
投入层:[0.25 0.5 0.25]
产出层:[0.25 0.25 0.5 ]
几何平均法:
准则层:[0.4 0.4 0.2]
投入层:[0.25 0.5 0.25]
产出层:[0.25 0.25 0.5 ]
特征值法:
准则层:[0.4 0.4 0.2]
投入层:[0.25 0.5 0.25]
产出层:[0.25 0.25 0.5 ]
总权重 w:[0.1 0.2 0.1 0.1 0.1 0.2 0.2]
最终得分:
[0.74201029 0.79598662 0.43794116 0.30353957 0.87557293 0.87669893
0.49708205 0.76764851 0.72047018 0.80222321]