기초 게시 2026년 7월 7일

[기초] Part 6. 예측을 넘어 개입으로: 인과추론과 실험

신용 심사는 예측만 하는 게 아니라 결과에 개입합니다. 한도를 올리면 부도가 늘어나는지 같은 질문을 상관으로 답하면 방향부터 틀립니다. 실험과 준실험, 회귀불연속, 업리프트까지 신용의 인과추론을 실무의 언어로 정리했습니다.

지금까지 이 연재는 대부분 “누가 위험한가”를 잘 맞히는 이야기였습니다. 좋은 피처를 만들고, 트리로 점수를 내고, 그 점수가 잘 보정됐는지 검증하는 것. 그런데 실무에서 정작 더 어렵고 돈이 크게 걸린 질문은 조금 다릅니다.

한도를 올리면 부도가 늘어날까요. 연체 고객에게 독촉을 하면 회수가 늘까요. 금리를 낮추면 이탈이 줄까요.

이건 예측이 아니라 인과에 대한 질문입니다. Part 0에서 이 분야의 핵심을 “관측되지 않는 반사실을 추정하는 일”이라고 정리했는데, 그 반사실이 정면으로 등장하는 곳이 바로 여기입니다. 그리고 이 질문에 답할 수 있게 되는 순간, 심사 데이터 사이언티스트는 “누가 위험한지 맞히는 사람”에서 “정책을 설계하는 사람”으로 올라섭니다.

예측과 인과는 다른 질문입니다

예측은 이렇게 묻습니다. 이 고객이 부도날 확률은 얼마인가. 인과는 이렇게 묻습니다. 이 고객의 한도를 올리면 그 확률이 얼마나 바뀌는가. 둘은 완전히 다른 질문이고, 대답하는 방법도 다릅니다.

인과가 어려운 근본 이유는 한 사람에게서 두 결과를 동시에 볼 수 없다는 데 있습니다. 한도를 올린 이 고객이 만약 올리지 않았다면 어땠을지는 영원히 관측되지 않습니다. 우리는 늘 반쪽짜리 세상만 봅니다. Part 0에서 거절한 고객의 결과를 영원히 모른다고 했던 이야기의 일반형입니다.

문제는 신용에서 우리가 내리는 결정 자체가 결과에 개입한다는 점입니다. 승인할지, 한도를 얼마 줄지, 금리를 얼마로 할지가 그 고객의 부도에 직접 영향을 줍니다. 그래서 우리가 손에 쥔 데이터는 가만히 관찰한 세상이 아니라, 우리가 이미 개입해서 만들어낸 세상입니다.

여기서 흔한 함정이 나옵니다. 데이터를 보니 한도가 높은 고객일수록 부도가 적습니다. 그러니 한도를 올리면 부도가 줄어들까요. 아닙니다. 애초에 신용도가 좋아 보이는 고객에게 높은 한도를 줬을 뿐입니다. 한도가 부도를 낮춘 게 아니라, 좋은 신용도라는 숨은 원인이 높은 한도와 낮은 부도를 동시에 만든 겁니다. 이렇게 두 결과를 함께 움직이는 숨은 원인을 교란변수라고 합니다. (이건 심화편에서 공개 데이터로 직접 확인했습니다.)

상관은 인과가 아닙니다 신용도 (숨은 공통 원인) 높은 한도 낮은 부도 관측된 상관 (가짜 인과) 한도가 부도를 낮춘 게 아니라, 좋은 신용도가 둘 다 만들었습니다.

상관을 인과로 착각하고 정책을 세우면, 데이터가 아무리 많아도 방향이 틀립니다. 이게 신용에서 인과추론이 선택이 아니라 필수인 이유입니다.

황금기준은 실험입니다

반사실을 추측이 아니라 사실로 만드는 방법은 사실 단순합니다. 개입을 무작위로 하는 것입니다. 대상 고객을 무작위로 두 그룹으로 나눠, 한쪽에만 한도를 올리고 다른 쪽은 그대로 둡니다. 두 그룹은 무작위라 신용도도 소득도 평균적으로 같습니다. 그러니 나중에 부도율이나 수익에서 벌어지는 차이는 오직 한도 때문입니다. 이게 무작위 통제실험(RCT)이고, 인과추론의 황금기준입니다.

실험: 무작위로 나눠 한쪽만 개입합니다 대상 고객 무작위 배정 처치군: 한도 올림 결과 A 관측 대조군: 그대로 결과 B 관측 결과 A − 결과 B = 순수 인과효과 두 군은 무작위라 조건이 같으니, 이 차이는 오직 개입 때문입니다.

