본문 바로가기

Kaggle

Kaggle - Bike Sharing Demand : EDA & Feature Engineering (2)

반응형

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

 

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:..

steadiness-193.tistory.com

위 포스팅과 연결됩니다.

 

 

 

 

온도 및 체감온도

 

 

1. 온도와 체감온도는 비례하는 경향을 나타내고 있다.

 

2. size에 count를 넣어서 보니, 온도와 체감온도가 낮을 때보다 높을 때 자전거 대여량이 많아진다.

 

3. 박스체크된 부분은 입력값에서 문제가 있어보인다.

온도가 25도인데 체감온도가 15도이긴 어렵기 때문이다.

 

 

 

 

 

체감온도 이상한 값 찾기

 

 

그래프를 보고 이상한 값이 있는 온도와 체감온도의 언저리 범위를 통해 찾아냈다.

 

 

 

 

 

이상한 체감온도 랜덤포레스트로 정상적으로 바꿔주기

 

 

이상한 체감온도를 가지고 있는 인덱스를 구해놓고

 

위 인덱스를 가진 행들과, 그렇지 않은 행을 분리해서 진행하면 된다.

 

 

 

 

다시 온도 및 체감온도 시각화

 

 

 

잘 채워졌으며 온도와 체감온도는 count를 예측하는데 있어서 활용해야할 feature이다.

 

 

 

 

test의 온도 및 체감온도

 

 

test 데이터셋은 이상한 값이 없어보인다.

 

 

 

 

 

체감온도와 온도의 차이에 따른 대여량(count)

 

 

 

체감온도에서 온도를 빼준 뒤 반올림 한 값을 temp_diff 컬럼으로 정의해줬다.

 

temp_diff 컬럼의 값을 범주형처럼 보고 그 범주에 따른 대여량을 시각화해보자

 

 

 

 

-2, -1과 7, 8의 신뢰도가 높지 않은데, 그 이유를 value_counts()를 이용해서 살펴보자

 

 

 

 

-2, -1, 7, 8의 빈도 값이 매우 적은 편이다.

 

그렇다면 -2, -1은 0으로 / 7, 8은 6으로 바꿔서 다시 그려보자

 

 

 

여기서 알 수 있는 중요한 사실은

 

체감온도에서 온도를 뺀 값이 클 수록 (온도보다 더 덥다고 느낄수록)

자전거 대여량이 높다는 것이다.

 

이 또한 유의미한 feature가 될 수 있다.

 

 

 

 

test 데이터셋에서도 동일하게 진행

 

 

 

 

 

 

 

 

날씨에 따른 대여량(count)

 

 

날씨가 좋을 수록 (1, 2) 대여를 많이하는데

 

이상하게 4번 날씨에도 대여량이 높은 편이다.

 

더 이상한 점은 4번 날씨에는 신뢰 구간 막대가 안보인다는 것이다.

 

 

 

 

 

그 이유를 value_counts()에서 찾을 수 있으며

 

이는 4번 날씨에 해당하는 데이터가 단 1건이기 때문이다.

 

 

 

 

test 데이터셋도 비슷하게 4번 데이터가 2건으로 매우 부족하다.

 

 

 

train 데이터셋에서 날씨가 4인 행을 삭제하거나, 3번으로 고쳐보았으나

머신러닝의 성능이 미세하게 나빠졌다. 

그러므로 날씨에 대한 전처리는 하지 않고 그대로 진행한다.

 

 

 

 

 

 

시간에 따른 회원(registered), 비회원(casual)의 대여량

 

 

 

이번엔 count가 아니라 casual과 registered를 나눠서 살펴본다.

 

맨 위는 기존의 count를 나타낸 것이다.

 

위 그래프를 보면 다음의 내용을 파악할 수 있다.

 

 

1. 비회원(casual)과 회원과의 대여 경향이 매우 다르다.


2. 비회원은 주로 주말 09-18시에 많이 빌린다.


3. 회원은 주로 출퇴근 시간(06-09, 17-20)에 많이 빌린다.


4. 대여량의 절대량은 회원이 더 높다.

 

 

즉, 그냥 count를 예측하는 것보다 casual과 registered를 각각 예측해서 더한다면

 

정답에 가까워 질 수 있는 것이다.

 

 

 

 

 

 

 

count, casual, registered

 

 

자전거 대여량 count 컬럼을 보면 

 

적게 빌리는 사람들이 많고, 반면에 1,000대 가까이 빌리는 경우도 있어 데이터가 왜곡되어보인다.

 

 

이럴 때 이용하는 것이 log transformation이다.

 

 

count에 자연로그를 씌우니 중간의 그래프처럼 정규분포에 가까운 모양을 만들고 있다.

 

 

즉, log를 씌운 값을 예측하는 것이 더 좋은 정확도를 낼 수 있는 것이다.

 

 

 

 

casual과 registered 또한 마찬가지다.

 

물론 예측한 뒤에 exp를 이용해서 원래 값으로 돌려놔야한다.

 

 

 

log를 씌운 컬럼을 만들어 낸뒤 이제부터 머신러닝을 시작해보자

 

 

 

 

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

 

Numpy - np.log, np.log1p, np.exp

로그 기본 개념 밑 조건 : a > 0 진수 조건 : N > 0 x의 범위는 실수 위 내용 중에서 자연로그에 대해서 알아보자. 자연로그는 자연상수 e를 밑으로 하는 로그함수(natural logarithm)이며 주로 위 세가지 �

steadiness-193.tistory.com

 

반응형