diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 7c866fdb..34371413 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -33,17 +33,16 @@ repos:
types: [python]
- repo: local
hooks:
- - id: ruff
- name: 'ruff: Check for errors, styling issues and complexity'
+ - id: ruff-check
+ name: 'Ruff: Check for errors, styling issues and complexity, and fixes issues if possible (including import order)'
entry: ruff
language: system
- - repo: local
- hooks:
- - id: isort
- name: 'isort: Sort file imports'
- entry: isort
+ args: [ --fix, --no-cache ]
+ - id: ruff-format
+ name: 'Ruff: format code in line with PEP8'
+ entry: ruff format
language: system
- types: [python]
+ args: [ --no-cache ]
- repo: local
hooks:
- id: codespell
@@ -57,12 +56,4 @@ repos:
hooks:
- id: pyupgrade
name: 'pyupgrade: Updates code to Python 3.8+ code convention'
- args: [*py_version]
- - repo: local
- hooks:
- - id: black
- name: 'black: PEP8 compliant code formatter'
- entry: black
- language: python
- types: [python]
- language_version: python3
\ No newline at end of file
+ args: [*py_version]
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 5a07bfa9..00000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-## [2.1.1] - 2023-09
-Improvements in this release:
-- Update SHAP version to the latest #228
-
-## [2.1.0] - 2023-07
-Improvements in this release:
-- Make ShapRFECV return matplotfigure (instead of axis) #222
-- Add option for penalty on shap calculation to distinguish features with similar shap performance # 213
-- Implement automatic feature selection #220
-
-## [2.0.1] - 2023-06
-Improvements in this release:
-- Update pre-commit hooks & add validation for jupyter notebooks # 213
-- Fix the docs deployment #211
-
-## [2.0.0] - 2023-06
-Improvements in this release:
-- Drop explicit support for python 3.7, add support for 3.11 #206, #203, #185
-- Activate and add pre-commit hooks (isort, codespell) #205, #206
-- Add support for groups in SHAP RFECV #182
-- Bug fix: SHAP RFECV now produces reproducible results every time (this breaks backwards compatibility) #197
-- Bug fix: Updated GitHub actions, fixed deprecations #199
-- Bug fix: Remove most of the unreliable warning assertion checks #207
-
-## [1.8.9] - 2022-04-08
-Improvements in this release:
-- Drop explicit support for python 3.6, add 3.10 #177
-- Bug fix: define shap mask based on rows, instead of columns #178
-- Bug fixes in unit tests #180
-- Improve support for categorical features in shap calculations #184
-
-## [1.8.8] - 2021-12-08
-Improvements in this release:
-- Added support for XGBoost and Catboost models in ShapRFECV #175
-
-## [1.8.7] - 2021-10-28
-Improvements in this release:
-- Added support for early stopping in new lightgbm version #164
-
-## [1.8.6] - 2021-10-05
-Improvements in this release:
-- Added alpha parameter to DependencePlotter #162
-
-## [1.8.5] - 2021-08-24
-Improvements in this release:
-- Docs and docstrings improvements for stats tests #158
-
-## [1.8.4] - 2021-06-16
-Improvements in this release:
-- Fix the bug in the Shap Dependence Plot #153
-- Add HowTo guide for using grouped data #154
-
-## [1.8.3] - 2021-06-15
-Improvements in this release:
-- Fix p-value calculation in PSI #142
-
-## [1.8.2] - 2021-05-04
-Improvements in this release:
-- Fix catboost bug when calculating SHAP values #147
-- Supply eval_sample_weight for fit in EarlyStoppingShapRFECV #144
-- Remove codecov.io #145
-- Remove sample_row from probatus #140
-
-## [1.8.1] - 2021-04-18
-Improvements in this release:
-- Enable use of sample_weight in ShapRFECV and EarlyStoppingShapRFECV #139
-- Fix bug in EarlyStoppingShapRFECV #139
-- Fix issue with categorical features in SHAP #138
-- Missing values handled by AutoDist #126
-- Fix issue with missing histogram in DependencePlot #137
-
-## [1.8.0] - 2021-04-14
-Improvements in this release:
-- Implemented EarlyStoppingShapRFECV #108
-- Added support for Python 3.9 #132
-
-## [1.7.1] - 2021-04-13
-Improvements in this release:
-- Add error if model pipeline passed to SHAP #129
-- Fixed PSI bug with empty bins #116
-- Unit tests are run daily #113
-- TreeBucketer has been refactored #124
-- Fixes to failing test pipeline #120
-- Improving language in docs #109, #107
-
-## [1.7.0] - 2021-03-16
-Improvements in this release:
-- Create a comparison of imputation strategies #86
-- Added support for passing check_additivity argument #103
-- Range of code styling issues fixed, based on precommit config #100
-- Renamed TreeDependencePlotter to DependencePlotter and exposed the docs #94
-- Enable instalation of extra dependencies #97
-- Added how to notebook to ensure reproducibility #99
-- Description of vision of probatus #91
-
-## [1.6.2] - 2021-03-10
-Improvements in this release:
-- Bugfix, allow passing kwargs to dependence plot in ShapModelInterpreter #90
-
-## [1.6.1] - 2021-03-09
-Improvements in this release:
-- Added ShapRFECV support for all sklearn compatible search CVs. #76 #49
-
-## [1.6.0] - 2021-03-01
-Improvements in this release:
-- Added features list to README #53
-- Added docs for sample row functionality #54
-- Added 'open in colab' badges to tutorial notebooks #56
-- Deploy documentation on release #47
-- Added columns_to_keep for shap feature elimination #63
-- Updated docs for usage of columns to keep functionality in SHAPRFECV #66
-- Added shap support for linear models #69
-- Installed probatus in colab notebooks #80
-- Minor infrastructure tweaks #81
-
-## [1.5.1] - 2020-12-04
-
-Various improvements to the consistency and usability of the package
-- Unit test docstring and notebooks #41
-- Unified scoring metric within probatus #27
-- Improve docstrings consistency documentation #25
-- Implemented unified interface #24
-- Added images to API docs documentation #23
-- Added verbose parameter to ShapRFECV #21
-- Make API more consistent #19
- - Set model parameter name to clf across probatus
- - Set default random_state to None
- - Ensure that verbose is used consistently in probatus
- - Unify parameter class_names for classes in which it is relevant
- - Add return scores parameter to compute wherever applicable
-- Add sample row functionality to utils #17
-- Make an experiment comparing sklearn.RFECV with ShapRFECV #16
-- ShapModelInterpreter calculate train set feature importance #13
-
-## [1.5.0] - 2020-11-18
-- Improve SHAP RFECV API and documentation
-
-## [1.4.4] - 2020-11-11
-- Fix issue with the distribution uploaded to pypi
-
-## [1.4.0] - 2020-11-10 (Broken)
-- Add SHAP RFECV for features elimination
-
-## [1.3.0] - 2020-11-05 (Broken)
-- Add SHAP Model Inspector with docs and tests
-
-## [1.2.0] - 2020-09-30
-- Add resemblance model, with SHAP based importance
-- Improve the docs for resemblance model
-- Refactor stats tests, improve docs and expose functionality to users
-
-## [1.1.1] - 2020-09-08
-- Improve Tree Bucketer, enable user to pass own tree object
-
-## [1.1.0] - 2020-08-24
-- Improve docs for stats_tests
-- Refactor stats_tests
-
-## [1.0.1] - 2020-08-07
-- TreeBucketer, which bins the data based on the target distribution, using Decision Trees fitted on a single feature
-- PSI calculation includes the p-values calculation
-
-## [1.0.0] - 2020-02-24
-- metric_volatility and sample_similarity rebuilt
-- New documentation
-- Faster tests
-- Improved and simplified API
-- Scorer class added to the package
-- Removed data from repository
-- Hiding unfinished functionality from the user
-
-## [0.1.3] - 2020-02-24
-
-### Added
-
-- VolalityEstimation now has random_seed argument
-
-### Changed
-
-- Improved unit testing
-- Improved documentation README and CONTRIBUTING
-
-### Fixed
-
-- Added dependency on scipy 1.4+
-
-## [0.1.2] - 2019-10-29
-### Added
-
-- Readthedocs documentation website
-
-## [0.1.1] - 2019-10-09
-
-### Added
-
-- Added CHANGELOG.md
-
-### Changed
-
-- Renamed to probatus
-- Improved testing by adding pyflakes to CI
-- probatus.metric_uncertainty.VolatilityEstimation is now deterministic, added random_state parameter
-
-## [0.1.0] - 2019-09-21
-
-Initial release, commit ecbd0d08a6eea370afda4a4790edeb4ee382995c
-
-[Unreleased]: https://gitlab.com/ing_rpaa/probatus/compare/ecbd0d08a6eea370afda4a4790edeb4ee382995c...master
-[0.1.0]: https://gitlab.com/ing_rpaa/probatus/commit/ecbd0d08a6eea370afda4a4790edeb4ee382995c
diff --git a/README.md b/README.md
index bd4d37ff..49c70ef9 100644
--- a/README.md
+++ b/README.md
@@ -13,10 +13,8 @@
**Probatus** is a python package that helps validate binary classification models and the data used to develop them. Main features:
- [probatus.interpret](https://ing-bank.github.io/probatus/api/model_interpret.html) provides shap-based model interpretation tools
-- [probatus.metric_volatility](https://ing-bank.github.io/probatus/api/metric_volatility.html) provides tools using bootstrapping and/or different random seeds to assess metric volatility/stability.
- [probatus.sample_similarity](https://ing-bank.github.io/probatus/api/sample_similarity.html) to compare two datasets using resemblance modelling, f.e. `train` with out-of-time `test`.
- [probatus.feature_elimination.ShapRFECV](https://ing-bank.github.io/probatus/api/feature_elimination.html) provides cross-validated Recursive Feature Elimination using shap feature importance.
-- [probatus.missing_values](https://ing-bank.github.io/probatus/api/imputation_selector.html) compares performance gains of different missing values imputation strategies for a given model.
## Installation
diff --git a/VISION.md b/VISION.md
index bb30b6cf..253b6ac9 100644
--- a/VISION.md
+++ b/VISION.md
@@ -28,5 +28,4 @@ The main principles that drive development of `Probatus` are the following
## The Roadmap
-The following [issue](https://github.com/ing-bank/Probatus/issues/93) keeps track of the features coming to Probatus.
We are open to new ideas, so if you can think of a feature that fits the vision, make an [issue](https://github.com/ing-bank/Probatus/issues) and help us further develop this package.
\ No newline at end of file
diff --git a/docs/api/imputation_selector.md b/docs/api/imputation_selector.md
deleted file mode 100644
index d4fc675f..00000000
--- a/docs/api/imputation_selector.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Imputation Selector
-
-This module allows us to select imputation strategies.
-
-
-::: probatus.missing_values.imputation
diff --git a/docs/api/metric_volatility.md b/docs/api/metric_volatility.md
deleted file mode 100644
index 2da631ec..00000000
--- a/docs/api/metric_volatility.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Metric Volatility
-
-The aim of this module is the analysis of how well a model performs on a given dataset, and how stable the performance is.
-
-The following features are implemented:
-
-- [TrainTestVolatility][probatus.metric_volatility.volatility.TrainTestVolatility]: Estimation of the volatility of metrics. The estimation is done by splitting the data into train and test multiple times and training and scoring a model based on these metrics.
-- [SplitSeedVolatility][probatus.metric_volatility.volatility.SplitSeedVolatility]: Estimates the volatility of metrics based on splitting the data into train and test sets multiple times randomly, each time with a different seed.
-- [BootstrappedVolatility][probatus.metric_volatility.volatility.BootstrappedVolatility]: Estimates the volatility of metrics based on splitting the data into train and test with static seed, and bootstrapping the train and test set.
-
-
-::: probatus.metric_volatility.volatility
\ No newline at end of file
diff --git a/docs/api/stat_tests.md b/docs/api/stat_tests.md
deleted file mode 100644
index 55f5ba26..00000000
--- a/docs/api/stat_tests.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Statistical Tests
-
-This module allows us to apply different statistical tests.
-
-::: probatus.stat_tests.distribution_statistics
-
-## Available tests
-- [Anderson-Darling (ad)][probatus.stat_tests.ad.ad]
-- [Epps-Singleton (es)][probatus.stat_tests.es.es]
-- [Kolmogorov-Smirnov (ks)][probatus.stat_tests.ks.ks]
-- [Population Stability Index (psi)][probatus.stat_tests.psi.psi]
-- [Shapiro-Wilk (sw)][probatus.stat_tests.sw.sw]
-
-::: probatus.stat_tests.ad
-::: probatus.stat_tests.es
-::: probatus.stat_tests.ks
-::: probatus.stat_tests.psi
-::: probatus.stat_tests.sw
diff --git a/docs/img/KS2_Example.png b/docs/img/KS2_Example.png
deleted file mode 100644
index a1d64c14..00000000
Binary files a/docs/img/KS2_Example.png and /dev/null differ
diff --git a/docs/img/autodist.png b/docs/img/autodist.png
deleted file mode 100644
index b3fc3896..00000000
Binary files a/docs/img/autodist.png and /dev/null differ
diff --git a/docs/img/imputation_comparison.png b/docs/img/imputation_comparison.png
deleted file mode 100644
index 6050aa6e..00000000
Binary files a/docs/img/imputation_comparison.png and /dev/null differ
diff --git a/docs/img/metric_volatility_bootstrapped.png b/docs/img/metric_volatility_bootstrapped.png
deleted file mode 100644
index 947f0c4a..00000000
Binary files a/docs/img/metric_volatility_bootstrapped.png and /dev/null differ
diff --git a/docs/img/metric_volatility_split_seed.png b/docs/img/metric_volatility_split_seed.png
deleted file mode 100644
index 75443b23..00000000
Binary files a/docs/img/metric_volatility_split_seed.png and /dev/null differ
diff --git a/docs/img/metric_volatility_train_test.png b/docs/img/metric_volatility_train_test.png
deleted file mode 100644
index d780cb9a..00000000
Binary files a/docs/img/metric_volatility_train_test.png and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
index ffb58f2e..c3ed477b 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,5 +1,3 @@
-# Welcome to probatus documentation!
-
**Probatus** is a Python library that allows to analyse binary classification models as well as the data used to develop them.
diff --git a/docs/tutorials/nb_binning.ipynb b/docs/tutorials/nb_binning.ipynb
deleted file mode 100644
index 41f4acb7..00000000
--- a/docs/tutorials/nb_binning.ipynb
+++ /dev/null
@@ -1,642 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Binning\n",
- "\n",
- "[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ing-bank/probatus/blob/master/docs/tutorials/nb_binning.ipynb)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [],
- "source": [
- "%%capture\n",
- "!pip install probatus"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "%matplotlib inline\n",
- "%config Completer.use_jedi = False\n",
- "%load_ext autoreload\n",
- "%autoreload 2\n",
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "\n",
- "pd.set_option(\"display.max_columns\", 100)\n",
- "pd.set_option(\"display.max_row\", 500)\n",
- "pd.set_option(\"display.max_colwidth\", 200)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This notebook explains how the various implemented binning strategies of `probatus` work. \n",
- "First, we import all binning strategies:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "from probatus.binning import AgglomerativeBucketer, QuantileBucketer, SimpleBucketer, TreeBucketer"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's create some data on which we want to apply the binning strategies. We choose a logistic function because it clearly supports the explanation on how binning strategies work. Moreover, the typical reliability curve for a trained random forest model has this shape and binning strategies could be used for probability calibration (see also the website of Scikit-learn on [probability calibration](https://scikit-learn.org/stable/modules/calibration.html))."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "def log_function(x):\n",
- " return 1 / (1 + np.exp(-x))\n",
- "\n",
- "\n",
- "x = [log_function(x) for x in np.arange(-10, 10, 0.01)]\n",
- "\n",
- "plt.plot(x);"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Simple binning"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The `SimpleBucketer` object creates binning of the values of `x` into equally sized bins. The attributes `counts`, the number of elements per bin, and `boundaries`, the actual boundaries that resulted from the binning strategy, are assigned to the object instance. In this example we choose to get 4 bins:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "counts [891 109 110 890]\n",
- "boundaries [4.53978687e-05 2.50022585e-01 4.99999772e-01 7.49976959e-01\n",
- " 9.99954146e-01]\n"
- ]
- }
- ],
- "source": [
- "mySimpleBucketer = SimpleBucketer(bin_count=4)\n",
- "mySimpleBucketer.fit(x)\n",
- "print(\"counts\", mySimpleBucketer.counts_)\n",
- "print(\"boundaries\", mySimpleBucketer.boundaries_)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "df = pd.DataFrame({\"x\": x})\n",
- "df[\"label\"] = pd.cut(x, bins=mySimpleBucketer.boundaries_, include_lowest=True)\n",
- "\n",
- "fig, ax = plt.subplots()\n",
- "for label in df.label.unique():\n",
- " df[df.label == label].plot(ax=ax, y=\"x\", legend=False)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "As can be seen, the number of elements in the tails of the data is larger than in the middle:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "counts_agglomerative_quantile, boundaries_agglomerative_quantile = QuantileBucketer.quantile_bins(x_agglomerative, 2)\n",
- "\n",
- "df = pd.DataFrame({\"x\": x_agglomerative})\n",
- "df[\"label\"] = pd.cut(x_agglomerative, bins=boundaries_agglomerative_quantile, include_lowest=True)\n",
- "\n",
- "fig, ax = plt.subplots()\n",
- "for label in df.label.unique():\n",
- " df[df.label == label].hist(ax=ax)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Binning with Decision Trees\n",
- "\n",
- "Binning with decision trees leverages the information of a binary feature or the binary target in order to create buckets that have a significantly different proportion of the binary feature/target. \n",
- "\n",
- "It works by fitting a tree on 1 feature only. \n",
- "It leverages the properties of the split finder algorithm in the decision tree. The splits are done to maximize the gini/entropy. \n",
- "The leaves approximate the optimal bins.\n",
- "\n",
- "The example below shows a distribution defined by a step function"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAD4CAYAAAAQP7oXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAWNUlEQVR4nO3df5ClVX3n8fdnpkERlJ9K6czsgsWoYdUEdkQMVVlLNAVGGavWuFibhFhTmaotUROsRMxGzbp/qDGrwQrrOhEUs6zIorV2uZMYC3AttwLFCK7KENZxjDIDykiAKEiGHr/7x32GvQ7T3U/3dN97bvf7VdU1z49zz3MudM1nzjnPc55UFZIk9bFm3A2QJE0OQ0OS1JuhIUnqzdCQJPVmaEiSepsadwMA1qxZU8ccc8y4myFJE+XRRx+tqhrpP/6bCI1jjjmGRx55ZNzNkKSJkuSno76mw1OSpN4MDUlSb4aGJKk3Q0OS1JuhIUnqzdCQpBUqydVJ7k/yrVnOJ8lHkuxK8o0kZ89Xp6EhSSvXJ4EL5jh/IbCx+9kKfHS+Cpt4TkOSxmXfvn187GMfY//+/WO5/mtf+1pe8pKXLEvdVfWVJKfNUWQz8KkavCPjliQnJHl2Vd032wcMDUmr2mc/+1ne9a53AZBk5Nd/znOecyShMZVkx9D+tqratoDPrwPuGdrf0x1buaGxe99Pxt0ELdBzn3ncuJsgPeFgD+OBBx7gpJNOGnNrFmymqjaN8oLOaUha1Q4cOADA2rVrx9ySsdgLbBjaX98dm9XE9zQk6UgcNjR+tGt0DTjljNFd68mmgUuTXAe8FHh4rvkMMDQkrXIruaeR5NPAy4FTkuwB3gMcBVBV/wXYDrwa2AU8CrxpvjoNDUmr2szMDLAyQ6Oq3jjP+QLevJA6ndOQtKqt5J7GcjA0JK1qB0NjzRr/OuzD/0qSVrUDBw6wZs2asTyjMYmc05DUhE984hPcfPPNI7/u7bff7tDUAhgakprwvve9j3vvvZdnPetZI7/2a17zmpFfc1IZGpKaUFVs3ryZa6+9dtxN0RwMDUlNGNz9OYdRPnCnWTkRLknqzdCQ1AzvYGqfoSGpCfMOT6kJhoYkqTdDQ1IzHJ5qn6EhqQkOT02GXqGR5PeS3JnkW0k+neSpSU5PcmuSXUk+k+ToruxTuv1d3fnTlvUbSJJGZt7QSLIOeCuwqapeCKwFLgY+AHy4qs4AHgS2dB/ZAjzYHf9wV06S5uXwVPv6Dk9NAcckmQKexuCl468AbujOXwO8rtve3O3TnT8//iZImofDU5Nh3tCoqr3AnwLfZxAWDwNfAx6qqpmu2B5gXbe9Drin++xMV/7kQ+tNsjXJjiQ7Dr4ERZLUtj7DUycy6D2cDjwHOBa44EgvXFXbqmpTVW2amnI1E0kOT02CPsNTrwS+W1X7qupx4HPAecAJ3XAVwHpgb7e9F9gA0J0/HnhgSVstacVxeGoy9AmN7wPnJnlaNzdxPrATuBl4fVfmEuDz3fZ0t093/qbyt0GSVoQ+cxq3MpjQvh34ZveZbcA7gMuS7GIwZ3FV95GrgJO745cBly9DuyWtQA5Pta/XZEJVvQd4zyGHdwPnHKbsY8CvH3nTJK0mDkhMBp8Il9QMexrtMzQkSb0ZGpKa4PDUZDA0JDXD4an2GRqSmmBPYzIYGpKk3ly/QyO3e99PRnat5z7zuJFdS0fO4an22dOQ1ASHpyaDoSFJ6s3QkNQMh6eWXpILktzdvU31Scs6JflnSW5OckeSbyR59Vz1GRqSmuDw1NJLsha4ErgQOBN4Y5IzDyn2R8D1VXUWg7ey/ue56jQ0JGnlOgfYVVW7q2o/cB2D9yMNK+AZ3fbxwL1zVejdU5Ka4fDUgk0l2TG0v62qtg3tP/Em1c4e4KWH1PHHwN8keQuDl+y9cs4LLr6tkrR0HJ5alJmq2nSEdbwR+GRV/ackLwP+MskLq+pnhyvs8JQkrVxPvEm1M/yW1YO2ANcDVNXfAk8FTpmtQkNDUjMcnlpytwEbk5ye5GgGE93Th5T5PoM3spLkFxiExr7ZKjQ0JDXB4amlV1UzwKXAF4G7GNwldWeS9ya5qCv2duB3kvwf4NPAb8/1im7nNCRpBauq7cD2Q469e2h7J3Be3/rsaUhqhsNT7TM0JDXB4anJYGhIaoY9jfYZGpKaYE9jMhgakqTeDA1JzXB4qn2GhqQmODw1GQwNSVJvhoakZjg81T5DQ1ITHJ6aDIaGJKk3Q0NSMxyeap8LFmpF273vJyO71nOfedzIrrUSOTw1GexpSJJ6MzQkNcPhqfYZGpKa4PDUZDA0JEm9GRqSmuHwVPsMDUlNcHhqMhgakpphT6N9vUIjyQlJbkjyd0nuSvKyJCcl+VKSb3d/ntiVTZKPJNmV5BtJzl7eryBJGpW+PY0rgL+uqhcAvwjcBVwO3FhVG4Ebu32AC4GN3c9W4KNL2mJJK5LDU5Nh3tBIcjzwK8BVAFW1v6oeAjYD13TFrgFe121vBj5VA7cAJyR59hK3W9IK5PBU+/r0NE4H9gGfSHJHko8nORY4taru68r8ADi1214H3DP0+T3dsZ+TZGuSHUl2zMzMLP4bSFoR7GlMhj6hMQWcDXy0qs4CHuH/D0UBUIP/2wv6P15V26pqU1VtmppyCSxJmgR9QmMPsKeqbu32b2AQIj88OOzU/Xl/d34vsGHo8+u7Y5I0J4en2jdvaFTVD4B7kjy/O3Q+sBOYBi7pjl0CfL7bngZ+q7uL6lzg4aFhLEk6LIenJkPfcaG3ANcmORrYDbyJQeBcn2QL8D3gDV3Z7cCrgV3Ao11ZSdIK0Cs0qurrwKbDnDr/MGULePORNUuaPKN8dweszPd3ODzVPp8Il9QEh6cmg6EhSStYkguS3N2t0nH5LGXekGRnkjuT/Le56vNeV0nNcHhqaSVZC1wJvIrBnbC3JZmuqp1DZTYC7wTOq6oHkzxrrjrtaUhqgsNTy+IcYFdV7a6q/cB1DFbtGPY7wJVV9SBAVd3PHAwNSZpcUwdX1uh+th5yvs8KHc8Dnpfkfye5JckFc17wyNssSUvD4akFm6mqw93ZuhBTDBaYfTmDh7G/kuRF3RqDT2JPQ1ITHJ5aFn1W6NgDTFfV41X1XeD/MgiRwzI0JGnlug3YmOT07uHsixms2jHsfzDoZZDkFAbDVbtnq9DhKUmL96NdS1dXFXns4aWtc5WrqpkklwJfBNYCV1fVnUneC+yoqunu3K8m2QkcAH6/qh6YrU5DQ1ITamELZaunqtrOYHmn4WPvHtou4LLuZ14OT0lqhvPg7TM0JEm9GRqSmuDdU5PB0JDUDJ/TaJ+hIakJ9jQmg6EhSerN0JDUDIen2mdoSGqCw1OTwdCQJPVmaEhqRnB4qnWGhqQmODw1GQwNSVJvhoakZnj3VPtc5VZq0Fe/fBNf+qsvzFnmGcccNaLWzOGnDy9ZVY8/PrNkdWn5GBpSg/7iyiv426/+L44/4YRZy6xp4V/ldWDJqnrmKSdx9ov/xZLVp+VhaEgNOvCzA/zSv3wJ13/hS7OWee4zjxthi2bhC5NWHec0pAZ5J5FaZWhIjXJSWC0yNKQGVZWhoSY5pyG1qEdo7N73kxE1ppH5EzXBnobUIHsaapWhITXIiXC1yuEpqVWL7Gkc9dB3lrghcM9DS17lrDaceOzoLqYFs6chNcjhKbXK0JAaZGioVYaG1KCq8t0SapKhIUnqrXdoJFmb5I4kX+j2T09ya5JdST6T5Oju+FO6/V3d+dOWqe3SiuXwlFq1kJ7G24C7hvY/AHy4qs4AHgS2dMe3AA92xz/clZO0EIaGGtUrNJKsB34N+Hi3H+AVwA1dkWuA13Xbm7t9uvPnx99+aUEKQ0Nt6tvT+DPgD4CfdfsnAw9V1cG3puwB1nXb64B7ALrzD3flf06SrUl2JNkxM+PLV6RhVSz6OQ1pOc0bGkleA9xfVV9bygtX1baq2lRVm6amfMZQkpZDkguS3N3NM18+R7l/naSSbJqrvj5/W58HXJTk1cBTgWcAVwAnJJnqehPrgb1d+b3ABmBPkingeOCBHteR1HEiXEshyVrgSuBVDEaEbksyXVU7Dyn3dAbz1rfOV+e8PY2qemdVra+q04CLgZuq6t8CNwOv74pdAny+257u9unO31QupCMtiKGhJXIOsKuqdlfVfuA6BvPOh/qPDG5aemy+Co/kOY13AJcl2cVgzuKq7vhVwMnd8cuAWbtDkg5vEBrjboUmwNTBueHuZ+sh55+YY+4Mzz8DkORsYENV/c9eF1xI66rqy8CXu+3dDFLs0DKPAb++kHolPZk9DfUwU1VzzkHMJcka4EPAb/f9jE+ESw1yRFdL5OAc80HD888ATwdeCHw5yd8D5wLTc02GGxpSi5zT0NK4DdjYreBxNIN56emDJ6vq4ao6papO6+atbwEuqqods1Xova7SCCz4HRczj7Fm5qfL8m4MrR5VNZPkUuCLwFrg6qq6M8l7gR1VNT13DU9maEiNsqehpVBV24Hthxx79yxlXz5ffQ5PSQ0aLI0utcfQkBrkPLhaZWhIDXLBQrXK0JAa5BPhapWhITXK0FCLDA2pQVXl0uhqkqEhNcgnwtUqQ0NqkB0NtcrQkBrlnIZaZGhILaoiPt6nBhkaUoO85VatMjSkBhVOhKtNLlioiTDpdxMttP32NNQqQ0PN+4srr+D9/+GPxt2MkfulF79o3E2QnsTQUPO+8+27Oe64p7Pl371l3E1ZtDWP/cOCP3Phr56/DC2RjoyhoeZVFcc94xm89fffOe6mLJovU9JK4US4JKk3Q0PNc1JYaoehIUnqzdBQ8+xpSO0wNCRJvRkaap49DakdhoYkqTdDQ80bvFvCnobUAkNDE8FlwqU2GBpq34QvViitJIaGJoLDU1IbXHtKzVuuZdFdD0paOHsamgz2NKQmGBpq3qS/gElaSQwNTQTnNKTFSXJBkruT7Epy+WHOX5ZkZ5JvJLkxyT+fqz5DQ83zfdnS4iRZC1wJXAicCbwxyZmHFLsD2FRVLwZuAP5krjoNDU0EOxrSopwD7Kqq3VW1H7gO2DxcoKpurqpHu91bgPVzVThvaCTZkOTmrvtyZ5K3dcdPSvKlJN/u/jyxO54kH+m6Qt9IcvYivqj0BOc0pEVbB9wztL+nOzabLcBfzVVhn57GDPD2qjoTOBd4c9e9uRy4sao2Ajd2+zDoBm3sfrYCH+1xDWlOzmlIhzWVZMfQz9bFVpTkN4BNwAfnvOB8FVXVfcB93faPk9zFIKk2Ay/vil0DfBl4R3f8UzX45+EtSU5I8uyuHmlOh3t2Iv/0Y/Kzx32uQnqymaraNMf5vcCGof313bGfk+SVwL8H/lVV/dNcF1zQnEaS04CzgFuBU4eC4AfAqd12r+5Qkq0H03FmZmYhzdAq5NpT0qLcBmxMcnqSo4GLgenhAknOAj4GXFRV989XYe/QSHIc8Fngd6vqH4fPdb2KBQ08V9W2qtpUVZumpnwwXbNzTkNanKqaAS4FvgjcBVxfVXcmeW+Si7piHwSOA/57kq8nmZ6lOqDnMiJJjmIQGNdW1ee6wz88OOyU5NnAwYTq1R2SFsI5DWlxqmo7sP2QY+8e2n7lQurrc/dUgKuAu6rqQ0OnpoFLuu1LgM8PHf+t7i6qc4GHnc/QkSjKe26lRvTpaZwH/CbwzSRf7479IfB+4PokW4DvAW/ozm0HXg3sAh4F3rSUDZYkjU+fu6e+CrPOQp5/mPIFvPkI2yU9YfCO8HG3QhL4RLgmgPPgUjsMDU0EJ8KlNhgaap9dDakZhoYmgj0NqQ2Ghprnw31SOwwNTQR7GlIbDA01z56G1A5DQxPBBQulNhgaap49DakdhoYmglMaUhsMDTXPfobUDkNDE8G7p6Q2GBpqnnMaUjsMDU0EexpSGwwNNa/KlzBJrTA0JEm9GRpq3uAlTPY0pBYYGpKk3gwNta/KRUSkRhgakqTeDA01zzkNqR2GhiSpN0NDzRs8pmFPQ2qBoSFJ6s3QUPMK5zSkVhgakqTeDA01z7unpHYYGpKk3gwNNW/Q0xh3K6TJlOSCJHcn2ZXk8sOcf0qSz3Tnb01y2lz1TS1bSyVpEe558JGRXWvDiceO7FrjkGQtcCXwKmAPcFuS6araOVRsC/BgVZ2R5GLgA8C/ma3OiQ6Nq6++mvf/yQfH3QwtpQP7n3Roz957OfMXnj+GxkgT7xxgV1XtBkhyHbAZGA6NzcAfd9s3AH+eJDXLKzMnOjROPvlkznjeC8bdDC2hPP6TJx3beMZzueBVrxhDa6TmTSXZMbS/raq2De2vA+4Z2t8DvPSQOp4oU1UzSR4GTgZ+dNgLHnGTx2jz5s286JfPH3cztISOeug7426CNElmqmrTKC/oRLgkrVx7gQ1D++u7Y4ctk2QKOB54YLYKDQ1JWrluAzYmOT3J0cDFwPQhZaaBS7rt1wM3zTafARM+PCVJml03R3Ep8EVgLXB1Vd2Z5L3AjqqaBq4C/jLJLuAfGATLrDJHoIzMscceW488srjb7Hbve/LEqSaXcxoapSZuuT3ljEV/NMmjVTXSL+HwlCSpt2UJjfmeQJQkTaYlD42hJxAvBM4E3pjkzKW+jiRp9Jajp/HEE4hVtR84+ASiJGnCLcfdU32eQCTJVmBrt1tJfrrI600BM4v87KTyO68OfufV4Ui+8zFL2ZA+xnbLbfeo+7Z5C84jyY5RPxE5bn7n1cHvvDpM2ndejuGpPk8gSpIm0HKERp8nECVJE2jJh6dmewJxqa8z5IiHuCaQ33l18DuvDhP1nZt4IlySNBl8IlyS1JuhIUnqbaJDY7UtV5JkQ5Kbk+xMcmeSt427TaOQZG2SO5J8YdxtGYUkJyS5IcnfJbkrycvG3ablluT3ut/pbyX5dJKnjrtNSy3J1UnuT/KtoWMnJflSkm93f544zjb2MbGhsUqXK5kB3l5VZwLnAm9eBd8Z4G3AXeNuxAhdAfx1Vb0A+EVW+HdPsg54K7Cpql7I4AaaOZfnnlCfBC445NjlwI1VtRG4sdtv2sSGBqtwuZKquq+qbu+2f8zgL5N1423V8kqyHvg14OPjbssoJDke+BUG7zigqvZX1UNjbdRoTAHHdG+Oexpw75jbs+Sq6isM3lcxbDNwTbd9DfC6UbZpMSY5NA63XMmK/gt0WJLTgLOAW8fclOX2Z8AfAD8bcztG5XRgH/CJbkju40kaeOnD8qmqvcCfAt8H7gMerqq/GW+rRubUqrqv2/4BcOo4G9PHJIfGqpXkOOCzwO9W1T+Ouz3LJclrgPur6mvjbssITQFnAx+tqrOAR5iAIYsj0Y3jb2YQmM8Bjk3yG+Nt1eh1r1ht/hmISQ6NVblcSZKjGATGtVX1uXG3Z5mdB1yU5O8ZDD++Isl/HW+Tlt0eYE9VHexB3sAgRFayVwLfrap9VfU48Dngl8fcplH5YZJnA3R/3j/m9sxrkkNj1S1XkiQMxrrvqqoPjbs9y62q3llV66vqNAb/f2+qqhX9L9Cq+gFwT5Lnd4fOB3aOsUmj8H3g3CRP637Hz2eFT/4PmQYu6bYvAT4/xrb0MrZVbo/UGJYracF5wG8C30zy9e7YH1bV9vE1ScvgLcC13T+GdgNvGnN7llVV3ZrkBuB2BncI3sGELa3RR5JPAy8HTkmyB3gP8H7g+iRbgO8BbxhfC/txGRFJUm+TPDwlSRoxQ0OS1JuhIUnqzdCQJPVmaEiSejM0JEm9GRqSpN7+H+fClEnhaYFAAAAAAElFTkSuQmCC\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "def make_step_function(x):\n",
- " if x < 4:\n",
- " return 0.001\n",
- " elif x < 6:\n",
- " return 0.3\n",
- " elif x < 8:\n",
- " return 0.5\n",
- " elif x < 9:\n",
- " return 0.95\n",
- " else:\n",
- " return 0.9999\n",
- "\n",
- "\n",
- "x = np.arange(0, 10, 0.001)\n",
- "probs = [make_step_function(x_) for x_ in x]\n",
- "\n",
- "y = np.array([1 if np.random.rand() < prob else 0 for prob in probs])\n",
- "\n",
- "fig, ax = plt.subplots()\n",
- "ax2 = ax.twinx()\n",
- "\n",
- "ax.hist(x[y == 0], alpha=0.15)\n",
- "ax.hist(x[y == 1], alpha=0.15)\n",
- "ax2.plot(x, probs, color=\"black\")\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The light blue histogram indicates the distribution of class 0 (`y=0`), while the light orange histogram indicates the distribution of class 1 (`y=1`). \n",
- "The black line indicates the probability function that isused to assign class 0 or 1. In this toy example, it's a step function."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 5/5 [00:00<00:00, 17985.87it/s]\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "counts by TreeBucketer: [4000 1998 2001 936 1065]\n",
- "counts by QuantileBucketer: [625 625 625 625 625 625 625 625 625 625 625 625 625 625 625 625]\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Try a tree bucketer\n",
- "tb = TreeBucketer(\n",
- " inf_edges=True,\n",
- " max_depth=4,\n",
- " criterion=\"entropy\",\n",
- " min_samples_leaf=400, # Minimum number of entries in the bins\n",
- " min_impurity_decrease=0.001,\n",
- ").fit(x, y)\n",
- "\n",
- "counts_tree, boundaries_tree = tb.counts_, tb.boundaries_\n",
- "\n",
- "df_tree = pd.DataFrame({\"x\": x, \"y\": y, \"probs\": probs})\n",
- "\n",
- "df_tree[\"label\"] = pd.cut(x, bins=boundaries_tree, include_lowest=True)\n",
- "\n",
- "# Try a quantile bucketer\n",
- "myQuantileBucketer = QuantileBucketer(bin_count=16)\n",
- "myQuantileBucketer.fit(x)\n",
- "q_boundaries = myQuantileBucketer.boundaries_\n",
- "q_counts = myQuantileBucketer.counts_\n",
- "\n",
- "df_q = pd.DataFrame({\"x\": x, \"y\": y, \"probs\": probs})\n",
- "df_q[\"label\"] = pd.cut(x, bins=q_boundaries, include_lowest=True)\n",
- "\n",
- "\n",
- "fig, ax = plt.subplots(1, 2, figsize=(12, 5))\n",
- "\n",
- "for label in df_tree.label.unique():\n",
- " df_tree[df_tree.label == label].plot(ax=ax[0], x=\"x\", y=\"probs\", legend=False)\n",
- " ax[0].scatter(df_tree[df_tree.label == label][\"x\"].mean(), df_tree[df_tree.label == label][\"y\"].mean())\n",
- " ax[0].set_title(\"Tree bucketer\")\n",
- "\n",
- "for label in df_q.label.unique():\n",
- " df_q[df_q.label == label].plot(ax=ax[1], x=\"x\", y=\"probs\", legend=False)\n",
- " ax[1].scatter(df_q[df_q.label == label][\"x\"].mean(), df_q[df_q.label == label][\"y\"].mean())\n",
- " ax[1].set_title(\"Quantile bucketer\")\n",
- "\n",
- "print(f\"counts by TreeBucketer: {counts_tree}\")\n",
- "print(f\"counts by QuantileBucketer: {q_counts}\")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Comparing the `TreeBucketer` and the `QuantileBucketer` (the dots compare the average distribution of class 1 in the bin): \n",
- "Each buckets obtained by the `TreeBucketer` follow the probability distribution (i.e. the entries in the bucket have the same probability of being class 1). \n",
- "On the contrary, the `QuantileBucketer` splits the values below 4 in 6 buckets, which all have the same probability of being class 1. \n",
- "Note also that the tree is grown with the maximum depth of 4, which potentially lets it grow up to 16 buckets ($2^4$). \n",
- "\n",
- "The learned tree is visualized below, whreere the splitting according to the step function is visualized clearly.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "from sklearn.tree import plot_tree\n",
- "\n",
- "fig, ax = plt.subplots(figsize=(12, 5))\n",
- "tre_out = plot_tree(tb.tree, ax=ax)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.8.3-final"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/tutorials/nb_distribution_statistics.ipynb b/docs/tutorials/nb_distribution_statistics.ipynb
deleted file mode 100644
index 9c1e87a2..00000000
--- a/docs/tutorials/nb_distribution_statistics.ipynb
+++ /dev/null
@@ -1,513 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Univariate Distribution Similarity\n",
- "\n",
- "[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ing-bank/probatus/blob/master/docs/tutorials/nb_distribution_statistics.ipynb)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "There are many situations when you want to perform univariate distribution comparison of a given feature, e.g. stability of the feature over different months.\n",
- "\n",
- "In order to do that, you can use statistical tests. In this tutorial we present how to easily do this using the `DistributionStatistics` class, and with the statistical tests directly.\n",
- "\n",
- "Available tests:\n",
- "- `'ES'`: Epps-Singleton\n",
- "- `'KS'`: Kolmogorov-Smirnov\n",
- "- `'PSI'`: Population Stability Index\n",
- "- `'SW'`: Shapiro-Wilk\n",
- "- `'AD'`: Anderson-Darling\n",
- "\n",
- "Details on the available tests can be found [here](https://ing-bank.github.io/probatus/api/stat_tests.html#available-tests).\n",
- "\n",
- "You can perform all these tests using a convenient wrapper class called `DistributionStatistics`.\n",
- "\n",
- "In this tutorial we will focus on how to perform two useful tests: Population Stability Index (widely applied in banking industry) and Kolmogorov-Smirnov."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Setup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "%%capture\n",
- "!pip install probatus"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "%load_ext autoreload\n",
- "%autoreload 2\n",
- "\n",
- "import matplotlib.pyplot as plt\n",
- "import numpy as np\n",
- "import pandas as pd\n",
- "\n",
- "from probatus.binning import QuantileBucketer\n",
- "from probatus.stat_tests import DistributionStatistics, ks, psi"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's define some test distributions and visualize them. For these examples, we will use a normal distribution and a shifted version of the same distribution."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "counts = 1000\n",
- "np.random.seed(0)\n",
- "d1 = pd.Series(np.random.normal(size=counts), name=\"feature_1\")\n",
- "d2 = pd.Series(np.random.normal(loc=0.5, size=counts), name=\"feature_1\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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PAS8DuzFCSBn8xc4y04PAD3AIzh7K2czhPNnD3DI91lERBaIGp2LiIiIiIgsE8rgiYiIiIiILBMK8ERERCQoY8y9vgbq03/du9BzExGRmbREU0REREREZJlQBk9ERERERGSZSFroCUSqqKjIVldXL/Q0REREREREFsTevXs7rbXFga4tuQCvurqaPXv2LPQ0REREREREFoQxpj7YNS3RFBERERERWSYU4ImIiIiIiCwTCvBERERERESWiSW3B09ERERERBa/sbExmpqaGB4eXuipLFlpaWlUVlaSnJwc9jMK8EREREREJOaamprIzs6muroaY8xCT2fJsdbS1dVFU1MTNTU1YT+nJZoiIiIiIhJzw8PDFBYWKriLkjGGwsLCiDOgCvBERERERCQuFNzNTTTfPwV4IiIiIiIiMVBXV8cDDzwQ8XN33HEHjzzySEzmoABPREREREQkBqIN8GJJAZ6IiIiIiCxLP/nJTzjvvPPYvn07H/7wh6mvr2ft2rV0dnbi9Xq55JJLeOKJJ6irq2PDhg3cfvvtbN26lZtvvhm32w3A3r17ueyyyzjnnHO4+uqraWlpAeDYsWNceeWVbNu2jbPPPpvjx49z1113sXv3brZv3843vvENPB4Pf/d3f8e5557L1q1b+c53vgM4BVQ+/vGPs2nTJq677jra29tj9jWriqaIiIiIiMTV3/9qPwea+2M65qaKHP6/6zcHvX7w4EEeeughnnnmGZKTk/nYxz7Grl27uPPOO/nIRz7C+eefz6ZNm7jqqquoq6vj8OHD3H///Vx00UW8//3v59vf/jZ//dd/zSc+8QkeffRRiouLeeihh/j85z/P97//fW677TbuuusubrrpJoaHh/F6vXzta1/j3/7t3/j1r38NwH333Udubi4vvfQSIyMjXHTRRVx11VW88sorHD58mDfeeIO2tjY2bdrE+9///ph8XxTgiYiILCVjQ9DwPKw4B9JyFno2IiKL1h/+8Af27t3LueeeC8DQ0BAlJSV8+ctf5uGHH+bee+/l1Vdfnbi/qqqKiy66CID3vOc93H333VxzzTXs27ePt771rQB4PB7Ky8txuVycPHmSm266CXD61QXyxBNP8Prrr0/sr+vr6+Po0aM8/fTT3HrrrSQmJlJRUcFb3vKWmH3dCvBERESWksc/D3vuh9It8OFdkJC40DMSEZlV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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "from probatus.utils.plots import plot_distributions_of_feature\n",
- "\n",
- "feature_distributions = [d1, d2]\n",
- "sample_names = [\"expected\", \"actual\"]\n",
- "plot_distributions_of_feature(feature_distributions, sample_names=sample_names, plot_perc_outliers_removed=0.01)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Binning - QuantileBucketer\n",
- "\n",
- "To visualize the data, we will bin the data using a quantile bucketer, available in the `probatus.binning` module.\n",
- "\n",
- "Binning is used by all the `stats_tests` in order to group observations."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Bincounts for d1 and d2:\n",
- "[100 100 100 100 100 100 100 100 100 100]\n",
- "[ 25 62 50 68 76 90 84 169 149 227]\n"
- ]
- }
- ],
- "source": [
- "bins = 10\n",
- "myBucketer = QuantileBucketer(bins)\n",
- "d1_bincounts = myBucketer.fit_compute(d1)\n",
- "d2_bincounts = myBucketer.compute(d2)\n",
- "\n",
- "print(\"Bincounts for d1 and d2:\")\n",
- "print(d1_bincounts)\n",
- "print(d2_bincounts)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's plot the distribution for which we will calculate the statistics."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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+gwa1LcfyQ033JDx48dn2LBhGTt2bE499dTuO2q99NJL2WWXXbL33nun1tp9zqc//emMGjUqv/nNb5Ikxx57bMaPH5/vfve72XbbbTNs2LDsueeeeeCBBxa71ssvv5zzzz8/b37zm7Puuutmm222yZVXXvmamr7zne9kt912y/DhwzNy5Mh84AMfyJw5czJt2rRccMEFmTNnTkopKaXk2GOP7T7v3//937PXXntlvfXWy8iRI/OJT3wizz333GJj33777dlpp50ybNiw7LrrrvnZz37WV28lAAAArDUEQqvJDTfckJNPPjmTJk3K9ddfnx122CHHH398r8Z65JFHVmh/oeuuuy6HHHJIdtttt9x4442ZOnVqLrnkkpx+emuDrKFDh+aqq67KrFmz8o//+I9JkltvvTUXXXRRLrrooowdO7Z7rDlz5uSzn/1szjzzzFx99dV55plnst9+++XFF1/s7vPpT386X/ziF3PCCSfkpptuyuTJk3P88cfn+9//fnefr3/96znkkEOy9dZb57rrrsvXvva1bLPNNpk/f34+/vGP56Mf/WjGjh2bWbNmZdasWTnzzDOTJHfccUcmTJiQsWPHZubMmbnwwgtz880357jjjuse+4knnsj++++fjTbaKDNnzsyf//mf58gjj8zzzz/fq/cZAAAA1laWjK0m5557biZOnJjp06cnSfbbb7/Mnz+/V8vCSikZPHjwMmcT1Vrz+c9/PkcffXQuvvji7vZ11103J598ck4//fSMHDkyO+ywQ6ZNm5Yzzjgje+65Z4477rgcdthh+chHPrLYeE899VRuuOGGvOtd70qS7Lrrrtl6660zY8aMnHjiiZk9e3amT5+er33taznmmGOSJO973/syb968nH322Zk0aVJefvnlnHbaaZk8eXKuueaa7rEPOuig7uNNNtkk6667bnbffffFrn/aaaflXe96V6699trutnHjxmXChAm577778ra3vS0XXnhhhg0blptuuinrrbdekmT99dfPn/3Zn63sWwwAAABrNTOEVoOFCxfm3nvvzcEHH7xY+yGHHNKr8bbYYossWLAgRx999FL7PPzww3n00Ufz4Q9/OAsWLOj+ee9735sXX3wx9913X3ffU089NTvttFP23HPPvPjii4sFSIuMGTOmOwxaVMOuu+6aO++8M0ny4x//OIMGDcrkyZMXu96ECRPyq1/9KgsXLsxDDz2UJ554YrFZPSvi+eefz6xZs17zu+y5554ZOnRo7rnnniTJnXfemX333bc7DEp6/x4DAADA2swModVg/vz5WbBgQcaMGbNY+6uf96WnnnoqSfKBD3xgia8/9thj3ceDBw/OYYcdlp///Of5yEc+kpEjR76m/5JqHTNmTPc+SE899VQWLlyYDTfccInXmzdvXn77298mac0CWhlPP/10Fi5cmJNOOiknnXTSUn+X3/zmN9lxxx0Xe2348OHZYIMNVup6AAAAsLYTCK0Go0ePzpAhQ9LV1bVY+6uf96WNNtooSXLJJZdkl112ec3rW221Vffxo48+mrPPPju77LJL/vmf/zkf//jHs8MOOyy31q6urvzJn/xJ9/WGDBmSO+64Y4lL2caMGdO9AfSSNtNelte//vUppWTatGlLDLje+MY3JknGjh37mjpfeOGF/P73v1+p6wEAAMDaTiC0GgwePDg777xzbrjhhpx44ond7ddff32/XfOtb31rxo0bl0ceeSSf+MQnltqv1prjjz8+b3rTmzJr1qy8733vyzHHHJNf/OIXGTp0aHe/rq6u/OxnP+teNvboo4/ml7/8Zffyr/e+971ZuHBhnnnmmey7777LrOnKK6/MgQceuMQ+66yzzmIbVSetfYB23333PPTQQznrrLOW+ru84x3vyBVXXJHnn3++e9lYf77HAAAAMFAJhFaTM844I4ccckg++clPZvLkyfnpT3+aH/zgB6/p98ADD+SBBx7oDkXuvvvubLDBBhk9enT22muvJK07fm299da54oorlrqP0KBBg3LBBRfkqKOOyrPPPpv9998/66yzTn7961/nu9/9bmbOnJn11lsvF110Uf7t3/4td911V9Zdd93MmDEjO+20U84999xMmzate7xRo0blqKOOyjnnnJPhw4fnrLPOypgxY7pvC//Wt741J554Yg4//PCceuqpGT9+fF588cXcf//9efjhh3PZZZdl0KBB+fKXv5wjjzwyRx55ZI444oiUUvKTn/wkRxxxRMaPH59tt902Tz75ZGbMmJG3ve1tGTVqVLbccst8+ctfzoQJEzJo0KAceuihed3rXpdHH300N910U84999xss802mTJlSi666KJMmjQpn/3sZ/PEE0/kvPPOy/Dhw/v2wwQAAIABTiC0mkyePDlf/epXc/755+fKK6/M3nvvncsvvzz77bffYv2uu+66nH322d3PF90Cfq+99sptt92WpDWrZ+HChXn55ZeXec2PfOQjGTFiRP7mb/4mV1xxRQYPHpw3velNmTRpUtZZZ53Mnj07f/VXf5WpU6d2772z9dZb50tf+lKmTJmSgw46KG9/+9uTtDaRPuOMM3Laaadlzpw5GT9+fK655poMGzZssVq32WabXHrppTnrrLMyYsSIbL/99vnYxz7W3eejH/1ohg0blnPPPTeHHnpo9+yf0aNHJ0k+/OEP59Zbb82pp56a+fPn55hjjsmMGTOy55575vbbb8/UqVNz1FFHZeHChdliiy0yceLEbLzxxkladx27+eabc8opp+RDH/pQtttuu3zjG994zWbeAAAA0HSl1trpGjJ+/Ph69913L/X1Bx98MNttt91qrIiejj322Nx3331Z1mc00PkzBgAADHi3ntfpCtYO+5ze6Qr6TCnlnlrr+CW95rbzAAAAAA0jEAIAAABoGHsIsVwzZszodAkAAABAHzJDCAAAAKBhBEIAAAAADSMQAgAAAGgYgRAAAABAwwiEAAAAABpGIAQAAADQMAKhDrrvvvtSSsltt92WJHn22WczderU7Lbbbtlwww0zduzYTJ48OQ8//HDHauzq6sq0adPyyCOP9Ns1pk2bllGjRvXb+AAAAMDiBEJrkEcffTSXXnpp9ttvv8ycOTP/8i//knnz5uVP//RP89hjj3Wkpq6urpx99tn9GggBAAAAq9eQThewSm49rzPX3ef0fhl2q622yn//939n+PDh3W3vfve7s/nmm+eKK67I1KlT++W6AAAAQLOYIbQaXXzxxdlss82y/vrr58ADD8y8efMWe3399ddfLAxKko022ihbbLFFurq6Vvp6s2bNykEHHZQ3vvGNWX/99bPzzjvnm9/85mv6zZkzJ0cccURGjRqV9dZbLzvuuGOuvvrqPPLII9lhhx2SJPvss09KKSmlJElmzJiRUkp+//vfLzbWlltumb/8y7/sfn7TTTdl3333zZgxYzJixIjsvvvuueWWW1b6dwEAAAD6znIDoVLKZqWUW0spD5ZS7i+lfKbdvlEp5UellP9qP76h3V5KKV8ppcwupfxHKeXt/f1LDAQ33HBDTj755EyaNCnXX399dthhhxx//PHLPW/+/PmZPXt2tt9++8XaSymZNm3aMs+dM2dO9thjj1x22WX53ve+lw996EM57rjjcs0113T36erqyjvf+c7cdddd+bu/+7t873vfy8c+9rE89thj2WSTTboDpIsuuiizZs3KrFmzVur3/p//+Z8ceOCB+frXv55vf/vbede73pX9998/d9xxx0qNAwAAAPSdFVkytiDJ52qtvyylvC7JPaWUHyU5NsmPa63nl1JOS3Jakr9Ksn+St7R//jTJ9PZjo5177rmZOHFipk+fniTZb7/9Mn/+/Fx22WXLPO9zn/tcNthggxx++OGLtQ8ePDiDBi07z+t5Tq0173nPezJ37txceumlOeKII5Ik//AP/5Bnnnkm99xzTzbZZJMkyYQJE7rP23HHHZMk22+/fXbfffcV/G1f8alPfar7+OWXX84+++yT+++/P5dffnn22GOPlR4PAAAAWHXLnSFUa51Xa/1l+/i5JA8mGZfk4CRXtrtdmeSD7eODk1xVW36e5PWllE36vPIBZOHChbn33ntz8MEHL9Z+yCGHLPO86dOn5xvf+EYuu+yyjBw5crHXFixYkLPOOmuZ5z/99NM55ZRTssUWW2To0KEZOnRoLrnkksXuWvaTn/wkEydO7A6D+trcuXNzzDHHZNy4cRkyZEiGDh2aW265paN3TgMAAICmW6lNpUspWybZJckvkmxca52XtEKjUsqYdrdxSXreEmtuu23xDXMaZP78+VmwYEHGjBmzWPurn/d044035tOf/nS+9KUvZfLkyb267rHHHpuf//znOfPMM7P99ttnxIgRmT59em644YbuPr/97W/zjne8o1fjL8/LL7+cgw46KM8991y+8IUv5M1vfnPWX3/9nHXWWb3aEwkAAADoGyscCJVSNkjy7SRTaq3PLtpceEldl9BWlzDeCUlOSJLNN998RcsYkEaPHp0hQ4a8JgRZWijys5/9LIcffnhOPPHEfP7zn+/VNV988cXcdNNN+ad/+qeceOKJ3e0vv/zyYv1Gjhz5ms2tV8SwYcOSJH/84x8Xa3/66ae7j2fPnp177703//qv/5qJEyd2t7/wwgsrfT0AAACg76zQXcZKKUPTCoO+WWu9vt385KKlYO3HRenG3CSb9Th90yRPvHrMWusltdbxtdbxo0eP7m39A8LgwYOz8847LzYzJ0muv/761/S9//77M2nSpEycODFf+cpXen3NP/zhD1m4cGHWXXfd7rbnnnsuN95442L9JkyYkB/+8Id58sknlzjOOuusk6QVMPW06aabJkkefPDB7rZf/OIXefbZZ7ufLwp+etYwZ84cG0oDAABAhy13hlBpTQW6PMmDtda/7/HSjUmOSXJ++/GGHu2fKqV8K63NpJ9ZtLSsyc4444wccsgh+eQnP5nJkyfnpz/9aX7wgx8s1qerqysTJ07MBhtskFNOOSV33nln92sjRoxY7E5jQ4YMyVlnnbXUfYQ23HDDvOMd78gXvvCFjBgxIoMGDcr555+fDTfccLHQ5i/+4i9y1VVX5d3vfnf++q//OptttlkefPDB/O///m9OPfXUbL755hk+fHiuvPLKbLjhhhk6dGjGjx+f3XbbLePGjcspp5ySc845J7/73e/y5S9/OSNGjOgee9ttt82mm26az33ucznnnHPy3HPPZerUqRk3blxfva0AAABAL6zIDKE9khyV5L2llF+1fz6QVhC0bynlv5Ls236eJDcn+XWS2UkuTXJS35c98EyePDlf/epX873vfS8f/OAHc++99+byyy9frM8DDzyQuXPn5rHHHss+++yTd77znd0/J520+Nu4cOHC1yz/erWrr746W221VY4++uh85jOfyYc+9KEcffTRi/UZPXp07rjjjuyyyy6ZMmVKJk2alEsuuaR7Gd+wYcNy6aWX5p577slee+3Vvd/QOuusk+985zsZNGhQDj300FxwwQWZPn163vCGN3SPve666+b666/PkCFDcuihh+bMM8/M6aefnr322qvX7yMAAACw6kqtr9neZ7UbP358vfvuu5f6+oMPPpjttttuNVZE0/gzBgAADHi3ntfpCtYO+5ze6Qr6TCnlnlrr+CW9tkJ7CAEAAACw9hAIAQAAADSMQAgAAACgYQRCAAAAAA0jEAIAAABomAETCK0Jd0Nj7eTPFgAAAE0zIAKhoUOH5oUXXuh0GaylXnjhhQwdOrTTZQAAAMBqMyACoTFjxuTxxx/P888/bzYHfabWmueffz6PP/54xowZ0+lyAAAAYLUZ0ukCVsSIESOSJE888UReeumlDlfD2mTo0KHZeOONu/+MAQAAQBMMiEAoaYVC/qcdAAAAYNUNiCVjAAAAAPQdgRAAAABAwwiEAAAAABpGIAQAAADQMAIhAAAAgIYRCAEAAAA0jEAIAAAAoGEEQgAAAAANIxAC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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize=(20, 5))\n",
- "plt.bar(range(0, len(d1_bincounts)), d1_bincounts, label=\"d1: expected\")\n",
- "plt.bar(range(0, len(d2_bincounts)), d2_bincounts, label=\"d2: actual\", alpha=0.5)\n",
- "plt.title(\"PSI (bucketed)\", fontsize=16, fontweight=\"bold\")\n",
- "plt.legend(fontsize=15)\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "By visualizing the bins, we can already notice that the distributions are different.\n",
- "\n",
- "Let's use the statistical test to prove that."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## PSI - Population Stability Index\n",
- "The population stability index ([Karakoulas, 2004](https://cms.rmau.org/uploadedFiles/Credit_Risk/Library/RMA_Journal/Other_Topics_(1998_to_present)/Empirical%20Validation%20of%20Retail%20Credit-Scoring%20Models.pdf)) has long been used to evaluate distribution similarity in the banking industry, while developing credit decision models.\n",
- "\n",
- "In `probatus` we have implemented the PSI according to [Yurdakul 2018](https://scholarworks.wmich.edu/cgi/viewcontent.cgi?article=4249&context=dissertations), which derives a p-value, based on the hard to interpret PSI statistic. Using the p-value is a more reliable choice, because the banking industry-standard PSI critical values of 0.1 and 0.25 are unreliable heuristics as there is a strong dependency on sample sizes and number of bins. Aside from these heuristics, the PSI value is not easily interpretable in the context of common statistical frameworks (like a p-value or confidence levels)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "PSI = 0.33942407655561885\n",
- "\n",
- "PSI: Critical values defined according to de facto industry standard:\n",
- "PSI > 0.25: Significant distribution change; investigate.\n",
- "\n",
- "PSI: Critical values defined according to Yurdakul (2018):\n",
- "99.9% confident distributions have changed.\n"
- ]
- }
- ],
- "source": [
- "psi_value, p_value = psi(d1_bincounts, d2_bincounts, verbose=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Based on the above test, the distribution between the two samples significantly differ.\n",
- "Not only is the PSI statistic above the commonly used critical value, but also the p-value shows a very high confidence."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## PSI with DistributionStatistics "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Using the `DistributionStatistics` class one can apply the above test without the need to manually perform the binning. We initialize a `DistributionStatistics` instance with the desired test, binning_strategy (or choose `\"default\"` to choose the test's most appropriate binning strategy) and the number of bins. Then we start the test with the unbinned values as input."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "PSI = 0.33942407655561885\n",
- "\n",
- "PSI: Critical values defined according to de facto industry standard:\n",
- "PSI > 0.25: Significant distribution change; investigate.\n",
- "\n",
- "PSI: Critical values defined according to Yurdakul (2018):\n",
- "99.9% confident distributions have changed.\n"
- ]
- }
- ],
- "source": [
- "distribution_test = DistributionStatistics(\"psi\", binning_strategy=\"default\", bin_count=10)\n",
- "psi_value, p_value = distribution_test.compute(d1, d2, verbose=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## KS: Kolmogorov-Smirnov with DistributionStatistics\n",
- "The Kolmogorov-Smirnov test compares two distributions by calculating the maximum difference of the two samples' distribution functions, as illustrated by the black arrow in the following figure. The KS test is available in `probatus.stat_tests.ks`.\n",
- "\n",
- "\n",
- "\n",
- "The main advantage of this method is its sensitivity to differences in both location and shape of the empirical cumulative distribution functions of the two samples.\n",
- "\n",
- "The main disadvantages are that: it works for continuous distributions (unless modified, e.g. see ([Jeng 2006](https://bmcmedresmethodol.biomedcentral.com/track/pdf/10.1186/1471-2288-6-45))); in large samples, small and unimportant differences can be statistically significant ([Taplin & Hunt 2019](https://www.mdpi.com/2227-9091/7/2/53/pdf)); and finally in small samples, large and important differences can be statistically insignificant ([Taplin & Hunt 2019](https://www.mdpi.com/2227-9091/7/2/53/pdf))."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "As before, using the test requires you to perform the binning beforehand"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "KS: pvalue = 2.104700973377179e-27\n",
- "\n",
- "KS: Null hypothesis rejected with 99% confidence. Distributions very different.\n"
- ]
- }
- ],
- "source": [
- "k_value, p_value = ks(d1, d2, verbose=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Again, we can also choose to combine the binning and the statistical test using the `DistributionStatistics` class."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "\n",
- "KS: pvalue = 2.104700973377179e-27\n",
- "\n",
- "KS: Null hypothesis rejected with 99% confidence. Distributions very different.\n"
- ]
- }
- ],
- "source": [
- "distribution_test = DistributionStatistics(\"ks\", binning_strategy=None)\n",
- "ks_value, p_value = distribution_test.compute(d1, d2, verbose=True)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## AutoDist"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
- "source": [
- "from probatus.stat_tests import AutoDist"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Multiple statistics can automatically be calculated using `AutoDist`. To show this, let's create two new dataframes with two features each."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [],
- "source": [
- "size, n_features = 100, 2\n",
- "\n",
- "df1 = pd.DataFrame(np.random.normal(size=(size, n_features)), columns=[f\"feat_{x}\" for x in range(n_features)])\n",
- "df2 = pd.DataFrame(np.random.normal(size=(size, n_features)), columns=[f\"feat_{x}\" for x in range(n_features)])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We can now specify the statistical tests we want to perform and the binning strategies to perform. We can also set both of these variables to `'all'` or binning strategies to `'default'` to use the default binning strategy for every chosen statistical test."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "statistical_tests = [\"KS\", \"PSI\"]\n",
- "binning_strategies = \"default\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's compute the statistics and their p_values:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 2/2 [00:00<00:00, 141.92it/s]\n",
- "100%|██████████| 2/2 [00:00<00:00, 139.13it/s]\n"
- ]
- },
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
column
\n",
- "
p_value_KS_no_bucketing_0
\n",
- "
p_value_PSI_quantilebucketer_10
\n",
- "
statistic_KS_no_bucketing_0
\n",
- "
statistic_PSI_quantilebucketer_10
\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "
0
\n",
- "
feat_0
\n",
- "
0.815415
\n",
- "
0.443244
\n",
- "
0.09
\n",
- "
0.192113
\n",
- "
\n",
- "
\n",
- "
1
\n",
- "
feat_1
\n",
- "
0.281942
\n",
- "
0.010922
\n",
- "
0.14
\n",
- "
0.374575
\n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " column p_value_KS_no_bucketing_0 p_value_PSI_quantilebucketer_10 \\\n",
- "0 feat_0 0.815415 0.443244 \n",
- "1 feat_1 0.281942 0.010922 \n",
- "\n",
- " statistic_KS_no_bucketing_0 statistic_PSI_quantilebucketer_10 \n",
- "0 0.09 0.192113 \n",
- "1 0.14 0.374575 "
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "myAutoDist = AutoDist(statistical_tests=statistical_tests, binning_strategies=binning_strategies, bin_count=10)\n",
- "myAutoDist.compute(df1, df2)"
- ]
- }
- ],
- "metadata": {
- "environment": {
- "name": "common-cpu.m48",
- "type": "gcloud",
- "uri": "gcr.io/deeplearning-platform-release/base-cpu:m48"
- },
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.8"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/tutorials/nb_imputation_comparison.ipynb b/docs/tutorials/nb_imputation_comparison.ipynb
deleted file mode 100644
index c6cf2cd2..00000000
--- a/docs/tutorials/nb_imputation_comparison.ipynb
+++ /dev/null
@@ -1,324 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Imputation Comparison\n",
- "\n",
- "[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ing-bank/probatus/blob/master/docs/tutorials/nb_imputation_comparison.ipynb)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This notebook explains how the `ImputationSelector` class works in `probatus`. With `ImputationSelector` you can compare multiple imputation strategies\n",
- "and choose a strategy which works the best for a given model and a dataset.\n",
- "Currently `ImputationSelector` supports any [scikit-learn](https://scikit-learn.org/stable/) compatible imputation strategy. For categorical variables the missing values are replaced by a `missing` token and `OneHotEncoder` is applied. The user-supplied imputation strategies are applied to numerical columns only. \n",
- "Support for user-supplied imputation strategies for categorical columns can be added in the future releases.\n",
- "\n",
- "Let us look at an example and start by importing all the required classes and methods.\n",
- "\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "###Install the packages\n",
- "# %%capture\n",
- "#!pip install probatus\n",
- "#!pip install lightgbm"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n"
- ]
- }
- ],
- "source": [
- "%matplotlib inline\n",
- "%load_ext autoreload\n",
- "%autoreload 2\n",
- "import pandas as pd\n",
- "\n",
- "pd.set_option(\"display.max_columns\", 100)\n",
- "pd.set_option(\"display.max_row\", 500)\n",
- "pd.set_option(\"display.max_colwidth\", 200)\n",
- "import lightgbm as lgb\n",
- "from sklearn.datasets import make_classification\n",
- "from sklearn.experimental import enable_iterative_imputer\n",
- "\n",
- "from sklearn.impute import IterativeImputer, KNNImputer, SimpleImputer\n",
- "from sklearn.linear_model import LogisticRegression\n",
- "\n",
- "from probatus.missing_values.imputation import ImputationSelector\n",
- "from probatus.utils.missing_helpers import generate_MCAR"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Let's create a classification dataset to apply the various imputation strategies.\n",
- "\n",
- "We'll use the `probatus.utils.missing_helpers.generate_MCAR` function to randomly add missing values to the dataset."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Shape of X,y : (2000, 20),(2000,)\n"
- ]
- }
- ],
- "source": [
- "n_features = 20\n",
- "X, y = make_classification(n_samples=2000, n_features=n_features, random_state=123, class_sep=0.3)\n",
- "X = pd.DataFrame(X, columns=[\"f_\" + str(i) for i in range(0, n_features)])\n",
- "print(f\"Shape of X,y : {X.shape},{y.shape}\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
0
\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "
f_0
\n",
- "
0.2080
\n",
- "
\n",
- "
\n",
- "
f_1
\n",
- "
0.1960
\n",
- "
\n",
- "
\n",
- "
f_2
\n",
- "
0.1990
\n",
- "
\n",
- "
\n",
- "
f_3
\n",
- "
0.2095
\n",
- "
\n",
- "
\n",
- "
f_4
\n",
- "
0.2150
\n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " 0\n",
- "f_0 0.2080\n",
- "f_1 0.1960\n",
- "f_2 0.1990\n",
- "f_3 0.2095\n",
- "f_4 0.2150"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "X_missing = generate_MCAR(X, missing=0.2)\n",
- "missing_stats = pd.DataFrame(X_missing.isnull().mean())\n",
- "\n",
- "missing_stats.head()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The data has approximately 20% missing values in each feature."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Imputation Strategies"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Create a dictionary with all the strategies to compare. Also, create a classifier to use for evaluating various strategies.\n",
- "If the model supports handling of missing features by default then the model performance on an unimputed dataset is calculated. You can indicate that the model supports handling missing values by setting the parameter `model_na_support=True`.\n",
- "The model performance against the unimputed dataset can be found in `No Imputation` results."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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sHtw7ddHSQh37u7u7Nmzx2Zfam2xExEREUmQqkfFWiwW69qv69ev599//6VMmTJkypQJNze3JI8pUqQIn3/+Oblz507OqoqIiIi8cKk62CWEug8//JCvv/4ad3d34uPj6dOnD40aNSIoKCjJ4/LmzQvYBkMRERGR1C5Vppr7x3ts3ryZLVu28MMPP3D48GFatWrFzJkzmT59OufPn3/keRTqRERExJGkyha7hOlIZs2axa5duyhevDjlypUD7q0g4ebmxvz58zGZTLRr1+6hLXciIiIijiRVBrsEa9as4fvvv6dcuXJER0djNpsBGDJkCAALFy4kKiqKfv36ERgYaM+qioiIiLxwqeZZZFLT7c2fP59u3boRGRnJN998w/Xr1637hgwZQuXKlTl37hwBAQHJWVURERERu0gVLXb3D3K4c+cOcXFx1ta58ePHExUVxcSJE3F1deX999+3Tt43fvx4rf0qIiIiaUaKb7G7P9SNGjWKBg0aUKhQIcaOHcuuXbsA+OqrryhXrhzjxo1jwYIFNi13CnUiIiKSVqTYJcUenIpkwIABfPnllwwYMACTycSECRN47bXX+OCDDwgNDQWgTZs2LFy4kPDwcGrXrm2vqicr6zIjfX3wdVd4FRGxu8HX/7uMyBNwiCXF7g91P/zwAwsXLmT58uV07dqVUqVKceLECXbs2MGECRPYsmULAF9++SV9+vShZs2a9qq2iIjIf7p48SI1a9bE29ub/Pnzs379+iTLFSxYELPZbH05OzvTpUuXROXat2+PyWTin3/+sdk+evRosmbNio+PD0WLFuXGjRsv5Hok5UhxfewaNGjASy+9xOTJk4F7gybSp0/PBx98QKlSpVixYgVNmzZl1qxZvPTSS9SpUwdXV1du3LhBWFgY/fv3ByA+Pl7LhImISIrUqVMngoKCuHjxIj/99BMNGjQgMjIy0WC/AwcOWP8dExNDUFAQ9erVsymza9cuDh48mOg9pkyZwurVq/ntt9/ImjUr+/bte+iqTOI4UtSj2JiYGLZs2ULZsmVtfvmuXLlCfHw8rq6u1KlThxo1atCnTx8AChUqxMWLF+nQoQODBw+2U83tR49iRURSmP94FBsdHU1AQADHjh0jODgYgAoVKtC8eXNatmz50OMiIiLo1asXJ06csPYbNwyD8uXLM3HiREqUKMHp06cJDg4mPj6e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GKYhUf9d6BEU7OR5eZJHscmSlv755x88PT2tS5y89NJL9OvXD4vFQr169fj++++pX78+c+bMYdq0aWzatImlS5eSLVs21q5di4uLC/Hx8RpAISIiySa6n8+jCww4lzwVEXkCL7zFbtGiRbRp04bMmTPTtm1bXnrpJetw7tjYWD788EMmT57MggULePfdd60DKm7duoWXlxdwb14etdglTS12IiJ2osETkkxSTItdbGwsGzZsIC4ujkuXLrFkyRJOnDjB8OHDyZcvHx07duTtt9/Gx8eH999/Hz8/P6pWrQpgDXWGYSjUiYiIiDyGF5qY3Nzc+OSTT3B1deX48eMULFiQiIgIlixZwurVq2nXrh137twhT548ODk5Ua1aNX7//XeKFy9uPYeWCRMRERF5PC+8Keyll17io48+Yvjw4axbt44sWbLQqVMn2rVrx19//cX58+eZPXs2MTExXL58mVdfffVFV0lERETEISXbqNhz584xfPhwduzYQZ06dejfv791n2EYmEwm6/+qT93jUx87ERE7UR87SSYpcoLiTJkyMWDAAEqVKsWyZcsYNWqUdV/CpMQmkwmLxaJQJyIiIvIUknXliaCgIJtwN3DgQACbIJewGoWjenCdXBEREZHnJdlTVFBQEP379yd37tz8+++/aSrgGIZhDa47duywc21ERETE0dileSwoKIgJEyYwbdo0a986R2exWKwjfD/66CNKly7NmTNn7FwrERERcSR268wWEBAAYJ2Q2NElXOOhQ4e4desWP//8M1myZLFzrURERMSR2D1RpYVQlyAiIoKwsDA2bdpEzpw5n6qlMiYmhqioKJuXiIiICNixxS4tcnZ2pmDBgvz8889cvnyZ4ODgJ26xHDFiBEOGDEm0vdCdr3AyvJ5ndUVE5FH6rrR3DezqxMia9q6CJCHtNJcls4TRr/d755136NOnD6+++ipNmzblwIEDODk5JVn2Yfr168f169etr9OnTz/PaouIiDx3Fy9epGbNmnh7e5M/f37Wr1+fZLkTJ04QFhaGv78/WbJk4bPPPrPZv337dl5//XXMZjNZs2Zl0aJF1n03btygTZs2BAQE4O/vT7NmzV7oNaVUarF7Ae5vhVu8eDEXL17k+vXrNG7cmAoVKjBq1CiGDx9OmzZt+Oqrr3jllVceu+XO3d0dd3f3F30JIiIiz02nTp0I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MmbMyPTp07lz5w4///wzGTNmtDmHs7OzHa8i+WjwhIiIiGNLtYMnwsPDmTBhAgULFuSTTz4he/bsxMbGUrZsWU6cOMHSpUspXLgwf/zxB127duXatWscPnyYHj162JwnrYQ6ERERkfuliBY7wzCIj4+nZMmStG3blo4dOwKwdetWxo4dy7///suHH35I7dq1rcds27aNv//+m99++42JEyfi6upqr+rblVrsREREHFuqa7EzmUzExcVx7do1PD09rdtLly7Nhx9+SMaMGfnf//7HokWLrPtef/11GjduzNSpU3F1deXu3bv2qLqIiIhIipEigl0CHx8fXnrpJQAsFgtwL8B9+OGHpE+fns8//5wffvghyWPTaoudiIiISAK7Brv169fz2WefAfeC2c2bN/Hx8QHuPZ5NeEr8+uuv07t3bzJkyED//v355Zdf7FZnERERkZTKbtOdxMTE8P3337Nt2za8vb1p3bo1MTEx1keqDw6AeP311+nZsyfLli2jbNmy9qiyiIiISIpm18ETZ8+eZfTo0Wzfvp0yZcqwfPlyGjdujI+PDxaLBXd3dwBu377NhQsXaNOmDS+//DKQtqY0eRQNnhAREXFsT/Jdb/dRsefOnWPYsGFs2rSJgwcPkjt3bnx8fLh58yYWiwWTyYSHhwf+/v5s2LBBy4M9QMFORETEsT3Jd73dU1KmTJkYOHAgzs7O+Pv7U6FCBWu/u9jYWFxcXHBycsIwDEwmk1rqRERERB4iRYyKDQoKom/fvhQtWpS1a9cyYsQIANzc3IiPjwfuTYliGIZCnYiIiMhDpIhgB/da7gYMGMDrr7/OihUrGDhwIGA7jYnJZLJX9URERERSvBQT7OBey13//v3JnTs3//77LylgUQwRERGRVMPufeweFBQUxIQJE/D397c+flVLnYiIiMh/S3HBDiAgIAC4t/qEk1OKalQUERERSbFSdGpSqBMRERF5fEpOIiIiIg5CwU5ERETEQSjYiYiIiDgIBTsRERERB6FgJyIiIuIgFOxEREREHISCnYiIiIiDULATERERcRAKdiIiIiIOQsFORERExEEo2ImIiIg4CAU7EREREQehYCciIiLiIFzsXQF5NoZhABAVFWXnmoiIiMiLkPAdn/Cd/ygKdqnc5cuXAciaNaudayIiIiIv0o0bN/Dz83tkGQW7VC4gIACAU6dO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",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from sklearn.pipeline import Pipeline\n",
- "from sklearn.preprocessing import StandardScaler\n",
- "\n",
- "steps = [(\"scaler\", StandardScaler()), (\"LR\", LogisticRegression())]\n",
- "clf = Pipeline(steps)\n",
- "cmp = ImputationSelector(clf=clf, strategies=strategies, cv=5, model_na_support=False)\n",
- "cmp.fit_compute(X_missing, y)\n",
- "result_plot = cmp.plot()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "jp-MarkdownHeadingCollapsed": true
- },
- "source": [
- "## Scikit Learn Compatible Imputers. \n",
- "\n",
- "You can also use any other scikit-learn compatible imputer as an imputing strategy.\n",
- "e.g. [feature engine](https://feature-engine.readthedocs.io/en/latest/index.html) library provides a host of other imputing stratgies as well. You can pass them for comparision as well."
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/tutorials/nb_metric_volatility.ipynb b/docs/tutorials/nb_metric_volatility.ipynb
deleted file mode 100644
index 24b036b8..00000000
--- a/docs/tutorials/nb_metric_volatility.ipynb
+++ /dev/null
@@ -1,342 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Metric Volatility Estimation\n",
- "\n",
- "[![open in colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ing-bank/probatus/blob/master/docs/tutorials/nb_metric_volatility.ipynb)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The estimation of AUC of your model could be influenced by, for instance, how you split your data. If another random seed was used, your AUC could be 3% lower. In order to understand how stable your model evaluation is, and what performance you can expect on average from your model, you can use the `metric_volatility` module.\n",
- "\n",
- "### Setup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "%%capture\n",
- "!pip install probatus"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "from sklearn.datasets import make_classification\n",
- "from sklearn.ensemble import RandomForestClassifier\n",
- "\n",
- "from probatus.metric_volatility import BootstrappedVolatility, SplitSeedVolatility, TrainTestVolatility\n",
- "\n",
- "X, y = make_classification(n_samples=1000, n_features=10, random_state=1)\n",
- "clf = RandomForestClassifier(n_estimators=2, max_depth=2, random_state=0)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### TrainTestVolatility\n",
- "The class that provides a wide functionality for experimentation with metric volatility is TrainTestVolatility. Please refer to the API reference for full description of available parameters.\n",
- "\n",
- "By default, the class performs a simple experiment, in which it computes the metrics on data split into train and test set with a different random seed at each iteration. Having computed the mean and standard deviation of the metrics, you can analyse the impact of random seed setting on your results and get a better estimation of performance on this dataset.\n",
- "\n",
- "When you run the `fit()` and `compute()` or `fit_compute()`, the experiment described above is performed and the report is returned. The `train_mean` and and `test_mean` show an averaged performance of the model, and `delta_mean` indicates on average how much the model overfits on the data. \n",
- "\n",
- "By looking at `train_std`, `test_std`, `delta_std`, you can assess the stability of these scores overall. High volatility on some of the splits may indicate the need to change the sizes of these splits or make changes to the model."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
train_mean
\n",
- "
train_std
\n",
- "
test_mean
\n",
- "
test_std
\n",
- "
delta_mean
\n",
- "
delta_std
\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "
roc_auc
\n",
- "
0.831818
\n",
- "
0.036407
\n",
- "
0.816538
\n",
- "
0.043732
\n",
- "
0.01528
\n",
- "
0.027516
\n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " train_mean train_std test_mean test_std delta_mean delta_std\n",
- "roc_auc 0.831818 0.036407 0.816538 0.043732 0.01528 0.027516"
- ]
- },
- "execution_count": 15,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# Basic functionality\n",
- "volatility = TrainTestVolatility(clf, iterations=50)\n",
- "volatility.fit_compute(X, y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The results above show quite unstable results, due to high `train_std` and `test_std`. However, the `delta_mean` is relatively, which indicates that the model might underfit and increasing the complexity of the model could bring improvements to the results.\n",
- "\n",
- "One can also present the distributions of train, test and deltas for each metric. The plots allows for a sensitivity analysis."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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ZMgQnn/+eSQxevRorrzySn7729/WufyUKVMKbrtQLq7MSqRP3y0ZtHP1mtcPPnAvf7ztVlauWsm8uXN54z9T2Wbb7dZap2PHjgwb/jUABuw4iJfHj8vb9qGHHkqHDsl462eeeYZzzjkHgH79+rHZZpsxffp0Hn/8cc4444w1h927detWZ6xPPPEEv/nNb1i2bBnvv/8+O++8c73FVWPabiH2BWZGxAIASX8C9gDWKq4iYhQwCqC6ujpKHaRZsQXJn/WYJx9n6pRXefgvDwKweNEiZr45nS23+nKd6y5atIgRI0Ywbdo0JLFixYq8y+26665rrh/1zDPP8M1vfpNOnToB8K1vfYunn34aSRx++OH06NEDqD/HzJkzhyOOOIK5c+fy6aefNnhtqieffLLgtgvl4sqsRDZIkwXAjDenM/r6/+GRJ59mo65d+eHJJ7B8+fJ11mmXMwC+bZu2rFyZ/1tsp5y2a07h1RYRBf2c+OOPP+a0005j4sSJbL755lx00UVrru9SVVXF6tWrAda65kuhbbcgs4HdJG0AfAIMA8aXNySz0npr5kzatmlLj56bQASXXXk1Q/cdvtYys996q871f/aznzF06FAefPBBZs2axd577513uSzzF8Dpp5/OWWedxSGHHMKYMWO45JJLgLXzF3yWw4qRvzzmyqwMlixezIYbdqZzly7Me28uTz3xeGZt77nnntx5550ATJ06lblz57LVVlux3377cf3117Nq1SqAOg99f/LJJ7Rp04YePXqwZMmStQ7j9+nThwkTJgBw//33r5leaNstRUSMA+4HJgKvkOTKUWUNyqyE3n9/AT8983ROGHkqkth72HBuvWnUmqNPb06fxkcffbTWOhtuuCFLly5d83rRokVsvvnmANxyyy0F9bvnnnvy5z//mY8//piPPvqIBx98kK9+9asMGzaMe++9l4ULFwL155jcfm+99dY10/v06cPEiRMBmDhxIjNnzgRoVNuF8pErW68V8vPjQjRmrFUhBuw4iK233Za9dtuZLfr0Zdfddsus7dNPP51TTjmFHXbYgXbt2nHbbbfRvn17TjnlFKZNm8aAAQOoqqri+9//Pqeeeuo663fv3p0RI0bQv39/tthiCwYPHrxm3jnnnMMRRxzBzTffzNChQ9dML7TtliQiLgYuLncc1jrV5K6sc099ln3yCcOGDF5zKYbDjziKU0/7MQDHjDiBt2e/xfA9dyci6N6jB7fcee9a63/lq3vx39dcxbAhg/nZhRfw05/+lBEjRnD11Vezzz77FBTDTjvtxPHHH8+uu+4KwEknncSgQYMAuPDCC9lrr71o27YtgwYNqrNgu+SSS/j2t7/N5ptvzm677bamiDrssMO47bbb2HHHHdlll13YeutkH/fr16/gtgulug7BlUN1dXWMH+8j79Z0U6dOZbvttmt4wUYqZYKrz6ZdWu51LPO9N5ImRER1Hau0KM5f1hx15a5KyT2N1ZJzVV0ak8N8WtDMzMwsQz4taNaKHXLIIcyePXutaVdddRX77rtvmSIyMyvMZZddxn333bfWtG9/+9tceOGFZYroMy6uzFqxhx56qNwhmJk1yYUXXlgRhVQ+Pi1oZmZWASppDLStrbHvjYsrMzOzMuvQoQMLFy50gVWBIoKFCxeuuVBzIXxa0MzMrMx69erFnDlzWLBgwVrTF3+S/6rmle6Dju3KHUKmOnToQK9evQpe3sWVmZlZmbVr1y7vbVqueeyNMkTTfFldY7ClcnFl67enLs+kmU7pzVM/2uOcepf74IOFfPuQAwGYP28ebdu2oXuPngA88uTTtM+5nU197rr9Vvbd72tssunnmxG1mZmVg4srswx169adJ55Jbq78m8t/RadOnfjBj85sdDt333ErAwbu2GBxtXLlSqqq/DE2M6skHtBuViL33HUH+w8dwrAhgzn3rB+zevVqVq5cyWkjv8feu1ez1247M/qG/+HPD9zHq6+8zCknHMewIYP59NNP12pnyJAhXHjhhey5555cd911zJw5k6FDhzJgwACGDx/OnDlzAHjvvfc49NBDGTBgAAMHDmTcuHF1xnbwwQez8847069fP0aPHg0khVvXrl3XLHP33Xdz0kknNbptM7PWxl95zUpg6mtTeOThv/DwY2Ooqqri7B/9kD8/cC99+m7JwoULGfNcctuURR9+yEZdu3LTqOv5r99cQ/8BA/O2t3jxYsaOHQvAAQccwEknncQxxxzDqFGjOOOMM7j//vv54Q9/yPDhwznttNNYuXIlH3/8cZ3x3XrrrXTr1o2PP/6Y6upqDjvsMDp37lzn8o1p28ystfGRK7MSeHrMk0yaOIGv7f0Vhg0ZzHPPPs2smTPps+WXeHPaG1x07k946vHH6LLRRgW1d+SRR655Pm7cuDWvv/vd7/L0008DMGbMGE455RQAqqqq6NKlS53tXXPNNQwcOJDdd9+dOXPm8Oabb9bbf2PaNjNrbXzkyqwEIoKjjh3BuRddvM68p/79Ik889g9G3/gH/vbQn7nq9//TYHudOnUqqF9JDS7z+OOPM3bsWJ5//nk6duzIkCFDWLZsGW3atFnrmjvLlq19A9lC2jYza4185MqsBPbcex8eevABFi58H0h+VTjn7dm8//4CIoJDvnkY55x/ES9PngRApw07s3TpkoLa3m233bj33nsBuOOOO9hzzz0BGDp0KDfccAMAq1atYvHixXnXX7RoEd26daNjx45MmTKFF198EYA2bdqw8cYbM23aNFavXs2DDz64Zp1C2zYza4185MrWb0PPz6SZjxYva3ihemzXrz8/Oe8CvnPo11m9ejXtqtpxxTW/p23btpx12vcJAiEuuvRXABx5zHH85PQf0KFjxwYv4XDddddx4okncvnll7Ppppty8803r5l+8sknc+ONN1JVVcWNN97Irrvuus76X//61xk1ahQDBw5k2223ZfDgwWvmXXHFFey///707t2b7bffnuXLlzeqbTOz1kiVdKn96urqGD9+fLnDsBZs6tSpbLfddpm3O6+ZxVVWNu1S+O0XKk2+90bShIioLlNImXL+smLwRUQrW105zKcFzczMzDLk04JmrcT8+fPZb7/91pk+ZsyYta5nZWZmzePiyqyV2GSTTZg0aVK5wzAzW+8V9bSgpDMlTZH0qqQ/Smq5A0asxaikcYSW8HtiZq1J0YorSZsDPwKqI6I/0BY4sv61zJqnQ4cOLFy40P+ZV5CIYOHChXTo4O9WZtY6FPu0YBXQUdIKYAPg3SL3Z61cr169mDNnDgsWLMi03cWfrMi0vab6oGO7cofQJB06dKBXr17lDsPMrCSKVlxFxDuSrgJmA58A/4yIfxarPzOAdu3a0bdv38zbrZSfQ7eWnzeXm6RtgHtyJm0J/Dwiri1TSGbWghStuJK0MXAo0Bf4ELhP0rERcUet5UYCIwF69+5drHAqx1OXF6/tjC6YmVcLjvu5GQub3cxudUx/vvfIZrdtlSciXgd2BJDUFngHeLDelczMUsUc0L4vMDMiFkTECuBPwB61F4qIURFRHRHVPXv2LGI4ZmZNMgx4MyLeKncgZtYyFLO4mg3sJmkDJXd4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\n",
- "text/plain": [
- "
"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "axs = volatility.plot()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "In order to simplify the use of this class for the user, two convenience classes have been created to perform the main types of analyses with less parameters needed to be set by the user."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### SplitSeedVolatility \n",
- "\n",
- "The estimation of volatility is done in the same way as the default analysis described in TrainTestVolatility. The main advantage of using that class is a lower number of parameters to set."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- "
\n",
- "
\n",
- "
train_mean
\n",
- "
train_std
\n",
- "
test_mean
\n",
- "
test_std
\n",
- "
delta_mean
\n",
- "
delta_std
\n",
- "
\n",
- " \n",
- " \n",
- "
\n",
- "
roc_auc
\n",
- "
0.827796
\n",
- "
0.039356
\n",
- "
0.804926
\n",
- "
0.040501
\n",
- "
0.02287
\n",
- "
0.019264
\n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " train_mean train_std test_mean test_std delta_mean delta_std\n",
- "roc_auc 0.827796 0.039356 0.804926 0.040501 0.02287 0.019264"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "volatility = SplitSeedVolatility(clf, iterations=50, test_prc=0.5)\n",
- "volatility.fit_compute(X, y)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### BootstrappedVolatility\n",
- "\n",
- "This class allows to perform a different experiment. At each iteration, the train-test split is the same, however, the samples in both splits are bootstrapped (sampled with replacement). Thus, some of the samples might be omitted, and some will be used multiple times in a given run. \n",
- "\n",
- "With this experiment, you can estimate an average performance for a specific train-test split, as well as indicate how volatile the scores are towards certain samples within your splits. Moreover, you can experiment with the amount of data sampled in each split, to tweak the test split size."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "