본문 바로가기
데이터사이언스/머신러닝

특성공학 (Feature Engineering) 모델평가기법

by 짱바람 2023. 4. 21.

1. Data Split과 모델 검증

언제 데이터를 나누는가? 충분히 큰 데이터 세트가 가용할 때이다. 데이터가 작으면 이 작업을 하기 어렵다. 충분히 크다는 것은 굉장히 추상적이다. 알고리즘이나 분석문제에 따라 다를 수 있다. 충분히 큰 데이터가 없을 때에는 교차확인(Cross Validation)을 고려한다.

왜 데이터를 나누는가? 학습에 사용되지 않는 데이터를 사용하여 예측을 수행함으로써 모델의 일반적인 성능에 대한 적절한 예측을 할 수 있다. 우리가 모델을 만들 때 일반적으로 Training, Test로 나눈다. 학습 데이터를 가지고 모델을 만들고 만든 모델을 가지고 이 모델을 평가해야 하는데 성능 평가 시 사용하는 데이터가 Test 데이터이다. 항상 모든 모델은 처음 보는 데이터를 가지고 평가를 받게 된다. 이게 일반화된 모델을 만드는 방법이다.

어떻게 쓸 것인가? Hold-out 또는 Cross validation이 있다. Hold-out은 Traing 하나, Test 하나 이렇게 쪼개는 것이고, Cross validation은 이것을 여러 번 하는 것이다.

Hold-out은 데이터를 두개의 세트로 나누어 각각 Training과 Test 세트로 사용한다. 일반적으로 Training과 Test의 비율은 7:3~ 9:1로 널리 사용하나 알고리즘의 특성 및 상황에 따라 적절한 비율을 사용한다. 기본적으로 Training 데이터가 많아야 한다. 간혹 Training ~ Validation ~ Test로 나누기도 한다. Traing, Validation 합쳐서 Training 데이터라고 한다. Training을 할 때 조절을 해야 할 상수값이 있을 수 있는데, Hyperparameter 값을 조절할 때 사용하는 데이터를 Validation 데이터로 사용한다. 요즘은 잘 안 쓴다. Training으로 모델을 만들고, Test로 평가한다.

Cross Validation (교차검증)은 k-fold cross validation이라고 하며, 일반적으로 k는 10을 사용한다. 전체 데이터 세트를 임의의 k (10) 개의 그룹으로 나누고, 그 가운데 하나의 그룹을 돌아가면서 테스트 데이터, 나머지 k-1 (9)개 그룹은 학습용 데이터 세트로 사용하는 방법이다. 1~9번 데이터로 모델을 만들고 10번 데이터로 평가한다. 그다음에는 1~8, 10번 데이터로 모델을 만들고 9번 데이터로 평가한다. 이럴 경우 모든 데이터가 균등하게 모델을 만드는데 참여하고 모델은 평가하는데 참여한다는 장점이 있다. 데이터가 작으면 작은 데이터를 가지고 실험을 여러 번 할 수 있는 장점도 있다. 이 알고리즘이 적정한가? Hyperparameter 값이 무엇인가를 이 데이터를 가지고 찾을 수 있다. 일반적으로 Hold-out 보다는 현업에는 10-fold를 많이 쓴다.


일반적인 모델 선택과정은 다음과 같다.

  1. 여러 모델을 대상으로 Cross Validation을 수행
  2. 가장 좋은 결과를 낳는 하나 혹은 소수의 모델을 선택
  3. 학습 데이터를 모두 사용하여 모델 생성
  4. 분리해 놓은 평가 데이터로 모델 평가


2. 평가지표

예측 대상이 연속형 수치 데이터인 회귀모델의 경우 평가지표로 MSE, RMSE, MAE, MAPE를  사용한다. 여기서 Error는 오차를 얘기한다. target value에서 내가 만들 모델이 예측한 값을 뺀 것이다. 머신러닝 알고리즘이 성능이 좋아지기 위해서는 오차를 줄여야 한다. 오차를 줄이면 줄일수록 성능이 좋아진다.

