본문 바로가기

Data Science/Kaggle13

[kaggle] 범주형 데이터 분석 - 머신러닝 2편 (로지스틱 회귀 하이퍼파라미터 튜닝) 저번 포스팅에서는 명목형 변수 중에서 nom_9 변수를 제거하여 0.804의 성능으로 향상시켰다. 이번 포스팅에서는, 사용했던 모델인 '로지스틱 회귀' 모델을 하이퍼 파라미터 튜닝하여 좀 더 성능을 향상시켜 보자! 데이터를 불러오는 과정은 앞의 포스팅과 똑같으므로 생략하고, 범주형 변수 인코딩 하는 부분과 모델 하이퍼 파라미터 튜닝하는 부분은 함수로 만들어서 좀 더 코드를 간결하게 만들어보았다. 참고로 하이퍼 파라미터 튜닝은 시간이 꽤 오래 걸리니 코드 실행 시 주의하자! (적으면 10분, 많으면 40분까지도 걸린다) 전체 코드는 이 깃허브에서 다운받을 수 있다 :) ✔Table of Contents 1. nom_9 변수 제외 & 하이퍼 파라미터 튜닝 함수화 먼저 데이터를 불러오고, 데이터 인코딩 하는 .. 2022. 8. 6.
[kaggle] 범주형 데이터 분석 - 머신러닝 1편 (변수 선택) 이전 포스팅에서는 범주형 변수를 전처리하기 위한 인코딩을 하고, 기본적인 베이스라인 모델을 만들어 제출까지 해보았다. 이번 포스팅부터는 성능을 개선하기 위한 여러 방법들을 시도해보자! 내가 시도해본 방법은 다음과 같다. 1) 명목형 변수인 nom_*의 변수 개수 조정 (nom_5~ nom_9번 변수는 의미있는 변수인지 모르니까) 2) 로지스틱 회귀의 하이퍼 파라미터 튜닝 이번 포스팅에선 1번을 해본다. 참고로 전체 코드는 나의 깃허브에서 다운받을 수 있다 :) ✔Table of Contents 1. 데이터 불러오기 import pandas as pd import numpy as np import warnings warnings.filterwarnings("ignore") train = pd.read_cs.. 2022. 8. 5.
[kaggle] 범주형 데이터 분석 - 변수 인코딩 & Baseline model 저번 EDA 포스팅을 통해 범주형 변수들이 어떤 카테고리 값을 갖고 있는지와, target과의 관계를 파악하였다. 그리고 주어진 모든 범주형 변수가 target과 유의미한 관계가 있다는 것을 알 수 있었다. (하지만 명목형 변수 nom_5~nom_9는 카테고리가 워낙 많아 검증이 필요하다.) 이번에는 베이스라인 모델을 만들어본다. 주어진 범주형 변수들을 활용해 target을 예측하는 모델을 만들어 볼 것이며, 베이스라인 모델이므로 가장 간단한 형태로 만들 것이다. 이번 포스팅에서는 범주형 변수를 전처리하는 변수 인코딩(Encoding) 방법과, 아주 간단한 로지스틱 회귀 모델을 만들어 보고 score가 얼마가 나오는지 알아보자. ✔Table of Contents 1. 범주형 변수 인코딩(Encoding).. 2022. 8. 4.
[kaggle] 범주형 데이터 분석 프로젝트 - EDA 2편 저번 포스팅에 이어, 이번에는 나머지 범주형 변수들에 대해 EDA를 진행한다. ✔Table of Contents 4. nom_* 변수 EDA (feat. 통계의 함정) 이 변수는 명목형 변수로, 저번 포스팅에서 봤던 bin_* 변수는 고유값이 단 2개였지만 이 변수는 고유값이 여러개이다. 먼저 nom_* 변수를 담은 list2를 만들고, 각 변수별 고유값을 살펴보자. list2 = list() for i in range(0, 10): list2.append('nom_{0}'.format(i)) for ind, col in enumerate(train[list2]): print(col, '의 고유값은: ', train[col].unique()) 결과를 보면 굉장히 스크롤 압박이 심하다. nom_0 ~ no.. 2022. 7. 15.
[kaggle] 범주형 데이터 분석 프로젝트 - EDA 1편 두번째로 해본 캐글 프로젝트는 범주형 데이터를 분석하는 프로젝트, Categorical Feature Encoding Challenge이다. 링크를 클릭하면 캐글에서 데이터셋을 다운받을 수 있다. 이 프로젝트에서 사용되는 데이터는 전부 범주형 데이터셋이다. 학습에 사용되는 피처들뿐만 아니라 target 변수까지 모두 범주형 데이터로 되어 있다. 그래서 이번 프로젝트 (특히 EDA 편)에서는 범주형 데이터를 어떻게 분석하는지를 자세히 다룰 것이다. (여담인데, 이 프로젝트 캐글 페이지에 고양이가 있는 이유는 범주형 데이터 분석(Categorical Data)를 줄여 cat-in-the-dat 이라고 이름을 만들었기 때문! 귀엽당...) 또한 이 프로젝트와 포스팅에서 사용된 코드는 나의 깃허브에서 다운받을 .. 2022. 7. 14.
[kaggle] Bike Sharing Demand: ML 성능 개선 3편 (머신러닝 결측치 처리) 이번 포스팅은 캐글 Bike Sharing Demand(자전거 수요예측) 프로젝트의 마지막 포스팅이다. 저번 포스팅에서는 타겟을 count로 바꾸고, season과 month 중 더 유의미한 변수를 선택하는 등의 성능 개선을 통해 0.379까지 스코어를 올렸다! 이번 포스팅에서는 좀 더 스코어를 올리기 위해, windspeed 변수를 건드려볼 것이다. 이번에는 이 변수를 아예 제거하거나 0을 처리해주었을 때 스코어가 어떻게 변하는지를 알아보자! NOTE: 앞의 포스팅과 중복되는 코드가 많아 필요한 코드만 포스팅하였습니다. 전체 코드는 이 깃허브의 v.4, v.5 참고하세요! ✔Table of Contents ver.4 windspeed 변수 drop 이전 포스팅 결과에 따라, target은 count를,.. 2022. 7. 3.
[kaggle] Bike Sharing Demand: ML 성능 개선 2편 (변수 선택) 저번 포스팅에서 LGBM 모델을 하이퍼 파라미터 튜닝하여 얻은 스코어는 약 0.407이었다. 이번에는 이 score에서 성능을 더 끌어올리기 위해 내가 시도한 여러 가지 방법들에 대해 포스팅하였다. 과연 이 스코어는 얼마까지 좋아질 수 있을까? 🤔 참고로, 이번 포스팅은 저번 포스팅과 중복되는 코드가 많을 예정이기에, 달라진 부분들만 중점적으로 포스팅하려고 한다. 전체 코드가 궁금하신 분들께서는 깃허브에 ML v.2 부터 v.5까지 올라와 있으므로 참고하세요 :) ✔Table of Contents ver.2 count 변수를 타겟으로 앞의 LGBM 모델링은, casual에 대한 예측과 registered에 대한 예측을 따로 한 다음, 두 예측치를 합하여 count 예측치를 구했다. 이렇게 한 이유는 ED.. 2022. 7. 2.
[kaggle] Bike Sharing Demand: ML 성능 개선 1편 (Ridge, Random Forest, LGBM) 직전 포스팅에서는 베이스라인 모델로 선형 회귀(Linear Regression)를 사용해 k-fold를 진행하였고, 검증셋에 대한 RMSLE는 0.9~1 정도로 그렇게 좋은 성능은 얻어내지 못했다. 하지만! 베이스라인 모델이니까 어쩌면 당연하다. 이번에는 다양한 모델들(릿지 회귀, Random Forest, LGBM)을 사용해서 성능이 이전과 얼마나 달라졌는지를 확인하고, 최종 제출까지 해보았다. 참고로 전체 코드는 이 깃허브에서 확인하실 수 있습니다. (ML v.1 파일입니다!) ✔Table of Contents 3. Modeling (성능 개선 편) 캐글에서는 지표로 RMSLE 값을 사용한다고 하였으나, 사이킷런의 metric을 사용하는 관계로 편의를 위해 포스팅에선 MSLE값을 구하는 것으로 하였다.. 2022. 7. 1.
[kaggle] Bike Sharing Demand: Baseline Model 2편 (pipeline, k-fold, scaling) 저번 포스팅에선 모델링을 위한 데이터 전처리를 진행하였다. 이번 포스팅에선 직접 Baseline 모델을 만들어보자. ✔Table of Contents 3. Modeling 모델링을 하기 전에는 스코어를 집계하는 metric, 즉 지표로는 무엇을 사용하는지를 반드시 알아야 한다. 캐글에서 확인하면, 이 대회에서는 RMSLE를 사용한다고 되어 있다. 사이킷런(scikit-learn)을 활용하면 지표를 구하는 metric이 이미 구현되어 있다. MSE를 구하는 metric인데, RMSE 또한 MSE에 루트를 씌운 값이므로 MSE를 구한 후 np.sqrt로 루트만 씌워주면 된다. sklearn.metrics.mean_squared_error Examples using sklearn.metrics.mean_squ.. 2022. 6. 30.
[kaggle] Bike Sharing Demand: Baseline Model 1편 (데이터 전처리) 저번 포스팅에서 EDA를 통해, Bike Sharing Demand 프로젝트에 사용된 데이터가 어떻게 되어 있고, 변수 간에 어떤 관계가 있었으며, 어떤 변수를 머신러닝에 사용할 것인지에 대해 검토하였다. 저번 포스팅에서 발견한 정보들을 간략히 정리해보면 다음과 같다. 수치형 변수 온도(temp, atemp), 습도(humidity), 풍향(windspeed): 각각 대여량(target)과 정비례, 반비례, 정비례 관계 특히 hour별로 봤을 때, casual일 때 대여량과 상관성이 높았다. 카테고리 변수 시간 변수로는 연도(year), 월(month), 시간(hour), 요일(dayofweek)이 유의미했다. 분기(season), 날씨(weather), 평일(workingday), 공휴일(holiday.. 2022. 6. 30.