【建模算法】CRITIC法(Python实现)

【建模算法】CRITIC法(Python实现)

CRITIC是Diakoulaki(1995)提出一种评价指标客观赋权方法。CRITIC法是一种比熵权法和标准离差法更好的客观赋权法。

它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。

对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;
指标之间的冲突性,用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。
对于CRITIC法而言,在标准差一定时,指标间冲突性越小,权重也越小;冲突性越大,权重也越大;另外,当两个指标间的正相关程度越大时,(相关系数越接近1),冲突性越小,这表明这两个指标在评价方案的优劣上反映的信息有较大的相似性。

一、问题描述

现有中信、光大、浦发、招商四个银行,请对它们的资产收益率、费用利润率、逾期贷款率、资产使用、自有资本率分别进行评价。数据表格如下:

银行 资产收益率 费用利润率 逾期贷款率 资产使用 自有资本率
中信 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

二、CRITIC法评价步骤

step1:指标正向化和标准化

每个指标的数量级不一样,需要把它们化到同一个范围内比较,指标也都需要正向化。此篇把正向化和标准化结合。

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

  • 若 为负向指标(越小越优型指标),数据表格中的逾期贷款率属于此类指标,处理如下:
    x i j ′ = m a x ( x j ) − x i j m a x ( x j ) − m i n ( x j ) x^{\prime}_{ij}=\frac{max(x_j)-x_{ij}}{max(x_j)-min(x_j)} xij=max(xj)min(xj)max(xj)xij

  • 若 为正向指标(越大越优型指标),数据表格中其余所有指标属于此类指标,处理如下:

x i j ′ = x i j − m i n ( x j ) m a x ( x j ) − m i n ( x j ) x^{\prime}_{ij}=\frac{x_{ij}-min(x_j)}{max(x_j)-min(x_j)} xij=max(xj)min(xj)xijmin(xj)

step2:信息承载量计算

CRITIC 法对指标进行权重计算时围绕两个方面进行:对比度和矛盾性。

  • 对比性

用标准差 σ j \sigma_j σj表示第j 项指标的对比性

σ j = ∑ i = 1 m ( x i j ′ − x j ′ ˉ ) m − 1 \sigma_j=\sqrt{\frac{\sum^m_{i=1}(x^{\prime}_{ij}-\bar{x^{\prime}_j})}{m-1}} σj=m1i=1m(xijxjˉ)

  • 矛盾性

矛盾性反映的是不同指标之间的相关程度,若呈现显著正相关性,则矛盾性数值越小。设指标与其余指标矛盾性大小为 f j f_j fj
f j = ∑ i = 1 m ( 1 − r i j ) f_j=\sum^m_{i=1}(1-r_{ij}) fj=i=1m(1rij)
r i j r_{ij} rij表示指标i 与指标j 之间的相关系数,在此使用的是皮尔逊相关系数,此为线性相关系数。

  • 信息承载量

    设指标与信息承载量为 C j C_j Cj
    C j = σ j f j C_j=\sigma_jf_j Cj=σjfj

step3:计算权重和评分

信息承载量越大可认为权重越大
w j = C j ∑ j = 1 n C j w_j=\frac{C_j}{\sum^n_{j=1}C_j} wj=j=1nCjCj
计算得分
S i = ∑ j = 1 n w j x i j ′ S_i=\sum^n_{j=1}w_jx^{\prime}_{ij} Si=j=1nwjxij

三、求解结果

得到评分结果如下:
【建模算法】CRITIC法(Python实现)_第1张图片

四、实现代码

Python源码:

import pandas as pd
import numpy as np

#导入数据
data=pd.read_excel('银行数据.xlsx')

#数据正向化标准化处理
label_need=data.keys()[1:]
data1=data[label_need].values
data2=data1.copy()
[m,n]=data2.shape
index_all=np.arange(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)
#正向指标位置    
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=data2.copy()
#矛盾性
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]}")  

参考资料:

【1】吴希.三种权重赋权法的比较分析[J].中国集体经济,2016(34):73-74

【2】客观赋权法——CRITIC权重法:https://tanxg.blog.csdn.net/article/details/106742082

你可能感兴趣的:(数学建模,python,算法,数据挖掘)