HSEOM GeckoHSEOM
Instagram

흑섬 TECH 블로그 - 데이터 기반 브리딩 기술

레오파드게코 브리딩에 데이터 분석과 AI 기술을 접목합니다. Python, NumPy를 활용한 체중 관리, 성장 추이 분석, 환경 데이터 시각화 등 실무에서 직접 사용하는 기술을 일반인도 이해하기 쉽게 설명합니다.

주요 카테고리

AI 카테고리

AI와 머신러닝을 활용한 레오파드게코 브리딩 기술과 데이터 분석 방법을 공유합니다.

28개의 글이 있습니다.

[머신러닝 실전 4편] 이탈 예측, 어떤 모델이 이기나 — 5개 모델 실전 비교

전처리를 끝내고 나니 '어떤 모델을 써야 하지?'가 막막했습니다. 로지스틱 회귀? 랜덤포레스트? 그래디언트 부스팅? 실전에서는 하나만 골라서 올인하는 게 아니라, 여러 개를 빠르게 돌려보고 비교합니다. DummyClassifier로 베이스라인을 세우고, 5개 모델을 교차검증으로 공정 비교한 결과를 정리했습니다.

카테고리: AI

작성일: 2026-03-10T09:00:00

예상 읽기 시간: 18

Back to Tech
AI·18min read·

[머신러닝 실전 4편] 이탈 예측, 어떤 모델이 이기나 — 5개 모델 실전 비교

전처리를 끝내고 나니 '어떤 모델을 써야 하지?'가 막막했습니다. 로지스틱 회귀? 랜덤포레스트? 그래디언트 부스팅? 실전에서는 하나만 골라서 올인하는 게 아니라, 여러 개를 빠르게 돌려보고 비교합니다. DummyClassifier로 베이스라인을 세우고, 5개 모델을 교차검증으로 공정 비교한 결과를 정리했습니다.

시작하며 — 어떤 모델을 써야 하지?

3편까지 해서 데이터가 드디어 모델에 넣을 수 있는 상태가 되었습니다.
인코딩도 했고, 스케일링도 했고, 파생변수도 만들었습니다.
그런데 막상 모델을 고르려니 막막했습니다.

로지스틱 회귀? 랜덤포레스트? SVM? XGBoost?
기초 시리즈에서 개별적으로는 배웠는데, 실전에서 어떤 걸 써야 하는지는 또 다른 문제였습니다.
정답부터 말하면 — 여러 개를 돌려보고 비교하는 게 실전입니다.

이번 편에서는 DummyClassifier로 기준선(베이스라인)을 세우고,
5개 모델을 교차검증으로 비교한 뒤,
Confusion Matrix까지 해석해봅니다.


모델 선택 프로세스 — 한 번에 정리

모델 선택 5단계 프로세스 — 베이스라인 → 후보 선정 → 교차검증 → 평가지표 → 최종 선택

모델 선택은 이 순서를 따릅니다.
1) 베이스라인 세우기2) 후보 모델 돌려보기3) 교차검증으로 공정 비교4) 평가지표 분석5) 최종 선택.
하나씩 해봅니다.


Step 1 — 베이스라인: DummyClassifier

모델을 비교하려면 먼저 "최소한 이것보다는 나아야 한다"는 기준이 필요합니다.
그게 베이스라인입니다.

sklearn의 DummyClassifier는 아무 학습 없이 "가장 많은 클래스로만 예측"합니다.
Churn 데이터에서 이탈하지 않은 고객이 73.5%이니까,
모든 고객에게 "이탈 안 함"이라고 찍으면 정확도가 73.5%입니다.

DummyClassifier (strategy='most_frequent')
Accuracy: 0.7346 | F1: 0.0000 | Recall: 0.0000

정확도 73.5%라고 하면 괜찮아 보이지만, 이탈 고객을 단 한 명도 못 잡습니다.
F1=0, Recall=0. 이게 바로 "Accuracy만 보면 안 되는 이유"입니다.

