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