SW중심대학 공동 AI 경진대회 ❮예선❯

SW중심대학 | 예선 | 심리성향 | AUC

  • moneyIcon 상금 : 총 0만원
  • 770명 마감

 

[KWIC, Private 8위] LGBM + Random Forest + Extra Trees

공동작성자

stroke
2022.08.27 02:26 1,264 조회 language

[KWIC, Private 8위] LGBM + Random Forest + Extra Trees 
이 정도 순위를 예상하지도 못했는데, 팀원들이 다들 잘 따라주고, 의견 내주고, 여러 가지 아이디어를 내줘서 잘 끝낸 것 같습니다.
이번 대회를 통해 여러가지 고민을 할 수 있는 기회여서 너무 좋았습니다. 
다들 너무 고생하셨습니다!

코드
로그인이 필요합니다
0 / 1000
asdfasdfasdfasdf
2022.09.02 17:34

for onehot in onehot_categorical_columns:
    train_data = pd.get_dummies(train_data, columns = [onehot])
    test_data = pd.get_dummies(test_data, columns = [onehot])

위 부분에서 test 데이터셋 전체를 활용해 원 핫 인코딩(pd.get_dummies)를 수행하는 것은 Data Leakage에 해당하는 것 같습니다.

kisooofficial
2022.09.02 22:21

안녕하세요. 의견 잘 들었습니다. 먼저, 데이콘에서 제시한 data leakage는 다음과 같습니다.
- label encoding, one-hot encoding 시 test 데이터 셋 활용
- data scaling 적용 시 test 데이터 셋 활용
- test 데이터 셋의 결측치 처리 시 test 데이터 셋의 통계 값 활용
- 위 예시 외에도 test 데이터 셋이 모델 학습에 활용되는 경우에 Data leakage에 해당됨.

asdf님께서 주신 의견 중 아무래도 첫번째에 해당하는 것 같습니다. 그러나, 제 의견은 문제가 없다고 생각합니다. 우선, train_data에 적용한 get_dummies 방법을 test_data도 동일하게 적용시킨 것이지,  test_data가 포함된 데이터에서 one hot encoding을 한 것이 아닙니다. 따라서, data leakage에 위배되지 않는다고 생각합니다. 실제로 다른 데이콘 대회에서도 one hot encoding을 할 때는 get_dummies를 줄곧 사용해왔습니다.

https://dacon.io/competitions/official/235647/codeshare/1814 (2020년 월간 심리 성향 예측 대회)
https://dacon.io/codeshare/605 (2020년 제주 버스 운행시간 예측)
https://dacon.io/competitions/official/235862/codeshare/4124?page=1&dtype=recent&ptype&fType (2021년 펭귄 몸무게 예측 대회)

이 외에도 get_dummies 기법은 줄곧 다른 사용자들도 사용해왔고, 문제가 없어왔던 방법입니다. 따라서, 저 코드는 data leakage에 해당하지 않는다고 생각합니다.

초밥좋아
2022.09.02 22:42

파생변수는 답이 없다고 생각되어 그냥 모델만 가지고 제출했는데 정말 좋은 아이디어로 짜신 것 같아요. 
 한 가지 궁금한 점이 있다면 저희 팀은 Q 문항이 전체적으로 점수가 5에 가까울수록 nerdiness값이 1에 가까워져서 역변을 하지 않았는데 그냥 두었을 때 보다 역변하였을 때 성능이 더 좋았는지, 어떻게 역변을 해야겠다고 생각하셨는지 궁금해지네요. 

소스코드 잘 보고 배워가요! 

kisooofficial
2022.09.02 23:41

처음 데이터를 받았을 때는, 1부터 20까지 모두 동일한 분포로 점수가 나와서, 이미 역변을 해서 주어진 데이터라고 생각을 했어요. 근데, 역변을 하고 나서 특히나 random forest에서 성능이 많이 좋아졌더라고요. rf뿐만 아니라 다른 모델에서도 좋았던 걸로 기억이 납니다. 마키아벨리즘(Q) 중에서 역변을 해야 하는 문장을 찾은 다음에 6에서 뺐습니다. 잘은 기억 안나지만, 데이콘에서 secret이라고 주어진 문장 중에서 역변을 해야하는 문장이 더 많아서, secret이라고 주어진 문장도 모두 역변을 했던 걸로 기억이 납니다.

john428
2022.09.03 00:05

추가로 덧붙이자면 마키아벨리즘 성향 정도에 따른 nerdiness를 파악하고 파생변수를 추가하고 싶었던 거기 때문에  전체적으로 Q문항이 5에 가까울 수록 nerdiness가 증가하더라도 마키아벨리즘 성향을 파악하는데는 숫자가 클 수록 반대되는 문항은 역변환을 해야 한다고 생각했습니다. 실제로 변환 시 성능 향상도 있었고 기존 Q컬럼들을 파생변수 생성 후 제거하지 않았기 때문에 추가적인 정보로 판단하고 가져갔습니다!

초밥좋아
2022.09.03 22:54

우오 그렇군요. 역변 후 스코어 계산하는 부분까진 생각을 못해보았는데 대단하네요. 답변 감사합니다. 고생하셨습니다!