正在加载中...

展开本页目录
算法教程DEMATEL-决策试验与评价实验室法

DEMATEL-决策试验与评价实验室法

No.082 · 在线教程

DEMATEL(Decision Making Trial and Evaluation Laboratory,决策试验与评价实验室法)是一种用于识别复杂系统中指标间影响关系、因果结构与关键因素的重要方法。其核心思想是:先构造指标间的直接关系矩阵,再通过矩阵归一化与闭包累积得到…

DEMATEL-决策试验与评价实验室法

1. 方法概述

DEMATEL(Decision Making Trial and Evaluation Laboratory,决策试验与评价实验室法)是一种用于识别复杂系统中指标间影响关系、因果结构与关键因素的重要方法。其核心思想是:先构造指标间的直接关系矩阵,再通过矩阵归一化与闭包累积得到总关系矩阵,进一步计算各指标的影响度、受影响度、中心度与因果度,最后据此分析因果结构并导出权重。

就本项目的具体实现而言,DEMATEL 模块不仅能输出标准 DEMATEL 的因果分析结果,还包含两项工程化扩展:

  • 若 Excel 中同时提供 Data/数据 工作表,程序会把 DEMATEL 导出的指标权重继续应用到方案-指标数据上,输出综合得分与排名;
  • 支持“逆向流程”,即先由专家评分表自动构造直接关系矩阵,再调用同一 DEMATEL 核心求解因果关系与权重。

设共有 \(n\) 个指标,记指标集合为

$$ C=\{C_1,C_2,\ldots,C_n\} \tag{1} $$

DEMATEL 的目标是基于指标之间的影响强度,识别系统中的关键驱动因素与受影响因素,并进一步得到一组可用于后续评价的指标权重。

2. 输入结构与项目流程

2.1 正向流程输入结构

当前项目的 DEMATEL 参数页 ui/dematel_params_widget.py 要求上传 Excel 文件。建议输入结构如下:

  • DirectMatrix直接关系矩阵:必需,为指标×指标的直接影响矩阵;
  • Data数据:可选,第 1 列为方案名称,后续列为指标值;
  • 也支持多个以 DM_ 为前缀的直接关系矩阵工作表,程序会先对其平均再计算。

因此,项目在正向流程中的核心输入可以表示为直接关系矩阵

$$ D=(d_{ij})_{n\times n} \tag{2} $$

其中 \(d_{ij}\) 表示指标 \(C_i\) 对指标 \(C_j\) 的直接影响强度。

项目对式(2)有如下约束:

$$ d_{ij}\ge 0 \tag{3} $$

并要求矩阵为方阵,且行名与列名完全一致。程序还会在计算前把对角线强制改写为

$$ d_{ii}=0,\qquad i=1,2,\ldots,n \tag{4} $$

即使用户上传的矩阵对角线不为 0,核心代码也会按式(4)覆盖。

2.2 多矩阵平均

若 Excel 中存在多个以 DM_ 为前缀的矩阵工作表,例如 DM_专家1DM_专家2 等,则项目会先对这些矩阵做对齐与平均,得到统一的直接关系矩阵。设共有 \(K\) 张矩阵 \(D^{(k)}\),则程序采用

$$ \bar{D}=\frac{1}{K}\sum_{k=1}^{K}D^{(k)} \tag{5} $$

作为后续 DEMATEL 的输入矩阵。

需要注意的是,当前实现要求所有 DM_ 矩阵的行列名集合完全一致;若不一致,程序会直接报错,而不会自动补齐或取交集。

2.3 逆向流程输入结构

逆向流程不是更换 DEMATEL 求解公式,而是先通过专家评分表构造式(2),再调用同一 DEMATEL 核心。

设共有 \(K\) 位专家、第 \(k\) 位专家对第 \(j\) 个指标给出的评分为 \(s_{kj}\),则专家评分矩阵记为

$$ S=(s_{kj})_{K\times n} \tag{6} $$

