📗 개인 프로젝트/🏦 정기 예금 가입 여부 예측

🏦 정기 예금 가입 여부 예측 | 1️⃣ EDA

Lento_ 2025. 4. 21. 15:42

👀 INTRO

목표

: 가장 정확한 분류 모델을 개발하여 고객이 정기 예금을 가입할지 여부를 예측하고, 그 모델을 통해 도출한 인사이트를 바탕으로 비즈니스 전략을 제시하는 것이 이번 프로젝트의 목표이다.

 

데이터 소개

: UC Irvine Machine Learning Repository에서 제공하는 Bank Marketing 데이터

: 이 데이터는 2008년부터 2010년까지의 은행 마케팅 캠페인 데이터를 포함하고 있다.

컬럼명 설명
age 나이 (숫자)
job 직업 (범주형)
marital 결혼 여부 (범주형)
education 교육 수준 (범주형)
default 신용 불량 여부 (범주형)
housing 주택 대출 여부 (범주형)
loan 개인 대출 여부 (범주형)
contact 연락 유형 (범주형)
month 마지막 연락 월 (범주형)
day_of_week 마지막 연락 요일 (범주형)
duration 마지막 연락 지속 시간, 초 단위 (숫자)
campaign 캠페인 동안 연락 횟수 (숫자)
pdays 이전 캠페인 후 지난 일수 (숫자)
previous 이전 캠페인 동안 연락 횟수 (숫자)
poutcome 이전 캠페인의 결과 (범주형)
emp.var.rate 고용 변동률 (숫자)
cons.price.idx 소비자 물가지수 (숫자)
cons.conf.idx 소비자 신뢰지수 (숫자)
euribor3m 3개월 유리보 금리 (숫자)
nr.employed 고용자 수 (숫자)
y 정기 예금 가입 여부 (이진: yes=1, no=0)

 

📊 EDA

☑️  결측치 / 중복값 / 이상치

(결측치)

: 결측치 없음

 

(중복값)

: 중복값 12개 존재    제거

 

(이상치)

: 이상치 존재, 하지만 전체 트리 모델 구조에는 큰 영향이 없다. → 즉, 이상치에 강인함.

: 이상치 제거 전/, 2가지 모두 시도해보았으나, 모델의 성능이 비슷하므로 최종 모델에서는 이상치 제거 하지 않고 모델링했다.


☑️  데이터 타입 변환

<'y' 컬럼 데이터타입 변환 (object -> int64)>

'y' 컬럼 데이터타입 변환 전/후

: 처음 데이터를 확인해보니 타깃 변수인 'y' 컬럼이 문자열로 되어 있었다. 하지만 'y'는 예금에 가입했는지 여부를 나타내는 이진 값(0 또는 1)만을 가지므로, 문자열 정보가 전혀 필요하지 않다. 따라서 의미상 더 적합한 int64 타입으로 변환하여, 불필요한 문자열 처리도 피할 수 있고, 모델링 시 타입으로 인한 경고나 오류도 줄일 수 있었다.


☑️  데이터 분석

<연락 횟수(‘campaign’) 따른 정기 예금 가입(‘y’) 확률>

- 하강 추세

: 캠페인 횟수가 증가할수록 가입 확률이 감소하는 경향을 보. 이는 소비자 피로도나 관심 감소로 인해 반복적인 캠페인이 효과가 줄어드는 것으로 추측된다.

 

- 최적의 캠페인 횟수

: 5~10 회의 캠페인에서 가입 확률이 상대적으로 높은 경향을 보인다. 이 범위 내에서 최적의 캠페인 전략을 취할 필요가 있다.

 

- 신뢰 구간

: 빨간색 음영 영역은 신뢰 구간을 나타내며, 이 구간이 좁아지면서 캠페인 횟수가 많아질수록 데이터의 변동성이 줄어드는 것으로 보인다.


<연락 횟수(‘campaign’) 따른 정기 예금 가입(‘y’) 확률>

- len(data[data['pdays'] == 999]) >> 39661

    : 경과일 수가 999일은 지난 날짜라기 보다는 특별한 의미가 있는 듯하여 ‘pday_999’ 컬럼을 생성하고 pdays에는 0으로 변경했다.

 

- 경과일 수가 증가함에 따라 가입 확률이 일반적으로 증가하는 것으로 보인다.

    : 초기에는 가입 확률이 낮지만, 경과일 수가 10일을 넘어서면서 확률이 상승하는 경향이 있다.

 

- 비선형 패턴

    : 가입 확률이 도달하는 특정 값에 따라 시간이 지남에 따라 더 빨리 증가할 수 있음을 시사한다.


<수치형 특성들 간의 상관관계 / ‘y’컬럼과의 상관관계>

- 'duration'↔'y' :  두 변수 간의 상관계수는 0.41, 'duration'이 길어질수록 긍정적인 결과(y) 대한 예측 가능성이 높아진다는 것을 의미함.

- 'pdays'↔'y' :  두 변수 간의 상관계수는 -0.84, 'pdays' 값이 작을수록 긍정적인 결과(y)가까워짐을 나타낸다. , 예전 연락이 짧았던 고객이 재방문의 가능성이 더 높다는 의미함.

- 'previous'↔'y' :  상관계수 -0.59, 이전의 연락 횟수가 많을수록 긍정적인 결과가 낮아짐을 보여준다. 이는 고객이 여러 번 연락을 받았던 경우 결과가 부정적일 수 있음을 나타냄.

- 'pdays'↔'previous' :  두 변수 간의 상관계수 0.49, 이전 연락이 많았던 경우 'pdays' 값이 더 높을 수 있음을 알 수 있음.

- emp.var.rate'↔'cons.price.idx' :  각각 다른 경제 지표로, 양의 상관관계를 가지며(상관계수 0.78) 서로 긍정적인 영향을 미칠 수 있음을 알 수 있고, 경제 지표가 안정적일수록 소비자 신뢰도 또한 높아질 가능성이 있음.

- 'campaign'의 상관관계는 상대적으로 낮은 편이며(최대 0.15) 캠페인의 효과가 다른 변수들에 비해 뚜렷하지 않음을 나타냄.


<PI Chart : 컬럼의 카테고리별 비율 / Stack Bar Chart : 예금 가입 여부별 비율>

 

('job' 컬럼)

: 소득이 낮거나 불안정한 직업군에서 가입률이 상대적으로 높다. → 예금 상품의 안정성이 어필된 것일 수 있다.


('contact' 컬럼)

: cellular로 연락한 경우 가입률이 더 높다. → 마케팅 채널로 cellular 활용이 효과적일 수 있다.


('poutcome' 컬럼)

: 과거 마케팅에 성공한 고객에게 재접촉하면 가입 가능성이 높음.


<PI Chart : 컬럼의 카테고리별 비율 / Stack Bar Chart : 예금 가입 여부별 비율>

: 10, 70, 80, 90대에서 가입률이 높다. (45~52%)

: 젊은 층(10)과 고령층(70대 이상)에서 예금 상품에 대한 관심이 높다. → 각 세대에 맞는 마케팅 전략 필요


☑️ Feature Engineering

('job' 컬럼 그룹화)

: 카테고리 개수가 많아 모델학습에 불리하게 작용할 수 있기에 그룹화해서 카테고리 개수를 줄였다.