이제 이 73.5%보다 의미 있게 높은 모델을 찾아야 합니다.
특히 이탈 고객을 실제로 잡아내는지(Recall)가 중요합니다.


Step 2 — 후보 모델 5개

5개 모델 레이더 차트 비교 — Accuracy, F1, Recall, Precision, 속도

기초 시리즈에서 배운 모델 중 분류에 쓸 수 있는 5개를 골랐습니다.

1. Logistic Regression — 가장 기본적인 분류 모델. 해석이 쉽고 빠릅니다.
2. Random Forest — 결정 트리 여러 개의 다수결. 과적합에 강합니다.
3. Gradient Boosting — 약한 모델을 순차적으로 쌓아 올림. 보통 성능이 좋습니다.
4. SVM (RBF) — 고차원에서 결정 경계를 찾음. 스케일링이 중요합니다.
5. KNN (k=5) — 가장 가까운 5개 이웃의 다수결. 단순하지만 때로 효과적입니다.

5개 모두 기본 하이퍼파라미터(default)로 돌립니다.
튜닝은 5편에서 할 거니까, 지금은 "기본 설정으로 누가 제일 나은지"만 봅니다.


Step 3 — 교차검증으로 공정 비교

5-Fold Stratified Cross Validation 시각화

모델 하나를 한 번 돌려서 "이게 좋다"고 판단하면 위험합니다.
train/test를 어떻게 나누느냐에 따라 결과가 달라질 수 있으니까요.

그래서 5-Fold Stratified Cross Validation을 씁니다.
데이터를 5등분해서, 매번 다른 조각을 테스트셋으로 쓰고 나머지 4개로 학습합니다.
이걸 5번 반복해서 평균을 내면, 한 번의 운에 좌우되지 않는 공정한 점수가 나옵니다.

"Stratified"가 붙은 이유는 — 각 Fold에서 이탈 비율(26.5%)을 동일하게 유지하기 때문입니다.
불균형 데이터에서는 이게 중요합니다. 그냥 KFold를 쓰면 어떤 Fold에 이탈 고객이 몰릴 수 있습니다.

Jupyter 실행 코드 — 6개 모델 교차검증 비교
Jupyter 코드 — 데이터 전처리 + 6개 모델 cross_validate 실행 결과 실행 결과 — 6개 모델 Accuracy/F1/Recall 비교 바차트

Step 4 — 결과 비교: 누가 이겼나

6개 모델 Accuracy, F1 Score, Recall 비교 바 차트

5-Fold CV 결과를 정리하면 이렇습니다.

모델 Accuracy F1 Recall Precision
DummyClassifier 0.7346 0.0000 0.0000
Logistic Regression 0.8053 0.6010 0.5532 0.6581
Random Forest 0.7873 0.5423 0.4756 0.6315
Gradient Boosting 0.8058 0.5892 0.5254 0.6712
SVM (RBF) 0.7992 0.5573 0.4767 0.6710
KNN (k=5) 0.7632 0.5271 0.4981 0.5602

차트와 표를 같이 보면 몇 가지가 보입니다.

1. Accuracy만 보면 다 비슷해 보입니다
Logistic Regression(80.5%), Gradient Boosting(80.6%), SVM(79.9%) — 차이가 1% 이내입니다.
그런데 F1과 Recall을 보면 차이가 확 벌어집니다.

2. DummyClassifier의 Accuracy가 73.5%
아무것도 안 해도 73.5%입니다. 그러니까 80%라는 숫자가 "겨우 7% 개선"인 겁니다.
Accuracy만 보면 과대평가하기 쉽습니다.

3. Gradient Boosting이 종합 1위
Accuracy와 F1 모두 최고점입니다. 다만 Recall은 Logistic Regression이 약간 더 높습니다.
"이탈 고객을 많이 잡는 것"이 목표라면 LR도 고려할 만합니다.

