TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内简称为优劣解距离法。
TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能够精确地反映各评价方案之间的差距。
评价类问题
1 TOPSIS法
TOPSIS法概念:
- TOPSIS法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能够精确地反映个评价方案之间的差距。
- 基本过程为先将原始数据矩阵统一指标类型(一般正向化处理)得到正向化的矩阵,再针对正向化的矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,然后分别计算各评价对象与最优方案与最劣方案之间的距离,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
1.1 第一步:将原始矩阵正向化
所谓的正向化,就是要将所有的指标类型统一转化为极大型指标。(注意:转换的函数形式不唯一)
- 极大型指标:数值越大越好的指标,如成绩。
- 极小型指标:数值越小越好的指标,如争吵次数。
下表展示最常见的四种指标:
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型指标 | 越大越好 | 成绩、GDP增速、企业利润 |
极小型指标 | 越小越好 | 费用、坏品率、污染程度 |
中间型指标 | 越接近某个值越好 | 水质量评估时的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物量 |
1.1.1 极小型指标->极大型指标
转换方法:
- max-x
- 如果所有的元素都是正数,也可以使用 1 x \frac{1}{x} x1。
示例如下表:
姓名 | 成绩 | 与他人争吵次数 | 正向化后的争吵次数 |
---|---|---|---|
小明 | 89 | 2 | 1 |
小王 | 60 | 0 | 3 |
小张 | 74 | 1 | 2 |
小闵 | 99 | 3 | 0 |
指标类型 | 极大型 | 极小型 | 极大型 |
1.1.2 中间型指标->极大型指标
转换方法:
{ x i x_{i} xi}是一组中间型指标序列,且最佳的数值为 x b e s t x_{best} xbest,那么正向化的公式如下: M = m a x { ∣ x i − x b e s t ∣ } , x i ′ = 1 − ∣ x i − x b e s t ∣ M M=max\{|x_{i}-x_{best}|\},xi'=1-\frac{|x_{i}-x_{best}|}{M} M=max{∣xi−xbest∣},xi′=1−M∣xi−xbest∣
示例如下:
PH值(转换前) | PH值(转换后) |
---|---|
6 | 1 − ∣ 6 − 7 2 ∣ = 1 2 1-|\frac{6-7}{2}|=\frac{1}{2} 1−∣26−7∣=21 |
7 | 1 − ∣ 7 − 7 2 ∣ = 1 1-|\frac{7-7}{2}|=1 1−∣27−7∣=1 |
8 | 1 − ∣ 8 − 7 2 ∣ = 1 2 1-|\frac{8-7}{2}|=\frac{1}{2} 1−∣28−7∣=21 |
9 | 1 − ∣ 9 − 7 2 ∣ = 0 1-|\frac{9-7}{2}|=0 1−∣29−7∣=0 |
x b e s t = 7 x_{best}=7 xbest=7 $M=max{ | 6-7 |
1.1.3 区间型指标->极大型指标
转换方法:
{ x i x_{i} xi}是一组中间型指标序列,且最佳区间为 [ a , b ] [a,b] [a,b],那么正向化公式如下: M = m a x { a − m i n { x i } , m a x { x i } − b } , x i ′ = { 1 − a − x M , x < a 1 , a ≤ x ≤ b 1 − x − b M , x > b \begin{equation} M=max\{a-min\{x_{i}\},max\{x_{i}\}-b\} \end{equation} ,x_{i}'=\begin{cases} 1-\frac{a-x}{M},x<a \\ 1 \qquad ,a≤x≤b \\ 1-\frac{x-b}{M},x>b\end{cases} M=max{a−min{xi},max{xi}−b},xi′=⎩ ⎨ ⎧1−Ma−x,x<a1,a≤x≤b1−Mx−b,x>b
示例如下:
体温(转换前) | 体温(转换后) |
---|---|
35.2 | 0.4286 |
35.8 | 0.8571 |
36.6 | 1 |
37.1 | 0.9286 |
37.8 | 0.4286 |
38.4 | 0 |
本题中, a = 36 , b = 37 , M = m a x { 36 − 35.2 , 38.4 − 37 } = 1.4 , a=36,b=37,M=max\{36-35.2,38.4-37\}=1.4, a=36,b=37,M=max{36−35.2,38.4−37}=1.4,每个数据带入公式转换即可。 |
1.2 第二步:正向化矩阵标准化
目的:标准化是为了消除不同指标量纲的影响。
转换方法:
假设有n个要评价的对象,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
]
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}
X=
x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm
那么,对其标准化的矩阵记作Z,Z中每一个元素:
z
i
j
=
x
i
j
∑
i
=
1
n
x
i
j
2
z_{ij}=\frac{x_{ij}}{\sqrt{\sum_{i=1}^n}x_{ij}^2}
zij=∑i=1nxij2xij
即
每一个元素
该元素所在列的元素平方和
\frac{每一个元素}{\sqrt{该元素所在列的元素平方和}}
该元素所在列的元素平方和每一个元素
1.3 计算得分并归一化
转换方法:
假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z
=
[
z
11
z
12
⋯
z
1
m
z
21
z
22
⋯
z
2
m
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
m
]
Z=\begin{bmatrix} z_{11} & z_{12} & \cdots & z_{1m} \\ z_{21} & z_{22} & \cdots & z_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ z_{n1} & z_{n2} & \cdots & z_{nm} \\ \end{bmatrix}
Z=
z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm
定义最大值:
Z
+
=
(
Z
1
+
,
Z
2
+
,
.
.
.
,
Z
m
+
)
Z^{+}=(Z^{+}_{1},Z^{+}_{2},...,Z^{+}_{m})
Z+=(Z1+,Z2+,...,Zm+)
=
(
m
a
x
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
m
a
x
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
m
a
x
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
)
=(max\{z_{11},z_{21},\cdots,z_{n1}\},max\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,max\{z_{1m},z_{2m},\cdots,z_{nm}\})
=(max{z11,z21,⋯,zn1},max{z12,z22,⋯,zn2},⋯,max{z1m,z2m,⋯,znm})
即每一列元素中最大值构成的
1
×
n
1×n
1×n的行向量。
定义最小值:
Z
−
=
(
Z
1
−
,
Z
2
−
,
.
.
.
,
Z
m
−
)
Z^{-}=(Z^{-}_{1},Z^{-}_{2},...,Z^{-}_{m})
Z−=(Z1−,Z2−,...,Zm−)
=
(
m
i
n
{
z
11
,
z
21
,
⋯
,
z
n
1
}
,
m
i
n
{
z
12
,
z
22
,
⋯
,
z
n
2
}
,
⋯
,
m
i
n
{
z
1
m
,
z
2
m
,
⋯
,
z
n
m
}
)
=(min\{z_{11},z_{21},\cdots,z_{n1}\},min\{z_{12},z_{22},\cdots,z_{n2}\},\cdots,min\{z_{1m},z_{2m},\cdots,z_{nm}\})
=(min{z11,z21,⋯,zn1},min{z12,z22,⋯,zn2},⋯,min{z1m,z2m,⋯,znm})
即每一列元素中最小值构成的
1
×
n
1×n
1×n的行向量。
定义第
i
(
i
=
1
,
2
,
⋯
,
n
)
i(i=1,2,\cdots,n)
i(i=1,2,⋯,n)个评价对象与最大值的距离:
D
i
+
=
∑
j
=
1
m
(
Z
j
+
−
z
i
j
)
2
D_{i}^{+}=\sqrt{\sum_{j=1}^m(Z_{j}^{+}-z_{ij})^2}
Di+=j=1∑m(Zj+−zij)2
定义第
i
(
i
=
1
,
2
,
⋯
,
n
)
i(i=1,2,\cdots,n)
i(i=1,2,⋯,n)个评价对象与最小值的距离:
D
i
−
=
∑
j
=
1
m
(
Z
j
−
−
z
i
j
)
2
D_{i}^{-}=\sqrt{\sum_{j=1}^m(Z_{j}^{-}-z_{ij})^2}
Di−=j=1∑m(Zj−−zij)2
那么我们可以计算得出第
i
(
i
=
1
,
2
,
⋯
,
n
)
i(i=1,2,\cdots,n)
i(i=1,2,⋯,n)个评价对象未归一化的得分:
S
i
=
D
i
−
D
i
−
+
D
i
+
S_{i}=\frac{D_{i}^{-}}{D_{i}^{-}+D_{i}^{+}}
Si=Di−+Di+Di−
很明显有
0
≤
S
i
≤
1
0≤S_{i}≤1
0≤Si≤1,且
S
i
S_{i}
Si越大,
D
i
−
D_{i}^{-}
Di−越大,越接近最大值。
上述计算过程整体而言可以用如下简洁语言描述出来:
z
与最小值的距离
z
与最小值的距离
+
z
与最大值的距离
\frac{z与最小值的距离}{z与最小值的距离+z与最大值的距离}
z与最小值的距离+z与最大值的距离z与最小值的距离
2 例题
题目:评价下表中20条河流的水质情况。
注:含氧量越高越好;PH值接近7越好;细菌总数越少越好;植物性营养物量介于10-20之间最佳。
河流 | 含氧量(ppm) | PH值 | 细菌总数(个/mL) | 植物性营养物量(ppm) |
---|---|---|---|---|
A | 4.69 | 6.59 | 51 | 11.94 |
B | 2.03 | 7.86 | 19 | 6.46 |
C | 9.11 | 6.31 | 46 | 8.91 |
D | 8.61 | 7.05 | 46 | 26.43 |
E | 7.13 | 6.5 | 50 | 23.57 |
F | 2.39 | 6.77 | 38 | 24.62 |
G | 7.69 | 6.79 | 38 | 6.01 |
H | 9.3 | 6.81 | 27 | 31.57 |
I | 5.45 | 7.62 | 5 | 18.46 |
J | 6.19 | 7.27 | 17 | 7.51 |
K | 7.93 | 7.53 | 9 | 6.52 |
L | 4.4 | 7.28 | 17 | 25.3 |
M | 7.46 | 8.24 | 23 | 14.42 |
N | 2.01 | 5.55 | 47 | 26.31 |
O | 2.04 | 6.4 | 23 | 17.91 |
P | 7.73 | 6.14 | 52 | 15.72 |
Q | 6.35 | 7.58 | 25 | 29.46 |
R | 8.29 | 8.41 | 39 | 12.02 |
S | 3.54 | 7.27 | 54 | 3.16 |
T | 7.44 | 6.26 | 8 | 28.41 |
指标类型 | 极大型 | 中间型 | 极小型 | 区间型 |
代码求解:详情见文件夹中的topsis.m文件。
注:正向化矩阵X可以放在文章附录中。