작성일: '22.6/19
빅데이터분석기사 실기 작업2유형 대비를 위해 작성함
- Exploratory Data Analysis
- 데이터 차원, 형태 파악하기
- 그래프 그려서 예측변수와 다른 변수와의 상관관계 파악하기
- Tip: kaggle 등의 정리된 데이터를 풀 때에는 train, test
pd.concat
해서 결측치 처리 등을 한번에 처리하고 분리해주는게 편리하다.
- using
select_dtypes()
- numerical 데이터 중에서도 month나 year등의 데이터는 categorical로 분류해주기
apply(str)
- numerical: mean, median, mode 등을 활용하여 데이터 채우기
.fillna(), mean(), median(), mode()
- catergorical:
pd.get_dummies()
또는LabelEncoder
를 활용하여 missing 데이터 없애고, one-hot encoding 해주기 from sklearn.preprocessing import LabelEncoder
- numerical data의 skewness줄이기
from scipy.stats import skew
- skewness를 줄이기위해
np.log1p
를 많이 사용하는데 로그함수는 음수에서NaN
이 출력됨. 즉 값에 음수가 섞여있다면np.log1p
연산시NaN
이 나오게 될 수 있으므로 주의할 것
- train dataset을 대상으로만 제거할것
for col in x_numerical_columns:
col_IQR = x_train[col].quantile(0.75) - x_train[col].quantile(0.25)
x_train = x_train.loc[x_train[col].between(x_train[col].quantile(
q=0.25)-1.5*col_IQR, x_train[col].quantile(q=0.75)+1.5*col_IQR)]
y_train = y_train.loc[x_train.index]
- 제거하는 방법 말고, 아웃라이어를 min-max bound 처리해주는 방법도 있는데, 일종의 전처리함수처럼 사용해도됨
- 전처리함수처럼 사용한다는 의미는 test data도 전처리할때 해주어야한다는 말
- 물론 안해줬을 때, 성능이 더 잘나온다면, 성능을 기준으로 결정해야할 문제
- 필요하다면
- 모델 선택 가이드: sklearn
- Dataset:
train_test_split
- CrossValidation using
cross_val_score, KFold
from sklearn.model_selection import train_test_split, KFold, cross_val_score
- Preprocessing:
StandardScaler, RobustScaler, LabelEncoder, MinMaxScaler
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder
- Regressor:
LinearRegression, RidgeCV, LassoCV, ElasticNetCV...
- Classifier:
KNeighborsClassifier, RandomForestClassifier, GradientBoostingClassifier ...
from xgboost import XGBClassifier
- Easy modeling:
make_pipeline
k_fold = KFold(n_splits = 10, shuffle = True, random_state = 0)
kNN = make_pipeline(RobustScaler(),KNeighborsClassifier(n_neighbors=13))
score = cross_val_score(kNN, train_data, y_label, cv= k_fold, n_jobs =1 , scoring='accuracy')
print(np.mean(score))
- 참고
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler, RobustScaler, MinMaxScaler
- Confusion matrix, ROC curve
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
print(f"randomforest의 confusion mtx: {confusion_matrix(y_val, y_rf_val_pred)}")
print(classification_report(y_val, y_rf_val_pred))
roc_auc = roc_auc_score(y_val, clf_rf.predict_proba(x_val)[:, 1])
print(roc_auc)
- graph visualization
-
주석을 참고하며, 상기 플로우에 따라 문제를 풀었을 때의 방식을 참고해보자.
-
테스트케이스에서의 성능이 너무 낮으면 roc-auc score가 낮으니, 너무 단순하게 모델 하나 하고 끝내버리면 안되는듯함 (6/21)
-
관련하여 강의를 하나 샘플로 들어보자. 갈라파고스화되면 안되니까