신용에는 이 실험의 특별한 형태가 하나 있습니다. 원래 거절했을 신청자 중 소수를 일부러 무작위로 승인해보는 것입니다. Part 0과 rejectkit 편에서 거절한 고객의 진짜 결과는 영원히 모른다고 했는데, 그 반사실을 유일하게 사실로 바꾸는 방법이 이것입니다. 거절 추론은 가정으로 그 빈자리를 추측하지만, 실험은 답을 그냥 관측하게 해 줍니다. 그래서 거절 추론의 가장 믿을 수 있는 해법이 결국 소규모 무작위 승인이라고 말씀드렸던 거고요.

물론 공짜는 아닙니다. 나쁜 고객을 일부러 승인하는 건 손실이고, 무작위 한도 인상도 리스크를 안고 갑니다. 그래서 실험은 크게 지르는 게 아니라 작게, 통제된 설계로 합니다. 표본을 얼마나 잡아야 차이를 통계적으로 잡아낼 수 있는지, 무작위를 고객 단위로 할지 지점 단위로 할지, 손실이 어디를 넘으면 멈출지, 그리고 부도 라벨이 12개월에서 24개월 뒤에야 확정된다는 지연까지 미리 설정해 두고 시작해야 합니다.

실험을 못 할 때: 준실험

실험이 늘 가능한 건 아닙니다. 너무 느리거나, 비용이 크거나, 윤리적 혹은 법적으로 곤란할 때가 많습니다. 그럴 때는 이미 쌓인 관측 데이터에서 인과를 최대한 근사합니다. 이걸 준실험이라고 합니다.

첫째, 성향점수와 역가중입니다. 개입을 받은 집단과 안 받은 집단이 관측된 특징에서 비슷해지도록 맞춰주는 방법입니다. Part 2에서 본 편향 보정이나 rejectkit의 reweighting과 같은 논리입니다. 좋은 신용도 고객에게 한도를 더 줬다면, 비슷한 신용도끼리 짝지어 비교하는 셈입니다.

성향점수: 비슷한 사람끼리 비교합니다 개입군 비개입군 겹치는 구간 낮음 ← 신용도 → 높음 비슷한 신용도끼리 짝짓거나 가중치를 줘서, 신용도 차이를 걷어냅니다.

둘째, 회귀불연속입니다. 이건 신용에서 특히 아름답게 들어맞습니다. 심사에는 컷오프 점수가 있습니다. 630점이 커트라인이면 631점과 629점 신청자는 사실상 똑같은 사람인데 한 명만 승인됩니다. 그 경계를 사이에 두고 결과가 툭 점프한다면, 그 점프가 바로 승인이라는 개입의 인과효과입니다. 심사 컷오프가 그 자체로 자연스러운 실험장이 되는 겁니다.

회귀불연속: 컷오프가 자연 실험장입니다 결과 ↑ 컷오프 (630점) 거절 승인 = 인과효과 신청 점수 → 컷오프 바로 위와 아래는 거의 같은 사람. 경계에서의 결과 점프가 승인의 순수 효과입니다.

이 밖에도 정책이 바뀐 전후를 비교하는 이중차분이나, 개입에만 영향을 주는 외부 요인을 지렛대로 쓰는 도구변수 같은 도구들이 상자에 더 있습니다. 다만 준실험은 전부 관측되지 않은 교란은 없다는 식의 가정에 기댑니다. 그래서 순서는 분명합니다. 가능하면 실험, 안 되면 준실험을 쓰되 어떤 가정 위에 서 있는지를 반드시 밝히는 것입니다. 그리고 그 가정이 조금 흔들릴 때 결론이 뒤집히는지 민감도 분석으로 함께 확인하는 게 정직한 태도입니다.

파이썬에는 이 과정을 거드는 도구가 몇 있습니다. DoWhy는 인과를 “가정을 명시하고, 추정하고, 그 가정이 틀렸다면 결과가 얼마나 흔들리는지 반증까지 해보는” 흐름으로 다루게 해줍니다. 가정을 코드로 적어두고 스스로 두드려보게 만드는 셈이라, 앞에서 말한 민감도 확인과 잘 맞습니다. EconML은 처치효과, 특히 사람마다 다른 이질적 효과(바로 아래 업리프트)를 추정하는 최신 방법들, 이를테면 더블 머신러닝이나 코절 포레스트를 모아둔 라이브러리입니다. CausalML은 업리프트 모델링과 대상 선정에 특화돼서, 메타러너부터 뒤에 나올 Qini 평가까지 한 번에 다룹니다.

