优劣解距离法(TOPSIS)
1. 介绍
C.L.Hwang
和 K.Yoon
于1981
年首次提出 TOPSIS (Technique for Order Preference by Similarity to an Ideal Solution)
。TOPSIS
法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。基本过程为基于归一化后的原始数据矩阵,采用余弦法找出有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案和最劣方案间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
通俗的例子:小明数学考试 134
分,要怎么知道他的成绩是好还是不好呢?
- 基于分布的评价方法会观察小明的分数位于班级分数的哪个水平(如前
5%
、前10%
),但这种评价方法只能给出一个方向的情况。如班上成绩除了最高分外,其余都是134
分,那么小明的成绩就是并列的倒数第一,但是正向评价给出的结果是前5%
。 - 而
TOPSIS
就是找出班上最高分(假设是147
分)、最低分(假设是69
分),然后计算小明的分数和这两个分数之间的差距,从而得到自己分数好坏的一个客观评价。距离最高分越近,那么评价情况越好,距离最低分越近,那么评价情况越糟。
对大学评级
学校 | 经费 | 评分 |
---|---|---|
清华大学 | 100 | 1 |
北京大学 | 99 | 2 |
上海交通大学 | 98 | 3 |
浙江大学 | 97 | 4 |
用距离打分后如下:
令评分 = x − min max − min \begin{equation} \text{令评分}=\frac{x-\min}{\max-\min} \end{equation} 令评分=max−minx−min
学校 | 经费 | 评分 |
---|---|---|
清华大学 | 100 | 1 |
北京大学 | 99 | 0.7 |
上海交通大学 | 98 | 0.3 |
浙江大学 | 97 | 0 |
几何上解释:
2. 原理
TOPSIS的想法就是,通过一定的计算,评估方案系统中任何一个方案距离理想最优解和最劣解的综合距离。如果一个方案距离理想最优解越近,**距离最劣解越远,我们就有理由认为这个方案更好。**那理想最优解和最劣解又是什么呢?很简单,理想最优解就是该理想最优方案的各指标值都取到系统中评价指标的最优值,最劣解就是该理想最劣方案的各指标值都取到系统中评价指标的最劣值。
理想最优解中的数据都是各方案中的数据,而不要选择方案中没有的数据,理想最劣解同理。
如何衡量某一个方案与理想最优解和最劣解的综合距离呢?
TOPSIS基本思想是用下面这个表达式进行衡量:
某一方案 − 最劣解 理想最优解 − 最劣解 \begin{equation} \frac{\text{ 某一方案}-\text{最劣解}}{\text{理想最优解}-\text{最劣解}} \end{equation} 理想最优解−最劣解 某一方案−最劣解
这个公式只是一个基本的思路,实际上,为了更准确与合理,会对该公式进行优化。
规范点来说:是在各个指标中找出评价对象的最优解 Z + Z^+ Z+ 和最劣解 Z − Z^- Z− ,然后再在每个评价对象中, 算出该对象的各个评价指标相对最优解 Z + Z^+ Z+ 的距离 D + D^+ D+ ,以及相对最劣解 Z − Z^- Z− 的距离 D − D^- D− ,靠近最优解而远离最劣解的方案就是最佳方案。
3. 步骤
3.1 指标正向化
类型 | 特点 | 举例 |
---|---|---|
极大型(效益型)指标 | 数值越大(多)越好 | 就业率、GDP、收入 |
极小型(成本型)指标 | 数值越小(少)越好 | 负债率、恩格尔系数 |
中间型指标 | 越接近某个值越好 | 黄金比例、满座率、水质pH值 |
区间型指标 | 落在某个区间最好 | 贫富差距、出生率 |
正向化的方法并不唯一,选择合适的即可,只要能转成极大型都可以
3.1.1 极小型正向化
极小型转极大型:例如前面统计的失业率,这个数值应该是越小越好,所以可以用 max − x \max-x max−x,或者 1 x ( x > 0 ) \frac1x(x>0) x1(x>0)
学校 | 失业率 | 正向化后的失业率 |
---|---|---|
北大 | 0.010 | 0.030 |
清华 | 0.012 | 0.028 |
上交 | 0.040 | 0 |
浙大 | 0.033 | 0.007 |
3.1.2 中间型正向化
中间型转极大型:数值不要太大也不要太小,越接近某个值越好,如 { x i } \{x_i\} { xi} 是一组中间型指标序列,且最佳的数值为 x b e s t x_\mathrm{best} xbest, 那么可以这样正向化:
先取这个序列中最大差距值 M = max { ∣ x i − x b e s t ∣ } M= \max \left \{ |x_i- x_{\mathrm{best}}|\right \} M=max{ ∣xi−xbest∣} ,再令各元素
x ~ i = 1 − ∣ x i − x b e s t ∣ M \begin{equation} \tilde{x}_{i}=1-\frac{|x_{i}-x_{\mathrm{best}}|}M \end{equation} x~i=1−M∣xi−xbest∣
满座率 | 正向化后的满座率 |
---|---|
0.60 | 1 - |
0.75 | 0.50 |
0.89 | 0.96 |
0.95 | 0.83 |
已知满座率在 90 % 90\% 90%时,收益最好,则 x b e s t = 0.9 , M = max { 0.15 , 0.3 , 0.05 , 0.01 } = 0.3 x_{best}=0.9,M=\max\left\{0.15,0.3,0.05,0.01\right\}=0.3 xbest=0.9,M=max{ 0.15,0.3,0.05,0.01}=0.3
3.1.3 区间型正向化
区间型转极大型:数值不要太大也不要太小,落在某个区间最好,如人体温度值落在 36 37 36~37 36 37 °C最好。
设对于一组区间型指标 { x i } \{x_i\} { xi} 其最佳区间为 [ a , b ] [a,b] [a,b] 那么可以这样正向化:
先算最值到边界的最大距离 M = max { a − min { x i } , max { x i } − b } M=\max\left\{a-\min\left\{x_i\right\},\max\left\{x_i\right\}-b\right\} M=max{ a−min{ xi},max{ xi}−b},再令各元素如下
x ~ i = { 1 − a − x M , x < a 1 , a ≤ x ≤ b 1 − x − b M , x > b \begin{equation} \begin{aligned} \left.\tilde{x}_i~=~\left\{\begin{aligned}&1-\frac{a-x}M&,~x<a\\ &1&,~a\leq x\leq b\\ &1-\frac{x-b}M&,~x>b\end{aligned}\right.\right. \end{aligned} \end{equation} x~i = ⎩ ⎨ ⎧1−Ma−x11−Mx−b, x<a, a≤x≤b, x>b
体温 | 正向化后的体温 |
---|---|
35.2 | 0.2 |
35.8 | 0.8 |
36.5 | 1 |
37.2 | 0.8 |
38.0 | 0 |
a = 36 , b = 37 , M = max { 36 − 35.2 , 38.0 − 37 } = 1 \begin{equation} a=36,b=37,M=\max\left\{36-35.2,38.0-37\right\}=1 \end{equation} a=36,b=37,M=max{ 36−35.2,38.0−37}=1
3.2 标准化
设有 n n n个评价对象, m m m个评价指标(已正向化),构成矩阵:
X = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] \begin{equation} X=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\x_{21}&x_{22}&\cdots&x_{2m}\\\vdots&\vdots&\ddots&\vdots\\x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix} \end{equation} X=
x11x21⋮xn1x12x22⋮xn2