관리 메뉴

TEAM EDA

[빅콘테스트2019] 모델링 본문

EDA Project/빅콘테스트

[빅콘테스트2019] 모델링

김현우 2019. 9. 24. 15:14

[빅콘테스트2019] 데이터탐색을 토대로 얻은 아이디어를 통해서 모델링을 한 과정입니다. 


1. 전처리 

[빅콘테스트2019] 데이터탐색에서 확인한 내용을 토대로 전처리를 한 부분은 아래와 같습니다. 

 

  • Train에만 존재하는 이벤트의 영향을 줄이기. 

  • 통신오류로 인해 낚시시간 > 플레이시간 혹은 30레벨 미만인데 낚시시간이 있는 경우 조정. 

  • Train과 Test의 플레이타임 등 스케일이 다른 것을 조정하기 위해서 파일별로 Normalization. 

2. 28일의 정보를 1주차, 2주차, 3주차, 4주차의 평균으로 계산 

 

기존의 데이터는 1일부터 28일까지 제공되었고, 이를 그대로 학습하게 될 경우 유저별로 다른 접속패턴에 의해서 모델이 안좋을 수 있습니다. 예를 들어서, 직장인의 경우 주말에만 접속할 가능성이 높고 학생의 경우 매일 접속할 가능성이 높습니다. 하지만 모델의 경우 직장인과 학생이라는 특성을 잘 분류하지 못하기 때문에, 유저별로 28일을 Aggregation해서 사용하든지, 주차별로 Aggregation해서 사용하였습니다. 

 

3. 피쳐엔지니어링 

 

  • groupby(유저)을 통해서 각각의 변수들의 통계값(min, mean, std, max, median, etc)

  • 주차별 통계값의 기울기. (ex. 1주차 대비 4주차의 평균 플레이 시간)

  • 거래이상행동  : 아이템을 팔기만 하는 행위여부,  

4. 모델링 

 

  • 가중치 : 레벨의 맥스값을 통해 분류한 초보, 중수, 고수에서 중, 고수를 더 잘 맞추도록 가중치 부여.

  • 현질 여부 및 생존 여부 예측 : 회귀를 통해서 얼만큼 현질을 할지, 얼만큼 생존을 할지 예측하는게 아니라 분류문제처럼 현질을 할지 생존을 할지를 가능성으로 활용. 

  • 서버를 분리해서 학습 : 서버별로 가지는 특성이 매우 달라서 서버별로 따로 학습하도록 설정. 

  • LightGBM을 활용하여 Stratified Kfold 사용. 

 

5. 결과해석 

 

survival_time_x : 실제 값 / survival_time_y : 예측 값

 

  • 문제1. survival_time이 1인데 40이상으로 예측한 값이 매우 많음.

  • 문제2. 변수중요도가 4주차가 아니라 3주차, 1주차를 가지는등의 문제가 있었음. 

    • 최신성이 반영이 안됨. 

    • 1주차에 플레이를 아예 안하고 4주차에 들어온 신규유저들에 대해 예측을 잘 못함. 

6. 모델링 수정 

위에서 확인한 내용을 토대로 몇가지 피쳐를 수정하였음.

 

  • 문제1에서 확인한 내용을 토대로 데이터를 살펴본 결과 이들은 플레이타임은 많지만 모두 사냥을 하지 않고 개인 상점이나 아이템을 팔기, 친목등의 행위만을 하는 것으로 확인. 이러한 애들을 잘 분류하기 위해 playtime 대비 사냥, 낚시시간, 개인상점시간 등으로 변수를 새로 만듬.

  • 문제2에서 확인한 내용을 토대로  신규유저와 기존유저를 분리해서 학습, 피쳐로 활용, 플레이내역의 연속성등을 변수로 여러 시도를 해봄. 

 

'EDA Project > 빅콘테스트 ' 카테고리의 다른 글

[빅콘테스트 2019] 데이터 탐색  (0) 2019.09.22
빅콘테스트 2019  (0) 2019.09.11
빅콘테스트 2018  (0) 2019.09.11