344pg. Kaggle에서 Bike Sharing Demand train.csv 파일을 다운받으시오.
https://www.kaggle.com/c/bike-sharing-demand/data?select=train.csv
- apply(pd.to_datetime)은 string타입의 datetime을 날짜를 나타내는 고유한 데이터타입인 datetime으로 변화함. (object>>datetime64[ns])
- 66줄~69줄: lambda함수를 이용해서 datetime의 column값으로부터 x.year, x.month, x.day, x.hour를 순차적으로 bike_df의 각각의 column에 넣는다. (인덱스슬라이싱을 사용해도 됨) datetime은 심플하게 원하는 값의 추출이 가능하다.
- 77줄: datetime, casual, registered column을 삭제한다. count라는 column이 casual과 registered 값의 합을 나타내기 때문에 두 column은 불필요하다. (날씨에 다른 총 대여의 수가 필요하므로)
- 89줄: rmsle는 오류값의 log에 대한 rmse값이다.
참고) log1p=log(1+x) log값이 음수가 나올 수 있으므로 log1p를 사용한다.
참고) MAE값은 RMSE값과 비교할 수 있다. RMSE는 제곱에 루트를 씌운 값이기 때문.
- 348pg. 데이터가 왜곡되었을 때 log화를 시키면 데이터의 분포를 정규화 하는 역할도 한다.
- 131줄: y_test (실제값)와 pred (학습된estimator를 통해 받은 예측값) result_df값으로 받아서 위에서부터 20개를 내림차순 정렬로 뽑는다. 131줄의 n_tops=5는 초기값을 의미한다. 139줄에서 따로 설정하지 않으면 n_top는 초기값인 5로 반환된다.
- 145줄: skewness(비대칭도)된 히스토그램을 151줄에서 log변환해서 히스토그램화한다. (스케일을 변화시킴)
히스토그램은 특정 데이터 사이(영역)의 빈도수(분포)를 나타낸다. plot그래프와 달리 히스토그램은 log변환 후 비대칭성이 아주 완화가 된다. 그런데 왜 이런 그래프가 나오는걸까? log변환 하고 히스토그램을 그리면 중위값에 위치하는 데이터들의 수가 상대적으로 많아진다. (정규분포에 좀 더 가까운 모양이 됨)
참고) y_target을 plot 그래프로 그려본 것
plt.plot(y_target[0:100]) 과 plt.plot(y_target[0:2000])
참고) y_log_transform을 plot 그래프로 그려본 것
plt.plot(y_log_transform[0:100])과 plt.plot(y_log_transform[0:2000])
위 아래 두 그래프를 비교해보면, 왼쪽이 원본데이터고 오른쪽이 log로 scaled 된 데이터이다. 그래프의 모양은 같으나 데이터간의 간격이 많이 좁혀진 것을 볼 수 있다.
참고) scatter 그래프로 그려본다. log변환을 하면 데이터의 분포가 좀 더 고르게 되며 데이터들간의 격차가 줄어든다. (원본데이터는 0~100, 100~200의 구분이 생긴다)
plt.scatter(range(0,100), y_target[0:100])
plt.scatter(range(0,100), y_log_transform[0:100])
- 177줄: log변환 후 평가를 했는데 RMSLE오류는 줄어들었지만 RMSE는 오히려 더 늘어났다. 왜 그럴까?
숫자값인 년도year는 자전거 수요예측에 가중치의 관점에서 크게 영향을 끼친다. 이를 방지하기 위해 원-핫 인코딩을 적용한다. (특정 column의 절대적인 값은 의미가 없으므로)
참고) 원-핫 인코딩: 피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 부여한다.
- 183줄: coefficient (상관계수) 값을 보면 year가 비중이 큰 것임을 알 수 있다.
- 192줄: pd.get_dummies를 이용해 자동적으로 원-핫 인코딩을 적용한다.
- X-features_ohe에는 다음과 같이 column이 증가하게 된다.
- 204줄: 원-핫 인코딩한 데이터를 가지고 다시 train test split을 한 뒤 학습을 시키고 예측값을 평가한다.
- 209줄: expml는 True일 경우 log1p로 변환된 값 (y_target_log, y_test, pred 등)을 다시 원본화시킨다. (exponential는 log에 역수를 취한 값이다)
- Ridge와 Lasso로 평가를 수행 한 뒤 RMSLE, RMSE, MAE값이 모두 줄어들었음을 알 수 있다.
- 226줄: coef(회귀계수)를 barplot으로 살펴본다.
- 239줄: 마지막으로 4개의 회귀트리를 가지고 평가를 수행한다
Bagging이나 Boosting계열의 예측성능은 회귀기반모델보다 더 개선되었음을 알 수 있다.
'살콤아내 자기계발 > 파이썬' 카테고리의 다른 글
파이썬머신러닝완벽가이드 6주차 (353pg. 캐글 주택 가격_추가코드) (0) | 2021.06.04 |
---|---|
파이썬머신러닝완벽가이드 6주차 (353pg. 캐글 주택 가격: 고급회귀 기법) (0) | 2021.06.03 |
파이썬 머신러닝 완벽가이드 6주차 정리 (319pg, 규제선형모델-릿지, 라쏘, 엘라스틱넷, 로지스틱회귀) (0) | 2021.05.31 |
파이썬 머신러닝 완벽가이드 6주차 정리 (303pg, 보스턴 주택 가격 예측, 다항회귀) (0) | 2021.05.28 |
파이썬 머신러닝 완벽가이드 6주차 정리 (290pg, 회귀 아달린) (1) | 2021.05.26 |