본문 바로가기
CSS(Credit Scoring System)/신용평가모형 검증지표

[R실습]Information Value 산출하기

by 찐남 2021. 7. 4.

1. IV(Information Value)

 

Information Value(이하 IV로 표현)은 정보이론에서 나온 개념으로 알고 있어요.정보이론에서 단일 항목으로 얼마나 많은 정보량을 포함하고 있는지를 수치적으로 나타냈다고 할 수 있는데요.

이런 개념을 신용평가모형에 그대로 접목시켜 보면, 항목 하나가 우량 고객군과 불량 고객군을 얼마나 잘 구분해 줄 수 있는지에 대한 정보량으로 설명할 수 있어요.

IV 수치가 클수록 우량 고객군과 불량 고객군을 잘 구분할 수 있는 정보량이 많은 것이고,반대로 IV 수치가 작을수록 우량 고객군과 불량 고객군을 잘 구분할 수 있는 정보량이 적다는 거죠.

그럼 IV는 어떻게 산출되는지 살펴 보겠습니다.
IV = 어떤 기준에 의해서 나누어진 구간별 (우량 고객군의 구성비 - 불량 고객군의 구성비) * WoE 의 합

※ WoE 는 Weight of Evidence의 약어이고, WoE = ln(우량 고객군 구성비 / 불량 고객군 구성비)로 산출됩니다.
굳이 한글로 표현하자면 '증거 가중치' 정도로 해석할 수 있을 거 같아요.

 

 

 

2. WoE(Weight of Evidence)

 

