AI-Ready Data, Syntitan

정기예금 가입 예측 F1 0.45→0.61, UCI Bank Marketing AI-Ready Data 실험

안녕하세요. 엔터프라이즈 AI를 위한 AI-Ready Data Platform, Syntitan을 만드는 CUBIG입니다.

UCI Bank Marketing(은행 마케팅) 데이터셋으로 정기예금 가입 여부를 분류하는 실험을 했습니다. Random Forest 모델의 설정과 평가 데이터는 그대로 두고, Syntitan으로 준비한 학습 데이터를 사용했을 때 예측 결과가 어떻게 달라지는지 비교했습니다. 같은 평가 기록 824건에서 F1 점수는 0.4526에서 0.6054로 올랐지만, 미가입 기록을 가입으로 잘못 분류하는 오탐도 늘었습니다.

전체 정확도는 90.90%에서 91.14%로 거의 변하지 않았습니다. 실제 가입 기록 중 모델이 맞게 찾아낸 비율인 재현율(Recall)은 34.44%에서 62.22%로 올랐습니다. 반면 가입으로 분류한 기록 중 실제로 가입한 기록의 비율인 정밀도(Precision)는 65.96%에서 58.95%로 내려갔습니다.

데이터 준비가 모델의 예측을 어떻게 바꾸는지 살펴보기 위해 Syntitan Ready for Model로 실험을 진행했습니다.

학습 데이터를 바꾸자 가입 기록을 더 많이 찾았지만, 오탐도 함께 늘었습니다. F1 상승은 같은 판정 규칙에서 정밀도와 재현율의 균형이 달라졌다는 뜻입니다. 이것만으로 실제 가입 기록에 더 높은 예측 점수를 주는 능력까지 좋아졌다고 볼 수는 없습니다.

AI-Ready Data는 특정 AI 업무에 쓰도록 준비하고 그 결과를 확인한 데이터를 말합니다. 이 글에서는 정기예금 가입 분류를 대상으로 데이터 준비 전후의 결과를 비교했습니다. 실험에서 내려받은 데이터와 스크립트, 학습 및 평가 분할 정보로 결과를 어디까지 다시 확인할 수 있었는지도 정리했습니다.

핵심 요약

  • Random Forest 설정과 평가 기록을 그대로 두고 준비한 데이터로 학습하자, 실제 가입 기록을 맞게 찾아낸 비율인 재현율이 34.44%에서 62.22%로 올랐습니다.
  • 오탐도 16건에서 39건으로 늘어 정밀도는 내려갔습니다.
  • F1은 올랐지만 ROC-AUC와 PR-AUC는 소폭 내려갔습니다. 가입으로 분류하는 기록이 늘었어도, 실제 가입 기록에 더 높은 점수를 주는 능력까지 좋아졌다는 뜻은 아닙니다.
  • 한 번의 평가 분할과 통화 시간을 포함한 입력 조건에서 나온 결과입니다. 내려받은 파일로 두 모델의 학습과 평가를 다시 실행해 확인할 수 있습니다.

UCI Bank Marketing 데이터셋과 비교 방법

UCI Bank Marketing 데이터셋 가운데 bank-additional.csv를 사용했습니다. 이 파일에는 포르투갈 한 은행의 전화 마케팅 캠페인 기록 4,119건이 들어 있습니다.

예측 대상은 고객의 정기예금 가입 여부입니다. 가입 기록은 451건, 미가입 기록은 3,668건으로, 가입 기록이 전체의 약 11%를 차지합니다.

데이터는 아래처럼 학습용과 평가용으로 나눴습니다.

  • 학습 세트 3,295건
  • 평가 세트 824건(가입 90건, 미가입 734건)

Random Forest용으로 준비한 데이터에서는 원래 입력 변수 20개 가운데 15개를 사용했습니다. 학습 데이터에 가입 사례 897건을 추가해 가입 기록을 361건에서 1,258건으로 늘렸고, 미가입 기록 2,934건은 그대로 두었습니다.

같은 Random Forest 설정으로 원본 데이터와 준비한 데이터를 각각 학습했습니다. 두 모델에는 같은 판정 규칙을 적용하고, 동일한 원본 평가 기록으로 결과를 비교했습니다.

UCI Bank Marketing 데이터셋 비교 설정. 4,119건을 학습 3,295건과 평가 824건으로 나누고, 학습 데이터만 원본 또는 준비한 데이터(입력 변수 20개 중 15개, 가입 사례 897건 추가)로 바꾼 뒤, Random Forest 설정을 그대로 두고 따로 학습해 원본 평가 레코드 824건으로 판정 기준을 유지한 채 평가한 흐름

