1.4 데이터 분할 (1)
오늘 노트는 데이터 분할에 대해 정리해보겠습니다.
1.4 데이터 분할
머신러닝 모델 훈련 및 평가는 모델링 파이프라인의 주요 작업입니다. 머신러닝 알고리즘은 추론을 수행하기 위해 기능 간의 관계를 찾기 위해 데이터가 필요하지만 이러한 추론은 프로덕션 환경으로 이동하기 전에 유효성을 검사해야 합니다.
머신러닝 모델을 훈련하는 데 사용되는 데이터 세트를 일반적으로 훈련 세트라고 합니다. 이 훈련 데이터는 모델이 사용될 실제 환경을 나타낼 수 있어야 합니다. 그 요구 사항이 충족되지 않으면 쓸모가 없습니다. [그림 1.2]에 나와 있는 사기 사례로 돌아가서 훈련 데이터를 기반으로 5,000달러 이상의 가치를 갖고 야간에 처리되는 전자 상거래는 잠재적인 사기 사례임을 발견했습니다. 이를 염두에 두고 프로덕션 환경에서 모델을 적용한 후 모델은 훈련 과정에서 학습된 유사한 사례에 플래그를 지정해야 합니다.
따라서 이러한 사례가 훈련 세트에만 존재하는 경우 모델은 프로덕션 환경에서 거짓 양성(false positive) 사례에 플래그를 지정합니다. 반대 시나리오도 유효합니다. 훈련 데이터에 반영되지 않은 프로덕션 데이터에 특정 사기 사례가 있는 경우 모델은 많은 거짓 음성(false negative) 사례에 플래그를 지정합니다. 거짓 양성 및 거짓 음성 비율은 모델 검증에 사용할 수 있는 많은 품질 지표 중 두 가지에 불과합니다. 이러한 지표는 혼동 행렬(confusion matrix)에서 훨씬 더 자세히 다룰 것입니다.
이 시점에서 좋은 훈련 세트를 갖는 것이라고 그 중요성을 분명히 이해하고 있을 것입니다. 이제 유효한 훈련 세트가 있다고 가정하고 이 모델이 프로덕션 환경에서 잘 수행될 것이라는 확신을 어떻게 가질 수 있습니까? 그 정답은 테스트 및 검증 세트를 사용하는 것입니다.
[그림 1-5] 데이터 분할
[그림 1.5]는 훈련 및 추론 파이프라인 동안 가질 수 있는 다양한 유형의 데이터 분할을 보여줍니다. 첫째, 훈련 데이터는 모델을 생성하는 데 사용되는 데이터이고 테스트 데이터는 최종 모델 품질 지표를 추출하는 데 사용되는 데이터입니다.
둘째, 테스트 데이터는 모델 지표 추출 이외의 다른 이유로 훈련 프로세스 중에 사용할 수 없습니다. 훈련 중에 테스트 데이터를 사용하지 않는 이유는 간단합니다. 모델을 검증하는 데 사용할 데이터 위에서 학습하도록 할 수 없습니다. 테스트를 위해 데이터의 한 조각을 유지하는 이 기술을 종종 홀드아웃 검증(Holdout Validation)이라고 합니다.
셋째, [그림 1.5]의 오른쪽 상자는 프로덕션 데이터를 나타냅니다. 프로덕션 데이터는 일반적으로 지속적으로 들어오며 여기서 모델 결과를 추출하기 위해 추론 파이프라인을 실행해야 합니다. 프로덕션 데이터에 대해 훈련이나 다른 유형의 재계산을 수행하지 않습니다. 그대로 추론 파이프라인을 통해 전달하면 됩니다.
기술적인 관점에서 볼 때 대부분의 머신러닝 라이브러리는 .fit 메서드를 사용하여 훈련 단계를 구현하는 반면, 추론 단계는 .transform 또는 .predict 메서드로 구현합니다. 다시 말하지만 이것은 대부분의 머신러닝 라이브러리에서 사용하는 일반적인 패턴이지만 머신러닝 라이브러리에서 다른 이름 규칙을 찾을 수 있다는 점에 유의하십시오.
여전히 [그림 1.5]를 보면 훈련 데이터와 가까운 또 다른 상자가 있습니다. 바로 검증 데이터입니다. 이것은 테스트 단계로 이동하기 전에 최상의 모델 생성을 지원하는 데 자주 사용되는 훈련 세트의 하위 집합입니다. 그 상자에 대해 훨씬 더 자세히 이야기할 것이지만, 먼저 왜 우리가 그것들이 필요한지 설명하겠습니다.
1.4 .1 과대적합과 과소적합
머신러닝 모델은 과대적합(overfitting) 및 과소적합(underfitting)과 같은 두 가지 유형의 적합으로 어려움을 겪을 수 있습니다. 과대적합은 모델이 훈련 데이터에서 매우 잘 수행되지만 테스트와 같은 다른 데이터 세트로 일반화할 수 없으며, 심지어는 프로덕션 데이터로 일반화할 수 없음을 의미합니다. 즉, 과대적합된 모델이 있는 경우 훈련 데이터에서만 작동합니다.
머신러닝 모델을 구축할 때 학습한 내용을 일반화하고, 동일한 데이터 분포를 따르는 다른 데이터 세트에 대한 결정을 추론할 수 있는 솔루션이 필요합니다. 훈련된 데이터에서만 동작하는 모델은 쓸모가 없습니다. 왜냐하면, 과대적합은 일반적으로 많은 수의 피처 또는 알고리즘의 하이퍼파라미터 구성 부족으로 인해 발생합니다.
반면에 과소적합된 모델은 훈련 단계에서 데이터를 맞출 수 없습니다. 결과적으로 너무 일반적이어서 훈련, 테스트 또는 프로덕션 데이터에서 제대로 수행할 수 없습니다. 과소적합은 일반적으로 좋은 피처/관측치가 부족하거나 모델을 훈련할 시간이 부족하기 때문에 발생합니다. 따라서, 일부 알고리즘은 모델을 적절하게 맞추기 위해 더 많은 반복이 필요합니다.
결론적으로 말해서, 과대적합과 과소적합을 모두 피해야 합니다. 이를 해결하기 위한 많은 모델링 기술이 있습니다. 예를 들어, 일반적으로 사용되는 교차 검증(cross-validation) 기법과 [그림 1.5]에서 보여지는 검증 상자와의 관계에 초점을 맞춰 보겠습니다.
1.4.2 과대적합 측정 및 교차 검증 적용
교차 검증은 훈련 세트를 훈련 세트와 검증 세트로 나누는 기술입니다. 그런 다음 모델은 훈련 세트에서 훈련되고 검증 세트에서 테스트됩니다. 가장 일반적인 교차 검증 전략은 k-폴드 교차 검증으로 알려져 있으며, 여기서 k는 훈련 세트의 분할 수입니다.
k-폴드 교차 검증을 사용하고 k 값이 10이라고 가정하면 훈련 세트를 10개의 폴드로 분할합니다. 모델은 10번 훈련되고 테스트됩니다. 각 반복에서 학습을 위해 9개의 분할을 사용하고 테스트를 위해 1개의 분할을 남깁니다. 10번의 실행 후 각 반복에서 추출된 평가 지표는 평균을 내고 [그림 1.6]과 같이 훈련 단계에서 최종 모델 성능을 나타냅니다.
[그림 1.6] 실행 중인 교차 검증
또 다른 일반적인 교차 검증 기법은 LOOCV(leave one out cross validation)로 알려져 있습니다. 이 접근 방식에서 모델은 여러 번 실행되며 각 반복 마다 하나의 관찰이 테스트를 위해 분리되고 나머지는 모두 훈련에 사용됩니다.
훈련 중에 교차 검증을 사용하면 다음과 같은 많은 이점이 있습니다.
· 모델은 항상 특정 데이터 청크에 대해 학습되고 학습에 사용되지 않은 다른 청크에서 테스트되기 때문에 학습 데이터의 과대적합을 완화합니다.
· 모델을 최적화하기 위해 테스트 데이터를 계속 사용할 필요가 없기 때문에 테스트 데이터에서 과대적합을 피합니다.
· 과대적합 또는 과소적합의 존재를 노출합니다. 만약 모델 성능이 훈련/검증 데이터가 테스트 데이터에서 관찰된 성능과 매우 다르며 뭔가 잘못되었습니다.
훈련 중 교차 검증을 사용하고 테스트 세트를 사용하여 홀드아웃 검증과 같은 최종 지표를 추출하는 이진 분류 모델을 생성한다고 가정해 보겠습니다. 교차 검증 결과의 정확도가 80%이고 테스트 세트의 정확도가 50%라면 모델이 훈련 세트에 과대적합 되었으며 테스트 세트로 일반화할 수 없음을 의미합니다. 반면에 훈련 세트에서 50% 정확도, 테스트 세트에서 80% 정확도를 얻는다면 데이터에 시스템적인 문제가 있는 것입니다. 훈련 세트와 테스트 세트가 동일한 분포를 따르지 않을 가능성이 매우 높습니다.
정확도는 분류 모델에 일반적으로 사용되는 모델 평가 지표입니다. 모델이 추론 과정에서 얼마나 자주 올바른 결정을 내렸는지 측정합니다. 단지 예를 위해 이 지표를 선택했지만 각 모델 유형에 적용할 수 있는 다른 많은 평가 지표가 있다는 점에 유의하십시오.