훈련/검증/테스트(train/validate/test) 데이터 분리
- 캐글은 보통 데이터셋을 훈련/테스트로 나누어 제공한다.
- 테스트 데이터는 정답 컬럼이 지워진 채로 제공된다.
1 |
|
- 테스트 데이터에서는 타겟 정보를 제외해 놓았다.
- 그 이유는 모델의 일반화 성능을 올바르게 측정하기 위함이다.
- 검증셋이 필요한 이유는,
- 훈련셋으로 모델을 한 번에 완전하게 학습시키기 어렵고,
- 훈련셋으 다르게 튜닝된 여러 모델을 학습 후 어떤 모델이 학습이 잘 되었는지 검증하고 선택하는 과정이 필요기 때문이다.
- 훈련/검증셋로 좋은 모델을 만들어 낸 후 최종적으로 테스트셋에서 단 한번의 예측 테스트를 진행한다.
- 최종 테스트 결과가 마음에 들지 않는다고 모델을 또 수정한다면 그 모델은 테스트셋에 과적합하여 일반화 성능이 떨어진다.
3개의 데이터셋로 나누는 것이 머신러닝에서 중요한 이유
- 훈련데이터는 모델을 핏(Fit)하는데 사용된다.
- 검증데이터는 예측 모델을 선택하기 위해 예측의 오류를 측정할 때 사용한다.
- 테스트데이터는 일반화 오류를 평가하기 위해 선택된 모델에 한하여 마지막에 한 번만 사용한다.
- 훈련이나 검증과정에서 사용하지 않도록 주의해야한다.
- 테스트데이터가 유출(leak)되어 훈련/검증과정에 사용되면 모델을 잘못 평가하게 된다.
모델검증
- 학습 모델 개발 시, 모델 선택(Model Selection)을 수행해야 한다.
- 이 때 하이퍼파라미터(HyperParameter) 튜닝을 하게 되는데 튜닝의 효과를 확인하기 위해서 검증셋이 필요하다.
- 하이퍼파라미터는 연구자가 수정할 수 있는 값이다.
(학습률, Optimizer, 활성화 함수, 손실 함수 등 다양한 인자)
- 하이퍼파라미터는 연구자가 수정할 수 있는 값이다.
- 테스트셋으로는 하이퍼파라미터 튜닝을 절대로 하면 안된다.
- 데이터가 많은 경우 세가지로 나누면 되지만, 데이터수가 적은 경우 K-fold 교차검증을 진행할 수 있다.
(이 때도 테스트셋은 미리 떼어 놓아야 한다.)
캐글의 데이터셋 나누기
- 훈련 데이터를 훈련/검증셋으로 나눈다.
- 사이킷런(Sklearn)의
train_test_split
을 사용한다.
1 |
|
분류(Classification) 문제
- 분류 문제는 회귀 문제와 다른 기준으로 기준 모델을 설정한다.
- 다수 클래스를 기준모델로 정하는 방법을 사용한다.
- 회귀 문제: 타겟 변수의 평균값
- 분류 문제: 타겟 변수에서 가장 빈번하게 나타나는 범주
- 시계열 문제: 어떤 시점을 기준으로 이전 시간의 데이터
- 분류 문제에서는 타겟 변수가 편중된 범주 비율을 가지는 경우가 많다.
- 편중된 다수 모델을 쓰지 않고 적은 모델을 사용하는 경우 착각이 일어날 수 있다.
- 만약 다수 모델의 비율이 90%일 경우 정확도도 90%가 될 수 있는데, 그것보다 좋은 모델을 만들기 위해 노력해야 한다.
타겟 범주 비율 확인
1 |
|
범주 0(majority class)으로 예측 수행
1 |
|
분류의 평가지표(evaluation metrics)
- 회귀 평가 지표를 분류에 사용할 수 없다.
- 분류 문제에서는 정확도를 평가지표로 사용한다.
- Accuracy = $\frac{올바르게 예측한 수} {전체 예측 수}$ = $\frac{TP + TN} {P + N}$
1 |
|
로지스틱 회귀(Logistic Regression)
먼저 선형회귀 모델 사용
1 |
|
가상의 테스트 케이스
1 |
|
- 회귀 모델이기 때문에 타겟 변수값이 음수에서 양수까지 나타나는데 생존인지 아닌지 분명하게 결과를 알 수 없다.
- 게다가 회귀이기 때문에 분류모델에 사용하는 평가 지표를 사용할 수 없다.
로지스틱 회귀 모델
- 로지스틱 회귀를 사용하면 타겟 변수의 범주로 0과 1을 사용할 수 있으며 각 범주의 예측 확률값을 얻을 수 있다.
- 로지스틱 회귀 모델의 식은 아래와 같다.
\(\large P(X)={\frac {1}{1+e^{-(\beta _{0}+\beta _{1}X_{1}+\cdots +\beta _{p}X_{p})}}}\) \(0 \leq P(X) \leq 1\)
- 로지스틱 회귀는 로지스틱 함수, 시그모이드 함수 형태로 표현된다.
- 기준값은 0.5이다.
- 결과적으로 관측치가 특정 클래스에 속할 확률값으로 계산된다.
- 분류 문제에서는 확률값을 사용하여 분류하는데, 확률값이 정해진 기준값 보다 크면 1 아니면 0으로 예측한다.
로짓 변환(Logit Transformation)
- 로지스틱 회귀의 계수는 비선형 함수 내에 있어서 직관적으로 해석하기 어려운데, 오즈(Odds)를 사용하면 선형결합 형태로 변환 가능해 보다 쉽게 해석이 가능하다.
- 오즈는 실패 확률에 대한 성공 확률의 비인데 예를들어 오즈값이 4면, 성공 확률이 실패 확률의 4배라는 뜻이다.
- 분류 문제에서는 클래스 1 확률에 대한 클래스 0 확률의 비라고 해석하면 된다.
- $Odds = \large \frac{p}{1-p}$,
- p = 성공 확률, 1-p = 실패 확률
- p = 1 일때 odds = $\infty$
- p = 0 일때 odds = 0
- 로짓 변환(Logit transformation)은 오즈에 로그를 취해 변환하는 것이다.
- 로짓 변환을 통해 비선형 형태인 로지스틱 함수 형태를 선형 형태로 만들어 회귀 계수의 의미를 해석하기 쉽게 하는데, 특성 X의 증가에 따라 로짓(ln(oddx))이 얼마나 증가 또는 감소 했다고 해석할 수 있다.
(odds 확률로 해석을 하려면 exp(계수) = p 를 계산해서 특성 1단위 증가당 확률이 p배 증가한다고 해석을 할 수 있다.) - 기존 로지스틱형태의 y 값은 0~1의 범위를 가졌다면 로짓은 - ∞ ~ ∞ 범위를 가진다.
로지스틱 회귀 vs 선형회귀
1 |
|
타이타닉 데이터 사용 모델
- 모델에 적용하기 전 데이터 변환을 수행한다.
OneHotEncoder
SimpleImputer
StandardScaler
1 |
|
- 사용 가능한 모든 변수를 선택한다.
['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
PassengerId
,Name
,Cabin
,Ticket
를 사용하지 않는 이유는,- 아이디나 이름 같은 특성을 가진 것들은 샘플별로 모두 다르기 때문에 일반화를 하기 위한 것에 도움이 되지 않는다.
- 캐빈은 범주의 종류 너무 많고 결측치가 많다.
- 티켓도 범주 종류가 너무 많다.
- 사용하고자하는 특성에 대해
vaue_counts
로 범주를 확인해야 한다.
1 |
|
1 |
|
모델을 테스트셋에 적용 후 캐글에 제출
1 |
|
1 |
|
참조
- Machine Learning: Validation vs Testing
- Overfitting 4: training, validation, testing
- StatQuest: Logistic Regression
- How (and why) to create a good validation set
- Logistic Regression
- Cross Validation
- Training, Validation, and Testing Data Sets
- R for Data Science, Hypothesis generation vs. hypothesis confirmation -How (and why) to create a good validation set -Model Evaluation -A baseline for classification can be the most common class in the training dataset