SIG TFX-Addons समुदाय में शामिल हों और TFX को और बेहतर बनाने में मदद करें! SIG TFX-Addons में शामिल हों

TensorFlow Data Validation

TensorFlow विस्तारित की एक प्रमुख घटक का एक उदाहरण

यह उदाहरण कोलाब नोटबुक बताता है कि कैसे अपने डेटासेट की जांच और कल्पना करने के लिए TensorFlow Data Validation (TFDV) का उपयोग किया जा सकता है। इसमें वर्णनात्मक आँकड़े देखना, एक स्कीमा का संदर्भ देना, विसंगतियों की जाँच करना और उन्हें ठीक करना और हमारे डेटासेट में बहाव और तिरछी जाँच करना शामिल है। अपने डेटासेट की विशेषताओं को समझना महत्वपूर्ण है, जिसमें यह भी शामिल है कि यह आपके उत्पादन पाइपलाइन में समय के साथ कैसे बदल सकता है। आपके डेटा में विसंगतियों को देखने के लिए, और यह सुनिश्चित करने के लिए कि वे सुसंगत हैं, अपने प्रशिक्षण, मूल्यांकन और सेवारत डेटासेट की तुलना करना भी महत्वपूर्ण है।

हम शिकागो शहर द्वारा जारी टैक्सी ट्रिप डेटासेट के डेटा का उपयोग करेंगे।

Google BigQuery में डेटासेट के बारे में और पढ़ेंBigQuery UI में संपूर्ण डेटासेट देखें।

डेटासेट में कॉलम हैं:

pickup_community_area किराया trip_start_month
trip_start_hour ट्रिप_स्टार्ट_डे trip_start_timestamp
pickup_latitude pickup_longitude dropoff_latitude
dropoff_longitude ट्रिप_माइल्स pickup_census_tract
dropoff_census_tract भुगतान के प्रकार कंपनी
trip_seconds dropoff_community_area टिप्स

पिप को अपग्रेड करें

स्थानीय रूप से चलाते समय पिप को अपग्रेड करने से बचने के लिए, यह सुनिश्चित करने के लिए जांचें कि हम कोलाब में चल रहे हैं। स्थानीय प्रणालियों को अलग से अपग्रेड किया जा सकता है।

try:
  import colab
  !pip install --upgrade pip
except:
  pass

TensorFlow स्थापित करें

pip install tensorflow==2.2.0

पायथन संस्करण की जाँच करें

import sys

# Confirm that we're using Python 3
assert sys.version_info.major is 3, 'Oops, not running Python 3. Use Runtime > Change runtime type'

TFDV स्थापित करें

यह सभी निर्भरता में खींच लेगा, जिसमें एक मिनट लगेगा। असंगत निर्भरता संस्करणों के बारे में चेतावनी या त्रुटियों को अनदेखा करें।

import tensorflow as tf

print('Installing TensorFlow Data Validation')
!pip install -q tensorflow_data_validation[visualization]

क्या आपने रनटाइम को फिर से शुरू किया?

यदि आप Google Colab का उपयोग कर रहे हैं, तो पहली बार जब आप ऊपर सेल चलाते हैं, तो आपको रनटाइम (रनटाइम> रिस्टार्ट रनटाइम ...) को पुनरारंभ करना होगा। यह उस तरह से है क्योंकि कोलाब पैकेज को लोड करता है।

फ़ाइलें लोड करें

हम अपने डेटासेट को Google क्लाउड स्टोरेज से डाउनलोड करेंगे।

import os
import tempfile, urllib, zipfile

# Set up some globals for our file paths
BASE_DIR = tempfile.mkdtemp()
DATA_DIR = os.path.join(BASE_DIR, 'data')
OUTPUT_DIR = os.path.join(BASE_DIR, 'chicago_taxi_output')
TRAIN_DATA = os.path.join(DATA_DIR, 'train', 'data.csv')
EVAL_DATA = os.path.join(DATA_DIR, 'eval', 'data.csv')
SERVING_DATA = os.path.join(DATA_DIR, 'serving', 'data.csv')

