R语言:TOPSIS综合评价法进行多属性最优方案选择

Python015

R语言:TOPSIS综合评价法进行多属性最优方案选择,第1张

一般地, TOPSIS综合评价法 主要包含两个步骤:计算权重和计算相对接近度。如需详细了解 TOPSIS综合评价法 的原理和方法,请自行百度,网上有许多非常详尽的原理说明和案例讲解。

根据熵权法确定各个指标的权重;计算各指标信息熵,指标的信息熵越小,则该指标表达信息的不确定性小,在综合评价中对决策的帮助更大,即应该有较大的权重。熵权法是一种客观的赋予权重的方法,它通过各个指标所提供的信息不确定性来确定各指标的权重

根据权重加权规范化指标属性矩阵后,确定正理想方案Amax和负理想方案 Amin,计算各备选方案与Amax 、Amin的距离,以评估与正负理想方案的接近程度,根据相对接近度确定优先次序。其中计算距离一般使用欧式距离。

按照惯例,导入需要使用的包 data.table 、 plyr 。然后载入使用的数据,我们简单看一下案例数据情况。

其中的字段target即为目标字段,我们需要对其含有的8个方案(A~H)进行综合评价排序,选择其中的最优方案。该数据集中的指标均为正向指标。正向指标表示指标的数值越高越好,负向指标则表示指标的数值越低越好,这决定了该指标在进行权重计算时的处理方式。

计算权重的第一步是计算各个指标的熵值,由于我们用到的指标均是正向指标,所以选择自定义函数 entropy_positive 即可。如果指标既存在正向指标又存在负向指标,则可分开进行计算。自定义函数情况如下:

调用函数并完成权重的计算,x1~x8的权重依次为:11.10%、6.61%、28.19%、7.08%、11.88%、8.11%、11.94%、15.09%,计算过程如下:

在将指标向量规范化后,利用熵值法得到的权重计算得到加权标准化矩阵,然后提取正理想方案和负理想方案并计算出各个方案距离正负理想方案的距离,最终根据计算得到距离比值进行排序。具体计算过程如下:

至此,我们就完成了用 TOPSIS综合评价法 进行多对象多指标的最优对象选择,输出的结果如下,显然在这八个方案中,方案A为最优方案。

一、分析前准备

1.研究背景

TOPSIS法用于研究评价对象与‘理想解’的距离情况,结合‘理想解’(正理想解和负理想解),计算得到最终接近程度C值。熵权TOPSIS法核心在于TOPSIS,但在计算数据时,首先会利用熵值(熵权法)计算得到各评价指标的权重,并且将评价指标数据与权重相乘,得到新的数据,利用新数据进行TOPSIS法研究。

通俗地讲,熵权TOPSIS法是先使用熵权法得到新数据newdata(数据成熵权法计算得到的权重),然后利用新数据newdata进行TOPSIS法研究。

例如:当前有一个项目进行招标,共有4个承包商,分别是A,B,C,D厂。由于招标需要考虑多个因素,各个方案指标的优劣程度也并不统一。为了保证评价过程中的客观、公正性。因此,考虑通过熵权TOPSIS法,对各个方案进行综合评价,从而选出最优方案。

2.数据格式

熵权TOPSIS法用于研究指标与理想解的接近度情况。1个指标占用1列数据。1个研究对象为1行,但研究对象在分析时并不需要使用,SPSSAU默认会从上到下依次编号。

二、SPSSAU操作

(1)登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。

(2)拖拽分析项

在“综合评价”模块中选择“熵权topsis”方法,将分析项拖拽到右侧分析框中,点击“开始分析”即可。

三、SPSSAU数据处理

1.数据正向化/逆向化处理

如果数据中有逆向指标(数字越大反而越不好的意思),此时需要使用‘SPSSAU数据处理->生成变量’的‘逆向化’功能处理。让数据变成正向指标(即数字越大越好的意思)。

‘逆向化’的数据计算公式为:(Max-X)/(Max-Min),明显可以看出,针对逆向指标进行‘逆向化’处理后,数据就会变成正向指标。

【SPSSAU】数据无量纲化处理 | 数据分析常见问题解答

2.数据标准化处理

针对数据进行标准化处理,目的在于解决量纲化问题。常见的标准化处理方法有:‘归一化’,‘区间化’,‘均值化’等。