若评分表中存在 专家权重权重weightWeight 列,则程序将其识别为专家权重;否则退化为等权。记归一化后的专家权重为

$$ \rho_k\ge 0, \qquad \sum_{k=1}^{K}\rho_k=1 \tag{7} $$

项目首先计算各指标的加权平均评分:

$$ \bar{s}_j=\sum_{k=1}^{K}\rho_k s_{kj} \tag{8} $$

设评分跨度为

$$ \Delta=\max_j \bar{s}_j-\min_j \bar{s}_j \tag{9} $$

若 \(\Delta=0\),程序会把其替换为 1 作为兜底分母。随后逆向流程按照评分差异构造直接关系矩阵:

$$ d_{ij}= \begin{cases} 0, & i=j\\[4pt] \max\left(0,\dfrac{\bar{s}_i-\bar{s}_j}{\Delta}\right)\times 4, & i\neq j \end{cases} \tag{10} $$

式(10)对应 utils/dematel_reverse_builder.py 的实际实现口径。这意味着:评分更高的指标会对评分更低的指标形成正向影响,而反向影响直接记为 0。构造完成后,程序会把该矩阵写入 DirectMatrixDM_逆推 工作表,并进入标准 DEMATEL 计算。

3. 直接关系矩阵归一化与总关系矩阵

3.1 归一化方式

本项目支持两种 DEMATEL 归一化口径。

若选择 max_row_sum,则归一化系数定义为

$$ s=\max_{1\le i\le n}\sum_{j=1}^{n}d_{ij} \tag{11} $$

若选择 max_row_col_sum,则归一化系数定义为

$$ s=\max\left\{ \max_{1\le i\le n}\sum_{j=1}^{n}d_{ij}, \max_{1\le j\le n}\sum_{i=1}^{n}d_{ij} \right\} \tag{12} $$

在此基础上,归一化直接关系矩阵为

$$ N=\frac{1}{s}D \tag{13} $$

若 \(s\le 0\),说明直接关系矩阵全为 0,程序会直接报错并终止。

3.2 总关系矩阵

设单位矩阵为 \(I\),则项目采用 DEMATEL 的标准矩阵闭包形式计算总关系矩阵:

$$ T=N(I-N)^{-1} \tag{14} $$

若 \(I-N\) 不可逆,当前实现不会直接失败,而是退回到 Moore-Penrose 广义逆,即

$$ T=N(I-N)^{+} \tag{15} $$

这对应 np.linalg.inv 失败后改用 np.linalg.pinv 的代码逻辑,保证了 DEMATEL 计算的数值稳健性。

4. 指标因果分析与权重导出

4.1 影响度、受影响度、中心度与因果度

在总关系矩阵 \(T=(t_{ij})\) 上,项目按行和与列和分别定义影响度与受影响度:

$$ D_i=\sum_{j=1}^{n}t_{ij} \tag{16} $$

$$ R_i=\sum_{j=1}^{n}t_{ji} \tag{17} $$

由此得到中心度

$$ P_i=D_i+R_i \tag{18} $$

以及因果度

$$ E_i=D_i-R_i \tag{19} $$

项目导出的 指标统计(D/R) 工作表中,prominence 对应式(18),relation 对应式(19)。

4.2 因果组划分

当前实现的组别划分规则非常直接:

$$ \text{group}_i= \begin{cases} \text{cause}, & E_i>0\\ \text{effect}, & E_i\le 0 \end{cases} \tag{20} $$

这意味着因果度恰好等于 0 的指标,在本项目中也会被归为 effect 组,而不是单独列为中性组。

4.3 权重基准

本项目支持两种权重基准。

若选择 prominence,则权重基准直接采用中心度:

$$ b_i=P_i \tag{21} $$

若选择 prominence_relation_norm,则权重基准采用中心度与因果度的联合范数:

$$ b_i=\sqrt{P_i^2+E_i^2} \tag{22} $$

最后统一归一化得到指标权重:

$$ w_i=\frac{b_i}{\sum_{k=1}^{n}b_k} \tag{23} $$

