Skip to content

ddde8/Generate-CTR-Model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

Generate-CTR-Model

for 토스 NEXT ML CHALLENGE : 광고 클릭 예측(CTR) 모델 개발 https://dacon.io/competitions/official/236575/overview/description

image https://colab.research.google.com/drive/1Z6VRiAYuOnaGZmbIGa_6PP4HGiV1Cj93?usp=sharing ==> 교훈: 데이터 확보는 미리미리

**주최측이 공유한 "Sequence LSTM + MLP 기반 CTR 예측 베이스라인"**을 발전시켜서 3일 만에 대회에 출전하려면, 목표는 "완성도 있는 모델 하나 + 성능 향상 시도 + 간단한 서빙 고려"까지 만드는 거야.

아래는 그걸 위해 3일 동안 해야 할 일과 전략을 정리한 로드맵이야.


✅ Day 0: 목표 재정의 (지금)

  • 대회 목적: CTR 예측
  • 주어진 베이스라인: Sequence LSTM + MLP
  • 제한 시간: 3일
  • 목표: 베이스라인 개선 + 모델 제출 가능 수준으로 완성

✅ Day 1: 베이스라인 이해 + 성능 진단

🎯 목표:

  • 베이스라인 코드를 완전히 파악하고
  • 현재 성능(AUC, LogLoss)을 기준으로 삼고
  • 첫 번째 실험을 성공적으로 재현

🔧 해야 할 일:

  1. 베이스라인 실행

    • 로컬/Colab에서 실행 가능한 상태로 정비
    • 학습/평가 로직, 데이터 로더 구조 확인
  2. 피처 종류 확인

    • 범주형: Embedding 사용?
    • 시퀀스 피처: LSTM input
    • 정적 피처: MLP input
  3. 모델 구조 이해

    • Embedding → LSTM → flatten → MLP → output?
    • BatchNorm, Dropout, Activation 등 구성 확인
  4. 기본 성능 측정

    • AUC, LogLoss 출력
    • validation 방법: 시간 기반 split인지 확인
  5. 코드 정비

    • 학습 로직 / 평가 로직 / config 따로 정리
    • config.yaml 또는 args로 실험 관리 가능하게

Day 1 Output:

  • 베이스라인 완전 재현
  • 성능 수치 기록 (AUC XX, LogLoss XX)
  • 실험 구조 파악

✅ Day 2: 모델 개선 + 실험 반복

🎯 목표:

  • 작은 개선을 2~3가지 적용해서 성능 향상
  • 실험을 자동화하거나 기록하는 시스템 도입

🔧 추천 개선 방법 (간단하면서 효과 큰 것 중심)

🔸1) 시퀀스 모델 개선

  • LSTM → GRU (속도 + 성능 비교)
  • Bidirectional LSTM 추가
  • Attention Layer 추가 (성능 향상 가능)

🔸2) 정적 피처 활용 강화

  • Static한 categorical + continuous 피처에 더 깊은 MLP 사용
  • 피처 interaction 추가 (ex. crossed features)

🔸3) 정규화 및 Dropout 추가

  • Dropout → 과적합 방지
  • BatchNorm → 안정적인 학습

🔸4) 학습 전략 개선

  • Learning Rate Scheduler 적용 (StepLR, Cosine Annealing 등)
  • Focal Loss 적용 (클릭 예측이 imbalance한 경우)

🔸5) 하이퍼파라미터 튜닝

  • Embedding dim 크기, LSTM hidden size, MLP layer depth 조정
  • EarlyStopping, batch_size 조정

추천 실험 기록 방법:

  • results/exp1/, results/exp2/ 이런 식으로 로그 및 모델 저장
  • 성능 기록은 CSV 또는 엑셀로 간단하게

Day 2 Output:

  • 실험 2~4개 완료
  • 개선된 모델 하나 확보 (베이스라인 대비 성능 향상 확인)
  • 코드 정리 완료

✅ Day 3: 최종 정리 + 제출 준비

🎯 목표:

  • 가장 잘 나온 모델로 최종 학습
  • 제출 가능한 형태로 마무리
  • 간단한 서빙 아이디어 정리

🔧 해야 할 일

  1. 최종 모델 학습

    • 전체 학습 데이터로 학습
    • 모델 저장 (.pt 또는 .pkl 등)
  2. 추론 코드 정비

    • 테스트용 예측 함수 작성: predict(input_features)
    • 실시간 예측 고려해서 추론 속도 측정 (timeit 사용)
  3. 서빙 준비 (선택)

    • 추론만 가능한 간단한 FastAPI or Flask 서빙 코드 (선택)
    • 모델 로딩 + 추론 + 결과 반환
  4. 모델/실험 요약 작성

    • 어떤 모델 구조인지
    • 어떤 개선을 했는지
    • 성능이 얼마나 향상됐는지
  5. 대회 제출용 코드 정리

    • train.py, predict.py, config.yaml
    • README.md 포함

Day 3 Output:

  • 최종 모델 제출 준비 완료
  • 결과 요약 정리
  • 성능 평가 수치 확보 (e.g., AUC XX.X → XX.X%)

