본문 바로가기

Kaggle

Kaggle - Bike Sharing Demand : EDA & Feature Engineering

반응형

데이터 출처

https://www.kaggle.com/c/bike-sharing-demand/data

 

 

 

컬럼 설명 자료형
datetime 일시
연-월-일 시:분:초
object
season 계절
1: 봄 / 2: 여름 / 3: 가을 / 4: 겨울
int64
holiday 휴일
1: 휴일 / 0: 휴일 아님
int64
workingday 근무일
1: 근무일 / 0: 근무일 아님
int64
weather 날씨
1: 아주 깨끗한 날씨 ~ 4: 아주 많은 비
int64
temp 온도
섭씨로 표현됨
float64
atemp 체감온도
섭씨로 표현됨
float64
humidity 습도 float64
windspeed 풍속 int64
casual 비회원의 자전거 대여량 int64
registered 회원의 자전거 대여량 int64
count 총 자전거 대여량
casual + registered
int64

 

 

 

데이터 불러오기

 

train

 

test

 

우선 datetime 컬럼을 parse_dates를 이용해서 날짜형으로 불러온다.

 

test 데이터셋에는 예상대로 casual과 registered, count 컬럼이 없다.

 

test 데이터셋의 자전거 대여량을 머신러닝을 이용해 예측해보자.

 

 

 

 

 

 

누락값 확인

 

 

다행히 두 데이터셋 모두 누락값은 없다.

 

 

 

 

 

 

메모리 효율화

 

 

 

값이 0, 1만 있는 컬럼의 자료형이 int64형일 필요까지는 없다.

 

downcast를 이용해 메모리를 효율화했다.

 

 

 

 

 

 

 

상관관계

 

 

[양의 상관관계]

온도-체감온도

 

[음의 상관관계]

근무일과 비회원의 대여량, 습도와 풍속 및 대여량, 풍속과 계절

 

 

 

 

 

 

필요 컬럼 추가

 

 

datetime 컬럼에서

 

연/월/일/시간/숫자요일/영어요일 컬럼을 구해서 추가해줬다.

 

 

 

test도 영어요일 컬럼을 제외하고 추가해주자

 

 

 

 

 

https://steadiness-193.tistory.com/227

 

판다스 - datetime : dt 연산자 활용

데이터 불러오기 자료형이 datetime인 datetime 컬럼을 만들어 데이터프레임으로 만들어줬다. https://steadiness-193.tistory.com/171 판다스 - to_datetime : format, dt to_datetime 메서드를 사용하면 Date..

steadiness-193.tistory.com

 

 

 

 

 

연/월/일/시간에 따른 대여량(count)

 

 

1. 2011년보다 2012년에 더 많이 빌린다. 즉, 자전거 대여 사업이 성장하고 있다.


2. 겨울보다 봄 여름에 더 많이 빌린다. 이상한 점은 12월과 1월에서 차이가 많이 나는 것이다.


3. 20일부터 31일까지가 test 데이터셋이다. 과적합 방지를 위해 feature로 사용하지 말자.


4. 시간대별로 대여량이 다르게 나타난다. 특히 출/퇴근 시간의 비중이 높다.

 

 

 

 

 

연-월에 따른 대여량(count)

 

 

 

우선 연-월 컬럼을 생성해주고

 

 

 

 

시각화를 하면 위와 같다.

 

month 컬럼만 봤을 때는 1월과 12월의 차이가 많이 나보이지만, 

 

박스로 표시한 2011년 12월과 2012년 1월의 차이의 갭은 크지 않다.

 

 

이는 단순히 2011년보다 2012년의 자전거 대여 서비스가 유명해진 것이고, 

 

2011년 1월부터 시작한 것이기 때문에 12월에 대여량이 더 많아보이는 것 뿐이지

 

고객이 12월에 자전거를 더 많이 빌릴 이유는 없는 것이다.

 

따라서, 과적합 방지를 위해 month 컬럼 또한 feature로 사용하지 않는다.

 

 

 

 

 

 

 

 

시간에 따른 대여량(count)

 

 

1. 휴일에는 10시 - 16시에 대여량이 높은 반면, 근무일(workingday)에는 출퇴근 시간에 대여량이 높다.


2. 10 - 16시에 일요일보다 토요일의 대여량이 높다.


3. 월화수목보다 금요일에 10-16시 대여량이 높고, 퇴근 시간의 대여량이 낮다.

이처럼 dayofweek은 머신러닝에 있어서 아주 중요한 feature가 될 것이다.

 

 

 

 

 

 

 

풍속에 따른 대여량(count)

 

 

 

풍속이 0부터 56까지 있는데 0값이 많아보인다.

 

 

 

 

pointplot을 했는데, x축 눈금이 저정도로 빼곡하지 않는다는 것은 다소 이상하다.

 

연속형이라면 x축 눈금이 빼곡해서 잘 보이지 않아야한다.

 

 

 

 

 

 

풍속 소수점 분포도

 

 

만개가 넘는 데이터에서 저렇게 분포가 나온다는 것은 

 

연속형보다는 범주형에 가깝다는 것으로 해석될 수 있다.

 

 

 

 

 

 

정수로 반올림해서 pointplot

 

 

위 그래프를 보고 해석할 순 있지만

 

풍속이 0인 값들을 랜덤포레스트를 이용해서 채워주자

 

 

 

 

 

 

train 풍속 랜덤포레스트로 찾기

 

 

이렇게 잘 채워진 풍속을 정수형으로 반올림 한 뒤

 

다시 한번 pointplot을 그려보자.

 

 

1. 풍속이 11 ~ 20와  22 ~ 30일때가 10이하일 때보다 대여량이 많다.


2. 풍속이 35이상 부터는 신뢰도가 높지 않다.


3. 풍속이 과하게 높을 경우엔 대여량이 낮다.

 

4. windspeed_int 컬럼도 머신러닝에 feature로 이용한다.

 

 

 

 

 

test 데이터 셋의 풍속도 0인 값이 많으니 랜덤포레스트를 이용해 채워주자

 

채우기 전

 

 

 

 

채운 후

 

 

 

이후 다른 컬럼들도 차근히 살펴보자.

 

 

반응형