소비자 데이터 기반 소비 예측 AI 해커톤

정형 | NMAE

  • moneyIcon 상금 : 참가시 최소 50 XP, 특별상 데이콘 후드
  • 581명 마감

 

CAT + LGBM + XGB with SKfold (0.17113)

2022.05.06 01:05 2,082 조회 language

안녕하세요 lastdefiance20입니다.

모델 학습에 필요한 최소한의 데이터 전처리 및 target의 범위로 Stratified Kfold & Soft voting한 코드를 올립니다.

순서는 데이터 불러오기 -> 데이터 전처리 -> 모델 생성 및 학습하기 -> 제출하기 순으로 이루어져있습니다.

피드백, 궁금증은 댓글로 남겨주시면 감사하겠습니다.

코드
로그인이 필요합니다
0 / 1000
백남진
2022.05.07 09:47

덕분에 공부할 수 있었습니다. 코드 공유 감사합니다.

Age 컬럼을 생성하는 방법을 저도 마련해보았습니다. age = (Dt_Customer' year) - (year_birth )로 생각해보았는데, 이건 어떻게 생각하시는지요?
2022에서 빼는 것도 생각해보았는데 어떤 게 타당한지 해서 도움을 받으려합니다.

lastdefiance20
2022.05.07 12:12

안녕하세요 분데데분님! Age 컬럼을 생성할때 2022에서 빼든, Dt_Customer'year에서 빼든 여기서는 Tree 모델을 사용하고 있기 때문에 상관없다고 생각합니다. 

예를 들어 2022를 사용할 경우 Age의 범위가 20~80이라고 가정하고, Dt_Customer'year을 2014로 통일해 사용할 경우 Age의 범위가 8 작은 12~72의 범위가 나오게 될 것입니다. 여기에서 모델이 학습을 했다고 했을때, Tree 기반 모델이기 때문에 같은 조건이 주어진다면 2022를 사용했을때 60이상은 왼쪽 노드, 미만은 오른쪽 노드로 보내는 학습된 노드가 있다고 가정하겠습니다. 이 노드는 Dt_Customer'year를 사용하면 52이상은 왼쪽 노드, 미만은 오른쪽 노드로 보내게 된다고 학습하여 똑같은 결과가 나오게 될 것입니다. 

따라서 Age 변수의 범위 자체가 달라지는게 아니기 때문에 특성의 정규화가 필요없는 Tree 모델에서는(변수의 scale에 영향을 받지 않음) 어느 방법을 사용해도 타당하다고 생각합니다.

백남진
2022.05.07 12:57

맞네요, 트리 기반으로 학습하면 무리가 없군요, 감사합니다!

김희영
2022.05.13 16:15

혹시 인코딩을 이렇게 하신 이유 여쭤봐도 될까요? 
저도 Marital_Status 에서 인코딩을 하긴했으나 데이터의 수가 적었던 Alone, YOLO, Absurd만  single로 합쳤거든요. 
어떤 이유로 아래처럼 인코딩 하게되셨는지 궁금합니다!

data['Education'] : label encoding 사용하여 학사->석사->박사 순으로 인코딩
data['Marital_Status'] : one hot encoding 사용하여 결혼 / 싱글 두가지로 인코딩

lastdefiance20
2022.05.13 18:20

결론적으로는 쓸모없는 feature의 가짓수를 줄이고 싶어서 저렇게 인코딩했습니다.

married나 together 모두 [결혼]으로 묶일 수 있고, 나머지인 single, divorced, window, alone, yolo, absurd는 모두 [싱글]이라는 카테고리로 묶을 수 있기 때문에 feature의 가짓수를 늘리지 않고도 one-hot encoding으로 표현되어서 두가지로만 인코딩 하였습니다. 표현만 다르고 같은 범주를 나타낸다고 생각했기 때문입니다.

education 부분은 master, 2n cycle은 석사를 나타내는 다른 말들이고, basic이나 graduation은 둘 모두 학사를 지칭하는거 같아서 같은 그룹으로 묶게 되었습니다. 또한 학사->석사->박사는 순서가 있기 때문에 one-hot encoding을 통해 feature의 개수를 늘리는 대신, label encoding으로 진행하게 되었습니다.

김희영
2022.05.14 09:39

친절한 답변 감사합니다!!! :)

Data is money
2022.05.14 21:56

코드 나눔 감사합니다. 언제나 많은 도움이 되고 있습니다! 

lastdefiance20
2022.05.15 12:54

Data is money님, 언제나 부족한 제 코드 읽어주셔서 감사합니다!