CTR(Click-Through Rate) 예측을 위한 앙상블 모델 파이프라인
- 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 환경에서 개발 및 테스트되었습니다. 다른 환경에서는 배치 크기 등의 조정이 필요할 수 있습니다.
Python 3.10 권장 (3.9, 3.11도 호환)
python --version # Python 3.10.x 확인pip install -r requirements.txt자세한 설치 가이드는 INSTALL.md 참조
프로젝트 폴더에 다음 파일 배치:
train.parquet- 학습 데이터test.parquet- 테스트 데이터
# Step 1: CatBoost+Transformer 학습
python train_catboost_transformer.py
# Step 2: xDeepFM+SUAN 학습
python train_xdeepfm_suan.py
# Step 3: 추론 및 앙상블
python inference.py- Transformer: 시퀀스 데이터를 고정 크기 임베딩으로 변환
- CatBoost: 임베딩 + 기본 피처로 최종 예측
- 특징:
- Optuna 자동 하이퍼파라미터 튜닝
- 5-Fold Cross Validation
- GPU 가속 지원
- 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
- 두 모델의 예측값을 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 # 최종 제출 파일
배치 크기를 줄이세요:
BATCH_SIZE = 512 # 1024 → 512
TRANS_BATCH_SIZE = 2048 # 4096 → 2048CPU 모드로 전환:
'task_type': 'CPU' # 'GPU' 대신- Optuna trials 감소:
N_OPTUNA_TRIALS = 10 - Transformer epochs 감소:
TRANS_EPOCHS = 3 - xDeepFM epochs 감소:
EPOCHS = 20
- 앙상블 가중치 튜닝: Validation set으로 최적 비율 탐색
- Optuna trials 증가: 더 나은 하이퍼파라미터 발견
- 데이터 증강: 시퀀스 데이터 augmentation
- 피처 엔지니어링: 새로운 피처 추가
- 스태킹: 메타 모델로 앙상블