Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

7 P2 프로젝트: 자전거 대여 수요 예측

Updated: 04 okt 2026

P2 실습에서는 이진 분류, 다중 클래스 분류, 회귀 문제를 다루고 훈련·검증·테스트 데이터의 역할과 일반화 성능을 확인했다.

이번 프로젝트에서는 시간별 자전거 대여 수요를 예측하는 회귀 문제를 해결한다.

프로젝트의 핵심은 단순히 코드를 실행하는 것이 아니라,

문제를 이해하고 → 입력과 타깃을 확인하고 → 평가 방법을 결정하고 → 모델을 설계하고 → 일반화 성능을 판단하는 것

이다.

7.1프로젝트에서 해야 할 일

  1. 데이터와 타깃의 의미를 확인한다.

  2. 예측에 사용하면 안 되는 변수가 있는지 판단한다.

  3. 시간 순서를 고려하여 훈련셋·검증셋·테스트셋을 구성한다.

  4. 회귀 문제에 적절한 출력층, 손실함수, 평가지표를 선택한다.

  5. Keras와 PyTorch에서 모두 기준 모델을 구성하고 훈련한다.

  6. 두 프레임워크에서 훈련·검증 성능과 일반화 상태를 비교한다.

  7. 각 프레임워크에서 일반화 성능을 개선하기 위한 방법을 하나 이상 적용한다.

  8. Keras와 PyTorch의 최종 모델을 각각 테스트 데이터에서 평가한다.

  9. 실제 대여량과 예측 대여량을 비교하고 오차가 큰 사례를 분석한다.

7.2생성형 AI 활용

생성형 AI는 코드 작성·수정, 오류 메시지 해석, Keras와 PyTorch 코드 변환, 그래프 작성, 모델 개선 아이디어 제안 등에 활용할 수 있다.

다만 다음은 직접 확인하고 판단해야 한다.

  • 어떤 변수를 입력으로 사용할 것인가?

  • 어떤 변수가 데이터 누수를 일으킬 수 있는가?

  • 왜 시간 순서를 고려하여 데이터를 나누는가?

  • 어떤 모델 구조와 일반화 방법을 사용할 것인가?

  • Keras와 PyTorch에서 같은 회귀 문제를 어떻게 표현하는가?

  • 두 프레임워크의 결과를 어떻게 비교하고 해석할 것인가?

  • 결과와 오류를 어떻게 해석할 것인가?

프로젝트 마지막에 AI를 어디에 활용했고 무엇을 직접 검증했는지 기록한다.


7.3실행 환경 확인


7.4데이터 불러오기

UCI Bike Sharing 데이터셋의 시간별 데이터(hour.csv) 를 사용한다. 이 데이터에는 2011~2012년의 시간별 자전거 대여량과 날씨·계절·시간 정보가 포함되어 있다.

데이터 불러오기와 기본 전처리 코드는 제공한다. 프로젝트의 중심은 데이터 다운로드 방법이 아니라 회귀 모델의 설계와 평가다.

7.4.1데이터 변수

주요 변수는 다음과 같다.

변수의미
dteday날짜
season계절
yr연도
mnth월
hr시간
holiday공휴일 여부
weekday요일
workingday근무일 여부
weathersit날씨 상태
temp정규화된 기온
atemp정규화된 체감온도
hum정규화된 습도
windspeed정규화된 풍속
casual비등록 이용자의 대여 건수
registered등록 이용자의 대여 건수
cnt전체 자전거 대여 건수

이번 프로젝트의 타깃은 cnt다.

7.4.2문제 1 — 이 문제는 왜 회귀 문제인가?

다음 질문에 답하라.

  1. 입력은 무엇인가?

  2. 타깃은 무엇인가?

  3. cnt는 정수인데도 왜 분류보다 회귀로 다루는 것이 자연스러운가?

  4. 어떤 손실함수와 평가지표를 사용할 수 있는가?

답:

여기에 작성한다.


7.5데이터 누수 확인

원 데이터에는 다음 관계가 있다.

extcnt=extcasual+extregisteredext{cnt} = ext{casual} + ext{registered}

따라서 casual과 registered를 입력으로 사용하면 모델이 예측해야 할 정답을 사실상 입력에서 직접 알 수 있게 된다.

이처럼 예측 시점에는 사용할 수 없어야 할 정보가 모델 입력에 포함되는 현상을 데이터 누수(data leakage)라고 한다.

7.5.1문제 2 — 어떤 변수를 제외해야 하는가?

