MLOps

데이터 검증

백악기작은펭귄 2021. 12. 27.
반응형

데이터 검증

데이터는 모든 머신러닝 모델의 기본이다. 또한 모델의 유용성과 성능은 학습, 검증, 테스트에 사용되는 데이터의 질과 밀접한 연관이 있다. 머신러닝계에서 자주 언급되는 원칙인 GIGO(Garbage in, Garbage Out)는 이러한 특성을 잘 설명한다. 이처럼 데이터의 수집과 모델 학습 사이 제대로 된 데이터 검증은 필수적이다.

 

이번 게시글에서는 데이터 검증의 필요성과 그 아이디어를 짚어본 후 TFX에서 제공하는 TFDV(TensorFlow Data Validation)에 대해 알아보도록 하겠다.

 

머신러닝 파이프라인의 일부인 데이터 검증

 

데이터 검증 단계파이프라인의 데이터가 feature engineering 단계에서 기대하는 데이터인지 확인하는 단계이다. 데이터의 형태 및 feature는 물론 통계적인 특성 또한 점검함으로써 우리의 목적에 알맞은 데이터인지를 검증하는 것이다. 이를 통해 여러 데이터셋을 비교할 수 있으며, 시간이 흘러 데이터의 특성이 바뀌면 이를 고지해주는 역할을 하기도 한다.


데이터 검증의 필요성

단순하게 말하자면, 머신러닝은 데이터의 패턴을 학습하여 이로부터 일반화를 이끌어내는 작업이다. 따라서 데이터는 머신러닝 워크플로우에서 가장 중요한 역할을 하며 데이터의 품질은 프로젝트의 성공 여부와 직결되기도 한다.

 

머신러닝 파이프라인은 단계를 진행할지 재시작할지를 결정하는 체크 포인트를 여러 개 가지고 있다. 그중 데이터 검증 단계는, 시간이 오래 걸리는 전처리 및 학습 단계로의 진행을 결정하는 중요한 체크 포인트이다.

 

머신러닝 모델 업데이트를 자동화하려면 데이터 검증이 필수적이며, 데이터 검증은 다음과 같은 작업을 수행한다.

  • 데이터 이상치(outlier) 확인
  • 데이터셋의 schema가 변경되지 않았는지 확인
  • 새로운 데이터셋의 통계적 특성이 기존 데이터셋과 일치하는지 확인

파이프라인의 데이터 검증 단계는 위 점검을 수행한 후 오류가 있을 시 강조 표시하여 검증에 문제가 발생하였음을 알리고, 자체적으로 해결 가능한 오류(ex. 새 데이터셋을 큐레이션함으로써 해결할 수 있는 오류)일 경우 문제 해결 또한 자동적으로 수행한다. 또한 다음 단계인 전처리 단계에서 이러한 검증의 결과를 참고하는 방식으로 파이프라인을 구성할 수도 있다.

 

데이터 검증은 데이터가 지속적으로 수집되는 환경에서 더더욱 중요하다. 데이터셋의 스키마를 비교하여 기존 데이터셋과 동일한 형태인지를 빠르게 파악하고, 데이터 드리프트(drift)가 발생하지는 않았는지를 감지한다. 또한 통계적 특성을 활용하여 전처리 단계를 업데이트하거나 학습 단계에서 검증 세트와 테스트 세트의 데이터 특성이 훈련 세트와 동일한지를 검사하여 잘못된 학습을 방지하기도 한다.


TFDV - 텐서플로우 데이터 검증

텐서플로우 생태계는 데이터 검증을 지원하는 도구인 TFDV를 제공한다. 이는 TFX 프로젝트의 일부이기도 하다.

 

TFDV를 사용하면 앞서 언급한 데이터 검증 단계의 분석을 사용할 수 있다. 또한 하단 그림과 같이 구글 PAIR(People + AI Research) 프로젝트 패싯(facets)에 기반한 시각화를 제공한다.

 

TFDV 시각화 스크린샷 (출처: 텐서플로우 공식 가이드)

 