✨ 보너스 팁

  • 📌 LSTM 구조는 과적합 쉽게 발생 → Dropout, EarlyStopping 적극 사용
  • 📌 시퀀스 길이 확인: 너무 길면 잘리는지, 너무 짧으면 정보 부족인지 체크
  • 📌 실험 코드 반복 쉽게 만들기 (config 기반 실험 관리 추천)
  • 📌 성능이 미세하게 차이날 땐 AUC 기준으로 판단

🧠 하루별 요약

날짜 목표 산출물
Day 1 베이스라인 분석 및 실행 초기 성능 재현 + 구조 파악
Day 2 모델 개선 실험 반복 성능 개선 모델 확보
Day 3 최종 모델 학습 & 제출 최종 모델 + 예측 코드 + 제출물 정리

좋아, "3일 안에 출전"이라는 제한된 시간 안에서 우선적으로 실험할 때 성능 개선 가능성이 높고, 구현 난이도는 낮은 것들을 중심으로 정리해줄게.


✅ CTR 예측에서 우선 실험할 가치가 높은 개선 아이디어 Top 5


1. 🎯 LSTM → GRU 변경

  • 왜? GRU는 LSTM보다 파라미터가 적고 학습 속도 빠르며, 비슷하거나 더 좋은 성능을 내는 경우도 많아.
  • 어떻게? nn.LSTMnn.GRU로 교체, 나머지 구조는 동일
  • 기대 효과: 학습 속도 개선 + 과적합 줄이면서 성능 유지/향상 가능
  • 시간 소요: 30분 내 실험 가능

2. 🧩 Embedding 차원 튜닝

  • 왜? Embedding dim이 너무 크면 과적합, 너무 작으면 표현력 부족 보통 embedding_dim = min(50, category_count // 2) 정도로 설정하면 좋아.
  • 어떻게? 8, 16, 32 등 몇 가지 dimension 실험해보기
  • 기대 효과: 더 적절한 차원 설정으로 일반화 성능 향상
  • 시간 소요: 실험 1~2시간 내 가능 (병렬 실험하면 빠름)

3. 🔍 Dropout 추가 및 조정

  • 왜? 베이스라인은 LSTM + MLP 구조라 과적합 쉽게 발생 Dropout은 가장 쉬운 regularization 방법

  • 어떻게?

    • LSTM 뒤 → Dropout(p=0.2~0.5)
    • MLP 각 레이어 사이에도 추가
  • 기대 효과: 과적합 방지 → validation 성능 개선

  • 시간 소요: 1~2시간 내 적용 + 실험 가능


4. 🧠 Sequence Attention Layer 추가

  • 왜? 시퀀스에서 모든 step이 중요한 건 아님 → Attention으로 가중치 학습 최근 CTR 논문들 (DIN, DIEN 등)에서도 Attention 사용 많음

  • 어떻게? LSTM 출력 → Attention → Weighted sum → MLP로 입력 아래처럼 간단한 Attention 구현 가능:

    class Attention(nn.Module):
        def __init__(self, input_dim):
            super().__init__()
            self.attn = nn.Linear(input_dim, 1)
    
        def forward(self, x):  # x: [batch, seq_len, dim]
            score = self.attn(x).squeeze(-1)        # [batch, seq_len]
            weight = torch.softmax(score, dim=1)    # attention weights
            context = (x * weight.unsqueeze(-1)).sum(dim=1)  # weighted sum
            return context
  • 기대 효과: 시퀀스 피처의 의미 있는 step 강조 → CTR 예측 향상

  • 시간 소요: 1~3시간 내 구현 가능


5. ⚙️ 학습 전략 개선: EarlyStopping + Scheduler

  • 왜? 과적합 방지 + 수렴 시간 단축에 매우 효과적

  • 어떻게?

    • EarlyStopping: validation loss 5 epoch 이상 향상 없으면 stop
    • Learning Rate Scheduler: ReduceLROnPlateau, CosineAnnealingLR
  • 기대 효과: 빠른 수렴 + 과적합 방지 → 실험 효율 + 성능 동시 개선

  • 시간 소요: 1시간 내 적용 가능


🔁 그다음 고려해볼 개선 (시간 여유 생기면)

방법 설명 난이도
Focal Loss 클릭 데이터 불균형 대응 ⭐⭐
Sequence 길이 클리핑 너무 긴 시퀀스 → 정보 희석 문제 해결
Feature Interaction 범주형 피처 2~3개 조합 → 새 피처 생성 ⭐⭐
Pre-trained Embedding 사전 학습된 Embedding 사용 (희귀 카테고리 강화) ⭐⭐⭐
MLP 구조 변경 Layer 수 변경, Residual 추가 등 ⭐⭐

🎯 정리: "3일 안에 실험해야 할 1순위 목록"

순위 개선 내용 이유 예상 시간
✅ 1 LSTM → GRU 더 빠르고, 과적합 덜함 ~30분
✅ 2 Embedding dim 튜닝 과소/과대 표현 방지 12시간
✅ 3 Dropout 추가 과적합 방지 ~1시간
✅ 4 Attention 추가 시퀀스 중요 step 강조 23시간
✅ 5 EarlyStopping + Scheduler 안정적 학습 ~1시간

About

for 토스 NEXT ML CHALLENGE : 광고 클릭 예측(CTR) 모델 개발

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors