년 10 월 19 일 ML 심포지엄에서 여성에 실질적으로 우리와 함께 지금 등록

TensorFlow 데이터 유효성 검사 : 데이터 확인 및 분석

데이터가 TFX 파이프 라인에 있으면 TFX 구성 요소를 사용하여 분석하고 변환 할 수 있습니다. 모델을 학습하기 전에도 이러한 도구를 사용할 수 있습니다.

데이터를 분석하고 변환하는 데는 여러 가지 이유가 있습니다.

  • 데이터에서 문제를 찾기 위해. 일반적인 문제는 다음과 같습니다.
    • 값이 비어있는 기능과 같은 누락 된 데이터.
    • 모델이 학습 중에 올바른 답을 엿볼 수 있도록 기능으로 취급되는 레이블입니다.
    • 예상 범위를 벗어난 값을 가진 특징.
    • 데이터 이상.
    • 전달 학습 된 모델에 학습 데이터와 일치하지 않는 전처리가 있습니다.
  • 보다 효과적인 기능 세트를 설계합니다. 예를 들어 다음을 식별 할 수 있습니다.
    • 특히 유익한 기능.
    • 중복 기능.
    • 규모가 매우 다양하여 학습 속도가 느려질 수있는 기능.
    • 고유 한 예측 정보가 거의 또는 전혀없는 기능.

TFX 도구는 데이터 버그를 찾는 데 도움이되고 기능 엔지니어링에 도움이됩니다.

TensorFlow 데이터 유효성 검사

개요

TensorFlow Data Validation은 데이터 학습 및 제공의 이상을 식별하고 데이터를 검사하여 스키마를 자동으로 만들 수 있습니다. 구성 요소는 데이터에서 다양한 클래스의 이상을 감지하도록 구성 할 수 있습니다. 그것은 할 수 있습니다

  1. 사용자의 기대치를 코드화하는 스키마와 데이터 통계를 비교하여 유효성 검사를 수행합니다.
  2. 학습 및 제공 데이터의 예를 비교하여 학습 제공 편향을 감지합니다.
  3. 일련의 데이터를보고 데이터 드리프트를 감지합니다.

이러한 각 기능을 독립적으로 문서화합니다.

스키마 기반 예제 유효성 검사

TensorFlow Data Validation은 데이터 통계를 스키마와 비교하여 입력 데이터의 이상을 식별합니다. 스키마는 입력 데이터가 충족 할 것으로 예상되는 데이터 유형 또는 범주 값과 같은 속성을 코드화하고 사용자가 수정하거나 바꿀 수 있습니다.

Tensorflow 데이터 유효성 검사는 일반적으로 TFX 파이프 라인의 컨텍스트 내에서 여러 번 호출됩니다. (i) ExampleGen에서 얻은 모든 분할, (ii) Transform에서 사용하는 모든 사전 변환 데이터 및 (iii) 변환. Transform (ii-iii) 컨텍스트에서 호출되면 stats_options_updater_fn 을 정의하여 통계 옵션 및 스키마 기반 제약 조건을 설정할 수 있습니다. 이는 비정형 데이터 (예 : 텍스트 기능)를 검증 할 때 특히 유용합니다. 예제는 사용자 코드 를 참조하십시오.

고급 스키마 기능

이 섹션에서는 특수 설정에 도움이 될 수있는 고급 스키마 구성을 다룹니다.

스파 스 기능

예에서 희소 특성을 인코딩하면 일반적으로 모든 예에 대해 동일한 가치를 가질 것으로 예상되는 여러 특성이 도입됩니다. 예를 들어 희소 특성 :


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 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 Schema 의 인스턴스로 지정됩니다.

개발자는 처음부터 수동으로 스키마를 구성하는 대신 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은 특성 값의 분포를 시각화하기위한 도구를 제공합니다. 패싯 을 사용하여 Jupyter 노트북에서 이러한 배포를 검사하면 데이터의 일반적인 문제를 파악할 수 있습니다.

기능 통계

의심스러운 배포 식별

특성 값의 의심스러운 분포를 찾기 위해 패싯 개요 디스플레이를 사용하여 데이터에서 일반적인 버그를 식별 할 수 있습니다.

불균형 데이터

