머신러닝 모델 생성과정에서는 주어진 데이터를 모델에 학습시키고, 학습이 잘 되었는지 평가하는 단계를 거친다.
여기서 학습은 “데이터의 분포를 모델에게 주입하는 과정"을 말하고, 평가는 모델이 학습한 분포(함수)에 데이터(x)를 넣었을 때 얼마나 정답(y)을 맞췄는가에 대한 비교를 말한다.
그러므로 모델 생성을 위한 데이터가 갖추어야할 필수요소는 관련 자료와 정답이다.
가령 일일 방문객수 예측 모델을 생성한다고 하면 고객의 방문에 영향을 미치는 날짜, 날씨, 계절, 프로모션 등의 정보와 그에 따른 실제 방문객수에 대한 데이터가 필요할 것이다.
위 데이터가 일정량 이상 준비가 된다면 모델 학습과 평가에 활용할 수 있게 된다.
그 날의 날짜, 날씨, 계절 등 방문자수에 영향을 끼치는 요소들을 “조건"이라고 부르고,
실제 일일 방문객수에 대한 데이터를 “결과"라고 부르자.
이 조건과 결과를 데이터 한 줄로 취급할 수 있으며 이러한 세트를 여러 줄 모으면 비로소
머신러닝 모델 학습에 쓸만한 “데이터셋”이 된다.
이제 데이터가 모였다면 모델 학습을 통해 예측 모델을 생성했다고 하자.
그렇다면 이 모델이 예측을 잘하는지 못하는지 어떻게 평가하면 좋을까?
단순하게 생각해서 데이터로 모델 학습을 시킨 결과(함수)를 가지고 앞으로 매일
예상값과 실제값을 비교해보면 될 것이다.
하지만 모델 성능 평가에 너무 많은 시간이 소요되며,
그 사이에 트렌드가 바뀔 수도 있어 즉각적인 대응이 매우 어려워진다.
그렇다면 모델학습과 평가를 어떻게 빠르게 할 수 있을까?
홀드아웃 검증
가장 전통적이고 단순한 검증 방법이다.
데이터를 7 : 3, 8 : 2 또는 9 : 1 등의 비율로 나눠서 학습과 평가에 사용하는 방법이다.
전체 데이터의 70%를 가지고 “조건"과 “정답"을 활용하여 모델을 학습시킨 뒤
나머지 30%의 데이터의 “조건" 즉 X값을 모델에 대입했을 때 뱉어내는 결과값(예상값)이
실제 값과 얼마나 동일 혹은 근사한지 비교한다.
여기서 가장 큰 문제점은 7 : 3 비율로 데이터를 어떻게 분리하느냐에 따라 평가 지표가 달라지게 된다는 점이다.
우선 학습에 활용된 7할의 데이터가 전체 데이터의 분포와 거의 동일해야 할 것이다.
그래야 전체 데이터로 학습된 모델의 평가지표로 7할의 데이터를 활용하는 것에 대한 동의를 얻을 수 있다.
그러나 현실적으로 분포를 확인할 방법이 없는 경우가 대부분이므로 분포가 동일한지 확인하는 것 또한 불가하다.
그래서 홀드아웃 검증은 모델의 실제 성능을 대변하기에는 한계점이 보인다.
교차 검증(k-fold Cross Validation)
홀드아웃 검증의 한계점을 보완할 검증방법으로
전체 데이터를 k 등분해서 각 덩어리를 모델 평가에 사용하는 방식을 말한다.
가령 k를 5로 설정해서 5등분을 한다면 총 5개의 하위 데이터가 생성되는데 이를 A~E로 부르자
그런 다음 먼저 A를 모델 평가에 활용하고 나머지 B~E를 학습으로 활용한다면 2:8 비율의 홀드아웃 검증을
진행하는 것과 같아진다. 이 작업을 총 5번 즉, A, B, C, D, E를 모델 평가에 쓰면서 총 5번 진행하는 것이다.
이렇게 되면 총 5개에 대한 모델의 평가지표가 나올텐데 이 결과의 평균을 최종 평가지표로 삼는다.
이렇게 하면 k번의 학습, 검증으로 생성된 각각의 모델이 전체 데이터에 대한 분포를 대변한다고 볼 수는 없지만
모든 데이터를 훑어서 평가 지표를 산출했다는 점에서 모델 간 성능 비교로 활용하기에 적합하다.
위 두 방법은 사실 데이터가 모집단을 대표할 만 하다 싶을 정도의 샘플 데이터가 모였을 경우에 활용하는 것이 적절하다. 하지만 기본적으로 데이터 수급이 어려운 분야일 경우 안그래도 적은 데이터를 몇 대 몇으로 나눠서 학습, 평가에 사용하는 것이 무리인 경우도 있을 것이다. 이와 같을 경우 부트스트래핑 방법을 활용한다.
부트스트래핑
n개의 샘플을 지닌 데이터 집합에서 n번의 복원 추출을 통해 n개의 학습 데이터를 만든다. 즉 데이터 증대를 하는 것이다.
n번의 복원 추출을 진행하면 한번도 추출되지 않은 데이터도 있을텐데 해당 데이터를 평가 데이터로 활용한다.
또한 하나의 데이터가 여러번 추출되어 데이터 집합을 이룬 학습 데이터가 여럿 존재하게 될텐데, 추출 횟수가 일정 수준을 넘어서게 되면 원본 데이터의 분포와 근사해지게 되는 성질에 따라 결국 비슷한 분포를 지닌 여러 개의 학습, 평가 데이터를 확보하는 셈이 된다.
머신러닝 학습은 데이터의 분포를 학습하는 과정이므로 데이터량 자체가 부족할 경우 부트스트래핑 방법으로 검증하는 것이 교차 검증보다 더 효과적일 수 있다.
추가적으로 모델 평가 방법을 선택할 경우 연산 속도 측면도 고려해볼 만하다.
교차 검증은 홀드아웃 검증과 비교했을 때 주어진 데이터에 대해서 총 k번의 연산이 이루어 지므로
상대적으로 연산 속도가 느릴 수 밖에 없을 것이다.
또한 부트스트래핑은 n개의 데이터에서 n번을 추출하여 n개의 학습 데이터셋을 만든다. 그러므로 부트스트래핑은 데이터량이 얼마냐에 따라 학습 속도가 달라진다. 충분히 많은 데이터에 부트스트래핑을 적용한다면 동일한 양의 교차 검증보다 연산 속도가 월등히 느려질 것이다. 그러므로 부트스트래핑은 태생의 이유에 따라 적은 양의 데이터에 적용하는 것이 유리하다.
'데이터사이언스 이론 공부' 카테고리의 다른 글
MAP(Maximum A Posterior) 에 대한 이해 (0) | 2022.09.08 |
---|---|
GitHub 실전 예시를 통해 실무 활용법을 파악해두자 (0) | 2022.09.06 |
피처 정규화 (Feature Normalization) (0) | 2022.09.02 |
MLE 에 대한 정리 (0) | 2022.08.12 |
분류 모델에서 Accuracy의 한계 (0) | 2022.07.13 |