# Download the zip file from GCP and unzip it
zip, headers = urllib.request.urlretrieve('https://storage.googleapis.com/artifacts.tfx-oss-public.appspot.com/datasets/chicago_data.zip')
zipfile.ZipFile(zip).extractall(BASE_DIR)
zipfile.ZipFile(zip).close()

print("Here's what we downloaded:")
!ls -R {os.path.join(BASE_DIR, 'data')}
Here's what we downloaded:
/tmp/tmp9ac2o66s/data:
eval  serving  train

/tmp/tmp9ac2o66s/data/eval:
data.csv

/tmp/tmp9ac2o66s/data/serving:
data.csv

/tmp/tmp9ac2o66s/data/train:
data.csv

संस्करण की जाँच करें

import tensorflow_data_validation as tfdv
print('TFDV version: {}'.format(tfdv.version.__version__))
TFDV version: 0.27.0

आंकड़ों की गणना और कल्पना करें

पहले हम अपने प्रशिक्षण डेटा के आँकड़ों की गणना करने के लिए tfdv.generate_statistics_from_csv का उपयोग करेंगे। (तेज़ चेतावनी को अनदेखा करें)

टीएफडीवी वर्णनात्मक आंकड़ों की गणना कर सकता है जो कि मौजूद विशेषताओं और उनके वितरण वितरण के आकार के संदर्भ में डेटा का त्वरित अवलोकन प्रदान करता है।

आंतरिक रूप से, टीएफडीवी बड़े डेटासेट पर आंकड़ों की गणना को स्केल करने के लिए अपाचे बीम के डेटा-समानांतर प्रसंस्करण ढांचे का उपयोग करता है। TFDV (जैसे डेटा-जनरेशन पाइपलाइन के अंत में आँकड़े जेनरेशन संलग्न करें) के साथ गहन रूप से एकीकृत करने की इच्छा रखने वाले अनुप्रयोगों के लिए, API आँकड़े निर्माण के लिए बीम PTransform भी उजागर करता है।

train_stats = tfdv.generate_statistics_from_csv(data_location=TRAIN_DATA)
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.
WARNING:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:247: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:247: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

चलिए अब tfdv.visualize_statistics का उपयोग tfdv.visualize_statistics , जो हमारे प्रशिक्षण प्रशिक्षण का एक विशिष्ट दृश्य बनाने के लिए पहलुओं का उपयोग करता है:

  • ध्यान दें कि न्यूमेरिक फीचर्स और कैटैगोरिकल फीचर्स को अलग-अलग तरह से नजर अंदाज किया जाता है और प्रत्येक फीचर के लिए डिस्ट्रीब्यूशन दिखाते हुए चार्ट प्रदर्शित किए जाते हैं।
  • ध्यान दें कि अनुपलब्ध या शून्य मान वाली विशेषताएं लाल रंग के प्रतिशत को एक दृश्य संकेतक के रूप में प्रदर्शित करती हैं जो उन विशेषताओं में उदाहरणों के साथ समस्या हो सकती हैं। प्रतिशत उन उदाहरणों का प्रतिशत है जिनमें उस सुविधा के लिए अनुपलब्ध या शून्य मान हैं।
  • ध्यान दें कि pickup_census_tract मूल्यों के साथ कोई उदाहरण नहीं हैं। यह आयामीता में कमी का अवसर है!
  • प्रदर्शन को बदलने के लिए चार्ट के ऊपर "विस्तार" पर क्लिक करने का प्रयास करें
  • बाल्टी रेंज और काउंट को प्रदर्शित करने के लिए चार्ट में बार पर मँडराने का प्रयास करें
  • लॉग और रैखिक तराजू, और नोटिस के बीच स्विच करने की कोशिश करो कैसे लॉग स्केल के बारे में और अधिक विस्तार का पता चलता है payment_type स्पष्ट सुविधा
  • "चार्ट दिखाने के लिए" मेनू से "मात्राएँ" का चयन करने का प्रयास करें, और मात्रात्मक प्रतिशत दिखाने के लिए मार्करों पर होवर करें
tfdv.visualize_statistics(train_stats)

एक स्कीमा प्राप्त करें

