[TIL] 22.11.07

문종현·2022년 11월 7일
0

TIL

목록 보기
33/119
post-custom-banner

👉 오늘 한 일

  • 타이타닉 앙상블 모델
  • bike sharing demand 경진대회 실습

타이타닉

랜덤포레스트 안에 트리의 개수가 100개가 기본값이라면 그 내부에서도 트리를 100개를 만들기 때문에 디시전트리를 사용할 때보다 속도가 더 걸림

hold-out-validation 을 사용했을 때 중요한 데이터가 train:valid 가 7:3이라면 중요한 데이터가 3에만 있어서 제대로 학습되지 못하거나 모든 데이터가 학습에 사용되지도 않음. 그래서 모든 데이터가 학습과 검증에 사용하기 위해 cross validation을 하게 됨.

bike sharing demand

평가 기준 : RMSLE(Root Mean Squared Logarithmic Error)

데이터 필드 먼저 살펴보기

  • Season : 계절. 1,2,3,4로 Ordinal Encoding(순서가 있는 값)이 되어있음
  • weather : 1이면 맑은 날, 2는 흐린날, 3은 눈,비 오는 날, 4는 폭우, 폭설, 우박 내리는 날

💡EDA
hist로 데이터의 분포를 먼저 살펴봄

scatterplot으로 예측변수와 다른 설명변수와의 상관을 확인할 수 있음

  • 결측치가 있어 보일때 만약 상관이 커보인다면 결측치를 전처리 해줄 수도 있음.
  • 습도와 자전거 대여량을 scatterplot으로 시각화 했을 때, 0으로 된 값이 많아 보이지는 않으며, 습도와 자전거 대여량은 상관이 없어보임
  • 풍속은 시각화해보면 소숫점까지 있지만 분포가 일자로 퍼져있음. 기록 구간이 있을 것 같음

💡 RMSLE(Root Mean Squared Logarithmic Error)
log를 취할 때 1을 더하는 이유?

  • x 가 1보다 작으면 y값이 음수가 나오기 때문에 x가 1 이하의 값이 나오지 않게 하기위해
  • 안그러면 의도치 않은 큰 오차가 나올 수 있음
  • np.log(x+1) == np.log1p(x)
  • np.log()의 밑은 자연상수(e)임

로그를 취하면 skewed 값이 덜 skewed하게 됨(조금 더 정규분포에 가까워지기도 함)

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

RMSLE는 예측과 실제값의 "상대적" 에러를 측정

  • e.g.
실제값: 90, 예측값: 100 일 때

RMSE = 10
RMSLE = 0.1042610...

실제값: 9,000, 예측값: 10,000 일 때
RMSE = 1,000
RMSLE = 0.1053494...

RMSLE의 한계는 상대적 에러를 측정하기 때문에
예를 들자면 1억원 vs 100억원의 에러가 0원 vs 99원의 에러와 같다 라고 나올 수 있음

그리고 RMSLE는 실제값보다 예측값이 클떄보다, 실제값보다 예측값이 더 작을 때 (Under Estimation) 더 큰 패널티를 부여함

배달 시간을 예측할때 예측 시간이 20분이었는데 실제로는 30분이 걸렸다면 고객이 화를 낼 수도 있을 것임. 이런 조건과 같은 상황일 때 RMSLE를 적용할 수 있을 것. 혹은 부동산 가격과 같이 최솟값과 최댓값의 차이가 큰 값에도 주로 사용됨.

  • 그런데 측정 공식은 이 분야에는 이 공식이 딱 맞다라기 보다는 보통 해당 도메인에서 적절하다고 판단되는 공식을 선택해서 사용함.

RMSE와 RMSLE 차이

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

데이콘

  • label encoding, one-hot encoding 시 test 데이터 셋 활용
  • data scaling 적용 시 test 데이터 셋 활용
  • test 데이터 셋에 pd.get_dummies() 함수 적용
  • test 데이터 셋의 결측치 처리 시 test 데이터 셋의 통계 값 활용

-> 모델 학습에서 평가 데이터셋 활용하면 Data Leakage로 test로 인코딩을 하면 안됨

📌오늘의 회고

  • 사실(Fact) : 공유자전거 수요 예측 경진대회 베이스라인 모델을 구축해봤다.
  • 느낌(Feeling) : RMSLE라는 평가지표는 처음 접해봤는데, 오차가 작을수록 가중치를 주는 평가지표라서 자주 쓰일 것 같다.
  • 교훈(Finding) : 판단의 근거를 생각해두자..ㅠ
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글