Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

데이터 마이닝의 오차 추정 방법 총정리: 교차 검증부터 부트스트랩까지

10겹 교차 검증(Tenfold Cross-Validation)은 특정 데이터셋에서 학습 방식의 오류율을 측정하는 가장 표준적인 방법입니다. 더욱 신뢰할 수 있는 결과를 얻으려면 이 10겹 교차 검증을 10회 반복해 평균을 내는 것이 좋습니다. 이 외에도 널리 활용되는 추정 방법으로는 LOOCV(Leave-One-Out 교차 검증)부트스트랩(Bootstrap)이 있습니다.

LOOCV(Leave-One-Out 교차 검증)

LOOCV는 사실상 n겹 교차 검증(n-fold cross-validation)의 극단적인 형태입니다. 여기서 n은 데이터셋에 포함된 인스턴스(사례)의 개수입니다. 각 인스턴스를 차례대로 하나씩 제외한 뒤, 나머지 모든 인스턴스로 학습 모델을 훈련시키고, 제외했던 그 하나의 인스턴스에 대한 예측 정확도(성공이면 1, 실패면 0)를 측정합니다. 이렇게 얻은 n개의 판정 결과를 모두 평균 내면, 그 값이 최종 오차 추정치가 됩니다.

이 방식이 주목받는 이유는 크게 두 가지입니다.

첫째, 매 단계마다 사용 가능한 데이터의 최대치를 학습에 활용할 수 있습니다. 이는 학습된 분류기가 실제 상황에 더 가깝고 신뢰할 만한 모델일 가능성을 높여 줍니다.

둘째, 이 절차는 결정론적(deterministic)이라는 점입니다. 무작위 샘플링이 전혀 개입하지 않기 때문에 같은 데이터셋에 대해서는 몇 번을 반복하더라도 항상 동일한 결과가 나옵니다. 따라서 10겹 교차 검증처럼 여러 번 반복 수행할 필요가 없습니다.

다만 치명적인 단점도 있습니다. 전체 학습 과정을 데이터 개수만큼, 즉 n번 실행해야 하므로 계산 비용이 매우 큽니다. 그래서 대규모 데이터셋에서는 현실적으로 적용하기 어렵다는 한계가 있습니다.

부트스트랩(Bootstrap)

두 번째 추정 방법인 부트스트랩은 통계학의 복원 추출(sampling with replacement) 기법에 기반합니다. 지금까지 살펴본 방법들에서는 데이터셋에서 훈련 세트나 테스트 세트를 만들 때 한 번 뽑힌 데이터를 다시 되돌려 놓지 않는 비복원 추출을 사용했습니다.

그런데 대부분의 학습 방식은 동일한 인스턴스를 두 번 이상 사용할 수 있으며, 어떤 인스턴스가 훈련 세트에 두 번 포함되면 학습 결과 역시 달라집니다. 부트스트랩의 핵심 아이디어는 바로 이 점을 활용해, 복원 추출 방식으로 데이터셋을 샘플링하여 훈련 세트를 구성하는 것입니다. 그중에서도 특히 유명한 변형이 0.632 부트스트랩입니다.

0.632 부트스트랩의 절차는 다음과 같습니다. n개의 인스턴스로 이루어진 데이터셋에서 복원 추출 방식으로 n번 샘플링하여, 역시 n개의 인스턴스를 가진 새로운 데이터셋(훈련 세트)을 만듭니다. 이 과정에서 일부 인스턴스는 거의 확실하게 중복해서 뽑히기 때문에, 원본 데이터셋 중에는 한 번도 선택되지 않은 인스턴스들이 남게 됩니다. 이 남은 인스턴스들을 테스트 인스턴스로 사용하는 것입니다.

참고로 어떤 인스턴스가 한 번도 뽑히지 않을 확률은 (1 − 1/n)n ≈ e-1 ≈ 0.368이므로, 약 63.2%의 인스턴스가 훈련 세트에 포함됩니다. 이것이 방법의 이름이 '0.632'인 이유입니다.

훈련 세트로 학습 모델을 훈련한 뒤 테스트 세트에서 오차를 측정하면, 그 값은 실제 오류율에 대한 비관적(pessimistic) 추정치가 됩니다. 훈련 세트의 크기가 명목상 n이지만 실제로 포함된 고유 인스턴스는 약 63%뿐이며, 이는 10겹 교차 검증에서 학습에 사용되는 90%와 비교하면 상당히 적은 양이기 때문입니다.