분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
[해커톤] 최종 2위, CAT+XGB+LGBM with stratified kfold
공동작성자
====
안녕하세요 lastdefiance20입니다. 마지막에 순위 대격변이 일어나서 최종 2위로 수상하게 되었습니다.
코드와 ppt는 깃허브에서도 확인하고, 실습이 가능합니다.
https://github.com/lastdefiance20/ML_Competition/tree/main/Dacon/Radar Performance Prediction
====
저희 팀은 초반에 stratify 기법으로 리더보드 최상위권에 있다가, 후반에 1.93 근방에서 더이상 성능이 좀처럼 안올라가서 멈추게 되었습니다.
LG Aimers를 참여하며 자연스럽게 해커톤도 진행했는데 (팀도 수강생으로 이루어졌습니다.), 해커톤 이전 이론 phase에서는 정말 이론적인 강의만 진행해서 저는 좋았지만 다른 참가자들은 이론만 듣고 해커톤으로 투입되니까 조금 당황스러워 하시는 분들도 있고, 실습을 기대하셨던 분들도 있어서 이론 phase에서 실습 병행이 좀 필요한것 같기도 합니다... LG Aimers는 매번 여름 / 겨울방학마다 실행되고 재참여가 가능하다고 하니까 아마 겨울방학에도 비슷한 대회가 열리지 않을까 싶네요.
코드 이야기를 해보자면 성능이 가장 올라갔을때는 label을 이용한 stratify를 적용했을때, cat과 lgbm을 같이 사용했을때 이 두가지 시점에서 큰 성능 향상이 일어났습니다.
LGBM과 XGB는 MultioutputRegressor를 사용했으며, 성능을 올리기 위해, MultioutputRegressor 내부 fit 함수에 early stopping 기능을 추가하고, 2차 평가 진출시 모델 저장이 필요해서 save와 load 내부 함수도 추가했습니다.
Catboost 모델의 경우, multioutput 옵션이 있어서 그냥 사용했으나, 이 옵션은 gpu 학습이 지원되지 않아서 cpu로 학습을 진행하였습니다.
코드의 순서는 다음과 같습니다.
데이터 불러오기 -> 데이터 분석 -> 데이터 전처리 -> 모델 생성 -> 모델 학습 -> 결과 제출
안녕하세요 쥬혁이님! 글 읽어주셔서 감사합니다.
우선 drop 판단의 근거는 Catboost의 select_features함수를 사용했으며, RecursiveByShapValues 알고리즘 방법으로 Shap value기반 가장 중요도가 낮은 Feature들을 골라낸 이후, 골라낸 Feature을 drop하는것이 타당한지 한번 더 분석하고, 최종적으로 drop을 하였습니다. 구체적인 이유는 다음과 같습니다.
X_02, X_45 : select feature 함수에서 제거되었으며, Feature importance가 낮아 Drop함
X_10, X_11 : NAN value가 너무 많아 복구하더라도 좋은 성능을 보이지 못해서 Drop함
X_34~X_37 : 스크류 체결 시 분당 회전수는 select feature 함수에서 제거되었으며, Heatmap에서도 y_value와 유의미한 상관관계를 보이지 못해 Drop함 (분당 회전수를 제거하니 성능이 올라감, 관련 없는 무의미한 데이터였는듯)
잘 봤어요. 많이 배우고 갑니다. 감사합니다.
연습벌레님 도움이 되었다니 다행이네요! 읽어주셔서 감사합니다.
잘봤습니다! 혹시 별도의 하이퍼 파라미터 튜닝을 하셨나요?
안녕하세요 kordingkorgi님! 하이퍼파라미터 튜닝은 모델에 적혀있는 파라미터만 optuna를 통해서 튜닝했습니다.
그닥 튜닝을 좋아하지는 않아서 튜닝을 할수있는 파라미터는 더욱 많았지만, 최소한의 파라미터만 선택해서 오버피팅을 방지했습니다.
진짜 많은 도움 됐습니다! 감사합니다
멋있습니다...!
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
잘 봤습니다 ["X_02", "X_10","X_11", "X_34", "X_35", "X_36", "X_37","X_45"] 을 드랍하신 이유는 뭔가요?