4. KNN은 Accuracy도 낮고 Precision도 낮습니다
기본 설정 k=5에서는 다른 모델에 비해 전반적으로 부족합니다.


잠깐 — Accuracy, F1, Recall, Precision이 뭔지

표에 지표가 4개나 있으니 헷갈릴 수 있습니다. 간단하게 정리합니다.

Accuracy — 전체 중에 맞춘 비율. 직관적이지만 불균형 데이터에서는 함정이 있습니다.

Precision — "이탈이라고 예측한 것" 중 실제 이탈 비율. 잘못된 알림을 줄이고 싶을 때 중요합니다.

Recall — "실제 이탈 고객" 중 잡아낸 비율. 놓치는 고객을 줄이고 싶을 때 중요합니다.

F1 Score — Precision과 Recall의 조화평균. 둘 다 어느 정도 챙기고 싶을 때 씁니다.

통신사 입장에서 생각하면 — 이탈할 고객을 놓치면 그 고객은 그냥 떠납니다.
잘못 잡는 건 "혜택 제공"으로 끝나지만, 놓치는 건 매출 손실입니다.
그래서 이탈 예측에서는 Recall이 특히 중요합니다.

Jupyter 실행 코드 — Confusion Matrix
Jupyter 코드 — Gradient Boosting Confusion Matrix + classification_report 실행 결과 — Confusion Matrix 히트맵

Step 5 — Confusion Matrix 해석

Gradient Boosting Confusion Matrix — TN 940, FP 95, FN 181, TP 193

종합 1위인 Gradient Boosting의 Confusion Matrix를 자세히 봅니다.
테스트셋 1,409명에 대한 결과입니다.

TN (True Negative) = 940명
이탈 안 한 고객을 "이탈 안 함"으로 정확하게 예측. 제일 많습니다.

TP (True Positive) = 193명
이탈 고객을 "이탈"로 정확하게 예측. 이걸 더 늘려야 합니다.

FP (False Positive) = 95명
이탈 안 할 고객을 "이탈"로 잘못 예측. 오탐입니다.
이 고객들에게 불필요한 혜택을 제공하게 됩니다. 비용이 발생하지만 치명적이진 않습니다.

FN (False Negative) = 181명
이탈할 고객을 "이탈 안 함"으로 놓침. 이게 제일 아픕니다.
이 고객들은 아무 조치 없이 떠나게 됩니다.

이탈 고객 374명 중 193명을 잡았고, 181명을 놓쳤습니다.
Recall = 193 / 374 = 52%. 절반 정도만 잡는 겁니다.
Precision = 193 / 288 = 67%. 이탈이라고 찍은 것 중 2/3는 맞았습니다.

현재 기본 설정으로는 이 정도입니다. 5편에서 튜닝으로 개선해봅니다.

정리 — 이번 편에서 확인한 것

4편 정리 — 베이스라인, 5개 모델 비교, 교차검증, 평가지표, Confusion Matrix 요약
1. DummyClassifier로 베이스라인을 세우면 Accuracy 73.5%. 이것보다 못하면 모델의 의미가 없습니다.
2. 기본 설정 기준, Gradient Boosting이 Accuracy 80.6% / F1 0.59로 종합 1위였습니다.
3. 하지만 최고 모델도 이탈 고객의 48%를 놓칩니다. 불균형 데이터의 한계입니다.

이번 편에서 가장 인상 깊었던 건, Accuracy의 함정이었습니다.
아무것도 안 해도 73.5%가 나오는 상황에서 80%는 대단한 게 아니었습니다.
F1, Recall, Confusion Matrix까지 봐야 모델의 진짜 실력이 보였습니다.

다음 편(5편)에서는 하이퍼파라미터 튜닝을 합니다.
같은 Gradient Boosting이라도 셋팅을 바꾸면 성능이 달라집니다.
GridSearch, RandomSearch로 최적 조합을 찾아봅니다.

#모델선택#교차검증#베이스라인#모델비교#sklearn#python