1. 从“拍脑袋”到“算数据”:为什么我们需要综合评价方法?
在项目评审、人才选拔、产品选型,甚至是日常生活中的“哪家餐厅更好吃”这类问题上,我们常常面临一个困境:如何从一堆各有优劣的选项中,做出一个相对客观、公正、有说服力的选择?过去,我们可能依赖“专家经验”或者“领导拍板”,但这种方式主观性强,容易引发争议,尤其是在涉及资源分配、绩效评估等敏感场景时。比如,公司要评选年度优秀团队,A团队业绩突出但内部协作差,B团队业绩平稳但创新贡献大,C团队客户满意度高但成本控制弱。单看任何一个指标,都无法服众。这时,综合评价方法的价值就凸显出来了。
综合评价方法,本质上是一套将多个评价指标的信息进行综合,从而对评价对象做出一个整体性、量化性判断的数学工具。它不是为了取代人的决策,而是为决策提供一个结构化的、透明的、可追溯的“数据支撑底座”。它回答的核心问题是:当多个指标(有些可能相互矛盾)同时存在时,我们如何建立一个统一的“标尺”来衡量所有对象?这个“标尺”的构建,就涉及到两个关键环节:一是确定各个指标的“话语权”大小(即权重),二是将不同量纲、不同方向的指标值转化为可比较的综合得分。
网络上热门的“层次分析法”、“PCA”、“TOPSIS”等,正是为了解决这些问题而生的经典工具。它们各有各的“脾气”和适用场景。接下来,我将结合多年的数据分析与决策咨询经验,为你深入拆解这几种主流方法的原理、实现步骤、核心陷阱以及如何根据你的具体问题“对号入座”。无论你是项目经理、产品经理、科研人员还是学生,掌握这些方法,都能让你在需要“比个高低、排个先后”的时候,手里多几把趁手的“科学武器”,而不是只能凭感觉。
2. 权重分配的艺术:层次分析法与熵权法深度对比
综合评价的第一步,也是最具“艺术性”的一步,就是确定权重。权重决定了每个指标在最终评价中的重要性。方法主要分两大类:主观赋权法(如层次分析法)和客观赋权法(如熵权法)。选哪种,取决于你手头数据的性质和决策场景的需求。
2.1 层次分析法:将专家判断结构化、量化化
层次分析法是一种经典的主观赋权法。它的核心思想是:人对于事物相对重要性的判断,可以通过两两比较来实现,并将这种比较转化为具体的数值。
2.1.1 核心步骤与实操细节
建立层次结构模型:这是AHP成功的基础。你需要把复杂问题分解为目标层、准则层和方案层。例如,目标层是“选择最佳供应商”,准则层可能包括“产品质量”、“交货周期”、“价格”、“服务水平”,方案层就是各个具体的供应商。这一步的关键是确保准则之间尽可能独立,不要有强相关性。
构造判断矩阵:这是AHP的核心操作。针对某一层(如准则层)的要素,邀请专家(或决策者)对它们进行两两比较。比较时使用1-9标度法:
- 1:两个因素同等重要。
- 3:一个因素比另一个因素稍微重要。
- 5:一个因素比另一个因素明显重要。
- 7:一个因素比另一个因素强烈重要。
- 9:一个因素比另一个因素极端重要。
- 2,4,6,8为上述相邻判断的中间值。 假设有价格(A)、质量(B)、服务(C)三个准则,经过比较,你可能得到如下判断矩阵: | | A(价格) | B(质量) | C(服务) | |-------|---------|---------|---------| | A(价格) | 1 | 1/3 | 1/5 | | B(质量) | 3 | 1 | 1/3 | | C(服务) | 5 | 3 | 1 | 这个矩阵的含义是:对于决策者而言,质量比价格明显重要(B:A=3),服务比价格强烈重要(C:A=5),服务比质量稍微重要(C:B=3)。
层次单排序及一致性检验:计算判断矩阵的最大特征值及其对应的特征向量,这个特征向量经过归一化后,就是该层要素的权重。但这里有一个巨大的坑:人的判断可能不一致。例如,如果你认为A比B重要,B比C重要,那么逻辑上A应该比C重要。但如果你的判断矩阵显示C比A重要,就出现了矛盾。AHP通过计算一致性比率(CR)来检验这种矛盾是否在可接受范围内。
- 实操心得:CR < 0.1 通常认为可接受。如果CR超标,必须返回第二步调整判断矩阵。在实际操作中,我经常遇到专家打分的矩阵CR严重超标,这时不能强行计算,而应该与专家一起回顾比较过程,找出逻辑冲突点,这本身也是澄清决策思路的过程。
层次总排序:计算各方案对于总目标的合成权重。这一步就是简单的加权求和,但需要确保层次单排序的一致性。
2.1.2 AHP的适用场景与局限性AHP非常适合指标数量不多(通常建议不超过9个)、且缺乏历史客观数据,主要依赖专家经验进行决策的场景。例如,新产品功能优先级排序、战略方案选择、人才综合素质评估等。它的优势在于过程透明,能融合多位专家的智慧。但缺点也很明显:严重依赖专家水平,主观性强;当指标过多时,两两比较的工作量呈指数级增长,且容易导致一致性难以通过。
2.2 熵权法:让数据自己“说话”
与AHP相反,熵权法是一种客观赋权法。它源于信息论,熵代表了信息的混乱程度。信息熵越小,说明该指标值的变异程度越大,提供的信息量越多,在综合评价中应赋予更大的权重。
2.2.1 核心计算过程假设我们有m个评价对象,n个评价指标,构成原始数据矩阵 (X = (x_{ij})_{m \times n})。
数据标准化:消除量纲影响。对于正向指标(越大越好)和负向指标(越小越好)需采用不同的公式。这是基础,但容易出错。
- 正向指标:(x'{ij} = \frac{x{ij} - \min(x_j)}{\max(x_j) - \min(x_j)})
- 负向指标:(x'{ij} = \frac{\max(x_j) - x{ij}}{\max(x_j) - \min(x_j)}) 标准化后,所有指标值落在[0,1]区间。
计算比重:计算第j个指标下,第i个对象的特征比重。 (p_{ij} = \frac{x'{ij}}{\sum{i=1}^{m} x'_{ij}})
计算信息熵:计算第j个指标的信息熵。 (e_j = -k \sum_{i=1}^{m} p_{ij} \ln(p_{ij})),其中 (k = 1/\ln(m)),保证 (0 \le e_j \le 1)。
计算差异系数与权重:信息熵越大,说明该指标数据越趋同,区分能力越弱。
- 差异系数:(g_j = 1 - e_j)
- 指标权重:(w_j = \frac{g_j}{\sum_{j=1}^{n} g_j})
2.2.2 熵权法的核心陷阱与使用前提熵权法的权重完全由数据驱动,看似客观,但隐藏着强烈的“数据依赖性”陷阱。
- 陷阱一:对样本量敏感。如果某个指标在所有样本上的值都非常接近(变异小),其熵值会很大,权重就会被压得很低,甚至接近0。这未必合理。例如,评价多家公司的“资产负债率”,如果所有公司都控制在健康范围内(比如40%-60%),变异小,熵权法可能赋予其极低权重。但从风险管理角度看,这个指标至关重要。此时,就需要结合主观判断进行权重修正。
- 陷阱二:无法处理指标相关性。如果两个指标高度相关(如“销售额”和“利润”),它们所反映的信息有大量重叠,熵权法会分别给它们较高的权重(如果它们各自变异都大的话),这相当于在综合评分中重复计算了同一类信息,导致结果失真。
- 使用前提:熵权法适用于你有大量历史数据或样本数据,且希望完全由数据本身揭示指标重要性的场景。它常作为主观赋权法的一个补充或验证工具,形成“主客观结合”的权重。
注意:在实际项目中,我很少单独使用AHP或熵权法。更常见的做法是采用组合赋权。例如,用AHP确定主观权重 (w_j^s),用熵权法确定客观权重 (w_j^o),然后通过一个线性组合(如 (w_j = \alpha w_j^s + (1-\alpha) w_j^o),其中α由决策者设定)得到最终权重。这样既能体现决策者的意图,又能尊重数据的客观规律。
3. 降维与信息浓缩:主成分分析法的原理与实战误读
主成分分析法是一种“另类”的综合评价方法。它最初的目的并非赋权或排序,而是降维。但在实践中,很多人用它来合成一个“综合得分”,从而进行排序评价。
3.1 PCA到底在做什么?一个直观理解
假设你要评价学生的综合素质,收集了语文、数学、英语、物理、化学、历史六科成绩。这六个指标(变量)之间很可能存在相关性(例如数学好的学生物理通常也不差)。PCA要做的是,找到一组全新的、互不相关的“综合指标”(即主成分)来替代原来的六个指标,并且这组新指标能尽可能保留原始数据的信息。
- 第一主成分(PC1):是原始六个指标某种线性组合后,方差最大的方向。可以理解为最能区分学生差异的“综合能力轴”,可能是“理科素养”或“文科素养”。
- 第二主成分(PC2):是与PC1正交(垂直)且方差次大的方向。它捕捉PC1未能解释的剩余信息中最重要的部分。
- 以此类推,每个后续主成分都与前一个正交,且方差递减。
核心计算步骤简述:
- 数据标准化:至关重要!PCA对变量的尺度非常敏感,必须将各指标标准化为均值为0、标准差为1。
- 计算协方差矩阵(或相关系数矩阵):对于标准化后的数据,协方差矩阵就是相关系数矩阵,它反映了指标间的相关性。
- 特征值分解:计算相关系数矩阵的特征值和特征向量。
- 特征值:对应主成分的方差。特征值越大,说明该主成分携带的原始信息越多。
- 特征向量:对应主成分的系数(载荷),它告诉你原始指标是如何组合成这个主成分的。例如,PC1的特征向量在数学、物理上系数很大且同号,在语文、历史上系数很小或为负,那PC1就可以解释为“理科能力”。
- 选择主成分:通常根据累计方差贡献率来选择。例如,前k个主成分的累计贡献率达到85%以上,我们就用这k个主成分代替原来的n个指标。
3.2 如何用PCA进行综合评价?常见的误用与纠正
很多人直接用第一主成分的得分(或前几个主成分的加权得分)作为综合得分进行排序。这种做法存在严重问题:
误用一:将主成分直接视为“综合评价值”。 第一主成分只是方差最大的方向,不一定是“综合评价”的方向。它可能只代表了某一方面(如规模)的差异。用单一主成分排序,结论片面。
相对合理的做法(综合主成分得分):
- 选择前k个主成分,使累计方差贡献率达标(如>85%)。
- 计算每个样本在这k个主成分上的得分 (F_1, F_2, ..., F_k)。
- 以各主成分的方差贡献率 (λ_i / \sum_{i=1}^{k} λ_i) 作为权重,计算综合得分: (F = \frac{λ_1}{\sum λ_i} F_1 + \frac{λ_2}{\sum λ_i} F_2 + ... + \frac{λ_k}{\sum λ_i} F_k) 这个综合得分F,才是基于数据主要信息结构的、相对合理的评价依据。
误用二:忽视主成分的经济或业务含义。 PCA是纯数学变换,生成的主成分可能难以解释。如果PC1是“0.5销售额 + 0.5成本”,这很难赋予业务意义。强行用于评价,会导致决策者难以理解和信任结果。
实操建议:PCA更适合作为探索性数据分析和指标筛选的工具。你可以通过PCA发现哪些指标高度相关(可能信息冗余),从而考虑合并或删减指标,简化评价体系。如果非要用于综合评价,必须结合主成分载荷矩阵,谨慎解释主成分的含义,并采用综合主成分得分法,同时一定要将结果与其他方法(如TOPSIS)进行交叉验证。
4. 逼近理想解:TOPSIS法的逻辑、实现与“熵权TOPSIS”热潮解析
TOPSIS法是一种非常直观且应用广泛的综合评价方法。它的思想朴素而有力:最好的方案应该离理想解最近,离负理想解最远。
4.1 TOPSIS的标准流程与每一步的“为什么”
假设我们有m个方案(评价对象),n个指标。
构造规范化决策矩阵:目的同样是消除量纲。TOPSIS通常采用向量规范化法: (z_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^{m} x_{ij}^2}})为什么用这个?这种方法能保留原始数据中各指标间的相互独立性,且规范化后的值 (z_{ij}) 满足 (0 \le z_{ij} \le 1),但不同于极差标准化,它不改变数据的分布形态。
构造加权规范化矩阵:将上一步得到的矩阵的每一列,乘以其对应的指标权重 (w_j)。 (v_{ij} = w_j \times z_{ij})权重从哪里来?这就是TOPSIS灵活的地方。权重可以来自AHP、熵权法,或者直接由决策者给定。这也引出了“熵权TOPSIS”这个热门组合。
确定理想解与负理想解:
- 理想解 (A^+):由所有指标在加权规范化矩阵中的最优值构成。对于正向指标,取最大值;对于负向指标,取最小值。 (A^+ = { v_1^+, v_2^+, ..., v_n^+ } = { (\max v_{ij} | j \in J^+), (\min v_{ij} | j \in J^-) })
- 负理想解 (A^-):由所有指标在加权规范化矩阵中的最劣值构成。对于正向指标,取最小值;对于负向指标,取最大值。 (A^- = { v_1^-, v_2^-, ..., v_n^- } = { (\min v_{ij} | j \in J^+), (\max v_{ij} | j \in J^-) })这里的核心:理想解和负理想解是虚拟的,它代表了理论上“最好”和“最差”的方案,为所有真实方案提供了两个明确的参照点。
计算各方案到理想解与负理想解的距离: 通常采用欧氏距离。
- 到理想解的距离:(D_i^+ = \sqrt{\sum_{j=1}^{n} (v_{ij} - v_j^+)^2})
- 到负理想解的距离:(D_i^- = \sqrt{\sum_{j=1}^{n} (v_{ij} - v_j^-)^2})为什么用欧氏距离?因为它是最直观的空间距离概念,计算简便,易于理解。也有研究使用曼哈顿距离等其他距离公式,但欧氏距离是最主流的选择。
计算各方案的相对贴近度: (C_i = \frac{D_i^-}{D_i^+ + D_i^-})这个公式的精妙之处:(C_i) 的值介于0到1之间。(C_i) 越接近1,说明该方案离理想解越近,同时离负理想解越远,综合表现越好。排序时按 (C_i) 从大到小排列即可。
4.2 “熵权TOPSIS”为何成为热门?它的优势与注意事项
“熵权TOPSIS”就是将熵权法确定的客观权重,代入到TOPSIS的第二步。这个组合火爆的原因在于它实现了一种“双重客观”:
- 权重客观:通过熵权法从数据本身挖掘指标重要性,避免了主观偏见。
- 排序机制客观:TOPSIS的“逼近理想解”逻辑清晰、计算稳定,不受数据分布形态的严格限制。
这个组合的适用场景非常广泛:只要有足够的样本数据,且指标方向明确(正/负向),几乎都可以使用。例如,电商平台商家综合实力排名、城市发展水平评估、医疗机构服务质量评价等。
然而,在实操中仍需注意:
- 指标同向化处理:务必在第一步之前,将所有指标转化为正向指标(或统一为负向)。通常是将负向指标取倒数或做减法转换,这是一个常见的错误源头。
- 理想解与负理想解的极端性:如果某个指标在所有方案中最大值和最小值差距巨大,那么该指标对距离计算的影响会被放大。加权过程虽然能调节,但仍需关注。
- 结果解读:(C_i) 是一个相对值,只能用于本次评价内的排序。不同批次、不同样本集计算出来的 (C_i) 不能直接比较大小。
5. 方法选型与综合应用:如何为你的问题匹配合适的工具?
面对AHP、PCA、TOPSIS(及其组合),我们该如何选择?没有一种方法是万能的。下面这张对比表可以帮你快速定位:
| 特性维度 | 层次分析法 (AHP) | 主成分分析法 (PCA) | TOPSIS法 | 熵权TOPSIS |
|---|---|---|---|---|
| 核心功能 | 主观赋权、方案排序 | 数据降维、指标筛选、信息浓缩 | 基于距离的综合排序 | 客观赋权+综合排序 |
| 权重来源 | 专家主观判断 | 数据方差结构(隐含) | 需外部输入(可主/客观) | 数据本身(熵权法) |
| 数据要求 | 对历史数据无要求,依赖专家经验 | 需要一定量样本数据,指标间最好有相关性 | 需要指标值和权重 | 需要一定量样本数据 |
| 结果解释性 | 强(过程透明,权重含义明确) | 弱(主成分业务意义可能模糊) | 较强(距离概念直观) | 较强(权重客观,排序机制直观) |
| 主要优势 | 能融合专家经验,适用于无数据或新问题 | 能消除指标间多重共线性,简化评价体系 | 计算简单,逻辑清晰,对数据分布无严格要求 | 完全由数据驱动,避免主观偏差,兼具TOPSIS优点 |
| 主要局限 | 主观性强,指标多时操作繁琐,一致性检验可能不通过 | 主成分含义可能难以解释,直接用于评价可能失真 | 权重依赖外部输入,理想解可能过于极端 | 权重完全依赖数据变异,可能忽视指标实际重要性 |
| 典型应用场景 | 战略决策、方案比选、人才评估、新产品特性优先级排序 | 探索性数据分析、指标体系构建、高维数据可视化 | 供应商选择、绩效排名、项目评估(当权重已知时) | 学术研究、基于历史数据的客观排名(如城市竞争力) |
选型决策流程建议:
明确评价目的与数据基础:
- 如果这是一个全新的、缺乏历史数据的决策问题(如“公司明年该进军哪个新市场?”),AHP是你的首选,因为它能结构化地整合管理层和专家的判断。
- 如果你有大量的历史数据,且目标是得到一个尽可能客观的排名(如“基于过去三年数据评估各分公司绩效”),熵权TOPSIS是非常稳健的选择。
- 如果你的指标非常多(比如超过20个),且怀疑它们之间存在大量重复信息,首先应该用PCA进行降维和指标筛选,简化后的指标集再使用AHP或TOPSIS进行评价。
考虑过程的透明性与可接受度:
- 如果决策需要向多方解释并获得认同,AHP或TOPSIS的过程更易于展示和理解。“我们请了五位专家,通过两两比较得出了这个权重”,或者“我们的方案是离理想方案最近、离最差方案最远的”,这样的逻辑很容易被接受。
- PCA的结果解释则需要更多的统计学背景。
采用组合策略进行稳健性分析: 在实际的重大决策中,我强烈建议不要只依赖一种方法。可以:
- 方法交叉验证:分别用AHP+TOPSIS和熵权TOPSIS计算一次排序,观察结果是否一致。如果结论相似,则信心大增;如果差异较大,就需要深入分析差异原因,是指标设置问题、权重问题还是方法本身的局限性?
- 敏感性分析:特别是在使用主观权重(AHP)时,微调权重,看排序结果是否会发生剧烈变化。如果某个权重微小变动导致排名翻转,说明这个指标非常关键,需要更审慎地确定其权重,或者该评价体系在此指标上区分度不足。
6. 从理论到代码:一个完整的熵权TOPSIS实现示例与避坑指南
理论说得再多,不如一行代码。这里我用Python展示一个完整的熵权TOPSIS实现过程,并穿插讲解每一步的实操陷阱。
import numpy as np import pandas as pd def entropy_weight_topsis(data, positive_indices=None, negative_indices=None): """ 熵权TOPSIS综合评价 :param data: DataFrame, 行为样本,列为评价指标 :param positive_indices: list, 正向指标列索引(从0开始) :param negative_indices: list, 负向指标列索引 :return: 包含权重、贴近度、排名的DataFrame """ # 0. 数据备份与检查 df = data.copy().astype(float) m, n = df.shape # m个样本,n个指标 if positive_indices is None and negative_indices is None: # 默认所有指标为正向 positive_indices = list(range(n)) negative_indices = [] elif positive_indices is None: positive_indices = [i for i in range(n) if i not in negative_indices] elif negative_indices is None: negative_indices = [i for i in range(n) if i not in positive_indices] # 检查索引是否覆盖所有列且不重叠 assert set(positive_indices).union(set(negative_indices)) == set(range(n)), "指标正向/负向分类未覆盖所有列或存在重叠" # --- 第一部分:熵权法计算权重 --- # 1. 数据标准化(极差法,为熵权准备) # 注意:熵权法常用极差标准化,而TOPSIS内部用向量规范化,这里是两个独立步骤 df_for_entropy = df.copy() for j in range(n): col = df_for_entropy.iloc[:, j] max_val, min_val = col.max(), col.min() if max_val == min_val: # 陷阱:指标值全部相同,熵权计算会出问题(除零或log(0)) df_for_entropy.iloc[:, j] = 1.0 / m # 赋予均匀分布 else: if j in positive_indices: df_for_entropy.iloc[:, j] = (col - min_val) / (max_val - min_val) else: # 负向指标 df_for_entropy.iloc[:, j] = (max_val - col) / (max_val - min_val) # 2. 计算特征比重 # 防止标准化后出现0值,导致后续取log无穷大,加一个极小值 df_for_entropy = df_for_entropy + 1e-10 p = df_for_entropy.div(df_for_entropy.sum(axis=0), axis=1) # 3. 计算信息熵 k = 1 / np.log(m) e = -k * (p * np.log(p)).sum(axis=0) # 4. 计算差异系数和权重 d = 1 - e weights = d / d.sum() print("熵权法计算得到的指标权重:") for idx, w in enumerate(weights): print(f" 指标{data.columns[idx]}: {w:.4f}") # --- 第二部分:TOPSIS计算 --- # 1. 向量规范化(TOPSIS专用) norm_df = df / np.sqrt((df ** 2).sum(axis=0)) # 2. 构建加权规范化矩阵 weighted_norm_df = norm_df * weights.values # 3. 确定理想解和负理想解 ideal_best = [] ideal_worst = [] for j in range(n): col = weighted_norm_df.iloc[:, j] if j in positive_indices: ideal_best.append(col.max()) ideal_worst.append(col.min()) else: # 负向指标 ideal_best.append(col.min()) ideal_worst.append(col.max()) ideal_best = np.array(ideal_best) ideal_worst = np.array(ideal_worst) # 4. 计算距离 dist_to_best = np.sqrt(((weighted_norm_df - ideal_best) ** 2).sum(axis=1)) dist_to_worst = np.sqrt(((weighted_norm_df - ideal_worst) ** 2).sum(axis=1)) # 5. 计算相对贴近度 closeness = dist_to_worst / (dist_to_best + dist_to_worst) # 6. 排序 rank = closeness.rank(ascending=False, method='min').astype(int) result_df = pd.DataFrame({ '样本': data.index, '贴近度Ci': closeness, '排名': rank }).sort_values(by='排名') return weights, result_df # ========== 模拟数据示例 ========== # 假设评价4个城市(A,B,C,D)的发展水平,指标:GDP(正向)、失业率(负向)、绿化率(正向) data = pd.DataFrame({ 'GDP(亿元)': [1200, 800, 1500, 600], # 正向 '失业率(%)': [5.2, 3.8, 4.5, 6.1], # 负向,越小越好 '绿化率(%)': [45, 38, 50, 42] # 正向 }, index=['城市A', '城市B', '城市C', '城市D']) print("原始数据:") print(data) print("\n" + "="*50 + "\n") # 指定正向和负向指标索引(对应列顺序0,1,2) positive_idx = [0, 2] # GDP和绿化率是正向指标 negative_idx = [1] # 失业率是负向指标 weights, result = entropy_weight_topsis(data, positive_idx, negative_idx) print("\n综合评价结果:") print(result)关键避坑指南与代码注释:
- 指标同向化处理:在熵权法计算前,就必须根据指标方向进行标准化(代码第25-34行)。这是最容易出错的一步,务必仔细核对每个指标是“越大越好”还是“越小越好”。
- 数据标准化方法分离:注意,熵权法计算权重时,我使用了极差标准化(Min-Max),这是熵权法的常规要求。而在TOPSIS计算过程中,我使用了向量规范化(代码第55行)。两者目的不同,不可混淆。
- 零值处理:熵权法计算中,如果某个指标在所有样本上值相同,标准化后会出现0,导致计算特征比重p时分子为0,或取log(0)报错。代码中通过
max_val == min_val判断并赋予均匀分布,以及添加一个极小值1e-10来避免(代码第27-30行,第38行)。这是工程实现中的常见技巧。 - 权重解读:运行示例代码,你会发现“失业率”的权重可能最高,因为它的原始数据变异系数相对较大(3.8%到6.1%),熵权法认为它提供了更多区分信息。但这可能与你的业务认知(GDP更重要)冲突。此时,就需要回到方法选型的讨论:是否应该采用主客观结合赋权?
- 结果验证:得到排序后,不要只看最终排名。应该检查中间结果:
- 查看权重分布是否合理。
- 查看每个样本到理想解和负理想解的距离(
dist_to_best,dist_to_worst),分析排名靠前的样本是否真的是“全面领先”,还是某方面突出而其他方面平庸(距离理想解并不近,只是离负理想解更远)。
这个完整的代码块提供了一个可复现的模板。你可以替换自己的数据,修改正向/负向指标列表,快速得到初步评价结果。但请记住,代码输出的是数字,而你的业务洞察和对于方法局限性的理解,才是做出正确决策的关键。