산 넘어 산 개발일지

[ML] [Kaggle Clone] Santander Prediction (1) 본문

머신러닝&딥러닝/Kaggle

[ML] [Kaggle Clone] Santander Prediction (1)

Mountain96 2021. 3. 31. 10:04

Kaggle Competition 주소  : www.kaggle.com/c/santander-customer-transaction-prediction/overview

 

Santander Customer Transaction Prediction

Can you identify who will make a transaction?

www.kaggle.com

Clone할 Kaggle code 출처 : www.kaggle.com/gpreda/santander-eda-and-prediction/notebook

 

Santander EDA and Prediction

Explore and run machine learning code with Kaggle Notebooks | Using data from Santander Customer Transaction Prediction

www.kaggle.com

 

  이번에 시도해볼 머신러닝은 Santander Customer Transaction Prediction이다. 그런데 주어지는 데이터에는 칼럼별로 정확한 이름이 없고, 오직 var_0, var_1, ... 이런 식으로만 주어진다. 즉 각 feature가 어떤 feature인지 모른 채, 온전히 feataure의 영향력을 계산하여 사용해야 하는 것이다.


  사용할 알고리즘

  • StratifiedKFold
    • 한 번에 학습을 하기 보다, K번 접어서 학습을 시킴.
    • 즉 K번에 걸쳐서 랜덤하게 데이터들을 선택하여 그 데이터들로 학습을 한다.
  • Light GBM
    • Gradient Boosting 프레임워크로, Tree 기반 학습 알고리즘
    • leaf-wise여서 트리가 수직적으로 확장됨
      • leaf-wise(수직) vs level-wise(수평)
        • 동일한 leaf를 확장할 때, leaf-wise 알고리즘은 level-wise 알고리즘보다 loss를 보다 많이 줄일 수 있다.
    • 특징
      1. 빠른 속도, 높은 효율
      2. 적은 메모리 사용
      3. 방대한 데이터에 적합
        • 다시 말하면, 적은 데이터에는 부적합
        • overfitting에 민감하기 때문에 많은 데이터셋이 필요하다.
      4. gpu 학습 지원
      5. 결과의 정확도에 초점을 맞춤

Clone Kaggle

1. EDA(Exploratory Data Analysis)

Feature에 대한 특정한 이름이 없어서, 데이터가 어떻게 생겼는지만 관찰하고 넘어간다.

이를 통해, train, test 셋의 데이터들을 검토한다.

 

Train

  ID_code

  target

  200개의 수치값들(var_0 ~ var_199)

 

Test

  ID_code

  200개의 수치값들(var_0 ~ var_199)


2. Missing value 확인 및 대체

기존에 missing value들을 확인하던 방법과 조금 다른 방법을 사용하였다.

 

기존

train_df.isnull().sum().any()
test_df.isnull().sum().any()

새로운 방법

 

즉, 각 feature별로 null(NaN)값들의 총 합과 비율, 그리고 데이터 타입을 한번에 볼 수 있도록 정리했다.

이후, train 셋과 test 셋의 mean, std, min, max 등을 살펴본다.

 

 

이를 통해 알 수 있는 점

  1. std는 train, test에서 모두 상대적으로 높다.
  2. min, max, mean, std 값들은 train과 test를 비교했을 때 크게 다르지 않다.
  3. mean은 feature마다 값이 많이 다르다. 즉 넓게 분포되어 있다.

3. Feature 관측

데이터가 너무 많으므로, 16개의 Feature들에 대해서만 관측을 한다.

 

또한, target 칼럼에 대해서도 관측을 한다.

 

 

target은 0과 1이 불균형하게 분포해 있음을 알 수 있다.

 

train 셋에서 target에 따른 밀집 분포를 보자.

 

 

대체로 target 값이 0과 1일 때의 차이가 미미하다.

그러나 몇몇 feature들의 경우 그 차이가 확연히 드러난다. (var_0, var_1, var_2, ...)

특히, var_2, var-13, var_26같은 경우는 bivariate distribution(결합확률분포)처럼 보이기도 한다.

 

이제 train과 test셋에서의 target이 아닌 feature들의 밀집도를 확인해보자.

 

 

그래프를 보면 거의 완벽할 정도로 train 셋과 test 셋이 겹친다.

이를 통해, test와 train셋은 상당히 비슷하다는 것을 알 수 있다.

 

 

 

Comments