1. 从“拍脑袋”到“算权重”:为什么TOPSIS需要熵权法修正?
在数学建模,尤其是涉及多指标综合评价的赛题里,TOPSIS(Technique for Order Preference by Similarity to Ideal Solution,逼近理想解排序法)几乎是每个参赛者工具箱里的常客。它的逻辑直观又强大:先找出所有方案中的“最好方案”(正理想解)和“最差方案”(负理想解),然后计算每个待评价方案与这两个“标杆”的距离,最后根据相对接近度来排序。谁离“好榜样”越近,离“坏典型”越远,谁的综合评价就越高。这个模型特别擅长处理那种指标单位不一、量纲各异的数据,因为它内部包含了归一化的步骤。
但很多新手,甚至一些有经验的队伍,在第一次用TOPSIS时容易陷入一个思维定式:所有评价指标的重要性是相等的。比如评价一个城市的综合发展水平,你选取了GDP(经济)、人均绿地面积(生态)、刑事案件发生率(社会)、每万人拥有医生数(医疗)等多个指标。在未经思考的情况下,直接给每个指标赋予相同的权重,然后让TOPSIS去计算。这相当于在说:“经济翻一倍”和“刑事案件率下降一个百分点”对整个城市发展的贡献度是一样的。这显然不符合我们对现实问题的认知。经济可能是核心驱动力,而社会治安是基础保障,它们的“重要性”或“影响力”本就不同。
这就是传统TOPSIS模型的一个典型“坑”:权重的主观性与随意性。如果权重设置不合理,无论你的模型计算多么精确,最终得出的排序都可能失真,甚至导向完全错误的结论。在数学建模竞赛中,这直接关系到论文的严谨性和结论的可信度。那么,权重从哪里来?常见的方法有主观赋权法(如德尔菲法、层次分析法AHP)和客观赋权法。主观赋权依赖专家经验,虽然能融入领域知识,但在缺乏专家或时间紧迫的竞赛中,容易引入个人偏见,且不同专家可能给出差异很大的判断。这时,熵权法作为一种客观赋权方法,其价值就凸显出来了。
熵权法的核心思想源于信息论中的“信息熵”。简单理解,在一个评价系统里,如果某个指标的数据在不同方案之间差异非常大(比如有的城市GDP高达万亿,有的只有百亿),那么这个指标所包含的“信息量”就很大,它对区分方案优劣的贡献度就高,理应赋予更大的权重。反之,如果某个指标在所有方案上的数据都差不多(比如所有城市的人均绿地面积都在10-12平方米之间波动),那么这个指标提供的信息量就小,区分能力弱,权重就应该小。熵权法就是通过计算各指标数据本身的离散程度,来自动确定权重,完全基于数据说话,避免了人为干扰。
所以,“基于熵权法对TOPSIS模型的修正”,其本质就是用客观、数据驱动的权重,取代主观、随意的等权重或主观权重,让TOPSIS模型的评价结果更加科学、稳健、有说服力。这不仅是模型方法上的一个优化步骤,更是建模思维从“想当然”到“数据驱动”的一次重要升级。接下来,我将结合具体的数学推导、Python代码实现以及建模实战中的注意事项,带你彻底吃透这个“黄金搭档”。
2. 熵权法原理拆解:数据如何自己“说话”赋权?
要理解熵权法如何修正TOPSIS,必须先弄懂熵权法本身是怎么工作的。它的计算过程清晰、步骤固定,但每一步背后的统计意义值得深究。
2.1 核心概念:从“不确定性”到“信息量”
熵(Entropy)在信息论中,是度量系统不确定性的一个指标。不确定性越大,熵值就越大。举个例子,明天天气的预测:如果气象台说“明天肯定下雨”,这是一个确定性事件,信息熵为0(因为你已经知道了确切结果,没有获得新信息)。如果气象台说“明天下雨和晴天的概率各50%”,这时不确定性最大,信息熵也最大。
在综合评价的语境下,我们将每个评价指标视为一个“信源”,每个被评价对象(方案)在该指标上的取值,构成了这个信源输出的“信号”。如果一个指标在不同方案间取值差异巨大(即非常离散),那么当我们观察这个指标时,它能有效地区分方案,告诉我们更多信息,其不确定性(熵)相对较小?等等,这里有个关键点需要厘清:在信息熵公式中,概率分布的均匀程度决定了熵的大小。概率分布越均匀(即每种情况出现的可能性越接近),不确定性越大,熵值越大。
在熵权法中,我们首先将每个指标下各方案的数值,转化为“概率”形式(即每个方案的数值占该指标总和的比重)。如果某个指标下,所有方案的比重都差不多(分布均匀),说明这个指标区分能力差,信息熵就大。但我们需要的是权重,我们希望区分能力强的指标权重大。因此,熵权法的逻辑是:先计算熵值(衡量不确定性/信息量),再用1减去熵值得到“差异系数”,最后归一化得到权重。差异系数大的,说明该指标提供的信息量大,权重就大。
2.2 熵权法计算六步走
假设我们有m个待评价方案(行),n个评价指标(列),构成了原始数据矩阵 ( X = (x_{ij})_{m \times n} )。
步骤1:数据标准化(归一化)由于各指标量纲和数量级不同,必须消除其影响。TOPSIS中常用极差法,熵权法中也需处理。这里我们采用比重法,直接为计算概率做准备。对于正向指标(越大越好): [ p_{ij} = \frac{x_{ij}}{\sum_{i=1}^{m} x_{ij}} ] 对于负向指标(越小越好),需要先进行正向化处理,例如用倒数法或差值法,然后再按上述公式计算。这一步得到了比重矩阵 ( P = (p_{ij}){m \times n} )。这里 ( p{ij} ) 可以理解为“方案i在指标j上的贡献度比重”。
注意:此处的标准化与后续TOPSIS中的标准化目的不同。这里是为了计算概率分布,而TOPSIS中的标准化(如向量归一化)是为了消除量纲后计算距离。两者不要混淆。在实际编程中,我们通常先对原始数据完成所有指标的同向化(都变为正向指标)和此处的比重化,为熵权计算做准备。
步骤2:计算第j项指标的熵值 ( e_j )[ e_j = -k \sum_{i=1}^{m} p_{ij} \ln(p_{ij}) ] 其中,( k = 1 / \ln(m) > 0 ),这是一个标准化系数,确保 ( e_j ) 落在 [0, 1] 区间内。当某个 ( p_{ij} = 0 ) 时,规定 ( p_{ij} \ln(p_{ij}) = 0 ),这是对数运算中的常见处理。
步骤3:计算差异系数 ( g_j )[ g_j = 1 - e_j ] 差异系数 ( g_j ) 反映了第j项指标下各方案数值的差异程度。( g_j ) 越大,说明该指标数据的离散程度越大,提供的信息量越多,在评价中应起更重要的作用。
步骤4:计算权重 ( w_j )将差异系数归一化,即得到每个指标的熵权: [ w_j = \frac{g_j}{\sum_{j=1}^{n} g_j} ] 最终,我们得到权重向量 ( W = (w_1, w_2, ..., w_n) ),且满足 ( \sum_{j=1}^{n} w_j = 1 )。
2.3 一个简单的数值例子
假设评价3个城市(A, B, C)的2个指标:X1(GDP,亿元,正向),X2(污染指数,反向)。原始数据如下:
| 城市 | X1 (GDP) | X2 (污染指数) |
|---|---|---|
| A | 800 | 60 |
| B | 500 | 40 |
| C | 200 | 80 |
首先,将X2(污染指数)负向指标正向化。采用常见方法:X2' = max(X2) - X2。max(X2)=80,则转化后数据为:
| 城市 | X1 (GDP) | X2' (环境质量) |
|---|---|---|
| A | 800 | 20 (80-60) |
| B | 500 | 40 (80-40) |
| C | 200 | 0 (80-80) |
步骤1:计算比重 ( p_{ij} )
- X1列总和:800+500+200=1500
- p_A1 = 800/1500 ≈ 0.5333
- p_B1 = 500/1500 ≈ 0.3333
- p_C1 = 200/1500 ≈ 0.1333
- X2‘列总和:20+40+0=60
- p_A2 = 20/60 ≈ 0.3333
- p_B2 = 40/60 ≈ 0.6667
- p_C2 = 0/60 = 0 (注意,这里会出现0)
步骤2:计算熵值 ( e_j )
- k = 1 / ln(3) ≈ 1 / 1.0986 ≈ 0.9102
- 对于X1: e1 = -k * [0.5333ln(0.5333) + 0.3333ln(0.3333) + 0.1333ln(0.1333)] ≈ -0.9102 * [0.5333(-0.6286) + 0.3333*(-1.0986) + 0.1333*(-2.0149)] ≈ -0.9102 * [-0.3352 - 0.3662 - 0.2687] ≈ -0.9102 * (-0.9701) ≈ 0.8829
- 对于X2‘: 由于p_C2=0,根据规定,0ln(0)按0处理。 e2 = -k * [0.3333ln(0.3333) + 0.6667ln(0.6667) + 0] ≈ -0.9102 * [0.3333(-1.0986) + 0.6667*(-0.4055)] ≈ -0.9102 * [-0.3662 - 0.2703] ≈ -0.9102 * (-0.6365) ≈ 0.5793
步骤3:计算差异系数 ( g_j )
- g1 = 1 - e1 = 1 - 0.8829 = 0.1171
- g2 = 1 - e2 = 1 - 0.5793 = 0.4207
步骤4:计算权重 ( w_j )
- 差异系数总和:0.1171 + 0.4207 = 0.5378
- w1 = 0.1171 / 0.5378 ≈ 0.2177
- w2 = 0.4207 / 0.5378 ≈ 0.7823
结果解读:通过熵权法计算,环境质量(X2‘)的权重(0.78)远高于GDP(X1)的权重(0.22)。这是因为在这个微型数据集中,三个城市在转化后的环境质量指标上差异更显著(20, 40, 0),离散程度大,提供了更多的区分信息。而GDP数据虽然绝对值差异大,但其相对比重分布(0.53, 0.33, 0.13)的“均匀程度”比环境质量列要高(后者的分布是0.33, 0.67, 0),导致其熵值更大、差异系数更小,权重因而降低。这个例子清晰地展示了熵权法“让数据自己决定重要性”的特点。
3. TOPSIS模型核心流程回顾与权重融合点
在引入熵权之前,我们先快速且深入地回顾一下经典TOPSIS模型的步骤,并明确权重将在哪一步嵌入。这是实现“修正”的关键。
3.1 经典TOPSIS模型五步法
假设原始数据矩阵同样为 ( X = (x_{ij})_{m \times n} ),有m个方案,n个指标。
步骤A:指标同向化与标准化
- 同向化:将所有评价指标转化为正向指标(越大越好)。对于负向指标,常用方法有:
- 倒数法:( x_{ij}' = 1 / x_{ij} ) (要求 ( x_{ij} > 0 ))
- 差值法:( x_{ij}' = M_j - x_{ij} ),其中 ( M_j = \max_i(x_{ij}) )
- 区间型指标有专门的处理公式。这一步至关重要,方向错了全盘皆输。
- 标准化:消除量纲影响。最常用的是向量归一化(欧式距离空间下的标准化): [ z_{ij} = \frac{x_{ij}'}{\sqrt{\sum_{i=1}^{m} (x_{ij}')^2}} ] 得到一个标准化矩阵 ( Z = (z_{ij})_{m \times n} )。经过此处理,每个指标下所有方案的平方和为1。
步骤B:确定正理想解 ( Z^+ ) 与负理想解 ( Z^- )
- 正理想解 ( Z^+ = (z_1^+, z_2^+, ..., z_n^+) ),其中 ( z_j^+ = \max_i(z_{ij}) )。
- 负理想解 ( Z^- = (z_1^-, z_2^-, ..., z_n^-) ),其中 ( z_j^- = \min_i(z_{ij}) )。 注意,这里是在标准化后的矩阵 ( Z ) 中寻找每列的最大值和最小值。
步骤C:计算各方案到正负理想解的距离
- 到正理想解的距离:( D_i^+ = \sqrt{\sum_{j=1}^{n} (z_{ij} - z_j^+)^2} )
- 到负理想解的距离:( D_i^- = \sqrt{\sum_{j=1}^{n} (z_{ij} - z_j^-)^2} ) 这里计算的是欧几里得距离。
步骤D:计算各方案与理想解的相对贴近度 ( C_i )[ C_i = \frac{D_i^-}{D_i^+ + D_i^-} ] 显然,( 0 \le C_i \le 1 )。( C_i ) 越大,说明该方案离正理想解越近,离负理想解越远,综合表现越好。
步骤E:排序根据 ( C_i ) 值从大到小对方案进行排序,( C_i ) 最大者为最优方案。
3.2 权重嵌入的关键步骤:距离计算
在经典TOPSIS中,步骤C的距离公式隐含了一个假设:所有指标在距离计算中的重要性是相等的。这体现在求和时没有对每个维度(指标)的差值进行加权。
熵权法修正的核心,就是将计算出的权重向量 ( W = (w_1, w_2, ..., w_n) ) 嵌入到这个距离公式中。修正后的加权欧式距离公式为: [ D_i^+ = \sqrt{\sum_{j=1}^{n} w_j \cdot (z_{ij} - z_j^+)^2} ] [ D_i^- = \sqrt{\sum_{j=1}^{n} w_j \cdot (z_{ij} - z_j^-)^2} ]
理解这个修正:这相当于在n维评价空间中,不同指标方向(维度)的“尺度”或“重要性”不同。权重大的指标,其坐标差值在计算总距离时占的份额就大,意味着在这个指标上的表现好坏,对最终评价结果的影响更大。这完美契合了我们的认知——重要的指标应该对评价结果有更大的话语权。
那么,权重应该在流程的哪一步加入?有两种常见做法:
- 在标准化之后,计算距离之前加入:即先得到标准化矩阵 ( Z ),然后直接用上述加权距离公式。这是最主流、最清晰的做法。
- 在标准化之前,对原始数据加权:即先计算 ( x_{ij}'' = w_j \cdot x_{ij}' )(同向化后),然后再对加权后的矩阵进行标准化。这种方法在数学上有时与第一种不等价,因为标准化操作是线性的,但加权会改变数据的分布,从而影响标准化结果。通常推荐第一种方法,逻辑更清晰:先统一量纲(标准化),再赋予不同维度重要性(加权距离)。
4. 手把手Python实现:从数据到排序的完整代码
理论清晰了,我们来看如何用Python实现“熵权法修正的TOPSIS”。我将提供一个模块化、注释清晰的代码,并逐段解释,你可以直接用于自己的建模项目。
import numpy as np import pandas as pd def data_direction_normalization(data, indices_type): """ 数据同向化处理。 :param data: 原始数据矩阵,二维numpy数组或DataFrame,形状 (m, n) :param indices_type: 列表,长度为n,指定每列指标的类型。 1 表示正向指标(越大越好), -1 表示负向指标(越小越好), 0 表示区间型指标(在某个区间内最好,需额外提供区间参数,本例暂不实现)。 :return: 同向化后的数据矩阵 """ data = np.array(data, dtype=float) normalized_data = data.copy() n_cols = data.shape[1] for j in range(n_cols): if indices_type[j] == 1: # 正向指标,无需处理 continue elif indices_type[j] == -1: # 负向指标,采用差值法正向化 max_val = np.max(data[:, j]) normalized_data[:, j] = max_val - data[:, j] # 区间型指标处理代码在此省略,可根据需要补充 # elif indices_type[j] == 0: # a, b = optimal_interval[j] # 最优区间[a,b] # M = max(abs(a - data[:, j]), abs(b - data[:, j])) # normalized_data[:, j] = 1 - (data[:, j] - a) / (b - a) if data[:, j] < a else ... return normalized_data def entropy_weight_method(data_normalized): """ 熵权法计算权重。 :param data_normalized: 同向化后的数据矩阵,形状 (m, n) :return: 权重向量,形状 (n,) """ # 步骤1: 计算比重矩阵 (概率分布) # 防止除零和log(0),加一个极小值eps eps = 1e-10 data_normalized = data_normalized + eps # 计算每列总和 col_sum = np.sum(data_normalized, axis=0) # 计算比重 p_ij P = data_normalized / col_sum # 步骤2: 计算熵值 e_j m, n = P.shape # 处理P中可能为0的元素,避免log(0) P_log = np.log(P + eps) # 对整体加eps,确保log运算有效 e = - (1 / np.log(m)) * np.sum(P * P_log, axis=0) # 步骤3: 计算差异系数 g_j g = 1 - e # 步骤4: 计算权重 w_j w = g / np.sum(g) return w def topsis(data, weights, indices_type): """ 执行加权TOPSIS评价。 :param data: 原始数据矩阵,形状 (m, n) :param weights: 权重向量,形状 (n,)。可由熵权法或其他方法得到。 :param indices_type: 同 data_direction_normalization 函数。 :return: 相对贴近度 C_i (得分),排序结果 """ # Step 1: 数据同向化 data_normalized = data_direction_normalization(data, indices_type) # Step 2: 向量归一化标准化 (Z-score标准化不适用于TOPSIS距离计算,这里用向量归一化) # 公式: z_ij = x_ij' / sqrt(sum_i (x_ij')^2) norm = np.sqrt(np.sum(data_normalized ** 2, axis=0)) Z = data_normalized / norm # Step 3: 确定正负理想解 Z_pos = np.max(Z, axis=0) # 正理想解 Z_neg = np.min(Z, axis=0) # 负理想解 # Step 4: 计算加权距离 # 注意:权重在这里融入距离计算 # 使用 np.linalg.norm 计算加权欧式距离更高效 # D+ = sqrt( sum( w_j * (Z_ij - Z+_j)^2 ) ) # 可以写成: sqrt( (weights * (Z - Z_pos)**2).sum(axis=1) ) # 但为了清晰,我们分步计算: weighted_dist_pos = np.sqrt(np.sum(weights * ((Z - Z_pos) ** 2), axis=1)) weighted_dist_neg = np.sqrt(np.sum(weights * ((Z - Z_neg) ** 2), axis=1)) # Step 5: 计算相对贴近度 (得分) C = weighted_dist_neg / (weighted_dist_pos + weighted_dist_neg) # Step 6: 排序 # 返回从大到小的排序索引 rank = np.argsort(-C) # 降序排列 return C, rank # ============ 主程序示例 ============ if __name__ == '__main__': # 示例数据:评价4个方案,3个指标 # 指标1: 利润(正向),指标2: 成本(负向),指标3: 客户满意度(正向) raw_data = np.array([ [80, 300, 90], [75, 280, 85], [90, 350, 92], [70, 250, 88] ]) # 定义指标类型:1为正向,-1为负向 index_types = [1, -1, 1] print("原始数据矩阵:") print(raw_data) print("\n指标类型(1正向,-1负向):", index_types) # 1. 数据同向化 data_homogenized = data_direction_normalization(raw_data, index_types) print("\n同向化后数据矩阵:") print(data_homogenized) # 2. 使用熵权法计算权重 weights_entropy = entropy_weight_method(data_homogenized) print("\n熵权法计算得到的权重:") for i, w in enumerate(weights_entropy): print(f" 指标{i+1}: {w:.4f}") # 3. 使用熵权法权重进行TOPSIS评价 scores, ranking = topsis(raw_data, weights_entropy, index_types) print("\n--- 基于熵权法-TOPSIS的综合评价结果 ---") print("各方案相对贴近度 (得分):") for i, score in enumerate(scores): print(f" 方案{i+1}: {score:.6f}") print("\n方案排序 (从优到劣):") for i, idx in enumerate(ranking): print(f" 第{i+1}名: 方案{idx+1} (得分: {scores[idx]:.6f})")代码关键点解读与避坑指南:
- 同向化处理:
data_direction_normalization函数是关键第一步。示例中负向指标用了差值法(max - x),确保所有指标变为“越大越好”。务必根据你的数据特性选择合适的方法。对于成本型指标,有时也用倒数法,但要确保数据全为正且不会导致极端值。 - 熵权法中的数值稳定性:在
entropy_weight_method函数中,我们给数据加了一个极小值eps(1e-10)。这是为了防止两种极端情况:- 某指标下所有方案值完全相同,导致
p_ij = 1/m,计算ln(p_ij)没问题,但若原始数据有0,除法和对数会出问题。 - 某方案在某指标上值为0,同向化后可能仍为0,导致
p_ij=0,计算0 * ln(0)在数学上无定义。加eps是一个工程上的通用平滑处理。
- 某指标下所有方案值完全相同,导致
- TOPSIS标准化选择:在
topsis函数中,我们使用了向量归一化(Z = data_normalized / norm),而不是常见的Z-score标准化。这是因为TOPSIS的距离计算基于欧式空间,向量归一化能保证每个指标维度上的向量模长为1,在此空间下计算距离是合理的。Z-score标准化会改变数据的相对位置关系,可能不适用于欧式距离评价。 - 权重融入时机:在计算
weighted_dist_pos和weighted_dist_neg时,我们清晰地展示了权重如何与标准化后的差值平方相乘再求和开根。这是修正的核心。 - 结果解读:最终输出的
C值(相对贴近度)介于0到1之间,可以直接作为综合得分。排序时按C值降序排列。
运行这段代码,你将得到基于熵权法权重的TOPSIS评价结果。你可以尝试修改原始数据,观察权重和排序结果如何随之变化,直观感受熵权法的数据驱动特性。
5. 建模实战:以“城市发展评价”为例的完整分析
让我们用一个更贴近数学建模竞赛的完整例子,串联起从问题理解到结果分析的全过程。假设题目要求对全国10个主要城市进行综合发展水平评价,我们选取了5个指标:
- X1: 人均GDP(万元,正向)
- X2: 城镇登记失业率(%,负向)
- X3: 每万人拥有医院床位数(张,正向)
- X4: PM2.5年均浓度(μg/m³,负向)
- X5: 人均公共图书馆藏量(册,正向)
我们虚构一组数据用于演示:
import pandas as pd import numpy as np # 虚构数据 cities = ['城市A', '城市B', '城市C', '城市D', '城市E', '城市F', '城市G', '城市H', '城市I', '城市J'] data = np.array([ [12.5, 3.2, 65, 38, 1.2], [9.8, 2.8, 58, 45, 0.9], [15.2, 3.8, 72, 28, 1.8], [8.5, 3.5, 50, 55, 0.7], [11.0, 2.5, 63, 42, 1.1], [13.7, 3.0, 68, 35, 1.5], [10.2, 4.0, 55, 60, 0.8], [14.5, 2.2, 75, 30, 2.0], [9.0, 3.6, 52, 50, 0.6], [12.0, 2.9, 60, 40, 1.3] ]) df = pd.DataFrame(data, index=cities, columns=['人均GDP', '失业率', '床位数', 'PM2.5', '藏书量']) print("原始数据:") print(df)步骤一:数据预处理与同向化指标类型:人均GDP(1),失业率(-1),床位数(1),PM2.5(-1),藏书量(1)。 使用之前的data_direction_normalization函数进行处理。注意,对失业率和PM2.5使用差值法进行正向化。
步骤二:熵权法计算权重调用entropy_weight_method函数。假设我们得到权重如下:
人均GDP: 0.18 失业率: 0.22 床位数: 0.20 PM2.5: 0.25 藏书量: 0.15权重分析:PM2.5的权重最高(0.25),说明在这个虚构的数据集中,各城市在空气质量上的差异最大,对区分城市发展水平贡献的信息最多。失业率次之。人均GDP的权重并非最高,这可能是因为各城市的人均GDP数据相对集中(分布较均匀),区分度反而不如环境和社会指标。这体现了熵权法的客观性——它不认为经济指标一定最重要,而是看数据本身的区分能力。
步骤三:执行加权TOPSIS评价调用topsis函数,传入原始数据、熵权法权重和指标类型。
步骤四:结果输出与分析假设我们得到各城市的相对贴近度C和排序:
| 排名 | 城市 | 相对贴近度 (C) | 解读 |
|---|---|---|---|
| 1 | 城市H | 0.752 | 综合发展最佳 |
| 2 | 城市C | 0.681 | 发展水平次之 |
| 3 | 城市F | 0.623 | 位列第三 |
| ... | ... | ... | ... |
| 10 | 城市I | 0.312 | 综合发展相对滞后 |
深度分析报告撰写要点(模拟论文部分):
- 权重合理性分析:在论文中,不能只列出权重,必须解释。“由熵权法计算所得权重表明,在本评价体系中,PM2.5年均浓度与城镇登记失业率两个指标的权重较高,分别达到0.25和0.22。这反映出在当前数据集中,各城市在环境质量与就业状况上的差异较为显著,是区分其综合发展水平的关键维度。而人均GDP权重为0.18,说明经济总量的绝对差异在本数据集中提供的区分信息相对有限,这可能与所选城市均处于较高发展阶段有关。”
- 排序结果分析:结合权重分析排序。“排名第一的城市H,其PM2.5浓度(30)和失业率(2.2)均为最优或次优水平,尽管人均GDP(14.5)并非最高,但在高权重的环境与社会指标上表现突出,因此综合得分最高。这体现了本评价模型对‘绿色发展’和‘民生保障’的侧重。”
- 模型对比与稳健性检验(高级内容):为了增强说服力,可以在论文中加入对比实验。
- 对比等权重TOPSIS:计算一套所有指标权重均为0.2的TOPSIS结果。对比发现,排名可能发生变化。例如,城市C可能因为人均GDP最高而跃居第一。这时可以分析:“若采用传统等权重假设,模型结果会过度偏向经济指标,忽视了环境与社会指标的差异性贡献。熵权法的修正使评价结果更全面地反映了各维度发展的不均衡性。”
- 敏感性分析:可以微调某个指标的数据,观察权重和排序的稳定性。或者,使用另一种客观赋权法(如CRITIC法)计算权重,再代入TOPSIS,看排序结果是否大体一致。如果结果稳健,则说明模型可信度高。
- 模型优缺点与改进方向:
- 优点:客观性强,避免了主观随意性;原理清晰,计算过程可重复;能有效挖掘数据本身的区分信息。
- 缺点:熵权法完全依赖数据,如果某重要指标恰好数据离散度小,其权重会被压低,可能与实际重要性不符(例如,所有城市的“每万人医生数”都很高且接近,熵权法会赋予其低权重,但该指标本身非常重要)。此时,可以考虑主客观组合赋权,例如用AHP(层次分析法)确定主观权重,再与熵权法确定的客观权重进行加权融合,得到综合权重。
- 改进:对于区间型指标,需要在同向化步骤中采用更复杂的变换公式。数据预处理时,异常值的处理也会显著影响熵权结果,需谨慎对待。
通过这个完整的案例,你将不仅掌握代码如何运行,更能理解如何在数学建模论文中呈现、分析和论证“基于熵权法修正的TOPSIS模型”的结果,使其成为一个有深度、有说服力的解决方案。