불균형 특성은 하나의 값이 우세한 특성입니다. 불균형 기능은 자연스럽게 발생할 수 있지만 기능이 항상 동일한 값을 갖는 경우 데이터 버그가있을 수 있습니다. 패싯 개요에서 불균형 기능을 감지하려면 "정렬 기준"드롭 다운에서 "비 균일 성"을 선택합니다.

가장 불균형 한 기능은 각 기능 유형 목록의 맨 위에 나열됩니다. 예를 들어, 다음 스크린 샷은 "숫자 기능"목록의 맨 위에 모두 0 인 기능과 매우 불균형 한 두 번째 기능을 보여줍니다.

불균형 데이터 시각화

균일하게 분산 된 데이터

균일하게 분포 된 특성은 가능한 모든 값이 동일한 빈도에 가깝게 나타나는 특성입니다. 불균형 데이터와 마찬가지로이 분포는 자연스럽게 발생할 수 있지만 데이터 버그에 의해 생성 될 수도 있습니다.

패싯 개요에서 균일하게 분산 된 기능을 감지하려면 "정렬 기준"드롭 다운에서 "비 균일 성"을 선택하고 "역순"확인란을 선택합니다.

균일 한 데이터의 히스토그램

문자열 데이터는 고유 값이 20 개 이하인 경우 막대 차트를 사용하고 고유 한 값이 20 개 이상인 경우 누적 분포 그래프로 표시됩니다. 따라서 문자열 데이터의 경우 균일 한 분포는 위와 같은 평평한 막대 그래프 또는 아래와 같은 직선으로 나타날 수 있습니다.

선 그래프 : 균일 한 데이터의 누적 분포

균일하게 분산 된 데이터를 생성 할 수있는 버그

다음은 균일하게 분산 된 데이터를 생성 할 수있는 몇 가지 일반적인 버그입니다.

  • 문자열을 사용하여 날짜와 같은 비 문자열 데이터 유형을 나타냅니다. 예를 들어, "2017-03-01-11-45-03"과 같은 표현이있는 datetime 기능에 대한 고유 한 값이 많이 있습니다. 고유 한 값이 균일하게 배포됩니다.

  • 기능으로 "행 번호"와 같은 색인을 포함합니다. 여기에서도 고유 한 값이 많이 있습니다.

누락 된 데이터

특성 값이 완전히 누락되었는지 확인하려면 :

  1. "정렬 기준"드롭 다운에서 "누락 된 금액 / 0"을 선택합니다.
  2. "역순"확인란을 선택합니다.
  3. 기능에 대해 누락 된 값이있는 인스턴스의 비율을 보려면 "누락 된"열을 확인하십시오.

데이터 버그로 인해 불완전한 기능 값이 발생할 수도 있습니다. 예를 들어 기능의 값 목록에 항상 세 개의 요소가있을 것으로 예상하고 때로는 하나만있는 것을 발견 할 수 있습니다. 불완전한 값 또는 특성 값 목록에 예상 된 요소 수가없는 기타 경우를 확인하려면 다음을 수행하십시오.

  1. 오른쪽의 "표시 할 차트"드롭 다운 메뉴에서 "값 목록 길이"를 선택합니다.

  2. 각 특성 행의 오른쪽에있는 차트를보십시오. 차트는 기능의 값 목록 길이 범위를 보여줍니다. 예를 들어 아래 스크린 샷에서 강조 표시된 행은 길이가 0 인 값 목록이있는 기능을 보여줍니다.

길이가 0 인 기능 값 목록이있는 기능이있는 패싯 개요 디스플레이

기능 간 규모의 큰 차이

기능의 규모가 크게 다를 경우 모델 학습에 어려움이있을 수 있습니다. 예를 들어 일부 기능은 0에서 1까지 다양하고 다른 기능은 0에서 1,000,000,000까지 다양하다면 규모에 큰 차이가 있습니다. 기능간에 "최대"및 "최소"열을 비교하여 다양한 척도를 찾습니다.

이러한 광범위한 변형을 줄이려면 특성 값을 정규화하는 것이 좋습니다.

잘못된 레이블이있는 레이블

TensorFlow의 에스티 메이터는 라벨로 허용하는 데이터 유형에 제한이 있습니다. 예를 들어 바이너리 분류기는 일반적으로 {0, 1} 라벨에서만 작동합니다.

패싯 개요의 라벨 값을 검토하고 Estimators요구 사항을 준수하는지 확인하세요.