고영민mandu05.com

둘러보기

  • 홈
  • 글
  • 프로젝트
  • 지식 그래프
  • 이력서
본문으로 건너뛰기
  1. 고영민
  2. /
  3. 글
고영민/글
© 2023-2026 Youngmin. All rights reserved.
rhdudals0505@naver.comGitHubLinkedIn
이 사이트는 Next.js로 만들었습니다.갱신 2026.09.26
글/프로젝트 · 해커톤 · 대회 · ML · 데이터 대회

LG Aimers 5기 회고: Stacking 앙상블과 SMOTE-ENN으로 풀어본 제품 이상 여부 판별

2024-10-25·3분 읽기
Machine LearningData ScienceAnomaly DetectionPythonEnsemble

올여름 LG Aimers 5기 '제품 이상 여부 판별' 대회에 참여했다. 전체 데이터의 1%도 안 되는 이상 제품을 찾아내야 하는, 극심한 클래스 불균형 문제가 핵심이었다. 이 글은 1,400팀 중 상위 5.5%를 달성하기까지의 기술적 결정과 그 과정을 기록한 회고다.

문제 정의 및 접근 전략

평가 지표는 F1-Score였다. 모든 제품을 정상이라고만 해도 정확도가 99%가 나오는 데이터였기 때문이다. Accuracy의 함정을 피하고 소수 클래스(이상 제품) 탐지 성능을 높이는 게 관건이었다. 이를 위해 다음과 같은 파이프라인을 설계했다.

  • 데이터 탐색(EDA) 및 전처리
  • 클래스 불균형 처리 (Sampling)
  • 개별 모델 학습
  • 앙상블을 통한 성능 극대화

핵심 기술과 코드 분석

불균형 데이터 처리: 왜 SMOTE-ENN인가?

단순 Oversampling은 과적합, Undersampling은 정보 손실의 리스크가 있다. SMOTE-ENN은 이 두 방식의 단점을 보완하는 하이브리드 샘플링 기법이라 선택했다.

  • SMOTE (Oversampling): 소수 클래스의 특징을 학습해 유사한 합성 데이터를 생성한다. 모델이 이상 제품 패턴을 학습할 기회를 늘린다.
  • ENN (Undersampling): 다수 클래스 중 클래스 경계의 노이즈 데이터를 제거한다. 모델이 더 명확한 결정 경계를 학습하도록 돕는다.

Ablation 결과: SMOTE만 적용했을 때 대비 SMOTE-ENN 조합에서 Precision +8pp 향상을 확인했다. ENN의 경계 노이즈 제거가 false positive를 줄이는 데 결정적이었다.

이 조합은 F1-Score의 구성요소인 정밀도(Precision)와 재현율(Recall)을 균형 있게 개선하는 데 효과적이었다.

Stacking 앙상블: 예측 결합하기

단일 모델의 한계를 넘기 위해 스태킹(Stacking) 앙상블을 구축했다. 일반적인 Averaging 방식과 달리, 스태킹은 '어떤 모델의 예측을 더 신뢰할지'를 학습하는 메타 모델(Meta-Model)을 사용한다.

  • Base Models (1단계): 그래디언트 부스팅 계열의 LGBM, XGBoost, CatBoost를 사용했다. 세 모델은 리프 중심/레벨 중심 성장, 범주형 변수 처리 등 학습 방식이 서로 달라서 다른 관점의 예측을 생성한다. 이 '다양성'이 앙상블 성능의 핵심이다.
  • Meta-Model (2단계): Base Model들의 예측값을 입력받아 최종 예측을 수행한다. 과적합 방지를 위해 보통 Logistic Regression 같은 단순한 모델을 사용한다.

데이터 분포와 리샘플링

  • 원본 클래스 분포: 정상 약 99,000건, 이상 약 1,000건 (이상 비율 ≈ 1.0%)
  • SMOTE-ENN 적용 후: 정상 약 98,500건, 이상 약 9,980건 (불균형 완화)
  • 검증 설정: Stratified K-Fold, k=5. 메타 모델은 OOF 예측을 입력으로 학습하여 데이터 누수를 방지

결과 및 회고

최종적으로 1,400팀 중 상위 5.5%를 달성했다. 대규모 데이터 전처리부터 하이퍼파라미터 튜닝, 모델 최적화까지 한 사이클을 직접 끝까지 돌려본 점이 가장 컸다.

하지만 간발의 차이로 본선 진출을 놓쳐서 아쉬움이 더 크다. 복기해보니 세 가지가 명확하게 보였다.

  • 피처 엔지니어링의 부재: 주어진 피처를 활용하는 데 급급해서, 변수 간 관계를 분석하고 새로운 피처를 생성하는 데 소홀했다.
  • 실험 관리의 중요성: 다양한 하이퍼파라미터 조합을 시도했지만, 실험 과정을 체계적으로 기록하지 못해 최적 조합을 찾는 데 비효율적인 부분이 있었다.
  • 시간 분배의 실패: 초반 데이터 탐색에 너무 많은 시간을 써서, 후반 모델 튜닝과 앙상블 전략 고도화에 쓸 시간이 부족했다.

피처 엔지니어링을 거의 안 했다는 게 지금 생각해도 아쉽다. 공정·계측 데이터면 변수 간 비율, 구간별 분포 같은 도메인 기반 파생 변수들이 분명히 효과가 있었을 텐데. 다음엔 EDA에 쏟는 시간이랑 피처 생성에 쏟는 시간을 처음부터 분리해서 계획할 것이다.

실험 기록도 문제였다. 뭘 바꿨을 때 점수가 얼마나 올랐는지 노션에 대충 적어뒀는데, 나중에 그때 그 조합이 뭐였더라?를 못 찾아서 같은 실험을 두 번 한 적도 있었다. MLflow든 뭐든 실험 추적은 처음부터 세팅해두는 게 맞다는 걸 그때 배웠다.

마치며

간발의 차로 본선을 못 간 게 진짜 아쉽긴 한데, 솔직히 실력 차이가 있었다. 특히 피처 엔지니어링 깊이가 부족했다는 게 명확해졌으니 다음 대회에선 그 부분부터 다르게 가보려 한다.

← 이전 글 사이드 프로젝트, '작심친구' 개발 다음 글 →Google ML Bootcamp 회고: Gemma-2B로 금융 자문 챗봇 만들기

댓글 불러오는 중…

← 글

목차

  • 문제 정의 및 접근 전략
  • 핵심 기술과 코드 분석
  • 불균형 데이터 처리: 왜 SMOTE-ENN인가?
  • Stacking 앙상블: 예측 결합하기
  • 데이터 분포와 리샘플링
  • 결과 및 회고
  • 마치며