Python综合评价模型(九)CRITIC法


CRITlC法是综合考虑评价指标的变异性和独立性来分配权重,评价指标的变异性和独立性均较大,所赋权重就越大,并以此对评价对象进行综合评价的方法

第一步 导入第三方库和案例数据

import numpy as np
import pandas as pd
#按指定路径导入数据,以“地区”为索引(文件路径需按实际情况更换)
data = pd.read_excel(r'C:/Users/AROUS/Desktop/综合评价数据.xlsx', index_col = '地区')
data

第二步 标准化数据(min-max标准化)

使用min-max标准化方法标准化数据后,各评价指标的最大值为1,最小值为0

正向指标(指标值越大越好)的min-max标准化计算公式为:

y i j = x i j − min ⁡ x i j max ⁡ x i j − min ⁡ x i j ( 1 ≤ i ≤ n , 1 ≤ j ≤ m ) y_{ij} = \frac{x_{ij} - \min{x_{ij}}}{\max{x_{ij}} - \min{x_{ij}}} \quad (1 \leq i \leq n,1 \leq j \leq m) yij=maxxijminxijxijminxij(1in,1jm) n n n为评价对象的个数, m m m为评价指标的个数

负向指标(指标值越小越好)的min-max标准化计算公式为:

y i j = max ⁡ x i j − x i j max ⁡ x i j − min ⁡ x i j ( 1 ≤ i ≤ n , , 1 ≤ j ≤ m ) y_{ij} = \frac{\max{x_{ij}} - x_{ij}}{\max{x_{ij}} - \min{x_{ij}}} \quad (1 \leq i \leq n, , 1 \leq j \leq m) yij=maxxijminxijmaxxijxij(1in,,1jm) n n n为评价对象的个数, m m m为评价指标的个数

#定义正向指标min-max标准化函数
def minmax_p(x): 
    return (x - x.min()) / (x.max() - x.min())
#定义负向指标min-max标准化函数
def minmax_n(x): 
    return (x.max() - x) / (x.max() - x.min())
#使用正向指标min-max标准化函数标准化数据
data_m = minmax_p(data)
data_m

第三步 计算评价指标的变异性(变异系数)

j j j项评价指标变异系数的计算公式为:

v j = ∑ i = 1 n ( y i j − y j ˉ ) 2 n − 1 y j ˉ v_j = \frac{\sqrt{\frac{\sum_{i=1}^{n}(y_{ij}-\bar{y_j})^2}{n-1}}}{\bar{y_j}} vj=yjˉn1i=1n(yijyjˉ)2 n n n为评价对象的个数

即评价指标的标准差除以评价指标的均值

vi = data_m.std()/ data_m.mean()
vi

第四步 计算评价指标的独立性(1-|相关系数|)

ri = data_m.corr().abs()
fi = (1 - ri).sum()
fi

第五步 计算评价指标的综合信息载荷量(变异性和独立性的乘积)

pi = vi * fi
pi

第六步 计算评价指标的权重

#归一化评价指标的综合信息载荷量
w = pi / pi.sum()
w

第七步 计算综合得分

data['CRITIC法得分'] = data_m.dot(w)
data

第八步 导出综合评价结果

data.to_excel('CRITIC法综合评价结果.xlsx', index = True)
关注公众号“ T r i H u b 数研社”发送“ 230409 ”获取案例数据和代码 \textcolor{RoyalBlue}{关注公众号“TriHub数研社”发送“230409”获取案例数据和代码} 关注公众号TriHub数研社发送“230409”获取案例数据和代码
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Critic是一种用于多属性决策的方,其核心是将每个决策方案映射到一个实数值,该值表示该方案在各个属性上的表现。以下是一个基于Python实现的简单例子: 假设我们要选择一款手机,考虑到价格、屏幕大小、电池寿命、相机像素等四个属性,我们可以对每个属性赋予一个权重,以反映它对我们的重要程度。例如,我们认为价格和屏幕大小最为重要,分别赋予0.4和0.3的权重,而电池寿命和相机像素则分别赋予0.2和0.1的权重。 接下来,我们可以将每款手机在这些属性上的表现映射为一个实数值,例如,我们可以将价格映射为1000 - 价格,这样价格越低的手机得分越高;屏幕大小、电池寿命、相机像素等属性也可以采用类似的方式映射为实数值。 最终,我们可以将每款手机的得分计算出来,以确定哪款手机最适合我们。具体实现如下: ```python # 定义手机属性和权重 attributes = ['price', 'screen_size', 'battery_life', 'camera_pixel'] weights = [0.4, 0.3, 0.2, 0.1] # 定义手机列表和它们在属性上的表现 phones = [ {'name': 'Phone A', 'price': 2000, 'screen_size': 5.0, 'battery_life': 8, 'camera_pixel': 1200}, {'name': 'Phone B', 'price': 2500, 'screen_size': 5.5, 'battery_life': 10, 'camera_pixel': 1600}, {'name': 'Phone C', 'price': 1800, 'screen_size': 4.7, 'battery_life': 12, 'camera_pixel': 800}, ] # 计算每款手机的得分 scores = [] for phone in phones: score = 0 for i, attr in enumerate(attributes): # 将属性映射为实数值 if attr == 'price': value = 1000 - phone[attr] else: value = phone[attr] # 加权求和 score += weights[i] * value scores.append(score) # 输出得分最高的手机 idx = scores.index(max(scores)) print('最适合的手机是:', phones[idx]['name']) ``` 在这个例子中,我们定义了手机的四个属性和四个权重,以及三款手机的属性表现。然后,我们计算每款手机的得分,并输出得分最高的手机。在实际应用中,我们也可以根据具体情况进行调整,例如,对属性的映射方式、权重的设置等进行改进

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值