본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 8주차] 랜덤서치, hold-out-validation, Bike Sharing Demand Data, 랜덤포레스트Regressor, RMSLE, Data Leakage

by aimaimee 2023. 4. 25.

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의 / 221107 0504 실습파일 : 랜덤서치, 홀드아웃 validation / 0601 실습파일 : Bike Sharing Demand, RMSLE, logloss, data leakage, NDCG

221107

✅ 0504 실습파일

GridSearchCV

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

RandomSearchCV

  • 랜덤한 값을 넣고 하이퍼파라미터를 찾는다.
  • 처음에는 범위를 넓게 지정하고,
  • max_depth : The maximum depth of the tree : max_depth를 랜덤값으로 지정하기 위해 특정 범위를 지정하는 것
  • max_features : The numbr of features to consider when looing for the best split: 특정범위. 0에서 1사이의 값
  • best_estimator_ : 어떤 분류기가 가장 좋은 성능을 내는지
  • best_score_ : 가장 좋은 성능을 낸 점수
  • cv_results_ : cv는 cross validation의 약자로 어떤 조각이 어떤 성능을 냈는지를 알려준다.
    • DataFame 형식으로 보면 보기 편하다.
    • split_test_score가 5개가 나오는 이유는 : cv 기본값이 5라서
  • Fitting 5 folds for each of 5 candidates, totalling 25 fits
    • 5 fold는 cv 조각 5개, 5 candidates는 n_iter
    • 랜덤포레스트 안에 트리의 갯수가 100개가 기본값이라면, 그 내부에서도 트리를 100개를 만들기 때문에 디시전트리를 사용할 때보다 속도가 더 걸린다.
  • 7:3이나 8:2로 나누는 과정은 hold-out-validation
    • hold-out-validation은 중요한 데이터가 train:valid가 7:3이라면, 중요한 데이터가 3에만 있어서 제대로 학습되지 못하거나 모든 데이터가 학습에 사용되지도 않는다.
    • 모든 데이터를 학습과 검증에 사용하기 위해 cross validation을 한다.
    • cross validation은 속도가 오래걸린다. 하지만 결과에 대한 신뢰가 중요할 때 사용한다.
    • 사람의 생명을 다루는 암여부를 예측하는 모델 등에서 신뢰 있게 검증이 필요하다.
    • hold-out validation은 빠르다는 장점이 있지만 신뢰가 떨어지는 단점이 있다.
    • hold-out validation은 당장 비즈니스에 적용해야 하는 문제에 빠르게 검증해보고 적용해보기 좋다.

✅0601 실습파일(Bike Sharing Demand)

Evaluation

  • 점수 평가 기준
  • RMSLE은 우리가 해봤던 RMSE의 공식과 비슷해보인다.

Q. 이 문제는 어떤 것을 예측할까? 대회 이름에 demand가 들어가면 대부분 수요예측 문제

  • 시간대별 대여된 자전거 수

Data Fields

  • season은 계절 1,2,3,4로 ordinal encoding(순서가 있는 값)으로 인코딩 되어 있다.
  • weather 는 1이면 맑은 날, 2는 흐린날, 3은 눈,비 오는 날, 4는 폭우, 폭설, 우박 내리는 날
  • feels like temperature in Celsius == 체감온도

데이터셋

  • 당뇨병 데이터셋처럼 결측치가 없다.

EDA

  • holiday 아닌 날이 훨씬 많고, workingday인 날이 훨씬 많다.
  • weather은 1일수록 좋은 날. 맑은 날이 많다.
  • humidity와 windspeed가 0일 수 없을 것 같은데, 0이 있다.
  • year는 2011, 2012 자료만 있다. (코로나 분석 데이터 같다.)

windspeed

  • 연속된 수치데이터 이지 않을까? 그런데 기록된 구간이 있는듯 나눠져있다.
  • 범주형 scatterplot을 보는 것 같다.
  • 0과 10 사이에 공백이 존재한다.
  • 0이 많다.

humidity

  • 결측치가 있어보일 때 상관이 커보이면 결측치를 전처리 해줄 수 있다.
  • 하지만 자전거 대여량과 큰 상관이 없어보인다.

temp와 atemp

  • 10개 정도의 데이터를 제외하면 강력한 양의 상관관계를 가진다.
  • 이상치라기 보다는 오류 데이터에 가까워보인다.
  • 현실세계에서는 가끔 오입력되는 데이터가 있을 수도 있다.
  • 오류 데이터의 체감 온도가 12.12인데 워싱턴 DC의 9월 체감 온도는 30도 정도

weather와 count

  • Q. 왜 폭우와 폭설이 내리는 4에서 평균 자전거 대여량이 3(눈, 비내리는 날)보다 많을까?

랜덤포레스트Regressor

  • criterion 은 squared_error가 기본값
  • criterion : squared_error, absolute_error, poisson

cross_val_predict

  • cross_val_predict는 예측한 predict 값을 반환하여 직접 계산해볼 수 있다.
  • 다른 cross_val_score, cross_validate는 점수를 조각마다 직접 계산해서 반환해준다.