(1)‘归一化’将所有数据压缩在0到1之间;

(2)‘区间化‘将所有数据压缩在自己设定的区间;

(3)‘均值化’= 当前值 / 平均值。

补充说明:

一般而言,如果数据全部都大于0,建议使用‘均值化’;如果数据中有负数或者0,建议做‘区间化’让数据限定在一个区间(SPSSAU默认1~2之间);当然也可以考虑‘归一化’,让数据全部介于0~1之间。

具体标准化的处理方式有很多种,具体结合文献和自身数据选择使用即可。不同的处理方式肯定会带来不同的结果,但结论一般不会有太大的偏倚。

(如果数据进行了正/逆向化处理就不需要再进行标准化处理。)

四、SPSSAU分析

背景:当前有6个国家经济技术开发区,分别在政务系统的4个指标上的评分值。数字越大表示指标越优。当前希望利用熵权TOPSIS法评价出6个开发区的政务系统排名情况。原始数据如下:

本案例数据中包括4个政务系统的评价指标,而且全部都是正向指标,因此不需要进行正向化或者逆向化处理。以及接着数据标准化解决量纲问题上,本例子使用‘均值化’处理方法。操作为SPSSAU数据处理->生成变量:

完成数据‘均值化’处理后,直接开始进行‘熵值TOPSIS法’分析,操作如下图:

1.熵值法计算权重结果汇总

上表格展示出4个政务系统指标的权重值,明显可以看出指标3的权重更大。但权重大小仅仅是过程值,熵值TOPSIS分析重心在于TOPSIS法计算出相对接近度。权重值与数据相乘,得到新数据newdata,这一过程是SPSSAU自动完成,利用newdata进行TOPSIS法计算。

2.TOPSIS评价计算结果

从上表可知,利用熵权法后加权生成的数据(算法自动完成)进行TOPSIS分析,针对4个指标(MC_政务系统指标1, MC_政务系统指标2, MC_政务系统指标3, MC_政务系统指标4),进行TOPSIS评价,同时评价对象为6个(样本量数量即为评价对象数量);

TOPSIS法首先找出评价指标的正负理想解值(A+和A-),接着计算出各评价对象分别与正负理想解的距离值D+和D-。根据D+和D-值,最终计算得出各评价对象与最优方案的接近程度(C值),并可针对C值进行排序。

最终从上表可知:评价对象4,即开发区4,它的相对接近度C值最高为0.9995,因而说明开发区4在政务系统上的表现最优;其次是开发区3,相对接近度C起来0.8141。开发区1的政务系统表现最差。

3.正负理想解

4.描述统计

分析数据完整并无缺失等,可通过上表格查看各分析项的平均值或标准差值等。从上表格可以看出四个分析项的样本量均为6,平均值均为1。

五、其他说明

1.如果分析数据中有负数或者0值如何办?

如果分析数据有负数或者0,这会导致无法进行熵值法计算,SPSSAU算法默认会进行‘非负平移’处理。SPSSAU非负平移功能是指,如果某列(某指标)数据出现小于等于0,则让该列数据同时加上一个‘平移值’(该值为某列数据最小值的绝对值+0.01),以便让数据全部都大于0,因而满足算法要求。

2. 面板数据如何进行熵值TOPSIS法?

熵值TOPSIS法的原理是先进行熵值法,然后再进行TOPSIS法。无论是面板或者非面板数据,均可正常进行熵值TOPSIS法研究,并不需要特别处理。(当然面板数据进行分析时,也可以先筛选出不同的年份,重复进行多次均可)。

六、总结

熵权TOPSIS法分别涉及熵权法和TOPSIS法;熵权法计算各评价指标的权重值,然后利用权重值乘原始数据,得到newdata。系统利用newdata进行TOPSIS法进行计算,最终得到各评价对象的接近程序C值,用于判断和衡量评价对象的优劣排序等。

今天的分享就到这里啦,更多干货请前往 SPSSAU 官网查看。

