월간 데이콘 신용카드 사용자 연체 예측 AI 경진대회

[R] 랜포 baseline 공유 - leakage 문제 해결 (LB-0.702621)

2021.04.13 07:52 4,736 조회 language

R tidymodels를 이용한 대회 베이스라인 코드 입니다~! 좀 더 많은 분들이 R로 대회 참여를 했으면 좋겠습니다! :) 
train, test 묶어서 전처리부분 수정했습니다. 다행히 성능은 똑같이 나오네요 (미세하게 더 좋아졌네요)ㅎㅎ

코드
로그인이 필요합니다
0 / 1000
당쇠
2021.04.13 08:26

수고하셨습니다. R 화이팅. 🌼

슬통이
2021.04.13 08:54

감사합니다~! :)

JDW
2021.04.13 15:26

코드 공유 감사합니다! 유튜브 잘 보고 있어요 

슬통이
2021.04.14 01:19

봐주시니 제가 감사합니다!ㅎㅎ 화이팅 입니다 :)

팝팝
2021.04.13 17:29

tidymodels의 recipe를 사용하면 전처리하기 훨씬 수월하네요! 감사합니다 ㅎㅎ

슬통이
2021.04.14 01:20

ㅎㅎ네 recipe 사용하면 편한 전처리들이 많이 있습니다!ㅎㅎ 튜닝이랑 스택킹도 편하실 거예요~! :)

dodori
2021.04.14 01:28

안녕하세요 좋은 코드 공유 감사합니다! 혹시 recipe단계에서 step_integer()을 왜 하시는지 여쭤봐도 될까요? factor형으로 남겨놓고 모델링을 해야될 것 같은데 제가 놓치는 부분이 있는걸까요.. 감사합니다

슬통이
2021.04.15 14:28

step_integer()는 그냥 factor 변수 레벨에 따라 숫자로 바꿔주는 인코딩을 의미합니다! factor로 되어도 lm() 같은 base 함수들은 무리 없이 처리하지만, tidymodels에서는 숫자형으로 바꿔줘야 에러가 나지 않았던것 같은데, 한번 더블첵크 해보시면 좋을것 같습니다! :)  

dodori
2021.04.18 22:42

답변 정말 감사합니다!

August.S
2021.04.16 20:43

삭제된 댓글입니다

윤기석
2021.04.19 15:01

혹시 데이터 전처리 부분에서 train set와 test set을 합쳐서 centering(mean encoding 같은건가요?) 작업을 해주는데 data leakage 문제는 없을까요?

슬통이
2021.04.20 01:18

train set test set 합치는 테크닉이 캐글에서 많이 보여서 사용하게 되었는데요, data leakage 문제는 생각해보지 못했네요! 질문 감사합니다. 보통 data leakage의 문제가 있다고 한다면 feature 중에서 target variable의 결과값에 대한 정보가 모델을 구축하는 시점 이후에 접근 가능한 것이 섞여있을때 발생한다고 알고 있습니다. 예를 들어 암환자 발생 예측 데이터인데, 키모테라피 여부 가 있다면 data leakage 죠 (키모테라피는 암발생 한 후에 받기 때문). 

코드의 centering은 전체 평균을 빼준 것 입니다. 이것을 계산할 때 test의 정보가 들어가는게 문제가 될텐데, train과 test의 분포가 심하게 차이가 나지 않는다면 leakage 문제는 없을것 같습니다. 실제 data leakage를 걱정하는 이유는 모델이 trainset에 overfitting 되는 것 때문인데요, 다른 대회들에서도 꾸준히 쓰고 있는데, private과 public의 큰 차이는 보지 못했습니다!

윤기석
2021.04.20 01:29

데이콘 주관 대회들은 보통 preprocessing 과정에서도 test set은 전혀 사용해서는 안되어서(예로 text tokenization 작업을 진행 할 경우 test set을 포함하여 같이 토큰화를 진행하면 규칙 위반으로 간주) 전체 평균을 빼준다는 부분에서 오해의 소지가 있을 수도 있기 때문에 문의를 해보아야 정확할 듯 합니다!

슬통이
2021.04.20 01:58

오 그렇군요! 수정해야겠네요!! 답변 감사합니다~!!

슬통이
2021.04.20 01:57

삭제된 댓글입니다

korever
2021.04.21 19:45

R코드 공유 감사합니다. 여러가지로 자극받았습니다.

슬통이
2021.04.22 13:02

봐주셔서 감사합니다! :)

다담
2021.04.27 14:02

좋은 코드 공유 감사드립니다 ! 
오탈인거 같아 재보 드리려 댓글 남겨요 ㅎㅎㅎ 'yrs_employed' 만드는 부분에 'days_employed/356' (356 -> 365) 로 되어 있네용 !   

```
step_mutate(yrs_birth = -ceiling(days_birth/365),
                            yrs_employed = -ceiling(days_employed/356)) # 356 -> 365 
```

슬통이
2021.04.27 23:29

엇! :O 감사합니다.ㅋㅋㅋ 매의 눈이시군요.ㅋㅋㅋ (그만큼 자세히 봐주셔서 너무 감사해요~!!)

슬통이
2021.04.27 23:31

데이콘은 한번 올린 코드 수정이 너무 힘들어서 제 개인 코드에만 업데이트 해놨...ㅋㅋㅋ

jaezzi
2021.04.27 22:11

감사합니다 ~

슬통이
2021.04.27 23:30

봐주셔서 감사합니다! :)