Data/Data Science

[캐글 메달리스트가 알려주는 캐글 노하우] 2장 Instant Gratification 정리

liz in data 2025. 3. 2. 10:23

현재 <캐글 메달리스트가 알려주는 캐글 노하우>를 가지고 스터디를 하고 있어 매 장 정리해보고자 한다. 

1. Keyword

이진 분류, AUC, 스태킹, GMM, Hist Feature

2. Instant Gratification 개요

Competition Summary

주제(대회 목적)  Code competition 피드백
대회 유형 featured
제출 방식 code competition
문제 유형 이진 분류(Binary Classification)
데이터 타입 정형(Tabluar)
평가 지표 AUC(Area Under the Curve)
    • 캐글이 클라우드 환경을 도입하며, 다양한 방식의 컴페티션 시도
    • 이 중 ‘2단계 컴페티션(Two-Stage Competition)’은 컴페티션 테스트 검증 과정을 두 단계로 나누어, 첫 단계에서는 공개(public) 테스트 셋, 다음 단계에서는 비공개(private) 테스트 셋으로 점수를 계산해 순위를 결정하는 방식
    • 2단계 컴페티션 방식의 문제
      • 검증 시 캐글의 과도한 리소스 사용
      • 검증 완료 이전에 참가자들이 결과를 확인할 수 없음
      • 참가자들이 제출한 코드가 제대로 작동하지 않음
      • 과적합으로 인한 일반화 문제
    • 문제를 해결하고자, 캐글에서는 현재 code competition 방식의 기반인 ‘Synchronous Kernel-Only Competition’ 방식 제시  
      • 컴페티션 기간 중에 노트북을 제출하면 공개 테스트 셋과 비공개 테스트 셋에 대해 모두 실시간으로 코드를 실행해서 점수를 계산하고, 대회 중에는 공개 테스트 셋 결과만 참가자에게 공개
      • 이 방식을 다른 컴페티션에 도입하기 전, 캐글러들의 피드백 구하고자 해당 컴피티션 개최
      • 평가 지표 → AUC대회 목적
  • 평가 지표 → AUC
    • AUC를 이해하려면 ROC 곡선을 이해해야 함
    • ROC 곡선: 분류 모델이 얼마나 잘 예측하는지 보여주는 그래프
      • x축은 False Positive Rate, y축은 True Positive Rate
        • False Positive Rate: 실제 False인 데이터 중 모델이 True라고 예측한 비율(=위양성률)
        • True Positive Rate: 실제 True인 데이터 중 모델이 True라고 예측한 비율 (=진양성률 또는 민감도)
      • ROC 곡선의 각 포인트는 특정 임곗값(모델이 판단하는 기준)에서 분류 모델의 성능을 의미함
      • 하지만, 곡선을 보고 어느 모델이 더 좋다고 판단할 수 없기 때문에 AUC(Area Under the Curve)가 필요한 것
      • AUC는 ROC 곡선의 밑 면적. 예측을 잘 할 수록 곡선이 빨간색 화살표 방향으로 올라가며 1에 가까워지고, 예측을 잘하지 못할 경우 곡선이 회색 화살표 방향으로 이동하며 0.5에 가까워짐

AUC 곡선

  • 데이터셋
    • 훈련 데이터 수: 262,144
    • 공개(public) 테스트 데이터 수: 131,073
    • 열(column) 수: 248
    • 정답 열: Target(1과 0으로 구성되어 있는 이진 분류 문제)
    • 행 이름은 의미를 알 수 없는, ‘-’으로 구분된 텍스트

3. 솔루션 분석

  • 전처리: KernelPCA, Gaussian Mixture Model, Hist 피처 → 사이킷런 StandardScaler 사용해 표준화
  • 1단계로 쓰인 모델: NuSVC, Quadratic Discriminant Analysis, SVC, KNeighborsClassifier, LogisticRegression → 사이킷런 StratifiedKFold 사용하여 교차검증
  • 2단계로 쓰인 모델: 1단계에서 사용한 모델들을 두 가지 방식(Light BGM, MLP Classifier)으로 스태킹하여 앙상블 → 시드 앙상블 사용
  • 책에서는 모든 모델을 설명하지 않고, 틀이 되는 ‘스태킹’과 중요 피처 찾은 과정 중심으로 기술