예측대상이 범주형 데이터인 분류모델의 경우 평가지표로 Precision, Recall, Accuracy, R1, G를 사용한다. 범주형 데이터는 target value에 문자형, 텍스트가 올 수 있다. O, X냐? 신입사원을 뽑아야 하는가? 아님 말아야 한는가? 등 분류모델의 성능평가는 혼동행렬 (confusion matrix)를 이용한다. 이 표에 대한 명확한 이해가 필요하다.

혼동행렬에서 항상 기준은 내가 만들 모델이 기준이다. 암을 예측하는 모델에 대해 예를 들어보자. 내가 만든 모델에서 암이다고라고 예측하고 실제 암인 경우 TP (True Positive), 암이다라고 예측했으나 실제 암이 아닌 경우 FP (False Positive), 암이 아니라고 예측하고 실제 암인 경우 FN (False Negative), 암이 아니라고 예측하고 실제 암이 아닌 경우 TN (True Negative)이다. False Negative는 비용이나 Risk가 크다.

 

평가지표 Accuracy (정확도)는 전체 중에 맞힌 것으로 계산하는데, 비용이나 Risk를 체크할 수 없다. 편향된 데이터에 대해서 분석하기 어렵기 때문에 현업에서 공식적은 보고서를 만들 때는 사용하지 않는다.

 

Precision (정확률)은 분모에 TP + FP, 분자 TP 오는데 TP + FP는 내가 만든 모델이 암이라고 예측한 값이고 TP는 그중에서 TP 만큼 정답이다.

 

Precision은 내가 만든 모델의 정확도를 얘기한다. Recall (재현율)은 분모에 TP + FN, 분자에 TP가 오는데 TP + FP는 진짜 암에 걸린 사람이고, TP는 그중 TP만큼 재현해 낼 수 있다. 즉 Recall은 암 환자 중에 몇% 만큼 재현해 낼 수 있다는 의미이다. Precision과 Recall은 당연히 크게 나올수록 좋다.

 

Precision과 Recall 평가지표를 하나로 만든 것이 F1이다. F1 score, F1 measure로 Precision과 Recall의 조화평균이다. G는 Precison과 Recall의 기하평균이다.

[ 평가지표 연습 ]
양계 농장에서 암컷 병아리를 감별하는 작업을 하는 감별사 두 명의 작업을 정리해 보니, 감별사 A는 암수 각각 50마리 100마리를 대상으로 암컷 5마리, 수컷 5마리를 잘못 분류하고, 감별사 B는 암수 각각 100마리씩 200마리를 대상으로 암컷은 모두 정확히 분류하였으나 수컷 20마리를 잘못 분류하였다.

  • Q1. Accuracy가 높은 사람은? A: 90/100, B: 180/200 => 동일하다.
  • Q2. Precision이 높은 사람은? A: 45/50, B: 100/120 => A가 더 크다.
  • Q3. 두 감별사의 Recall 값은? A: 45/50, B: 100/100
  • Q4. 정확히 감별한 TP에 대해 100원을 지급할 때 각각 지급액은? A: 45*100 B: 100*100
  • Q5. 오분류한 FP에 대해 400원 벌금을 부과한다면 각각 벌금은? A: 5*400, B: 20*400

오분류 행위 전체에 대해 비용으로 측정하면 다음과 같다.

3. 모델 선택 및 평가

모델의 평가에서 가장 널리 사용되는 지표는 예측력이다. 모델 평가에서 제일 중요한 것이 성능이다. 회귀 모델의 평가에는 오차의 크기가 작을수록 좋은 것이다, 분류 모델의 평가에는 정확도 개념 사용하여 높을수록 좋다.

예측력이 유일한 지표는 아니며, 지표들이 독립적이지 않으므로 입체적인 고려가 필요하다.
 - 해석력: 입력과 출력 간의 관계를 잘 설명하는가?
 - 효율성: 유사한 성능을 보이는 경우, 적은 입력 변수로 모델을 구축하는가?
 - 안정성: 새로운 데이터 세트에도 같은 성능의 결과를 나타내는가?

댓글