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?計算信息承載量
-
對比性
用標準差表示第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]}")總結
以上是生活随笔為你收集整理的CRITIC法之python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蒙特卡罗模拟法 —— python
- 下一篇: 没有bug队——加贝——Python 练