Skip to content

hjkim720/Toss_CTR

Repository files navigation

CatBoost+Transformer & xDeepFM+SUAN Ensemble

CTR(Click-Through Rate) 예측을 위한 앙상블 모델 파이프라인

⚠️ 개발 환경: Google Colab A100 GPU 기준

환경 요구사항

  • GPU: NVIDIA A100 (40GB) 권장
  • Python: 3.10 (3.9-3.11 호환)
  • CUDA: 11.8+
  • RAM: 40GB+ 권장
  • 디스크: 20GB+ 여유 공간

📁 프로젝트 구조

sub/
├── requirements.txt                    # 패키지 의존성
├── INSTALL.md                         # 설치 가이드
├── README.md                          # 프로젝트 설명서
│
├── train_catboost_transformer.py     # CatBoost+Transformer 학습
├── train_xdeepfm_suan.py            # xDeepFM+SUAN 학습
└── inference.py                      # 추론 및 앙상블

🚀 빠른 시작

중요: 모든 코드는 Google Colab A100 GPU 환경에서 개발 및 테스트되었습니다. 다른 환경에서는 배치 크기 등의 조정이 필요할 수 있습니다.

0. Python 버전 확인

Python 3.10 권장 (3.9, 3.11도 호환)

python --version  # Python 3.10.x 확인

1. 환경 설정

pip install -r requirements.txt

자세한 설치 가이드는 INSTALL.md 참조

2. 데이터 준비

프로젝트 폴더에 다음 파일 배치:

  • train.parquet - 학습 데이터
  • test.parquet - 테스트 데이터

3. 실행

# Step 1: CatBoost+Transformer 학습
python train_catboost_transformer.py

# Step 2: xDeepFM+SUAN 학습
python train_xdeepfm_suan.py

# Step 3: 추론 및 앙상블
python inference.py

📊 모델 설명

Model 1: CatBoost + Transformer

  • Transformer: 시퀀스 데이터를 고정 크기 임베딩으로 변환
  • CatBoost: 임베딩 + 기본 피처로 최종 예측
  • 특징:
    • Optuna 자동 하이퍼파라미터 튜닝
    • 5-Fold Cross Validation
    • GPU 가속 지원

Model 2: xDeepFM + SUAN

  • SUAN: Stacked Unified Attention Network (LLM 스타일 아키텍처)
    • RMSNorm, SwiGLU 활성화 함수
    • Multi-head Self-attention
  • CIN: Compressed Interaction Network (피처 교차)
  • DNN: Deep Neural Network (고차원 패턴 학습)
  • 특징:
    • End-to-end 학습
    • Early stopping
    • 가중 BCE Loss

Ensemble

  • 두 모델의 예측값을 1:1 단순 평균
  • 가중치 조정 가능 (ENSEMBLE_WEIGHT)

⚙️ 주요 설정

하이퍼파라미터 수정

train_catboost_transformer.py

# Transformer
D_MODEL = 64              # 임베딩 차원
NHEAD = 4                 # Attention head 수
NUM_LAYERS = 2            # Transformer 레이어 수
TRANS_EPOCHS = 5          # 학습 epoch

# Optuna
N_OPTUNA_TRIALS = 15      # 튜닝 시도 횟수
N_CV_FOLDS = 5            # Cross-validation fold 수

train_xdeepfm_suan.py

BATCH_SIZE = 1024         # 배치 크기
EPOCHS = 30               # 최대 epoch
LEARNING_RATE = 0.001     # 학습률
D_MODEL = 64              # SUAN 임베딩 차원
N_HEADS = 4               # Attention head 수
N_LAYERS = 1              # SUAN 레이어 수

inference.py

ENSEMBLE_WEIGHT = 0.5     # 앙상블 가중치
# 0.5 = 1:1 평균
# 0.6 = CatBoost 60% + xDeepFM 40%
# 0.4 = CatBoost 40% + xDeepFM 60%

📈 평가 지표

Competition Score = 0.5 × AP + 0.5 × (1/(1+WLL))

  • AP: Average Precision
  • WLL: Weighted Log Loss

💾 생성되는 파일

학습 후

├── transformer.pth                   # Transformer 모델
├── catboost.cbm                      # CatBoost 모델
├── model_config.json                 # Transformer 설정
├── train_embeddings.npy              # 학습 임베딩
├── best_catboost_params.json        # 최적 파라미터
├── catboost_training_results.json   # 학습 결과
├── xdeepfm.pth                       # xDeepFM 모델
├── label_encoders.pkl                # 카테고리 인코더
├── scalers.pkl                       # 연속형 스케일러
├── field_dims.pkl                    # 필드 차원
└── num_items.pkl                     # 아이템 수

추론 후

└── submission_ensemble.csv            # 최종 제출 파일

🔧 문제 해결

GPU 메모리 부족

배치 크기를 줄이세요:

BATCH_SIZE = 512          # 1024 → 512
TRANS_BATCH_SIZE = 2048   # 4096 → 2048

CatBoost GPU 오류

CPU 모드로 전환:

'task_type': 'CPU'  # 'GPU' 대신

학습 시간이 너무 김

  • Optuna trials 감소: N_OPTUNA_TRIALS = 10
  • Transformer epochs 감소: TRANS_EPOCHS = 3
  • xDeepFM epochs 감소: EPOCHS = 20

🎯 성능 개선 팁

  1. 앙상블 가중치 튜닝: Validation set으로 최적 비율 탐색
  2. Optuna trials 증가: 더 나은 하이퍼파라미터 발견
  3. 데이터 증강: 시퀀스 데이터 augmentation
  4. 피처 엔지니어링: 새로운 피처 추가
  5. 스태킹: 메타 모델로 앙상블

About

데이콘 토스 CTR 예측 대회 본선 진출

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published