데이터가 TFX 파이프라인에 있으면 TFX 구성 요소를 사용하여 이를 분석하고 변환할 수 있습니다. 모델을 훈련시키기 전에도 이러한 도구를 사용할 수 있습니다.
데이터를 분석하고 변환하는 데에는 여러 가지 이유가 있습니다.
- 데이터에서 문제를 찾기 위해. 일반적인 문제는 다음과 같습니다.
- 값이 비어 있는 기능과 같은 데이터가 누락되었습니다.
- 레이블은 기능으로 취급되므로 훈련 중에 모델이 정답을 엿볼 수 있습니다.
- 값이 예상 범위를 벗어난 기능입니다.
- 데이터 이상.
- 전이 학습된 모델에는 훈련 데이터와 일치하지 않는 전처리가 있습니다.
- 보다 효과적인 기능 세트를 설계합니다. 예를 들어 다음을 식별할 수 있습니다.
- 특히 유익한 기능.
- 중복 기능.
- 학습 속도가 느려질 수 있는 규모가 매우 다양한 기능입니다.
- 고유한 예측 정보가 거의 또는 전혀 없는 기능입니다.
TFX 도구는 데이터 버그를 찾는 데 도움이 되고 기능 엔지니어링에 도움이 됩니다.
TensorFlow 데이터 검증
개요
TensorFlow Data Validation은 학습 및 제공 데이터의 이상을 식별하고 데이터를 검사하여 자동으로 스키마를 생성할 수 있습니다. 구성 요소는 데이터에서 다양한 클래스의 이상을 감지하도록 구성할 수 있습니다. 그것은 할 수 있습니다
- 사용자의 기대치를 코드화하는 스키마와 데이터 통계를 비교하여 유효성 검사를 수행합니다.
- 훈련 및 제공 데이터의 예를 비교하여 훈련-서빙 편향을 감지합니다.
- 일련의 데이터를 확인하여 데이터 드리프트를 감지합니다.
우리는 이러한 각 기능을 독립적으로 문서화합니다.
스키마 기반 예제 검증
TensorFlow Data Validation은 데이터 통계를 스키마와 비교하여 입력 데이터의 이상을 식별합니다. 스키마는 데이터 유형 또는 범주 값과 같이 입력 데이터가 충족할 것으로 예상되는 속성을 코드화하고 사용자가 수정하거나 대체할 수 있습니다.
Tensorflow Data Validation은 일반적으로 TFX 파이프라인의 컨텍스트 내에서 여러 번 호출됩니다. (i) ExampleGen에서 얻은 모든 분할, (ii) Transform에서 사용하는 모든 사전 변환 데이터 및 (iii) 변환. Transform(ii-iii) 컨텍스트에서 호출되면 stats_options_updater_fn
을 정의하여 통계 옵션 및 스키마 기반 제약 조건을 설정할 수 있습니다. 이것은 비정형 데이터(예: 텍스트 기능)의 유효성을 검사할 때 특히 유용합니다. 예제는 사용자 코드 를 참조하십시오.
고급 스키마 기능
이 섹션에서는 특수 설정에 도움이 될 수 있는 고급 스키마 구성을 다룹니다.
희소 특징
예제에서 희소 기능을 인코딩하면 일반적으로 모든 예제에 대해 동일한 가치를 가질 것으로 예상되는 여러 기능이 도입됩니다. 예를 들어 희소 기능:
WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
은 인덱스 및 값 기능의 원자가가 모든 예제에 대해 일치해야 한다는 제한과 함께 인덱스 및 값에 대해 별도의 기능을 사용하여 인코딩됩니다:
WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
. 이 제한은 sparse_feature를 정의하여 스키마에서 명시적으로 만들 수 있습니다.
sparse_feature {
name: 'WeightedCategories'
index_feature { name: 'WeightedCategoriesIndex' }
value_feature { name: 'WeightedCategoriesValue' }
}
희소 특성 정의에는 스키마에 존재하는 특성을 참조하는 하나 이상의 인덱스와 하나의 값 특성이 필요합니다. 희소 기능을 명시적으로 정의하면 TFDV에서 참조된 모든 기능의 원자가가 일치하는지 확인할 수 있습니다.
일부 사용 사례는 기능 간에 유사한 원자가 제한을 도입하지만 반드시 희소 기능을 인코딩할 필요는 없습니다. 희소 기능을 사용하면 차단이 해제되지만 이상적이지는 않습니다.
스키마 환경
기본적으로 유효성 검사에서는 파이프라인의 모든 예제가 단일 스키마를 준수한다고 가정합니다. 일부 경우에는 약간의 스키마 변형을 도입하는 것이 필요합니다. 예를 들어 레이블로 사용되는 기능은 교육 중에 필요하지만(검증되어야 함) 제공하는 동안 누락됩니다. 환경, 특히 default_environment()
, in_environment()
, not_in_environment()
) 와 같은 요구 사항을 표현하는 데 사용할 수 있습니다.
예를 들어 'LABEL'이라는 기능이 학습에 필요하지만 제공에서 누락될 것으로 예상된다고 가정합니다. 이것은 다음과 같이 표현할 수 있습니다.
- 스키마에서 두 개의 고유한 환경(["SERVING", "TRAINING"])을 정의하고 'LABEL'을 "TRAINING" 환경과만 연결합니다.
- 교육 데이터를 "TRAINING" 환경과 연결하고 제공 데이터를 "SERVING" 환경과 연결합니다.
스키마 생성
입력 데이터 스키마는 TensorFlow 스키마 의 인스턴스로 지정됩니다.
스키마를 처음부터 수동으로 구성하는 대신 개발자는 TensorFlow Data Validation의 자동 스키마 구성에 의존할 수 있습니다. 특히, TensorFlow Data Validation은 파이프라인에서 사용 가능한 교육 데이터에 대해 계산된 통계를 기반으로 초기 스키마를 자동으로 구성합니다. 사용자는 이 자동 생성된 스키마를 검토하고, 필요에 따라 수정하고, 버전 제어 시스템에 체크인하고, 추가 검증을 위해 명시적으로 파이프라인에 푸시할 수 있습니다.
TFDV에는 스키마를 자동으로 생성하기 위한 infer_schema()
가 포함되어 있습니다. 예를 들어:
schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
그러면 다음 규칙에 따라 자동 스키마 생성이 트리거됩니다.
스키마가 이미 자동 생성된 경우 그대로 사용됩니다.
그렇지 않으면 TensorFlow Data Validation이 사용 가능한 데이터 통계를 검사하고 데이터에 적합한 스키마를 계산합니다.
참고: 자동 생성된 스키마는 최선의 방식이며 데이터의 기본 속성만 유추하려고 합니다. 사용자가 필요에 따라 검토하고 수정하기를 기대합니다.
훈련 서빙 스큐 감지
개요
TensorFlow Data Validation은 학습 데이터와 제공 데이터 간의 분포 왜곡을 감지할 수 있습니다. 분포 스큐는 훈련 데이터의 특성 값 분포가 제공 데이터와 크게 다를 때 발생합니다. 분포 스큐의 주요 원인 중 하나는 원하는 말뭉치의 초기 데이터 부족을 극복하기 위해 훈련 데이터 생성에 완전히 다른 말뭉치를 사용하는 것입니다. 또 다른 이유는 훈련할 제공 데이터의 하위 샘플만 선택하는 잘못된 샘플링 메커니즘입니다.
예시 시나리오
학습 제공 편향 감지 구성에 대한 정보는 TensorFlow 데이터 검증 시작 안내서 를 참조하십시오.
드리프트 감지
드리프트 감지는 훈련 데이터의 다른 날과 같이 연속적인 데이터 범위(즉, 범위 N과 범위 N+1 사이) 사이에서 지원됩니다. 범주형 특징에 대해서는 L-무한대 거리 로 드리프트를 표현하고 수치 특징에 대해서는 대략적인 Jensen-Shannon 발산 으로 표현합니다. 드리프트가 허용 가능한 것보다 높을 때 경고를 수신하도록 임계값 거리를 설정할 수 있습니다. 정확한 거리를 설정하는 것은 일반적으로 영역 지식과 실험이 필요한 반복적인 프로세스입니다.
드리프트 감지 구성에 대한 정보는 TensorFlow 데이터 검증 시작하기 가이드 를 참조하세요.
시각화를 사용하여 데이터 확인
TensorFlow Data Validation은 특성 값의 분포를 시각화하기 위한 도구를 제공합니다. Facets 를 사용하여 Jupyter 노트북에서 이러한 분포를 검사하면 데이터의 일반적인 문제를 파악할 수 있습니다.
의심스러운 배포 식별
패싯 개요 디스플레이를 사용하여 기능 값의 의심스러운 분포를 찾아 데이터의 일반적인 버그를 식별할 수 있습니다.
불균형 데이터
불균형 특성은 하나의 값이 우세한 특성입니다. 불균형 기능은 자연스럽게 발생할 수 있지만 기능이 항상 동일한 값을 갖는다면 데이터 버그가 있을 수 있습니다. 패싯 개요에서 불균형 기능을 감지하려면 "정렬 기준" 드롭다운에서 "비균일성"을 선택하십시오.
가장 불균형한 기능은 각 기능 유형 목록의 맨 위에 나열됩니다. 예를 들어, 다음 스크린샷은 "숫자 기능" 목록의 맨 위에 있는 하나의 기능이 모두 0이고 불균형이 심한 두 번째 기능을 보여줍니다.
균일하게 분산된 데이터
균일하게 분포된 특성은 가능한 모든 값이 동일한 빈도에 가깝게 나타나는 특성입니다. 불균형 데이터와 마찬가지로 이 분포는 자연스럽게 발생할 수 있지만 데이터 버그에 의해 생성될 수도 있습니다.
패싯 개요에서 균일하게 분포된 기능을 감지하려면 "정렬 기준" 드롭다운에서 "비균일성"을 선택하고 "역순" 확인란을 선택합니다.
문자열 데이터는 고유값이 20개 이하이면 막대 차트로 표현하고, 고유값이 20개 이상이면 누적 분포 그래프로 표현한다. 따라서 문자열 데이터의 경우 균일 분포는 위와 같은 평면 막대 그래프 또는 아래와 같은 직선으로 나타날 수 있습니다.
균일하게 분산된 데이터를 생성할 수 있는 버그
다음은 균일하게 분산된 데이터를 생성할 수 있는 몇 가지 일반적인 버그입니다.
문자열을 사용하여 날짜와 같은 문자열이 아닌 데이터 유형을 나타냅니다. 예를 들어 "2017-03-01-11-45-03"과 같은 표현이 있는 날짜/시간 기능에 대해 고유한 값이 많이 있습니다. 고유 값은 균일하게 배포됩니다.
기능으로 "행 번호"와 같은 인덱스를 포함합니다. 여기에도 많은 고유한 값이 있습니다.
데이터 누락
기능에 값이 완전히 누락되었는지 확인하려면 다음을 수행합니다.
- "정렬 기준" 드롭다운에서 "누락된 금액/0"을 선택합니다.
- "역순" 확인란을 선택합니다.
- 기능에 대해 결측값이 있는 인스턴스의 백분율을 보려면 "누락된" 열을 확인하십시오.
데이터 버그는 불완전한 기능 값을 유발할 수도 있습니다. 예를 들어 기능의 값 목록에는 항상 3개의 요소가 있을 것으로 예상하고 때로는 하나만 포함하는 것을 발견할 수 있습니다. 불완전한 값이나 기능 값 목록에 예상되는 요소 수가 없는 기타 경우를 확인하려면:
오른쪽의 "표시할 차트" 드롭다운 메뉴에서 "값 목록 길이"를 선택합니다.
각 기능 행의 오른쪽에 있는 차트를 보십시오. 차트는 기능의 값 목록 길이 범위를 보여줍니다. 예를 들어 아래 스크린샷에서 강조 표시된 행은 길이가 0인 값 목록이 있는 기능을 보여줍니다.
기능 간 규모의 큰 차이
기능의 규모가 매우 다양하면 모델을 학습하는 데 어려움이 있을 수 있습니다. 예를 들어, 일부 기능이 0에서 1까지 다양하고 다른 기능이 0에서 1,000,000,000까지 다양하면 규모에 큰 차이가 있습니다. 기능 간에 "최대" 및 "최소" 열을 비교하여 광범위하게 다양한 척도를 찾습니다.
이러한 광범위한 변동을 줄이기 위해 특성 값을 정규화하는 것을 고려하십시오.
잘못된 레이블이 있는 레이블
TensorFlow의 Estimators에는 레이블로 허용하는 데이터 유형에 대한 제한이 있습니다. 예를 들어 이진 분류기는 일반적으로 {0, 1} 레이블에서만 작동합니다.
패싯 개요에서 레이블 값을 검토하고 Estimators의 요구 사항을 준수하는지 확인하십시오.