💻 프로젝트 소개
- kaggle의 런던의 자전거 공유 수요량 데이터셋을 이용하여 시계열 예측 모델을 학습시킨 후 자전거 수요량 예측 모델을 만들어보려고 한다.
[데이터셋 출처]
https://www.kaggle.com/datasets/hmavrodiev/london-bike-sharing-dataset?datasetId=376751
📁 데이터셋
[데이터셋 구성]
- timestamp: 날짜 데이터
- cnt: 자전거 공유 수량
- t1: 기온
- t2: 체감 온도
- hum: 습도
- wind_speed: 풍속
- weather_code: 1: 맑음, 2: 구름 약간, 3: 뭉게구름, 4:흐림, 7:비, 10: 천둥 번개를 동반한 비, 26: 강설, 94:얼음이 어는 안개
- is_holiday: 1-공휴일, 0-공휴일 아님
- is_weekend: 1-주말, 0-평일
- season: 0-봄, 1-여름, 2-가을, 3-겨울
[EDA]
- 날씨 카테고리를 제외하고는 일별 평균값으로 변환하였고, 날씨 카테고리는 각 날짜에 대해 시간대별로 가장 많이 등장한 날씨 카테고리를 해당 날짜의 대표 날씨 카테고리로 선택했다.
[Before] | [After] |
---|
- 위의 처리를 진행한 후에 결측치를 찍어보니 train set의 2016-09-02에 결측치가 하나 존재했다.
따라서 보간법을 이용해서 결측치를 처리해주었다.
여기서 보간법이란 주어진 데이터 포인트들 사이의 누락된 값을 예측하거나 채우는 방법입니다. 이는 데이터의 빈 공간을 채우기 위해 사용되며, 주어진 데이터 포인트들 간의 관계를 기반으로 누락된 값을 추정한다.
-
수치형 칼럼인 cnt, t1, t2, hum, wind_speed, weather_code의 그래프를 그려보았을 때, t1과 t2는 cnt와 비슷한 모양을 보였고, hum은 반대 양상을 보였다.

-
전체 데이터셋의 계절별 그래프를 그려보면 모든 계절의 길이가 비슷한 것을 알 수 있다.

- is_holiday와 is_weekend는 이미 0과 1로 표시되어 있는 변수이므로 원핫인코딩을 적용하지 않아되기 때문에 season, weather 칼럼만 원-핫 인코딩을 해주었다.
- 상관계수 히트맵을 그려보았을 때 예상했던대로 기온과 체감온도는 자전거 대여수와 양의 상관관계를 갖고 있었고, 습도는 자전거 대여수와 음의 상관관계를 갖고 있었다.

- 자전거 대여수에 공휴일은 빨간선으로 주말은 초록색 선으로 표시했을 때 예상과는 달리 오히려 공휴일과 주말에 자전거 대여수가 낮은 것을 알 수 있다.
아마 런던 사람들은 출퇴근이나 등하교시에 자전거를 이용하는 것을 선호하는 것 같다.

🔨 Machine Learning
[차분]
-
주기성을 확인해보았을 때 7일 주기성을 갖고 있었다.

-
모든 요소에 대해 정상성 여부를 테스트한 결과 cnt, t1, t2, hum, season 칼럼이 정상성을 만족하지 못하고 있었다.

-> 따라서 5개의 칼럼을 계절차분을 해준 후 다시 정상성 여부 테스트해보니 정상성을 만족했다.

- 계절차분 후의 cnt의 acf, pacf 그래프는 아해와같다.
계절 차분 결과 주기성이 사라진 것을 확인할 수 있었다.

[SARIMA]
- train set의 sarima 그래프를 보면 처음 며칠을 제외하고는 예측 정확도 성능이 나쁘지 않은 것을 알 수 있다.

- 그러나 test set의 sarima 그래프를 보니 앞에는 예측도가 나쁘지 않았으나 뒤로 갈수록 예측 정확도가 떨어지고 있었다.

[SARIMAX]
-
예측 정확도를 높이기 위해 cnt와 상관계수 절대값이 컸던 ["t1", "hum", "season_3.0"]을 추가하여 학습시켜보았다.
그결과 train set의 sarimax 그래프는 sarima와 크게 달라지지 않았다.

-
그러나 test set의 sarimax는 sarima에 비해 예측 정확도가 높아진 것을 확인할 수 있었다.

-
실제도 sarima와 sarimax의 rmse score를 비교해보았을 때 test set을 보면 sarimax의 성능이 좋은 것을 확인할 수 있었다.

💡 Insight
- 주말을 파란색으로 공휴일을 빨간색으로 표시했을때, 예상한대로 공용 자전거 사용 비율이 낮은 경향을 보이고 있었다.
따라서 주말이나 공휴일의 공용 자전거 사용량을 높이는 것이 목표라면 해당 일에 랜트 가격을 할인해주는 이벤트를 진행하는 것도 좋을 것 같다.
