评价模型:CRITIC客观赋权法


1.算法原理介绍

  CRITIC方法是一种客观权重赋权法,其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度,它表示同一指标各个评价方案取值差距的大小,以标准差的形式来表现。二是评价指标之间的冲突性,指标之间的冲突性是以指标之间的相关性为基础,如两个指标之间具有较强的正相关,说明两个指标冲突性较低。
  CRITIC方法的主要原理是通过对比强度和指标之间的冲突性来确定指标的客观权数,从而实现对评价方案的客观权重赋值。该方法适用于判断数据稳定性,并且适合分析指标或因素之间有着一定的关联的数据。

2.算法步骤

2.1 数据标准化

  设有 m m m个待评对象, n n n个评价指标,可以构成数据矩阵 X = ( x i j ) m × n X=(x_{ij})_{m\times n} X=(xij)m×n,设数据矩阵内元素经过标准化处理过后的元素为 x i j ′ x^{'}_{ij} xij

  • 对于正向指标: x i j ′ = x i j − min ⁡ ( x j ) max ⁡ ( x j ) − min ⁡ ( x j ) x_{i j}^{\prime}=\frac{x_{i j}-\min \left(x_{j}\right)}{\max \left(x_{j}\right)-\min \left(x_{j}\right)} xij=max(xj)min(xj)xijmin(xj)
  • 对于负向指标: x i j ′ = max ⁡ ( x j ) − x i j max ⁡ ( x j ) − min ⁡ ( x j ) x_{i j}^{\prime}=\frac{\max \left(x_{j}\right)-x_{i j}}{\max \left(x_{j}\right)-\min \left(x_{j}\right)} xij=max(xj)min(xj)max(xj)xij

2.2 计算信息承载量

  • 首先计算第 j j j项指标的对比强度: σ j = ∑ i = 1 m ( x i j ′ − x ˉ j ′ ) m − 1 \sigma_{j}=\sqrt{\frac{\sum_{i=1}^{m}\left(x_{i j}^{\prime}-\bar{x}_{j}^{\prime}\right)}{m-1}} σj=m1i=1m(xijxˉj)

  • 然后计算评价指标之间的冲突性
    冲突性反映的是不同指标之间的相关程度,若呈现显著正相关性,则冲突性数值越小。设指标𝑗与其余指标矛盾性大小为 f j f_j fj,则 f j = ∑ i = 1 m ( 1 − r i j ) f_{j}=\sum_{i=1}^{m}\left(1-r_{i j}\right) fj=i=1m(1rij)
    其中 r i j r_{ij} rij表示指标 i i i与指标 j j j之间的相关系数,这里使用的是皮尔逊相关系数。

  • 最后计算信息承载量 C j = σ j f j C_{j}=\sigma_{j} f_{j} Cj=σjfj

    2.3 计算权重和得分

    计算权重: w j = C j ∑ j = 1 n C j w_{j}=\frac{C_{j}}{\sum_{j=1}^{n} C_{j}} wj=j=1nCjCj
    可见信息承载量越大权重越大。
    计算得分: S i = ∑ j = 1 n w j x i j ′ S_{i}=\sum_{j=1}^{n} w_{j} x_{i j}^{\prime} Si=j=1nwjxij

    3.案例分析

    假设你想购买一台新电视,考虑了以下指标:

  • 屏幕尺寸(英寸)——正向指标:尺寸越大,观看体验可能越好。

  • 价格(美元)——负向指标:价格越高,对于购买者来说可能越不吸引人。

  • 电视的能源效率(每年的电量消耗,以kWh为单位)—— 负向指标:消耗的电量越多,运行成本越高。

  • 用户评分(5星制中的星数) ——正向指标:评分越高,产品质量可能越好。
    具体数据如下表所示:

屏幕尺寸价格能源效率用户评分
电视A50500754.5
电视B55650804.8
电视C658001204.2
电视D45450654.0
电视E60700904.6

首先对数据进行标准化处理:

% 电视决策矩阵
decision_matrix = [
    50, 500, 75, 4.5;  % 电视A
    55, 650, 80, 4.8;  % 电视B
    65, 800, 120, 4.2; % 电视C
    45, 450, 65, 4.0;  % 电视D
    60, 700, 90, 4.6;  % 电视E
];
%数据标准化处理
for i=2:3
    decision_matrix(:, i) = (max(decision_matrix(:, i)) - decision_matrix(:, i))/(max(decision_matrix(:, i)) - min(decision_matrix(:, i)))
end
for i=[1,4]
    decision_matrix(:, i) = (decision_matrix(:, i)-min(decision_matrix(:, i)))/(max(decision_matrix(:, i)) - min(decision_matrix(:, i)))
end
% 数据标准化
norm_matrix = zscore(decision_matrix)

或者:

% 电视决策矩阵
decision_matrix = [
    50, 500, 75, 4.5;  % 电视A
    55, 650, 80, 4.8;  % 电视B
    65, 800, 120, 4.2; % 电视C
    45, 450, 65, 4.0;  % 电视D
    60, 700, 90, 4.6;  % 电视E
];
% 对负向指标进行处理,将其转换为正向指标
decision_matrix(:, 2) = max(decision_matrix(:, 2)) + 1 - decision_matrix(:, 2)
decision_matrix(:, 3) = max(decision_matrix(:, 3)) + 1 - decision_matrix(:, 3)
% 数据标准化
norm_matrix = zscore(decision_matrix)

标准化结果:
在这里插入图片描述然后再根据算法步骤计算权重:

% 计算标准间的相关系数
R = corrcoef(norm_matrix);

% 确定冲突度和信息量
n = size(norm_matrix, 2); % 标准的数量
conflict = zeros(1, n);
for i = 1:n
    conflict(i) = std(norm_matrix(:, i)) * (1 - sum(R(i, :)) / (n - 1));
end

% 计算权重
weights = conflict / sum(conflict);

% 显示结果
disp('指标的权重:');
disp(weights);

计算结果:
在这里插入图片描述最后计算每个电视的得分:
在这里插入图片描述完整代码:

% 电视决策矩阵
decision_matrix = [
    50, 500, 75, 4.5;  % 电视A
    55, 650, 80, 4.8;  % 电视B
    65, 800, 120, 4.2; % 电视C
    45, 450, 65, 4.0;  % 电视D
    60, 700, 90, 4.6;  % 电视E
];
%数据标准化处理
for i=2:3
    decision_matrix(:, i) = (max(decision_matrix(:, i)) - decision_matrix(:, i))/(max(decision_matrix(:, i)) - min(decision_matrix(:, i)))
end
for i=[1,4]
    decision_matrix(:, i) = (decision_matrix(:, i)-min(decision_matrix(:, i)))/(max(decision_matrix(:, i)) - min(decision_matrix(:, i)))
end

% 对负向指标进行处理,将其转换为正向指标
% decision_matrix(:, 2) = max(decision_matrix(:, 2)) + 1 - decision_matrix(:, 2)
% decision_matrix(:, 3) = max(decision_matrix(:, 3)) + 1 - decision_matrix(:, 3)
% 数据标准化
norm_matrix = zscore(decision_matrix)

% 计算标准间的相关系数
R = corrcoef(norm_matrix);

% 确定冲突度和信息量
n = size(norm_matrix, 2); % 标准的数量
conflict = zeros(1, n);
for i = 1:n
    conflict(i) = std(norm_matrix(:, i)) * (1 - sum(R(i, :)) / (n - 1));
end

% 计算权重
weights = conflict / sum(conflict);

% 显示结果
disp('指标的权重:');
disp(weights);

% 根据标准化的决策矩阵和权重计算每台电视的得分
scores = norm_matrix * weights';

% 显示每台电视的得分
disp('每台电视的得分:');
for i = 1:size(scores, 1)
    fprintf('电视%d 的得分: %.2f\n', i, scores(i));
end

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
CRITIC客观是一种CRITIC的改进算,用于在评价指标具有客观重时求解各个变量的重。具体步骤如下: 1. 确定评价指标集合,包括影响变量和被影响变量。 2. 确定各个评价指标的客观重。 3. 构建判别矩阵,将每个评价指标按照其重要性进行两两比较,得到判别矩阵。 4. 计算每个评价指标的重,采用CRITIC客观计算每个变量的重。 5. 验证重结果,检验判别矩阵是否满足一致性要求,如不满足则需要重新调整调整判别矩阵。 具体计算步骤如下: 1. 对判别矩阵的每一行进行归一化处理,即将每一行的元素都除以该行元素之和,得到标准化矩阵。 2. 计算平均化矩阵,即将标准化矩阵的每一列乘以其客观重,再求平均,得到平均化矩阵。 3. 计算重向量,即将平均化矩阵的每一行元素之和除以矩阵的行数,得到重向量。 4. 计算一致性指标,即计算判别矩阵的特征向量与重向量的一致性指标,如一致性比率CR小于0.1,则认为判别矩阵满足一致性要求,否则需要重新调整判别矩阵。 5. 检验结果,将重向量的元素按照大小排序,即可得到各个变量的重。 下面是使用Python实现CRITIC客观求解各个变量的重的代码: ```python import numpy as np # 定义判别矩阵 D = np.array([[1, 3, 5], [1/3, 1, 3], [1/5, 1/3, 1]]) # 定义客观重 w0 = np.array([0.3, 0.5, 0.2]) # 归一化处理 n = D.shape[0] A = np.zeros((n, n)) for i in range(n): A[i, :] = D[i, :] / np.sum(D[i, :]) # 计算平均化矩阵 Aw = np.zeros((n, n)) for j in range(n): Aw[:, j] = A[:, j] * w0[j] w = np.mean(Aw, axis=0) # 计算一致性指标 lambda_max = np.max(np.linalg.eigvals(D)) CI = (lambda_max - n) / (n - 1) RI = np.array([0, 0, 0.58]) CR = CI / RI[n-1] # 输出结果 if CR < 0.1: print('一致性指标CR={:.2f},通过检验'.format(CR)) print('各变量的重为:', w) else: print('一致性指标CR={:.2f},未通过检验,请重新调整判别矩阵'.format(CR)) ``` 其中,`D`为判别矩阵,`w0`为评价指标的客观重向量,`n`为矩阵的阶数,`A`为标准化矩阵,`Aw`为加标准化矩阵,`w`为重向量,`lambda_max`为特征值的最大值,`CI`为一致性指标,`RI`为随机一致性指标,`CR`为一致性比率。根据CR是否小于0.1,判断判别矩阵是否满足一致性要求。如果满足,输出各个变量的重。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抱抱宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值