若 \(\sum_k b_k=0\),程序会退化为等权向量。

5. 阈值筛边与关系网络

为便于展示 DEMATEL 的主要影响路径,项目会基于总关系矩阵 \(T\) 对非对角元素进行阈值筛选。记非对角元素集合为

$$ \Omega=\{t_{ij}\mid i\neq j\} \tag{24} $$

当前实现支持四种阈值方法:

  1. 均值阈值:

$$ \theta=\operatorname{mean}(\Omega) \tag{25} $$

  1. 中位数阈值:

$$ \theta=\operatorname{median}(\Omega) \tag{26} $$

  1. 分位数阈值:

$$ \theta=\operatorname{quantile}(\Omega,q) \tag{27} $$

其中 \(q\in[0,1]\) 由界面输入。

  1. 手动阈值:

$$ \theta=\theta_0 \tag{28} $$

最终仅保留满足

$$ t_{ij}\ge \theta,\qquad i\neq j \tag{29} $$

的关系边,并导出为 关系边(阈值后) 工作表。

6. 基于 DEMATEL 权重的方案评分

6.1 方案数据归一化

若 Excel 中提供 Data/数据 工作表,且其中部分列名与 DEMATEL 指标集合一致,则项目会继续对方案数据评分。

设方案-指标数据矩阵为

$$ X=(x_{aj})_{m\times p} \tag{30} $$

其中 \(p\) 为同时存在于 Data 与 DEMATEL 指标集合中的指标数量。项目支持三类指标方向:

  • 正向指标;
  • 负向指标;
  • 适度指标。

当选择 min-max 归一化时,对正向指标采用

$$ z_{aj}=\frac{x_{aj}-\min_a x_{aj}}{\max_a x_{aj}-\min_a x_{aj}} \tag{31} $$

对负向指标采用

$$ z_{aj}=1-\frac{x_{aj}-\min_a x_{aj}}{\max_a x_{aj}-\min_a x_{aj}} \tag{32} $$

对适度指标,设目标值为 \(s_j^\ast\),则程序采用

$$ z_{aj}=1-\frac{|x_{aj}-s_j^\ast|}{\max\big(|\max_a x_{aj}-s_j^\ast|,\ |\min_a x_{aj}-s_j^\ast|\big)} \tag{33} $$

当选择 z-score 时,程序先做标准分数变换,再线性映射到 \([0,1]\) 区间;对负向指标仍做 \(1-z_{aj}\) 翻转,对适度指标仍按式(33)处理。

6.2 加权得分与排名

记 DEMATEL 导出的完整权重向量为 \(w\),若方案数据中仅使用其中 \(p\) 个指标,则程序会先把对应子权重重新归一化,再计算方案得分。设重归一化后的权重为 \(\tilde{w}_j\),则

$$ \tilde{w}_j=\frac{w_j}{\sum_{k\in \mathcal{P}}w_k}, \qquad j\in \mathcal{P} \tag{34} $$

其中 \(\mathcal{P}\) 表示实际参与方案评分的指标子集。

最终方案得分定义为

$$ \operatorname{Score}(A_a)=\sum_{j\in \mathcal{P}} z_{aj}\tilde{w}_j \tag{35} $$

按得分降序排序得到方案排名:

$$ \operatorname{Rank}(A_a)=\operatorname{rank}_{\downarrow}\big(\operatorname{Score}(A_a)\big) \tag{36} $$

项目导出的 方案得分排名 工作表正对应式(35)—式(36)。

7. 项目输出结构与结果文件

7.1 结果结构

calculate_from_excel() 当前返回统一结果字典,主要包括:

  • raw_data:输入文件路径、直接矩阵来源信息、数据预览;
  • processed_data:指标列表、方案归一化数据;
  • step_results:直接关系矩阵、归一化直接矩阵、总关系矩阵、阈值、关系边、指标统计;
  • final_results:指标权重、因果分析表、方案得分;
  • parameters:全部 DEMATEL 参数;
  • charts:导出时生成的图表路径。

