[ML Study 2022] 2주차

Everafter·2022년 10월 16일
0

ML Study 2022

목록 보기
2/10

PROBLEM

Problem info

competition

Spaceship-titanic (Kaggle)

Theme

Data preprocessing & basic ML

metric

Classification accuracy (AUROC)

Notes

  • Space titanic에 탑승한 예측하는 classification problem입니다
  • Default Titanic 문제보다 missing value는 좀 더 적은 것 같은데, 아예 없지는 않아서 적당한 빈 칸 채우기 과정이 필요합니다
  • 원래 있는 column의 데이터를 기반으로 적당히 기준을 나눠 additional column generation 해 주면 좀 더 나은 결과를 얻을 수 있을 것 같기도 하네요 (이거 말고도 다양한 Feature engineering 기법이 있으니 검색을…)
  • 1주차 때와 마찬가지로 pandas를 활용한 데이터 전처리에 더 신경을 써주시면 될 것 같습니다

refer

Review

  • Kaggle의 유명한 titanic 생존자 예측 문제의 업그레이드 버전. 일전에 kaggle 입문 풀어본 적이 있던 문제였다.
  • 회귀 문제고, 탑승자의 인적 정보와 출발, 도착 행성 등의 비행정보가 주어진다.
  • 결측치가 있어 데이터 전처리에 신경써야 하는 편이다.
  • Numerical column은 mean imputing을 했고 Categorical column은 most frequent value로 impute했다. 그러나 EDA를 해보면 outlier이 의심될 정도로 튀는 값들이 있어 Numeric에 대해선 median을 택하는게 맞았다.
  • 전체 row를 대상으로 mean값 등을 처리하는게 아니라, 적당한 cat feature로 groupby를 하여 처리하는게 더 좋은 imputing이 되었을 것 같다. 이 생각은 아주 나중에 떠올랐다. 이를테면 target encoding에서 target을 다른 feature로 대체하는 느낌이다.
  • Visualization을 하면 튀는 값들 때문에 데이터 분포가 제대로 식별되지 않는 문제가 있어 outlier 처리가 불가피해보였다. 허나 시간이 없어서 시도는 못해봤다. 그러나 모델링 간에는 outlier도 포함해 진행하는게 맞아보였다. (비율이 적지 않고, outlier 그룹의 clustering이 꽤 유의미했기 때문)
  • Categorical column의 cardinality는 다 높지 않은 편이라 one-hot encoding이 적절해보였다. 딱히 priority도 보이지 않았기 때문.
  • Feature selection는 MI(Mutual Information)지수로 threshold 3개정도 두어서 선별해보았다. 이전에 했던 실수가 drop 해야 했던 feature를 포함하여 지수를 계산하니 값이 다르게 나왔단 것이다. 사전에 명백히 불필요한 feature를 모두 drop하고 선별하니 값이 더 명확했다. MI 지수에 대한 이해가 아직 없는데 조만간 공부해야 한다...
  • Model은 무난하게 XGBoost 사용하여 적당히 수동으로 pamameter tuning 진행했다. GridSearchCV를 배웠으나 시간부족으로 써먹진 못했던...
  • 이전에 풀었을때 78.9의 accuracy였는데 80.4 정도로 향상되었다. 데이터 전처리와 feature selection, parameter tuning에서 조금 더 개선이 있었던 효과인 듯 하다.
  • 부대 복귀 일정 때문에 오프라인 스터디에는 참여 못했으나 코드를 보니 스터디원 중 한분이 pycaret이라는 좋은 라이브러리를 소개해 주셨다. (수 많은 모델을 자동으로 때려주는 만능 라이브러리) 스터디의 장점..!
  • 스터디원분들 중에서 내 accuracy가 근소 차이로 2등을 했다. 일전에 한번 풀어봤던게 유효했던 것 같다. 내가 스터디 수준을 따라갈 수 있을까 고민했는데, 자신감을 좀 더 얻게 된 것 같다. 열심히 하자~!

주요 스터디 논의 내용

  • 라이브러리
    • pandas_profiling (두현)
      • 데이터 분포, 통계 등을 html 형태로 요약해서 보여주는 라이브러리
      • import pandas_profiling
    • pycarat (종현)
      • automl tool(https://pycaret.org/)
      • 모델 선택, 하이퍼파라미터 튜닝 등을 자동화
      • baseline 모델 찾을 때 유용
      • 셋팅에 따라 학습 시간이 오래 걸리는 점은 유의
  • EDA
    • 성일 : 수치형 변수 scatter plot, 범주형 변수 count plot 으로 확인 → 상관관계 딱히 볼 수 없었음
    • 힘찬 : VIP vs NonVIP 지출 차이 확인, 지출 0 여부도 컬럼으로 사용
  • 결측 채우기
    • 두현 : value_count 해서 가장 많은 값으로, outlier 탐지해서 특정 수 미만일 때 날리는 방법도
    • 종현 : simple imputer 사용, 수치형 변수 mean 값, 범주형 변수 최빈값으로 대체
    • 힘찬 : simple imputer 사용, median값, 최빈값으로 대체
  • 데이터 전처리
    • 종현 : total_expenditure 로 합친 feature 생성, SMOTE로 imbalance data 처리
    • 성일 : minmax scaler 사용, SelectKBest 활용해 15개 변수만 선택
  • 모델
    • 두현 : xgboost 사용
    • 종현 : catboost 사용 → bagging 했을 때 성능 향상
    • 성일 : gradient boost 사용
    • 힘찬 : 학습에선 lgbm 제출에선 catboost가 성능이 높았음
  • 하이퍼 파라미터 튜닝
    • 두현 : 항목별 GridSearchCV → 시간의 제약 → 적절히 선택
    • 힘찬 : GridSearch 시간이 오래 걸렸음
  • 논의 사항
    • scaling 할 때 train에 fit하고 test에 다시 따로 fit 하는 것은 data leak 우려되며 지양!

STUDY

Chapter

[파이썬 머신러닝 완벽 가이드] - 2장 사이킷런으로 시작하는 머신러닝

Review

  • sklearn의 여러가지 유용한 메서드를 소개한다.

사이킷런 주요 Estimator class

[분류]

  • DecisionTreeClassifier
  • RandomForestClassifier
  • GradientBoostingClassifier
  • GaussianNB
  • SVC

[회귀 구현 클래스]

  • LinearRegression
  • Ridge
  • Lasso
  • RandomForestRegressor
  • GradientBoostingRegressor

사이킷런 주요 모듈

[예제 데이터]

  • datasets

[피처 처리]

  • preprocessing
  • feature_selection
  • feature_extraction

[피처 처리 / 차원 축소]

  • decomposition

[데이터 분리, 검증, 파라미터 튜닝]

  • model_selection

[평가]

  • metrics

[ML 알고리즘]

  • ensemble
  • linear_model
  • naive_bayes
  • neighbors
  • svm
  • tree
  • cluster

[유틸리티]

  • pipeline

GridSearchCV

  • GridSearchCV를 이용하면 gridsearch를 이용한 탐색과 cross validation을 이용한 hyperparameter tuning이 가능하다. 다만 grid가 많아질수록 학습시간이 길어지므로 적절한 조절이 필요하다.

CODE

Github

0개의 댓글