-
Kaggle 랭커로부터 데이터분석 공부하기 (1) - Houses Prices / by SerigneData Analysis/Kaggle 2020. 12. 20. 16:45
나 같은 초심자에겐 Kaggle Ranker 들의 코드를 공부하는 것이 많은 도움이 된다.
오늘은 House Prices -Advanced Regression Techniques 에서 Top 4% 에 해당하는 Serigne님의 코드를 분석하여
데이터분석의 가이드라인을 잡아보고자 한다.
SanFrancisco 범죄예측과 다르게 해당 컴페티션은 특징칼럼(벡터)가 80개나 되는데에 비해,
데이터 건수는 1460여개 밖에 되지 않아 필자는 전처리에서 데이터 유실을 피하기 위해 많은 어려움을 겪었다.
1. Index 컬럼 Drop
Submit Form 을 보면 'Id' 와 'SalePrice' 컬럼만 제출하게 되어있다.
필자는 'Id' 컬럼을 pd.read_csv("filename",index_col = 'Id')로 하였으나,
해당 랭커는 따로 저장하고 드롭해버리는 과감함을 보여준다.
2. Outliers 분석
필자는 Outliers 분석을 위해 BoxPlot을 사용했고,
시그마 이상치 제거기법을 고려했으나, 워낙 데이터수가 작아 함부로 건드리기가 망설여졌다.
해당랭커 또한 확실한 이상치가 아니면 제거하지않는다고 기술해놓았다.
이유는, 통계적 이상치를 모두 제거해버린다면 테스트데이터에도 이상치가 있을경우
모델의 성능에 나쁜 영향을 미친다고 기술 해놓았다.
아래는, 랭커가 확실한 이상치라고 생각하는 데이터의 예시이다.
(동그라미 부분)
해당부분이 확실한 이상치라고 랭커가 결론지은 이유는 유추하건데,
통계적으로는 양의상관관계에 놓여진 데이터들의 경향에서 벗어난 데이터이고,
도메인적 지식으로는, 집의 평수가 엄청 넓은데에 비해 엄청 낮은가격에 팔린 데이터이므로,
또한 데이터수가 전체 비율에서 얼마되지 않는점에서 해당데이터를 삭제함으로써 모델의 성능을 높이려 한것 같다.
3. distplot을 이용한 target 값 분포 분석
우리가 예측해야할 target 값을 건든다는 것은 필자는 감히 생각도 하지 못했다.
많은 모델들이 정규분포라는 가정하에 만들어져 있어, 랭커는 정규화를 택한것 같다.
(이 부분은 어떤 모델을 사용할 것인지, 사용할 모델이 어떤분포를 좋아하는지에 대한
심화된 지식이 있어야 할 것 같으므로 열심히 공부하자.)
아래는 distplot 과 QQ-plot에 대한 시각화예시이다.
여기서, 필자에겐 생소한 통계개념인 skew 라는 단어가 나온다.
혹시 보시는 분들도 skew가 무엇인지 정확히 모른다면 우리의 친구 구글을 통해
이번기회에 확실히 머리에 심어놓자.
(skewness & kurtosis)
아래는 skew한 데이터를 로그변환을 통해 정규화시키는 과정이다.
4. 데이터 전처리
이 부분에서 필자가 정말로 놀란 것은, 필자는 항상 전처리를 할때
train과 test 데이터를 따로 분리하여 각각 전처리를 해줬었는데,
이 랭커분은 합쳐서 전처리를 해준다는 것이다...
(나는 왜 이렇게 어리석었을까..)
이렇게 합쳐서 전처리를 할 경우,
학습데이터와 예측데이터의 value들을 한꺼번에 볼 수 있어,
모델의 성능을 위해서
어느 칼럼을 드롭하고, 어떻게 결측치를 채울지에 대한 통찰이 더 쉬워진다.
추후에 train과 test 분리를 위해 각 사이즈를 변수에 저장해놓은 것을 볼 수 있다.
4-1. 결측치(NaN) 시각화
결측치의 비율을 시각화한다.
결측치의 갯수만 보고 메꾸거나 삭제할 생각을 했지,
한방에 시각화 할 생각은 못했는데, 이런것도 냉큼 배워가자
(+ plt.xticks(rotation='90') )
4-2. 공분산(Covariance) 및 상관계수(Correlation) 시각화
공분산과 상관관계는 수치형데이터에서
데이터분석에 매우 중요한 길을 제시해준다.
참고로, 상관계수의 r 값이 0인것은 상관관계가 없다가 아니라,
두 변수가 선형의 상관관계가 아니다라고 말하는것이 적절하다.
랭커는 이 상관관계를 heatmap으로 시각화 하였다.
참고로, 공분산과 상관관계를 잘 모르시는분들은 이 기회에 공부하는 것을 추천드리며,
일단 해당 히트맵에서 target값인 SalePrice의 가로축이나 세로축을 보면된다.
상관계수의 값이 양수이면 양의 상관관계
음수이면 음의 상관관계이다.
4-3. 결측치 대치(Imputing Missing Values)
해당부분은 필자와 랭커의 의견이 동일하다.
1. 일단 Data Description 을 보고 결측값을 채운다.
(NaN이 의미하는바가 None일 경우)
(이 경우는 엄밀히 따지자면 결측값이 결측값이 아닌경우다.)
(도메인 지식에 따라 채운다)
2. NaN이 정말 결측치일때, 숫자형 데이터일 경우
- median, mean, mode중에 본인의 직관에따라 채워 넣으면 된다.
3. NaN이 정말 결측치일때, 카테고리형 데이터일 경우
- mode(최빈값)을 주로 사용하나, 직관에 따라 다른값을 채울 수도 있다.
4-4. Numberic 타입이지만 카테고리형인 데이터들
4-5. 도메인지식의 활용
Basement면적, 1층면적, 2층면적은 다 집의 면적을 나타내는 지표이며,
해당 지표들은 SalePrice에 당연히 같은 영향을 미칠 것이므로,
오히려 따로 분리시켜 모델에 넣는다면 성능을 저하 시킬 수 있다.
4-6. Skewed Features
skewness 의 값이 2를 넘으면 정규
분포에서 벗어난다고 볼 수 있다.
이 랭커분은 0.75 이상의 수치를 가지는 컬럼들을
Box-Cox Transformation 하였다.
이 기회에 Box-Cox Transformation에 대해서도
공부하여 알아두자..!
참고로, Box-Cox Transformation에 대한 우려를 담은 댓글(comment)이 있어 캡쳐해보았다.
더 공부해보자..!
4-7. 카테고리형 데이터 dummy(one-hot encoding)
& train,test set 분류
One-hot encoding을 모르시는 분들은
이 기회에 알아 두시길...!
5. Modelling
5-1. K-Fold Validation 함수 정의하기
K-Fold 교차 검증법에 대해서 모르신다면, 검색..!
RMSE(root mean-squared error)도 모르신다면, 검색..!
랭커는 K-Fold Validation 함수를 정의하고
본 classification 의 score 측정 기준인 rmse를 리턴값으로 정의했다.
5-2. Model 의 종류 선정
해당 랭커는 LASSO Regression, Elastic Net Regression
Kernel Ridge Regression과
Boosting계열인 Gradient Boosting Regression, XGBoost, LightGBM 을
모델로 채택하였다.
5-3. 성능 측정
우리의 랭커분은
미리 정의해둔 rmsle_cv 함수로 모델들의 성능을 K-fold로 측정하였다.
추가로, score의 평균과 분산을 출력하는 기법은 눈여겨 볼 만 하다.
6. Stacking Models
overfitting을 해소하기 위한 기법 중 하나.
충분히 많은데이터가 없을 때, sampling/데이터 분포도의 변동이 있을때
overfitting이 자주 일어난다. (대부분의 경우)
모델들을 여러개 생성해서,
각 모델들의 prediction의 최빈값(classification)이나 평균값(regression)을 리턴하는 것이 핵심이다.
아래 사이트는 Model Stacking에 대해 잘 정리 해놓았다.
(세상엔 똑똑한사람이 정말 많다...)
inspiringpeople.github.io/data%20analysis/Ensemble_Stacking/
이제 Kaggle 랭커의 코드를 다시 들여다 봐보자.
Kaggle 랭커에 따르면, 자주 사용하기에 모듈화 시켜놓는게 좋다고 한다.
6-1. Simple model stacking
성능이 향상된 것을 볼 수 있다..!!!
우리의 랭커는
'이러한 단순한 stacking으로도 성능이 향상되었으니, 더 복잡한 stacking을 쓸 여지가 충분하다' 라고 말한다.
(매우 중요)
6-2. Advanced model stacking
심화라는 말에 동공이 떨려오지만,
여기까지 온거... 이 악물고 배워가자..!
-추후 업데이트 예정-
# Reference
www.kaggle.com/c/house-prices-advanced-regression-techniques/
www.kaggle.com/serigne/stacked-regressions-top-4-on-leaderboard
728x90