본문 바로가기
멋쟁이사자처럼 AIS7/오늘코드

[1107] 피처 선별 등의 머신러닝 접근법과 RMSLE

by YeonGun M 2022. 11. 7.

1. 하이퍼 파라미터 튜닝 (복습)

보통은 RandomizedSearchCV로 범위를 줄인 다음 GridSearchCV로 찾음

1.1. GridSearchCV

지정된 조합만 보기 때문에 해당 그리드를 벗어나는 곳에 좋은 성능을 내는 하이퍼파라미터가 있다면 찾지 못하는 단점이 있습니다.

1.2. RandomizedSearchCV

랜덤한 값을 넣고 하이퍼파라미터를 찾습니다. 처음에는 범위를 넓게 지정하고 그 중에 좋은 성능을 내는 범위를 점점 좁혀가면서 찾습니다.

  • Fitting 5 folds for each of 5 candidates, totalling 25 fits :
    5 fold 는 cv 조각 5개를 의미하며 5 candidates 는 n_iter를 의미합니다.

랜덤포레스트 안에 트리의 개수가 100개가 기본값이라면 그 내부에서도 트리를 100개를 만들기 때문에 디시전트리를 사용할 때보다 속도가 더 걸린다는 점도 함께 알아주세요!

 

2. Bike Sharing Demand

  • 매 시간 자전거 대여 수요 예측 문제
  • 평가기준 : RMSLE(RMSE + log)

2.1 Data Fields

  • datetime : hourly date + timestamp
  • season - 1 = spring, 2 = summer, 3 = fall, 4 = winter
  • weather 는 1이면 맑은 날, 2는 흐린날, 3은 눈,비 오는 날, 4는 폭우, 폭설, 우박 내리는 날
  • holiday - whether the day is considered a holiday
  • season 은 계절로 1,2,3,4로 ordinal encoding(순서가 있는 값)으로 인코딩이 되어 있다.
  • workingday - whether the day is neither a weekend nor holiday
  • weather
    1: Clear, Few clouds, Partly cloudy, Partly cloudy
    2: Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist
    3: Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds
    4: Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog
  • temp - temperature in Celsius
  • atemp - "feels like" temperature in Celsius 체감온도
  • humidity - relative humidity
  • windspeed - wind speed
  • casual - number of non-registered user rentals initiated
  • registered - number of registered user rentals initiated
  • count - number of total rentals

2.2 EDA의 중요성

  • day 피처를 삭제해야 하는 이유
    ⇒ 데이터셋 분할이 19-20일 기준으로 진행되어 train과 test 데이터셋이 다름
  •  
  • Untitled
  • month 피처를 삭제해야 하는 이유
    ⇒ 월이 해마다 비슷한 값이 아니라 2배 정도 차이 납니다. 그런데 월을 넣어주면 월은 2배 정도 차이가 있음에도 오해의 소지가 있을 수 있습니다.
    ⇒ 같은 달인데 값이 차이가 많이 나기 때문에 혼란이 있을 수 있습니다.
  • Untitled

2.3 RandomForestRegressor

criterion 파라미터만 다르고 나머진 RandomForestClassifier와 동일

  • criterion : {"squared_error", "absolute_error", "poisson"}

2.4 CV

  • cross_val_predict : 예측한 predict 값을 반환하여 직접 계산해볼 수 있음
  • cross_val_score, cross_validate : 스코어를 조각마다 직접 계산해서 반환

 

3. 회귀의 평가지표

3.1 지난 수업 복습(성민님 필기)

3.1.1 MAE

  • 모델의 예측값과 실제 값 차이의 절대값 평균
  • 절대값을 취하기 때문에 가장 직관적임

3.1.2 MSE

  • 모델의 예측값과 실제값 차이의 면적의(제곱)합
  • 제곱을 하기 때문에 특이치에 민감하다.