<스태킹>

  • 스태킹(Stacking): 여러 알고리즘이 예측한 결과를 입력으로 받아 재학습하여 결과를 도출하는 방법
  • 성능이 무조건 좋아지진 않지만 성능이 올라가는 경우가 더러 있기 때문에 미세한 성능차이가 중요한 데이터 해커톤에서 많이 사용됨(특히 기본 모델로 4개 이상을 선택해야 좋은 결과 있을 수 있음)
  • 2단계 모델의 인풋으로는 두 가지 예측값이 들어감(1. 학습 데이터에 대한 예측값, 2 . 테스트 데이터에 대한 예측값), ****각 모델이 만든 예측값을 하나의 feature로 간주해 2단계 모델 학습
    • 학습 데이터에 대한 예측값: 1단계 모델들을 3폴드 교차 검증 통해서 훈련한 후, 1단계 모델이 학습 데이터를 통한 예측값 저장.
    • 테스트 데이터에 대한 예측값: 학습이 끝난 1단계 모델을 가지고 공개된 테스트 데이터에 대해서도 예측을 수행.

(스태킹 성능 올리는 방법)

  • 모델에 들어가는 피처를 다르게 하여 다양성을 추가
  • 같은 모델이더라도 파라미터를 다르게 함
  • 다양한 모델 추가(트리 기반 모델, K-최근접 이웃, 신경망, 선형 모델 등)
  • 2단계 모델의 입력에는 1단계 모델의 예측 값뿐만 아니라 원본 피처의 일부를 추가가능
  • 2단계 모델을 다양하게 시도해보고 여러 모델의 결과를 다시 스태킹하거나 평균 값을 취할 수 있음

<핵심 피쳐 다룬 방식>

‘왜 `wheezy-copper-turtle-magic` 열의 각 데이터마다 모델을 따로 만들어줘야 하는가?’

  • EDA때 확인했던 `wheezy-copper-turtle-magic` 열은 고유값이 512개로 다른 열들과 달리 매우 튀는 것 확인하고, 해당 값에 따라 모델을 따로 나눠줌
  • `wheezy-copper-turtle-magic`의 값별로 target 값이 0일 때, 나머지 열들의 값 분포 확인: -10~10, -2~2 라는 두 가지 패턴으로 나뉨
  • `wheezy-copper-turtle-magic`의 값별로 target 값이 0일 때, 훈련 데이터의 표준편차 확인(해당 피쳐의 변동성(데이터 분포) 확인하기 위해): 1과 3~4 형태로 분포 → 표준편차 값 2를 기준으로 나눴을 때 정확히 두 그룹으로 분류 가능 → 2보다 작은 열만 남기고 알고리즘 수행, 2보다 큰 열 남기고 알고리즘 수행 → 2보다 큰 피처가 유용한 피처
  • `wheezy-copper-turtle-magic`의 그룹 내 표준편차가 2보다 큰 피처가 다른 그룹내 유용한 피처와 얼마나 겹치는지 확인 → 그룹마다 유용한 피처가 서로 잘 겹치지 않기때문에 결론적으로 그룹별로 따로 모델을 학습하는 것의 필요성 확인

<전처리에 사용된 모델>

  • GMM(Gaussian Mixture Model): 여러 개의 정규 분포를 조합해서 데이터를 설명하는 모델
    • 즉, 각 정규분포(클러스터)의 모수(평균, 분산) 등을 추정해야 함 → EM 알고리즘 사용
      • 혼합계수: 각 클러스터의 비율
      • 평균: 각 클러스터 중심
      • 공분산 행렬: 클러스터의 모양과 크기
    • EM 알고리즘
      • '데이터가 어느 클러스터에서 나왔는지 확률적으로 추정하고, 이를 반복적으로 최적화 하는 과정'
      • 숨겨진 변수가 있는 확률 모델에서 최적의 모수를 추정하는 알고리즘
      • GMM처럼 데이터가 여러 개의 정규 분포로 혼합된 경우, 각 데이터가 어느 클러스터에 속할 확률을 모르는 상황에서 사용됨
      • E step: 현재 모수를 사용해서 각 데이터가 어느 클러스터에 속할 확률 계산
      • M step: E step 결과 사용해 혼합계수, 평균, 공분산(모수들) 계산
      • E, M step 반복하고, 모수가 더 이상 크게 변하지 않을 때 수렴한다 생각하고 stop
      • k-means는 데이터가 딱 하나의 클러스터에 속하지만, EM은 각 데이터가 여러 클러스터에 속할 확률 계산함/ Kmeans는 원형 클러스터도 가능하지만, GMM은 타원형 클러스터도 학습 가능/GMM은 보장된 글로벌 최적해가 아닌 지역 최적해에 수렴할 수도 있음
  • Hist Feature: 히스토그램 기반의 특징을 만드는 기법
    • 대표적으로 이미지 처리(ex. 이미지 색상정보 벡터 표현), 시계열 분석(ex. 특정 주식의 일별 수익률 히스토그램 변환해 패턴 분석), ML 피처 엔지니어링에 사용 → 스터디 3장(fraud detection)에 사용가능
    • 빈도 수가 정답 값과 연관될 때 좋은 성능 보임
      • 예) 사기 탐지에서 거래 금액 분포 시나리오
        • 사기와 정상 거래를 구분하는 머신러닝 모델 만든다 가정
        • 거래 금액을 보면, 정상거래는 평균적으로 10~500달러 범위에서 분포
        • 사기 거래는 극단적으로 높은 금액(5000달러 이상)에서 빈도가 많음
        • 모델이 학습할 수 있는 패턴거래 ID 거래 금액 히스토그램(구간별 개수) 사기 여부(target) 
          1 [5,10,0,0,0] 0(정상)
          2 [0,2,8,3,5] 1(사기. 극단적으로 높은 값에 큰 값의 빈도수가 몰려있으므로)

