천체 유형 분류 대회

월간 데이콘 2 | 과학 | 슬론 디지털 천체 관측 빅데이터와 AI로 천체 분류 | LogLoss

  • 상금 : 154만원
  • 907팀
  • 마감
참여

[1등][처음해봐요] LightGBM Dart Single

댓글 21
매달 재밌는 대회 개최해주셔서 감사합니다. 모두 고생하셨습니다! Feature Engineering 1. Magnitude, row별 max, min, max-min, std, sum Feature 추가 2. 모든 magnitude들의 조합(2)으로 diff feature 추가 3. 각 magnitude 별 max-max, min-min, sum-sum 을 구함 4. 정확히 이것이 무엇인지는 모르겠는데 ugriz를 다른 system으로 변환하는 것 같았습니다. (성능 차이 거의 없음) 5. fiberID별 fiberMag mean, (fiber_u,g,r,i,z)/fiberMag_mean 6. 아래 사이트를 읽어보고 icolor, scolor, p1 등 feature 추가 -> https://www.sdss.org/dr16/algorithms/segue_target_selection/#Legacy 7. asinh 변환 8. 위에서 구한 diff feature들의 표준편차 9. 원본 Magnitude들 decomposition 수행하여 Feature 추가 10. Permutation Importance를 사용하여 Feature Selection Modeling 1. LightGBM Single Model이었고 Parameter는 모두 Hyper Optimization으로 찾았습니다. 2. 'boosting_type': 'dart' 로 한것이 효과가 좋았습니다. -> gbdt가 0.3285정도 나왔고 dart는 0.3255, goss는 0.3300 정도 나왔습니다. 3. stratifiedkfold 5fold를 사용했고 stratified에 type을 넣었습니다.
코드
댓글 21개
  • 자카종신자카종신 2020.03.01 03:13

    공유 감사합니다 혹시 asinh변환은 역할이 어떻게 되나요??

    • 처음해봐요처음해봐요 2020.03.01 17:22

      어느정도 feature를 추가한 뒤에 기존 sdss에서 분류를 수행했던 것들을 많이 읽어보았습니다. asinh magnitude를 제대로 구현했는지는 모르겠지만 'to behave reasonably at low signal-to-noise ratio and even at negative values of flux' 이 말이 눈에 들어왔고 기존 flux에서 최대한 많은 파생변수를 만들고 싶었습니다. 이 피쳐를 추가해서 lb가 크게 좋아지지는 않았습니다.

    • 자카종신자카종신 2020.03.02 02:44

      감사합니다!

  • 데이콘_마당쇠데이콘_마당쇠 2020.03.01 11:42

    수고하셨습니다.

  • JunHoLimJunHoLim 2020.03.01 13:37

    공유 감사합니다. Feature Engineering에 공을 많이 들이셨네요!

  • JgleeJglee 2020.03.01 15:17

    Feature Engineering이 중요하다는 걸 배웠네요. LightGBM 말고 딥러닝 모델로 시도해보신적이 있으신가요?

    • 처음해봐요처음해봐요 2020.03.01 17:22

      다른 모델과 ensemble에서 효과를 보지 못해서 대회 마지막쯤에 nn으로 해보려다가 fe에 집중했습니다. catboost는 잘 안되었고, extratree, randomforest, svc, logistic regression 등을 시도해봤을 때 모두 lgbm보다 좋지 않았습니다.

    • JgleeJglee 2020.03.01 17:35

      감사합니다

  • sanheeparksanheepark 2020.03.06 10:05

    안녕하세요, 좋은 공유 감사합니다! 혹시 위의 bad feature를 섞어낼 때, permutation importance를 사용했다 하셨는데 그 부분을 자세하게 들을 수 있을까요?? 변수의 중요함과 중요하지 않음은 어떻게 판단하셨는지 궁금합니다.

    • 처음해봐요처음해봐요 2020.03.06 15:29

      Permutation Importance란 기능을 사용할 수 없을 때 Score(LogLoss, Accuracy 등)가 얼마나 감소하는지를 측정하여 Feature의 영향도를 측정하는 방법입니다.

    • 처음해봐요처음해봐요 2020.03.06 15:29

      각 데이터 세트에서 기능을 제거하고 다시 학습시켜 점수를 확인해야 하는데 이렇게 되면 Feature가 많을 때 계산 비용이 많이 발생합니다. 이러한 것을 해결하고자 전체 데이터로 한번 학습하고 predict시 validation data에서 실험할 feature를 제거하고 제거된 feature 값에 random-noise를 추가하여 학습합니다.

    • 처음해봐요처음해봐요 2020.03.06 15:29

      이렇게 되면 이 피쳐는 더 이상 feature 기능을 하지 않는 것이기 때문에 제거한 것과 마찬가지의 효과를 가지고 이 때 점수가 얼마나 감소하는지 확인하는 방법입니다. (특히 random-noise를 추가하는 가장 간편한 방법은 값을 섞는 것이라고 합니다.)

    • 처음해봐요처음해봐요 2020.03.06 15:30

      eli5 library의 Permutation Importance를 사용하여 학습이 끝난 뒤 get_score_importance에 score계산을 해주는 함수, x, y, iteration, seed값을 넣고 score가 얼마나 감소하는지 return 받습니다.

    • 처음해봐요처음해봐요 2020.03.06 15:30

      이렇게 Permutation Importance가 구해지고 나면 실험을 통해 적절한 Cutoff를 정하여 추후 학습 시 이 피쳐들을 제거합니다. Feature수에 따른 LogLoss 변화를 보면서 어느정도 제거해야 성능이 제일 좋은지 Cutoff 값을 찾아나갑니다. 여기서 Cutoff는 위에서 구한 Permutation Importance의 decrease score값 입니다.

    • 처음해봐요처음해봐요 2020.03.06 15:31

      https://www.kaggle.com/speedwagon/permutation-importance 300자 제한이라 ㅠㅠ 이 커널 참고하시면 좋을 것 같아요~

    • sanheeparksanheepark 2020.03.09 00:00

      자세한 답변 감사드립니다! 위에서 '전체 데이터로 한번 학습하고' 라는건 bad feature든 good feature든 모든 feature를 추가하여 train을 한번 시킨다는 의미인지요?? 제가 이해한 바로는 validation dataset으로 테스트해볼 추가 feature들을 모두 제거하고 그 feature들을 random noise를 섞어 다시 학습시키는 걸로 보이는데.. 왜 두번 학습하는 것인지 궁금합니다.

    • sanheeparksanheepark 2020.03.09 00:00

      위의 실험을 진행하면 feature는 더이상 그 기능을 하지 않는거라 하시는데 그게 무슨 의미인지 직관적으로 잘 와닿지 않습니다ㅠㅠ 시간이 되시면 추가 설명해주시면 감사하겠습니다! 아래 kaggle 커널은 자세히 읽어보겠습니다. 감사합니다.

    • sanheeparksanheepark 2020.03.09 00:01

      아! 어쨌든 permutation importance라는 것을 활용하신게 인상깊습니다! 좋은 방법 소개해주셔서 감사합니다~

  • munangmunang 2020.08.31 18:44

    삭제된 댓글입니다

    • 처음해봐요처음해봐요 2020.08.31 23:57

      정리가 안된 코드이긴 한데 연락할 방법 알려주시면 보내드릴게요

  • TEAM-EDA(김현우)TEAM-EDA(김현우) 2020.10.29 10:11

    멋져요!!

로그인이 필요합니다로그인이 필요합니다
목록으로