3.1.3 RMSE

  • MSE에 루트를 씌운 값
  • RMSE를 사용하면 지표를 실제 값과 유사한 단위로 다시 변환하는 것이기 때문에 MSE보다 해석이 더 쉽다.
  • MAE보다 특이치에 Robust(강하다, 덜 민감하다)

3.2 RMSLE(Root Mean Squared Logarithmic Error)

Untitled

  • RMSLE는 RMSE 와 거의 비슷하지만 오차를 구하기 전에 예측값과 실제값에 로그를 취해준 것
  • x 가 1보다 작으면 마이너스 무한대로 수렴하기 때문에 1을 더해서 최솟값을 1로 설정

3.2.1 📢 로그를 취하면 skewed 값이 덜 skewed(찌그러지게) 하게 된다.

Untitled

3.2.2 📢 RMSLE는 예측과 실제값의 "상대적" 에러를 측정해준다

  • 성민님 예시RMSE = 10
    RMSLE = 0.1042610...RMSLE의 한계는 상대적 에러를 측정하기 때문에
    예를 들자면 1억원 vs 100억원의 에러가 0원 vs 99원의 에러와 같다 라고 나올 수 있습니다.
  • 실제값: 9,000, 예측값: 10,000 일 때,
    RMSE = 1,000
    RMSLE = 0.1053494...
  • 실제값: 90, 예측값: 100 일 때,
  • 조은님 예시1) 2억원짜리 집을 4억으로 예측
    2)100억원짜리 집을 110억원으로 예측비율 오류로 봤을 때 1)은 2배 잘못 예측, 2)10% 잘못 예측
  • Absolute Error 절대값의 차이로 보면 1) 2억 차이 2) 10억 차이
    Squared Error 제곱의 차이로 보면 1) 4억차이 2) 100억차이
    Squared Error 에 root 를 취하면 absolute error 하고 비슷해집니다.
  • 부동산 가격으로 예시를 들면

3.2.2

📢 log를 취하기 때문에 오차가 작은 값에 더 패널티가 들어간다

⇒ 작은 오차를 더 크고 과장되게 함

UntitledUntitled

[ 참고(규호님)]

  • RMSE: 오차가 클수록 가중치를 주게 됨(오차 제곱의 효과)
  • RMSLE: 오차가 작을수록 가중치를 주게 됨(로그의 효과)
  • MAE: 가중치 없음(제곱, 로그 둘 다 없음)

⚠️ 진리의 케바케로 적재적소에 써먹음. 답은 없다.
RMSLE 는 부동산 가격 등과 같이 최솟값과 최댓값의 차이가 큰 값에 주로 사용됩니다. 그런데 측정 공식은 이 분야에는 이 공식이 딱 맞다라기 보다는 보통 해당 도메인에서 적절하다고 판단되는 공식을 선택해서 사용합니다

3.2.5 🖥️ CODE

  • np.log()를 이용해 직접 구하기
(((np.log(y_train + 1) - np.log(y_valid_pred + 1)) ** 2).mean())** 0.5
  • np.log1p()를 이용해 구하기
(((np.log1p(y_train) - np.log1p(y_valid_pred)) ** 2).mean())** 0.5
  • sklearn의 코드를 사용하기
from sklearn.metrics import mean_squared_log_error
msle = mean_squared_log_error(y_train, y_valid_pred)
msle ** (1/2)

 

3.2.6 np.log()

np.log() : 밑이 자연상수(e)인 자연로그이다.

  • 자연상수(e)
    파이(π)도 숫자만 보면 3.14159... 처럼 그냥 보면 아무 의미없어 보이는 숫자지만 사실은 원의 둘레, 넓이 등을 계산할때 도움을 주는 것 처럼, 자연상수 (e)는 자연의 연속 성장을 표현하기 위해 고안된 상수입니다. 100%의 성장률을 가지고 1회 연속 성장할 때에 얻게되는 성장량을 의미합니다.

댓글