7.2 Excel 与图表导出

结果页会按流程模式自动保存到:

  • results/DEMATEL-决策试验与评价实验室法-<时间戳>-正向
  • results/DEMATEL-决策试验与评价实验室法-<时间戳>-逆向

并在目录中写出:

  • DEMATEL-决策试验与评价实验室法-<时间戳>-模式.xlsx
  • charts/weights_bar.png
  • charts/cause_effect.png
  • charts/total_relation_heatmap.png
  • repro_dematel_<时间戳>.py
  • repro_inputs/...

Excel 文件中通常包含以下工作表:

  • 参数
  • 数据预览
  • 直接关系矩阵
  • 归一化直接矩阵
  • 总关系矩阵
  • 指标统计(D/R)
  • 指标权重
  • 关系边(阈值后)
  • 方案归一化数据(若存在 Data/数据 表)
  • 方案得分排名(若成功完成方案评分)
  • 图表清单

其中 图表清单 记录三张图的路径,便于论文插图或二次整理。

7.3 复现脚本

结果页导出的复现脚本会把以下信息写入 Python 文件:

  • 输入文件候选路径;
  • 选中指标列表;
  • 指标方向设置;
  • 适度指标标准值;
  • DEMATEL 参数选项。

脚本随后重新构造 DEMATELOptions,调用 DEMATELCalculator.calculate_from_excel()export_dematel_results(),完成一次独立复算。对于论文复现,该脚本可以直接作为项目实现口径的辅助材料。

8. 实现说明与注意事项

8.1 逆向流程本质上是“先构造矩阵,再跑 DEMATEL”

这点在论文写作中需要明确。当前逆向流程并不是另一种 DEMATEL 公式,而是先通过式(6)—式(10)把专家评分表转成 DirectMatrix,再调用与正向流程完全相同的 DEMATEL 核心。

8.2 关系组划分中 \(E_i=0\) 会被归为 effect

这属于当前项目的实现细节,不是所有 DEMATEL 软件都会这样处理。如果论文图表或表格直接来自本软件,则建议与代码保持一致。

8.3 方案评分只使用 Data 与指标集合的交集列

Data/数据 表中的部分列不在 DEMATEL 指标集合内,或部分 DEMATEL 指标未在 Data 中出现,程序不会报错,而是自动取交集后再按式(34)重归一化权重。这意味着方案评分阶段所用的权重向量,可能与完整 DEMATEL 权重向量在数值上略有不同。

9. 论文写作模板

若本文采用本项目中的 DEMATEL 模块分析指标间作用关系,可按如下方式描述:

首先构造指标间的直接关系矩阵,并根据行和最大值或行列和最大值对其进行归一化,进一步通过矩阵闭包运算得到总关系矩阵。随后分别计算各指标的影响度、受影响度、中心度与因果度,据此识别系统中的因果组与结果组,并进一步导出指标权重。对于存在方案数据的情形,再将 DEMATEL 权重应用到方案-指标数据表中,经同向化与归一化处理后得到综合得分与排序结果。

若本文采用的是本项目的逆向流程,还可补充说明:

对于难以直接给出指标间影响矩阵的场景,本文先基于专家评分表计算各指标的加权平均评分,再按照评分差异映射构造 DEMATEL 直接关系矩阵,最终仍采用标准 DEMATEL 矩阵运算完成因果分析与权重推导。

10. 公式与代码对应关系

表 1 DEMATEL 关键公式与项目实现对应关系

内容 数学表达 项目实现
直接关系矩阵与基本约束 式(2)—式(4) core/calculator.py
多矩阵平均 式(5) core/calculator.py::_read_direct_matrices
逆向评分聚合与矩阵构造 式(6)—式(10) utils/dematel_reverse_builder.py
归一化系数与归一化直接矩阵 式(11)—式(13) core/calculator.py
总关系矩阵 式(14)—式(15) core/calculator.py
D、R、中心度、因果度 式(16)—式(19) core/calculator.py
组别与权重 式(20)—式(23) core/calculator.py
阈值筛边 式(24)—式(29) core/calculator.py::_compute_threshold
方案数据归一化与评分 式(30)—式(36) core/calculator.py::_normalize_indicators
Excel、图表与复现脚本导出 第 7 节 utils/dematel_exporter.pyui/dematel_results_widget.py

