[BOOK] 단단한 머신러닝 2 (모델 평가 및 선택)

[BOOK] 단단한 머신러닝 2 (모델 평가 및 선택)

avatar
Wong
2026.01.16조회수 32회

머신러닝의 궁극적인 목적은 주어진 데이터를 통해 패턴을 학습하고, 이를 바탕으로 미지의 데이터에 대해 정확한 예측을 수행하는 것이다. 이때 우리가 만든 모델이 얼마나 우수한지를 판단하기 위해서는 객관적인 평가 기준이 필요하다.


경험 오차 및 과적합

가장 먼저 고려해야할 지표는 오차율이다. 오차율은 모델이 전체 데이터를 판단했을 때 얼마나 실수를 했는지에 대한 비율이다.

E=a/m E = a/m
  • m: 전체 샘플 수

  • a: 잘못 분류한 샘플 수

💡이와 반대되는 개념으로 정확도가 있다. 모델이 정답을 맞힌 비율(1-E)을 계산한다.


그 다음, 샘플 값 자체와 실제 예측 값 사이의 오차가 있을 수 있다. 학습기가 훈련 세트상에서 만들어낸 오차를 훈련 오차, 혹은 경험 오차라고 부르며, 학습기와 새로운 샘플 사이의 오차는 일반화 오차라고 한다.


대개 우리는 일반화 오차가 가장 적은 학습기를 원하게 된다. 그러나 학습기가 훈련 데이터에서 학습을 과도하게 잘하면 모든 훈련 데이터의 특성을 일반적인 성질이라 오해하게 되고, 결국 모델이 과적합으로 빠지게 된다. 이와 반대되는 개념으로는 훈련이 덜 된, 과소적합이 있다.



테스트 기법

앞서 말했듯, 우리는 훈련이라는 과정을 통해 학습기의 일반화 오차에 대해 평가를 진행하고 모델을 선택해야한다.

일반화 오차와 그냥 오차를 구분해서 과소적합, 과적합을 회피할 수 있는 방법에는 무엇이 있을까? 바로 데이터 세트를 훈련 세트와 테스트 세트로 구분하는 것이다.

홀드아웃

홀드아웃은 데이터세트 D를 겹치지 않는 두 집합 훈련 세트 집합 S와 테스트 세트 집합T로 나눈다. 주의해야할 점은 데이터 분포인데, 훈련 세트와 테스트 세트의 데이터 분포가 같도록 나눠야 한다는 점이다. 이러한 분류 작업을 층화 추출법 이라고 한다.

이 외에도 중요한 것은 데이터 수의 비율이다. 훈련 세트가 너무 많으면 전체 데이터로 학습한 모델과 비슷해진다는 장점이 있지만, 테스트 데이터가 부족해 평가 결과가 불안정해질 수 있다. 반대로 테스트 세트가 너무 많을 땐 평가가 안정적이지만 학습 데이터가 부족해 실제 전체 데이터로 학습했을 때의 성능과 차이가 커진다.

이 문제에 완벽한 정답은 없지만, 휴리스틱한 관점에서 다음과 같은 비율을 많이 사용한다.

  • 훈련 세트: 전체의 2/3 ~ 4/5

  • 테스트 세트: 전체의 1/5 ~ 1/3

교차 검증

image.png


교차검증은 다음과 같은 방법을 k번 반복해서, k개의 테스트 결과값을들 평균 내어 최종 성능으로 사용하는 검증 방법이다.

  • 데이터세트를 층화 추출법으로 k개의 서로소 집합으로 나눈다.

  • k-1개의 조각으로 모델을 학습시키고, 나머지 1개의 조각으로 성능을 테스트한다.

주의사항

  • 데이터를 나누는 과정에서 편향이 발생할 수 있으므로, 데이터를 랜덤하게 섞고 나누는 과정을 반복한다. (즉, fully 교차검증을 n번 시행하되, 매번 데이터를 랜덤하게 섞어서 실행하고 이 결과를 최종 평균함)

    • 일반적으로 10차 10겹 교차검증을 주로 사용함


image.png

교차 검증 방법의 변형인 LOOCV라는 방법도 있다.

  • 1개의 관측값을 제외하고 나머지는 모두 훈련 데이터 세트로 사용하는 방법

Bootstrap