다음 변수 중 모델 입력에서 제외할 변수를 결정하고 이유를 설명하라.

  • instant

  • dteday

  • casual

  • registered

답:

여기에 작성한다.


7.6시간 순서를 고려한 데이터 분할

자전거 대여 데이터에는 시간의 순서가 있다.

실제 예측 상황에서는 과거의 데이터를 이용하여 이후의 수요를 예측한다. 따라서 여기서는 데이터를 무작위로 섞지 않고 시간 순서대로 나눈다.

앞 70%: 훈련셋 → 다음 15%: 검증셋 → 마지막 15%: 테스트셋

테스트셋은 최종 평가 전까지 사용하지 않는다.

7.6.1문제 3 — 왜 무작위 분할을 사용하지 않았는가?

  1. 이 데이터를 무작위로 섞어 나누면 어떤 문제가 생길 수 있는가?

  2. 일반적인 무작위 K-fold 교차 검증을 그대로 적용하면 왜 실제 예측 상황과 맞지 않을 수 있는가?

  3. 이번 프로젝트의 시간순 분할이 어떤 실제 상황을 모방하는지 설명하라.

답:

여기에 작성한다.


7.7입력 데이터 준비

전처리 자체가 프로젝트의 중심이 되지 않도록 기본 코드를 제공한다.

  • casual, registered, cnt, instant, 날짜 관련 원본 변수는 입력에서 제외한다.

  • 범주형 변수는 one-hot encoding한다.

  • 연속형 변수는 훈련셋의 기준으로 표준화한다.

  • 검증셋과 테스트셋에는 훈련셋에서 학습한 변환을 그대로 적용한다.

7.7.1전처리 확인

  1. one-hot encoding이 필요한 변수들은 어떤 성격의 변수인가?

  2. 표준화 기준을 훈련셋에서만 계산해야 하는 이유는 무엇인가?

  3. X_train.shape[1]이 원래 입력 변수의 개수보다 커진 이유는 무엇인가?

답:

여기에 작성한다.


7.8모델링

이번 프로젝트에서는 Keras와 PyTorch를 모두 사용한다.

가능하면 두 프레임워크에서 은닉층 수와 유닛 수 등 모델 구조를 비슷하게 구성하여 결과를 비교한다.

기준 모델은 P2 실습의 California Housing 회귀 모델을 참고할 수 있지만, 은닉층 수와 유닛 수는 직접 결정한다.

모델을 지나치게 복잡하게 만들기보다, 두 프레임워크에서 같은 회귀 원리가 어떻게 구현되는지 확인하고 기준 모델과 개선 모델의 차이를 설명할 수 있도록 구성한다.

7.8.1공통 모델 설계 원칙

Keras와 PyTorch에서 가능한 한 비슷한 구조를 사용한다.

  • 은닉층 수:

  • 각 은닉층의 유닛 수:

  • 활성화 함수:

  • 출력층:

  • 손실함수:

  • 평가지표:

  • batch size:

  • 최대 epoch:

이 구조를 선택한 이유:

여기에 작성한다.

7.8.2Keras와 PyTorch에서 확인할 점

같은 회귀 문제를 두 프레임워크에서 구현하면서 다음을 비교한다.

  • 모델의 마지막 출력이 어떻게 구성되는가?

  • MSE 손실과 RMSE 평가지표는 각각 어떻게 지정하는가?

  • 훈련 과정은 어떤 부분이 자동화되어 있고 어떤 부분을 직접 작성하는가?

  • 같은 구조를 사용해도 결과가 완전히 같지 않을 수 있는 이유는 무엇인가?

비교하면서 발견한 차이를 간단히 기록한다.


7.9Keras 모델

먼저 Keras에서 기준 모델과 개선 모델을 구성하고 훈련한다.

7.9.1Keras 기준 모델

7.9.2Keras 개선 모델

기준 모델의 검증 결과를 확인한 뒤 다음 방법 중 하나 이상을 선택하여 개선 모델을 만든다.

  • 모델 크기 변경

  • L2 가중치 규제

  • Dropout

  • EarlyStopping

변경 내용과 이유:

여기에 작성한다.


7.10PyTorch 모델

같은 문제를 PyTorch에서도 구현한다. 가능하면 Keras 모델과 비슷한 은닉층 구조를 사용한다.

7.10.1PyTorch 훈련 함수