总体来看,本项目中的 DEMATEL 属于“标准因果关系矩阵运算 + 可选方案评分 + 逆向专家评分表构造”的工程化实现。对于论文写作,建议把式(11)—式(23)作为 DEMATEL 主体,再根据是否使用方案评分或逆向流程,补充式(10)和式(34)—式(36)对应的实现细节。

11. 论文模板补充

11.1 方法描述模板

“本文采用 DEMATEL 方法分析指标之间的作用关系。首先构造指标间的直接关系矩阵并进行归一化处理,随后通过矩阵闭包运算得到总关系矩阵,并进一步计算各指标的影响度、受影响度、中心度与因果度。在此基础上,可根据总关系结构识别因果组与结果组,并将 DEMATEL 权重进一步应用于方案数据,得到综合得分与排序结果。”

11.2 结果解释模板

结果部分可写为:结果表明,中心度越大说明指标在系统中越重要,因果度为正表示该指标更偏向原因因素,因果度为负则更偏向结果因素。若将 DEMATEL 权重继续用于方案评分,则综合得分越大表示方案在考虑指标因果结构后的整体表现越优。

11.3 表格标题模板

  1. 表 1 DEMATEL 直接关系矩阵与总关系矩阵结果表
  2. 表 2 DEMATEL 中心度与因果度结果表
  3. 表 3 DEMATEL 指标权重结果表
  4. 表 4 DEMATEL 方案综合得分与排序结果表

11.4 图表题注模板

  1. 图 1 DEMATEL 因果关系图。
  2. 图 2 DEMATEL 中心度与因果度散点图。
  3. 图 3 DEMATEL 方案综合得分排序图。

11.5 表格示例

表 1 DEMATEL 因果分析结果表示例

指标 影响度 \(D\) 受影响度 \(R\) 中心度 \(D+R\) 因果度 \(D-R\)
\(C_1\)
\(C_2\)

表注:中心度反映指标重要性,因果度反映指标在系统中的原因属性或结果属性。

12. 单篇终审补充

12.1 图题与表题对齐建议

  • 参数 表可写为:表X DEMATEL 参数设置表。
  • 数据预览 表可写为:表X DEMATEL 数据预览表。
  • 直接关系矩阵 表可写为:表X DEMATEL 直接关系矩阵表。
  • 归一化直接矩阵 表可写为:表X DEMATEL 归一化直接矩阵表。
  • 总关系矩阵 表可写为:表X DEMATEL 总关系矩阵表。
  • 指标统计(D_R) 表可写为:表X DEMATEL 指标统计结果表。
  • 指标权重 表可写为:表X DEMATEL 指标权重表。
  • 关系边(阈值后) 表可写为:表X DEMATEL 阈值筛选后关系边表。
  • 方案归一化数据 表可写为:表X DEMATEL 方案归一化数据表。
  • 方案得分排名 表可写为:表X DEMATEL 方案得分与排序表。
  • 图表清单 表可写为:表X DEMATEL 图表索引与路径表。
  • cause_effect.png 建议写为:图X DEMATEL 因果关系图。
  • total_relation_heatmap.png 建议写为:图X DEMATEL 总关系矩阵热力图。
  • weights_bar.png 建议写为:图X DEMATEL 指标权重图。