평균을 넘어: 업리프트

지금까지는 한도를 올리면 평균적으로 수익이 느는가를 물었습니다. 그런데 실무의 진짜 질문은 한 발 더 갑니다. 누구에게 올려야 하는가.

한도를 올려도 어차피 수익이 늘어나지 않는 고객을 대상으로 한도를 올리는 건 리스크만 늘리는 낭비입니다. 반대로 한도가 없어서 못 쓰던 우량 고객에게 올리면 증분 수익이 생깁니다. 이렇게 개입이 그 사람에게 추가로 만들어내는 차이를 개인 단위로 추정하는 게 업리프트 모델링입니다. 단순히 반응할 사람을 예측하는 것과는 다릅니다. 개입이 없어도 어차피 할 사람이 아니라, 개입 때문에 달라지는 사람을 찾는 것이니까요.

신용에서 쓰임새는 분명합니다. 증액이 증분 수익을 만드는 고객만 골라 올리고, 독촉이 실제로 회수를 늘리는 연체자에게만 개입합니다. 기법으로는 T-learner나 X-learner, 코절 포레스트, 업리프트 트리 같은 것들이 있습니다.

한 가지 주의가 있습니다. 업리프트는 일반 AUC로 평가하면 안 됩니다. 우리가 맞히려는 게 부도 여부가 아니라 개입의 효과라서, Qini 곡선이나 Uplift@k 같은 전용 지표로 봐야 합니다.

차이는 이렇습니다. AUC는 이 사람이 부도날지 반응할지를 얼마나 잘 순위 매기는지를 잽니다. 하지만 업리프트가 원하는 건 개입이 이 사람을 얼마나 바꾸는지의 순위라, 애초에 재는 대상이 다릅니다. 더구나 한 사람에게서 개입한 결과와 안 한 결과를 동시에 볼 수 없으니 개인별 정답 자체가 없어서, 일반 지표처럼 한 명 한 명 채점할 정답지가 아예 없습니다. 그래서 Qini 곡선은 이걸 그룹으로 우회합니다. 모델이 높게 점수 매긴 고객부터 차례로 개입해 나갈 때, 처치군과 대조군의 결과 차이가 무작위로 고를 때보다 얼마나 더 빠르게 쌓이는지를 누적으로 그리는 것입니다. Uplift@k는 그중 상위 k%까지 갔을 때 쌓인 증분이고요. 한마디로 AUC가 “누가 부도날지 잘 맞히나”를 잰다면, Qini는 “내가 고른 순서대로 개입했더니 아무 개입도 안 한 것보다 실제로 얼마나 더 벌었나”를 잽니다.

Part 5에서 목적이 다르면 지표도 달라져야 한다고 했는데, 여기가 그 원칙이 가장 극적으로 적용되는 지점입니다.

그래서, 이 분야의 실력이란

예측은 입장권이고 인과가 실력이라는 말을 다시 하게 됩니다. 심사에서 우리가 내리는 모든 결정은 결과에 개입하는 행위이고, 그 효과를 정직하게 추정할 수 있어야 정책을 설계할 수 있습니다.

순서를 정리하면 이렇습니다. 가능하면 작게라도 실험을 겁니다. 그게 안 되면 준실험으로 근사하되 어떤 가정 위에 있는지 밝힙니다. 특히 신용에는 심사 컷오프라는 자연 실험장이 있으니 회귀불연속을 아깝게 방치하지 마시고요. 그리고 평균 효과를 넘어 누구에게 개입할지를 업리프트로 고릅니다.

이 사고방식이 거절 추론의 근본 해법이자, 한도 정책과 회수 전략과 가격 결정의 토대가 됩니다. 다음 편에서는 이렇게 만든 모델과 정책을 어떻게 검증하고 감리하며 운영하는지, 거버넌스와 모니터링으로 이어가겠습니다.

한도 인과 질문을 공개 데이터로 직접 디바이어싱해본 기록은 아래 관련 글의 심화편에 있으니, 개념을 손으로 확인하고 싶으시면 그쪽을 같이 보시면 좋겠습니다.

관련 글

← 글 목록

새 글을 메일로 받기

연재가 올라오면 메일로 알려드립니다. 스팸은 없고, 언제든 해지할 수 있습니다.

스팸 없음, 언제든 해지