问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【数学建模】CRITIC权重法解析:从数学原理到实战分析

创作时间:
作者:
@小白创作中心

【数学建模】CRITIC权重法解析:从数学原理到实战分析

引用
CSDN
1.
https://m.blog.csdn.net/qq_74303061/article/details/146092685

💖 引言

在多指标决策分析中,如何科学地确定各指标的权重是关键问题。主观赋权法(如层次分析法)依赖专家经验,可能引入人为偏差;而传统客观赋权法(如熵权法)仅考虑数据离散性,忽略了指标间的关联性。

CRITIC权重法作为一种改进的客观赋权方法,通过同时衡量指标的对比强度(数据波动性)和冲突性(指标间相关性),能更全面地反映数据内在信息,广泛应用于经济学、管理学、医学等领域。本文将系统解析其原理、应用场景及实现方法,并附Python代码示例。

📚 一、CRITIC权重法

🚀 1.1、 概念定义

CRITIC方法(Criteria Importance Through Intercriteria Correlation)是由Diakoulaki于1995年提出的一种客观权重赋权法,是一种比熵权法和标准离差法更好的赋权法。它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;指标之间的冲突性,用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。对于CRITIC法而言,在标准差一定时,指标间冲突性越小,权重也越小;冲突性越大,权重也越大;另外,当两个指标间的正相关程度越大时,(相关系数越接近 1),冲突性越小,这表明这两个指标在评价方案的优劣上反映的信息有较大的相似性。

🚀 1.2、 应用场景

CRITIC法适用于以下场景:

  1. 指标间存在相关性:如医院科室综合评价(出院人数、床位使用率等关联指标)。

  2. 需兼顾稳定性与独立性:如城市可持续发展评估(经济、环境、社会指标既相关又需独立分析)。

  3. 数据波动性显著:如客户信用评分(收入、负债等指标离散程度差异大)。

🚀 1.3、 使用条件

数据需无量纲化:建议采用正向化/逆向化处理,避免标准化导致标准差统一化。

样本量适中:过少可能导致相关系数不稳定,一般要求样本量≥10。

指标类型兼容:支持混合型指标(正向、负向、区间型),需提前统一方向。

📚 二、数学原理与数据处理

🚀 2.1、 数据正向化

正向指标(越大越好):

$$
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)}
$$

注意

  • 避免使用标准化(Z-score),因其会消除标准差差异。

  • 若是各个指标之间的单位和量级(即计量指标的数量级)不同,在进行分析前需要自行对数据进行归一化

  • 数据单位和量级差不多,也可以直接计算,结果相差不大

🚀 2.2、指标变异性

以标准差的形式来表现变异性,$S_j$表示第j个指标的标准差

$$
\bar{x}j = \frac{1}{n} \sum{i=1}^n x_{ij} \
S_j = \sqrt{\frac{\sum_{i=1}^n (x_{ij} - \bar{x}_j)^2}{n-1}}
$$

其中,n为样本数,$\bar{x}_j$为指标j的均值。

🚀 2.3、计算冲突性(相关系数)

$$
r_{ij} = \frac{\sum_{k=1}^{n} (x_{ki} - \bar{x}i)(x{kj} - \bar{x}j)}{\sqrt{\sum{k=1}^{n} (x_{ki} - \bar{x}i)^2 \sum{k=1}^{n} (x_{kj} - \bar{x}_j)^2}}
$$

$$
R_j = \sum_{i=1}^P (1 - | r_{ij} |)
$$

以相关系数的形式来表现冲突性,n为样本数,m是指标数量$r_{ij}$表示评价指标i和j之间的相关系数

🚀 2.4、计算信息量

$$
C_j = S_j \sum_{i=1}^{p} (1 - r_{ij}) = S_j \times R_j
$$

$C_j$越大,第j个评价指标在整个评价指标体系中的作用越大,就应该给其分配更多的权重。

🚀 2.5、计算权重

第j个指标的客观权重$W_j$

$$
W_j = \frac{C_j}{\sum_{j=1}^{p} C_j}
$$

