
👀 INTRO
배경 :
자전거 공유 시스템은 도시에서 효율적이고 친환경적인 교통수단을 제공하며, 대여 수요 예 측은 차량 관리와 사용자 경험 향상에 필수적이다. 이 프로젝트는 과거 대여 데이터를 기반으 로 다양한 환경적 및 시간적 요인을 고려하여 자전거 대여 수를 예측하는 모델을 구축하게 되 었다.
목적 :
목표는 머신러닝 기법을 사용하여 시간대별 총 자전거 대여 수(count)를 예측하는 것이다. 데이터셋에는 날씨 조건, 계절성, 사용자 유형 등 대여 수요에 영향을 미치는 다양한 요인이 포함되어 있다. 이 데이터를 활용하여 보이지 않는 테스트 데이터에 잘 일반화할 수 있는 견고한 모델을 구축하는 것을 목표로 한다.
데이터 설명 :
| 컬럼명 | 데이터 타입 | 설명 |
| datetime | datetime | 자전거 대여 기록의 날짜 및 시간. 예시: 2011-01-01 00:00:00 |
| season | int | 계절 (1: 봄, 2: 여름, 3: 가을, 4: 겨울) |
| holiday | int | 공휴일 여부 (0: 평일, 1: 공휴일) |
| workingday | int | 근무일 여부 (0: 주말/공휴일, 1: 근무일) |
| weather | int | 날씨 상황 (1: 맑음, 2: 구름낌/안개, 3: 약간의 비/눈, 4: 폭우/폭설) |
| temp | float | 실측 온도 (섭씨) |
| atemp | float | 체감 온도 (섭씨) |
| humidity | int | 습도 (%) |
| windspeed | float | 풍속 (m/s) |
| casual | int | 등록되지 않은 사용자의 대여 수 |
| registered | int | 등록된 사용자의 대여 수 |
| count | int | 총 대여 수 (종속 변수) |
📊 EDA
☑️ 상관관계
(특성들 간의 상관관계)

< hour ↔ count (0.4) >
: 시간(hour)이 증가할수록 자전거 대여량(count)이 증가하는 경향이 있음.
: 보통 출퇴근 시간(아침, 저녁)에 대여량이 증가할 가능성이 높음.
< temp ↔ count (0.39) >
: 기온이 올라갈수록 자전거 대여량이 증가하는 경향이 있음.
: 날씨가 따뜻할수록 사람들이 더 많이 자전거를 이용한다고 볼 수 있음.
< atemp ↔ temp (0.98) >
: 체감 온도와 온도는 거의 똑같다는 사실을 알 수 있음.
('count'컬럼과의 상관관계)

< count ↔ registered (0.97) >
: 회원 수 증가가 자전거 대여량 증가에 가장 큰 영향을 미침.
< count ↔ casual (0.69) ) >
: 비회원 이용도 중요한 요인이지만, 회원 대여량이 더 큰 영향을 미침.
< count ↔ hour (0.4) >
: 시간대가 자전거 이용에 영향을 줌. 출퇴근 시간의 패턴을 분석하면 대여량을 예측하는 데 도움이 될 수 있음.
< count ↔ humidity (-0.32) >
: 습도가 높아질수록 자전거 대여량이 감소하는 경향이 있음.
: 습도가 높으면 불쾌지수가 상승하고, 사람들이 야외 활동을 줄이는 것으로 추측
(특정 시간대에 따른 자전거 대여 수)

| 근무일 | 휴일 |
| : 출퇴근 시간(07시~09시, 17시~19시) 수요 급증 : 출퇴근 시간대의 수요 증가는 근무일과 강한 연관성을 가짐 |
: 정오 오후(11시~18시) 수요 높음 : 근무일과 달리 출퇴근 시간의 피크타임이 나타나지 않음 : 이는 여가 활동을 위해 자전거 대여를 이용하는 것으로 해석 가능 |
(날씨, 계절에 따른 자전거 대여 수요량)


