
[12] CatBoost, XGBoost
| 모델 | 파라미터 | 조정값 | 설정 목정 |
| CB | iterations | 1000 | 충분한 반복 학습으로 recall 안정성 확보 |
| learning_rate | 0.1502 | 빠른 학습과 성능 확보를 위한 비교적 높은 학습률 | |
| depth | 7 | 중간 수준 트리 깊이로 비선형 상호작용 포착 | |
| l2_leaf_reg | 9 | 강한 정규화로 과적합 억제 | |
| random_strength | 0.0064 | split 랜덤성 최소화로 예측 안정성 유지 | |
| bagging_temperature | 0.815 | 샘플링 변동성 조절로 generalization 향상 | |
| scale_pos_weight | 93.14 | 극심한 클래스 불균형 보정 (FN 최소화) | |
| cat_features | categorical index | categorical feature 직접 처리 | |
| random_state | 42 | 재현성 확보 |
Stage 1 요약: false negative 최소화, recall 중심 튜닝을 위해 class weight를 강하게 부여, 확률 score S1 생성 전용 filter 역할
| 모델 | 파라미터 | 조정값 | 설정 목적 |
| XGB | n_estimators | 651 | 충분한 tree 수로 복잡한 decision boundary 학습 |
| learning_rate | 0.1132 | 과적합 없이 precision 향상 | |
| max_depth | 9 | 고차 feature interaction 포착 | |
| min_child_weight | 9 | noise 분기 억제로 false positive 감소 | |
| gamma | 0.922 | 보수적 split으로 불필요한 분기 제한 | |
| subsample | 0.825 | 샘플 부분 학습으로 분산 감소 | |
| colsample_bytree | 0.719 | 특정 feature 의존도 완화 | |
| reg_alpha | 0.382 | L1 정규화로 sparsity 유도 | |
| reg_lambda | 2.99e-05 | 약한 L2 정규화로 fine-tuning | |
| scale_pos_weight | 19.44 | Stage 2 데이터 기준 클래스 불균형 보정 | |
| tree_method | hist | 대규모 feature 처리 효율화 | |
| random_state | 42 | 재현성 확보 |
Stage 2 요약: Stage 1 통과 후보만 대상으로 학습, precision 최적화, hard negative 구분을 위해 보수적 분기 조건 적용
| 항목 | 값 | 목적 |
| Stage 1 Threshold | 0.463 | high-recall filtering 기준 |
| Final Score Weight | S₁: 0.4 / S₂: 0.6 | Stage 2 중심의 weighted cascade |
| Final Threshold | 0.957 | 최종 high-confidence candidate 선별 |
Note
CatBoost 기반의 high-recall screening 이후 XGBoost 기반의 precision refinement를 수행하는 two-stage ensemble cascade 구조로 stage 간 score를 연속적으로 전달함으로써 (1) recall 손실 없이 false positive를 효과적으로 제거하며, (2) 실험 가능성과 예측 신뢰도를 동시에 만족하는 후보군을 안정적으로 확보함
| 문제 설명 | solution.py |
| 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다. (1) 준호는 처음에 병사 n명을 가지고 있습니다. (2) 매 라운드마다 enemy[i]마리의 적이 등장합니다. (3) 남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다. 남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이 종료됩니다. (4) 게임에는 무적권이라는 스킬이 있으며, 무적권을 사용하면 병사의 소모없이 한 라운드의 공격을 막을 수 있습니다. (5)무적권은 최대 k번 사용할 수 있습니다. 준호는 무적권을 적절한 시기에 사용하여 최대한 많은 라운드를 진행하고 싶습니다. 준호가 처음 가지고 있는 병사의 수 n, 사용 가능한 무적권의 횟수 k, 매 라운드마다 공격해오는 적의 수가 순서대로 담긴 정수 배열 enemy가 매개변수로 주어집니다. 준호가 몇 라운드까지 막을 수 있는지 return 하도록 solution 함수를 완성해주세요 |
import heapq as hq
def solution(n, k, enemy):
q = enemy[:k]
hq.heapify(q)
for idx in range(k,len(enemy)):
n -= hq.heappushpop(q,enemy[idx])
if n < 0:
return idx
return len(enemy)
|
'내일배움캠프 QAQC 3기 > 최종 프로젝트' 카테고리의 다른 글
| 최종 프로젝트 23일차: <사용자 행동 데이터 분석> (0) | 2026.01.29 |
|---|---|
| 최종 프로젝트 22일차: [13] Hugging Face 기반 대시보드 틀 구축 (0) | 2026.01.28 |
| 최종 프로젝트 20일차: [11] Single-Model Cascade (Modified Framework) (0) | 2026.01.26 |
| 최종 프로젝트 19일차: [10] 피드백 반영과 최종 스토리라인 정리 (0) | 2026.01.23 |
| 최종 프로젝트 18일차: [9] Streamlit 기반 대시보드 틀 구축 (0) | 2026.01.22 |