인공지능/Tensorflow Extended

[살아 움직이는 머신러닝 파이프라인 설계] 4. 데이터 검증

데이터 검증

데이터 검증 단계에서는 수집한 데이터에 이상이 없는지 확인한다. 데이터셋에 이상치가 있거나 이전 데이터셋과 데이터의 구조가 달라졌거나 통계치가 불일치하는지를 검사해 새로 수집한 데이터셋을 사용할지 말지를 결정한다.

데이터 검증의 필요성

컴퓨터 공학에서 유명한 말 중의 하나가 GIGO(Garbage In, Garbage Out)이라는 말이 있는데, 이 뜻은 입력이 나쁘면 결과값도 나쁘다는 의미다. 이는 머신러닝 프로젝트에서는 특히 강조된다. 수집한 데이터셋의 품질이 좋지 못하면 학습한 모델의 예측 결과를 정확도가 낮거나 심지어 학습이 되지 않을 수 있다. 그렇기 때문에 머신러닝 파이프라인을 통과할 데이터를 검증하는 일은 다른 과정들 중에서도 특히 조심해야 한다.
또한 지속적으로 데이터를 수집하면 데이터셋이 이전과 항상 일치하지 않다는 것도 알 수 있다. 어쩌다 데이터 분포가 불균일할 수 있고, 시간에 지남에 따라 데이터가 변할 수도 있기 때문이다. 그렇기 때문에 지속적으로 새로운 데이터를 수집하고 새로운 모델을 학습하는 프로젝터에서는 지속적으로 데이터 검증을 꼭 해줘야 한다.

TensorFlow Data Validation (TFDV)

Tensorflow Data Validation은 데이터 검증을 위한 라이브러리다. TFDV에는 데이터의 통계와 스키마 생성, 두 데이터 간의 통계치 비교, 스키마 업데이트, 데이터 스큐 및 드리프트 감지, 데이터셋 편향 감지 등을 제공한다.

데이터셋 통계와 스키마 생성

데이터셋간의 비교를 위해서는 먼저 해당 데이터셋의 통계치와 데이터 스키마를 뽑아야 한다. 여기서 데이터 스키마란 한 레코드에 들어있는 데이터의 타입과 구조 정보를 말한다. TFDV는 새로 들어온 데이터셋에 대해 통계치와 데이터 스키마를 뽑아 이들을 TFRecord 파일로 저장하는 함수를 제공한다.

데이터셋 비교

만들어진 데이터셋의 통계 데이터를 이전 데이터셋과 비교하여 얼마나 달라졌는지 확인해볼 수 있다. TFX에서는 두 통계 데이터와 이들의 차이를 시각화하는 함수를 제공해 쉽게 데이터셋을 비교해볼 수 있다.

스키마 업데이트

새로 들어온 데이터셋이 기존 데이터셋의 스키마와 일치하는지 확인해볼 수 있다. 새로운 데이터가 기존 스키마와 일치해야 이후 데이터 전처리부터 모델 학습까지 문제가 발생하지 않기 때문에 수집한 데이터들 중 몇 퍼센트가 기존 스키마에 포함되는지 검사할 수 있다. 또한 기준치를 주어 만약 만족하는 데이터 수가 기준치(Data Drift)를 넘지 못하면 데이터 과학자에게 자동으로 경고를 할 수 있다.

데이터 스큐 (Data Skew) 및 드리프트 감지

데이터 스큐나 드리프트가 발생했는지 검사할 수 있다. 여기서 말하는 데이터 스큐는 이전 데이터셋과의 통계치와 차이가 많이 벌어진 경우를 말한다. 본래 통계학에서 쓰이는 스큐의 의미와 다르기 때문에 주의해야한다. 현재 데이터셋과 이전 데이터셋의 통계치 차이를 구하고 L-Infinity Norm을 통해 이전과 통계적 성질이 많이 달라졌는지 확인할 수 있다.
데이터 드리프트란 시간이 지남에 따라 수집한 데이터셋들이 이전과 달라진 현상을 말한다. 데이터를 수집하는 대상은 끊임없이 변하기 때문에 수집하는 데이터들 또한 분포나 통계가 변할 수 있다. 그렇기 때문에 옛날 데이터로만 학습한 모델은 성능이 시간이 갈수록 떨어지게 된다. 그렇기 때문에 TFDV는 데이터를 지속적으로 수집하면서 데이터 드리프트가 감지된 경우 이를 데이터셋에 표시하고 데이터 과학자에게 안내하는 기능을 제공한다.