프로젝트의 중심은 반복문의 문법이 아니라 모델을 비교하고 결과를 판단하는 것이므로 기본 훈련 함수를 제공한다.

7.10.2PyTorch 기준 모델

7.10.3PyTorch 개선 모델

변경 내용과 이유:

여기에 작성한다.


7.11훈련 과정과 일반화 성능 비교

Keras와 PyTorch 모두에서 기준 모델과 개선 모델의 훈련 RMSE와 검증 RMSE를 확인한다.

먼저 각 프레임워크 안에서 기준 모델과 개선 모델을 비교하고, 그 다음 두 프레임워크의 결과를 비교한다.

7.11.1결과 비교와 모델 선택

다음 질문에 답한다.

  1. Keras 기준 모델에서 과대적합이 나타났는가?

  2. PyTorch 기준 모델에서 과대적합이 나타났는가?

  3. 각 프레임워크에서 일반화 성능을 개선하기 위해 무엇을 변경했는가?

  4. 개선 후 검증 RMSE는 어떻게 달라졌는가?

  5. Keras와 PyTorch의 검증 성능은 얼마나 비슷하거나 달랐는가?

  6. 같은 구조를 사용했는데도 결과가 다르다면 가능한 이유는 무엇인가?

  7. 각 프레임워크에서 최종 모델로 어떤 모델을 선택하겠는가?

  8. 단순히 훈련 RMSE가 가장 낮은 모델을 선택하면 안 되는 이유는 무엇인가?

답:

여기에 비교와 판단을 작성한다.


7.12최종 테스트 평가

모델 선택이 끝난 뒤 Keras와 PyTorch에서 선택한 최종 모델을 각각 테스트셋에서 한 번 평가한다.

테스트 결과를 보고 다시 모델을 수정하지 않는다.


7.13실제값과 예측값 비교

최종 모델의 예측값을 이용하여 실제 자전거 대여량과 예측 대여량을 비교한다.

7.13.1오차 분석

  1. 절대오차가 큰 사례를 10개 정도 찾아본다.

  2. 어떤 시간대나 날씨 조건에서 큰 오차가 나타나는지 확인한다.

  3. 대여량이 매우 높은 시점과 낮은 시점 중 어느 쪽에서 예측이 더 어려운가?

  4. 현재 입력 변수만으로 설명하기 어려운 요인은 무엇이 있을까?

답:

여기에 분석을 작성한다.


7.14프로젝트 최종 정리

7.14.1문제와 데이터

무엇을 예측했고 입력과 타깃은 무엇이었는가?

7.14.2데이터 누수

제외한 변수와 그 이유는 무엇인가?

7.14.3평가 설계

데이터를 어떻게 나누었고 왜 시간 순서를 고려했는가?

7.14.4공통 모델 설계

Keras와 PyTorch에서 어떤 구조, 손실함수, 평가지표를 사용했는가?

7.14.5일반화

각 프레임워크에서 과대적합이 있었는가? 어떻게 판단했고 어떤 방법으로 대응했는가?

7.14.6Keras와 PyTorch 비교

두 프레임워크의 구현 방식과 검증 성능에는 어떤 공통점과 차이가 있었는가?

7.14.7최종 결과

Keras와 PyTorch의 테스트 RMSE는 각각 얼마이며, 어떻게 해석할 수 있는가?

7.14.8오류와 한계

어떤 상황에서 오차가 컸으며 현재 모델의 한계는 무엇인가?

7.14.9생성형 AI 활용과 검증

AI를 어디에 활용했고, 어떤 결과를 직접 확인·검증했는가?

7.15제출 전 확인

  • 회귀 문제와 타깃의 의미를 설명했다.

  • 데이터 누수를 일으킬 수 있는 변수를 확인했다.

  • 시간 순서를 고려하여 데이터를 분할했다.

  • 모델 구조와 손실함수·평가지표의 선택 이유를 설명했다.

  • Keras 기준 모델과 개선 모델을 모두 훈련했다.

  • PyTorch 기준 모델과 개선 모델을 모두 훈련했다.

  • 두 프레임워크에서 훈련 성능과 검증 성능을 비교했다.

  • Keras와 PyTorch의 구현 방식과 결과를 비교했다.

  • 각 프레임워크의 최종 모델을 선택하고 근거를 설명했다.

  • 테스트셋은 각 최종 모델의 마지막 평가에만 사용했다.

  • 실제값과 예측값을 비교하고 오류를 분석했다.

  • 생성형 AI 활용 내용과 검증 방법을 기록했다.