📚 三、案例分析

🚀 3.2 案例说明

本文使用SPSSPRO官网示例作为例子,来进行分析。

案例:数据是 100 个客户的各方面(能力,品格,担保,资本,环境)评分,利用CRITIC权重法来计算各个变量(能力,品格,担保,资本,环境)的重要性,即所占的权重。

(注意:若是各个指标之间的单位和量级(即计量指标的数量级)不同,在进行分析前需要自行对数据进行归一化)。

SPSSPRO官网的案例分析没有归一化直接计算,而是进行了直接计算,案例对比了是否进行归一化两种结果,分析使用归一化的情形和必要性,详细见结论。也可参考SPSSPRO对CRITIC权重法的讲解[1]综合分析。

数据获取:见[1]网页中下载。

🚀 3.2 计算结果

根据CRITIC法计算得到的各指标权重如下表所示:

不进行归一化结果:

指标变异性
指标冲突性
信息量
权重
能力
2.035
1.292
2.63
0.197
品格
2.31
1.271
2.936
0.22
担保
1.446
1.274
1.841
0.138
资本
1.963
1.389
2.727
0.204
环境
1.29
2.483
3.204
0.24

进行归一化结果:

指标变异性
指标冲突性
信息量
权重
能力
0.174
1.292
0.225
0.14
品格
0.196
1.271
0.249
0.155
担保
0.199
1.274
0.253
0.157
资本
0.221
1.389
0.307
0.19
环境
0.232
2.483
0.575
0.357

🚀 3.3 结论

使用Critic客观赋权法时,以上计算结果归一化与不归一化结果差异较大的问题,需结合数据特性和研究目标考虑。

原因分析:

数据均在60-70分之间(理论范围0-100),但实际范围可能因指标而异。各指标的实际最大值与最小值不同,最大最小归一化会改变标准差的相对比例,从而影响权重。

选择建议

  • 不归一化的情况:

  • 若各指标的实际范围差异反映了真实差异(如某指标区分度更高),且这种差异需体现在权重中。

  • 保留原始标准差信息,认为数据波动性直接影响指标重要性。

  • 归一化的情况:

  • 若各指标范围差异由主观打分习惯或数据采集偏差导致,需消除这种影响。

  • 希望所有指标在同一尺度下公平比较,避免范围差异主导权重。

建议优先基于实际范围正确归一化。

🚀 3.4 Python代码实现

import pandas as pd
import numpy as np

def critic_weight(data, kind):
    # 数据正向化
    # normalized = np.zeros_like(data)
    normalized = data
    for i in range(data.shape[1]):
        col = data[:, i]
        min_val, max_val = np.min(col), np.max(col)
        if kind[i] == '1':  # 正向指标
            normalized[:, i] = (col - min_val) / (max_val - min_val)
        else:  # 负向指标
            normalized[:, i] = (max_val - col) / (max_val - min_val)
       
    # 计算对比强度(标准差)
    std = np.std(normalized, axis=0)
    
    # 计算冲突性(相关系数)
    corr = np.corrcoef(normalized.T)
    conflict = np.sum(1 - np.abs(corr), axis=1)
    
    # 计算信息承载量与权重
    info = std * conflict
    weights = info / np.sum(info)
    
    return std, conflict, info, weights

# 读取数据
data = pd.read_excel('./CRITIC权重法.xlsx').values

# 指标类型(假设所有指标都是正向指标)
kind = ['1', '1', '1', '1', '1']  # 根据实际情况调整

# 计算权重
std, conflict, info, weights = critic_weight(data, kind)

# 创建结果表格
results = pd.DataFrame({
    '项': ['能力', '品格', '担保', '资本', '环境'],
    '指标变异性': np.round(std, 3),
    '指标冲突性': np.round(conflict, 3),
    '信息量': np.round(info, 3),
    '权重': np.round(weights, 3)
})

# 打印结果表格
print(results)

📚 参考链接

[1]SPSSPRO官网的CRITIC权重法讲解和案例分析;

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号