변수 선택과 가입 사례 추가를 함께 적용했으므로, 이번 비교는 두 처리를 합친 결과입니다. 각 처리가 결과에 얼마나 영향을 줬는지는 따로 확인하지 않았습니다.

예측 결과에서 달라진 점

준비한 데이터로 학습한 모델은 가입 기록 25건을 더 맞게 분류했지만, 오탐도 23건 늘었습니다. 전체 분류 오류는 75건에서 73건으로 줄었습니다.

UCI Bank Marketing 데이터셋 정기예금 가입 분류에서 Random Forest의 가입 F1이 0.4526에서 0.6054로 0.1528 오르는 동안 재현율은 34.44%에서 62.22%로 높아지고 정밀도는 65.96%에서 58.95%로 내려간 결과(같은 평가 레코드 824건, 평가 분할 1회)

같은 평가 기록 824건에서 데이터 준비 전후의 Random Forest 결과를 비교하면 아래와 같습니다(평가 분할 1회).

평가 레코드 824건 기준 결과 표
평가 레코드 824건 기준 결과준비 전준비 후
가입으로 맞게 분류한 가입 레코드3156
놓친 가입 레코드5934
미가입으로 맞게 분류한 미가입 레코드718695
가입으로 잘못 분류한 미가입 레코드1639
정확도(Accuracy)90.90%91.14%
가입 재현율34.44%62.22%
가입 정밀도65.96%58.95%
가입 F10.45260.6054

가입 기록 90건이 포함된 한 번의 평가 분할에서 나온 결과입니다. 다른 분할이나 새로운 데이터에서도 같은 변화가 나타나는지는 확인하지 않았습니다. 따라서 가입 기록 25건을 더 찾았다는 결과를 앞으로 들어올 데이터에서도 기대할 수 있는 개선 폭으로 해석하기는 어렵습니다.

F1 상승과 순위 성능의 차이

가입 F1은 0.4526에서 0.6054로 올랐지만, 판정 기준값을 바꿔 가며 성능을 보는 ROC-AUC와 PR-AUC는 내려갔습니다.

지표 표
지표준비 전준비 후
ROC-AUC0.94600.9416
PR-AUC(가입 레코드를 얼마나 앞쪽에 두는지 보는 지표, 평가 스크립트에서는 평균 정밀도로 계산)0.63200.6172

가입으로 분류한 기록은 준비 전 47건에서 준비 후 95건으로 늘었습니다. 그 안에는 실제 가입 기록뿐 아니라 가입으로 잘못 분류한 미가입 기록도 더 많이 포함됐습니다.

같은 판정 규칙에서 가입으로 분류하는 기록이 늘었다는 결과입니다. 실제 가입 기록에 미가입 기록보다 높은 예측 점수를 주는 순위 성능까지 좋아졌다는 근거는 아닙니다.

다만 원본 데이터로 학습하면서 클래스 가중치를 조정한 모델이나, 별도 검증 세트에서 판정 기준값을 정한 모델과는 비교하지 않았습니다. 데이터 준비가 이번과 같은 결과를 얻는 가장 좋은 방법인지는 아직 알 수 없습니다.

이를 확인하려면 실제 가입 기록을 찾아내는 비율인 재현율을 비슷하게 맞춘 뒤, 어느 모델의 오탐이 더 적은지 비교해야 합니다. 클래스 가중치나 판정 기준값만 조정한 모델과도 비교해야 이번 데이터 준비 방식의 장점을 판단할 수 있습니다.

Logistic Regression에서도 확인한 예측 변화

내려받은 모델 스크립트로 Logistic Regression 비교도 다시 실행했습니다. 이 모델의 학습 데이터에는 파생 변수 10개와 가입 사례 897건을 추가했습니다. 그 결과 가입 재현율은 올랐지만, 정밀도와 전체 정확도는 내려갔습니다.

모델과 조건 표
모델과 조건정확도정밀도재현율F1
Random Forest, 준비 전90.90%0.65960.34440.4526
Random Forest, 준비 후91.14%0.58950.62220.6054
Logistic Regression, 준비 전91.38%0.71110.35560.4741
Logistic Regression, 준비 후89.68%0.52250.64440.5771

정밀도, 재현율, F1은 모두 가입 클래스 기준입니다.