데이터셋 편향 감지

우리가 수집하는 데이터는 항상 모집단과 일치한다고 보장할 수 없다. 실제로 데이터를 모으다보면 표본집단의 데이터 분포가 모집단과 달라질 수 있다. 이런 현상을 데이터 편향이라 부르는데, 데이터 편향은 모델의 배포 성능에 악영향을 끼친다. 그래서 TFX에서는 데이터셋 편향이 있는지 검사하고 발견되면 이를 알려주는 기능을 제공한다.
데이터셋 편향을 검사할 때 데이터셋 전체를 검사할 수 있지만 데이터셋을 특성값에 따라 그룹지은 뒤 각 그룹마다 확인할 수 도 있다. 이렇게 여러 그룹으로 나눠 검사하면 특정 특성값에서 데이터 누락이 있는지 볼 수 있다. 예를 들어 사용자 데이터를 세대별로 나눠 확인해보면 특정 세대에 어떤 성별에 대한 데이터가 누락되어 있을 수 있다. 이를 통해 어떤 데이터를 더 수집해야하는지 확인하고 모델이 좀더 넒은 데이터 영역에서 잘 예측할 수 있다.

클라우드 솔루션을 통한 데이터셋 처리

지속적으로 데이터셋을 수집하다보면 검증해야하는 데이터의 양이 로컬 컴퓨터만으로 감당하기 힘들 수 있다. 이때 데이터 검증을 클라우드 솔루션에 위임할 수 있다. TFX는 Apache Beam 기반으로 작성되었기 때문에 Google Clould Dataflow와 같은 서비스에서도 데이터 검증을 수행할 수 있다. 클라우드의 컴퓨팅 파워를 이용해 커다란 데이터셋 검증도 빠르게 처리할 수 있다.

데이터 검증을 위한 TFX 컴포넌트

지금까지는 데이터 과학자가 TFDV를 통해 직접 데이터 검증을 진행하는 방법을 알아보았다. 이번에는 이러한 데이터 검증을 머신러닝 파이프라인에 적용하는 방법을 알아볼 것이다. TFX는 데이터 검증 단계를 위해 StatisticGen, SchemaGen, ExampleValidator라는 TFX 컴포넌트를 제공한다. 이들은 데이터셋의 정보를 뽑아내 데이터을 검증한다. 이때 이상치가 발견되면 파이프라인을 중단시키고 이상치에 대한 정보를 데이터 과학자에게 자동으로 전달한다.

StatisticsGen와 SchemaGen

StatisticGenSchemaGen은 데이터셋의 통계 정보와 데이터 스키마를 생성하는 컴포넌트다. 여기서 SchemaGen은 처음에 스키마가 없을 때만 실행한다. 보통은 기존 스키마와 새로운 데이터셋을 비교하기 때문에 새로운 특성이 발생하기 전까지는 기존 스키마를 계속 사용하게 된다.

ExampleValidator

ExampleValidatorStatisticGenSchemaGen에서 뽑아낸 통계 정보와 데이터 스키마를 받아 위에서 설명한 데이터 검증 과정을 거친다. 여기서 이상치가 발견된다면 메타데이터 스토어에 상태를 failed로 저장하고 파이프라인을 중지시킨다. 데이터 과학자는 ExampleValidator가 감지한 이상치를 확인하고 다시 새로 데이터를 수집할지, 아니면 데이터 전처리 단계로 넘길지 결정하게 된다.