MAE, MSE, RMSE

  • RMSE : MAE보다 특이치에 Robust(강하다, 덜 민감하다)

RMSLE

  • Q. 왜 1을 더한 후에 로그를 취할까?
  • x가 1보다 작으면 음수가 나오기 때문에 1을 더해서 1 이하의 값이 나오지 않게 하기 위해
  • 정답인 count에 +1을 해서 0보다 작은 값이 있을 때 마이너스 무한대로 수렴하는 것을 방지하고 log를 취하고 시각화
  • 로그를 취하면 skewed 값이 덜 skewed하게 된다.
  • 로그를 취하면 분포가 좀 더 정규분포에 가까워지기도 한다.
  • Q. 마이너스 값이 나왔는데 MSE를 계산한다면 어떻게 될까?
  • Q. 로그를 취하기 전에 모든 값에 1을 더해서 가장 작은 값이 될 수 있는 0이 1이 되도록 더해주는 이유는 마이너스 값이 나왔는데 MSE를 계산한다면 어떻게 될까요?
  • 의도치 않은 큰 오차가 나올 수 있기 때문에 가장 작은 값이 될 수 있는 0에 1을 더해서 마이너스 값이 나오지 않게 합니다.
  • train의 최솟값은 1이지만 test의 예측값이 0이 나올수도 있기 때문이다.
  • mean_squared_log_error(y_train, y_valid_pred) ** 0.5
  • 부동산 가격으로 예시를 들면, 2억원자리 집을 4억으로 예측, 100억원짜리 집을 110억원으로 예측
  • AE 절대값의 차이로 보면, 1은 2억차이, 2는 10억차이
  • SE 제곱의 차이로 보면 1은 4억차이, 2는 100억차이
  • SE에 루트를 취하면 absolute error 하고 비슷해진다.
  • 비율(퍼센트) 오류로 봤을 때 1은 2배 잘못 예측, 2는 10퍼센트 잘못 예측
  • 자전거 대여수는 대부분 작은 값에 몰려있다.
  • log를 취하고 계산하게 되면 오차가 큰 값보다 작은값에 더 패널티가 들어가게 된다.
  • 로그 그래프의 기울기를 보면 작은 값에 기울기가 더 가파르고 값이 커질수록 기울기가 완만해 진다.
  • RMSE: 오차가 클수록 가중치를 주게 됨(오차 제곱의 효과)
  • RMSLE: 오차가 작을수록 가중치를 주게 됨(로그의 효과)
  • MAE: 가중치 없음(제곱, 로그 둘 다 없음)

점수 바꿔보기

  • 월이 해마다 비슷한 값이 아니라 2배 정도 차이가 난다. 그런데 월을 넣어주면 월은 2배 정도 차이가 있음에도 오해의 소재가 있을 수 있다.
  • 2011년 12월과 2012년 1월이 거의 비슷하지만, 전체 그래프를 보면 1월과 2월도 2배 차이가 난다.

Q. 마이너스 값에는 로그를 취할 수 없는데 마이너스 값에 로그를 취한다면 어떻게 하면 좋을까?

  • 가장 작은값이 1이 되도록 전체 값에 더해준다.

📌미니프로젝트3

[Data Leakage]
label encoding, one-hot encoding 시 test 데이터 셋 활용
data scaling 적용 시 test 데이터 셋 활용
test 데이터 셋에 pd.get_dummies() 함수 적용
test 데이터 셋의 결측치 처리 시 test 데이터 셋의 통계 값 활용
Q. 왜 train 기준으로 할까?
test를 기준으로 하면 data leakage에 해당. test로 인코딩을 허용하지 않는다.

[데이터가 많을때]
400만개 정도면 샘플로 40만개를 뽑아서 하는 것도 팁.

[logloss]
Q. logloss 사용하는 대회?
https://www.kaggle.com/competitions/sf-crime/overview/evaluation
샌프란시스코 Crime Classification'
엔프로피와 비슷한데 조금 다르다.

[NDCG] Normalized Discounted Cunulative Gain
검색 분야에서 등장한 지표이지만 추천시스템에도 사용된다.
추천 순서ㅔ 가중치를 두어 평가한다.
개념 설명 블로그 : https://sungkee-book.tistory.com/11


✅퀴즈

틀린 문제

  • 3번 문제 : 랜덤포레스트 알고리즘에서 만날 수 있는 트리의 개수를 의미하는 매개 변수는?
    n_estimators
  • 4번 문제 : 지정된 조합만 보기 때문에 해당 그리드를 벗어나는 곳에 좋은 성능을 내는 하이퍼 파라미터가 있다면 찾지 못하는 단점이 있는 하이퍼파라미터 튜닝 방법은?
    그리드서치

맞았는데 다시 보자

  • 5번 문제 : 랜덤서치를 수행했을 때 총 학습 횟수는?
    30번
clf = RandomizedSearchCV(model,
                        param_distributions = param_distributions,
                        n_iter = 6,
                        cv=5,
                        n_jobs=-1,
                        verbose=2,
                        random_state=42)
clf.fit(X_train, y_train)

댓글