728x90
728x90
- 예측모델을 위한 타겟을 올바르게 선택하고 그 분포를 확인할 수 있다.
- 테스트/학습 데이터 사이 or 타겟과 특성들간 일어나는 정보의 누출(leakage)을 피할 수 있다.
- 상황에 맞는 검증 지표(metrics)를 사용할 수 있다.
Data science Workflow
*데이터 사이언티스트 실무 프로세스
- 비즈니스 문제
- 실무자들과 대화를 통해 문제를 발견
- 데이터 문제
- 문제와 관련된 데이터를 발견
- 데이터 문제 해결
- 데이터 처리, 시각화
- 머신러닝/통계
- 비즈니스 문제 해결
- 데이터 문제 해결을 통해 실무자들과 함께 해결
* Project process( 먼저 데이터 수집 Data Collection )
== * 해결하고자 하는문제는 무엇인가?
* 답을 얻기 위해 필용한 data는?
* data와 결과는 어떤 상관관계 ?
- 예측해야하는 Target 명확히 설정, Target 분포확인(균형, 불균형(=대표적)) 왜?
- 회귀, 분류 문제인지 확인 ( 회귀의 경우 log transform )
- 해당 문제 평가지표 설정
- 특성공학 FE (= Descriptive Statistics 기술통계 ( barplot, violine ... )
- E. D. A 탐구적 자료분석(= 특징( 패턴, 특이점 ) ) ==> clustering, classification, Deep learning ...
- Hypothesis testing 가설검정(= P-value, T-test, Likelihood, cross-validation .....)
- Estimation 추정
- 정보누수(leakage) 확인
* 정보누수(leakage)
- Target 변수 외에 예측시점에 사용할 수 없는 data가 포함되어 학습이 이루어질 경우
- train, val 완전히 분리가 안되었을때
==> 타겟을 통해서 새로운 특성을 만든 경우 원래 타겟 특성을 삭제 해줘야한다
*평가지표( Metrics )
분류문제에서 타겟 클래스비율이 70% 이상 차이날 경우에는 정확도만 사용하면 판단을 정확히 할 수 없습니다.
정밀도, 재현율, ROC curve, AUC 등을 같이 사용하여야 합니다.
- 대부분 scikit-learn 분류기들은 class_weight 와 같은 클래스의 밸런스를 맞추는 파라미터를 가지고 있습니다.
- ==> class_weight= 'balance'
-
- 데이터가 적은 범주 데이터의 손실을 계산할 때 가중치를 더 곱하여 데이터의 균형을 맞추거나
- 적은 범주 데이터를 추가샘플링(oversampling)하거나 반대로 많은 범주 데이터를 적게 샘플링(undersampling)하는 방법이 있습니다.
from sklearn.metrics import roc_auc_score
y_pred_proba = pipe.predict_proba(X_val)[:, -1]
print('AUC score: ', roc_auc_score(y_val, y_pred_proba))
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
fpr, tpr, thresholds = roc_curve(y_val, y_pred_proba)
plt.scatter(fpr, tpr, color='blue')
plt.plot(fpr, tpr, color='green')
plt.title('ROC curve')
plt.xlabel('FPR')
plt.ylabel('TPR')
# class weights 계산
# n_samples / (n_classes * np.bincount(y))
custom = len(y_train)/(2*np.bincount(y_train))
custom
* target 연속성= 회귀 ( 클래스 비율이 편중되어 있다면 log Transform 사용 )
==> 이상치 제거 안하고 진행
==> TransformedTargetRegressor / (np.log1p, np.expm1) == inverse 무조건 해줘야함
from category_encoders import OrdinalEncoder
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestRegressor
from sklearn.compose import TransformedTargetRegressor
pipe = make_pipeline(
OrdinalEncoder(),
SimpleImputer(),
RandomForestRegressor(random_state=2)
)
tt = TransformedTargetRegressor(regressor=pipe,
func=np.log1p, inverse_func=np.expm1)
tt.fit(X_train, y_train)
tt.score(X_val, y_val)
728x90
'기계학습(ML) > Interpreting Model' 카테고리의 다른 글
n234 Interpreting ML Model( X-AI ) (0) | 2021.06.26 |
---|---|
n233 Feature Importances/ bagging, boosting (0) | 2021.06.26 |
n232 Data Wrangling(랭글링) / merge / groupby (0) | 2021.06.26 |
댓글