부트스트랩은 이러한 LOOCV의 단점을 보완해 줄 수 있는 샘플링 기법이다.


  1. 데이터 세트 D로부터 샘플링을 통해 데이터 세트 D'을 만든다.

  2. 이 과정을 m번 반복한다.

  3. m개의 D' 데이터 세트로 훈련을 시킨다.

  4. D'에 한번도 뽑히지 않은 데이터의 집합을 테스트 세트로 활용한다.


m번의 샘플링 과정 중 샘플이 한 번도 뽑히지 않을 확률은 다음과 같다.

 limm>inf(11m)m=1e=0.368...  \lim_{m->\inf}(1-\frac{1}{m})^m = \frac{1}{e} = 0.368...

즉, 부트스트랩을 사용하면 데이터 세트 D 중 36.8%의 샘플은 D'에 샘플링되지 못하고 테스트세트로 활용할 수 있다.


💡OOB 샘플이란 부트스트랩 샘플링 중 나머지(Out of Bag)를 가지고 테스트 세트로 활용하는 것 처럼 모델의 성능을 별도의 검증 데이터셋 없이 추정하는데 사용하는 기법이다.


모델 성능 측정

이 절에서는 학습기의 일반화 성능에 대해 평가하기 위해 사용하는 다양한 지표에 대해 알아본다. 모델의 좋고 나쁨을 결정하는 것은 알고리즘과 데이터가 아닌 데이터 분석 목적(정답 데이터)에 달렸다.

예측을 위해 사용하는 데이터 샘플 D가 아래와 같이 있다면,


D={(x1,y1),(x2,y2),...,(xm,ym)} D=\{(\bold{x}_1,y_1),(\bold{x}_2,y_2),...,(\bold{x}_m,y_m)\}


정답 데이터인 y_i와 예측 결과인 f(x_i)를 비교해야 한다.

평균 제곱 오차

회귀분석에서 가장 자주 사용하는 성능 측정 방법이다.

E(f;D)=1mi=1m(f(xi)yi)2 E(f;D) = \frac{1}{m}\sum_{i=1}^{m}(f(\bold{x}_i)-y_i)^2

(연속확률 분포에 대한 정의)더 일반적으로 표현하면 다음과 같다.

E(f;D)=xD(f(x)y)2p(x)dx E(f;\mathcal{D})=\int_{x\backsim\mathcal{D}}(f(\bold{x})-y)^2p(\bold{x})d\bold{x}

오차율과 정확도

오차율

E(f;D)=1mi=1mI(f(xi)yi) E(f; D) = \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(\boldsymbol{x}_i) \neq y_i)
E(f;D)=xDI(f(x)y)p(x)dx E(f; \mathcal{D}) = \int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) \neq y) p(\boldsymbol{x}) \text{d}\boldsymbol{x}

정확도

acc(f;D)=1mi=1mI(f(xi)=yi)=1E(f;D) \begin{aligned} \text{acc}(f; D) &= \frac{1}{m} \sum_{i=1}^{m} \mathbb{I}(f(\boldsymbol{x}_i) = y_i) \\ &= 1 - E(f; D) \end{aligned}
acc(f;D)=xDI(f(x)=y)p(x)dx=1E(f;D) \begin{aligned} \text{acc}(f; \mathcal{D}) &= \int_{\boldsymbol{x} \sim \mathcal{D}} \mathbb{I}(f(\boldsymbol{x}) = y) p(\boldsymbol{x}) \text{d}\boldsymbol{x} \\ &= 1 - E(f; \mathcal{D}) \end{aligned}

F-1 스코어

오차율과 정확도는 자주 사용되지만 한계가 있다. 분류 결과 혼동행렬을 시각화 해보면, 오차율과 정확도 뿐만 아니라 정밀도와 재현율이 중요하다는 점을 알 수 있다.


image.png


정밀도P와 재현율R은 다음처럼 정의된다.


P=TPTP+FPR=TPTP+FN P=\frac{TP}{TP+FP}\newline R=\frac{TP}{TP+FN}


일반적으로 정밀도와 재현율은 트레이드오프 관계이다. 예를들어, 잘 익은 수박을 최대한 많이 골라내려면 골라내는 수박의 수가 늘어나겠지만, 이 행위 자체가...

회원가입만 해도
이 글을 무료로 읽을 수 있어요.

이미 계정이 있으신가요?로그인하기
댓글 0
avatar
Wong
구독자 21명구독중 4명
안녕하세요. 개발과 경제에 관심있는 ADAS 연구원입니다. https://github.com/Wong-Woo