अब हमारे डेटा के लिए स्कीमा बनाने के लिए tfdv.infer_schema का उपयोग करें। एक स्कीमा एमएल के लिए प्रासंगिक डेटा के लिए बाधाओं को परिभाषित करता है। उदाहरण की बाधाओं में प्रत्येक सुविधा का डेटा प्रकार शामिल है, चाहे वह संख्यात्मक या श्रेणीबद्ध हो, या डेटा में इसकी उपस्थिति की आवृत्ति। श्रेणीबद्ध विशेषताओं के लिए स्कीमा डोमेन को भी परिभाषित करता है - स्वीकार्य मूल्यों की सूची। चूंकि स्कीमा लिखना एक थकाऊ काम हो सकता है, विशेष रूप से बहुत सारी विशेषताओं वाले डेटासेट्स के लिए, टीएफडीवी विवरणात्मक आंकड़ों के आधार पर स्कीमा का प्रारंभिक संस्करण उत्पन्न करने के लिए एक विधि प्रदान करता है।

स्कीमा का अधिकार प्राप्त करना महत्वपूर्ण है क्योंकि हमारे उत्पादन पाइपलाइन के बाकी हिस्से स्कीमा पर निर्भर होंगे जो कि टीएफडीवी सही होने के लिए उत्पन्न करता है। स्कीमा डेटा के लिए प्रलेखन भी प्रदान करता है, और इसलिए उपयोगी होता है जब विभिन्न डेवलपर्स एक ही डेटा पर काम करते हैं। चलो अनुमानित स्कीमा प्रदर्शित करने के लिए tfdv.display_schema का उपयोग करें ताकि हम इसकी समीक्षा कर सकें।

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:151: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

त्रुटियों के लिए मूल्यांकन डेटा की जाँच करें

अब तक हम केवल प्रशिक्षण डेटा देख रहे हैं। यह महत्वपूर्ण है कि हमारा मूल्यांकन डेटा हमारे प्रशिक्षण डेटा के अनुरूप है, जिसमें यह समान स्कीमा का उपयोग करता है। यह भी महत्वपूर्ण है कि मूल्यांकन डेटा में हमारे प्रशिक्षण डेटा के रूप में हमारी संख्यात्मक विशेषताओं के लिए लगभग समान मानों के उदाहरण शामिल हैं, ताकि मूल्यांकन के दौरान नुकसान की सतह के बारे में हमारी कवरेज प्रशिक्षण के दौरान लगभग समान हो। श्रेणीबद्ध विशेषताओं के लिए भी यही सच है। अन्यथा, हमारे पास प्रशिक्षण के मुद्दे हो सकते हैं जो मूल्यांकन के दौरान पहचाने नहीं जाते हैं, क्योंकि हमने अपने नुकसान की सतह के हिस्से का मूल्यांकन नहीं किया है।

  • ध्यान दें कि प्रत्येक विशेषता में अब प्रशिक्षण और मूल्यांकन डेटासेट दोनों के आंकड़े शामिल हैं।
  • ध्यान दें कि चार्ट में अब प्रशिक्षण और मूल्यांकन डेटासेट दोनों शामिल हैं, जिससे उनकी तुलना करना आसान हो जाता है।
  • ध्यान दें कि चार्ट में अब एक प्रतिशत दृश्य शामिल है, जिसे लॉग या डिफ़ॉल्ट रैखिक पैमानों के साथ जोड़ा जा सकता है।
  • ध्यान दें कि trip_miles लिए माध्य और माध्य, प्रशिक्षण बनाम मूल्यांकन डेटासेट के लिए अलग-अलग हैं। क्या इससे समस्याएं पैदा होंगी?
  • वाह, प्रशिक्षण बनाम मूल्यांकन डेटासेट के लिए अधिकतम tips बहुत भिन्न हैं। क्या इससे समस्याएं पैदा होंगी?
  • न्यूमेरिक फीचर्स चार्ट पर विस्तार पर क्लिक करें, और लॉग स्केल का चयन करें। trip_seconds सुविधा की समीक्षा करें, और अधिकतम अंतर पर ध्यान दें। क्या मूल्यांकन नुकसान की सतह के कुछ हिस्सों को याद करेगा?