4. 스텝별 정리사항 

<EDA>

  • EDA는 분석 맨 초기 단계에만 수행하는 것이 아니라 대회 내내 반복해야함
  • 이진 분류의 경우 각 항목마다 정답 값 0,1에 대하여 히스토그램 그려보며 정답 값에 따라 분포 달라지는 것 있는지 기본적으로 확인
  • 캐글에서는 데이터가 어떻게 만들어졌고, 공개 및 비공개 데이터가 어떻게 분포되어있는지 아는 것이 중요 → 이것을 알면 역으로 데이터를 생성(ex.make_classification)해서 교차 검증(Cross Validation)하는 전략 세울 수 있음
    • 본문의 글쓴이는 코드 컴페티션에서 숨겨진 테스트 데이터를 추정하는 것은 바람직하지 못하며 제출횟수도 소모되기 때문에 추천하진 않는다고 함(하나를 제출하기 위해 많은 실험을 해야한다는 점을 알려주고 싶었다함)

(과정)

  1. 데이터가 어떤 형식으로 이루어졌는지 확인: 대부분의 데이터와 다른 타입 있다면 이 안에서 어떤 정보를 추출할 수 있는지 나열(본문 EDA에서 wheezy-copper-turtle-magic이라는 열 분석하는 과정 참고)
  2. 정답 값의 비율 확인: 정답의 불균형 여부를 확인한 뒤 이 점 고려해 모델 구성(value_counts() 기능 사용)
  3. 정답 값에 누출 없는지 확인
    • 누출(leak): 훈련 데이터가 잘 섞여 있는지, 혹시 어느 부분에서 정답 값(1)이 많이 분포 하는 것은 아닌지 확인하는 것 → 정답 값 누적합 그래프 그려서 살펴보기
  4. NULL 값 확인: isnull 과 sum 사용해 파악 가능. 알고리즘에 따라 NULL값을 필수로 채워야 할 수도 → 생각 없이 값 채우기가 아니라, 이 NULL이 왜 생성되었고, 어떤 의미인지 먼저 파악
  5. 범주형 변수와 수치형 변수 나누어 생각
  6. 피처는 정답 값과 연관 지어 생각하는 것이 좋음: 특정 범주형 변수에 정답 값의 분포가 몰려 있거나, 수치형 변수의 분포를 살펴봤을 때 정답 값별로 분포가 다르면 좋은 변수가 될 가능성이 큼

<모델링>

  • 영향력이 크다고 판단되는 카테고리 변수를 별도 모델링하는 방법 존재(특히 이 사례처럼 데이터 생성 집합의 키 값같은 피쳐라면, 하는 것이 합리적(변수 자체가 고유한 패턴을 담고 있고, 다른 변수와 독립적으로 분석해서 모델이 더 정교해질 수 있으며, 고유한 값이 많아서 일반적인 모델이 잘 활용하기 어려울 수 있음))
  • 모델의 파라미터 찾는데 도움 주는 라이브러리: Hyperopt
  • 모델 다 만들고 모델 간 상관관계 확인 필요: 상관관계가 낮을수록 모델이 유사하지 않음 = 앙상블 시 점수가 향상될 가능성이 큼(ex. 트리 계열 모델과 딥러닝 기반 모델을 섞을 때 성능 많이 향상됨)
  • 모델 다 만들고 교차검증 시에, 모델이 검증 점수가 낮다고 해서 버리는 것이 아니라 어느 정도 점수를 만족하면 다양성을 추가하기 위해 해당 모델 사용할 수 있음(본문의 경우 96~97% 통과시킴)

<ETC>

  • 대회가 진행되는 도중에 계속 디스커션과 노트북 모니터링하고 정리
  • 대회에 참가할 때 단순히 점수를 올리기 위해 고도화된 모델을 돌린다는 생각보다는
    • 회사나 기관에서 AI를 활용한 문제를 어떻게 정리했는지
    • 문제를 풀기 위해 어떤 데이터를 수집했고 어떻게 구성했는지
    • 다양한 AI모델을 어떤 방식으로 적용하는지
    등을 보며 임하자!