目录
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 计算信息承载量
-
对比性
用标准差表示第j 项指标的对比性
-
矛盾性
矛盾性反映的是不同指标之间的相关程度,若呈现显著正相关性,则矛盾性数值越小。设指标𝑗与其余指标矛盾性大小为fj
rij表示指标i 与指标j 之间的相关系数,在此使用的是皮尔逊相关系数,此为线性相关系数。
-
信息承载量
设指标𝑗与信息承载量为Cj
2.3 计算权重和评分
计算权重:
信息承载量越大可认为权重越大
计算得分:
3.实例分析
银行 | 资产收益率 | 费用利润率 | 逾期贷款率 | 资产使用 | 自有资本率 |
中信 | 0.483 | 13.2682 | 0 | 4.3646 | 5.107 |
光大 | 0.4035 | 13.4909 | 39.0131 | 3.6151 | 5.5005 |
浦发 | 0.8979 | 25.7776 | 9.0513 | 4.892 | 7.5342 |
招商 | 0.5927 | 16.0245 | 13.2935 | 4.4529 | 6.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]}")