熵权法与TOPSIS模型在供应商评价中的实战应用1. 多指标评价问题的挑战与解决方案在商业决策和工程管理中我们经常面临需要从多个候选对象中做出选择的场景。以供应商评价为例企业需要综合考虑供货量、交货准时率、产品质量、价格等多个维度的指标。这类多准则决策问题MCDM的核心难点在于指标量纲不一致比如价格单位是元而质量评分是0-100分指标方向冲突有些指标越大越好如供货量有些越小越好如次品率权重分配主观性传统方法如层次分析法依赖专家打分容易引入人为偏差熵权法Entropy Weight Method正是为解决这些问题而生的客观赋权方法。它基于信息熵理论通过数据本身的离散程度自动确定各指标权重——变异程度越大的指标包含的信息量越多赋予的权重也越高。# 示例熵权法核心公式Python实现 import numpy as np def entropy_weight(X): # 标准化 X (X - X.min(axis0)) / (X.max(axis0) - X.min(axis0)) # 计算比重 P X / X.sum(axis0) # 计算熵值 E -np.sum(P * np.log(P 1e-10), axis0) / np.log(len(X)) # 计算权重 W (1 - E) / (1 - E).sum() return W2. 熵权法完整实现流程2.1 数据预处理指标正向化不同类型的指标需要统一转化为极大型指标越大越好指标类型转换公式示例极小型x max(x) - x次品率→合格率中间型x 1 - |x - x_best|/MPH值接近7为最佳区间型分段线性转换温度在[20,25]最佳def min_to_max(x): return x.max() - x def mid_to_max(x, best): M np.abs(x - best).max() return 1 - np.abs(x - best)/M def interval_to_max(x, a, b): M max(a - x.min(), x.max() - b) y np.zeros_like(x) y[x a] 1 - (a - x[x a])/M y[(x a) (x b)] 1 y[x b] 1 - (x[x b] - b)/M return y2.2 标准化处理消除量纲采用Min-Max标准化 $$ z_{ij} \frac{x_{ij} - \min(x_j)}{\max(x_j) - \min(x_j)} $$注意当数据存在负数时建议使用Z-score标准化2.3 熵权计算核心步骤计算概率矩阵 $$ p_{ij} \frac{z_{ij}}{\sum_{i1}^n z_{ij}} $$计算信息熵 $$ e_j -\frac{1}{\ln n}\sum_{i1}^n p_{ij}\ln p_{ij} $$确定权重 $$ w_j \frac{1 - e_j}{\sum_{j1}^m (1 - e_j)} $$# 完整熵权法实现 def entropy_weight_method(X): # 标准化 X (X - X.min(axis0)) / (X.max(axis0) - X.min(axis0)) # 计算概率矩阵 P X / X.sum(axis0) # 处理log(0)情况 P_log np.where(P 0, np.log(P), 0) # 计算熵值 E -np.sum(P * P_log, axis0) / np.log(len(X)) # 计算权重 W (1 - E) / (1 - E).sum() return W3. TOPSIS模型集成应用熵权法确定权重后结合TOPSIS优劣解距离法进行综合评价构建加权标准化矩阵 $$ V Z \times diag(W) $$确定正负理想解 $$ V^ [\max V_{i1}, \max V_{i2}, ..., \max V_{im}] $$ $$ V^- [\min V_{i1}, \min V_{i2}, ..., \min V_{im}] $$计算距离与得分 $$ D_i^ \sqrt{\sum_{j1}^m (V_{ij} - V_j^)^2} $$ $$ D_i^- \sqrt{\sum_{j1}^m (V_{ij} - V_j^-)^2} $$ $$ S_i \frac{D_i^-}{D_i^ D_i^-} $$def topsis(X, W): # 加权标准化 V X * W # 确定理想解 V_pos V.max(axis0) V_neg V.min(axis0) # 计算距离 D_pos np.sqrt(((V - V_pos)**2).sum(axis1)) D_neg np.sqrt(((V - V_neg)**2).sum(axis1)) # 计算得分 S D_neg / (D_pos D_neg) return S4. 2021国赛C题实战解析4.1 问题背景与数据特征某企业需要从402家原材料供应商中筛选出最重要的50家。给定数据包括240周的订货量m³对应周期的供货量m³供应商材料分类A/B/C三类构建4个评价指标指标名称计算方式指标类型平均供货强度240周供货量均值极大型平均完成率供货量/订货量的均值区间型[0.8,1.2]订单率供货量≥10m³的周数占比极大型风险供货量的标准差极小型4.2 Python完整实现import pandas as pd import numpy as np # 数据读取与预处理 df_order pd.read_excel(data.xlsx, sheet_name订货量) df_supply pd.read_excel(data.xlsx, sheet_name供货量) # 计算指标 df_supply[avg_supply] df_supply.iloc[:, 2:].mean(axis1) # 平均供货强度 df_supply[completion_rate] (df_supply.iloc[:, 2:] / df_order.iloc[:, 2:]).mean(axis1) # 完成率 df_supply[order_rate] (df_supply.iloc[:, 2:] 10).sum(axis1) / 240 # 订单率 df_supply[risk] df_supply.iloc[:, 2:].std(axis1) # 风险 # 指标正向化 df_supply[risk] df_supply[risk].max() - df_supply[risk] # 极小型→极大型 df_supply[completion_rate] interval_to_max( df_supply[completion_rate].values, 0.8, 1.2) # 区间型→极大型 # 熵权TOPSIS评价 X df_supply[[avg_supply, completion_rate, order_rate, risk]].values W entropy_weight_method(X) scores topsis(X, W) # 结果输出 df_result df_supply[[供应商ID, 材料分类]].copy() df_result[score] scores top_50 df_result.sort_values(score, ascendingFalse).head(50)4.3 结果分析与业务解读通过熵权法计算得到的权重分布指标权重平均供货强度0.42完成率0.18订单率0.28风险0.12关键发现供货强度权重最高反映企业最关注供应商的产能规模订单率权重次之体现对供货稳定性的要求风险权重较低可能因为多数供应商波动较小前50家供应商的材料分类分布材料类型数量占比A类2856%B类1530%C类714%5. 模型优化与注意事项5.1 熵权法的局限性极端值敏感单个异常值可能显著改变权重分配业务逻辑冲突数据驱动的权重可能与实际业务重要性不符样本依赖性不同数据集计算的权重不可直接比较5.2 改进方案组合赋权法熵权法客观 AHP主观综合权重公式$W \alpha W_{objective} (1-\alpha)W_{subjective}$数据预处理优化# 改进的标准化方法处理负值 def standardize(X): mean X.mean(axis0) std X.std(axis0) return (X - mean) / std结果验证通过敏感性分析检验权重稳定性与历史决策对比验证模型合理性5.3 工程实践建议数据质量检查处理缺失值均值填充/删除消除量纲影响必须标准化可视化分析import matplotlib.pyplot as plt plt.figure(figsize(10,6)) plt.barh(range(len(W)), W, tick_label[供货强度,完成率,订单率,风险]) plt.title(指标权重分布) plt.show()动态评价机制定期更新数据重新计算设置时间衰减因子更重视近期表现在实际数学建模竞赛中这种组合方法既能展现理论深度又具备实操性。记得在论文中详细说明每个步骤的数学依据和实现细节同时结合业务场景解释结果的实际意义。