최종 프로젝트

Chapter.9 최종 실전 자동화 프로젝트 (8)

devjjun 2026. 7. 7. 20:16

TIL(Today I Learned)


1️⃣실전 자동화 프로젝트 (7)

리키지 발견부터 Boruta 도입까지

문제 발견

피처 선택에 쓴 RepeatedStratifiedKFold(seed=42)의 첫 5-fold가, 성능 평가에 쓴 StratifiedKFold(seed=42)와 100% 동일했다.
→ 피처를 고를 때 본 데이터를 성능 평가에도 그대로 재사용 (데이터 누수)

정직하게 재측정 (Nested CV)

outer-test를 피처 선택에서 완전히 배제하고 재평가:

제품 기존(리키지) 정직(Nested CV) 차이
A_31 0.7990 0.6536 -14.5%p
TO_31 0.6972 0.6305 -6.7%p

(계산 비용 문제로 3모델 Union 대신 LGBM 단일모델로 검증)

근본 원인

  • 리키지 외에도 피처 채택 기준(positive_ratio≥0.6)이 통계적 근거 없는 휴리스틱
  • Union(3모델 합집합)은 이 느슨한 기준을 3배로 관대하게 만들 뿐

해결책

  • Boruta: 임계값을 이항검정 기반 formal한 방법으로 교체 (섞은 가짜 피처 대비 유의성 검정)
  • 부수 효과: Boruta 기본 모델(Random Forest)이 최종 후보 모델 어디에도 안 속해서, Union을 도입했던 이유(순환논리)도 자동 해결
  • 덴드로그램 클러스터링: 상관 0.7 초과 피처를 군집화해 대표 1개만 채택 → 상관 잔존 문제 완화

남은 한계

  • TO_31 클래스 불균형(8/83/9%), 소표본(A_31 316행)은 어떤 방법으로도 완전 해결 불가

2️⃣멘토링 노트

팀 질문

  1. 멘토님은 프로젝트 중간에 발표할 때 어떤 부분을 중요하게 생각하면서 준비하시는지
  2. 피처 선택을 stratified k-fold와 permutation importance 기반으로 하고 덴드로그램을 반영을 했더니 피처 컬럼수가 너무 적어져서 과적합 문제가 일어나고 있음. (현재 상황: 컬럼 2,881개 → 35~36개로 축소, 데이터 행 수가 900개뿐이라 과적합이 계속 발생.)→ 이에 대한 해결방안은 무엇인가요?
  3. 만약 기업에서 분석해야 되는데 비식별 컬럼으로 주어지면 어떻게 접근하는지요? (사실 우리 상황이랑 똑같아요)
  4. 요즘 멘토님이 생각하는 취준생들이 준비하면 좋은 것들은 무엇인가요?
  5. 동등한 비율로 폴드별로 나눴을때 성적 차이가 심한데, 원인과 해결 방법은 무엇인가요?

멘토님 코멘트

  1. 지금 결과가 중요한게 아닌 해온 과정이 중요하므로 과정에 대한 언급이 중요해보임
    /덴드로그램(군집화) 컬럼수가 너무 적어서 과적합문제가 일어나서 이걸 어떻게 해결했는지/현재 어디까지 해왔고, 왜 이런 전처리를 했고 왜 이런 모델링, 튜닝을 했는지, 전처리를 위한 기법을 썼다 (근거에 기반한 스토리라인을 보여주는 형식)
  2. 덴드로 그램 기반 군집화 접근 방식은 매우 좋지만, 피처를 너무 많이 잘라내, 과도하게 줄어든 피처로 모델의 표현력(차원 경계면)이 사라짐. 따라서, 임계값(cut-off/거리 임계값)을 낮춰서 군집을 더 촘촘하게 나누고, 군집 수를 최소 50개까지 늘려서 성능(스코어)을 비교해볼 것.

2-1. 과적합 잡으려고 컬럼을 줄인건데 컬럼을 늘림으로서 과적합을 감수할 이유로는 뭐가있을까요?

  -> **모델의 차원 경계면이나 표현력이 없어진다. 군집의 밀집도를 결정할 수 있는 입계값이 있는데**

       **그것을 좀더 촘촘히 잘라봐야할것**이다, 피처 압축 시 PCA(주성분 분석) 기반의 압축 방식을 적용해

       볼 것을 권장함.
  1. 현업에서는 기업 간 보안 조약으로 인해 비식별 칼럼이 없으며 전면 공개되므로,
  2. 통계로 추측하던지, 차원축소 위주로 접근해야 함.

💡 느낀점

성능 숫자가 잘 나왔다고 안심하면 안 된다. 0.799라는 숫자는 코드가 틀리지 않았어도 "무엇을 재는지"가 틀리면 의미가 없었다.
seed를 고정하는 것이 재현성엔 좋지만, 서로 다른 단계에서 같은 seed를 재사용하면 오히려 누수를 숨길 수 있다는 걸 처음 알았다. 이론적으로 그럴듯한 방법(Union)"과 "통계적으로 검증된 방법(Boruta)"은 다르다. 새롭게 구성한 파이프라인을 바탕으로 피처선택 과정을 거쳐 높은 성적의 모델을 구성하는 것이 목표이다.