12.2 终审说明

  • 当前代表性结果目录建议同时保留正向与逆向两套:正向可采用 results/DEMATEL-决策试验与评价实验室法-20260329_172139-正向,逆向可采用 results/DEMATEL-决策试验与评价实验室法-20260329_172139-逆向。正文若讨论双流程,应分开引用。
  • 当前真实工作表为 参数/数据预览/直接关系矩阵/归一化直接矩阵/总关系矩阵/指标统计(D_R)/指标权重/关系边(阈值后)/方案归一化数据/方案得分排名/图表清单。论文表题应按这组中文口径落地。
  • 当前稳定实体图文件为 charts/cause_effect.pngcharts/total_relation_heatmap.pngcharts/weights_bar.png。若正文解释“原因组/结果组”,应优先配合 cause_effect.png指标统计(D_R) 表一起说明。
  • 真实 repro 脚本为 repro_dematel_20260329_172139.py 或相邻时间戳脚本,其输入口径不是单一 SRC_FILE,而是 SRC_CANDIDATES = [...] 多候选回退:先尝试 repro_inputs/...,找不到时再回退到测试临时路径或当前结果簿。这一点应在附录中写清。
  • 当前较新目录已经统一把第一候选输入放到 repro_inputs/...,论文与附录应以这一可移植路径为主,不要引用脚本里的临时 pytest 路径。

12.3 全量强化补充

  • 本轮按真实磁盘再次核对,算法目录为 具体的算法3/多指标评价/DEMATEL-决策试验与评价实验室法。建议继续保留双目录证据:正向目录为 具体的算法3/多指标评价/DEMATEL-决策试验与评价实验室法/results/DEMATEL-决策试验与评价实验室法-20260329_172139-正向,逆向目录为 具体的算法3/多指标评价/DEMATEL-决策试验与评价实验室法/results/DEMATEL-决策试验与评价实验室法-20260329_172139-逆向
  • 正向与逆向两份主工作簿结构一致,分别是 DEMATEL-决策试验与评价实验室法-20260329_172139-正向.xlsxDEMATEL-决策试验与评价实验室法-20260329_172139-逆向.xlsx,真实工作表均为 参数数据预览直接关系矩阵归一化直接矩阵总关系矩阵指标统计(D_R)指标权重关系边(阈值后)方案归一化数据方案得分排名图表清单
  • 两个目录的实体图均位于 charts/ 子目录,实际文件为 cause_effect.pngtotal_relation_heatmap.pngweights_bar.png。因此这篇完全可以支撑“矩阵表 + 因果图 + 权重图”的组合证据。
  • 正向 repro 脚本为 repro_dematel_20260329_172139.py,其 SRC_CANDIDATES 首项是 repro_inputs/dematel_ui_forward.xlsx;逆向 repro 脚本为 repro_dematel_20260329_172140.py,其 SRC_CANDIDATES 首项是 repro_inputs/dematel_reverse_input_20260329_172139.xlsx。两个目录中对应的 repro_inputs/ 输入副本都实际存在。
  • 因此,这篇应明确写成“正向/逆向双流程、双主目录、各自带标准化 repro_inputs 的多候选回退复现脚本”结构,而不是单目录单脚本结构。
  • 需要排除 __codex_dematel_direct_run_20260321__enhanced_test_tmp 这类中间核查目录;论文和交付说明应优先使用 20260329_172139 这一对最新正逆向目录。

13. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法3/多指标评价/DEMATEL-决策试验与评价实验室法/results/DEMATEL-决策试验与评价实验室法-20260329_172139-正向具体的算法3/多指标评价/DEMATEL-决策试验与评价实验室法/results/DEMATEL-决策试验与评价实验室法-20260329_172139-逆向
  • 正文应围绕 参数数据预览直接关系矩阵归一化直接矩阵总关系矩阵指标统计(D_R)指标权重关系边(阈值后)方案归一化数据方案得分排名图表清单 来写。
  • 图证应对应 cause_effect.pngtotal_relation_heatmap.pngweights_bar.png,并明确正向与逆向目录各自存在同名图副本。
  • repro_dematel_20260329_172139.py / repro_dematel_20260329_172140.py 采用 SRC_CANDIDATES 多候选回退,附录中应写明优先 repro_inputs/...,再回退到临时路径或结果簿。