# Compute stats for evaluation data
eval_stats = tfdv.generate_statistics_from_csv(data_location=EVAL_DATA)

# Compare evaluation data with training data
tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats,
                          lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')

मूल्यांकन विसंगतियों के लिए जाँच करें

क्या हमारा मूल्यांकन डेटासेट हमारे प्रशिक्षण डेटासेट से स्कीमा से मेल खाता है? यह श्रेणीबद्ध विशेषताओं के लिए विशेष रूप से महत्वपूर्ण है, जहां हम स्वीकार्य मूल्यों की श्रेणी की पहचान करना चाहते हैं।

# Check eval data for errors by validating the eval data stats using the previously inferred schema.
anomalies = tfdv.validate_statistics(statistics=eval_stats, schema=schema)
tfdv.display_anomalies(anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

स्कीमा में मूल्यांकन विसंगतियों को ठीक करें

उफ़! ऐसा लगता है कि हमारे मूल्यांकन डेटा में company लिए कुछ नए मूल्य हैं, जो हमारे प्रशिक्षण डेटा में नहीं थे। हमारे पास payment_type नया मान भी है। इन्हें विसंगति माना जाना चाहिए, लेकिन हम उनके बारे में क्या करना चाहते हैं, यह डेटा के हमारे डोमेन ज्ञान पर निर्भर करता है। यदि एक विसंगति वास्तव में एक डेटा त्रुटि को इंगित करता है, तो अंतर्निहित डेटा को ठीक किया जाना चाहिए। अन्यथा, हम eval डाटासेट में मूल्यों को शामिल करने के लिए स्कीमा को अपडेट कर सकते हैं।

जब तक हम अपना मूल्यांकन डेटासेट नहीं बदल लेते, तब तक हम सब कुछ ठीक नहीं कर सकते, लेकिन हम स्कीमा में उन चीजों को ठीक कर सकते हैं जिन्हें हम स्वीकार करने में सहज हैं। इसमें विशेष सुविधाओं के लिए क्या है और क्या कोई विसंगति नहीं है, के साथ-साथ श्रेणीबद्ध विशेषताओं के लापता मूल्यों को शामिल करने के लिए हमारे स्कीमा को अपडेट करने के बारे में हमारे दृष्टिकोण को आराम देना शामिल है। टीएफडीवी ने हमें यह पता लगाने में सक्षम किया है कि हमें क्या तय करना है।

आइए अब उन सुधारों को करें और फिर एक बार समीक्षा करें।

# Relax the minimum fraction of values that must come from the domain for feature company.
company = tfdv.get_feature(schema, 'company')
company.distribution_constraints.min_domain_mass = 0.9

# Add new value to the domain of feature payment_type.
payment_type_domain = tfdv.get_domain(schema, 'payment_type')
payment_type_domain.value.append('Prcard')

# Validate eval stats after updating the schema 
updated_anomalies = tfdv.validate_statistics(eval_stats, schema)
tfdv.display_anomalies(updated_anomalies)

अरे, वो देखो! हमने सत्यापित किया कि प्रशिक्षण और मूल्यांकन डेटा अब सुसंगत हैं! धन्यवाद TFDV;)

योजनाओं का वातावरण

हम इस उदाहरण के लिए एक 'सर्विंग' डेटासेट भी विभाजित करते हैं, इसलिए हमें वह भी जांचना चाहिए। डिफ़ॉल्ट रूप से एक पाइपलाइन में सभी डेटासेट एक ही स्कीमा का उपयोग करना चाहिए, लेकिन अक्सर अपवाद हैं। उदाहरण के लिए, पर्यवेक्षित शिक्षण में हमें अपने डेटासेट में लेबल को शामिल करने की आवश्यकता होती है, लेकिन जब हम मॉडल की सेवा के लिए इंजेक्शन लगाते हैं तो वे शामिल नहीं होंगे। कुछ मामलों में मामूली स्कीमा भिन्नताओं का परिचय आवश्यक है।

ऐसी आवश्यकताओं को व्यक्त करने के लिए वातावरण का उपयोग किया जा सकता है। विशेष रूप से, स्कीमा में सुविधाओं को default_environment , in_environment और not_in_environment का उपयोग करके वातावरण के एक सेट के साथ जोड़ा जा सकता है।

