CRITIC法之python

目录

1.简介

2.原理解析

2.1 指标正向化及标准化

2.2 计算信息承载量

2.3 计算权重和评分

3.实例分析

3.1 读取数据

3.2 指标正向化及标准化

3.3 计算对比度

3.4 矛盾性

3.5 计算信息载量

3.6 计算权重 

3.7 计算得分

完整代码 


1.简介

        CRITIC是Diakoulaki(1995)提出一种评价指标客观赋权方法。该方法在对指标进行权重计算时围绕两个方面进行:对比度和矛盾(冲突)性。

        它的基本思路是确定指标的客观权数以两个基本概念为基础。一是对比度,它表示同一指标各个评价方案取值差距的大小,以标准差的形式来表现,即标准化差的大小表明了在同一指标内各方案的取值差距的大小,标准差越大各方案的取值差距越大。二是评价指标之间的冲突性,指标之间的冲突性是以指标之间的相关性为基础,如两个指标之间具有较强的正相关,说明两个指标冲突性较低。

2.原理解析

2.1 指标正向化及标准化

        设有m个待评对象,n个评价指标,可以构成数据矩阵X=(xij)m*n,设数据矩阵内元素,经过指标正向化处理过后的元素为xij'

  • 若xj为负向指标(越小越优型指标)

  • 若xj为正向指标(越大越优型指标)

2.2 计算信息承载量

  • 对比性

用标准差表示第项指标的对比性

  • 矛盾性

矛盾性反映的是不同指标之间的相关程度,若呈现显著正相关性,则矛盾性数值越小。设指标𝑗与其余指标矛盾性大小为fj

  rij表示指标与指标之间的相关系数,在此使用的是皮尔逊相关系数,此为线性相关系数。

  • 信息承载量

   设指标𝑗与信息承载量为Cj

2.3 计算权重和评分

计算权重

信息承载量越大可认为权重越大

计算得分

3.实例分析

银行资产收益率费用利润率逾期贷款率资产使用自有资本率
中信0.48313.268204.36465.107
光大0.403513.490939.01313.61515.5005
浦发0.897925.77769.05134.8927.5342
招商0.592716.024513.29354.45296.5913

3.1 读取数据

#导入数据
data=pd.read_excel('D:\桌面\CRITIC.xlsx')
print(data)

返回:

去掉变量名和序号:

label_need=data.keys()[1:]
data1=data[label_need].values
print(data1)

返回:

3.2 指标正向化及标准化

查看行数和列数:

data2 = data1
[m,n]=data2.shape
print(m,n)

返回:

 

本实例中逾期贷款率为负向指标数据

因此负向指标标准化

#负向指标标准化
index=[2] #负向指标位置,注意python是从0开始计数,对应位置也要相应减1
for j in index:
    d_max=max(data1[:,j])
    d_min=min(data1[:,j])
    data2[:,j]=(d_max-data1[:,j])/(d_max-d_min)
print(data2)

返回:

在对剩余数据进行正向指标标准化

# 正向指标标准化
#正向指标位置
index_all=np.arange(n)
index=np.delete(index_all,index) 
for j in index:
    d_max=max(data1[:,j])
    d_min=min(data1[:,j])
    data2[:,j]=(data1[:,j]-d_min)/(d_max-d_min)
print(data2)

返回:

3.3 计算对比度

#对比性
the=np.std(data2,axis=0)
print(the)

返回:

3.4 矛盾性

#矛盾性
data3=list(map(list,zip(*data2))) #矩阵转置
r=np.corrcoef(data3)   #求皮尔逊相关系数
f=np.sum(1-r,axis=1)
print(f)

返回:

3.5 计算信息载量

#信息承载量
c=the*f
print(c)

返回:

3.6 计算权重 

#计算权重
w=c/sum(c)
print(w)

返回:

3.7 计算得分

#计算得分
s=np.dot(data2,w)
Score=100*s/max(s) 
for i in range(0,len(Score)):
    print(f"{data['银行'][i]}银行百分制评分为:{Score[i]}")  

返回:

完整代码 

#完整代码
#导入相关库
import pandas as pd
import numpy as np
#导入数据
data=pd.read_excel('D:\桌面\CRITIC.xlsx')
label_need=data.keys()[1:]
data1=data[label_need].values
#查看行数和列数
data2 = data1
[m,n]=data2.shape
#负向指标标准化
index=[2] #负向指标位置,注意python是从0开始计数,对应位置也要相应减1
for j in index:
    d_max=max(data1[:,j])
    d_min=min(data1[:,j])
    data2[:,j]=(d_max-data1[:,j])/(d_max-d_min)
# 正向指标标准化
#正向指标位置
index_all=np.arange(n)
index=np.delete(index_all,index) 
for j in index:
    d_max=max(data1[:,j])
    d_min=min(data1[:,j])
    data2[:,j]=(data1[:,j]-d_min)/(d_max-d_min)
#对比性
the=np.std(data2,axis=0)
#矛盾性
data3=list(map(list,zip(*data2))) #矩阵转置
r=np.corrcoef(data3)   #求皮尔逊相关系数
f=np.sum(1-r,axis=1)
#信息承载量
c=the*f
#计算权重
w=c/sum(c)
#计算得分
s=np.dot(data2,w)
Score=100*s/max(s) 
for i in range(0,len(Score)):
    print(f"{data['银行'][i]}银行百分制评分为:{Score[i]}")  
  • 16
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
CRITIC是一种多准则决策分析方,用于评估和选择多个决策方案。CRITIC的基本思想是将决策方案转换为一组可比较的数字,然后使用这些数字来确定每个决策方案的得分和权重,最后使用这些得分和权重来选择最佳的决策方案。 在Python中,可以使用以下步骤实现CRITIC: 1. 确定要评估的决策方案,并将它们转换为一组可比较的数字。 2. 确定每个决策因素的重要程度,并将它们转换为权重。 3. 计算每个决策方案的得分,通过将每个决策因素的数字与其相应的权重相乘并求和来实现。 4. 对得分进行归一化处理,以确保它们在0到1之间。 5. 根据得分选择最佳的决策方案。 以下是一个简单的示例代码,演示如何使用Python实现CRITIC: ```python # 输入数据 criteria = ['cost', 'reliability', 'performance'] options = {'A': [100, 0.8, 0.9], 'B': [80, 0.9, 0.7], 'C': [120, 0.7, 0.8]} weights = [0.5, 0.3, 0.2] # 计算得分 scores = {} for option, values in options.items(): score = sum([v * w for v, w in zip(values, weights)]) scores[option] = score # 归一化得分 min_score = min(scores.values()) max_score = max(scores.values()) for option, score in scores.items(): normalized_score = (score - min_score) / (max_score - min_score) scores[option] = normalized_score # 选择最佳决策方案 best_option = max(scores, key=scores.get) # 输出结果 print('CRITIC评估结果:') for option, score in scores.items(): print(f'{option}: {score:.3f}') print(f'\n最佳决策方案是:{best_option}') ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值