TOPSIS法–优劣解距离法
TOPSIS法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反应各评价方案之间的差距。
前面是根据例子来进行方法讲解,知识点在最后,想直接看知识点的同学可以直接翻到最后。
例子引入
小明寝室有4名同学,它们某一学期的高数成绩如下表所示:
姓名 | 成绩 |
---|---|
小明 | 89 |
小王 | 60 |
小李 | 74 |
小张 | 99 |
请你为这四名同学进行评分,该评分能合理的描述其高数成绩的高低。
方法一:
既然这里得到了成绩,我们就可以进行一个排名:
姓名 | 成绩 | 排名 | 修正后的排名 | 评分 |
---|---|---|---|---|
小明 | 89 | 2 | 3 | 3/10=0.3 |
小王 | 60 | 4 | 1 | 1/10=0.1 |
小李 | 74 | 3 | 2 | 2/10=0.2 |
小张 | 99 | 1 | 4 | 4/10=0.4 |
因为排名的数字越小越好,但是评分越高越好,所以我们进行排名修正后进行归一化的到评分。
但是这里有一个弊端,就是成绩可以随意修改而的分不变,这样得到的评分就和成绩的关联性不密切,无法客观进行评价。所以方法需要改进。
方法二:
在表中可以得到:
最高成绩max:99,最低成绩min:60,由此我们可以构造计算评分的公式:
x
−
m
i
n
m
a
x
−
m
i
n
\frac{x-min}{max-min}
max−minx−min
姓名 | 成绩 | 未归一化的评分 | 归一化的评分 |
---|---|---|---|
小明 | 89 | (89-60)/(99-60)=0.74 | 0.74/2.1=0.35 |
小王 | 60 | (60-60)/(99-60)=0 | 0/0.21=0 |
小李 | 74 | (74-60)/(99-60)=0.36 | 0.36/0.21=0.17 |
小张 | 99 | (99-60)/(99-60)=1 | 1/2.1=0.48 |
方法三:
在上面大家可能会想为什么不用卷面最高成绩100,和卷面最低成绩0呢?
x
−
0
100
−
0
\frac{x-0}{100-0}
100−0x−0
姓名 | 成绩 | 未归一化的评分 | 归一化的评分 |
---|---|---|---|
小明 | 89 | 0.89 | 0.28 |
小王 | 60 | 0.60 | 0.19 |
小李 | 74 | 0.74 | 0.23 |
小张 | 99 | 0.99 | 0.30 |
这样的话得出的评分会与成绩的关系性更强,但是相比于方法二有哪些不同呢?
① 方法二中最后一名的评分是0,第一名的评分是1,但是中间的数值没有太大影响,在实际操作时,比较的对象一般远大于两个,所以影响并不大。
② 比较的指标也不往往是一个方面,好比小王得了60分,第二种的评分是0,但是加入其他指标之后小王可能不再是最后一名,评分也就不再会是0。
③ 我认为是最重要的一点,很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速,在遇到这种没有理论最大值的指标时,我们无法使用其上下限来进行计算,也就是无法使用方法三。
所以我们得到构造计算评分的公式为:
x
−
m
i
n
m
a
x
−
m
i
n
\frac{x-min}{max-min}
max−minx−min
对于多个指标的处理方法
下面开始多个指标的处理,如下表所示,我们应该怎样进行评分和排名呢?
姓名 | 成绩 | 逃课次数 |
---|---|---|
小明 | 89 | 2 |
小王 | 60 | 0 |
小李 | 74 | 1 |
小张 | 99 | 3 |
一、正向化处理
姓名 | 成绩 | 逃课次数 |
---|---|---|
小明 | 89 | 2 |
小王 | 60 | 0 |
小李 | 74 | 1 |
小张 | 99 | 3 |
成绩是越高(大)越好,这样的指标称为极大型指标(效益型指标)
逃课次数是越少(越小)越好,这样的指标称为极小型指标(成本型指标)
指标正向化:在使用计算评分公式时需要将所有的指标转化为极大型指标。极小型指标转化为极大型指标的公式:
m
a
x
−
x
max-x
max−x
姓名 | 成绩 | 逃课次数 | 正向化后的逃课次数 |
---|---|---|---|
小明 | 89 | 2 | 1 |
小王 | 60 | 0 | 3 |
小李 | 74 | 1 | 2 |
小张 | 99 | 3 | 0 |
指标类型 | 极大型 | 极小型 | 极大型 |
二、标准化处理
经正向化的到的表格还是不能直接使用,因为有量纲的影响。为了消去不同指标量纲的影响,需要对已经正向化的矩阵进行标准化处理
姓名 | 成绩 | 正向化后的逃课次数 |
---|---|---|
小明 | 89 | 1 |
小王 | 60 | 3 |
小李 | 74 | 2 |
小张 | 99 | 0 |
指标类型 | 极大型 | 极大型 |
标准化处理计算公式
假设有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= \left[ \begin{matrix} 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{matrix} \right]
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}^nx_{ij}^2}}
zij=∑i=1nxij2xij
按照公式对我们已经得出的矩阵进行标准化变换
[
89
1
60
3
74
2
99
0
]
\left[ \begin{matrix} 89 & 1 \\ 60 & 3\\ 74& 2\\ 99&0 \end{matrix} \right]
⎣⎢⎢⎡896074991320⎦⎥⎥⎤
标准化之后得到的矩阵为:
[
0.5437
0.2673
0.3665
0.8018
0.4520
0.5345
0.6048
0
]
\left[ \begin{matrix} 0.5437 & 0.2673 \\ 0.3665 & 0.8018\\ 0.4520& 0.5345\\ 0.6048&0 \end{matrix} \right]
⎣⎢⎢⎡0.54370.36650.45200.60480.26730.80180.53450⎦⎥⎥⎤
三、计算得分
当我们只有一个指标时计算评分的公式已经给出,我们对其变形,并推测其在多个指标时的公式
x
−
m
i
n
m
a
x
−
m
i
n
=
x
−
m
a
x
(
m
a
x
−
x
)
+
(
x
−
m
i
n
)
\frac{x-min}{max-min}=\frac{x-max}{(max-x)+(x-min)}
max−minx−min=(max−x)+(x−min)x−max
可
以
看
作
:
x
与
最
小
值
的
距
离
x
与
最
大
值
的
距
离
+
x
与
最
小
值
的
距
离
可以看作:\frac{x与最小值的距离}{x与最大值的距离+x与最小值的距离}
可以看作:x与最大值的距离+x与最小值的距离x与最小值的距离
下面我们开始定义最大值、最小值、对象与最大值、最小值之间的距离
对于标准化后的矩阵Z有:
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= \left[ \begin{matrix} 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{matrix} \right]
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
定义最大值:
Z
+
=
(
Z
1
+
,
Z
2
+
,
.
.
.
,
Z
m
+
)
Z^+=(Z_1^+,Z_2^+,...,Z_m^+)
Z+=(Z1+,Z2+,...,Zm+)
定义最小值:
Z
−
=
(
Z
1
−
,
Z
2
−
,
.
.
.
,
Z
m
−
)
Z^-=(Z_1^-,Z_2^-,...,Z_m^-)
Z−=(Z1−,Z2−,...,Zm−)
定义第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)个评价对象与最小值的距离为:
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)个评价对象未归一化的得分:
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
,
且
S
i
越
大
D
i
+
越
小
,
即
越
接
近
最
大
值
。
0\leq S_i\leq 1,且S_i越大D_i^+越小,即越接近最大值。
0≤Si≤1,且Si越大Di+越小,即越接近最大值。
下面我们根据上面的公式进行评分和排名
姓名 | 成绩 | 正向化后的争吵次数 |
---|---|---|
小明 | 0.5437 | 0.2673 |
小王 | 0.3665 | 0.8018 |
小李 | 0.4520 | 0.5345 |
小张 | 0.6048 | 0 |
得到最大值:[0.6048,0.8018],最小值[0.3665,0]
开始计算距离:
D
小
明
+
=
(
0.6048
−
0.5437
)
2
+
(
0.8018
−
0.2673
)
2
=
0.5380
D_{小明}^+=\sqrt{(0.6048-0.5437)^2+(0.8018-0.2673)^2}=0.5380
D小明+=(0.6048−0.5437)2+(0.8018−0.2673)2=0.5380
D
小
明
−
=
(
0.3665
−
0.5437
)
2
+
(
0
−
0.2673
)
2
=
0.3206
D_{小明}^-=\sqrt{(0.3665-0.5437)^2+(0-0.2673)^2}=0.3206
D小明−=(0.3665−0.5437)2+(0−0.2673)2=0.3206
D
小
王
+
=
(
0.6048
−
0.3665
)
2
+
(
0.8018
−
0.8018
)
2
=
0.2382
D_{小王}^+=\sqrt{(0.6048-0.3665)^2+(0.8018-0.8018)^2}=0.2382
D小王+=(0.6048−0.3665)2+(0.8018−0.8018)2=0.2382
D
小
王
−
=
(
0.3665
−
0.3665
)
2
+
(
0
−
0.8018
)
2
=
0.8018
D_{小王}^-=\sqrt{(0.3665-0.3665)^2+(0-0.8018)^2}=0.8018
D小王−=(0.3665−0.3665)2+(0−0.8018)2=0.8018
经计算后得到了每个同学的评分和排名:
姓名 | D+ | D- | 未归一化的得分 | 归一化后的得分 | 排名 |
---|---|---|---|---|---|
小明 | 0.5380 | 0.3206 | 0.3734 | 0.1857 | 3 |
小王 | 0.2382 | 0.8018 | 0.7709 | 0.3834 | 1 |
小李 | 0.3078 | 0.5413 | 0.6375 | 0.3170 | 2 |
小张 | 0.8108 | 0.2382 | 0.2291 | 0.1139 | 4 |
TOPSIS方法总结
第一步:将原始矩阵正向化
最常见的四种指标:
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型(效益性)指标 | 越大(多)越好 | 成绩、GDP增速、企业利润 |
极小型(成本型)指标 | 越小(少)越好 | 费用、坏品率、污染程度 |
中间型指标 | 越接近某个值越好 | 水质评估时的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物料 |
极
小
型
指
标
转
换
为
极
大
型
指
标
的
公
式
:
m
a
x
−
x
极小型指标转换为极大型指标的公式:max-x
极小型指标转换为极大型指标的公式:max−x
中间型指标转换为极大型指标
有{xi}是一组中间型指标序列,且最佳的数值为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}|} , x_i^*=1-\frac{|x_i-x_{best}|}{M}
M=max∣xi−xbest∣,xi∗=1−M∣xi−xbest∣
区间型指标转换为极大型指标
有{xi}是一组中间型指标序列,且最佳的区间为[a,b],那么正向化的公式如下:
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 X^{*}_i=\left\{ \begin{array}{rcl} 1-\frac{a-x}{M} & & {x < a}\\ 1 & & {a \leq x \leq b}\\ 1-\frac{x-b}{M} & & {x>b} \end{array} \right. Xi∗=⎩⎨⎧1−Ma−x11−Mx−bx<aa≤x≤bx>b
第二步:将正向化矩阵标准化
矩阵标准化的目的是消除不同指标量纲的影响。
假设有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= \left[ \begin{matrix} 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{matrix} \right]
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}^nx_{ij}^2}}
zij=∑i=1nxij2xij
第三步:计算并归一化
对于标准化后的矩阵Z有:
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= \left[ \begin{matrix} 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{matrix} \right]
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
定义最大值:
Z
+
=
(
Z
1
+
,
Z
2
+
,
.
.
.
,
Z
m
+
)
Z^+=(Z_1^+,Z_2^+,...,Z_m^+)
Z+=(Z1+,Z2+,...,Zm+)
定义最小值:
Z
−
=
(
Z
1
−
,
Z
2
−
,
.
.
.
,
Z
m
−
)
Z^-=(Z_1^-,Z_2^-,...,Z_m^-)
Z−=(Z1−,Z2−,...,Zm−)
定义第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)个评价对象与最小值的距离为:
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)个评价对象未归一化的得分:
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
,
且
S
i
越
大
D
i
+
越
小
,
即
越
接
近
最
大
值
。
0\leq S_i\leq 1,且S_i越大D_i^+越小,即越接近最大值。
0≤Si≤1,且Si越大Di+越小,即越接近最大值。
带权重的TOPSIS
有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= \left[ \begin{matrix} 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{matrix} \right]
Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
可以使用层次分析法给这m个评价指标确定权重:
∑
j
=
1
m
w
j
=
1
\sum^m_{j=1}w_j=1
j=1∑mwj=1