WoE (= ln(우량 고객군 구성비 / 불량 고객군 구성비)의 의미를 한번 살펴볼까요?
잠시 수학 시간으로 돌아가 보겠습니다(어렵진 않아요^^)

우량 고객군의 구성비와 불량고객군의 구성비는 모두 비율이기 때문에 0% ~ 100%의 값을 가지게 됩니다.
(아무리 작아도 (-) 값이 나오진 않죠.)
우량 고객군 구성비 / 불량 고객군 구성비가 이론적으로 산출될 수 있는 최소값 및 최대값은 얼마가 될까요?

최소값은 우량 고객군 구성비가 0% (분자가 0)이고, 불량 고객군 구성비가 100% (분모가 100%) 의 값을 가질 때이고, 그 값은 0 입니다.
최대값은 반대가 되겠죠. 우량 고객군 구성비가 100% (분자가 100%)이고, 불량 고객군 구성비가 0% (분모가 0%) 의 값을 가질 때이고, 그 값은 ∞ (무한대) 입니다.
즉, 우량 고객군 구성비 / 불량 고객군 구성비는 0 ~ +∞ 값을 가질 수 있어요.

그럼 어떤 구간에서 우량 고객군의 구성비와 불량 고객군의 구성비가 같다면, "우량 고객군 구성비 / 불량 고객군 구성비"의 산출 값은 1이 되죠. (우량 고객군 구성비 / 불량 고객군 구성비를 편의 상 A라고 하고 설명 할께요.)

A > 1 이면 우량 고객군 구성비 > 불량 고객군 구성비를 의미하고,  그 구간에서는 우량 고객이 더 많이 분포되어 있다고 할 수 있어요. 구체적인 수치로 예를 들어 보죠.
A = 5 라면, 우량 고객군 구성비 = 불량 고객군 구성비 * 5
(이 구간에서는 불량 고객군보다 우량 고객군이 5배 더 많다)
A = 10 이라면, 우량 고객군 구성비 = 불량 고객군 구성비 * 10
(이 구간에서는 불량 고객군보다 우량 고객군이 10배 더 많다)

 

정리해 보면 !
A > 1 이고, A의 값이 커질수록 그 구간에서는 우량 고객군의 비율이 더 높아 우량 고객군의 성향이 높다
A < 1 이고, A의 값이 작아질수록 그 구간에서는 불량 고객군의 비율이 더 높아 불량 고객군의 성향이 높다
고 정리할 수 있죠.

우량 고객군의 성향이 높은 구간은 A의 값이 1을 중심으로 1 ~ +∞ 값을 가지고,
불량 고객군의 성향이 높은 구간은 A의 값이 1을 중심으로 0 ~ 1값을 가지게 됩니다.

뭔가 불공평해 보이죠?
우량 고객군의 성향은 1 ~ ∞ 값을 가지는데, 불량 고객군의 성향 0 ~ 1의 값만 존재해요.
이런 불공평함을 해결하기 위해서 A에 자연로그 ln을 취하는 거에요.

y = ln(x) (자연로그함수)는 x가 0보다 큰 구간에서만 정의되죠.
X = 1일 때 y = 0
X > 1일 때, y는 +∞ 으로 단조 증가
X < 1일 때, y는 -∞ 으로 단조 감소

그럼 A에 자연로그를 취한 WoE의 스케일은 어떻게 변하게 될까요?
우량 고객군의 성향이 높은 구간은 A의 값이 1을 중심으로 1 ~ ∞ 값을 가지고,
불량 고객군의 성향이 높은 구간은 A의 값이 1을 중심으로 -∞ ~ 1값을 가지게 됩니다.
즉! 우량 고객군의 성향과 불량 고객군의 성향이 같은 1을 중심으로 ±∞ 의 값도록 변환됩니다.

뭔가 불공평해 보이는 것이 사라졌죠?
WoE (= ln(우량 고객군 구성비 / 불량 고객군 구성비) 개념 중요합니다.
꼭 기억해 주세요!

 

 



 

3. R을 활용한 IV 산출 실습

 

R 프로그램에 내제되어 있는 mtcars data를 활용해서 IV 값을 산출해 볼까요?
(mtcars data: The data was extracted from the 1974 Motor Trend US magazine,
and comprises fuel consumption and 10 aspects of automobile design and
performance for 32 automobiles (1973–74 models).)

 

3.1. 사전 준비 작업

 

install.packages("dplyr") # dplyr 패키지 설치 (이미 패키지가 설치되어 있다면 Skip)
library(dplyr) #dplyr 패키지 로딩

# mtcars 데이터에서 IV 산출에 필요한 칼럼만 가져옴
test_information_value <- mtcars[,c("mpg","vs")]

# mpg: Miles/(US) gallon
# vs: Engine (0 = V-shaped, 1 = straight)
# 자동차와 관련된 데이터지만, 편의상 Engine = 0 불량 고객 / Engine = 1 우량 고객 이라 간주하자

 

3.2. IV 산출하기

 

Step 1. 산출하고자 하는 항목에 대한 구간화

 

# 구간을 나누기 위해 5% 단위의 percentile 값 확인
group <- quantile(test_information_value$mpg, probs = seq(0,1,0.05))

# 데이터 건수가 많지 않아, 최종 3개의 구간으로 구간화 진행
test_information_value$group <-
ifelse(test_information_value$mpg <= group[9], 1,
ifelse(test_information_value$mpg <= group[16], 2,3))

 

Step 2. 우량 고객군과 불량 고객군 전체 건수 및 구성비 산출

 

# 엔진이 직사형인(vs = 1) 자동차 전체 건수 산출
tot_t1_cnt <- sum(test_information_value$vs == 1)

# 엔진이 V형인(vs = 0) 자동차 전체 건수 산출
tot_t2_cnt <- sum(test_information_value$vs == 0)

# 3개 범주에 대한 엔진 종류별 전체 건수 산출
iv <- test_information_value %>%
group_by(group) %>%
summarise(t1_cnt = sum(ifelse(vs == 1,1,0)),
t2_cnt = sum(ifelse(vs == 0,1,0)))

# 3개 범주에 대한 엔진 종류별 비율 산출
t1_cnt_pct <- iv$t1_cnt / tot_t1_cnt
t2_cnt_pct <- iv$t2_cnt / tot_t2_cnt

 

Step 3. 우량 고객군과 불량 고객군 전체 건수 및 구성비 산출

 

# 최종 IV값 산출
information.value <- sum(ifelse(t2_cnt_pct <= 0, 0,
(t1_cnt_pct - t2_cnt_pct) * log(t1_cnt_pct / t2_cnt_pct)))
print(information.value)

산출된 최종 값은 2.222237





반응형

댓글