2등을 하게 되어서 솔루션을 남깁니다. 저는 베이스라인이 XGBoost였지만, 칼럼의 수가 굉장히 많다는 것을 알고 비선형 문제로 해결하고 싶어 NN으로 해결하였습니다. 각 선형 레이어를 지나면서 relu 활성화함수를 이용하고,dropout을 이용해서 오버피팅을 방지했습니다loss는 크로스엔트로피를 사용하고, 옵티마이저는 아담을 사용했습니다. 비교적 쉬운 Task라고 생각하고, 칼럼의 수가 굉장히 많은데 이를 잘 반영하기 위해서 어떤 전략을 써야할 지 고민해볼만한 문제라고 생각합니다.
모델은 기존의 베이스라인에서 제공한 XGBoost를 사용하였습니다. 하이퍼파라미터만 조정을 하였습니다. model = XGBClassifier( learning_rate=0.05, # 학습률 n_estimators=10000, # 부스팅 라운드 수 max_depth=8, # 트리의 최대 깊이 min_child_weight=0.4, # 최소 자식 가중치 gamma=0, # 노드 분할을 위한 최소 손실 감소량 eval_metric='mlogloss' # 다중 클래스 분류의 경우 'mlogloss' 사용더 쉽게, 깊게 트리를 생성 할 수 있도록 설정하여 더 많은 정보를 학습할 수 있게 조정했습니다.
모델 아키텍처태스크 베이스라인에서 제공된 XGBoost 모델을 사용하였습니다.하이퍼파라미터 튜닝GridSearchCV: 모델의 성능을 최적화하기 위해 GridSearchCV를 사용하여 n_estimators, max_depth, learning_rate 의 파라미터에 대한 최적의 조합을 찾습니다. 이 방법은 주어진 파라미터 그리드 내에서 모든 조합을 시도하여 가장 높은 검증 정확도를 갖는 파라미터 조합을 찾습니다.- n_estimators: 부스팅 단계의 수로, 아래 코드에서는 100, 300, 500로 설정해주었습니다.- max_depth: 각 트리의 최대 깊이로, 3, 5, 7로 설정해주었습니다.- learning_rate: 학습률로, 각 부스팅 단계에서 학습률을 얼마나 조정할지 결정하는 값입니다. 여기서는 0.05, 0.1, 0.2를 설정해주었습니다. 데이터 전처리정규화: StandardScaler를 사용하여 데이터를 정규화합니다.소감하이퍼파라미터 튜닝을 여러 번 시도 한 결과 n_estimators가 100일때, max_depth가 3일 때 가장 좋은 성능을 보였던 것으로 기억됩니다. 데이터 정규화를 해주었을 때 학습 속도가 더 빨라서 다양한 파라미터 값으로 실험해볼 수 있었습니다.