उदाहरण के लिए, इस डेटासेट में tips सुविधा प्रशिक्षण के लिए लेबल के रूप में शामिल है, लेकिन यह सेवारत डेटा में गायब है। निर्दिष्ट पर्यावरण के बिना, यह एक विसंगति के रूप में दिखाई देगा।

serving_stats = tfdv.generate_statistics_from_csv(SERVING_DATA)
serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

tfdv.display_anomalies(serving_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

हम नीचे दिए गए tips सुविधा से निपटेंगे। हमारी ट्रिप सेकंड्स में हमारा INT मान भी है, जहाँ हमारे स्कीमा ने FLOAT की अपेक्षा की है। हमें उस अंतर से अवगत कराते हुए, TFDV उस तरह से विसंगतियों को उजागर करने में मदद करता है जिस तरह से प्रशिक्षण और सेवा के लिए डेटा उत्पन्न होता है। इस तरह की समस्याओं से अनजान रहना बहुत आसान है, जब तक कि मॉडल का प्रदर्शन खराब न हो जाए, कभी-कभी विनाशकारी रूप से। यह एक महत्वपूर्ण मुद्दा हो सकता है या नहीं भी हो सकता है, लेकिन किसी भी मामले में यह आगे की जांच का कारण होना चाहिए।

इस स्थिति में, हम INT मानों को FLOATs में सुरक्षित रूप से परिवर्तित कर सकते हैं, इसलिए हम टाइप करने के लिए अपने स्कीमा का उपयोग करने के लिए TFDV को बताना चाहते हैं। चलो अब करते हैं।

options = tfdv.StatsOptions(schema=schema, infer_type_from_schema=True)
serving_stats = tfdv.generate_statistics_from_csv(SERVING_DATA, stats_options=options)
serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

tfdv.display_anomalies(serving_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

अब हमारे पास सिर्फ tips सुविधा है (जो कि हमारा लेबल है) एक विसंगति ('कॉलम गिरा') के रूप में दिखा रहा है। बेशक, हमें अपने सेवारत डेटा में लेबल होने की उम्मीद नहीं है, इसलिए आइए हम टीएफडीवी को इसे अनदेखा करने के लिए कहें।

# All features are by default in both TRAINING and SERVING environments.
schema.default_environment.append('TRAINING')
schema.default_environment.append('SERVING')

# Specify that 'tips' feature is not in SERVING environment.
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)

बहाव और तिरछा के लिए जाँच करें

यह देखने के लिए कि क्या कोई स्कीमा स्कीमा में सेट की गई अपेक्षाओं के अनुरूप है, टीएफडीवी भी बहाव और तिरछा का पता लगाने के लिए कार्यात्मकता प्रदान करता है। TFDV स्कीमा में निर्दिष्ट बहाव / तिरछा तुलनित्र के आधार पर विभिन्न डेटासेट के आँकड़ों की तुलना करके यह जाँच करता है।

अभिप्राय

ड्रिफ्ट डिटेक्शन को कंफर्टिकल फीचर्स के लिए और डेटा के लगातार स्पेन्स के बीच (यानी, स्पैन एन और स्पैन एन + 1 के बीच) के लिए सपोर्ट किया जाता है, जैसे कि ट्रेनिंग डेटा के विभिन्न दिनों के बीच। हम L- अनन्तता दूरी के संदर्भ में बहाव व्यक्त करते हैं, और आप थ्रेशोल्ड दूरी निर्धारित कर सकते हैं ताकि बहाव के स्वीकार्य से अधिक होने पर आपको चेतावनी मिले। सही दूरी तय करना आम तौर पर एक पुनरावृत्ति प्रक्रिया है जिसमें डोमेन ज्ञान और प्रयोग की आवश्यकता होती है।

तिरछा

टीएफडीवी आपके डेटा में तीन अलग-अलग प्रकार के तिरछे का पता लगा सकता है - स्कीमा तिरछा, सुविधा तिरछा और वितरण तिरछा।

स्कीमा तिरछा

स्कीमा तिरछा तब होता है जब प्रशिक्षण और सेवारत डेटा एक ही स्कीमा के अनुरूप नहीं होते हैं। प्रशिक्षण और सेवारत डेटा दोनों को एक ही स्कीमा का पालन करने की उम्मीद है। दोनों के बीच कोई अपेक्षित विचलन (जैसे कि लेबल सुविधा केवल प्रशिक्षण डेटा में मौजूद है, लेकिन सेवा में नहीं) स्कीमा में पर्यावरण के क्षेत्र के माध्यम से निर्दिष्ट किया जाना चाहिए।

फ़ीचर तिरछा

फ़ीचर तिरछा तब होता है जब फ़ीचर वैल्यूज़ होता है, जिस पर एक मॉडल ट्रेन फ़ीचर वैल्यू से अलग होती है, जिसे वह सर्विंग टाइम पर देखती है। उदाहरण के लिए, यह तब हो सकता है जब:

  • डेटा स्रोत जो कुछ सुविधा मान प्रदान करता है, प्रशिक्षण और सेवारत समय के बीच संशोधित होता है
  • प्रशिक्षण और सेवारत के बीच सुविधाओं को उत्पन्न करने के लिए अलग-अलग तर्क हैं। उदाहरण के लिए, यदि आप केवल दो कोड पथों में से कुछ परिवर्तन लागू करते हैं।

वितरण तिरछा

वितरण तिरछा तब होता है जब प्रशिक्षण डेटासेट का वितरण सेवारत डेटासेट के वितरण से काफी अलग होता है। वितरण तिरछा करने के प्रमुख कारणों में से एक है प्रशिक्षण डेटासेट उत्पन्न करने के लिए विभिन्न कोड या विभिन्न डेटा स्रोतों का उपयोग करना। एक और कारण एक दोषपूर्ण नमूनाकरण तंत्र है जो प्रशिक्षण के लिए एक गैर-प्रतिनिधि सदस्यता के डेटा का चयन करता है।

# Add skew comparator for 'payment_type' feature.
payment_type = tfdv.get_feature(schema, 'payment_type')
payment_type.skew_comparator.infinity_norm.threshold = 0.01

# Add drift comparator for 'company' feature.
company=tfdv.get_feature(schema, 'company')
company.drift_comparator.infinity_norm.threshold = 0.001

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

tfdv.display_anomalies(skew_anomalies)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/display_util.py:186: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.
  pd.set_option('max_colwidth', -1)

इस उदाहरण में हम कुछ बहाव देखते हैं, लेकिन यह उस सीमा से काफी नीचे है जिसे हमने निर्धारित किया है।

स्कीमा को फ्रीज करें

अब जब स्कीमा की समीक्षा की गई है और क्यूरेट किया गया है, तो हम इसकी "फ्रोजन" स्थिति को दर्शाने के लिए एक फाइल में स्टोर करेंगे।

from tensorflow.python.lib.io import file_io
from google.protobuf import text_format

file_io.recursive_create_dir(OUTPUT_DIR)
schema_file = os.path.join(OUTPUT_DIR, 'schema.pbtxt')
tfdv.write_schema_text(schema, schema_file)

!cat {schema_file}
feature {
  name: "payment_type"
  type: BYTES
  domain: "payment_type"
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  skew_comparator {
    infinity_norm {
      threshold: 0.01
    }
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "company"
  value_count {
    min: 1
    max: 1
  }
  type: BYTES
  domain: "company"
  presence {
    min_count: 1
  }
  distribution_constraints {
    min_domain_mass: 0.9
  }
  drift_comparator {
    infinity_norm {
      threshold: 0.001
    }
  }
}
feature {
  name: "pickup_community_area"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "fare"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_month"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_hour"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_day"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "trip_start_timestamp"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_latitude"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_longitude"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "dropoff_latitude"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_count: 1
  }
}
feature {
  name: "dropoff_longitude"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_count: 1
  }
}
feature {
  name: "trip_miles"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "pickup_census_tract"
  type: BYTES
  presence {
    min_count: 0
  }
}
feature {
  name: "dropoff_census_tract"
  value_count {
    min: 1
    max: 1
  }
  type: INT
  presence {
    min_count: 1
  }
}
feature {
  name: "trip_seconds"
  type: INT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  shape {
    dim {
      size: 1
    }
  }
}
feature {
  name: "dropoff_community_area"
  value_count {
    min: 1
    max: 1
  }
  type: INT
  presence {
    min_count: 1
  }
}
feature {
  name: "tips"
  type: FLOAT
  presence {
    min_fraction: 1.0
    min_count: 1
  }
  not_in_environment: "SERVING"
  shape {
    dim {
      size: 1
    }
  }
}
string_domain {
  name: "payment_type"
  value: "Cash"
  value: "Credit Card"
  value: "Dispute"
  value: "No Charge"
  value: "Pcard"
  value: "Unknown"
  value: "Prcard"
}
string_domain {
  name: "company"
  value: "0118 - 42111 Godfrey S.Awir"
  value: "0694 - 59280 Chinesco Trans Inc"
  value: "1085 - 72312 N and W Cab Co"
  value: "2733 - 74600 Benny Jona"
  value: "2809 - 95474 C & D Cab Co Inc."
  value: "3011 - 66308 JBL Cab Inc."
  value: "3152 - 97284 Crystal Abernathy"
  value: "3201 - C&D Cab Co Inc"
  value: "3201 - CID Cab Co Inc"
  value: "3253 - 91138 Gaither Cab Co."
  value: "3385 - 23210 Eman Cab"
  value: "3623 - 72222 Arrington Enterprises"
  value: "3897 - Ilie Malec"
  value: "4053 - Adwar H. Nikola"
  value: "4197 - 41842 Royal Star"
  value: "4615 - 83503 Tyrone Henderson"
  value: "4615 - Tyrone Henderson"
  value: "4623 - Jay Kim"
  value: "5006 - 39261 Salifu Bawa"
  value: "5006 - Salifu Bawa"
  value: "5074 - 54002 Ahzmi Inc"
  value: "5074 - Ahzmi Inc"
  value: "5129 - 87128"
  value: "5129 - 98755 Mengisti Taxi"
  value: "5129 - Mengisti Taxi"
  value: "5724 - KYVI Cab Inc"
  value: "585 - Valley Cab Co"
  value: "5864 - 73614 Thomas Owusu"
  value: "5864 - Thomas Owusu"
  value: "5874 - 73628 Sergey Cab Corp."
  value: "5997 - 65283 AW Services Inc."
  value: "5997 - AW Services Inc."
  value: "6488 - 83287 Zuha Taxi"
  value: "6743 - Luhak Corp"
  value: "Blue Ribbon Taxi Association Inc."
  value: "C & D Cab Co Inc"
  value: "Chicago Elite Cab Corp."
  value: "Chicago Elite Cab Corp. (Chicago Carriag"
  value: "Chicago Medallion Leasing INC"
  value: "Chicago Medallion Management"
  value: "Choice Taxi Association"
  value: "Dispatch Taxi Affiliation"
  value: "KOAM Taxi Association"
  value: "Northwest Management LLC"
  value: "Taxi Affiliation Services"
  value: "Top Cab Affiliation"
}
default_environment: "TRAINING"
default_environment: "SERVING"

टीएफडीवी का उपयोग कब करें

टीएफडीवी को केवल अपने प्रशिक्षण पाइपलाइन की शुरुआत में लागू करना आसान है, जैसा कि हमने यहां किया था, लेकिन वास्तव में इसके कई उपयोग हैं। यहाँ कुछ और है:

  • यह सुनिश्चित करने के लिए कि हमने अचानक खराब सुविधाएं प्राप्त नहीं की हैं, के लिए नए डेटा की पुष्टि करना
  • यह सुनिश्चित करने के लिए कि हमारे मॉडल ने निर्णय सतह के उस भाग को प्रशिक्षित किया है, के लिए नए डेटा की पुष्टि करना
  • यह सुनिश्चित करने के बाद कि हमने कुछ गलत नहीं किया है, यह सुनिश्चित करने के बाद हमने अपने डेटा को बदल दिया है और फीचर इंजीनियरिंग (शायद TensorFlow Transform का उपयोग करके) किया है।