数学建模中有一类非常常见的问题:选择最优方案,被称为评价类问题。例如:携程、美团和飞猪,三个旅游平台哪个更适合新手旅游选择?苏州、杭州、南京哪个更适合端午节出游?班里哪位同学获得奖学金等等。要做出选择,首先需要知道有哪些评价指标,继续以选择旅游地为例,可以通过知网搜索相关文章or组内头脑风暴or利用网络搜索引擎资源,得到大家选择旅游地的考虑标准:风景、人文、拥挤程度等。在每个评价指标维度给方案评分,设定总分为5。“上有天堂,下有苏杭”可以认为苏州杭州的风景很好,于是给他们5分风景分,人文上南京作为六朝古都历史底蕴浓厚给5分。这类评价问题里每个方案的得分数据都是自己根据资料给出的,更适合层次分析法。而是否获得奖学金,可以根据各科成绩来筛选,数据客观存在,就可以使用下文提到的topsis方法。

TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简称为优劣解距离法。TOPSIS 法是一种常用的利用 原始数据 进行综合评价的方法,其基本原理,是通过检测评价对象与 最优解、最劣解 的距离来进行排序,若评价对象最靠近最优解同时又最远离最劣解,则为最好;否则不为最优。其中最优解的各指标值都达到各评价指标的最优值。最劣解的各指标值都达到各评价指标的最差值。以奖学金为例,假定是否获得奖学金只与语文、数学、英语这三科的成绩相关,你的成绩是80,90,100,而最好的成绩是100,100,100,最差的成绩是50,60,50。则你和最优解的距离为  ;和最劣解的距离为 。

step1:指标正向化。

具体在评价时会遇到的指标可以分成四类,①极大型指标,也称为效益型指标,数值越大越好,包括成绩、收入等②极小型指标,也称为成本型指标,数值越小越好,包括开销、死伤人数等③中间型指标,数值有一个中间的最优点,如ph值越接近7越好,血压越接近理想血压(收缩压120 mmHg,舒张压80 mmHg)越好④区间型指标,数值在一个区间内最好。如城市最优人口规模在1000到1200万之间(数字仅用来举例,无实际意义)。

根据不同类型的指标需要按照不同的公式进行正向化处理,即把所有指标转化为极大型。

极小型转化最容易,直接用max-x即可,若变量x为正数,也可直接取倒数。如开销最大是3000,x变量对应的开销为1000,转化后的值应为3000-1000=2000,或者直接取倒数为1/1000。

中间型转化公式为 以ph值为例,最优解 为7。一组数据有7,8,9三个变量,则 , , 。所以 。取i=2,原始数据为8,转化后位1-(8-7)/2=1/2。

区间型转化较为复杂,若{ }为一组中间型指标序列,且最佳的区间为[a,b],那么正向化的公式如下:

以人体体温为例,原始数据为35.2,35.8,36.6,37.1,37.8,38.4。最优区间为36到37,则a=36,b=37,M=max(36-35.2,38.4-37)=1.4,代入上述公式即可得到转换后的数据。

step2:正向化矩阵标准化

假设有n个要评价的对象,m个正向化的评价指标,则可以构建正向化矩阵。 为第一个对象在第二个评价指标上正向化之后的得分。

将标准化矩阵记为Z,则其中的每一个元素都等于对应矩阵X中的元素取值除以所在列元素的平方和开根号,即 。

step3:计算得分并归一化

n个评价对象,m个评价指标的标准化矩阵如下:

定义最大值为每列元素最大值的集合

定义最小值为每列元素最小值的集合

则第i个评价对象与最大值的距离为j个指标分别与最大值计算距离之后的求和:

同理,第i个评价对象与最小值的距离为j个指标分别与最小值计算距离之后的求和:

那么,第i个评价对象未归一化的得分为 ,即z与最小值的距离除以z与最大值的距离和z与最小值的距离之和。因为距离都是非负的,很明显 取值在0和1之间, 越大, 越大,即越接近最优解。

归一化之后的得分为 ,此处应满足 。

归一化和标准化本质上都是为了消去量纲的影响,结果归一化之后更容易比较大小。

得到所有方案的得分之后,建议对排序后的分数进行可视化展示,可利用excel绘制柱形图。

按照上图所示,方案5的得分最高,所以应选择方案5。

上述过程为基本topsis模型,该模型默认所有指标的权重相同,可以利用层次分析法或熵权法确定指标权重,构建带权重的topsis模型。

资料来源:

以上资料来源于b站(up主:数学建模学习交流)https://www.bilibili.com/video/BV1gJ411k7X4from=search&seid=6343799996011307859。

感谢up主的整理,视频讲述很详细,适合新手入门哦~