C.L.Hwang和K.Yoon于1981年首次提出TOPSIS(Technique for Order Preference by Similarity to an ideal Solution),可翻译为逼近理想排序法,国内常简称为优劣解距离法。
TOPSIS法是一种常用的综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。
基本过程为先将原始数据矩阵统一指标类型(正向化处理)得到正向化的矩阵,再对正向化的矩阵进行标准化处理以消除各指标量纲的影响,并找到有限方案中的最优方案和最劣方案,获得各评价对象与最优方案的相对接近程度,以此作为评价优劣的依据。该方法对数据分布及样本含量没有严格限制,数据计算简单易行。
小明同学宿舍共有四名同学,他们第一学期的高数成绩如下表所示:
姓名 | 成绩 |
---|---|
小明 | 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 |
因为排名是越小越好,而评分是越大越好,所以对排名进行了修改,把排名也变成越大越好。
问题:排名无法反映各位同学成绩的相对大小,只要排名不变(得分可以变化),他们的得分就没有变化。
姓名 | 成绩 | 排名 | 修正后的排名 | 评分 |
---|---|---|---|---|
小明 | 89 | 2 | 3 | 3/10=0.3 |
小王 | 4 | 1 | 1/10=0.1 | |
小张 | 74 | 3 | 2 | 2/10=0.2 |
清风 | 1 | 4 | 4/10=0.4 |
最高成绩max:99,最低成绩min:60,构造评分公式: x − min max − min \dfrac{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/2.1=0 |
小张 | 74 | (74-60)/(99-60)=0.36 | 0.36/2.1=0.17 |
清风 | 99 | (99-60)/(99-60)=1 | 1/2.1=0.48 |
使用这种评分方式有个特点,就是最高分永远都是1,最低分永远都是0,而其他得分则介于0-1之间。
由于考试成绩是有下限0和上限100,我们也可以用卷面的最低分和最高分计算评分,但是并不推荐。
三点解释:
新增加了一个指标,现在要综合评价四位同学,并为他们进行评分。
姓名 | 成绩 | 与他人争吵的次数 |
---|---|---|
小明 | 89 | 2 |
小王 | 60 | 0 |
小张 | 74 | 1 |
清风 | 99 | 3 |
成绩越大越好,这样的指标称为极大型指标(效益型指标),与他人争吵次数越少(越小)越好,这样的指标称为极小型指标(成本型指标)。
极小型指标转换为极大型指标的公式: max − x \max-x max−x。
姓名 | 成绩 | 与他人争吵的次数 | 正向化的争吵次数 |
---|---|---|---|
小明 | 89 | 2 | 1 |
小王 | 60 | 0 | 3 |
小张 | 74 | 1 | 2 |
清风 | 99 | 3 | 0 |
指标类型 | 极大型 | 极小型 | 极大型 |
指标的量纲会对评分产生较大的影响,比如1km,如果用“m”这个单位来表示,就是1000米,这样数值就扩大了1000倍,就会影响评分结果,不同的量纲则对应不同的结果、不同的评分。
为了消去不同指标量纲的影响,需要对已经正向化的矩阵进行标准化处理。
假设有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 ] {\bf X}= \begin{bmatrix} x_{11}&x_{12}&\cdots&x_{\rm 1m}\\ x_{21}&x_{22}&\cdots&x_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ x_{\rm n1}&x_{\rm n2}&\cdots&x_{\rm nm}\\ \end{bmatrix} X=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
那么,对其标准化的矩阵记为 Z \bf Z Z, Z \bf Z Z中的每一个元素: z i j = x i j / ∑ i = 1 n x i j 2 \rm z_{ij}=x_{ij}\bigg/\sqrt{\sum\limits_{i=1}^nx_{ij}^2} zij=xij/i=1∑nxij2。
[ 89 1 60 3 74 2 99 0 ] 标 准 化 ⟹ [ 0.5437 0.2673 0.3665 0.8018 0.4520 0.5345 0.6048 0 ] \begin{bmatrix} 89&1\\ 60&3\\ 74&2\\ 99&0 \end{bmatrix} \begin{aligned} 标准化\\ \huge\Longrightarrow \end{aligned} \begin{bmatrix} 0.5437&0.2673\\ 0.3665&0.8018\\ 0.4520&0.5345\\ 0.6048&0 \end{bmatrix} ⎣⎢⎢⎡896074991320⎦⎥⎥⎤标准化⟹⎣⎢⎢⎡0.54370.36650.45200.60480.26730.80180.53450⎦⎥⎥⎤
我们从一维(一个指标)的评分公式推广到多维(多个指标):
x − min max − min = x − min ( max − x ) + ( x − min ) = x 与 最 小 值 的 距 离 x 与 最 大 值 的 距 离 + x 与 最 小 值 的 距 离 \frac{x-\min}{\max-\min}=\frac{x-\min}{(\max-x)+(x-\min)}=\frac{x与最小值的距离}{x与最大值的距离+x与最小值的距离} max−minx−min=(max−x)+(x−min)x−min=x与最大值的距离+x与最小值的距离x与最小值的距离
在多个指标的情况下,最大值与最小值的距离通常和 x x x与最大值的距离加 x x x与最小值的距离是不相等的,只有在一个指标的情况才是恒相等的。
假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 x n 2 ⋯ z n m ] {\bf Z}= \begin{bmatrix} z_{11}&z_{12}&\cdots&z_{\rm 1m}\\ z_{21}&z_{22}&\cdots&z_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ z_{\rm n1}&x_{\rm n2}&\cdots&z_{\rm nm}\\ \end{bmatrix} Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮xn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
定义最大值:
Z + = ( Z 1 + , Z 2 + , ⋯ , Z m + ) = ( max { z 11 , z 21 , ⋯ , z m 1 } , max { z 12 , z 22 , ⋯ , z m 2 } , ⋯ , max { z 1 n , z 2 n , ⋯ , z m n } ) \begin{aligned} Z^+&=(Z^+_1,Z^+_2,\cdots,Z^+_{\rm m})\\ &=(\max\{z_{11},z_{21},\cdots,z_{\rm m1}\},\max\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\max\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z+=(Z1+,Z2+,⋯,Zm+)=(max{z11,z21,⋯,zm1},max{z12,z22,⋯,zm2},⋯,max{z1n,z2n,⋯,zmn})
定义最小值:
Z − = ( Z 1 − , Z 2 − , ⋯ , Z m − ) = ( min { z 11 , z 21 , ⋯ , z m 1 } , min { z 12 , z 22 , ⋯ , z m 2 } , ⋯ , min { z 1 n , z 2 n , ⋯ , z m n } ) \begin{aligned} Z^-&=(Z^-_1,Z^-_2,\cdots,Z^-_{\rm m})\\ &=(\min\{z_{11},z_{21},\cdots,z_{\rm m1}\},\min\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\min\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z−=(Z1−,Z2−,⋯,Zm−)=(min{z11,z21,⋯,zm1},min{z12,z22,⋯,zm2},⋯,min{z1n,z2n,⋯,zmn})
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^+-z_{ij})^2} Di+=j=1∑m(Zj+−zij)2
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^--z_{ij})^2} Di−=j=1∑m(Zj−−zij)2
那么,我们可以计算第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象未归一化的得分:
S i = D i − D i + + D i − \rm S_i=\frac{D^-_i}{D^+_i+D^-_i} Si=Di++Di−Di−
显然 0 ≤ S i ≤ 1 \rm 0\le S_i\le1 0≤Si≤1,且Si越大D+i越小,即越接近最大值。
回到引例中,最大值:[0.6048,0.8018],最小值:[0.3665,0]。
姓名 | D+ | D- | 未归一化的得分 | 归一化后的得分 | 排名 |
---|---|---|---|---|---|
小明 | 0.5380 | 0.3206 | 0.3734 | 0.1857 | 3 |
小王 | 0.2382 | 0.8018 | 0.7709 | 0.3834 | 1 |
小张 | 0.3087 | 0.5413 | 0.6375 | 0.3170 | 2 |
清风 | 0.8018 | 0.2382 | 0.2291 | 0.1139 | 4 |
最常见的四种指标:
指标名称 | 指标特点 | 例子 |
---|---|---|
极大型(效益型)指标 | 越大(多)越好 | 成绩、GDP增速、企业利润 |
极小型(成本型)指标 | 越小(越好) | 费用、坏品率、污染程度 |
中间型指标 | 越接近某个值越好 | 水质量评估是的PH值 |
区间型指标 | 落在某个区间最好 | 体温、水中植物性营养物量 |
所谓的将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。(转化的函数形式可以不唯一)
公式为max-x,如果所有的元素均为正数,那么也可以使用 1 x \dfrac{1}{x} x1。
中间型指标:指标值既不要太大也不要太小,取某特定值最好(如水质量评估PH值)。
{xi}是一组中间型指标序列,且最佳的数值为xbest,那么正向化的公式如下:
M = max { ∣ x i − x b e s t ∣ } , x ~ i = 1 − ∣ x i − x b e s t ∣ M M=\max\{|x_i-x_{\rm best}|\},\widetilde{x}_{\rm i}=1-\frac{|x_{\text i}-x_{\rm best}|}M M=max{∣xi−xbest∣},x i=1−M∣xi−xbest∣
例如PH值的正向化(xbest=7):
PH值(转化前) | PH值(转化后) |
---|---|
6 | 1 − 6 − 7 2 = 1 2 \large1-\frac{6-7}2=\frac12 1−26−7=21 |
7 | 1 − 7 − 7 2 = 1 \large1-\frac{7-7}2=1 1−27−7=1 |
8 | 1 − 8 − 7 2 = 1 2 \large1-\frac{8-7}2=\frac12 1−28−7=21 |
9 | 1 − 9 − 7 2 = 0 \large1-\frac{9-7}2=0 1−29−7=0 |
对于正向化公式的理解:
x i − x b e s t x_i-x_{\rm best} xi−xbest是表示与最优值的距离,这个距离越小越好,是极小型指标,然后在将其转化为极大型指标,我们先除以最大值M将其变换到0到1之间,然后再用此时的最大值1减去变换后的值,将其转化为极大型指标。
区间型指标:指标落在某个区间内最好,例如人的体温在36°~37°这个区间比较好。
{xi}是一组区间型指标序列,且最佳的区间为 [ a , b ] [a,b] [a,b],那么正向化的公式如下:
M = max { a − min { x i } , max { x i } − b } x ~ i = { 1 − a − x i M x < a 1 a ≤ x i ≤ b 1 − x i − b M x > b \text M=\max\{a-\min\{x_\text i\},\max\{x_\text i\}-b\}\\ \large\widetilde{x}_\text i= \begin{cases} \large1-\frac{a-x_i}{\text M}&x b\\ \end{cases} M=max{a−min{xi},max{xi}−b}x i=⎩⎪⎪⎨⎪⎪⎧1−Ma−xi11−Mxi−bx<aa≤xi≤bx>b
例如体温的正向化( a = 36 , b = 37 a=36,b=37 a=36,b=37,M=1.4):
体温(转换前) | 体温(转化后) |
---|---|
35.2 | 0.4286 |
35.8 | 0.8571 |
36.6 | 1 |
37.1 | 0.9286 |
37.8 | 0.4286 |
38.4 | 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 ] {\bf X}= \begin{bmatrix} x_{11}&x_{12}&\cdots&x_{\rm 1m}\\ x_{21}&x_{22}&\cdots&x_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ x_{\rm n1}&x_{\rm n2}&\cdots&x_{\rm nm}\\ \end{bmatrix} X=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm⎦⎥⎥⎥⎤
那么,对其标准化的矩阵记为 Z \bf Z Z, Z \bf Z Z中的每一个元素: z i j = x i j / ∑ i = 1 n x i j 2 \rm z_{ij}=x_{ij}\bigg/\sqrt{\sum\limits_{i=1}^nx_{ij}^2} zij=xij/i=1∑nxij2。
假设有n个要评价的对象,m个评价指标的标准化矩阵:
Z = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 x n 2 ⋯ z n m ] {\bf Z}= \begin{bmatrix} z_{11}&z_{12}&\cdots&z_{\rm 1m}\\ z_{21}&z_{22}&\cdots&z_{\rm 2m}\\ \vdots&\vdots&\ddots&\vdots\\ z_{\rm n1}&x_{\rm n2}&\cdots&z_{\rm nm}\\ \end{bmatrix} Z=⎣⎢⎢⎢⎡z11z21⋮zn1z12z22⋮xn2⋯⋯⋱⋯z1mz2m⋮znm⎦⎥⎥⎥⎤
定义最大值:
Z + = ( Z 1 + , Z 2 + , ⋯ , Z m + ) = ( max { z 11 , z 21 , ⋯ , z m 1 } , max { z 12 , z 22 , ⋯ , z m 2 } , ⋯ , max { z 1 n , z 2 n , ⋯ , z m n } ) \begin{aligned} Z^+&=(Z^+_1,Z^+_2,\cdots,Z^+_{\rm m})\\ &=(\max\{z_{11},z_{21},\cdots,z_{\rm m1}\},\max\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\max\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z+=(Z1+,Z2+,⋯,Zm+)=(max{z11,z21,⋯,zm1},max{z12,z22,⋯,zm2},⋯,max{z1n,z2n,⋯,zmn})
定义最小值:
Z − = ( Z 1 − , Z 2 − , ⋯ , Z m − ) = ( min { z 11 , z 21 , ⋯ , z m 1 } , min { z 12 , z 22 , ⋯ , z m 2 } , ⋯ , min { z 1 n , z 2 n , ⋯ , z m n } ) \begin{aligned} Z^-&=(Z^-_1,Z^-_2,\cdots,Z^-_{\rm m})\\ &=(\min\{z_{11},z_{21},\cdots,z_{\rm m1}\},\min\{z_{12},z_{22},\cdots,z_{\rm m2}\},\cdots,\min\{z_{1\rm n},z_{2\rm n},\cdots,z_{\rm mn}\}) \end{aligned} Z−=(Z1−,Z2−,⋯,Zm−)=(min{z11,z21,⋯,zm1},min{z12,z22,⋯,zm2},⋯,min{z1n,z2n,⋯,zmn})
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^+-z_{ij})^2} Di+=j=1∑m(Zj+−zij)2
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m(Z_j^--z_{ij})^2} Di−=j=1∑m(Zj−−zij)2
那么,我们可以计算第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象为归一化的得分:
S i = D i − D i + + D i − \rm S_i=\frac{D^-_i}{D^+_i+D^-_i} Si=Di++Di−Di−
显然 0 ≤ S i ≤ 1 \rm 0\le S_i\le1 0≤Si≤1,且Si越大D+i越小,即越接近最大值。
我们可以将得分归一化: S ~ i = S i / ∑ i = 1 n S i \widetilde{\rm S}_\text i=\rm S_i\bigg/\sum\limits_{i=1}^nS_i S i=Si/i=1∑nSi,这样的话 ∑ i = 1 n S ~ i = 1 \rm\sum\limits_{i=1}^n\widetilde S_i=1 i=1∑nS i=1。(得分归一化不影响排序)
归一化和标准化的区别:
归一化的计算步骤也可以消去量纲的影响,但更多的时候,我们进行归一化的目的是为了让我们的结果更容易解释,或者说让我们对结果有一个更加清晰直观的印象。例如将得分归一化后可限制在0-1这个区间,对于区间的每一个得分我们很容易得到其所处的比例位置。
我们以上构造的模型中各个指标的权重都是相同的,但是在实际生活中各个指标的重要性一般都是不同的,所以我们在计算得分的时候可以带入权重。假设m个指标的权重向量如下:
ω = [ ω 1 , ω 2 , ⋯ , ω n ] \omega=[\omega_1,\omega_2,\cdots,\omega_\text n] ω=[ω1,ω2,⋯,ωn]
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最大值的距离:
D i + = ∑ j = 1 m ω j ( Z j + − z i j ) 2 D^+_{\rm i}=\sqrt{\sum\limits_{j=1}^m\textcolor{red}{\omega_j}(Z_j^+-z_{ij})^2} Di+=j=1∑mωj(Zj+−zij)2
定义第 i ( i = 1 , 2 , ⋯ , n ) \rm i(i=1,2,\cdots,n) i(i=1,2,⋯,n)个评价对象与最小值的距离:
D i − = ∑ j = 1 m ω j ( Z j − − z i j ) 2 D^-_{\rm i}=\sqrt{\sum\limits_{j=1}^m\textcolor{red}{\omega_j}(Z_j^--z_{ij})^2} Di−=j=1∑mωj(Zj−−zij)2
计算得分和之前相同,就不在赘述了。
学习视频:[清风数学建模](【【强烈推荐】清风:数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学】 https://www.bilibili.com/video/BV1DW411s7wi/?p=3&share_source=copy_web&vd_source=7753752d7ab4aeaebba50d60304b652a),清风的视频讲解的比较细致,建模的步骤和思路也很清晰,而且还分享很多建模资料,还有对作业批改的视频,感觉做得很用心,看清风的视频学习建模也是一个不错的选择。