본문 바로가기
FullStack/50. ML

[BOOK] Building Machine Learning Pipelines #4 데이터 검증

by nakanara 2023. 1. 12.
반응형

O`REILLY Building Machine Learning Pipelines #4. 데이터 검증

데이터는 모든 머신러닝 모델의 기본 모델의 유용성과 성능은 모델을 통한 학습, 검증, 분석한 데이터에 따라 달라집니다. 그런 점에서 데이트 검증이 중요, 텐서플로 익스텐드 패키지 TFDV(TensorFlow Data Validation) 제공

  • 쓰레기를 넣으면, 쓰레기가 나온다(Garbage In, Garbage Out - GIGO)
  • 데이터 검증은 다음의 항목 확인
    • 데이터 이상치 검증
    • 데이터 스키마 변경 여부 검증
    • 새 데이터셋 통계와 이전 학습 데이터셋 통계의 일치성 검증

TFDV(Tensorflow Data Validation)를 통한 데이터 검증

Tensorflow Data Validation - 시각화

# TFDV 설치
$ pip install tensorflow-data-validation
// 데이터 요약 통계
import tensorflow_data_validation as tfdv
stats = tfdv.generate_statistics_from_csv( 
  data_location='/data/consumer_data.csv', 
  delimiter=',')
// TFRecord 파일을 통한 피치 통계 생성
stats = tfdv.generate_statistics_from_tfrecord(
    data_location = '/data/consumer_data.tfrecord')

 

TFDV에서 패키지를 통해 생성되는 값

  • 숫자의 피치에서 TFDV에서 생성되는 항목
    • 전체 데이터 레코드 수
    • 누락 데이터 레코드 수
    • 데이터 레코드 전체에서 피처의 평균과 표준 편차
    • 데이터 레코드에서 피처의 최솟값과 최댓값
    • 데이터 레코드에서 피처의 0 값 비율
    • 각 피치의 히스토그램 생성
  • 범주형 피치에서 TFDV에서 생성되는 항목
    • 전체 데이터 레코드 수
    • 누락 데이터 레코드의 백분율
    • 고유 레코드 수
    • 피처의 모든 레코드 평균 문자열
    • 각 범주에서 레이블 별 샘플 수와 순서

TFDV에서 요약 통계를 생성한기준으로 데이터셋의 스키마 생성할 수 있음

// 스키마 생성
schema = tfdv.infer_schema(stats)

// 시키마 표시
tfdv.display_schema(schema)

a simple visualization of the schem

데이터 인식

데이터 셋을 비교할 수 있음, 학습 데이터셋과 검증 데이터셋에 대한 데이터 비교를 통해 데이터 이상 여부 판단

train_stats =tfdv.generate_statistics_from_tfrecord(
    data_location=train_tfrecord_filename)
eval_stats = tfdv.generate_statistics_from_tfrecord(
    data_location=val_tfrecord_filename)

tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats, 
    lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')

데이터 비교

// 데이터 이상치 탐지
anomalies = tfdv.validate_statistics(statistics=eval_stats, schema=schema)

// 데이터 이상치 표시
tfdv.display_anomalies(anomalies)
  • 데이터 스큐 및 드리프트(데이터 왜곡)

TFDV에는 두 데이터셋의 통계 간 큰 차이(데이터 왜곡)를 감지하는 내장 스큐(skew) 비교기 제공

tfdv.get_feature(schema, 'company).skew_comparator.infinity_norm.threshold = 0.01

skew_anomalies = tfdv.validate_statistics(statistics=train_stats,
    schema=schema,
    serving_statistics=serving_stats)

참고

반응형