TFDV는 TFRecord와 CSV라는 두 가지 입력 형식을 허용하여 데이터 검증을 수행하며, 다른 TFX 컴포넌트와 마찬가지로 아파치 빔을 사용하여 분석을 배포한다.


TFDV 설치 및 사용

TFX 패키지를 설치할 경우 TFDV 또한 자동으로 설치된다. TFDV만을 따로 설치하고자 할 경우 다음 명령어를 이용하면 된다.

$ pip install tensorflow-data-validation

 

TFDV를 이용하면 데이터 검증 단계를 머신러닝 워크플로우에 통합하거나 대화형 셀에서 시각적인 분석을 수행할 수 있다.

 

데이터에서 통계 생성

데이터 검증 프로세스는 데이터 요약 통계에서부터 시작된다. TFDV로 데이터를 직접 로드하여 각 feature에 대한 통계를 생성할 수 있다.

import tensorflow_data_validation as tfdv

# csv 로드
stats = tfdv.generate_statistics_from_csv(
	data_location='/data/consumer_complaints.csv',
    delimiter=',')

# TFRecord 로드
stats = tfdv.generate_statistics_from_tfrecord(
	data_location='/data/consumer_complaints.csv')

 

TFDV는 최솟값, 최댓값, 평균값을 포함하여 각 feature에 관한 요약 통계를 저장하는 데이터 구조를 생성한다. 다음은 그 예시이다.

datasets {
	num_examples: 66799
    features {
    	type: STRING
        string_stats {
        	commomn_stats {
            	num_non_missing: 66799
                min_num_values: 1
                max_num_values: 1
                avg_num_values: 1.0
                num_values_histogram {
                	buckets {
                    	low_value: 1.0
                        high_value: 1.0
                        sample_count: 66799
                        .
                        .
                        .
                        }
                    }
                }
            }
        }
    }

 

데이터에서 스키마 생성

요약 통계 생성 후에는 데이터셋의 스키마(schema)를 생성해야 한다. 스키마란 데이터셋의 표현을 설명하는 형식으로, 데이터셋에 필요한 feature와 각 feature의 기반이 되는 데이터 타입(ex. int, float, byte)을 정의한다. 또한 스키마는 feature에 허용된 최솟값/최댓값, 누락 레코드의 임계값 등 데이터의 범위를 정의한다. 이렇게 정의된 스키마는 추후 새로 수집되는 데이터셋이 기존의 데이터셋과 일치하는지 점검하기 위해 사용될 수 있다.

 

TFDV에서 생성하는 스키마는 데이터 검증뿐만 아니라 학습을 위한 데이터로 사용되는 등 다른 워크플로우에서도 활용할 수 있다. 다음과 같이 단일 함수 호출로 생성한 통계에서 스키마 정보를 생성할 수 있다.

schema = tfdv.infer_schema(stats)

 

tfdv.infer_schema는 텐서플로우에서 정의한 스키마 프로토콜 버퍼를 생성한다.

feature {
	name: 'product'
    type: BYTES
    domain: 'product'
    presence {
    	min_fraction: 1.0
        min_count: 1
    }
    shape {
    	dim {
        	size: 1
        }
    }
}

 

대화형 셀에서는 단일 함수 호출로 스키마를 표시할 수 있다.

tfdv.display_schema(schema)

스키마 시각화 스크린샷 (출처: 텐서플로우 공식 가이드)

 

시각화에서 Presence는 해당 feature가 필수적(required)으로 있어야 하는지 선택적(optional)인지를 의미한다. Valency는 학습 데이터 당 필요한 값의 수를 의미하며 범주형 feature에서 single은 학습 샘플마다 하나의 범주만이 있어야 함을 의미한다.

반응형

'MLOps' 카테고리의 다른 글

GCP를 사용한 대용량 데이터셋 처리  (0) 2022.01.02
데이터 인식  (0) 2021.12.31
데이터 준비  (0) 2021.12.21
데이터 수집  (0) 2021.12.19
아파치 빔  (0) 2021.12.15

댓글