DEMATEL-决策试验与评价实验室法
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_专家1、DM_专家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} $$
若评分表中存在 专家权重、权重、weight 或 Weight 列,则程序将其识别为专家权重;否则退化为等权。记归一化后的专家权重为
$$ \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。构造完成后,程序会把该矩阵写入 DirectMatrix 与 DM_逆推 工作表,并进入标准 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} $$
当前实现支持四种阈值方法:
- 均值阈值:
$$ \theta=\operatorname{mean}(\Omega) \tag{25} $$
- 中位数阈值:
$$ \theta=\operatorname{median}(\Omega) \tag{26} $$
- 分位数阈值:
$$ \theta=\operatorname{quantile}(\Omega,q) \tag{27} $$
其中 \(q\in[0,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-决策试验与评价实验室法-<时间戳>-模式.xlsxcharts/weights_bar.pngcharts/cause_effect.pngcharts/total_relation_heatmap.pngrepro_dematel_<时间戳>.pyrepro_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.py、ui/dematel_results_widget.py |
总体来看,本项目中的 DEMATEL 属于“标准因果关系矩阵运算 + 可选方案评分 + 逆向专家评分表构造”的工程化实现。对于论文写作,建议把式(11)—式(23)作为 DEMATEL 主体,再根据是否使用方案评分或逆向流程,补充式(10)和式(34)—式(36)对应的实现细节。
11. 论文模板补充
11.1 方法描述模板
“本文采用 DEMATEL 方法分析指标之间的作用关系。首先构造指标间的直接关系矩阵并进行归一化处理,随后通过矩阵闭包运算得到总关系矩阵,并进一步计算各指标的影响度、受影响度、中心度与因果度。在此基础上,可根据总关系结构识别因果组与结果组,并将 DEMATEL 权重进一步应用于方案数据,得到综合得分与排序结果。”
11.2 结果解释模板
结果部分可写为:结果表明,中心度越大说明指标在系统中越重要,因果度为正表示该指标更偏向原因因素,因果度为负则更偏向结果因素。若将 DEMATEL 权重继续用于方案评分,则综合得分越大表示方案在考虑指标因果结构后的整体表现越优。
11.3 表格标题模板
- 表 1 DEMATEL 直接关系矩阵与总关系矩阵结果表
- 表 2 DEMATEL 中心度与因果度结果表
- 表 3 DEMATEL 指标权重结果表
- 表 4 DEMATEL 方案综合得分与排序结果表
11.4 图表题注模板
- 图 1 DEMATEL 因果关系图。
- 图 2 DEMATEL 中心度与因果度散点图。
- 图 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.png、charts/total_relation_heatmap.png、charts/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-正向.xlsx与DEMATEL-决策试验与评价实验室法-20260329_172139-逆向.xlsx,真实工作表均为参数、数据预览、直接关系矩阵、归一化直接矩阵、总关系矩阵、指标统计(D_R)、指标权重、关系边(阈值后)、方案归一化数据、方案得分排名、图表清单。 - 两个目录的实体图均位于
charts/子目录,实际文件为cause_effect.png、total_relation_heatmap.png、weights_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.png、total_relation_heatmap.png、weights_bar.png,并明确正向与逆向目录各自存在同名图副本。 repro_dematel_20260329_172139.py/repro_dematel_20260329_172140.py采用SRC_CANDIDATES多候选回退,附录中应写明优先repro_inputs/...,再回退到临时路径或结果簿。