멋쟁이 사자처럼 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)
댓글