劣解距離法:多指標(biāo)決策與綜合評(píng)價(jià)實(shí)戰(zhàn)指南)
1. 項(xiàng)目概述從“選擇困難癥”到科學(xué)決策每次做數(shù)學(xué)建模比賽或者在工作中遇到需要從一堆方案里挑出最優(yōu)解的時(shí)候你是不是也常常陷入“選擇困難癥”幾個(gè)備選方案各有優(yōu)劣A方案成本低但效果一般B方案效果好但風(fēng)險(xiǎn)高C方案各方面都均衡但沒什么亮點(diǎn)。光靠拍腦袋或者簡(jiǎn)單加權(quán)平均總覺得說(shuō)服力不夠也怕遺漏了關(guān)鍵信息。這就是TOPSIS法也就是優(yōu)劣解距離法要解決的問題。它不是什么高深莫測(cè)的黑科技而是一個(gè)極其直觀、邏輯嚴(yán)密的“打分排隊(duì)”工具。我第一次在數(shù)模競(jìng)賽里用它是為了給十幾個(gè)城市的營(yíng)商環(huán)境打分排序。數(shù)據(jù)維度多指標(biāo)單位還不統(tǒng)一當(dāng)時(shí)就覺得這方法簡(jiǎn)直是為這種場(chǎng)景量身定做的。后來(lái)在工作中做供應(yīng)商評(píng)估、項(xiàng)目方案比選甚至幫朋友分析該買哪款手機(jī)都用上了這個(gè)思路。簡(jiǎn)單來(lái)說(shuō)TOPSIS法的核心思想就像是在一個(gè)多維空間里給每個(gè)方案我們叫它評(píng)價(jià)對(duì)象找兩個(gè)“標(biāo)桿”一個(gè)是最好的理想方案正理想解一個(gè)是最差的理想方案負(fù)理想解。然后計(jì)算每個(gè)方案離“最好標(biāo)桿”有多近離“最差標(biāo)桿”有多遠(yuǎn)。最后誰(shuí)離“好標(biāo)桿”最近同時(shí)離“壞標(biāo)桿”最遠(yuǎn)誰(shuí)的綜合得分就最高排名就最靠前。這個(gè)方法的好處是它充分利用了原始數(shù)據(jù)的信息結(jié)果清晰直觀而且計(jì)算過(guò)程完全標(biāo)準(zhǔn)化避免了人為主觀判斷的隨意性。所以無(wú)論你是正在備戰(zhàn)數(shù)模競(jìng)賽的學(xué)生還是工作中需要進(jìn)行多指標(biāo)綜合評(píng)價(jià)的分析師掌握TOPSIS法都能讓你手里的數(shù)據(jù)“說(shuō)話”更有力決策更科學(xué)。接下來(lái)我就結(jié)合自己多次實(shí)戰(zhàn)的經(jīng)驗(yàn)把這個(gè)方法的里里外外、操作細(xì)節(jié)和容易踩的坑給你徹底講明白。2. TOPSIS法的核心原理與數(shù)學(xué)模型拆解理解一個(gè)方法不能只停留在“怎么用”更要明白“為什么這么用”。TOPSIS法的數(shù)學(xué)骨架并不復(fù)雜但每一步都蘊(yùn)含著清晰的邏輯。2.1 問題場(chǎng)景與數(shù)據(jù)準(zhǔn)備假設(shè)我們要評(píng)價(jià)m個(gè)方案比如m個(gè)供應(yīng)商、m個(gè)投資項(xiàng)目每個(gè)方案有n個(gè)評(píng)價(jià)指標(biāo)比如價(jià)格、質(zhì)量、交貨期、服務(wù)等。那么我們手頭就會(huì)有一個(gè)m行n列的原始數(shù)據(jù)矩陣我們記為X。方案/指標(biāo) 指標(biāo)1 指標(biāo)2 ... 指標(biāo)n 方案1 x11 x12 ... x1n 方案2 x21 x22 ... x2n ... ... ... ... ... 方案m xm1 xm2 ... xmn這里立刻會(huì)遇到第一個(gè)實(shí)際問題指標(biāo)的類型不統(tǒng)一。有些指標(biāo)是“效益型”的越大越好比如利潤(rùn)率、客戶滿意度有些是“成本型”的越小越好比如成本、故障率還有些可能是適度型或區(qū)間型。TOPSIS法要求所有指標(biāo)同向化通常都轉(zhuǎn)化為“越大越好”。實(shí)操心得1指標(biāo)正向化處理正向化不是簡(jiǎn)單取倒數(shù)。對(duì)于成本型指標(biāo)最常用也最穩(wěn)定的方法是新值 Max(原指標(biāo)列) - 原值。這樣原來(lái)成本最低值最小的方案在新指標(biāo)下就會(huì)變成值最大的“效益型”指標(biāo)。適度型或區(qū)間型指標(biāo)處理起來(lái)稍復(fù)雜需要定義一個(gè)最優(yōu)值或最優(yōu)區(qū)間然后計(jì)算每個(gè)值與最優(yōu)值的“距離”再轉(zhuǎn)化為效益型。在實(shí)際數(shù)模競(jìng)賽中如果題目沒有特殊說(shuō)明通常只處理效益型和成本型遇到適度型指標(biāo)要特別小心需要在論文中清晰說(shuō)明你的處理邏輯。2.2 數(shù)據(jù)標(biāo)準(zhǔn)化消除量綱的“公平秤”指標(biāo)單位不統(tǒng)一是另一個(gè)大麻煩。價(jià)格是“萬(wàn)元”交貨期是“天”質(zhì)量得分是“百分制”。直接計(jì)算距離價(jià)格單位的影響會(huì)遠(yuǎn)遠(yuǎn)壓倒其他指標(biāo)這顯然不公平。所以我們需要標(biāo)準(zhǔn)化歸一化把不同量綱、不同數(shù)量級(jí)的指標(biāo)拉到同一個(gè)可比較的尺度上。TOPSIS法最常用的是向量歸一化法。對(duì)于正向化后的矩陣我們?nèi)杂洖閄標(biāo)準(zhǔn)化公式為zij xij / sqrt( sum(xij^2) ) (i1 to m, j1 to n)這個(gè)公式的意思是對(duì)于第j列指標(biāo)每個(gè)原始值xij都除以該列所有值的平方和的平方根。經(jīng)過(guò)這樣處理新矩陣Z的每一列其所有值的平方和都為1。為什么用這個(gè)方法而不是常見的(min-max)歸一化Min-max歸一化(x - min)/(max - min)確實(shí)直觀但它對(duì)極端值最大值和最小值非常敏感。一個(gè)異常大的值會(huì)把整個(gè)數(shù)據(jù)范圍拉得很寬導(dǎo)致其他數(shù)據(jù)的區(qū)分度下降。而向量歸一化基于整體數(shù)據(jù)的分布平方和對(duì)極端值的魯棒性更強(qiáng)更適用于綜合評(píng)價(jià)場(chǎng)景。這是TOPSIS法經(jīng)典論文里的選擇經(jīng)過(guò)大量實(shí)踐檢驗(yàn)穩(wěn)定性更好。2.3 確定權(quán)重給指標(biāo)分配“話語(yǔ)權(quán)”標(biāo)準(zhǔn)化后的數(shù)據(jù)每個(gè)指標(biāo)被認(rèn)為處于“平等”的地位。但在實(shí)際評(píng)價(jià)中不同指標(biāo)的重要性顯然不同。價(jià)格可能比顏色更重要。因此我們需要給每個(gè)指標(biāo)賦予一個(gè)權(quán)重wj滿足所有wj之和為1。權(quán)重的確定是TOPSIS法中最具主觀性也最體現(xiàn)分析者智慧的一環(huán)。常見方法有主觀賦權(quán)法如AHP層次分析法、專家打分法。依賴經(jīng)驗(yàn)適合指標(biāo)重要性差異明顯且有共識(shí)的場(chǎng)景。客觀賦權(quán)法如熵權(quán)法、CRITIC法。完全基于數(shù)據(jù)本身的離散程度來(lái)確定權(quán)重。某個(gè)指標(biāo)的數(shù)據(jù)在不同方案間差異越大信息熵越小說(shuō)明它區(qū)分方案的能力越強(qiáng)就應(yīng)賦予更大權(quán)重。實(shí)操心得2熵權(quán)法的應(yīng)用場(chǎng)景與陷阱熵權(quán)法在數(shù)模競(jìng)賽中非常流行因?yàn)樗帮@得”很客觀。但務(wù)必注意熵權(quán)法賦權(quán)完全依賴于你本次評(píng)價(jià)的數(shù)據(jù)集。如果某個(gè)關(guān)鍵指標(biāo)在所有方案上的數(shù)值都差不多離散程度小熵權(quán)法會(huì)給它一個(gè)很小的權(quán)重這可能導(dǎo)致“劣幣驅(qū)逐良幣”。例如評(píng)價(jià)安全生產(chǎn) “重大事故數(shù)”這個(gè)指標(biāo)可能所有企業(yè)都是0熵權(quán)法會(huì)認(rèn)為它不重要。但這顯然違背常識(shí)因此我的經(jīng)驗(yàn)是對(duì)于有明顯層級(jí)關(guān)系或公認(rèn)重要性差異的指標(biāo)建議用AHP等方法確定主權(quán)重對(duì)于同一層級(jí)內(nèi)、重要性難分伯仲的指標(biāo)可以用熵權(quán)法進(jìn)行微調(diào)。純用熵權(quán)法一定要在論文中討論其局限性。確定了權(quán)重向量W [w1, w2, ..., wn]后我們構(gòu)建加權(quán)標(biāo)準(zhǔn)化矩陣VV Z * diag(W) 即 vij zij * wj這樣每個(gè)指標(biāo)值都乘上了其重要性權(quán)重。2.4 尋找理想解與計(jì)算距離這是TOPSIS法的畫龍點(diǎn)睛之筆。我們?cè)诩訖?quán)標(biāo)準(zhǔn)化后的空間里定義兩個(gè)虛擬的點(diǎn)正理想解 A由每個(gè)指標(biāo)在所有方案中的最大值構(gòu)成。A [max(v1j), max(v2j), ..., max(vnj)]負(fù)理想解 A-由每個(gè)指標(biāo)在所有方案中的最小值構(gòu)成。A- [min(v1j), min(v2j), ..., min(vnj)]注意這里的最大值和最小值是針對(duì)每一列每個(gè)指標(biāo)分別取的。A代表了一個(gè)“理論上最好的方案”它在所有指標(biāo)上都達(dá)到了最優(yōu)A-則代表“理論上最差的方案”。接下來(lái)計(jì)算每個(gè)實(shí)際方案對(duì)應(yīng)矩陣V的每一行向量Vi到這兩個(gè)理想解的距離。距離通常采用歐氏距離到正理想解的距離D_i sqrt( sum( (vij - Aj)^2 ) ) j從1到n。到負(fù)理想解的距離D_i- sqrt( sum( (vij - A-j)^2 ) ) j從1到n。這里有一個(gè)關(guān)鍵理解D_i越小說(shuō)明該方案離“完美”越近D_i-越大說(shuō)明該方案離“糟糕”越遠(yuǎn)。一個(gè)好的方案應(yīng)該同時(shí)滿足“離完美近”和“離糟糕遠(yuǎn)”。2.5 計(jì)算相對(duì)貼近度與排序最后我們用一個(gè)綜合指標(biāo)來(lái)刻畫上述兩個(gè)目標(biāo)。這就是相對(duì)貼近度C_iC_i D_i- / (D_i D_i-)從公式可以看出當(dāng)方案就是正理想解時(shí)D_i 0 C_i 1。當(dāng)方案就是負(fù)理想解時(shí)D_i- 0 C_i 0。因此C_i的取值范圍是[0, 1]。C_i值越大說(shuō)明該方案越接近正理想解同時(shí)遠(yuǎn)離負(fù)理想解綜合表現(xiàn)越好。我們根據(jù)C_i值從大到小對(duì)方案進(jìn)行排序就得到了最終的優(yōu)劣順序。為什么用這個(gè)比值而不是其他組合這個(gè)公式巧妙地將兩個(gè)距離融合為一個(gè)標(biāo)量且具有歸一化的特性。也有學(xué)者嘗試過(guò)其他形式但這個(gè)經(jīng)典公式在絕大多數(shù)情況下都能穩(wěn)定、合理地反映方案的相對(duì)優(yōu)劣已成為標(biāo)準(zhǔn)做法。3. 完整實(shí)操流程與MATLAB/Python實(shí)現(xiàn)理論講透了我們來(lái)看怎么動(dòng)手算。我會(huì)分別給出MATLAB和Python的代碼實(shí)現(xiàn)并附上詳細(xì)的注釋和中間結(jié)果查看技巧。3.1 案例背景與數(shù)據(jù)假設(shè)我們要評(píng)估4款新能源汽車方案A、B、C、D考慮4個(gè)指標(biāo)續(xù)航里程公里效益型越大越好。百公里電耗kWh/100km成本型越小越好。0-100km/h加速時(shí)間秒成本型越小越好。智能駕駛評(píng)分分效益型越大越好。原始數(shù)據(jù)矩陣X如下車型續(xù)航里程百公里電耗加速時(shí)間智能評(píng)分A600155.085B550146.590C700164.580D500137.088我們采用主觀賦權(quán)法根據(jù)專家意見四個(gè)指標(biāo)的權(quán)重分別為W [0.3, 0.25, 0.25, 0.2]。3.2 逐步計(jì)算與代碼實(shí)現(xiàn)第一步指標(biāo)正向化指標(biāo)1續(xù)航和指標(biāo)4評(píng)分是效益型保持不變。 指標(biāo)2電耗和指標(biāo)3加速是成本型需要正向化。我們用新值 Max(列) - 原值。% MATLAB 代碼 (TOPSIS.m) clear; clc; % 1. 輸入原始數(shù)據(jù) X [600, 15, 5.0, 85; 550, 14, 6.5, 90; 700, 16, 4.5, 80; 500, 13, 7.0, 88]; % 2. 指標(biāo)正向化 % 假設(shè)第2、3列是成本型指標(biāo) [m, n] size(X); Positivized_X X; for j [2, 3] % 成本型指標(biāo)列索引 Positivized_X(:, j) max(X(:, j)) - X(:, j); end disp(正向化后的矩陣); disp(Positivized_X);# Python 代碼 (topsis.py) import numpy as np # 1. 輸入原始數(shù)據(jù) X np.array([[600, 15, 5.0, 85], [550, 14, 6.5, 90], [700, 16, 4.5, 80], [500, 13, 7.0, 88]]) # 2. 指標(biāo)正向化 positivized_X X.copy() cost_indices [1, 2] # 第二、三列是成本型指標(biāo)Python索引從0開始 for j in cost_indices: positivized_X[:, j] np.max(positivized_X[:, j]) - positivized_X[:, j] print(正向化后的矩陣\n, positivized_X)運(yùn)行后正向化結(jié)果如下以MATLAB輸出為例正向化后的矩陣 600 1 2 85 550 2 0 90 700 0 3 80 500 3 0 88解釋電耗列最大值16-原值加速列最大值7.0-原值?,F(xiàn)在所有指標(biāo)都是“越大越好”。第二步數(shù)據(jù)標(biāo)準(zhǔn)化向量歸一化% 3. 數(shù)據(jù)標(biāo)準(zhǔn)化 Z Positivized_X ./ sqrt(sum(Positivized_X.^2)); disp(標(biāo)準(zhǔn)化矩陣 Z); disp(Z);# 3. 數(shù)據(jù)標(biāo)準(zhǔn)化 Z positivized_X / np.sqrt(np.sum(positivized_X**2, axis0)) print(標(biāo)準(zhǔn)化矩陣 Z\n, Z)標(biāo)準(zhǔn)化后每個(gè)指標(biāo)的數(shù)值被壓縮到一個(gè)小范圍內(nèi)且各列平方和為1。第三步構(gòu)建加權(quán)標(biāo)準(zhǔn)化矩陣% 4. 確定權(quán)重并構(gòu)建加權(quán)矩陣 W [0.3, 0.25, 0.25, 0.2]; V Z .* W; % MATLAB的廣播運(yùn)算 disp(加權(quán)標(biāo)準(zhǔn)化矩陣 V); disp(V);# 4. 確定權(quán)重并構(gòu)建加權(quán)矩陣 W np.array([0.3, 0.25, 0.25, 0.2]) V Z * np.diag(W) # 或者 V Z * W (利用廣播) print(加權(quán)標(biāo)準(zhǔn)化矩陣 V\n, V)第四步確定正負(fù)理想解% 5. 確定正負(fù)理想解 V_max max(V); % 正理想解 V_min min(V); % 負(fù)理想解 disp(正理想解 A); disp(V_max); disp(負(fù)理想解 A-); disp(V_min);# 5. 確定正負(fù)理想解 V_max np.max(V, axis0) # 正理想解 V_min np.min(V, axis0) # 負(fù)理想解 print(正理想解 A, V_max) print(負(fù)理想解 A-, V_min)第五步計(jì)算各方案到理想解的距離% 6. 計(jì)算距離 D_plus sqrt(sum((V - V_max).^2, 2)); % 到正理想解的距離按行求和 D_minus sqrt(sum((V - V_min).^2, 2)); % 到負(fù)理想解的距離 disp(各方案到正理想解距離 D); disp(D_plus); disp(各方案到負(fù)理想解距離 D-); disp(D_minus);# 6. 計(jì)算距離 D_plus np.sqrt(np.sum((V - V_max)**2, axis1)) D_minus np.sqrt(np.sum((V - V_min)**2, axis1)) print(各方案到正理想解距離 D, D_plus) print(各方案到負(fù)理想解距離 D-, D_minus)第六步計(jì)算相對(duì)貼近度并排序% 7. 計(jì)算相對(duì)貼近度 C D_minus ./ (D_plus D_minus); disp(相對(duì)貼近度 C); disp(C); % 8. 排序 [sorted_C, idx] sort(C, descend); disp( 最終排序結(jié)果 ); for i 1:m fprintf(第%d名: 方案%d, 貼近度 %.4f\n, i, idx(i), sorted_C(i)); end# 7. 計(jì)算相對(duì)貼近度 C D_minus / (D_plus D_minus) print(相對(duì)貼近度 C, C) # 8. 排序 sorted_idx np.argsort(-C) # 降序排列的索引 print( 最終排序結(jié)果 ) for i, rank in enumerate(sorted_idx): print(f第{i1}名: 方案{chr(65rank)} (原索引{rank}), 貼近度 {C[rank]:.4f})運(yùn)行完整代碼我們可以得到最終結(jié)果。根據(jù)我們?cè)O(shè)定的權(quán)重最終的排序可能是C A D B具體數(shù)值取決于計(jì)算精度。這意味著在給定的指標(biāo)和權(quán)重下C車型綜合表現(xiàn)最優(yōu)。實(shí)操心得3代碼調(diào)試與中間結(jié)果驗(yàn)證自己編寫或使用TOPSIS代碼時(shí)最容易出錯(cuò)的地方是矩陣維度運(yùn)算和索引。一個(gè)很好的調(diào)試習(xí)慣是在每一步計(jì)算后都打印或顯示關(guān)鍵矩陣的維度size/shape和前幾行數(shù)據(jù)。例如檢查標(biāo)準(zhǔn)化后的Z矩陣每一列的平方和是否接近1由于浮點(diǎn)數(shù)計(jì)算可能接近0.9999或1.0001檢查加權(quán)矩陣V是否確實(shí)每列乘上了對(duì)應(yīng)的權(quán)重。這些小檢查能幫你快速定位問題所在。4. 熵權(quán)TOPSIS法讓數(shù)據(jù)自己決定權(quán)重在很多時(shí)候我們并沒有足夠的先驗(yàn)知識(shí)來(lái)給指標(biāo)賦予一個(gè)令人信服的權(quán)重。這時(shí)客觀賦權(quán)法就派上用場(chǎng)了而熵權(quán)法是其中與TOPSIS結(jié)合最緊密、最流行的一種。它的核心思想是指標(biāo)攜帶的信息量越大即數(shù)據(jù)在該指標(biāo)上的離散程度越大它對(duì)方案區(qū)分度的貢獻(xiàn)就越大就應(yīng)該賦予更大的權(quán)重。4.1 熵權(quán)法原理詳解“熵”這個(gè)概念源于信息論表示系統(tǒng)的混亂程度或信息的不確定性。在這里我們用它來(lái)衡量一個(gè)評(píng)價(jià)指標(biāo)所包含信息量的大小。對(duì)于一個(gè)有m個(gè)方案、n個(gè)指標(biāo)的評(píng)價(jià)問題在數(shù)據(jù)標(biāo)準(zhǔn)化得到矩陣Z注意這里用的是標(biāo)準(zhǔn)化后的矩陣不是加權(quán)后的V之后我們按以下步驟計(jì)算熵權(quán)計(jì)算第j項(xiàng)指標(biāo)下第i個(gè)方案的比重p_ijp_ij z_ij / sum(z_ij) 其中i1 to m。這相當(dāng)于把第j列數(shù)據(jù)“概率化”所有方案的比重之和為1。計(jì)算第j項(xiàng)指標(biāo)的熵值e_je_j -k * sum(p_ij * ln(p_ij)) 其中i1 to m k 1/ln(m) 是一個(gè)常數(shù)用于保證熵值e_j落在[0,1]區(qū)間內(nèi)。如果某個(gè)指標(biāo)下所有方案的值都完全相同即p_ij都等于1/m那么該指標(biāo)的熵值達(dá)到最大e_j 1意味著這個(gè)指標(biāo)沒有提供任何區(qū)分信息。如果某個(gè)指標(biāo)下某個(gè)方案的值特別突出其他方案值很小那么該指標(biāo)的熵值就會(huì)很小意味著它包含了很大的區(qū)分信息。計(jì)算第j項(xiàng)指標(biāo)的差異系數(shù)g_jg_j 1 - e_j熵值越小差異系數(shù)越大說(shuō)明該指標(biāo)越重要。歸一化差異系數(shù)得到權(quán)重w_jw_j g_j / sum(g_j) j1 to n。 這樣得到的權(quán)重向量W [w1, w2, ..., wn] 就是基于數(shù)據(jù)本身客觀計(jì)算出來(lái)的。4.2 熵權(quán)法代碼實(shí)現(xiàn)與解讀我們沿用之前的汽車評(píng)價(jià)案例但這次不預(yù)設(shè)權(quán)重讓熵權(quán)法自己算。% MATLAB 熵權(quán)法部分 (接在標(biāo)準(zhǔn)化矩陣Z之后) % Z 是之前計(jì)算好的標(biāo)準(zhǔn)化矩陣 [m, n] size(Z); % 1. 計(jì)算比重矩陣P P Z ./ sum(Z); % 按列相除 % 避免ln(0)的情況給一個(gè)極小值 P(P 0) 1e-10; % 2. 計(jì)算熵值E k 1 / log(m); E -k * sum(P .* log(P), 1); % 3. 計(jì)算差異系數(shù)G G 1 - E; % 4. 計(jì)算權(quán)重W W_entropy G ./ sum(G); disp(熵權(quán)法計(jì)算出的指標(biāo)權(quán)重); disp(W_entropy); % 后續(xù)的TOPSIS步驟將使用這個(gè) W_entropy 代替之前主觀的W# Python 熵權(quán)法部分 import numpy as np # Z 是之前計(jì)算好的標(biāo)準(zhǔn)化矩陣 m, n Z.shape # 1. 計(jì)算比重矩陣P P Z / np.sum(Z, axis0) # 避免ln(0)的情況 P np.where(P 0, 1e-10, P) # 2. 計(jì)算熵值E k 1 / np.log(m) E -k * np.sum(P * np.log(P), axis0) # 3. 計(jì)算差異系數(shù)G G 1 - E # 4. 計(jì)算權(quán)重W W_entropy G / np.sum(G) print(熵權(quán)法計(jì)算出的指標(biāo)權(quán)重, W_entropy)運(yùn)行這段代碼你會(huì)得到一組新的權(quán)重。對(duì)比之前主觀賦予的[0.3, 0.25, 0.25, 0.2]熵權(quán)法給出的權(quán)重很可能差異很大。例如如果“智能評(píng)分”這個(gè)指標(biāo)在四個(gè)車型上得分都很接近85908088那么它的熵值會(huì)很大差異系數(shù)很小最終權(quán)重就會(huì)很低。這反映了熵權(quán)法的核心邏輯誰(shuí)更能拉開方案間的差距誰(shuí)就更重要。實(shí)操心得4熵權(quán)法的結(jié)果解讀與局限性應(yīng)對(duì)拿到熵權(quán)法計(jì)算的權(quán)重后千萬(wàn)不要直接套用一定要結(jié)合業(yè)務(wù)常識(shí)進(jìn)行解讀和判斷。如果出現(xiàn)某個(gè)你認(rèn)為很重要的指標(biāo)權(quán)重卻極低的情況如上面智能評(píng)分的例子你需要思考是不是數(shù)據(jù)本身在這個(gè)指標(biāo)上區(qū)分度確實(shí)不大如果是那降低其權(quán)重是合理的。還是因?yàn)檫@個(gè)指標(biāo)本身很重要只是本次樣本巧合地表現(xiàn)接近如果是后者純用熵權(quán)法就會(huì)導(dǎo)致誤判。在數(shù)學(xué)建模論文或?qū)嶋H分析報(bào)告中一個(gè)穩(wěn)健的做法是將主觀賦權(quán)法如AHP和客觀賦權(quán)法如熵權(quán)法結(jié)合。例如可以用AHP確定一級(jí)指標(biāo)的權(quán)重再用熵權(quán)法在一級(jí)指標(biāo)內(nèi)部對(duì)二級(jí)指標(biāo)進(jìn)行賦權(quán)?;蛘哂?jì)算主客觀權(quán)重的組合權(quán)重如線性加權(quán)。這樣既能體現(xiàn)專家經(jīng)驗(yàn)又能尊重?cái)?shù)據(jù)規(guī)律結(jié)論也更有說(shuō)服力。5. TOPSIS法在數(shù)學(xué)建模中的實(shí)戰(zhàn)要點(diǎn)與論文寫作TOPSIS法是數(shù)學(xué)建模競(jìng)賽特別是評(píng)價(jià)類、決策類題目的???。要把這個(gè)方法用好、寫進(jìn)論文里拿高分光會(huì)計(jì)算還不夠。5.1 模型構(gòu)建的完整表述在論文的“模型建立”部分你需要清晰地呈現(xiàn)TOPSIS法的步驟建議按以下邏輯展開問題重述與指標(biāo)體系建立明確評(píng)價(jià)目標(biāo)闡述為什么選擇這些評(píng)價(jià)指標(biāo)并說(shuō)明指標(biāo)類型效益型、成本型等。數(shù)據(jù)預(yù)處理數(shù)據(jù)清洗處理缺失值、異常值。常用方法有均值填充、插值法或刪除。指標(biāo)正向化給出成本型等指標(biāo)轉(zhuǎn)化為效益型的數(shù)學(xué)公式。數(shù)據(jù)標(biāo)準(zhǔn)化說(shuō)明采用向量歸一化方法及其公式。權(quán)重確定詳細(xì)說(shuō)明權(quán)重的確定方法。如果是主觀賦權(quán)如AHP要寫出判斷矩陣、一致性檢驗(yàn)過(guò)程。如果是客觀賦權(quán)如熵權(quán)法要給出熵值、差異系數(shù)的計(jì)算公式。如果是組合賦權(quán)要說(shuō)明組合方式。TOPSIS核心計(jì)算給出加權(quán)標(biāo)準(zhǔn)化矩陣的公式。定義正、負(fù)理想解。給出歐氏距離的計(jì)算公式。給出相對(duì)貼近度C的計(jì)算公式。評(píng)價(jià)結(jié)果分析根據(jù)C值排序得出綜合評(píng)價(jià)結(jié)果。論文寫作技巧1公式與文字結(jié)合不要只扔出一堆公式也不要只有文字描述。最好的方式是用一小段文字引出本步要做什么然后給出清晰的公式必要時(shí)對(duì)公式中的符號(hào)進(jìn)行說(shuō)明。例如“為消除不同指標(biāo)量綱的影響對(duì)正向化后的矩陣X進(jìn)行向量歸一化處理得到標(biāo)準(zhǔn)化矩陣Z。其計(jì)算公式如下 $$ z_{ij} \frac{x_{ij}}{\sqrt{\sum_{i1}^{m} x_{ij}^2}} $$ 其中$z_{ij}$表示第i個(gè)評(píng)價(jià)對(duì)象在第j個(gè)指標(biāo)上的標(biāo)準(zhǔn)化值。”5.2 靈敏度分析與模型檢驗(yàn)一個(gè)好的數(shù)學(xué)模型不能只給出一個(gè)結(jié)果就完了必須檢驗(yàn)其穩(wěn)健性。對(duì)于TOPSIS法靈敏度分析是加分項(xiàng)。權(quán)重靈敏度分析這是最關(guān)鍵的。你可以微調(diào)某個(gè)重要指標(biāo)的權(quán)重例如±10%觀察最終排序是否發(fā)生變化。如果排序很穩(wěn)定說(shuō)明你的模型結(jié)論是可靠的如果輕微調(diào)整權(quán)重就導(dǎo)致排名大變說(shuō)明這個(gè)指標(biāo)非常敏感或者方案之間在該指標(biāo)上競(jìng)爭(zhēng)激烈你需要謹(jǐn)慎解釋結(jié)論并在論文中說(shuō)明這一情況。方法對(duì)比可以選用另一種綜合評(píng)價(jià)方法如灰色關(guān)聯(lián)分析法、數(shù)據(jù)包絡(luò)分析DEA對(duì)同一數(shù)據(jù)集進(jìn)行處理對(duì)比兩種方法得出的排序結(jié)果是否大體一致。如果一致則相互印證了結(jié)論的可靠性如果不一致則需深入分析原因可能是方法原理不同導(dǎo)致的側(cè)重點(diǎn)差異。極端情況測(cè)試可以構(gòu)造一些極端方案例如所有指標(biāo)都最優(yōu)或都最差的虛擬方案看模型是否能正確地將它們排在首位或末位以此檢驗(yàn)?zāi)P偷倪壿嬚_性。實(shí)操心得5如何高效地進(jìn)行權(quán)重靈敏度分析手動(dòng)修改權(quán)重再重新跑一遍程序效率太低??梢詫懸粋€(gè)簡(jiǎn)單的循環(huán)腳本% MATLAB 權(quán)重靈敏度分析示例以第一個(gè)權(quán)重w1為例 base_weights [0.3, 0.25, 0.25, 0.2]; perturbation [-0.05, -0.03, -0.01, 0, 0.01, 0.03, 0.05]; % 擾動(dòng)值 results {}; for p perturbation test_weights base_weights; test_weights(1) base_weights(1) p; test_weights(2:end) test_weights(2:end) * (1 - p) / sum(base_weights(2:end)); % 其他權(quán)重按比例調(diào)整保持總和為1 % 調(diào)用你的TOPSIS計(jì)算函數(shù)傳入 test_weights [~, ranking] myTOPSISfunction(data, test_weights); results{end1} {p, ranking}; end % 然后比較不同擾動(dòng)下的 ranking通過(guò)這樣的分析你可以在論文中展示一張表或一幅圖說(shuō)明“當(dāng)權(quán)重w1在[0.25, 0.35]范圍內(nèi)變動(dòng)時(shí)排名前二的方案始終是A和C模型結(jié)論穩(wěn)健”。5.3 可視化呈現(xiàn)與結(jié)果解讀一圖勝千言。在論文中好的可視化能極大提升可讀性。雷達(dá)圖蛛網(wǎng)圖非常適合展示每個(gè)方案在各個(gè)指標(biāo)上的表現(xiàn)。將標(biāo)準(zhǔn)化或加權(quán)后的數(shù)據(jù)用雷達(dá)圖畫出可以直觀看出每個(gè)方案的“長(zhǎng)板”和“短板”以及它們與正理想解可以畫一個(gè)最大的輪廓的差距。排序條形圖將最終計(jì)算出的相對(duì)貼近度C值用條形圖表示并按從高到低排序一目了然。距離散點(diǎn)圖可以繪制每個(gè)方案的D和D-的散點(diǎn)圖。理想情況下好的方案應(yīng)該集中在左下角D小D-大。在“結(jié)果分析”部分不要只說(shuō)“方案C排名第一”。要結(jié)合具體數(shù)據(jù)深入解讀“方案C排名第一主要得益于其在‘續(xù)航里程’和‘加速時(shí)間’這兩個(gè)高權(quán)重指標(biāo)上的卓越表現(xiàn)。盡管其‘智能評(píng)分’略低于方案B和D但權(quán)重最高的指標(biāo)上的優(yōu)勢(shì)足以彌補(bǔ)這一劣勢(shì)。方案A則表現(xiàn)均衡沒有明顯短板……”這樣的分析才是有深度的。6. 常見問題、誤區(qū)與排查指南在實(shí)際應(yīng)用TOPSIS法時(shí)總會(huì)遇到各種各樣的問題。下面我整理了一份“避坑指南”都是我和隊(duì)友們真金白銀換來(lái)的經(jīng)驗(yàn)。6.1 數(shù)據(jù)預(yù)處理相關(guān)問題1數(shù)據(jù)中有負(fù)數(shù)或零標(biāo)準(zhǔn)化或計(jì)算熵權(quán)時(shí)報(bào)錯(cuò)如log(0)。原因向量歸一化不會(huì)產(chǎn)生負(fù)數(shù)但原始數(shù)據(jù)可能有負(fù)值如利潤(rùn)增長(zhǎng)率為負(fù)。熵權(quán)法計(jì)算需要取對(duì)數(shù)遇到0值會(huì)報(bào)錯(cuò)。解決對(duì)于效益型負(fù)向指標(biāo)如負(fù)債率我們希望它小可以先采用適當(dāng)?shù)恼蚧椒ㄈ?/x或Max - x確保所有數(shù)據(jù)為正。對(duì)于熵權(quán)法中的零值通常用一個(gè)極小的正數(shù)如1e-10替代避免對(duì)數(shù)無(wú)窮大。在代碼中要做好判斷和替換。問題2正向化方法選擇不當(dāng)導(dǎo)致數(shù)據(jù)扭曲。原因?qū)τ诔杀拘椭笜?biāo)簡(jiǎn)單的1/x正向化會(huì)放大小值之間的差異縮小大值之間的差異可能引入偏差。Max - x是更線性、更穩(wěn)健的方法。解決統(tǒng)一使用Max - x進(jìn)行成本型指標(biāo)正向化。對(duì)于適度型指標(biāo)務(wù)必清晰定義“最優(yōu)值”并說(shuō)明距離計(jì)算公式。6.2 權(quán)重確定相關(guān)問題3熵權(quán)法算出某個(gè)重要指標(biāo)的權(quán)重為0或接近0。原因該指標(biāo)在所有方案上的數(shù)值完全一樣或極其接近熵值極大接近1差異系數(shù)接近0。排查與解決檢查數(shù)據(jù)該指標(biāo)數(shù)據(jù)是否真的沒有變異如果是那么熵權(quán)法認(rèn)為它無(wú)區(qū)分能力賦低權(quán)是合理的。反思指標(biāo)如果從業(yè)務(wù)角度看該指標(biāo)絕對(duì)重要說(shuō)明它可能不適合作為評(píng)價(jià)指標(biāo)或者需要與其他指標(biāo)合并。改用組合賦權(quán)給熵權(quán)法結(jié)果設(shè)置一個(gè)下限如不低于0.05或與主觀賦權(quán)法結(jié)合。問題4主觀賦權(quán)時(shí)判斷矩陣一致性檢驗(yàn)不通過(guò)。原因?qū)<以诖蚍謺r(shí)邏輯可能前后不一致。例如認(rèn)為A比B重要2倍B比C重要3倍那么A應(yīng)該比C重要6倍左右。如果專家打分認(rèn)為A比C只重要4倍就產(chǎn)生了不一致。解決與專家溝通調(diào)整判斷矩陣中邏輯明顯矛盾的打分。使用軟件如yaahp或算法自動(dòng)修正判斷矩陣使其滿足一致性要求CR0.1。6.3 計(jì)算與結(jié)果相關(guān)問題5計(jì)算出的相對(duì)貼近度C非常接近排名難以區(qū)分。原因方案之間綜合實(shí)力確實(shí)相差無(wú)幾或者指標(biāo)權(quán)重設(shè)置過(guò)于平均沒有突出關(guān)鍵因素。排查檢查D和D-的值如果所有方案的D和D-都差不多那C值自然接近。做靈敏度分析微調(diào)權(quán)重看排名是否容易變動(dòng)。如果容易變動(dòng)說(shuō)明當(dāng)前評(píng)價(jià)體系對(duì)這幾個(gè)方案的區(qū)分力不足。解決重新審視指標(biāo)體系是否遺漏了關(guān)鍵區(qū)分指標(biāo)調(diào)整權(quán)重如果某些指標(biāo)確實(shí)更重要應(yīng)適當(dāng)加大其權(quán)重需有合理依據(jù)。在論文中如實(shí)報(bào)告說(shuō)明方案間差異不顯著排名僅供參考并給出并列或區(qū)間的建議。問題6某個(gè)方案在多數(shù)指標(biāo)上表現(xiàn)中等但排名卻很高或很低。原因TOPSIS法基于距離可能被個(gè)別極端值指標(biāo)“綁架”。如果一個(gè)方案在某個(gè)高權(quán)重指標(biāo)上表現(xiàn)極好或極差即使其他指標(biāo)平平也可能導(dǎo)致其非常靠近或遠(yuǎn)離理想解。解決這是TOPSIS法的特點(diǎn)不一定是錯(cuò)誤。你需要做的是深入分析這個(gè)“特殊”方案找出其優(yōu)勢(shì)或劣勢(shì)指標(biāo)。在結(jié)果分析中明確指出“方案X因其在XX指標(biāo)上的突出表現(xiàn)/明顯短板導(dǎo)致其綜合排名較高/較低?!比绻麘岩墒菙?shù)據(jù)異常檢查該指標(biāo)數(shù)據(jù)是否正確。6.4 模型選擇與擴(kuò)展問題7什么時(shí)候該用TOPSIS什么時(shí)候不該用適用場(chǎng)景方案數(shù)量有限且明確、指標(biāo)值可以定量獲取、需要得到一個(gè)明確的排序結(jié)果。特別適合“多指標(biāo)、無(wú)交互”的靜態(tài)綜合評(píng)價(jià)。不適用或需謹(jǐn)慎的場(chǎng)景指標(biāo)間存在強(qiáng)烈相關(guān)性例如“研發(fā)人員數(shù)量”和“研發(fā)經(jīng)費(fèi)”可能高度相關(guān)同時(shí)放入模型會(huì)重復(fù)放大研發(fā)因素的影響。此時(shí)需先進(jìn)行主成分分析PCA降維再用TOPSIS。方案數(shù)量極多成千上萬(wàn)計(jì)算距離的復(fù)雜度會(huì)上升但并非不能計(jì)算只是可能不是最優(yōu)選擇。需要?jiǎng)討B(tài)評(píng)價(jià)TOPSIS本質(zhì)是靜態(tài)的。如果指標(biāo)值隨時(shí)間變化需要對(duì)每個(gè)時(shí)間截面分別計(jì)算再綜合分析趨勢(shì)。問題8TOPSIS法有哪些常見的改進(jìn)或變體結(jié)合灰色關(guān)聯(lián)分析GRA用灰色關(guān)聯(lián)度代替歐氏距離來(lái)計(jì)算方案與理想解的“接近”程度?;疑P(guān)聯(lián)度對(duì)數(shù)據(jù)量要求低且更關(guān)注變化趨勢(shì)的相似性。模糊TOPSIS當(dāng)指標(biāo)值難以精確量化只能用“高、中、低”等語(yǔ)言變量描述時(shí)可以引入三角模糊數(shù)等工具發(fā)展出模糊TOPSIS?;隈R氏距離的TOPSIS歐氏距離假設(shè)各指標(biāo)相互獨(dú)立且等方差。當(dāng)指標(biāo)間存在相關(guān)性時(shí)馬氏距離能考慮這種相關(guān)性更準(zhǔn)確。最后我的個(gè)人體會(huì)是TOPSIS法就像一個(gè)結(jié)構(gòu)精密的“尺子”它能量化比較的“長(zhǎng)度”但尺子上的“刻度”指標(biāo)和“不同刻度的價(jià)值”權(quán)重需要你根據(jù)實(shí)際情況來(lái)精心定義和校準(zhǔn)。掌握其原理和實(shí)現(xiàn)只是第一步更重要的是在每一次應(yīng)用中都能帶著批判性思維去審視數(shù)據(jù)、權(quán)重和結(jié)果結(jié)合具體的業(yè)務(wù)背景給出合理解讀這才是從“會(huì)用工具”到“用好工具”的關(guān)鍵跨越。在下次數(shù)模比賽或者工作中遇到選擇難題時(shí)不妨試著用TOPSIS法來(lái)幫你理清思路相信它不會(huì)讓你失望。