Package: cinnamon
Introduction to CinnaMonCinnaMonis a Python library which allows to monitor data drift on a
machine learning system. It provides tools to study data drift between two datasets,
especially to detect, explain, and correct data drift.⚡️ QuickstartAs a quick example, let’s illustrate the use of CinnaMon on the breast cancer data where we voluntarily introduce some data drift.Setup the data and build a model>>>importpandasaspd>>>fromsklearnimportdatasets>>>fromsklearn.model_selectionimporttrain_test_split>>>fromxgboostimportXGBClassifier# load breast cancer data>>>dataset=datasets.load_breast_cancer()>>>X=pd.DataFrame(dataset.data,columns=dataset.feature_names)>>>y=dataset.target# split data in train and valid dataset>>>X_train,X_valid,y_train,y_valid=train_test_split(X,y,test_size=0.3,random_state=2021)# introduce some data drift in valid by filtering with 'worst symmetry' feature>>>y_valid=y_valid[X_valid['worst symmetry'].values>0.3]>>>X_valid=X_valid.loc[X_valid['worst symmetry'].values>0.3,:].copy()# fit a XGBClassifier on the training data>>>clf=XGBClassifier(use_label_encoder=False)>>>clf.fit(X=X_train,y=y_train,verbose=10)Initialize ModelDriftExplainer and fit on train and validation data>>>importcinnamon>>>fromcinnamon.driftimportModelDriftExplainer# initialize a drift explainer with the built XGBClassifier and fit it on train# and valid data>>>drift_explainer=ModelDriftExplainer(model=clf)>>>drift_explainer.fit(X1=X_train,X2=X_valid,y1=y_train,y2=y_valid)Detect data drift by looking at main graphs and metrics# Distribution of logit predictions>>>cinnamon.plot_prediction_drift(drift_explainer,bins=15)We can see on this graph that because of the data drift we introduced in validation
data the distribution of predictions are different (they do not overlap well). We
can also compute the corresponding drift metrics:# Corresponding metrics>>>drift_explainer.get_prediction_drift()[{'mean_difference':-3.643428434667366,'wasserstein':3.643428434667366,'kolmogorov_smirnov':KstestResult(statistic=0.2913775225333014,pvalue=0.00013914094110123454)}]Comparing the distributions of predictions for two datasets is one of the main
indicator we use in order to detect data drift. The two other indicators are:distribution of the target (seeget_target_drift)performance metrics (seeget_performance_metrics_drift)Explain data drift by computing the drift importancesDrift importances can be thought as equivalent of feature importances but in terms of data drift.# plot drift importances>>>cinnamon.plot_tree_based_drift_importances(drift_explainer,n=7)Here the featureworst symmetryis rightly identified as the one which contributes the most to the data drift.MoreSee “notes” below to explore all the functionalities of CinnaMon.🛠 InstallationCinnaMon is intended to work withPython 3.7 or above. Installation can be done withpip:$pipinstallcinnamon🔗 NotesCinnaMondocumentationThe two main classes of CinnaMon areModelDriftExplainerandAdversarialDriftExplainerCinnaMon supports both model specific and model agnostic methods for the computation of
drift importances. More informationhere.CinnaMon can be used with any model or ML pipeline thanks to model agnostic mode.See notebooks in theexamples/directory to have an overview of all functionalities.
Notably:Covariate shift example with IEEE dataConcept drift example with IEEE dataThese two notebooks also go deeper into the topic of how to correct data drift, making use ofAdversarialDriftExplainerSee also theslide presentationof the CinnaMon library. And thevideo presentation.👍 ContributingCheck out thecontributionsection.📝 LicenseCinnaMon is free and open-source software licensed under theMIT.