DACON
DACON

신용카드 사용자 연체 예측 AI 경진대회

Simple Baseline LGBM - LB 0.72728

최정명 팔로워 32 팔로잉 22
2021.04.05 16:35 2,833 조회 language
41
comments 21
2
4

안녕하세요.

오랜만에 정형데이터 대회네요!

LGBM 모델을 통해 예측하는 baseline 을 만들어 보았습니다.

작업은 아주 간단히 구성했습니다.

라이브러리 불러오기 - 데이터 불러오기 - 데이터 전처리 - 모델 훈련 - 예측

가장 기본적인 단계들로만 구성을 하였고 전처리 단계에서도 모델에 넣을 수 있는 형태로 만드는 전처리만 작업하였습니다.

EDA를 통한 feature engineering, model parameter tuning 등을 통해서 점수를 향상 시킬 수 있을 것 같습니다.

좋은 아이디어가 좋은 점수를 낼것 같네요ㅎㅎ 

첫 시작에 조금이라도 도움이 되었으면 좋겠습니다.

코드
최정명
2021.04.05 16:37

학습과정에서 validation score와 제출한 test score 를 보니 test 데이터와 train 데이터 분포가 큰 차이가 나진 않는것 같네요 ! 

최정명
2021.04.05 16:41


single model (1fold) 제출시  0.7429220107
5 fold soft ensemble 시  0.72728

5-fold로 만든 모델을 앙상블하여 0.0156420107 점 정도 올라가네요.

이산
2021.04.05 16:56

코드 공유 감사합니다!

팝팝
2021.04.05 18:24

베이스라인 감사합니다.  print(f'===================================={fold+1}============================================')
를 사용하니 결과물을 더 깔끔하게 확인할 수 있네요!!

최정명
2021.04.05 19:25

감사합니다!
구분선이 있으면 보기 좋은것 같네요 ㅎㅎ 

감귤맨
2021.04.05 18:24

하루만에 정말 좋은 코드를 만들어 주셨네요! 코드공유 감사합니다!

DACON.Dobby
2021.04.05 18:37

깔끔한 코드 감사합니다.

Saturday.K
2021.04.06 01:43

보기 편하게 정리해주셔서 많은 도움이 되었습니다. 감사합니다.

SeongHun HAM
2021.04.07 08:52

좋은 코드 감사합니다!

하르딘
2021.04.22 11:48

코드 공유 감사합니다!
 혹시 fit하시기 전에 따로  logloss를 손실함수로 지정해 주신 건가요?
[100] training's multi_logloss: 0.649825 valid_1's multi_logloss: 0.754342

이런 출력이 어떻게 나오는지 궁금합니다!

최정명
2021.04.22 14:34

안녕하세요.

LightGBM 기본값 사용하면 알아서 y값을 판단하고 binary_logloss 혹은 multi_logloss로 해주는것 같더라고요. 그런데 지금 LightGBM 문서에서 parameters default 값들을 보니까 metric은 비어있는것 같네요.

정확하게 명시하여 훈련하고 싶으면 해당 대회 문제가 0,1,2 로 target이 3개니까 metric='multi_logloss'를 파라미터값으로 LightGBM 을 선언해주면 될 것 같습니다. 그럼 출력도 나올거예요.


하르딘
2021.04.22 15:19

아 그렇군요!
감사합니다 ㅎㅎ

미래웅
2021.04.22 15:23

좋은 코드 감사합니다! 혹시 "predict_proba를 사용하여 예측한 것을 5-fold 더하여 평균내어 앙상블." 여기서 5-fold 더하여 평균내어 앙상블이라는 말이 어떤값을 더한거죠....? 그리고 주석처리된 # 0.7272812는 어떻게 나온건지 알 수 있을까요? 

최정명
2021.04.22 15:29

Training 부분을 보시면 총 5개의 fold로 분리 한 후 각 fold마다 훈련을 하기 때문에 5개의 모델이 만들어집니다.

각 fold마다 다른 분포의 train, valid를 사용하여 학습시킨 5개의 모델로 test dataset을 추론합니다.

5개의 모델들은 다른 분포의 학습데이터를 사용했기 때문에 예측 결과가 차이가 있습니다.

5개의 예측 결과의 평균을 내면 조금 더 robust한 결과물을 얻을 수가 있습니다.

predict_proba를 사용한 이유는 모델이 예측한 각 class의 확률 값을 얻기 위함입니다. 그냥 predict를 사용하여 반환받으면 class의 확률중 큰값의 인덱스 값이 나오기 때문에 각 class의 확률을 얻기위해 predict_proba를 사용했습니다. 그리고 해당 대회 성능평가는 log loss 로 이루어지기 때문에 class의 확률값을 제출해야합니다.

주석 처리된 0.7272812는 해당 코드를 그대로 실행하고 제출했을 때 나온 성능입니다.

미래웅
2021.04.22 16:06

친절한 답변 정말 감사합니다!

그 전 답변에 대해서는 다 이해가 됐습니다만.. "주석 처리된 0.7272812는 해당 코드를 그대로 실행하고 제출했을 때 나온 성능입니다."  라는 말이 잘 이해가 안가네요ㅠ 

여기서 말한 성능은 validation set을 통해 측정한 성능인건가요... ?

최정명
2021.04.22 16:09

validation의 성능은 

데이콘 시스템에 제출한 성능으로 test set에 대한 성능입니다.
public leader board 성능을 의미합니다.

validation set의 성능은

fold1[307] training's multi_logloss: 0.499573 valid_1's multi_logloss: 0.731416
fold2[330] training's multi_logloss: 0.480923 valid_1's multi_logloss: 0.747248
fold3[300] training's multi_logloss: 0.497577 valid_1's multi_logloss: 0.742915
fold4[256] training's multi_logloss: 0.525232 valid_1's multi_logloss: 0.735804
fold4[289] training's multi_logloss: 0.50667 valid_1's multi_logloss: 0.735772

해당 출력물들에서 valid_1's multi_logloss의 값들입니다.

미래웅
2021.04.22 16:34

아하 감사합니다!!

서정민
2021.05.01 20:20

코드 공유 감사합니다!
혹시 각 fold에서 출력되는 
fold1[307] training's multi_logloss: 0.499573 valid_1's multi_logloss: 0.731416
fold2[330] training's multi_logloss: 0.480923 valid_1's multi_logloss: 0.747248
fold3[300] training's multi_logloss: 0.497577 valid_1's multi_logloss: 0.742915
fold4[256] training's multi_logloss: 0.525232 valid_1's multi_logloss: 0.735804
fold4[289] training's multi_logloss: 0.50667 valid_1's multi_logloss: 0.735772
에서 최소인 0.735772를 코드 내에서 얻을 수 있는 방법이 있나요?

최정명
2021.05.03 18:49

안녕하세요.
댓글을 이제 봤네요 ㅠㅠ..
각 폴드의 모델들은 lgb_models 변수에 저장되어 있습니다.

그래서 validation 0.735772 성능을 가지는 모델을 사용하고 싶으면 lgb_models[4] 로 사용하시면 됩니다.

빅픽쳐
2021.05.01 22:50

좋은 코드 공유 감사합니다ㅎㅎ

최정명
2021.05.03 18:49

감사합니다. ^^ 

로그인이 필요합니다
0 / 1000