Quickstart - Full Suite in 5 Minutes#

In order to run your first Deepchecks Suite all you need to have is the data and model that you wish to validate. More specifically, you need:

  • Your train and test data (in Pandas DataFrames or Numpy Arrays)

  • (optional) A supported model (including XGBoost, scikit-learn models, and many more). Required for running checks that need the model’s predictions for running.

To run your first suite on your data and model, you need only a few lines of code, that start here: Define a Dataset Object.

# If you don’t have deepchecks installed yet:

# If you don't have deepchecks installed yet:
import sys
!{sys.executable} -m pip install deepchecks -U --quiet #--user

Load Data, Split Train-Val, and Train a Simple Model#

For the purpose of this guide we’ll use the simple iris dataset and train a simple random forest model for multiclass classification:

import numpy as np
# General imports
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

from deepchecks.tabular.datasets.classification import iris

# Load Data
iris_df = iris.load_data(data_format='Dataframe', as_train_test=False)
label_col = 'target'
df_train, df_test = train_test_split(iris_df, stratify=iris_df[label_col], random_state=0)

# Train Model
rf_clf = RandomForestClassifier(random_state=0)
rf_clf.fit(df_train.drop(label_col, axis=1), df_train[label_col]);
RandomForestClassifier(random_state=0)

Define a Dataset Object#

Initialize the Dataset object, stating the relevant metadata about the dataset (e.g. the name for the label column)

Check out the Dataset’s attributes to see which additional special columns can be declared and used (e.g. date column, index column).

from deepchecks.tabular import Dataset

# We explicitly state that this dataset has no categorical features, otherwise they will be automatically inferred
# If the dataset has categorical features, the best practice is to pass a list with their names

ds_train = Dataset(df_train, label=label_col, cat_features=[])
ds_test =  Dataset(df_test,  label=label_col, cat_features=[])

Run a Deepchecks Suite#

Run the full suite#

Use the full_suite that is a collection of (most of) the prebuilt checks.

Check out the when should you use deepchecks guide for some more info about the existing suites and when to use them.

from deepchecks.tabular.suites import full_suite

suite = full_suite()
suite.run(train_dataset=ds_train, test_dataset=ds_test, model=rf_clf)
Full Suite:
|                                    | 0/36 [Time: 00:00]
Full Suite:
|#                                   | 1/36 [Time: 00:00, Check=Train Test Performance]
Full Suite:
|####                                | 4/36 [Time: 00:00, Check=Train Test Prediction Drift]
Full Suite:
|######                              | 6/36 [Time: 00:01, Check=Weak Segments Performance]
Full Suite:
|####################                | 20/36 [Time: 00:01, Check=Train Test Samples Mix]
Full Suite:
|##########################          | 26/36 [Time: 00:02, Check=Special Characters]
Full Suite:
|##################################  | 34/36 [Time: 00:02, Check=Feature Label Correlation]
Full Suite


Run the integrity suite#

If you still haven’t started modeling and just have a single dataset, you can use the single_dataset_integrity:

from deepchecks.tabular.suites import single_dataset_integrity

integ_suite = single_dataset_integrity()
integ_suite.run(ds_train)
the single_dataset_integrity suite is deprecated, use the data_integrity suite instead

Data Integrity Suite:
|            | 0/12 [Time: 00:00]
Data Integrity Suite:
|########### | 11/12 [Time: 00:00, Check=Feature Feature Correlation]
Data Integrity Suite


Run a Deepchecks Check#

If you want to run a specific check, you can just import it and run it directly.

Check out the Check tabular examples in the examples or the API Reference for more info about the existing checks and their parameters.

from deepchecks.tabular.checks import TrainTestLabelDrift
check = TrainTestLabelDrift()
result = check.run(ds_train, ds_test)
result
Train Test Label Drift


and also inspect the result value which has a check-dependant structure:

result.value
{'Drift score': 0.0, 'Method': "Cramer's V"}

Edit an Existing Suite#

Inspect suite and remove condition#

We can see that the Feature Label Correlation check failed, both for test and for train. Since this is a very simple dataset with few features and this behavior is not necessarily problematic, we will remove the existing conditions for the PPS

# Lets first print the suite to find the conditions that we want to change:

suite
Full Suite: [
    0: TrainTestPerformance
            Conditions:
                    0: Train-Test scores relative degradation is less than 0.1
    1: RocReport(excluded_classes=[])
            Conditions:
                    0: AUC score for all the classes is greater than 0.7
    2: ConfusionMatrixReport
    3: TrainTestPredictionDrift
            Conditions:
                    0: categorical drift score < 0.15 and numerical drift score < 0.075
    4: SimpleModelComparison
            Conditions:
                    0: Model performance gain over simple model is greater than 10%
    5: WeakSegmentsPerformance(n_to_show=5)
            Conditions:
                    0: The relative performance of weakest segment is greater than 80% of average model performance.
    6: CalibrationScore
    7: RegressionSystematicError
            Conditions:
                    0: Bias ratio is less than 0.01
    8: RegressionErrorDistribution
            Conditions:
                    0: Kurtosis value is greater than -0.1
    9: UnusedFeatures
            Conditions:
                    0: Number of high variance unused features is less or equal to 5
    10: BoostingOverfit
            Conditions:
                    0: Test score over iterations is less than 5% from the best score
    11: ModelInferenceTime
            Conditions:
                    0: Average model inference time for one sample is less than 0.001
    12: DatasetsSizeComparison
            Conditions:
                    0: Test-Train size ratio is greater than 0.01
    13: NewLabelTrainTest
            Conditions:
                    0: Number of new label values is less or equal to 0
    14: CategoryMismatchTrainTest
            Conditions:
                    0: Ratio of samples with a new category is less or equal to 0%
    15: StringMismatchComparison
            Conditions:
                    0: No new variants allowed in test data
    16: DateTrainTestLeakageDuplicates
            Conditions:
                    0: Date leakage ratio is less or equal to 0%
    17: DateTrainTestLeakageOverlap
            Conditions:
                    0: Date leakage ratio is less or equal to 0%
    18: IndexTrainTestLeakage
            Conditions:
                    0: Ratio of leaking indices is less or equal to 0%
    19: TrainTestSamplesMix
            Conditions:
                    0: Percentage of test data samples that appear in train data is less or equal to 10%
    20: FeatureLabelCorrelationChange(ppscore_params={}, random_state=42)
            Conditions:
                    0: Train-Test features' Predictive Power Score difference is less than 0.2
                    1: Train features' Predictive Power Score is less than 0.7
    21: TrainTestFeatureDrift
            Conditions:
                    0: categorical drift score < 0.2 and numerical drift score < 0.1
    22: TrainTestLabelDrift
            Conditions:
                    0: categorical drift score < 0.2 and numerical drift score < 0.1 for label drift
    23: WholeDatasetDrift
            Conditions:
                    0: Drift value is less than 0.25
    24: IsSingleValue
            Conditions:
                    0: Does not contain only a single value
    25: SpecialCharacters
            Conditions:
                    0: Ratio of samples containing solely special character is less or equal to 0.1%
    26: MixedNulls
            Conditions:
                    0: Number of different null types is less or equal to 1
    27: MixedDataTypes
            Conditions:
                    0: Rare data types in column are either more than 10% or less than 1% of the data
    28: StringMismatch
            Conditions:
                    0: No string variants
    29: DataDuplicates
            Conditions:
                    0: Duplicate data ratio is less or equal to 0%
    30: StringLengthOutOfBounds
            Conditions:
                    0: Ratio of string length outliers is less or equal to 0%
    31: ConflictingLabels
            Conditions:
                    0: Ambiguous sample ratio is less or equal to 0%
    32: OutlierSampleDetection
    33: FeatureLabelCorrelation(ppscore_params={}, random_state=42)
            Conditions:
                    0: Features' Predictive Power Score is less than 0.8
    34: FeatureFeatureCorrelation
            Conditions:
                    0: Not more than 0 pairs are correlated above 0.9
    35: IdentifierLabelCorrelation(ppscore_params={})
            Conditions:
                    0: Identifier columns PPS is less or equal to 0
]
# now we can use the check's index and the condition's number to remove it:
print(suite[5])
suite[5].remove_condition(0)
WeakSegmentsPerformance(n_to_show=5)
        Conditions:
                0: The relative performance of weakest segment is greater than 80% of average model performance.
# print and see that the condition was removed
suite[5]
WeakSegmentsPerformance(n_to_show=5)

If we now re-run the suite, all of the existing conditions will pass.

Note: the check we manipulated will still run as part of the Suite, however it won’t appear in the Conditions Summary since it no longer has any conditions defined on it. You can still see its display results in the Additional Outputs section

For more info about working with conditions, see the detailed configuring conditions guide.

Total running time of the script: ( 0 minutes 5.110 seconds)

Gallery generated by Sphinx-Gallery