: 날씨가 맑을수록 자전거 대여 수요가 증가하는 경향이 있음.
: 여름(Summer)과 가을(Fall)에서 대여량이 가장 높음.
: 봄(Spring)은 대체로 낮은 편, 특히 비나 눈이 오는 날(Spring에서 가장 낮은 막대) 은 확연히 적음.
: 맑은 날(Sunny)만큼은 아니지만 흐린 날(Cloudy)에도 대여량이 많음.
: 겨울(Winter)은 다른 계절보다 전체적으로 대여량이 적음.
(온도에 따른 자전거 대여 수요량)

☑️ 결측치 / 중복값 / 이상치
(결측치)

➡️ train, test 데이터 둘 다 결측치 없음.(NULL = 0)
(중복값)

➡️ train 데이터, test 데이터 둘 다 중복값 또한 없음.
(이상치)

| train 데이터 | test 데이터 |
| : windspeed, casual, registered, count의 경우 이상치가 존재할 수 있는 그래프 개형 | :windspeed의 경우 이상치가 존재할 수 있는 그래프 개형 |
| ✔ 습도의 경우, 0 또는 100에 근접한다면, 사막, 고산지대이거나 열대우림, 바다 한가운데인 경우이기에 이상치일 가능성이 높다. ✔ 풍속의 경우, 20m/s이상만 되어도 걸어다닐 수 없을 정도로 강한 바람이기에 20m/s 이상은 이상치일 가능성이 높다. |
|

(히스토그램과 Q-Q Plot 그래프를 동시에 그리는 함수 정의)

('windspeed'컬럼의 이상치 처리)


: windspeed가 20m/s 이상인 것부터 처리를 하면 데이터 손실이 있을 것 같아 30m/s이상인 값들을 windspeed 컬럼들 값의 평균값으로 대체했다.

('count'컬럼의 이상치 처리)

: 히스토그램에서 자전거 대여량 데이터는 정규성을 따르지 않으며, 오른쪽으로 긴 꼬리를 가진 분포 (Right-Skewed Distribution) 분포를 보인다.
: QQ Plot 좌측 하단과 우측 상단에 몇 개의 극단적인 이상치가 존재한다.
➡️ 'count' 컬럼의 이상치는 노이즈가 아닌 실제 수요일 가능성이 있기에 제거하지 않았다.(의미 있는 신호)
(등록의 유무에 따른 시간별 이상치 확인)


: casual 컬럼에 대한 이상치 경우, 점심시간대와 출퇴근 시간 이외의 시간대에서의 이상치가 의심스럽다.
(등록된 사용자의 대여 수애 따른 이상치 확인)


: registered 컬럼에 대한 이상치 경우, 출퇴근 시간대라는 근거가 명확해보인다.
(IQR 를 활용해, 특정 조건에서의 'casual' 이상치 확인)

: 이상치 탐색을 위해 casual(비회원 대여량) 컬럼의 3사분위(Q3) 값이 116.5임을 확인하고, 밤 9시 이후(hour ≥ 21) 데이터를 출력한 결과, 해당 데이터는 모두 7월 4일(공휴일)이었다. 공휴일에는 야외 활동이 활발해 자전거 대여량이 증가할 수 있으므로, 이를 이상치가 아닌 정상 데이터로 판단하였다. 따라서, 해당 데이터를 삭제하지 않고 유지하기로 결정하였다.
(데이터 변환)

: 시간에 따른 수요 변동을 확인하고 모델에 반영하기 위해 object(문자열)을 datetime 타입으로 변환 후, (연도, 월, 일, 시간)을 추출하여 각각의 컬럼을 생성했다.
'📗 개인 프로젝트 > 🚲 공유 자전거 수요 예측' 카테고리의 다른 글
| 🚲 공유 자전거 수요 예측 | 4️⃣ 파일 업로드 (0) | 2025.04.21 |
|---|---|
| 🚲 공유 자전거 수요 예측 | 3️⃣ 비즈니스 모델 제안 (0) | 2025.04.21 |
| 🚲 공유 자전거 수요 예측 | 2️⃣ 모델링 (0) | 2025.04.21 |