본문 바로가기
공부/MLOps

MLops - 5.1 (TFDV)

by DSLAB_JS 2022. 2. 2.

MLops-5 글에 이어서 이번에는 '스키마 추론과 스키마 환경'에 대해서 이어서 정리를 해보려고 한다.

  • 데이터 검증 ( TFDV )
    • 데이터 검증 TFDV
    • 스키마 추론과 스키마 환경
    • 데이터 드리프트 및 스큐
  • 스키마 추론
    • tfdv.infer_schema를 사용해서 데이터에 대한 스키마를 생성할 수 있다.
      • csv에서 학습데이터에 대한 스키마를 뽑을 수 있다.
      • 피쳐들이 자료형인지(int, float..) 알아서 정리를 해준다. 카테고리도 마찬가지로 정리가 된다.
    • TFDV를 통해서 스키마에 대한 추론을 한 다음에, 스키마가 어떻게 구성되어 있는지를 하나의 스키마로 출력을 할 수 있다.
    • schema = tfdv.infer_schema(statistics=train_stats)
      tfdv.display_schema(schema=schema)
    • schema를 한눈에 정리한 이미지
    • 평가 데이터의 오류 확인
    • eval_stats = tfdv.generate_statistics_from_csv(data_location=EVAL_DATA)
      tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats,
      								lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')
      • 두 개의 데이터 통계치를 같이 넣어주면은 tfdv가 두가지 데이터를 한번에 비교를 해준다. 
      • 파란색이 평가데이터, 노란색이 학습데이터인데 각각의 평균, 분포를 볼 수 있다.
      • 시각화를 하다보면 분포가 많이 다른 경우를 볼 수 있다. 분포가 쏠려있으면 학습에 대한 성능이 낮아질 수 있다. tfdv를 통해서 눈으로 확인할 수 있다. -> 데이터를 깊이 파봐야 모델에 대한 객관적인 문제점을 진단할 수 있다.
    • 평가 데이터의 이상 데이터 확인
      • anomalies = tfdv.validate_statistics(statistics=eval_stats, schema=schema)
        tfdv.display_anomalies(anomalies)
      • 만든 스키마를 가져와서 평가를 해보는 것이다. statistics를 스키마를 기반으로 평가를 할 수 있다. 
      • 위를 통해 anomalies을 판단하게 된다. 
      • company라는 필드에 학습데이터에서는 없었지만 새로생긴 company가 확인이 된 것을 볼 수 있다. 이러한 것들이 성능을 떨어트리는 것이다.
      • panyment_type도 prcard라는 것이 학습데이터에서 없었는데 생긴 것을 확인 할 수 있다.
      • 위의 작업을 통해서 학습데이터와 평가데이터를 비교해서 평가데이터에 이상 데이터가 있는지 체크할 수 있다. 
    • 스키마의 평가 이상 수정
      • 위에서 이상 데이터를 확인했다.
      • 이상이 실제로 데이터 오류를 나타내는 경우 기본 데이터를 수정해야 한다. 그렇지 않으면 평가 데이터 세트에 값을 포함하도록 스키마를 업데이트 할 수 있다.
      • company = tfdv.get_feature(schema,'company')
        company.distribution_constraints.min_domain_mass = 0.9
        
        payment_type_domain = tfdv.get_domain(schema,'payment_type')
        payment_type_domain.value.append('Prcard')
        
        updated_animalies = tfdv.validate_statistics(eval_stats, schema)
        tfdv.display_anomalies(updated_anomalies)
      • 위의 작업을 통해서 company값과 Prcard값에 대해서 변경 및 추가를 해준 후, 업데이트(변경된 스키마로)를 해준다. 
      • 스키마를 업데이트 해주면 'No anomalies found'라는 값이 나오면 이상을 찾을 수 없다고 뜬다. 
    • 스키마 환경
      • 이 예제에서 'Serving' 데이터 셋을 분리했어서 이것도 확인해야한다. 
      • 기본적으로 파이프 라인의 모든 데이터 셋은 동일한 스키마를 사용하지만 예외가 있는 경우도 많다.
      • schema의 피처는 defalut_environment, in_environment및 not_in_environmen를 사용할 수 있다.
      • serving_stats = tfdv.generate_statistics_from_csv(SERVING_DATA)
        serving_anomalies = tfdv.validate_statistics(serving_stats, schema)
        
        tfdv.display_anomalies(serving_anomalies)
      • Serving 데이터 셋의 anomalies를 확인 하는 것이다. 여기서 'tips'이라는 피쳐가 빠져있다는 것을 확인했으므로, 추가해줘야한다. 
      • options = tfdv.StatsOptions(schema = schema, infer_type_from_schema = True)
        serving_stats = tfdv.tfdv.generate_statistics_from_csv(SERVING_DATA, stats_options = options)
        serving_anomalies = tfdv.validate_statistics(serving_stats, schema)
        
        tfdv.display_anomalies(serving_anomalies)
      • schema.default_environment.append('TRAINING’)
        schema.default_environment.append('SERVING’)
        
        tfdv.get_feature(schema, 'tips').not_in_environment.append('SERVING’)
        
        serving_anomalies_with_env = tfdv.validate_statistics(
        	serving_stats, schema, environment='SERVING’)
        
        tfdv.display_anomalies(serving_anomalies_with_env)
      • 위의 작업을 통해 'tips'라는 피쳐는 'Serving'타입에는 사용되지 않는다고 처리한다. serving에서 anomalies가 없다는 것을 확인 할 수 있다.

'공부 > MLOps' 카테고리의 다른 글

MLops - 6. 도커 & 쿠버네틱스  (0) 2022.03.01
MLOps - 5 (TFDV)  (0) 2022.01.23
MLOps - 4  (0) 2022.01.06
MLOps - 3  (0) 2022.01.03
MLOps - 2  (0) 2021.12.12