{ "cells": [ { "cell_type": "markdown", "id": "intro-md", "metadata": {}, "source": [ "# Benchmark: AutoCarver vs. optbinning vs. KBinsDiscretizer\n", "\n", "This notebook runs the three binning libraries side-by-side on two public datasets:\n", "\n", "1. **German Credit** — binary classification, mixed numeric / categorical features, 1,000 rows.\n", "2. **California Housing** — regression, all-numeric features, 20,640 rows.\n", "\n", "For each library and dataset, we report:\n", "\n", "- **`fit` and `transform` wall-clock** (seconds)\n", "- **Downstream-model score** — AUC for binary, R² for regression — using a linear model (logistic regression / ridge) on the one-hot-encoded bin output\n", "- **`train` → `test` score drop** as a coarse proxy for drift sensitivity\n", "\n", "All three libraries see the same `train + dev` data and are evaluated on the same held-out `test`. AutoCarver uses the dev sample for its built-in robustness veto; optbinning and KBinsDiscretizer don't have a dev-set concept and so treat the union of train + dev as one pooled training set — which is the comparison practitioners actually run.\n", "\n", "**This is not an IV / Tschuprow's T leaderboard.** Those metrics structurally favour the library whose objective they are. The downstream-model score is the metric a real scorecard team would use to pick a binner.\n", "\n", "Numbers come from a single run on a single machine with a fixed seed; treat them as illustrative, not as authoritative benchmark figures. Re-run on your own data before drawing conclusions." ] }, { "cell_type": "markdown", "id": "setup-md", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "imports", "metadata": {}, "outputs": [], "source": [ "import time\n", "import warnings\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.datasets import fetch_california_housing, fetch_openml\n", "from sklearn.linear_model import LogisticRegression, Ridge\n", "from sklearn.metrics import r2_score, roc_auc_score\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import KBinsDiscretizer\n", "\n", "from AutoCarver import BinaryCarver, ContinuousCarver, Features\n", "from AutoCarver.discretizers.utils.base_discretizer import DiscretizerConfig\n", "\n", "try:\n", " from optbinning import ContinuousOptimalBinning, OptimalBinning\n", "\n", " HAS_OPTBINNING = True\n", "except ImportError:\n", " HAS_OPTBINNING = False\n", " print('optbinning is not installed \\u2014 its rows will be skipped.')\n", "\n", "SEED = 42\n", "warnings.filterwarnings('ignore')\n", "plt.rcParams['figure.figsize'] = (10, 3.5)" ] }, { "cell_type": "code", "execution_count": 2, "id": "helpers", "metadata": {}, "outputs": [], "source": [ "def one_hot(df):\n", " \"\"\"Treat every bin label as a categorical level and one-hot encode it.\n", "\n", " Lets a linear downstream model consume any of the three libraries' outputs\n", " uniformly, without us computing WoE per bin.\n", " \"\"\"\n", " return pd.get_dummies(df.astype(str), drop_first=True).astype(float)\n", "\n", "\n", "def fit_eval_binary(X_train, X_test, y_train, y_test):\n", " Xtr = one_hot(X_train)\n", " Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n", " model = LogisticRegression(max_iter=1000, random_state=SEED).fit(Xtr, y_train)\n", " return {\n", " 'train_auc': roc_auc_score(y_train, model.predict_proba(Xtr)[:, 1]),\n", " 'test_auc': roc_auc_score(y_test, model.predict_proba(Xte)[:, 1]),\n", " }\n", "\n", "\n", "def fit_eval_regression(X_train, X_test, y_train, y_test):\n", " Xtr = one_hot(X_train)\n", " Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n", " model = Ridge(random_state=SEED).fit(Xtr, y_train)\n", " return {\n", " 'train_r2': r2_score(y_train, model.predict(Xtr)),\n", " 'test_r2': r2_score(y_test, model.predict(Xte)),\n", " }\n", "\n", "\n", "def plot_bars(results_df, score_cols, title):\n", " fig, axes = plt.subplots(1, len(score_cols), figsize=(4 * len(score_cols), 3.5))\n", " if len(score_cols) == 1:\n", " axes = [axes]\n", " for ax, col in zip(axes, score_cols):\n", " results_df.plot.bar(x='library', y=col, ax=ax, legend=False, color='#4C72B0')\n", " ax.set_title(col)\n", " ax.set_xlabel('')\n", " ax.tick_params(axis='x', rotation=0)\n", " fig.suptitle(title)\n", " fig.tight_layout()\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 3, "id": "binners", "metadata": {}, "outputs": [], "source": [ "MAX_N_MOD = 5\n", "MIN_FREQ = 0.05\n", "\n", "def bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n", " Carver = BinaryCarver if kind == 'binary' else ContinuousCarver\n", " features = Features(categoricals=categoricals, quantitatives=quantitatives)\n", " config = DiscretizerConfig(verbose=True) # showing statistics\n", " carver = Carver(features=features, min_freq=MIN_FREQ, max_n_mod=MAX_N_MOD, config=config)\n", "\n", " t0 = time.perf_counter()\n", " X_tr = carver.fit_transform(X_train.copy(), y_train, X_dev=X_dev.copy(), y_dev=y_dev)\n", " fit_t = time.perf_counter() - t0\n", "\n", " X_dv = carver.transform(X_dev.copy())\n", " t1 = time.perf_counter()\n", " X_te = carver.transform(X_test.copy())\n", " transform_t = time.perf_counter() - t1\n", " return pd.concat([X_tr, X_dv]), X_te, fit_t, transform_t\n", "\n", "\n", "def bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n", " Cls = OptimalBinning if kind == 'binary' else ContinuousOptimalBinning\n", " X_all = pd.concat([X_train, X_dev])\n", " y_all = pd.concat([y_train, y_dev])\n", " binners = {}\n", " train_binned = pd.DataFrame(index=X_all.index)\n", " test_binned = pd.DataFrame(index=X_test.index)\n", "\n", " t0 = time.perf_counter()\n", " for col in X_all.columns:\n", " dtype = 'categorical' if col in categoricals else 'numerical'\n", " binner = Cls(name=col, dtype=dtype, min_prebin_size=MIN_FREQ/2, max_n_bins=MAX_N_MOD)\n", " binner.fit(X_all[col].to_numpy(), y_all.to_numpy())\n", " binners[col] = binner\n", " train_binned[col] = binner.transform(X_all[col].to_numpy(), metric='bins')\n", " fit_t = time.perf_counter() - t0\n", "\n", " t1 = time.perf_counter()\n", " for col, b in binners.items():\n", " test_binned[col] = b.transform(X_test[col].to_numpy(), metric='bins')\n", " transform_t = time.perf_counter() - t1\n", " return train_binned, test_binned, fit_t, transform_t\n", "\n", "\n", "def bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives, n_bins=5):\n", " X_all = pd.concat([X_train, X_dev])\n", " num_train = X_all[quantitatives].apply(lambda c: c.fillna(c.median()))\n", " num_test = X_test[quantitatives].apply(lambda c: c.fillna(c.median()))\n", " kbd = KBinsDiscretizer(n_bins=n_bins, encode='ordinal', strategy='quantile')\n", "\n", " t0 = time.perf_counter()\n", " binned_num_train = pd.DataFrame(\n", " kbd.fit_transform(num_train), columns=quantitatives, index=X_all.index\n", " )\n", " fit_t = time.perf_counter() - t0\n", "\n", " t1 = time.perf_counter()\n", " binned_num_test = pd.DataFrame(\n", " kbd.transform(num_test), columns=quantitatives, index=X_test.index\n", " )\n", " transform_t = time.perf_counter() - t1\n", "\n", " # KBins has no opinion on categoricals — pass them through as labels\n", " train = pd.concat([binned_num_train, X_all[categoricals].astype(str)], axis=1)\n", " test = pd.concat([binned_num_test, X_test[categoricals].astype(str)], axis=1)\n", " return train, test, fit_t, transform_t" ] }, { "cell_type": "markdown", "id": "binary-md", "metadata": {}, "source": [ "## Binary classification — German Credit\n", "\n", "20 features (numeric + categorical), 1,000 rows, target = `class == 'bad'`. Train / dev / test split = 60 / 20 / 20 %." ] }, { "cell_type": "code", "execution_count": 4, "id": "381a7051", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train=600, dev=200, test=200\n", "categoricals=13, quantitatives=7\n", "bad rate (train)=0.300, (test)=0.300\n" ] } ], "source": [ "credit = fetch_openml(data_id=31, as_frame=True)\n", "df = credit.frame.copy()\n", "\n", "y_binary = (df['class'] == 'bad').astype(int)\n", "X_binary = df.drop(columns=['class'])\n", "\n", "X_train, X_rest, y_train, y_rest = train_test_split(\n", " X_binary, y_binary, test_size=0.4, random_state=SEED, stratify=y_binary,\n", ")\n", "X_dev, X_test, y_dev, y_test = train_test_split(\n", " X_rest, y_rest, test_size=0.5, random_state=SEED, stratify=y_rest,\n", ")\n", "\n", "categoricals = [c for c in X_binary.columns if X_binary[c].dtype == object or isinstance(X_binary[c].dtype, pd.CategoricalDtype)]\n", "quantitatives = [c for c in X_binary.columns if c not in categoricals]\n", "\n", "print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n", "print(f'categoricals={len(categoricals)}, quantitatives={len(quantitatives)}')\n", "print(f'bad rate (train)={y_train.mean():.3f}, (test)={y_test.mean():.3f}')" ] }, { "cell_type": "code", "execution_count": 5, "id": "run-binary", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------\n", "--- [QuantitativeDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", " - [ContinuousDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", " - [OrdinalDiscretizer] Fit Features(['duration', 'installment_commitment', 'residence_since', 'existing_credits', 'num_dependents'])\n", "------\n", "\n", "------\n", "--- [QualitativeDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n", " - [CategoricalDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n", "------\n", "\n", "---------\n", "------ [BinaryCarver] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker', 'duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", "--- [BinaryCarver] Fit Categorical('checking_status') (1/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
no checking0.13170.4050
>=2000.27780.0600
0<=X<2000.38960.2567
<00.46710.2783
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.06940.3600
0.08330.0600
0.37100.3100
0.57410.2700
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, 5284.40it/s]\n", "Testing robustness : 0%| | 0/7 [00:00\n", "#T_99c63_row0_col0, #T_99c63_row0_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_99c63_row1_col0, #T_99c63_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
no checking, >=2000.15050.4650
0<=X<200, <00.42990.5350
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.07140.4200
0.46550.5800
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('credit_history') (2/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
critical/other existing credit0.16760.2883
existing paid0.31850.5233
delayed previously0.36210.0967
all paid0.54550.0550
no credits/all paid0.54550.0367
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.22410.2900
0.27030.5550
0.35710.0700
0.72730.0550
0.66670.0300
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 15it [00:00, 10330.80it/s]\n", "Testing robustness : 0%| | 0/15 [00:00\n", "#T_9b566_row0_col0, #T_9b566_row2_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_9b566_row0_col1 {\n", " background-color: #b7cff9;\n", " color: #000000;\n", "}\n", "#T_9b566_row1_col0 {\n", " background-color: #c5d6f2;\n", " color: #000000;\n", "}\n", "#T_9b566_row1_col1, #T_9b566_row2_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
critical/other existing credit0.16760.2883
existing paid, delayed previously0.32530.6200
all paid, no credits/all paid0.54550.0917
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.22410.2900
0.28000.6250
0.70590.0850
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('purpose') (3/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
used car0.18750.1067
radio/tv0.23030.2750
other, domestic appliance, retraining0.26320.0317
furniture/equipment0.33330.1700
new car0.34010.2450
business0.37290.0983
repairs0.37500.0267
education0.46430.0467
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.12500.0800
0.22950.3050
0.27270.0550
0.32350.1700
0.42220.2250
0.27780.0900
0.00000.0100
0.46150.0650
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 98it [00:00, 96015.37it/s]\n", "Testing robustness : 0%| | 0/98 [00:00\n", "#T_fbded_row0_col0, #T_fbded_row0_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_fbded_row1_col0, #T_fbded_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
used car, radio/tv, other, domestic appliance, ret...0.22180.4133
new car, furniture/equipment, business, education,...0.35510.5867
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.21590.4400
0.36610.5600
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('savings_status') (4/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
>=10000.06670.0500
500<=X<10000.16220.0617
no known savings0.17140.1750
100<=X<5000.33330.1150
<1000.36490.5983
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.33330.0300
0.12500.0800
0.16670.1800
0.38890.0900
0.34680.6200
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 15it [00:00, ?it/s]\n", "Testing robustness : 0%| | 0/15 [00:00\n", "#T_317ff_row0_col0, #T_317ff_row0_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_317ff_row1_col0, #T_317ff_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
no known savings, >=1000, 500<=X<10000.15120.2867
<100, 100<=X<5000.35980.7133
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.17240.2900
0.35210.7100
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('employment') (5/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
4<=X<70.19350.1550
>=70.25160.2650
1<=X<40.29110.3550
<10.42720.1717
unemployed0.50000.0533
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.26320.1900
0.26000.2500
0.36210.2900
0.33330.1800
0.22220.0900
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 15it [00:00, ?it/s]\n", "Testing robustness : 60%|██████ | 9/15 [00:00<00:00, 220.01it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [BinaryCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
>=7, 4<=X<70.23020.4200
unemployed, 1<=X<4, <10.35060.5800
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.26140.4400
0.33040.5600
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('personal_status') (6/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
male single0.26790.5600
male mar/wid0.27780.0900
female div/dep/mar0.35590.2950
male div/sep0.36360.0550
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.28300.5300
0.23810.1050
0.33850.3250
0.37500.0400
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, 6363.27it/s]\n", "Testing robustness : 0%| | 0/7 [00:00\n", "#T_fb3e1_row0_col0, #T_fb3e1_row1_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_fb3e1_row0_col1, #T_fb3e1_row1_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
male single, male mar/wid0.26920.6500
female div/dep/mar, male div/sep0.35710.3500
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.27560.6350
0.34250.3650
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('other_parties') (7/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
guarantor0.17860.0467
none0.29960.9067
co applicant0.42860.0467
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.25000.0400
0.29890.9200
0.37500.0400
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 3it [00:00, 3005.95it/s]\n", "Testing robustness : 100%|██████████| 3/3 [00:00<00:00, 520.41it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Categorical('other_parties'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Categorical('property_magnitude') (8/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
real estate0.21300.2817
life insurance0.31250.2133
car0.31430.3500
no known property0.40860.1550
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.21820.2750
0.26000.2500
0.32810.3200
0.45160.1550
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, ?it/s]\n", "Testing robustness : 0%| | 0/7 [00:00\n", "#T_aa261_row0_col0, #T_aa261_row2_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_aa261_row0_col1 {\n", " background-color: #a2c1ff;\n", " color: #000000;\n", "}\n", "#T_aa261_row1_col0 {\n", " background-color: #e0dbd8;\n", " color: #000000;\n", "}\n", "#T_aa261_row1_col1, #T_aa261_row2_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
real estate0.21300.2817
car, life insurance0.31360.5633
no known property0.40860.1550
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.21820.2750
0.29820.5700
0.45160.1550
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('other_payment_plans') (9/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
none0.26190.8083
stores0.43750.0533
bank0.46990.1383
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.28660.8200
0.44440.0450
0.33330.1350
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 3it [00:00, 2997.36it/s]\n", "Testing robustness : 0%| | 0/3 [00:00\n", "#T_7849b_row0_col0, #T_7849b_row1_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_7849b_row0_col1, #T_7849b_row1_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
none0.26190.8083
bank, stores0.46090.1917
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.28660.8200
0.36110.1800
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('housing') (10/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
own0.25580.7233
for free0.37500.1067
rent0.44120.1700
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.28570.7350
0.43480.1150
0.26670.1500
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 3it [00:00, ?it/s]\n", "Testing robustness : 0%| | 0/3 [00:00\n", "#T_e63f6_row0_col0, #T_e63f6_row1_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_e63f6_row0_col1, #T_e63f6_row1_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
own0.25580.7233
for free, rent0.41570.2767
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.28570.7350
0.33960.2650
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('job') (11/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
skilled0.28980.6383
unskilled resident0.29660.1967
high qualif/self emp/mgmt0.32580.1483
unemp/unskilled non res0.50000.0167
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.25410.6100
0.31710.2050
0.48390.1550
0.16670.0300
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, ?it/s]\n", "Testing robustness : 57%|█████▋ | 4/7 [00:00<00:00, 363.24it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [BinaryCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
skilled, unskilled resident0.29140.8350
high qualif/self emp/mgmt, unemp/unskilled non res0.34340.1650
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.26990.8150
0.43240.1850
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('own_telephone') (12/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
yes0.26450.4033
none0.32400.5967
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.31250.4000
0.29170.6000
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 1it [00:00, ?it/s]\n", "Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 189.40it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Categorical('own_telephone'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Categorical('foreign_worker') (13/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
no0.04350.0383
yes0.31020.9617
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.33330.0300
0.29900.9700
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 1it [00:00, ?it/s]\n", "Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 473.08it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Categorical('foreign_worker'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Quantitative('duration') (14/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 8.00e+000.09800.0850
8.00e+00 < x <= 9.00e+000.23330.0500
9.00e+00 < x <= 1.10e+010.08700.0383
1.10e+01 < x <= 1.20e+010.28830.1850
1.20e+01 < x <= 1.50e+010.22730.0733
1.50e+01 < x <= 1.80e+010.36920.1083
1.80e+01 < x <= 2.20e+010.23810.0350
2.20e+01 < x <= 2.40e+010.33330.1950
2.40e+01 < x <= 2.80e+010.22220.0150
2.80e+01 < x <= 3.30e+010.38460.0433
3.30e+01 < x <= 3.60e+010.47270.0917
3.60e+01 < x <= 4.70e+010.26670.0250
4.70e+01 < x0.42420.0550
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.10000.1000
0.30770.0650
0.00000.0400
0.24320.1850
0.07140.0700
0.30430.1150
0.44440.0450
0.35480.1550
0.75000.0200
0.42860.0350
0.35290.0850
0.66670.0150
0.57140.0700
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 793it [00:00, 113615.13it/s]\n", "Testing robustness : 0%| | 0/793 [00:00\n", "#T_d33f2_row0_col0, #T_d33f2_row0_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_d33f2_row1_col0 {\n", " background-color: #f2cbb7;\n", " color: #000000;\n", "}\n", "#T_d33f2_row1_col1, #T_d33f2_row2_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "#T_d33f2_row2_col1 {\n", " background-color: #5875e1;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.10e+010.13460.1733
1.10e+01 < x <= 2.80e+010.30520.6117
2.80e+01 < x0.41860.2150
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.14630.2050
0.29660.5900
0.46340.2050
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('credit_amount') (15/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 6.18e+020.20000.0250
6.18e+02 < x <= 7.08e+020.40000.0250
7.08e+02 < x <= 7.97e+020.33330.0250
7.97e+02 < x <= 9.09e+020.40000.0250
9.09e+02 < x <= 1.03e+030.40000.0250
1.03e+03 < x <= 1.16e+030.20000.0250
1.16e+03 < x <= 1.21e+030.26670.0250
1.21e+03 < x <= 1.26e+030.20000.0250
1.26e+03 < x <= 1.31e+030.33330.0250
1.31e+03 < x <= 1.37e+030.46670.0250
1.37e+03 < x <= 1.41e+030.12500.0267
1.41e+03 < x <= 1.47e+030.14290.0233
1.47e+03 < x <= 1.53e+030.26670.0250
1.53e+03 < x <= 1.60e+030.20000.0250
1.60e+03 < x <= 1.82e+030.20000.0250
1.82e+03 < x <= 1.92e+030.50000.0267
1.92e+03 < x <= 1.98e+030.28570.0233
1.98e+03 < x <= 2.12e+030.33330.0250
2.12e+03 < x <= 2.21e+030.26670.0250
2.21e+03 < x <= 2.30e+030.26670.0250
2.30e+03 < x <= 2.38e+030.20000.0250
2.38e+03 < x <= 2.48e+030.40000.0250
2.48e+03 < x <= 2.62e+030.26670.0250
2.62e+03 < x <= 2.75e+030.33330.0250
2.75e+03 < x <= 2.92e+030.20000.0250
2.92e+03 < x <= 3.07e+030.20000.0250
3.07e+03 < x <= 3.35e+030.40000.0250
3.35e+03 < x <= 3.51e+030.13330.0250
3.51e+03 < x <= 3.63e+030.13330.0250
3.63e+03 < x <= 3.91e+030.06670.0250
3.91e+03 < x <= 4.24e+030.46670.0250
4.24e+03 < x <= 4.66e+030.40000.0250
4.66e+03 < x <= 5.08e+030.46670.0250
5.08e+03 < x <= 5.80e+030.20000.0250
5.80e+03 < x <= 6.36e+030.26670.0250
6.36e+03 < x <= 6.85e+030.46670.0250
6.85e+03 < x <= 7.48e+030.20000.0250
7.48e+03 < x <= 8.23e+030.46670.0250
8.23e+03 < x <= 9.57e+030.40000.0250
9.57e+03 < x0.53330.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.20000.0250
0.50000.0200
0.50000.0300
0.00000.0100
0.33330.0300
0.14290.0350
0.50000.0100
0.33330.0600
0.00000.0100
0.28570.0350
0.00000.0150
0.33330.0300
0.25000.0200
0.00000.0150
0.33330.0300
0.28570.0350
0.25000.0200
0.00000.0400
0.50000.0100
0.50000.0100
0.00000.0150
0.00000.0050
0.66670.0150
0.00000.0200
0.00000.0200
0.33330.0150
0.20000.0500
0.50000.0400
0.00000.0300
0.10000.0500
0.25000.0200
0.80000.0250
0.33330.0150
0.40000.0250
0.28570.0350
0.00000.0200
0.66670.0150
0.66670.0150
0.66670.0150
0.61540.0650
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 25717.85it/s]\n", "Testing robustness : 0%| | 0/92170 [00:00\n", "#T_7a2a0_row0_col0 {\n", " background-color: #f6bea4;\n", " color: #000000;\n", "}\n", "#T_7a2a0_row0_col1, #T_7a2a0_row2_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "#T_7a2a0_row1_col0, #T_7a2a0_row1_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_7a2a0_row2_col1 {\n", " background-color: #9bbcff;\n", " color: #000000;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.35e+030.28890.6750
3.35e+03 < x <= 3.91e+030.11110.0750
3.91e+03 < x0.38670.2500
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.24600.6300
0.20830.1200
0.48000.2500
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('installment_commitment') (16/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.00e+000.24360.1300
1.00e+00 < x <= 2.00e+000.26060.2367
2.00e+00 < x <= 3.00e+000.29790.1567
3.00e+00 < x0.33570.4767
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.10710.1400
0.26670.2250
0.24140.1450
0.38780.4900
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, ?it/s]\n", "Testing robustness : 0%| | 0/7 [00:00\n", "#T_8571b_row0_col0, #T_8571b_row0_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_8571b_row1_col0, #T_8571b_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.0e+000.25450.3667
2.0e+00 < x0.32630.6333
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.20550.3650
0.35430.6350
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('residence_since') (17/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.00e+000.31170.1283
1.00e+00 < x <= 2.00e+000.29050.2983
2.00e+00 < x <= 3.00e+000.30000.1667
3.00e+00 < x0.30330.4067
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.21740.1150
0.35290.3400
0.33330.1500
0.26580.3950
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 7it [00:00, ?it/s]\n", "Testing robustness : 100%|██████████| 7/7 [00:00<00:00, 187.60it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Quantitative('residence_since'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Quantitative('age') (18/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.10e+010.40000.0250
2.10e+01 < x <= 2.20e+010.36840.0317
2.20e+01 < x <= 2.30e+010.45000.0333
2.30e+01 < x <= 2.40e+010.33330.0350
2.40e+01 < x <= 2.50e+010.51610.0517
2.50e+01 < x <= 2.60e+010.25000.0467
2.60e+01 < x <= 2.70e+010.22580.0517
2.70e+01 < x <= 2.80e+010.40910.0367
2.80e+01 < x <= 2.90e+010.39130.0383
2.90e+01 < x <= 3.00e+010.21430.0467
3.00e+01 < x <= 3.10e+010.23080.0433
3.10e+01 < x <= 3.20e+010.25000.0333
3.20e+01 < x <= 3.30e+010.36360.0367
3.30e+01 < x <= 3.40e+010.36360.0367
3.40e+01 < x <= 3.50e+010.17240.0483
3.50e+01 < x <= 3.60e+010.20830.0400
3.60e+01 < x <= 3.70e+010.33330.0250
3.70e+01 < x <= 3.80e+010.18750.0267
3.80e+01 < x <= 3.90e+010.29410.0283
3.90e+01 < x <= 4.10e+010.31820.0367
4.10e+01 < x <= 4.20e+010.27270.0183
4.20e+01 < x <= 4.40e+010.19050.0350
4.40e+01 < x <= 4.60e+010.26320.0317
4.60e+01 < x <= 4.70e+010.40000.0167
4.70e+01 < x <= 4.90e+010.14290.0233
4.90e+01 < x <= 5.10e+010.14290.0233
5.10e+01 < x <= 5.40e+010.29410.0283
5.40e+01 < x <= 5.70e+010.33330.0200
5.70e+01 < x <= 6.30e+010.43750.0267
6.30e+01 < x0.26670.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.33330.0300
0.50000.0200
0.33330.0750
0.63640.0550
0.33330.0150
0.33330.0600
0.15380.0650
0.14290.0350
0.40000.0250
0.50000.0500
0.33330.0300
0.20000.0250
0.37500.0400
0.33330.0150
0.25000.0200
0.14290.0350
0.25000.0400
0.25000.0200
0.00000.0050
0.23080.0650
0.60000.0250
0.33330.0300
0.12500.0400
0.00000.0200
0.20000.0250
0.50000.0100
0.60000.0250
0.25000.0200
0.25000.0400
0.00000.0400
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 27840it [00:00, 36613.59it/s]\n", "Testing robustness : 0%| | 0/27840 [00:00\n", "#T_82809_row0_col0, #T_82809_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "#T_82809_row0_col1, #T_82809_row1_col0 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.5e+010.42450.1767
2.5e+01 < x0.27330.8233
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.43590.1950
0.26710.8050
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('existing_credits') (19/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.00e+000.30610.6317
1.00e+00 < x <= 2.00e+000.28990.3450
2.00e+00 < x0.28570.0233
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.30000.6500
0.30160.3150
0.28570.0350
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 3it [00:00, ?it/s]\n", "Testing robustness : 100%|██████████| 3/3 [00:00<00:00, 489.53it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Quantitative('existing_credits'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Quantitative('num_dependents') (20/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.0e+000.29840.8433
1.0e+00 < x0.30850.1567
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
0.30000.8500
0.30000.1500
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 1it [00:00, ?it/s]\n", "Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 224.23it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "WARNING: No robust combination for Quantitative('num_dependents'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
libraryfit_stransform_strain_auctest_aucauc_drop
0AutoCarver6.1960.01260.83210.78740.0447
1optbinning1.1500.01310.85230.79310.0592
2KBinsDiscretizer0.0030.00100.84010.79430.0458
\n", "
" ], "text/plain": [ " library fit_s transform_s train_auc test_auc auc_drop\n", "0 AutoCarver 6.196 0.0126 0.8321 0.7874 0.0447\n", "1 optbinning 1.150 0.0131 0.8523 0.7931 0.0592\n", "2 KBinsDiscretizer 0.003 0.0010 0.8401 0.7943 0.0458" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train_full = pd.concat([y_train, y_dev])\n", "\n", "runs = [(\n", " 'AutoCarver',\n", " lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n", ")]\n", "if HAS_OPTBINNING:\n", " runs.append((\n", " 'optbinning',\n", " lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n", " ))\n", "runs.append((\n", " 'KBinsDiscretizer',\n", " lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n", "))\n", "\n", "rows = []\n", "for name, run in runs:\n", " X_tr, X_te, fit_t, transform_t = run()\n", " scores = fit_eval_binary(X_tr, X_te, y_train_full, y_test)\n", " rows.append({\n", " 'library': name,\n", " 'fit_s': round(fit_t, 3),\n", " 'transform_s': round(transform_t, 4),\n", " 'train_auc': round(scores['train_auc'], 4),\n", " 'test_auc': round(scores['test_auc'], 4),\n", " 'auc_drop': round(scores['train_auc'] - scores['test_auc'], 4),\n", " })\n", "\n", "binary_results = pd.DataFrame(rows)\n", "binary_results" ] }, { "cell_type": "code", "execution_count": 6, "id": "1ea9c0a3", "metadata": {}, "outputs": [ { "data": { "image/png": "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DrjlaN9qX6p7qbrnKVCn71B3Tv32dazuu+8+d57feOONbvnatrTcc8899vLLL7tte+ihh9w26VzQusydOzesrPaLyqlLa9euXW3KlCkuaKYAmI4NAAC5ngcAQAzZv3+/mpl4HTp0SPXezz//7O3duzc4HTlyJPjeVVdd5dWpU8c7evRocN6JEye8Zs2aedWqVQvOe+mll9zymzdv7v3+++9hy2/RooV7b/r06cF5mzZtcvMKFizorVixIjh/0aJFbr6WFxC6PgHLly935aZNm5ZqHVq1auXWMeDBBx/0ChUq5P3yyy9p7p/PPvvMfbZPnz5eRmzdutWVj4+P9/bs2RP2Xkb3Wd++fd0yPvnkk+A8LSshIcHN13eE7kNNAZ9++mmq/XQ6dO3a1a1H7969w7a1Xbt2XpEiRdz5FKByycnJwdf6W/PuvvvusGXecMMNXpkyZcLmRTsH2rRp451//vlh86pWreqWuXDhwrD5OvZxcXHegAEDwuY/8MADXokSJbxDhw6luY36bMmSJb2kpCTv119/DXsv9DzTvtD3p7fex44d82rXru1deeWVwXnPPfecW+fQfRWpffv23sUXX+ylJ3D+h543WidtXyStp94LGDJkiPvsnDlzUpUNbKN+1ykpKamuHeXLlw87htqOyGMdecwD1q1b517fc889YeUefvhhN//9998PW2fN++ijj8J+L0WLFvUeeuihdPcNAAC5Bd3oAAAxRa0SJNow9WohpBYJgWn8+PFu/k8//eQSDKvliVoxqKWDph9//NG1Zvjqq6/s+++/D1uWWjxE5o0JfK9aJgWotYlah6iVTmhLq8Df6pYVENrS57fffnPfrxZa+rxawkRSa5/QrjpqsaHWN+qOd7L9E637XHpuuummYLehzO4z5YVSayB1CQrQstQKJq9Ry7EA7Xu9VkueyC6R0ahVWygdL+2vwDGJPAf279/v9qm6tOk80etQaiUV2S1O3b7at29vr776arB7n84JtXZTi7P0coupi5uOpVqfReadiuwSFil0vdW6T+uq7Qs9b3UeyxtvvBG1C2WgjFoYqSVWdlCLO3UzjGypGLqN+l0Hcj9pPXWuq/WauvNF+x1mhH4Dom6vodTCSd5+++2w+eo+GWjJF/i96FoSer0AACA3oxsdACCmBIIo6i4TSTltdDO9e/duu+OOO8K6rOjG/LHH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Dd3+a9q0qft9Bqxbt87tW53L+m01aNDA+/TTT8M+H9li6ciRI1716tXd/klr/dQqq3bt2m479Fu76qqrgr9DefHFF71atWp5RYoU8SpUqOD17Nkz+J6+8x//+Id33XXXufMkcGzmzZvn/eEPf3DH5LzzzvOGDh0abMWlcyv0nNPraK0lI8/N0LKi87ht27buPCpXrpx3xx13eHv37g07d7Suffr0ca0nte/gP+qSvF+XUI9Qjwj1CPXI6UI9kvfrEaEuydm6hPuRnjF/P5Kng026gWzUqJH7+8033/QuuOAC78SJExkKNukG9qGHHvIuvvhi1xVIk+YdP37cdd1p3ry5t2rVKm/FihXuxlk7OUABiNatW590/WbPnu0CF1999ZW7IdfJo4CJviP0Zl0XXZX75ptvXNDi5ptvdgc51E033RScp4CWfvx33323t379eu+///2vd9ttt7kbcnXvC/x4dUN/5513ehs2bHBTbvXAAw+4QJACbF988YVbd1VWP/74Y/Afjtred999123vtdde6/aZ9oO2d8yYMa7LVeA4qsIX/YgU0Bg5cqS3efNm729/+5tXqFAht5z0gk0KIim4pc/oWGg5gR+1zqszzjjDa9WqlQuSrF692q2b9n96wSatny4OX375pffyyy+7bmKB9VB3NB27P/7xjy4Yo6BOkyZNciTY9Mgjj7jzRAGiaO8HaJ/+6U9/8i688MJU529ksEnBwKVLl7pjedlll7nupQH6vek8VkWmffHaa6+5bQ79fLTuceoOqfd2796dav30mylcuLA3evRot046R8aPHx88D3ThVhBK54mOqQKZod0rtVxdWNUF9uuvv3bB5o8++sgds6lTp7p5OlY653QMRQG3QIBa51wgABd5cQ+ck5oUaNb+029StJ0KsA4cONDtDwWvdQ60bNky7NzR8VGgUkG70MAd/ENdkvfrEuoR6hGhHqEeOV2oR/J+PSLUJTlbl3A/8lzM34/k6WCTbmJ1AykKBpQtW9b9QyMjwaa0cjbpICogoZZDAbpp1ucCrW3UYkMXo8xShFDLCbTKCdysB7YhdD1DWzHt37/f3SyrpZT885//dBeCQGBNdEHXei1atCj441ULmsCFPrdS6xMFb1555ZXgPAWRFHx65plngv9wVOuvAAWhtK0zZ848af9oRWlDqQXc1VdfnW6w6YUXXkh1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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_bars(binary_results, ['fit_s', 'test_auc', 'auc_drop'], 'German Credit \\u2014 binary classification')" ] }, { "cell_type": "markdown", "id": "afa44e90", "metadata": {}, "source": [ "Here, **AutoCarver** has dropped 6 columns that were not stable on dev set." ] }, { "cell_type": "markdown", "id": "regression-md", "metadata": {}, "source": [ "## Regression — California Housing\n", "\n", "6 numeric demographic features (Latitude / Longitude dropped — see comment in the next cell), 20,640 rows, target = median house value. Same 60 / 20 / 20 split." ] }, { "cell_type": "code", "execution_count": 7, "id": "load-regression", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train=12384, dev=4128, test=4128\n", "quantitatives=8 (['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n" ] } ], "source": [ "housing = fetch_california_housing(as_frame=True)\n", "X_reg = housing.frame.drop(columns=['MedHouseVal'])\n", "y_reg = housing.frame['MedHouseVal']\n", "\n", "X_train, X_rest, y_train, y_rest = train_test_split(X_reg, y_reg, test_size=0.4, random_state=SEED)\n", "X_dev, X_test, y_dev, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=SEED)\n", "\n", "quantitatives = list(X_reg.columns)\n", "categoricals = []\n", "\n", "print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n", "print(f'quantitatives={len(quantitatives)} ({quantitatives})')" ] }, { "cell_type": "code", "execution_count": 8, "id": "adebc1c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------\n", "--- [QuantitativeDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n", " - [ContinuousDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n", " - [OrdinalDiscretizer] Fit Features(['HouseAge'])\n", "------\n", "\n", "---------\n", "------ [ContinuousCarver] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n", "--- [ContinuousCarver] Fit Quantitative('MedInc') (1/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.335e+001.19840.0250
1.335e+00 < x <= 1.593e+001.01050.0250
1.593e+00 < x <= 1.740e+001.11330.0250
1.740e+00 < x <= 1.906e+001.15350.0252
1.906e+00 < x <= 2.029e+001.20900.0248
2.029e+00 < x <= 2.152e+001.21410.0251
2.152e+00 < x <= 2.243e+001.24170.0250
2.243e+00 < x <= 2.350e+001.38270.0249
2.350e+00 < x <= 2.468e+001.36140.0250
2.468e+00 < x <= 2.569e+001.41900.0250
2.569e+00 < x <= 2.655e+001.52640.0250
2.655e+00 < x <= 2.737e+001.54280.0250
2.737e+00 < x <= 2.862e+001.57080.0250
2.862e+00 < x <= 2.974e+001.66300.0250
2.974e+00 < x <= 3.054e+001.62700.0250
3.054e+00 < x <= 3.135e+001.70790.0250
3.135e+00 < x <= 3.216e+001.85540.0250
3.216e+00 < x <= 3.315e+001.83730.0250
3.315e+00 < x <= 3.423e+001.91210.0250
3.423e+00 < x <= 3.531e+001.91620.0251
3.531e+00 < x <= 3.633e+001.96780.0250
3.633e+00 < x <= 3.723e+002.02260.0250
3.723e+00 < x <= 3.839e+001.98910.0251
3.839e+00 < x <= 3.971e+002.04930.0249
3.971e+00 < x <= 4.073e+002.05380.0252
4.073e+00 < x <= 4.179e+002.20040.0249
4.179e+00 < x <= 4.315e+002.24170.0250
4.315e+00 < x <= 4.464e+002.23940.0250
4.464e+00 < x <= 4.611e+002.25770.0252
4.611e+00 < x <= 4.757e+002.43510.0248
4.757e+00 < x <= 4.946e+002.34820.0250
4.946e+00 < x <= 5.117e+002.45920.0250
5.117e+00 < x <= 5.308e+002.57840.0250
5.308e+00 < x <= 5.538e+002.68920.0250
5.538e+00 < x <= 5.828e+002.78670.0251
5.828e+00 < x <= 6.148e+003.09430.0249
6.148e+00 < x <= 6.599e+003.30310.0250
6.599e+00 < x <= 7.313e+003.60640.0250
7.313e+00 < x <= 8.433e+004.01910.0250
8.433e+00 < x4.73430.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.25070.0247
1.03190.0262
1.15870.0257
1.08550.0252
1.25230.0225
1.26060.0293
1.26430.0208
1.33350.0274
1.45280.0257
1.48870.0305
1.51420.0237
1.64850.0208
1.55440.0293
1.61890.0257
1.74330.0233
1.63690.0213
1.78020.0276
1.97210.0283
1.82870.0279
1.82950.0242
1.99070.0300
1.95170.0216
2.02200.0269
2.15090.0269
2.09770.0291
2.20540.0225
2.29790.0274
2.35530.0274
2.29240.0184
2.44010.0213
2.29310.0250
2.49400.0237
2.61330.0250
2.71770.0189
2.91100.0276
3.07290.0213
3.07590.0271
3.59850.0228
4.03850.0206
4.61310.0264
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 27184.56it/s]\n", "Testing robustness : 0%| | 0/92170 [00:00\n", "#T_d6fb8_row0_col0, #T_d6fb8_row4_col1 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_d6fb8_row0_col1, #T_d6fb8_row2_col1 {\n", " background-color: #ed8366;\n", " color: #f1f1f1;\n", "}\n", "#T_d6fb8_row1_col0 {\n", " background-color: #688aef;\n", " color: #f1f1f1;\n", "}\n", "#T_d6fb8_row1_col1 {\n", " background-color: #c0d4f5;\n", " color: #000000;\n", "}\n", "#T_d6fb8_row2_col0 {\n", " background-color: #9dbdff;\n", " color: #000000;\n", "}\n", "#T_d6fb8_row3_col0 {\n", " background-color: #d7dce3;\n", " color: #000000;\n", "}\n", "#T_d6fb8_row3_col1, #T_d6fb8_row4_col0 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.47e+001.20930.2250
2.47e+00 < x <= 3.13e+001.57960.1750
3.13e+00 < x <= 4.07e+001.95600.2251
4.07e+00 < x <= 5.83e+002.42380.2499
5.83e+00 < x3.75240.1249
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.23230.2275
1.59340.1747
1.96040.2425
2.46520.2372
3.68700.1182
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('HouseAge') (2/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 5.00e+002.23580.0271
5.00e+00 < x <= 8.00e+001.97270.0263
8.00e+00 < x <= 1.10e+011.81330.0352
1.10e+01 < x <= 1.30e+011.83580.0267
1.30e+01 < x <= 1.40e+011.87780.0200
1.40e+01 < x <= 1.60e+011.93550.0652
1.60e+01 < x <= 1.70e+011.89290.0319
1.70e+01 < x <= 1.80e+011.94550.0276
1.80e+01 < x <= 2.00e+011.94700.0470
2.00e+01 < x <= 2.10e+011.96300.0217
2.10e+01 < x <= 2.20e+012.06610.0195
2.20e+01 < x <= 2.30e+011.95930.0220
2.30e+01 < x <= 2.50e+012.17130.0480
2.50e+01 < x <= 2.60e+012.09370.0304
2.60e+01 < x <= 2.70e+012.05680.0245
2.70e+01 < x <= 2.80e+011.98270.0241
2.80e+01 < x <= 2.90e+012.02030.0232
2.90e+01 < x <= 3.00e+012.05150.0236
3.00e+01 < x <= 3.20e+012.04530.0484
3.20e+01 < x <= 3.30e+012.03430.0316
3.30e+01 < x <= 3.40e+012.13570.0320
3.40e+01 < x <= 3.50e+012.00040.0399
3.50e+01 < x <= 3.60e+012.11480.0437
3.60e+01 < x <= 3.70e+012.00040.0257
3.70e+01 < x <= 3.90e+012.01330.0355
3.90e+01 < x <= 4.10e+012.03060.0273
4.10e+01 < x <= 4.20e+011.98890.0167
4.20e+01 < x <= 4.40e+012.07420.0351
4.40e+01 < x <= 4.50e+012.29770.0132
4.50e+01 < x <= 4.70e+011.95170.0211
4.70e+01 < x2.58480.0857
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.07200.0245
1.92010.0269
1.90540.0344
1.87360.0216
1.84100.0196
1.88260.0606
1.85920.0375
1.87990.0283
1.87460.0436
1.98490.0206
2.21810.0170
2.15500.0201
2.08470.0579
2.07780.0296
2.17840.0216
2.22420.0208
1.78020.0213
1.76290.0233
2.04930.0504
1.93430.0259
2.08370.0349
2.19570.0417
2.01570.0431
2.20060.0296
2.00260.0351
1.94610.0305
1.91960.0194
2.01170.0312
2.13100.0155
2.05150.0225
2.59680.0911
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 31930it [00:00, 33725.96it/s]\n", "Testing robustness : 1%| | 310/31930 [00:00<00:54, 584.35it/s] " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.30e+011.94660.3703
2.30e+01 < x <= 2.60e+012.14120.0785
2.60e+01 < x <= 3.60e+012.05260.2909
3.60e+01 < x <= 4.70e+012.03810.1747
4.70e+01 < x2.58480.0857
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.93160.3547
2.08240.0875
2.03830.2829
2.03470.1839
2.59680.0911
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveRooms') (3/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.066e+001.95060.0250
3.066e+00 < x <= 3.432e+001.88800.0250
3.432e+00 < x <= 3.647e+001.82330.0250
3.647e+00 < x <= 3.792e+001.82920.0250
3.792e+00 < x <= 3.933e+001.78470.0250
3.933e+00 < x <= 4.052e+001.84990.0250
4.052e+00 < x <= 4.168e+001.87180.0250
4.168e+00 < x <= 4.276e+001.83330.0250
4.276e+00 < x <= 4.365e+001.79650.0250
4.365e+00 < x <= 4.454e+001.69520.0250
4.454e+00 < x <= 4.536e+001.75350.0250
4.536e+00 < x <= 4.621e+001.79520.0250
4.621e+00 < x <= 4.705e+001.84650.0250
4.705e+00 < x <= 4.794e+001.74860.0250
4.794e+00 < x <= 4.874e+001.77190.0250
4.874e+00 < x <= 4.941e+001.72190.0251
4.941e+00 < x <= 5.014e+001.71760.0249
5.014e+00 < x <= 5.088e+001.77070.0250
5.088e+00 < x <= 5.160e+001.79180.0250
5.160e+00 < x <= 5.233e+001.77910.0250
5.233e+00 < x <= 5.315e+001.82090.0250
5.315e+00 < x <= 5.384e+001.91070.0250
5.384e+00 < x <= 5.460e+001.77280.0250
5.460e+00 < x <= 5.532e+001.89960.0250
5.532e+00 < x <= 5.616e+001.88720.0250
5.616e+00 < x <= 5.694e+001.99050.0250
5.694e+00 < x <= 5.778e+002.00290.0250
5.778e+00 < x <= 5.858e+002.01070.0250
5.858e+00 < x <= 5.959e+002.11370.0250
5.959e+00 < x <= 6.059e+002.04690.0250
6.059e+00 < x <= 6.157e+002.14500.0250
6.157e+00 < x <= 6.270e+002.24770.0250
6.270e+00 < x <= 6.396e+002.34950.0250
6.396e+00 < x <= 6.543e+002.42320.0250
6.543e+00 < x <= 6.717e+002.62410.0250
6.717e+00 < x <= 6.946e+002.75730.0250
6.946e+00 < x <= 7.233e+003.07630.0250
7.233e+00 < x <= 7.637e+003.11180.0250
7.637e+00 < x <= 8.324e+003.58460.0250
8.324e+00 < x2.73910.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.09080.0233
1.85790.0264
2.00310.0242
1.80600.0274
1.81370.0240
1.77250.0211
1.77230.0283
1.78390.0247
1.79020.0286
1.81210.0264
1.62650.0264
1.83490.0276
1.83390.0247
1.77250.0342
1.81880.0254
1.84800.0191
1.83330.0235
1.81910.0266
1.74190.0266
1.76420.0220
1.76450.0303
1.79170.0266
1.86510.0262
1.86450.0274
1.80820.0286
1.84830.0177
2.07780.0240
2.00050.0187
1.97240.0291
2.26230.0235
2.08180.0230
2.28890.0250
2.32800.0213
2.53730.0254
2.67870.0201
2.74570.0211
3.01080.0303
3.15960.0233
3.43400.0235
2.75680.0245
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 28430.03it/s]\n", "Testing robustness : 0%| | 227/92170 [00:00<03:45, 407.92it/s] " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.65e+001.88740.0750
3.65e+00 < x <= 5.62e+001.80220.5500
5.62e+00 < x <= 6.16e+002.05160.1500
6.16e+00 < x <= 6.54e+002.34010.0750
6.54e+00 < x2.98230.1500
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.97880.0739
1.79620.5758
2.04740.1359
2.38860.0717
2.97520.1427
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveBedrms') (4/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 9.1220e-012.05110.0250
9.1220e-01 < x <= 9.4022e-012.12640.0250
9.4022e-01 < x <= 9.5595e-012.06380.0250
9.5595e-01 < x <= 9.6743e-012.07560.0251
9.6743e-01 < x <= 9.7590e-012.25620.0249
9.7590e-01 < x <= 9.8343e-012.17090.0250
9.8343e-01 < x <= 9.8987e-012.14500.0250
9.8987e-01 < x <= 9.9592e-012.17720.0250
9.9592e-01 < x <= 1.0019e+002.19150.0251
1.0019e+00 < x <= 1.0068e+002.09490.0249
1.0068e+00 < x <= 1.0112e+002.24400.0250
1.0112e+00 < x <= 1.0156e+002.16870.0250
1.0156e+00 < x <= 1.0204e+002.17230.0250
1.0204e+00 < x <= 1.0250e+002.20030.0254
1.0250e+00 < x <= 1.0290e+002.13240.0246
1.0290e+00 < x <= 1.0331e+002.18400.0250
1.0331e+00 < x <= 1.0369e+002.03210.0250
1.0369e+00 < x <= 1.0412e+002.17460.0250
1.0412e+00 < x <= 1.0453e+002.25360.0250
1.0453e+00 < x <= 1.0493e+002.15460.0250
1.0493e+00 < x <= 1.0534e+002.07380.0251
1.0534e+00 < x <= 1.0574e+002.12240.0249
1.0574e+00 < x <= 1.0615e+002.04140.0250
1.0615e+00 < x <= 1.0662e+002.15690.0251
1.0662e+00 < x <= 1.0712e+002.09720.0250
1.0712e+00 < x <= 1.0763e+002.07140.0249
1.0763e+00 < x <= 1.0816e+002.02440.0250
1.0816e+00 < x <= 1.0874e+002.01350.0252
1.0874e+00 < x <= 1.0933e+002.22390.0249
1.0933e+00 < x <= 1.1000e+002.02440.0262
1.1000e+00 < x <= 1.1071e+002.00770.0242
1.1071e+00 < x <= 1.1160e+001.95640.0245
1.1160e+00 < x <= 1.1267e+002.00770.0250
1.1267e+00 < x <= 1.1387e+001.93050.0250
1.1387e+00 < x <= 1.1538e+001.81300.0258
1.1538e+00 < x <= 1.1739e+001.80600.0242
1.1739e+00 < x <= 1.2074e+001.91090.0250
1.2074e+00 < x <= 1.2730e+001.89500.0250
1.2730e+00 < x <= 1.5018e+001.79620.0250
1.5018e+00 < x1.49310.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.79610.0252
2.00980.0298
2.30390.0257
2.23900.0262
2.32930.0240
1.93180.0194
2.15750.0199
2.17400.0291
2.22070.0337
2.18110.0233
2.04750.0262
2.27430.0218
2.26270.0293
2.10680.0247
2.44590.0228
2.12800.0269
2.11930.0240
2.22800.0259
2.03360.0237
2.01950.0216
1.98980.0235
2.22700.0216
1.92440.0254
2.15090.0237
2.22230.0274
1.96540.0271
2.10850.0257
2.03320.0240
1.92620.0264
2.11390.0274
1.90250.0225
1.86280.0271
1.95010.0259
2.02310.0206
1.86220.0271
1.81370.0250
2.03990.0259
1.63920.0218
1.72210.0250
1.60190.0240
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 26708.78it/s]\n", "Testing robustness : 2%|▏ | 1722/92170 [00:02<02:08, 706.46it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.049e+002.15350.5000
1.049e+00 < x <= 1.093e+002.09150.2250
1.093e+00 < x <= 1.139e+001.98570.1249
1.139e+00 < x <= 1.207e+001.84340.0750
1.207e+00 < x1.72790.0750
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.15260.5029
2.05820.2248
1.97070.1235
1.90570.0780
1.65580.0707
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Population') (5/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.08e+021.90500.0251
2.08e+02 < x <= 3.53e+022.02770.0251
3.53e+02 < x <= 4.42e+022.06550.0250
4.42e+02 < x <= 5.12e+022.20670.0249
5.12e+02 < x <= 5.75e+022.13270.0250
5.75e+02 < x <= 6.27e+022.07310.0250
6.27e+02 < x <= 6.75e+022.36270.0249
6.75e+02 < x <= 7.16e+022.20060.0250
7.16e+02 < x <= 7.56e+022.09000.0253
7.56e+02 < x <= 7.94e+022.01910.0251
7.94e+02 < x <= 8.32e+022.32480.0251
8.32e+02 < x <= 8.67e+022.07630.0253
8.67e+02 < x <= 9.02e+022.03130.0247
9.02e+02 < x <= 9.40e+022.11850.0247
9.40e+02 < x <= 9.78e+022.17900.0253
9.78e+02 < x <= 1.02e+032.07460.0249
1.02e+03 < x <= 1.06e+031.95220.0247
1.06e+03 < x <= 1.09e+032.11860.0250
1.09e+03 < x <= 1.13e+032.05920.0252
1.13e+03 < x <= 1.17e+032.06400.0252
1.17e+03 < x <= 1.22e+032.01340.0249
1.22e+03 < x <= 1.26e+032.16900.0250
1.26e+03 < x <= 1.30e+032.05580.0248
1.30e+03 < x <= 1.35e+031.97110.0249
1.35e+03 < x <= 1.41e+032.01850.0250
1.41e+03 < x <= 1.46e+032.00040.0251
1.46e+03 < x <= 1.52e+032.09110.0248
1.52e+03 < x <= 1.59e+032.13220.0254
1.59e+03 < x <= 1.66e+031.99490.0246
1.66e+03 < x <= 1.73e+032.02330.0250
1.73e+03 < x <= 1.82e+031.89460.0253
1.82e+03 < x <= 1.91e+031.95040.0247
1.91e+03 < x <= 2.02e+032.00740.0250
2.02e+03 < x <= 2.16e+032.02130.0250
2.16e+03 < x <= 2.32e+032.05410.0250
2.32e+03 < x <= 2.56e+032.07570.0250
2.56e+03 < x <= 2.86e+032.01420.0250
2.86e+03 < x <= 3.28e+031.91960.0250
3.28e+03 < x <= 4.25e+032.04390.0250
4.25e+03 < x2.00100.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.98950.0269
1.81890.0271
2.14790.0271
2.24340.0266
2.12810.0269
2.29080.0257
2.09260.0283
2.17570.0213
2.21820.0259
2.14330.0286
2.07690.0293
2.18890.0240
2.04880.0218
2.15850.0247
2.06990.0259
2.03960.0247
1.98430.0254
2.10620.0213
1.98230.0242
2.13530.0271
2.11320.0230
1.96960.0252
2.12430.0196
1.97740.0245
1.80020.0245
2.15000.0264
1.94710.0293
1.95350.0262
2.09150.0274
2.03900.0228
2.13800.0211
1.97060.0203
1.87170.0264
1.90820.0247
2.08950.0233
1.81310.0266
2.00190.0269
2.02340.0201
2.15580.0262
2.03390.0225
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 26163.59it/s]\n", "Testing robustness : 1%| | 753/92170 [00:00<01:43, 885.21it/s] " ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.53e+021.96630.0502
3.53e+02 < x <= 8.32e+022.16360.2253
8.32e+02 < x <= 1.73e+032.06040.4745
1.73e+03 < x <= 2.16e+031.96830.1000
2.16e+03 < x2.01810.1500
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.90380.0540
2.16590.2398
2.04450.4680
1.96390.0925
2.01690.1456
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveOccup') (6/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 1.699e+002.61410.0250
1.699e+00 < x <= 1.868e+002.79860.0250
1.868e+00 < x <= 1.976e+002.69790.0250
1.976e+00 < x <= 2.071e+002.55580.0250
2.071e+00 < x <= 2.161e+002.45820.0250
2.161e+00 < x <= 2.228e+002.27570.0250
2.228e+00 < x <= 2.288e+002.35920.0250
2.288e+00 < x <= 2.341e+002.25070.0250
2.341e+00 < x <= 2.388e+002.13710.0250
2.388e+00 < x <= 2.435e+002.27080.0250
2.435e+00 < x <= 2.475e+002.19890.0250
2.475e+00 < x <= 2.515e+002.15640.0250
2.515e+00 < x <= 2.557e+002.12790.0250
2.557e+00 < x <= 2.598e+002.24280.0250
2.598e+00 < x <= 2.639e+002.11160.0250
2.639e+00 < x <= 2.674e+002.23430.0250
2.674e+00 < x <= 2.712e+002.04890.0250
2.712e+00 < x <= 2.746e+002.21960.0250
2.746e+00 < x <= 2.784e+002.12110.0250
2.784e+00 < x <= 2.824e+002.26450.0250
2.824e+00 < x <= 2.861e+002.15650.0251
2.861e+00 < x <= 2.899e+002.23230.0250
2.899e+00 < x <= 2.943e+002.07140.0250
2.943e+00 < x <= 2.984e+002.04950.0250
2.984e+00 < x <= 3.026e+001.99170.0250
3.026e+00 < x <= 3.071e+001.96230.0250
3.071e+00 < x <= 3.117e+002.04910.0250
3.117e+00 < x <= 3.168e+001.93360.0250
3.168e+00 < x <= 3.221e+001.94720.0250
3.221e+00 < x <= 3.279e+001.89380.0250
3.279e+00 < x <= 3.344e+001.88040.0250
3.344e+00 < x <= 3.424e+001.87240.0250
3.424e+00 < x <= 3.508e+001.80000.0250
3.508e+00 < x <= 3.606e+001.65710.0250
3.606e+00 < x <= 3.719e+001.56240.0250
3.719e+00 < x <= 3.870e+001.57090.0250
3.870e+00 < x <= 4.089e+001.48540.0250
4.089e+00 < x <= 4.317e+001.42400.0250
4.317e+00 < x <= 4.705e+001.32330.0250
4.705e+00 < x1.52800.0250
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.75240.0220
2.77630.0293
2.65020.0257
2.59900.0242
2.48280.0296
2.40390.0247
2.25670.0281
2.41370.0230
2.34710.0211
2.24250.0300
2.09110.0252
2.20720.0259
2.13700.0262
2.09730.0281
2.01880.0230
2.08250.0225
2.26150.0247
2.01140.0213
2.23140.0257
2.02030.0233
2.09080.0286
1.88870.0233
1.98940.0250
2.23160.0228
2.08910.0291
1.97870.0223
2.08180.0279
1.86020.0203
1.96110.0189
1.72650.0230
1.77890.0259
1.83410.0274
1.64810.0211
1.69890.0247
1.62670.0271
1.55470.0250
1.41500.0293
1.53640.0220
1.42450.0262
1.55980.0266
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 26604.88it/s]\n", "Testing robustness : 0%| | 0/92170 [00:00\n", "#T_fa449_row0_col0, #T_fa449_row1_col1 {\n", " background-color: #b40426;\n", " color: #f1f1f1;\n", "}\n", "#T_fa449_row0_col1 {\n", " background-color: #6788ee;\n", " color: #f1f1f1;\n", "}\n", "#T_fa449_row1_col0 {\n", " background-color: #f6bfa6;\n", " color: #000000;\n", "}\n", "#T_fa449_row2_col0 {\n", " background-color: #cad8ef;\n", " color: #000000;\n", "}\n", "#T_fa449_row2_col1 {\n", " background-color: #edd1c2;\n", " color: #000000;\n", "}\n", "#T_fa449_row3_col0 {\n", " background-color: #6384eb;\n", " color: #f1f1f1;\n", "}\n", "#T_fa449_row3_col1, #T_fa449_row4_col0 {\n", " background-color: #3b4cc0;\n", " color: #f1f1f1;\n", "}\n", "#T_fa449_row4_col1 {\n", " background-color: #506bda;\n", " color: #f1f1f1;\n", "}\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 2.16e+002.62500.1250
2.16e+00 < x <= 2.90e+002.20050.4251
2.90e+00 < x <= 3.51e+001.95010.2749
3.51e+00 < x <= 3.87e+001.59680.0750
3.87e+00 < x1.44020.1000
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.64840.1308
2.16650.4247
1.93110.2636
1.62650.0768
1.48010.1042
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Latitude') (7/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.275e+011.59120.0287
3.275e+01 < x <= 3.284e+011.94710.0220
3.284e+01 < x <= 3.321e+012.10380.0246
3.321e+01 < x <= 3.365e+012.78330.0279
3.365e+01 < x <= 3.374e+012.43260.0268
3.374e+01 < x <= 3.379e+012.18290.0262
3.379e+01 < x <= 3.383e+012.42320.0229
3.383e+01 < x <= 3.387e+012.30030.0241
3.387e+01 < x <= 3.391e+012.15700.0279
3.391e+01 < x <= 3.394e+011.63000.0242
3.394e+01 < x <= 3.397e+011.85940.0225
3.397e+01 < x <= 3.400e+011.94820.0224
3.400e+01 < x <= 3.403e+012.12670.0277
3.403e+01 < x <= 3.406e+012.40210.0339
3.406e+01 < x <= 3.408e+012.24760.0214
3.408e+01 < x <= 3.410e+012.10030.0203
3.410e+01 < x <= 3.413e+012.36460.0242
3.413e+01 < x <= 3.417e+012.77710.0301
3.417e+01 < x <= 3.420e+012.50610.0174
3.420e+01 < x <= 3.427e+012.34630.0262
3.427e+01 < x <= 3.453e+012.45590.0240
3.453e+01 < x <= 3.532e+011.49140.0246
3.532e+01 < x <= 3.623e+010.92080.0250
3.623e+01 < x <= 3.672e+011.24410.0262
3.672e+01 < x <= 3.697e+011.31290.0253
3.697e+01 < x <= 3.729e+012.62410.0239
3.729e+01 < x <= 3.737e+012.65740.0258
3.737e+01 < x <= 3.753e+013.01050.0255
3.753e+01 < x <= 3.765e+012.41970.0243
3.765e+01 < x <= 3.772e+012.11740.0256
3.772e+01 < x <= 3.777e+012.55370.0286
3.777e+01 < x <= 3.781e+012.76470.0221
3.781e+01 < x <= 3.793e+012.61810.0238
3.793e+01 < x <= 3.800e+011.76220.0250
3.800e+01 < x <= 3.826e+011.59240.0243
3.826e+01 < x <= 3.850e+011.85700.0254
3.850e+01 < x <= 3.863e+011.39810.0241
3.863e+01 < x <= 3.898e+011.39620.0251
3.898e+01 < x <= 3.975e+011.12410.0255
3.975e+01 < x0.84420.0244
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.57610.0320
1.94450.0298
2.23180.0254
2.71150.0264
2.43680.0262
2.29100.0291
2.35280.0220
2.32330.0233
2.09370.0368
1.63190.0230
1.79920.0235
1.94080.0250
2.12920.0250
2.32610.0334
2.27130.0233
2.28170.0211
2.22280.0216
2.82240.0303
2.31780.0187
2.27780.0279
2.50250.0252
1.37190.0201
0.93360.0218
1.25160.0259
1.25970.0274
2.55070.0240
2.53510.0266
2.98270.0283
2.65190.0194
2.08690.0203
2.61450.0242
2.52720.0208
2.62460.0308
1.66300.0250
1.51560.0206
1.75490.0225
1.31010.0196
1.39970.0279
1.11140.0235
0.86710.0225
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 27314.34it/s]\n", "Testing robustness : 0%| | 1/92170 [00:00<12:41:40, 2.02it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= 3.45e+012.23110.5254
3.45e+01 < x <= 3.70e+011.24150.1011
3.70e+01 < x <= 3.79e+012.59270.1997
3.79e+01 < x <= 3.85e+011.73930.0748
3.85e+01 < x1.19070.0991
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.21110.5487
1.20650.0952
2.59020.1945
1.64880.0681
1.18010.0935
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Longitude') (8/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= -1.2269e+021.40630.0259
-1.2269e+02 < x <= -1.2247e+022.88780.0259
-1.2247e+02 < x <= -1.2241e+023.23970.0245
-1.2241e+02 < x <= -1.2229e+022.15820.0262
-1.2229e+02 < x <= -1.2223e+022.34630.0260
-1.2223e+02 < x <= -1.2215e+022.25980.0216
-1.2215e+02 < x <= -1.2206e+022.56650.0263
-1.2206e+02 < x <= -1.2199e+022.62650.0253
-1.2199e+02 < x <= -1.2191e+022.69240.0237
-1.2191e+02 < x <= -1.2181e+022.29190.0255
-1.2181e+02 < x <= -1.2157e+021.71030.0242
-1.2157e+02 < x <= -1.2139e+021.17360.0252
-1.2139e+02 < x <= -1.2127e+021.32700.0263
-1.2127e+02 < x <= -1.2101e+021.48570.0238
-1.2101e+02 < x <= -1.2064e+021.47160.0245
-1.2064e+02 < x <= -1.2007e+021.33760.0254
-1.2007e+02 < x <= -1.1972e+021.26240.0258
-1.1972e+02 < x <= -1.1929e+021.33320.0239
-1.1929e+02 < x <= -1.1897e+021.33000.0250
-1.1897e+02 < x <= -1.1852e+022.72110.0258
-1.1852e+02 < x <= -1.1843e+023.16530.0284
-1.1843e+02 < x <= -1.1838e+023.44320.0238
-1.1838e+02 < x <= -1.1834e+022.74800.0249
-1.1834e+02 < x <= -1.1830e+022.34350.0271
-1.1830e+02 < x <= -1.1827e+021.84820.0207
-1.1827e+02 < x <= -1.1822e+021.67140.0273
-1.1822e+02 < x <= -1.1818e+021.80550.0227
-1.1818e+02 < x <= -1.1813e+022.14800.0287
-1.1813e+02 < x <= -1.1808e+022.24940.0243
-1.1808e+02 < x <= -1.1801e+022.40790.0245
-1.1801e+02 < x <= -1.1795e+022.17940.0252
-1.1795e+02 < x <= -1.1790e+022.28970.0216
-1.1790e+02 < x <= -1.1780e+022.48200.0266
-1.1780e+02 < x <= -1.1766e+022.28640.0248
-1.1766e+02 < x <= -1.1739e+021.67910.0237
-1.1739e+02 < x <= -1.1725e+021.63800.0290
-1.1725e+02 < x <= -1.1716e+022.05120.0229
-1.1716e+02 < x <= -1.1708e+021.51130.0249
-1.1708e+02 < x <= -1.1696e+021.66690.0235
-1.1696e+02 < x1.17690.0245
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
1.39270.0216
3.01290.0233
3.18990.0225
2.19110.0271
2.35760.0254
2.23420.0199
2.98620.0240
2.54710.0240
2.69690.0230
2.14640.0250
1.71050.0218
1.09590.0220
1.29180.0291
1.37810.0230
1.47670.0225
1.24410.0252
1.28100.0281
1.28130.0252
1.42230.0274
2.70810.0218
3.25480.0266
3.36040.0242
2.80640.0262
2.23950.0305
1.75510.0191
1.76950.0242
1.61750.0298
2.08810.0264
2.34870.0245
2.43220.0235
2.18310.0286
2.18750.0211
2.52020.0288
2.27010.0235
1.74640.0225
1.87480.0310
2.14660.0266
1.44790.0279
1.57460.0271
1.24650.0259
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Computing associations: 92170it [00:03, 27465.39it/s]\n", "Testing robustness : 0%| | 1/92170 [00:00<4:52:24, 5.25it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " [ContinuousCarver] Carved distribution\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequency
x <= -1.218e+022.44380.2509
-1.218e+02 < x <= -1.190e+021.37870.2242
-1.190e+02 < x <= -1.183e+023.01750.1029
-1.183e+02 < x <= -1.177e+022.16010.2735
-1.177e+02 < x1.61550.1486
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequency
2.47800.2357
1.34870.2243
3.04140.0988
2.13280.2800
1.67630.1611
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
libraryfit_stransform_strain_r2test_r2r2_drop
0AutoCarver33.4990.05770.66330.65660.0067
1optbinning2.5480.00860.51450.50770.0068
2KBinsDiscretizer0.0070.00150.61810.6192-0.0011
\n", "
" ], "text/plain": [ " library fit_s transform_s train_r2 test_r2 r2_drop\n", "0 AutoCarver 33.499 0.0577 0.6633 0.6566 0.0067\n", "1 optbinning 2.548 0.0086 0.5145 0.5077 0.0068\n", "2 KBinsDiscretizer 0.007 0.0015 0.6181 0.6192 -0.0011" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train_full = pd.concat([y_train, y_dev])\n", "\n", "runs = [(\n", " 'AutoCarver',\n", " lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n", ")]\n", "if HAS_OPTBINNING:\n", " runs.append((\n", " 'optbinning',\n", " lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n", " ))\n", "runs.append((\n", " 'KBinsDiscretizer',\n", " lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n", "))\n", "\n", "rows = []\n", "for name, run in runs:\n", " X_tr, X_te, fit_t, transform_t = run()\n", " scores = fit_eval_regression(X_tr, X_te, y_train_full, y_test)\n", " rows.append({\n", " 'library': name,\n", " 'fit_s': round(fit_t, 3),\n", " 'transform_s': round(transform_t, 4),\n", " 'train_r2': round(scores['train_r2'], 4),\n", " 'test_r2': round(scores['test_r2'], 4),\n", " 'r2_drop': round(scores['train_r2'] - scores['test_r2'], 4),\n", " })\n", "\n", "regression_results = pd.DataFrame(rows)\n", "regression_results" ] }, { "cell_type": "code", "execution_count": 9, "id": "f0e3640f", "metadata": {}, "outputs": [ { "data": { "image/png": "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0uE727ZtK19//bVZnwa95s6dK0888USc22oHBe2ArDtNcr58+XKTuP/bb781Sfvfeust2bhxo+TJkydexyL69a/fm4EDB8qTTz4Zo2xQUJAkxCeffCLvvfeerFmzxhxz93Xo9/7dd9+N8Rk7YOdt25A6UK9QryQF6hXqFUW9AuoW7lmSCvUK9Upaqld8qsWTBpxmzpwpo0aNcrXe0Emj6hrg+e9//2sCMOfPn5eLFy+6Pqdlogd4bt686TGvXLlycuTIETPZfv31Vzlz5oxp+aT0JltH5dq2bVuMbdPglq7z77//Nk/P+/XrZ1pm6HLtFhvxoaORLV261IyQt2rVKvPadv/995vWVHnz5jVBBPdJgwiplbYc0mP+448/ehwvHenMPrZqw4YNrn/rMfvtt9/M8YvtnHn7nP3a/lxqoa239No6ceKEa57uf1LSYOd3330nx48fN8En/R7ERoNIGqS9fPnyHQdjX331VRMk0sDO9OnT4yyv6/vwww+lTp06HsHS6NumreM0WKTfNT33CxcuNIE0DVbpqHwJod8b/U5G/87opMfArthju75s2spJW3h98MEH8uCDD8ZYh35ndfuir4NgU+pGvUK94g31yv+hXvGOegXULb53z8L9CvcrNu5XEsenAk+LFy82AYmOHTuaFkTuU4sWLcxT6+rVq5tuUtodRptMaquhGTNmeCxHbw4PHjxoAlKnT5+Wq1evmqah2txTfzS3bt1quiNFRERI3bp1XU2se/ToYW6INaA0ceJEE/D6/fff5dNPPzU3ovoDmzNnTjOkod5caxNT/SHWLknxpTfk2h1Lt6NYsWJmf2w6T1t9NG/eXL7//nuzDxrJfOWVV+TPP/+U1EpvvF966SXp1auXqaA0oKddnbSbk55Lm3aH0qDCrl27pH379mZfw8PDXedMo7T6vp4z9y5SGtAaPny4CVTpeZk/f750795dUpOGDRuaCq1du3by888/m23W4GRsXc4SS7vz6TWh3dK0O925c+fMfL3GNSClk7Y46tatmyvqnRj6g9y1a1ezLu2up/ujgbToAT/dDl2nfje0NZR+f/T8TZo0yetytWXT22+/LZs3bzZdUxcsWCCnTp1yLVdbWWngedy4cWaZ+l3VVlFxiYyMNAFrDWTp/xzp/uu22Mdf2QEt3VZvgWKdry25tCWiHlf7WOq2qS5dusg///xjutjqcdDfnmXLlkmHDh1uG9BCyqJeoV6hXokb9UpM1CugbvG9exbuV7hf4X7lDlk+REc6a9Kkidf3NFGx7u6OHTtMwjsdcUoT2OlnPvzwQ4/k4jpUpo68kCNHDtdoVkpHwNKhPjUBsyZO1iFAjx8/7rEe/ayOoKaj1NnDvevQ8Jpk2R4VTZNG60gOOuSojoSno4J5S3BtJ3KOTkcn0/cjIyNjvKfJqSMiIkxCdV1+8eLFrU6dOpmkft6SXqcWmpC6W7duru3WY2YnbbcTUesIhTpSmibK1hHf9Fy6e/HFF82wjtGHvR44cKA5V5kzZ7by589vhnl1d7tjrwmwdV5CEtR7Sy6uw0660/e1nE2Tl+t+6/7pqHq6v7rMpUuX3sGR9X7O//zzT6tUqVLWgw8+aBJh63rsSa9tTXyuoy/eLrm4e3JwfU/naVlNBNm6dWurSJEiZn806XfXrl1dicftz+uko/vpOjVRt47o5p5gPfr266gnYWFhZoQ4vU5Kly5tjR8/3qP85MmTTcJKTVivCcL1urLFlqxdj7Emj9bfBB3hTq8v/V2wffnll+Y3QxPA6zUVPbm4+/64T3ZZpSP76bHW3xVdj55jTXRuJ9b0do0g5VGvUK9Qr8REvUK9AuoWf7xn4X6F+xXuV+om+n4lQP9zp8ErwEn6BERzE2lLE03m7i+0lVDt2rVNyzj3ROYAgDtDvUK9AgBJiXqFegV+llwcSKs0T5GO6lGqVCkTbNLugNr1jKATAIB6BQCQ0rhfQWIReAJSCU32/cYbb5jcRdrvXfOKab4iAACoVwAAKY37FSQWXe0AAAAAAADgCJ8a1Q4AAAAAAACpB4EnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAAAAAAgCMIPAEAAAAAAMARBJ4AAAAAAADgCAJPAAAAAAAAECf8P/XWxSdO0/huAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_bars(regression_results, ['fit_s', 'test_r2', 'r2_drop'], 'California Housing \\u2014 regression')" ] }, { "cell_type": "markdown", "id": "notes-md", "metadata": {}, "source": [ "## How to read these numbers\n", "\n", "- **`fit_s` / `transform_s`** measure only `.fit` / `.transform` wall-clock — not data loading, not one-hot encoding, not the downstream model.\n", "- **`test_auc` / `test_r2`** are the headline metric. They reflect how well a *simple* downstream model performs on each library's binned output. A tree-based downstream model would tell a different (and less binning-sensitive) story.\n", "- **`auc_drop` / `r2_drop`** are `train - test` and measure how much each library's bins overfit. Lower is more robust. AutoCarver's dev-set veto is designed to keep this small.\n", "- **Same data, same seed, same downstream model** across libraries — but a single run, on one machine, with one set of hyper-parameters. Treat as illustrative.\n", "\n", "## When the result will move\n", "\n", "- **Bigger `max_n_mod` / smaller `min_freq`** will improve AutoCarver and optbinning's in-sample scores at the cost of `*_drop`. KBins doesn't have a target, so it's mostly insensitive.\n", "- **Different downstream model.** Gradient-boosted trees on the raw features beat any binning + linear pipeline. The point of binning is interpretability, not raw accuracy.\n", "- **Different dataset.** German Credit is small; on a 10M-row credit-risk dataset, `fit_s` is what dominates the comparison.\n", "\n", "See [comparison.rst](../../comparison.html) for the qualitative scope and algorithmic comparison." ] } ], "metadata": { "kernelspec": { "display_name": "AutoCarver", "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.11.15" } }, "nbformat": 4, "nbformat_minor": 5 }