모델과 조건 표
모델과 조건미가입으로 맞게 분류(TN)가입으로 잘못 분류(FP)놓친 가입(FN)가입으로 맞게 분류(TP)
Random Forest, 준비 전718165931
Random Forest, 준비 후695393456
Logistic Regression, 준비 전721135832
Logistic Regression, 준비 후681533258

두 모델 모두 데이터 준비 후 놓친 가입 기록이 줄었지만, 오탐은 늘었습니다. F1과 함께 정밀도와 재현율을 보면 각 모델에서 어떤 예측과 오류가 달라졌는지 알 수 있습니다.

내려받은 파일로 확인한 범위

이 실험에서 내려받은 패키지에는 모델마다 아래 파일이 들어 있었습니다.

  • data_before.csv와 data_after.csv
  • 내려받아 모델 학습과 평가를 실행할 수 있는 독립 스크립트 run_model.py
  • 평가 분할 정보를 담은 proof_split.json

이 파일로 Random Forest와 Logistic Regression 비교를 다시 실행하고, 맞거나 틀린 분류 건수를 나타내는 혼동 행렬을 살펴봤습니다. 분할 정보에는 추가한 기록을 학습 데이터에 넣었다는 표시와 평가에 사용한 원본 기록 목록이 들어 있었습니다. 이를 통해 점수를 매긴 평가 데이터에는 추가한 기록이 한 건도 포함되지 않았음을 확인했습니다.

다시 실행해 확인한 것은 제공된 데이터로 모델을 학습하고 평가하는 단계입니다. 데이터를 만든 생성 코드는 패키지에 없었고, 정확히 어떤 방법으로 사례를 추가했는지도 확인하기 어려웠습니다. 변수 선택을 비롯한 준비 과정에서 평가 데이터를 미리 참고하지 않고 학습 데이터만 사용했는지도 이 파일만으로는 알 수 없었습니다.

따라서 같은 점수를 다시 얻었다는 사실만으로 데이터 누수가 없다고 판단할 수는 없습니다. 평가 데이터의 정보가 준비 과정에 섞이지 않았는지 확인하려면, 사례를 추가한 방법과 각 준비 단계에서 사용한 데이터 범위를 기록해야 합니다.

재현 파일: UCI Bank Marketing

ZIP 0.8MB, 모델 폴더 4개

  • 모델별 준비 전후 데이터셋
  • 모델마다 따로 실행하는 run_model.py
  • 원본 평가 레코드를 가리키는 분할 정보
재현 파일 내려받기

※ 모델 학습과 채점만 재실행, 앞 단계 데이터 준비는 제외. 데이터 출처 UCI Bank Marketing(Moro, Rita, Cortez, 2014), CC BY 4.0, 가공본

통화 시간 변수와 결과 해석

입력 변수에는 마지막 통화의 길이를 나타내는 duration이 들어 있습니다. 이 값은 통화를 마친 뒤에야 알 수 있으므로, 누구에게 연락할지 정하는 시점에는 사용할 수 없습니다. 이번 실험에서 평가한 것은 통화 정보를 포함해 가입 여부를 분류하는 성능입니다. 통화 전에 연락 대상을 고르는 성능까지 평가한 것은 아닙니다.

이 실험을 연락 전 잠재 고객을 고르는 근거로 쓰려면 duration을 제외한 비교가 먼저 필요합니다. 아직 이 비교는 진행하지 않았습니다. 또 과거 가입 기록을 더 많이 맞게 분류했다고 해서 실제 캠페인에서 가입이 늘어난다고 볼 수는 없으므로, 이를 확인하려면 운영 환경에서 별도로 평가해야 합니다.

결과 재현과 다음 검증

이번 실험에서는 Syntitan Ready for Model로 데이터 준비 전후의 예측을 비교하고, 데이터와 모델 스크립트, 학습 및 평가 분할 정보를 내려받았습니다. 이 파일로 모델을 다시 실행해, 보고된 점수와 함께 어떤 오류가 늘고 줄었는지 확인할 수 있었습니다.

비교 결과를 더 검증하려면 다음 작업이 필요합니다.

  • 클래스 가중치와 판정 기준값 조정 모델을 비교 기준으로 추가합니다. 재현율을 비슷하게 맞춘 상태에서 어느 쪽 오탐이 적은지 확인합니다.
  • 학습 데이터와 평가 데이터를 나누는 방식을 바꿔 평가를 반복합니다. 가입 기록 90건이 포함된 한 번의 평가 분할을 넘어, 다른 분할에서도 같은 변화가 나타나는지 확인합니다.
  • 통화 시간을 제외하고 시험합니다. 연락 전 잠재 고객을 고르는 성능을 평가하려면, 그 시점에 알 수 있는 정보만으로 비교해야 합니다.
  • 데이터 준비 과정을 빠짐없이 기록합니다. 사례를 추가한 방법과 각 단계에서 사용한 데이터를 남겨, 평가 데이터를 미리 참고하지 않고 학습 데이터만 사용했는지 확인합니다.

