
실제상황에서는 앞으로 얻어질 데이터가 test data가 될 수 있기 때문에, 그런 경우에는 지금 가진 데이터로 test data를 따로 나눠서 가질 필요는 없음
train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
cf. X : 행렬 -> 대문자 , y : 벡터 -> 소문자
random_state : 똑같은 랜덤숫자 반복 횟수
stratify : 클래스가 불균형(정상 데이터가 훨씬 많음)이 심할 경우 꼭 설정!
참고로, 과적합인지 발견하려면 train 성능과 test 성능을 비교
train_pred = clf.predict(X_train)
accuracy_score(y_train, train_pred)
※ train과 test만 분리하면 문제가 될 수 있음. 머신러닝 모델의 하이퍼파라미터(4. 모델 학습 : random_state= )를 바꾸면서 성능을 봐야하는데 테스트 데이터는 맨 마지막 최종 평가 때만 사용. 파라미터 튜닝할 때 중간에 테스트할(검증할 validation) 용도가 필요.

※ 특정 한 부분만 validation 하면 아쉬워서 cross validation 출현


데이터가 적거나 골고루 평가하고 싶은 경우 적합하나, 데이터가 너무 많을 때는 시간이 너무 오래 걸리고 과정이 과하게 많아져서 부적합
max_depth : 트리를 얼마나 깊게(많이) 설정할 것인가 지표
GridSearchCV(estimator, param_grid, cv(=폴더 개수), scoring(=성능지표), n_job(웬만하면 -1로 설정하면 됨))

중앙값이나 최빈값(범주형 데이터)을 train 데이터에서만 뽑아옴
test 데이터는 마지막 최종 결과를 위해 미리 알아서는 안 되는 데이터.
정보를 알아야 하는 게 있다면 그건 오로지 train 데이터로만.
그러므로 fillna() 과정 : test data에도 train 데이터로부터 뽑은 값으로 결측치 채움
