[기초] Part 4. 신용 모델 만들기: 스코어카드와 트리
Part 3에서 모델을 선택했다면, 이번 글은 실제로 구축하는 과정입니다. 로지스틱 회귀로 스코어카드를 만드는 법(WOE·IV·점수 스케일링)과 트리로 만드는 법(피처·SHAP·단조 제약), 둘의 차이, 그리고 모델과 무관하게 거쳐야 하는 거절 추론과 캘리브레이션까지 정리했습니다.
Part 3에서는 모델을 무엇으로 선택할지를 봤습니다. 신용에서 성능으로는 트리가 앞서지만, 설명이 법으로 요구되는 자리에서는 로지스틱 회귀가 선호된다고 했습니다. 이번 글은 그 둘을 실제로 구축하는 과정입니다. Part 3가 “무엇을 고르나”였다면, 이번 글은 “어떻게 만드나”입니다.
먼저 핵심부터 말하면, 두 길은 생각보다 많이 겹칩니다. 타깃을 정하고, 거절자를 반영하고, 확률을 보정하는 단계는 모델이 무엇이든 똑같습니다. 갈라지는 건 가운데 한 파트, 변수를 어떻게 가공하고 결과를 어떻게 설명하느냐뿐입니다. 그 공통점과 차이점을 차례로 봅니다.
같은 출발점
어느 모델로 가든 처음은 같습니다.
무엇을 부도로 볼지, 얼마나 지켜본 뒤 판단할지를 먼저 정합니다. Part 1에서 본 성능창 이야기입니다. 60일 연체를 부도로 볼지 90일로 볼지, 12개월을 지켜볼지 24개월을 지켜볼지에 따라 정답 라벨 자체가 달라지고, 라벨이 달라지면 모델도 달라집니다. 그리고 Part 2에서 본 Leakage를 점검합니다. 의사결정 시점에는 없었던 미래 정보가 변수에 새어 들면, 검증 점수는 좋아도 실전에서 붕괴합니다.
여기까지는 로지스틱 회귀를 쓰든 트리를 쓰든 똑같습니다. 모델이 갈리는 건 그다음입니다.
로지스틱 회귀로: 스코어카드
설명이 법으로 요구되는 핵심 심사에서는, 로지스틱 회귀로 스코어카드를 만듭니다. 스코어카드는 한마디로 점수표입니다. 고객의 각 특성에 점수를 매기고 다 더하면 신용 점수가 나오는, 종이 한 장으로도 설명되는 모델입니다.
스코어카드의 출발점은 변수를 그대로 쓰지 않는다는 데 있습니다. 소득이나 한도 같은 변수를 몇 개의 구간으로 나눈 다음, 각 구간을 WOE(Weight of Evidence)라는 값으로 바꿉니다. WOE는 각 구간에서 정상 고객과 부도 고객의 비율을 로그오즈로 표현한 값입니다. 어떤 구간에 정상이 몰려 있으면 WOE가 한쪽으로, 부도가 몰려 있으면 반대쪽으로 갑니다. 이렇게 바꾸면 들쭉날쭉하던 원래 변수가 부도 위험과 단조로운 관계를 갖게 됩니다.
WOE가 신용에서 사랑받는 이유는 여러 가지입니다. 결측이나 이상치를 별도 구간으로 자연스럽게 흡수하고, 범주형 변수도 똑같이 다루며, 무엇보다 로지스틱 회귀와 궁합이 좋습니다. 변수가 이미 로그오즈 언어로 바뀌어 있으니, 회귀 계수가 곧 그 변수의 영향력이 됩니다. 변수가 얼마나 쓸모 있는지는 IV(Information Value)로 요약합니다. 대략 0.1 아래면 약하고, 0.3 근처면 쓸 만하고, 0.5를 크게 넘으면 오히려 누출을 의심합니다. 너무 잘 맞는 변수는 미래 정보가 새어 든 것은 아닌지 먼저 의심하는 게 맞습니다.
회귀를 적합하면 출력은 로그오즈입니다. 사람이 읽기엔 불편하죠. 그래서 비즈니스 점수로 옮깁니다. 신용 점수가 600이니 700이니 하는 그 점수입니다.
점수 = 오프셋 + 팩터 × 로그오즈
여기서 핵심은 PDO(Points to Double the Odds)입니다. 오즈가 두 배 좋아질 때 점수가 몇 점 오를지를 정하는 값으로, PDO를 20으로 잡으면 오즈가 두 배 될 때마다 점수가 20점씩 오릅니다. 결과적으로 점수가 높을수록 위험이 낮다는 직관적인 척도가 완성됩니다. 그리고 이 점수는 변수별 점수의 합으로 분해되기 때문에, 어떤 고객의 점수가 왜 낮은지를 항목별로 그대로 설명할 수 있습니다. 스코어카드가 거절 사유 고지에 강한 이유가 여기 있습니다.
트리로: GBM
사후 설명으로 충분한 자리에서는 트리를 최종 모델로 씁니다. Part 3에서 본 그 선택입니다. 트리로 가면 가운데 두 가지가 달라집니다.
먼저 변수 가공이 가벼워집니다. 트리는 비선형과 상호작용, 결측을 알아서 다루니 WOE 비닝을 꼭 거치지 않아도 됩니다. Part 3에서 본 도메인 피처를 그대로 넣는 쪽에 가깝습니다. 한도 대비 사용액의 비율이나 최근 연체 추세 같은 변수를 만들어 바로 넣는 식입니다.
다음으로 설명을 사후에 추가합니다. 스코어카드는 점수표 자체가 설명이지만, 트리는 그렇지 않습니다. 대신 SHAP나 피처 임포턴스로 어떤 변수가 이 예측을 얼마나 끌어올렸는지를 사후에 계산해 거절 사유로 옮깁니다. “소득이 높을수록 위험이 낮다” 같은 단조성도, 스코어카드가 WOE로 강제했다면 트리에서는 단조 제약(monotone constraints)을 걸어 비슷하게 강제합니다. 데이터가 잠깐 이상하게 굴어도 모델이 비상식적인 방향으로 변화하지 않게요.
그래서 무엇이 다른가
두 길을 나란히 놓으면 차이가 분명해집니다.
스코어카드는 설명이 모델 안에 박혀 있습니다. 점수표를 그대로 보여주면 사유가 나오고, 감독당국도 계수 하나하나를 들여다볼 수 있습니다. 대신 표현력에 한계가 있어 성능을 조금 양보합니다.
트리는 반대입니다. 성능을 얻는 대신 설명을 밖에서 붙이고, 그 사후 설명이 진짜인지 따로 점검해야 하는 부담을 집니다. 변수에는 손이 덜 가지만, 모델 거버넌스는 더 무거워집니다.
그래서 선택은 결국 목적이 정합니다. 사유 고지가 법으로 강제되고 감독이 계수를 보는 핵심 심사는 스코어카드 쪽으로, 사후 설명이 받아들여지고 성능이 중요한 자리는 트리 쪽으로 기웁니다. Part 3에서 말한 그 갈림입니다.
어느 쪽이든 거치는 것
여기까지가 모델에 따라 갈리는 부분이었습니다. 그런데 어느 쪽을 골랐든, 끝에서 반드시 거쳐야 하는 두 가지가 남습니다. 거절 추론과 캘리브레이션입니다. 둘 다 모델이 트리든 로지스틱이든 똑같이 필요합니다.
거절 추론. Part 0부터 따라온 숙제입니다. 선택편향이죠. 모델은 과거에 승인한 고객의 결과로 학습합니다. 그런데 정작 적용할 대상은 새로 들어오는 전체 신청자입니다. 거절했던 고객은 갚았을지 못 갚았을지 결과 자체가 없습니다. 승인한 사람만 보고 만든 모델을 전체 신청 모집단에 그대로 들이대면 편향됩니다.
이 빈자리를 메우려는 기법이 거절 추론(reject inference)입니다. 거절 고객의 점수로 결과를 추정해 끼워 넣거나, 승인 확률의 역수로 가중치를 주거나(Part 2에서 본 편향 보정과 같은 논리입니다), 거절 고객이 다른 회사에서 어떻게 됐는지를 신용정보로 가져옵니다. 솔직히 거절 추론은 만능이 아닙니다. 보이지 않는 것을 가정으로 메우는 일이라, 가정이 틀리면 결과도 같이 틀립니다.
그래서 믿고 쓰기 전에, 이 보정이 내 데이터에서 정말 도움이 되는지부터 재보는 게 맞습니다. 저는 거절 추론 기법 여러 가지를 한 API로 묶고, 무엇보다 그 효과를 먼저 측정해 보는 벤치마크까지 붙인 파이썬 라이브러리 rejectkit을 만들어 공개해 뒀습니다. 자세한 사용법과 실데이터 결과는 거절 추론과 rejectkit 글에서 따로 풀었습니다.
가장 믿을 수 있는 해법은 따로 있습니다. 소수를 일부러 무작위로 승인해 진짜 결과를 확보하는 통제된 실험입니다. 추정이 아니라 사실을 주니까요. 이 이야기는 Part 6에서 인과추론과 실험으로 이어집니다.
캘리브레이션. 한 가지를 구분해야 합니다. 누가 더 위험한지 순서를 잘 매기는 것(판별)과, 그 사람의 부도확률이 정확히 몇 퍼센트인지 맞히는 것(보정)은 다른 문제입니다. 신용에서는 보정이 필수입니다. Part 1에서 본 EL = PD × LGD × EAD를 떠올려보세요. 충당금을 쌓고, 위험에 따라 금리를 매기고, 기대손실을 계산하려면 확률 그 자체가 맞아야 합니다. 순서만 맞아서는 가격을 못 매깁니다. 트리를 쓰면 더 중요합니다. 트리가 낸 점수는 그대로는 부도확률이 아니거든요.
그래서 모델이 낸 확률을 실제 부도율에 맞게 보정합니다. Platt 스케일링이나 isotonic 회귀 같은 방법을 쓰고, 표본을 불균형하게 뽑았다면 그 비율도 여기서 되돌립니다. 한 가지 더, 같은 PD라도 지금 시점의 위험을 그대로 반영하는 PIT(point-in-time)와 경기 사이클을 평탄하게 본 TTC(through-the-cycle)로 나뉩니다. 회계 기준(IFRS9)은 PIT를, 자본 규제(Basel)는 TTC를 주로 봅니다. 같은 고객의 부도확률도 어디에 쓰느냐에 따라 다른 숫자가 됩니다.
정리
신용 모델을 구축하는 일은, 알고 보면 모델 종류보다 그 앞뒤가 더 중요합니다.
- 시작은 같습니다. 타깃과 성능창을 정하고 Leakage를 점검합니다.
- 로지스틱 회귀로 가면 WOE로 변수를 바꾸고 PDO로 점수표를 만듭니다. 설명이 모델 안에 포함됩니다.
- 트리로 가면 도메인 피처를 그대로 넣고 SHAP 등으로 설명을 사후에 만듭니다. 성능을 얻는 대신 설명을 사후에 추가합니다.
- 끝도 같습니다. 거절 추론으로 편향을 줄이고, 확률을 보정합니다. 이 둘은 모델과 무관하게 반드시 거칩니다.
모델을 고르는 일(Part 3)과 모델을 만드는 일(이번 글)을 지났습니다. 다음 Part 5에서는 이렇게 만든 모델을 어떻게 평가하는지를 봅니다. 신용에서 가장 사랑받는 지표 KS부터, Gini와 AUC, 그리고 보정을 어떻게 확인하는지까지입니다.