앞서 전처리를 통해 데이터셋의 결측값을 없애 모델링이 가능하도록 만들었다.
이제 본격적으로 모델링을 실습해본다.
모델링은 쉽게 y = ax + b 방정식의 가장 정확한 y값을 예측해낼 수 있는 a, x, b를 찾는 과정이라 할 수 있다.
먼저 몇개의 x를 사용할지 결정해야 한다.
count와 상관성이 가장 높은 아래의 3가지 변수를 x1, x2, x3로 사용할 것이다.
1) 시간
2) 1시간 전 온도
3) 1시간 전 풍속
그리고 변수를 지정해 준다.
features = ['hour', 'hour_bef_windspeed', 'hour_bef_windspeed']
x_train = train[features]
y_train = train['count']
x_test = test[features]
데이터의 크기를 살펴보면
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
모든 데이터가 빠짐없이 변수로 지정된 것을 확인할 수 있다.
x는 어떻게 할지 정했고 이제 a와 b를 설정하면 되는데, 이것은 파이썬이 최적의 값을 찾아준다.
우리는 어떤 알고리즘을 사용할지만 정하면 된다.
예측력이 우수한 알고리즘중 하나인 랜덤포레스트를 사용할 것이다.
간단하게 다수의 의사결정나무를 만들어 평균을 구하는 방법이라고 할 수 있다.
이제 모델 3가지를 구축한다.
model100 = RandomForestRegressor(n_estimators=100, random_state=0)
model100_5 = RandomForestRegressor(n_estimators=100, max_depth=5, random_state=0)
model200 = RandomForestRegressor(n_estimators=200)
중요한 하이퍼 파라미터를 살펴보면,
n_estimators : 의사결정나무의 수 (디폴트 100)
random_state : 부트스트랩을 조정하는 역할을 함. 이번 실습에서는 0으로 고정하여 어떠한 환경에서도 똑같은 결과값이 나오도록 할것이다.
max_depth : 노드의 깊이를 지정. 모델의 과대적합(over fitting)을 방지하기 위해 사용
이러한 하이퍼파라미터들을 다양하게 조정하여 정확한 모델을 만드는 것이 모델링의 목표이고,
이렇게 모델을 조정하여 최적의 예측값을 찾아나가는 과정을 튜닝이라고 한다.
이제 모델을 학습한다.
model100.fit(x_train, y_train)
model100_5.fit(x_train, y_train)
model200.fit(x_train, y_train)
그리고 예측된 값을 변수에 저장하고
ypred1 = model100.predict(x_test)
ypred2 = model100_5.predict(x_test)
ypred3 = model200.predict(x_test)
제출을 위한 답안지용 파일에 데이터를 옮긴다.
submission['count'] = ypred1
submission
제출용 파일에 데이터가 잘 저장된 것을 확인했고, csv형식으로 드라이브에 생성해준다.
submission.to_csv('model100.csv', index = False)
생성된 파일은 PC에 저장해준다.
마찬가지로 model100_5와 model200도 저장해주고 홈페이지에 제출하면 끝이다.
채점 결과 model100_5의 값이 가장 정확도가 높은 것으로 나타났다.
채점기준은 RMSE라는 오차를 최소화하는 방법이라 점수가 낮을수록 정확하게 예측했다는 의미이다.
모델 튜닝을 통해 최적의 모델을 만드는 것이 목표이고, 하이랭커들은 30점대 초반의 점수를 기록하고 있다.
끝