

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 분할 및 데이터 유출
<a name="splits-leakage"></a>

데이터 유출은 모델이 프로덕션 상태에 있고 예측 요청을 수신하는 순간인 추론 중에 모델이 데이터를 가져올 때 발생합니다. 예를 들어 훈련에 사용된 데이터 샘플 또는 모델이 프로덕션에 배포될 때 사용할 수 없는 정보와 같은 액세스해서는 안 됩니다.

모델이 훈련 데이터에 대해 실수로 테스트되는 경우 데이터 유출로 인해 과적합이 발생할 수 있습니다. 과적합은 모델이 보이지 않는 데이터로 잘 일반화되지 않음을 의미합니다. 이 섹션에서는 데이터 유출 및 과적합을 방지하는 모범 사례를 제공합니다.

## 데이터를 3개 이상의 세트로 분할
<a name="splits"></a>

데이터 유출의 일반적인 원인 중 하나는 훈련 중에 데이터를 부적절하게 분할(분할)하는 것입니다. 예를 들어 데이터 과학자는 테스트에 사용된 데이터에 대해 모델을 고의로 또는 무의식적으로 훈련했을 수 있습니다. 이러한 상황에서는 과적합으로 인한 매우 높은 성공 지표를 관찰할 수 있습니다. 이 문제를 해결하려면 데이터를 , `training` `validation`및의 세 세트 이상으로 분할해야 합니다`testing`.

이러한 방식으로 데이터를 분할하면 `validation` 세트를 사용하여 학습 프로세스(*하이퍼파라미터)를 제어하는 데 사용하는 파라미터를 선택하고 조정할 수 있습니다*. 원하는 결과를 달성했거나 개선의 안정 상태에 도달한 경우 `testing` 세트에 대한 평가를 수행합니다. `testing` 집합의 성능 지표는 다른 집합의 지표와 유사해야 합니다. 이는 세트 간에 분산 불일치가 없으며 모델이 프로덕션 환경에서 잘 일반화될 것으로 예상됨을 나타냅니다.

## 계층화 분할 알고리즘 사용
<a name="stratified-algorithm"></a>

`testing` 소규모 데이터 세트의 경우 데이터를 `training`, `validation`, 로 분할하거나 불균형이 높은 데이터로 작업할 때는 계층화 분할 알고리즘을 사용해야 합니다. 계층화는 각 분할에 대해 거의 동일한 수 또는 분포의 클래스가 포함되도록 보장합니다. [scikit-learn ML 라이브러리](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)는 이미 분류를 구현하고 있으며 [Apache Spark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.sampleBy.html)도 마찬가지입니다.

샘플 크기의 경우 통계적으로 유의한 결론에 도달할 수 있도록 검증 및 테스트 세트에 평가를 위한 충분한 데이터가 있는지 확인합니다. 예를 들어 상대적으로 작은 데이터 세트(1백만 개 미만의 샘플)의 공통 분할 크기는 , 및의 경우 70%, 15% `training` `validation`및 15%입니다`testing`. 매우 큰 데이터 세트(1백만 개 이상의 샘플)의 경우 90%, 5% 및 5%를 사용하여 사용 가능한 훈련 데이터를 극대화할 수 있습니다.

일부 사용 사례에서는 프로덕션 데이터가 수집되는 기간 동안 급격하고 갑작스러운 배포 변경을 경험했을 수 있으므로 데이터를 추가 세트로 분할하는 것이 유용합니다. 예를 들어 식료품점 항목에 대한 수요 예측 모델을 구축하기 위한 데이터 수집 프로세스를 고려해 보세요. 데이터 과학 팀이 2019년 `training` 데이터와 2020년 1월부터 2020년 3월까지의 `testing` 데이터를 수집한 경우 모델이 `testing` 해당 세트에서 점수를 잘 받을 것입니다. 그러나 모델을 프로덕션에 배포하면 COVID-19 대유행으로 인해 특정 항목의 소비자 패턴이 이미 크게 변경되어 모델이 좋지 않은 결과를 생성할 수 있습니다. 이 시나리오에서는 모델 승인을 위한 추가 보호 조치로 다른 세트(예: `recent_testing`)를 추가하는 것이 좋습니다. 이렇게 추가하면 배포 불일치로 인해 즉시 성능이 저하되는 프로덕션용 모델을 승인하지 못할 수 있습니다.

경우에 따라 소수 집단과 관련된 데이터와 같은 특정 유형의 샘플을 포함하는 추가 `validation` 또는 `testing` 세트를 생성할 수 있습니다. 이러한 데이터 샘플은 올바르게 만드는 데 중요하지만 전체 데이터 세트에서 잘 표현되지 않을 수 있습니다. 이러한 데이터 하위 집합을 *조각이라고 합니다*.

전체 국가의 데이터에 대해 훈련되었고 대상 변수의 전체 도메인을 균등하게 고려하도록 균형이 잡힌 크레딧 분석을 위한 ML 모델의 경우를 고려합니다. 또한이 모델에는 `City` 기능이 있을 수 있습니다. 이 모델을 사용하는 은행이 비즈니스를 특정 도시로 확장하는 경우 해당 리전에서 모델이 어떻게 작동하는지에 관심이 있을 수 있습니다. 따라서 승인 파이프라인은 전체 국가의 테스트 데이터를 기반으로 모델의 품질을 평가할 뿐만 아니라 지정된 도시 조각에 대한 테스트 데이터도 평가해야 합니다.

데이터 과학자가 새 모델을 작업할 때 모델의 검증 단계에서 과소 대표된 조각을 통합하여 모델의 기능을 쉽게 평가하고 엣지 케이스를 설명할 수 있습니다.

## 무작위 분할을 수행할 때 중복 샘플 고려
<a name="duplicates"></a>

또 다른 덜 일반적인 누출 원인은 중복 샘플이 너무 많을 수 있는 데이터 세트입니다. 이 경우 데이터를 하위 집합으로 분할하더라도 서로 다른 하위 집합에 공통 샘플이 있을 수 있습니다. 중복 횟수에 따라 과적합이 일반화로 오인될 수 있습니다.

## 프로덕션 환경에서 추론을 수신할 때 사용할 수 없는 기능 고려
<a name="availability"></a>

데이터 유출은 추론이 호출되는 순간 프로덕션에서 사용할 수 없는 기능으로 모델을 훈련할 때도 발생합니다. 모델은 종종 기록 데이터를 기반으로 구축되기 때문에이 데이터는 특정 시점에 존재하지 않았던 추가 열 또는 값으로 보강될 수 있습니다. 고객이 지난 6개월 동안 은행에서 수행한 대출 수를 추적하는 기능이 있는 신용 승인 모델의 경우를 생각해 보세요. 이 모델을 배포하고 은행에 6개월 간의 기록이 없는 신규 고객의 신용 승인에 사용하는 경우 데이터가 유출될 위험이 있습니다.

[Amazon SageMaker AI 특성 저장소](https://aws.amazon.com/sagemaker/feature-store/)는이 문제를 해결하는 데 도움이 됩니다. 특정 시점의 데이터를 보는 데 사용할 수 있는 시간 이동 쿼리를 사용하여 모델을 더 정확하게 테스트할 수 있습니다.