데이터 출처
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 |
데이터 불러오기
우선 datetime 컬럼을 parse_dates를 이용해서 날짜형으로 불러온다.
test 데이터셋에는 예상대로 casual과 registered, count 컬럼이 없다.
test 데이터셋의 자전거 대여량을 머신러닝을 이용해 예측해보자.
누락값 확인
다행히 두 데이터셋 모두 누락값은 없다.
메모리 효율화
값이 0, 1만 있는 컬럼의 자료형이 int64형일 필요까지는 없다.
downcast를 이용해 메모리를 효율화했다.
상관관계
[양의 상관관계]
온도-체감온도
[음의 상관관계]
근무일과 비회원의 대여량, 습도와 풍속 및 대여량, 풍속과 계절
필요 컬럼 추가
datetime 컬럼에서
연/월/일/시간/숫자요일/영어요일 컬럼을 구해서 추가해줬다.
test도 영어요일 컬럼을 제외하고 추가해주자
https://steadiness-193.tistory.com/227
연/월/일/시간에 따른 대여량(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인 값이 많으니 랜덤포레스트를 이용해 채워주자
채우기 전
채운 후
이후 다른 컬럼들도 차근히 살펴보자.
'Kaggle' 카테고리의 다른 글
Kaggle - Bike Sharing Demand : Evaluation (Random Forest, Cross-validation) (0) | 2020.08.19 |
---|---|
Kaggle - Bike Sharing Demand : EDA & Feature Engineering (2) (0) | 2020.08.19 |
Kaggle - titanic(타이타닉) : Modeling (Decision Tree) (0) | 2020.08.07 |
Kaggle - titanic(타이타닉) : Feature Engineering (0) | 2020.08.07 |
Kaggle - titanic(타이타닉) : EDA (2) | 2020.08.07 |