이번 평가에서는 준비한 데이터로 학습한 Random Forest가 가입 기록을 더 많이 찾아 F1이 올랐지만, 오탐도 늘고 순위 지표는 소폭 내려갔습니다. 어떤 예측과 오류가 달라졌는지 확인한 결과를 바탕으로, 다음에 비교할 조건을 정할 수 있습니다.

같은 전후 비교 방식으로 진행한 다른 실험은 UCI Iranian Churn(이란 통신사 고객 이탈) 데이터셋과 UCI Polish Companies Bankruptcy(폴란드 기업 파산) 데이터셋 콘텐츠에서 볼 수 있습니다.

우리 데이터로도 직접 확인해 보세요. Syntitan Ready for Model에서는 모델 설정을 그대로 두고 데이터 준비 전후의 결과를 같은 평가 기록으로 비교할 수 있습니다. 모델 학습과 평가를 다시 실행할 수 있는 파일도 내려받을 수 있습니다.

UCI Bank Marketing 데이터셋 실험 세부 정보

항목 표
항목내용
데이터셋UCI Bank Marketing, bank-additional.csv
레코드 수4,119건
원래 입력 변수20개
목표 변수y: 정기예금 가입 여부(yes 또는 no)
클래스 분포가입 451건, 미가입 3,668건
원래 학습 세트3,295건
평가 세트824건(가입 90건, 미가입 734건)
재현한 비교Random Forest, Logistic Regression
양성 클래스가입(yes)
데이터셋 제작자S. Moro, P. Rita, P. Cortez
라이선스CC BY 4.0

출처: UCI Machine Learning Repository: Bank Marketing

데이터셋 인용: Moro, S., Rita, P., & Cortez, P. (2014). Bank Marketing [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5K306

원본 데이터는 위에서 설명한 대로 Syntitan Ready for Model로 처리했으며, 캠페인 비용과 매출 효과, 업무 시간 절감은 측정하지 않았습니다.

AI는 데이터 상태에서 실행되니 지금 AI-Ready를 준비하세요

참고문헌

  1. UCI Machine Learning Repository, Bank Marketing
  2. Moro, S., Rita, P., and Cortez, P. (2014). Bank Marketing [Dataset]. UCI Machine Learning Repository

자주 묻는 질문

UCI Bank Marketing 데이터셋은 어떤 데이터인가요?

포르투갈 한 은행의 전화 마케팅 캠페인 기록을 담은 데이터셋으로, S. Moro, P. Rita, P. Cortez가 만들었고 라이선스는 CC BY 4.0입니다. 이 실험에서 사용한 bank-additional.csv는 레코드 4,119건과 원래 입력 변수 20개, 정기예금 가입 여부(yes 또는 no)를 나타내는 목표 변수 y로 이루어져 있습니다.

데이터 준비로 모델이 더 좋아졌나요?

같은 평가 레코드 824건에서 준비한 데이터로 학습한 Random Forest는 가입 레코드를 더 많이 찾고 F1이 0.4526에서 0.6054로 올랐지만, 오탐이 16건에서 39건으로 늘고 순위 지표도 소폭 내려갔습니다(ROC-AUC 0.9460에서 0.9416, PR-AUC 0.6320에서 0.6172). 가입 레코드가 90건인 평가 분할 하나에서 관찰한 결과입니다.

이 실험에서 통화 시간이 왜 중요한가요?

입력 변수에 마지막 통화 시간인 duration이 들어 있는데, 이 값은 통화를 마친 뒤에야 알 수 있어 연락 대상을 정하는 시점에는 없습니다. 따라서 이 실험은 통화 정보를 포함한 가입 분류 성능을 평가한 것이고, 통화 전 대상 선정 성능을 보여 주지는 않습니다.

비교를 더 탄탄하게 하려면 무엇이 필요한가요?

클래스 가중치와 판정 기준값 조정 모델을 비교 기준으로 더하고, 분할을 바꿔 평가를 반복하고, 통화 시간을 뺀 시험을 하고, 각 준비 단계에서 사용한 데이터와 처리 방법을 기록해야 합니다.