{
"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 ProcessingConfig\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": [
"from AutoCarver.combinations.binary import CramervCombinations\n",
"\n",
"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, numericals=quantitatives)\n",
" config = ProcessingConfig(verbose=True) # showing statistics\n",
" combination_evaluator = CramervCombinations() if kind == 'binary' else None\n",
" carver = Carver(features=features, min_freq=MIN_FREQ, max_n_mod=MAX_N_MOD, config=config,combination_evaluator=combination_evaluator)\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, carver\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, binners\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, kbd"
]
},
{
"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, numericals=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)}, numericals={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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" no checking \n",
" 0.1317 \n",
" 0.4050 \n",
" 243 \n",
" \n",
" \n",
" >=200 \n",
" 0.2778 \n",
" 0.0600 \n",
" 36 \n",
" \n",
" \n",
" 0<=X<200 \n",
" 0.3896 \n",
" 0.2567 \n",
" 154 \n",
" \n",
" \n",
" <0 \n",
" 0.4671 \n",
" 0.2783 \n",
" 167 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.0694 \n",
" 0.3600 \n",
" 72 \n",
" \n",
" \n",
" 0.0833 \n",
" 0.0600 \n",
" 12 \n",
" \n",
" \n",
" 0.3710 \n",
" 0.3100 \n",
" 62 \n",
" \n",
" \n",
" 0.5741 \n",
" 0.2700 \n",
" 54 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" no checking \n",
" 0.1317 \n",
" 0.4050 \n",
" 243 \n",
" \n",
" \n",
" >=200 \n",
" 0.2778 \n",
" 0.0600 \n",
" 36 \n",
" \n",
" \n",
" 0<=X<200 \n",
" 0.3896 \n",
" 0.2567 \n",
" 154 \n",
" \n",
" \n",
" <0 \n",
" 0.4671 \n",
" 0.2783 \n",
" 167 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.0694 \n",
" 0.3600 \n",
" 72 \n",
" \n",
" \n",
" 0.0833 \n",
" 0.0600 \n",
" 12 \n",
" \n",
" \n",
" 0.3710 \n",
" 0.3100 \n",
" 62 \n",
" \n",
" \n",
" 0.5741 \n",
" 0.2700 \n",
" 54 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" critical/other existing credit \n",
" 0.1676 \n",
" 0.2883 \n",
" 173 \n",
" \n",
" \n",
" existing paid \n",
" 0.3185 \n",
" 0.5233 \n",
" 314 \n",
" \n",
" \n",
" delayed previously \n",
" 0.3621 \n",
" 0.0967 \n",
" 58 \n",
" \n",
" \n",
" all paid \n",
" 0.5455 \n",
" 0.0550 \n",
" 33 \n",
" \n",
" \n",
" no credits/all paid \n",
" 0.5455 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2241 \n",
" 0.2900 \n",
" 58 \n",
" \n",
" \n",
" 0.2703 \n",
" 0.5550 \n",
" 111 \n",
" \n",
" \n",
" 0.3571 \n",
" 0.0700 \n",
" 14 \n",
" \n",
" \n",
" 0.7273 \n",
" 0.0550 \n",
" 11 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" critical/other existing credit \n",
" 0.1676 \n",
" 0.2883 \n",
" 173 \n",
" \n",
" \n",
" existing paid \n",
" 0.3185 \n",
" 0.5233 \n",
" 314 \n",
" \n",
" \n",
" delayed previously \n",
" 0.3621 \n",
" 0.0967 \n",
" 58 \n",
" \n",
" \n",
" all paid, no credits/all paid \n",
" 0.5455 \n",
" 0.0917 \n",
" 55 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2241 \n",
" 0.2900 \n",
" 58 \n",
" \n",
" \n",
" 0.2703 \n",
" 0.5550 \n",
" 111 \n",
" \n",
" \n",
" 0.3571 \n",
" 0.0700 \n",
" 14 \n",
" \n",
" \n",
" 0.7059 \n",
" 0.0850 \n",
" 17 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" used car \n",
" 0.1875 \n",
" 0.1067 \n",
" 64 \n",
" \n",
" \n",
" other, retraining \n",
" 0.2222 \n",
" 0.0150 \n",
" 9 \n",
" \n",
" \n",
" radio/tv \n",
" 0.2303 \n",
" 0.2750 \n",
" 165 \n",
" \n",
" \n",
" domestic appliance \n",
" 0.3000 \n",
" 0.0167 \n",
" 10 \n",
" \n",
" \n",
" furniture/equipment \n",
" 0.3333 \n",
" 0.1700 \n",
" 102 \n",
" \n",
" \n",
" new car \n",
" 0.3401 \n",
" 0.2450 \n",
" 147 \n",
" \n",
" \n",
" business \n",
" 0.3729 \n",
" 0.0983 \n",
" 59 \n",
" \n",
" \n",
" repairs \n",
" 0.3750 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" education \n",
" 0.4643 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1250 \n",
" 0.0800 \n",
" 16 \n",
" \n",
" \n",
" 0.3000 \n",
" 0.0500 \n",
" 10 \n",
" \n",
" \n",
" 0.2295 \n",
" 0.3050 \n",
" 61 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0050 \n",
" 1 \n",
" \n",
" \n",
" 0.3235 \n",
" 0.1700 \n",
" 34 \n",
" \n",
" \n",
" 0.4222 \n",
" 0.2250 \n",
" 45 \n",
" \n",
" \n",
" 0.2778 \n",
" 0.0900 \n",
" 18 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.4615 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" used car \n",
" 0.1875 \n",
" 0.1067 \n",
" 64 \n",
" \n",
" \n",
" radio/tv, other, retraining \n",
" 0.2299 \n",
" 0.2900 \n",
" 174 \n",
" \n",
" \n",
" furniture/equipment, domestic appliance \n",
" 0.3304 \n",
" 0.1867 \n",
" 112 \n",
" \n",
" \n",
" new car, business, repairs \n",
" 0.3514 \n",
" 0.3700 \n",
" 222 \n",
" \n",
" \n",
" education \n",
" 0.4643 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1250 \n",
" 0.0800 \n",
" 16 \n",
" \n",
" \n",
" 0.2394 \n",
" 0.3550 \n",
" 71 \n",
" \n",
" \n",
" 0.3143 \n",
" 0.1750 \n",
" 35 \n",
" \n",
" \n",
" 0.3692 \n",
" 0.3250 \n",
" 65 \n",
" \n",
" \n",
" 0.4615 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" >=1000 \n",
" 0.0667 \n",
" 0.0500 \n",
" 30 \n",
" \n",
" \n",
" 500<=X<1000 \n",
" 0.1622 \n",
" 0.0617 \n",
" 37 \n",
" \n",
" \n",
" no known savings \n",
" 0.1714 \n",
" 0.1750 \n",
" 105 \n",
" \n",
" \n",
" 100<=X<500 \n",
" 0.3333 \n",
" 0.1150 \n",
" 69 \n",
" \n",
" \n",
" <100 \n",
" 0.3649 \n",
" 0.5983 \n",
" 359 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.1250 \n",
" 0.0800 \n",
" 16 \n",
" \n",
" \n",
" 0.1667 \n",
" 0.1800 \n",
" 36 \n",
" \n",
" \n",
" 0.3889 \n",
" 0.0900 \n",
" 18 \n",
" \n",
" \n",
" 0.3468 \n",
" 0.6200 \n",
" 124 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" no known savings, >=1000, 500<=X<1000 \n",
" 0.1512 \n",
" 0.2867 \n",
" 172 \n",
" \n",
" \n",
" <100, 100<=X<500 \n",
" 0.3598 \n",
" 0.7133 \n",
" 428 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1724 \n",
" 0.2900 \n",
" 58 \n",
" \n",
" \n",
" 0.3521 \n",
" 0.7100 \n",
" 142 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 4<=X<7 \n",
" 0.1935 \n",
" 0.1550 \n",
" 93 \n",
" \n",
" \n",
" >=7 \n",
" 0.2516 \n",
" 0.2650 \n",
" 159 \n",
" \n",
" \n",
" 1<=X<4 \n",
" 0.2911 \n",
" 0.3550 \n",
" 213 \n",
" \n",
" \n",
" <1 \n",
" 0.4272 \n",
" 0.1717 \n",
" 103 \n",
" \n",
" \n",
" unemployed \n",
" 0.5000 \n",
" 0.0533 \n",
" 32 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2632 \n",
" 0.1900 \n",
" 38 \n",
" \n",
" \n",
" 0.2600 \n",
" 0.2500 \n",
" 50 \n",
" \n",
" \n",
" 0.3621 \n",
" 0.2900 \n",
" 58 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.1800 \n",
" 36 \n",
" \n",
" \n",
" 0.2222 \n",
" 0.0900 \n",
" 18 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" >=7, 4<=X<7 \n",
" 0.2302 \n",
" 0.4200 \n",
" 252 \n",
" \n",
" \n",
" unemployed, 1<=X<4, <1 \n",
" 0.3506 \n",
" 0.5800 \n",
" 348 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2614 \n",
" 0.4400 \n",
" 88 \n",
" \n",
" \n",
" 0.3304 \n",
" 0.5600 \n",
" 112 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" male single \n",
" 0.2679 \n",
" 0.5600 \n",
" 336 \n",
" \n",
" \n",
" male mar/wid \n",
" 0.2778 \n",
" 0.0900 \n",
" 54 \n",
" \n",
" \n",
" female div/dep/mar \n",
" 0.3559 \n",
" 0.2950 \n",
" 177 \n",
" \n",
" \n",
" male div/sep \n",
" 0.3636 \n",
" 0.0550 \n",
" 33 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2830 \n",
" 0.5300 \n",
" 106 \n",
" \n",
" \n",
" 0.2381 \n",
" 0.1050 \n",
" 21 \n",
" \n",
" \n",
" 0.3385 \n",
" 0.3250 \n",
" 65 \n",
" \n",
" \n",
" 0.3750 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" male single, male mar/wid \n",
" 0.2692 \n",
" 0.6500 \n",
" 390 \n",
" \n",
" \n",
" female div/dep/mar \n",
" 0.3559 \n",
" 0.2950 \n",
" 177 \n",
" \n",
" \n",
" male div/sep \n",
" 0.3636 \n",
" 0.0550 \n",
" 33 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2756 \n",
" 0.6350 \n",
" 127 \n",
" \n",
" \n",
" 0.3385 \n",
" 0.3250 \n",
" 65 \n",
" \n",
" \n",
" 0.3750 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" guarantor \n",
" 0.1786 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" none \n",
" 0.2996 \n",
" 0.9067 \n",
" 544 \n",
" \n",
" \n",
" co applicant \n",
" 0.4286 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.2989 \n",
" 0.9200 \n",
" 184 \n",
" \n",
" \n",
" 0.3750 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" guarantor \n",
" 0.1786 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" none \n",
" 0.2996 \n",
" 0.9067 \n",
" 544 \n",
" \n",
" \n",
" co applicant \n",
" 0.4286 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.2989 \n",
" 0.9200 \n",
" 184 \n",
" \n",
" \n",
" 0.3750 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('property_magnitude') (8/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" real estate \n",
" 0.2130 \n",
" 0.2817 \n",
" 169 \n",
" \n",
" \n",
" life insurance \n",
" 0.3125 \n",
" 0.2133 \n",
" 128 \n",
" \n",
" \n",
" car \n",
" 0.3143 \n",
" 0.3500 \n",
" 210 \n",
" \n",
" \n",
" no known property \n",
" 0.4086 \n",
" 0.1550 \n",
" 93 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2182 \n",
" 0.2750 \n",
" 55 \n",
" \n",
" \n",
" 0.2600 \n",
" 0.2500 \n",
" 50 \n",
" \n",
" \n",
" 0.3281 \n",
" 0.3200 \n",
" 64 \n",
" \n",
" \n",
" 0.4516 \n",
" 0.1550 \n",
" 31 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" real estate \n",
" 0.2130 \n",
" 0.2817 \n",
" 169 \n",
" \n",
" \n",
" life insurance \n",
" 0.3125 \n",
" 0.2133 \n",
" 128 \n",
" \n",
" \n",
" car \n",
" 0.3143 \n",
" 0.3500 \n",
" 210 \n",
" \n",
" \n",
" no known property \n",
" 0.4086 \n",
" 0.1550 \n",
" 93 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2182 \n",
" 0.2750 \n",
" 55 \n",
" \n",
" \n",
" 0.2600 \n",
" 0.2500 \n",
" 50 \n",
" \n",
" \n",
" 0.3281 \n",
" 0.3200 \n",
" 64 \n",
" \n",
" \n",
" 0.4516 \n",
" 0.1550 \n",
" 31 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" none \n",
" 0.2619 \n",
" 0.8083 \n",
" 485 \n",
" \n",
" \n",
" stores \n",
" 0.4375 \n",
" 0.0533 \n",
" 32 \n",
" \n",
" \n",
" bank \n",
" 0.4699 \n",
" 0.1383 \n",
" 83 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2866 \n",
" 0.8200 \n",
" 164 \n",
" \n",
" \n",
" 0.4444 \n",
" 0.0450 \n",
" 9 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.1350 \n",
" 27 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" none \n",
" 0.2619 \n",
" 0.8083 \n",
" 485 \n",
" \n",
" \n",
" bank, stores \n",
" 0.4609 \n",
" 0.1917 \n",
" 115 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2866 \n",
" 0.8200 \n",
" 164 \n",
" \n",
" \n",
" 0.3611 \n",
" 0.1800 \n",
" 36 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" own \n",
" 0.2558 \n",
" 0.7233 \n",
" 434 \n",
" \n",
" \n",
" for free \n",
" 0.3750 \n",
" 0.1067 \n",
" 64 \n",
" \n",
" \n",
" rent \n",
" 0.4412 \n",
" 0.1700 \n",
" 102 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2857 \n",
" 0.7350 \n",
" 147 \n",
" \n",
" \n",
" 0.4348 \n",
" 0.1150 \n",
" 23 \n",
" \n",
" \n",
" 0.2667 \n",
" 0.1500 \n",
" 30 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" own \n",
" 0.2558 \n",
" 0.7233 \n",
" 434 \n",
" \n",
" \n",
" for free, rent \n",
" 0.4157 \n",
" 0.2767 \n",
" 166 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2857 \n",
" 0.7350 \n",
" 147 \n",
" \n",
" \n",
" 0.3396 \n",
" 0.2650 \n",
" 53 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" skilled \n",
" 0.2898 \n",
" 0.6383 \n",
" 383 \n",
" \n",
" \n",
" unskilled resident \n",
" 0.2966 \n",
" 0.1967 \n",
" 118 \n",
" \n",
" \n",
" high qualif/self emp/mgmt \n",
" 0.3258 \n",
" 0.1483 \n",
" 89 \n",
" \n",
" \n",
" unemp/unskilled non res \n",
" 0.5000 \n",
" 0.0167 \n",
" 10 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2541 \n",
" 0.6100 \n",
" 122 \n",
" \n",
" \n",
" 0.3171 \n",
" 0.2050 \n",
" 41 \n",
" \n",
" \n",
" 0.4839 \n",
" 0.1550 \n",
" 31 \n",
" \n",
" \n",
" 0.1667 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" skilled \n",
" 0.2898 \n",
" 0.6383 \n",
" 383 \n",
" \n",
" \n",
" unskilled resident \n",
" 0.2966 \n",
" 0.1967 \n",
" 118 \n",
" \n",
" \n",
" high qualif/self emp/mgmt, unemp/unskilled non res \n",
" 0.3434 \n",
" 0.1650 \n",
" 99 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2541 \n",
" 0.6100 \n",
" 122 \n",
" \n",
" \n",
" 0.3171 \n",
" 0.2050 \n",
" 41 \n",
" \n",
" \n",
" 0.4324 \n",
" 0.1850 \n",
" 37 \n",
" \n",
" \n",
"
\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",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" yes \n",
" 0.2645 \n",
" 0.4033 \n",
" 242 \n",
" \n",
" \n",
" none \n",
" 0.3240 \n",
" 0.5967 \n",
" 358 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3125 \n",
" 0.4000 \n",
" 80 \n",
" \n",
" \n",
" 0.2917 \n",
" 0.6000 \n",
" 120 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"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"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" no \n",
" 0.0435 \n",
" 0.0383 \n",
" 23 \n",
" \n",
" \n",
" yes \n",
" 0.3102 \n",
" 0.9617 \n",
" 577 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.2990 \n",
" 0.9700 \n",
" 194 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"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 Numerical('duration') (14/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 8.00e+00] \n",
" 0.0980 \n",
" 0.0850 \n",
" 51 \n",
" \n",
" \n",
" (8.00e+00, 9.00e+00] \n",
" 0.2333 \n",
" 0.0500 \n",
" 30 \n",
" \n",
" \n",
" (9.00e+00, 1.10e+01] \n",
" 0.0870 \n",
" 0.0383 \n",
" 23 \n",
" \n",
" \n",
" (1.10e+01, 1.20e+01] \n",
" 0.2883 \n",
" 0.1850 \n",
" 111 \n",
" \n",
" \n",
" (1.20e+01, 1.50e+01] \n",
" 0.2273 \n",
" 0.0733 \n",
" 44 \n",
" \n",
" \n",
" (1.50e+01, 1.80e+01] \n",
" 0.3692 \n",
" 0.1083 \n",
" 65 \n",
" \n",
" \n",
" (1.80e+01, 2.20e+01] \n",
" 0.2381 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" (2.20e+01, 2.40e+01] \n",
" 0.3333 \n",
" 0.1950 \n",
" 117 \n",
" \n",
" \n",
" (2.40e+01, 2.80e+01] \n",
" 0.2222 \n",
" 0.0150 \n",
" 9 \n",
" \n",
" \n",
" (2.80e+01, 3.30e+01] \n",
" 0.3846 \n",
" 0.0433 \n",
" 26 \n",
" \n",
" \n",
" (3.30e+01, 3.60e+01] \n",
" 0.4727 \n",
" 0.0917 \n",
" 55 \n",
" \n",
" \n",
" (3.60e+01, 4.70e+01] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (4.70e+01, inf) \n",
" 0.4242 \n",
" 0.0550 \n",
" 33 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1000 \n",
" 0.1000 \n",
" 20 \n",
" \n",
" \n",
" 0.3077 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.2432 \n",
" 0.1850 \n",
" 37 \n",
" \n",
" \n",
" 0.0714 \n",
" 0.0700 \n",
" 14 \n",
" \n",
" \n",
" 0.3043 \n",
" 0.1150 \n",
" 23 \n",
" \n",
" \n",
" 0.4444 \n",
" 0.0450 \n",
" 9 \n",
" \n",
" \n",
" 0.3548 \n",
" 0.1550 \n",
" 31 \n",
" \n",
" \n",
" 0.7500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.4286 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.3529 \n",
" 0.0850 \n",
" 17 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.5714 \n",
" 0.0700 \n",
" 14 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 8.00e+00] \n",
" 0.0980 \n",
" 0.0850 \n",
" 51 \n",
" \n",
" \n",
" (8.00e+00, 1.10e+01] \n",
" 0.1698 \n",
" 0.0883 \n",
" 53 \n",
" \n",
" \n",
" (1.10e+01, 1.50e+01] \n",
" 0.2710 \n",
" 0.2583 \n",
" 155 \n",
" \n",
" \n",
" (1.50e+01, 2.80e+01] \n",
" 0.3302 \n",
" 0.3533 \n",
" 212 \n",
" \n",
" \n",
" (2.80e+01, inf) \n",
" 0.4186 \n",
" 0.2150 \n",
" 129 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1000 \n",
" 0.1000 \n",
" 20 \n",
" \n",
" \n",
" 0.1905 \n",
" 0.1050 \n",
" 21 \n",
" \n",
" \n",
" 0.1961 \n",
" 0.2550 \n",
" 51 \n",
" \n",
" \n",
" 0.3731 \n",
" 0.3350 \n",
" 67 \n",
" \n",
" \n",
" 0.4634 \n",
" 0.2050 \n",
" 41 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Numerical('credit_amount') (15/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 6.18e+02] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (6.18e+02, 7.08e+02] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (7.08e+02, 7.97e+02] \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (7.97e+02, 9.09e+02] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (9.09e+02, 1.03e+03] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.03e+03, 1.16e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.16e+03, 1.21e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.21e+03, 1.26e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.26e+03, 1.31e+03] \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.31e+03, 1.37e+03] \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.37e+03, 1.41e+03] \n",
" 0.1250 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" (1.41e+03, 1.47e+03] \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" (1.47e+03, 1.53e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.53e+03, 1.60e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.60e+03, 1.82e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (1.82e+03, 1.92e+03] \n",
" 0.5000 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" (1.92e+03, 1.98e+03] \n",
" 0.2857 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" (1.98e+03, 2.12e+03] \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.12e+03, 2.21e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.21e+03, 2.30e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.30e+03, 2.38e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.38e+03, 2.48e+03] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.48e+03, 2.62e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.62e+03, 2.75e+03] \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.75e+03, 2.92e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.92e+03, 3.07e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.07e+03, 3.35e+03] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.35e+03, 3.51e+03] \n",
" 0.1333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.51e+03, 3.63e+03] \n",
" 0.1333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.63e+03, 3.91e+03] \n",
" 0.0667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.91e+03, 4.24e+03] \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (4.24e+03, 4.66e+03] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (4.66e+03, 5.08e+03] \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (5.08e+03, 5.80e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (5.80e+03, 6.36e+03] \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (6.36e+03, 6.85e+03] \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (6.85e+03, 7.48e+03] \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (7.48e+03, 8.23e+03] \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (8.23e+03, 9.57e+03] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (9.57e+03, inf) \n",
" 0.5333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.1429 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0600 \n",
" 12 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.2857 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.2857 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0050 \n",
" 1 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.2000 \n",
" 0.0500 \n",
" 10 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.1000 \n",
" 0.0500 \n",
" 10 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.8000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.4000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.2857 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.6667 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.6154 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.51e+03] \n",
" 0.2833 \n",
" 0.7000 \n",
" 420 \n",
" \n",
" \n",
" (3.51e+03, 3.91e+03] \n",
" 0.1000 \n",
" 0.0500 \n",
" 30 \n",
" \n",
" \n",
" (3.91e+03, 5.08e+03] \n",
" 0.4444 \n",
" 0.0750 \n",
" 45 \n",
" \n",
" \n",
" (5.08e+03, 7.48e+03] \n",
" 0.2833 \n",
" 0.1000 \n",
" 60 \n",
" \n",
" \n",
" (7.48e+03, inf) \n",
" 0.4667 \n",
" 0.0750 \n",
" 45 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2612 \n",
" 0.6700 \n",
" 134 \n",
" \n",
" \n",
" 0.0625 \n",
" 0.0800 \n",
" 16 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0600 \n",
" 12 \n",
" \n",
" \n",
" 0.3158 \n",
" 0.0950 \n",
" 19 \n",
" \n",
" \n",
" 0.6316 \n",
" 0.0950 \n",
" 19 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Numerical('installment_commitment') (16/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.00e+00] \n",
" 0.2436 \n",
" 0.1300 \n",
" 78 \n",
" \n",
" \n",
" (1.00e+00, 2.00e+00] \n",
" 0.2606 \n",
" 0.2367 \n",
" 142 \n",
" \n",
" \n",
" (2.00e+00, 3.00e+00] \n",
" 0.2979 \n",
" 0.1567 \n",
" 94 \n",
" \n",
" \n",
" (3.00e+00, inf) \n",
" 0.3357 \n",
" 0.4767 \n",
" 286 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.1071 \n",
" 0.1400 \n",
" 28 \n",
" \n",
" \n",
" 0.2667 \n",
" 0.2250 \n",
" 45 \n",
" \n",
" \n",
" 0.2414 \n",
" 0.1450 \n",
" 29 \n",
" \n",
" \n",
" 0.3878 \n",
" 0.4900 \n",
" 98 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.00e+00] \n",
" 0.2545 \n",
" 0.3667 \n",
" 220 \n",
" \n",
" \n",
" (2.00e+00, 3.00e+00] \n",
" 0.2979 \n",
" 0.1567 \n",
" 94 \n",
" \n",
" \n",
" (3.00e+00, inf) \n",
" 0.3357 \n",
" 0.4767 \n",
" 286 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2055 \n",
" 0.3650 \n",
" 73 \n",
" \n",
" \n",
" 0.2414 \n",
" 0.1450 \n",
" 29 \n",
" \n",
" \n",
" 0.3878 \n",
" 0.4900 \n",
" 98 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Numerical('residence_since') (17/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.00e+00] \n",
" 0.3117 \n",
" 0.1283 \n",
" 77 \n",
" \n",
" \n",
" (1.00e+00, 2.00e+00] \n",
" 0.2905 \n",
" 0.2983 \n",
" 179 \n",
" \n",
" \n",
" (2.00e+00, 3.00e+00] \n",
" 0.3000 \n",
" 0.1667 \n",
" 100 \n",
" \n",
" \n",
" (3.00e+00, inf) \n",
" 0.3033 \n",
" 0.4067 \n",
" 244 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.2174 \n",
" 0.1150 \n",
" 23 \n",
" \n",
" \n",
" 0.3529 \n",
" 0.3400 \n",
" 68 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.1500 \n",
" 30 \n",
" \n",
" \n",
" 0.2658 \n",
" 0.3950 \n",
" 79 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING: No robust combination for Numerical('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 Numerical('age') (18/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.10e+01] \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (2.10e+01, 2.20e+01] \n",
" 0.3684 \n",
" 0.0317 \n",
" 19 \n",
" \n",
" \n",
" (2.20e+01, 2.30e+01] \n",
" 0.4500 \n",
" 0.0333 \n",
" 20 \n",
" \n",
" \n",
" (2.30e+01, 2.40e+01] \n",
" 0.3333 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" (2.40e+01, 2.50e+01] \n",
" 0.5161 \n",
" 0.0517 \n",
" 31 \n",
" \n",
" \n",
" (2.50e+01, 2.60e+01] \n",
" 0.2500 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" (2.60e+01, 2.70e+01] \n",
" 0.2258 \n",
" 0.0517 \n",
" 31 \n",
" \n",
" \n",
" (2.70e+01, 2.80e+01] \n",
" 0.4091 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" (2.80e+01, 2.90e+01] \n",
" 0.3913 \n",
" 0.0383 \n",
" 23 \n",
" \n",
" \n",
" (2.90e+01, 3.00e+01] \n",
" 0.2143 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" (3.00e+01, 3.10e+01] \n",
" 0.2308 \n",
" 0.0433 \n",
" 26 \n",
" \n",
" \n",
" (3.10e+01, 3.20e+01] \n",
" 0.2500 \n",
" 0.0333 \n",
" 20 \n",
" \n",
" \n",
" (3.20e+01, 3.30e+01] \n",
" 0.3636 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" (3.30e+01, 3.40e+01] \n",
" 0.3636 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" (3.40e+01, 3.50e+01] \n",
" 0.1724 \n",
" 0.0483 \n",
" 29 \n",
" \n",
" \n",
" (3.50e+01, 3.60e+01] \n",
" 0.2083 \n",
" 0.0400 \n",
" 24 \n",
" \n",
" \n",
" (3.60e+01, 3.70e+01] \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" (3.70e+01, 3.80e+01] \n",
" 0.1875 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" (3.80e+01, 3.90e+01] \n",
" 0.2941 \n",
" 0.0283 \n",
" 17 \n",
" \n",
" \n",
" (3.90e+01, 4.10e+01] \n",
" 0.3182 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" (4.10e+01, 4.20e+01] \n",
" 0.2727 \n",
" 0.0183 \n",
" 11 \n",
" \n",
" \n",
" (4.20e+01, 4.40e+01] \n",
" 0.1905 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" (4.40e+01, 4.60e+01] \n",
" 0.2632 \n",
" 0.0317 \n",
" 19 \n",
" \n",
" \n",
" (4.60e+01, 4.70e+01] \n",
" 0.4000 \n",
" 0.0167 \n",
" 10 \n",
" \n",
" \n",
" (4.70e+01, 4.90e+01] \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" (4.90e+01, 5.10e+01] \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" (5.10e+01, 5.40e+01] \n",
" 0.2941 \n",
" 0.0283 \n",
" 17 \n",
" \n",
" \n",
" (5.40e+01, 5.70e+01] \n",
" 0.3333 \n",
" 0.0200 \n",
" 12 \n",
" \n",
" \n",
" (5.70e+01, 6.30e+01] \n",
" 0.4375 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" (6.30e+01, inf) \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0750 \n",
" 15 \n",
" \n",
" \n",
" 0.6364 \n",
" 0.0550 \n",
" 11 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0600 \n",
" 12 \n",
" \n",
" \n",
" 0.1538 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
" 0.1429 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.4000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0500 \n",
" 10 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.2000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.3750 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0150 \n",
" 3 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.1429 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0050 \n",
" 1 \n",
" \n",
" \n",
" 0.2308 \n",
" 0.0650 \n",
" 13 \n",
" \n",
" \n",
" 0.6000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.3333 \n",
" 0.0300 \n",
" 6 \n",
" \n",
" \n",
" 0.1250 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.2000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.5000 \n",
" 0.0100 \n",
" 2 \n",
" \n",
" \n",
" 0.6000 \n",
" 0.0250 \n",
" 5 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0200 \n",
" 4 \n",
" \n",
" \n",
" 0.2500 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
" 0.0000 \n",
" 0.0400 \n",
" 8 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.50e+01] \n",
" 0.4245 \n",
" 0.1767 \n",
" 106 \n",
" \n",
" \n",
" (2.50e+01, 3.20e+01] \n",
" 0.2753 \n",
" 0.2967 \n",
" 178 \n",
" \n",
" \n",
" (3.20e+01, 3.40e+01] \n",
" 0.3636 \n",
" 0.0733 \n",
" 44 \n",
" \n",
" \n",
" (3.40e+01, 3.60e+01] \n",
" 0.1887 \n",
" 0.0883 \n",
" 53 \n",
" \n",
" \n",
" (3.60e+01, inf) \n",
" 0.2740 \n",
" 0.3650 \n",
" 219 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.4359 \n",
" 0.1950 \n",
" 39 \n",
" \n",
" \n",
" 0.2931 \n",
" 0.2900 \n",
" 58 \n",
" \n",
" \n",
" 0.3636 \n",
" 0.0550 \n",
" 11 \n",
" \n",
" \n",
" 0.1818 \n",
" 0.0550 \n",
" 11 \n",
" \n",
" \n",
" 0.2469 \n",
" 0.4050 \n",
" 81 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Numerical('existing_credits') (19/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.00e+00] \n",
" 0.3061 \n",
" 0.6317 \n",
" 379 \n",
" \n",
" \n",
" (1.00e+00, 2.00e+00] \n",
" 0.2899 \n",
" 0.3450 \n",
" 207 \n",
" \n",
" \n",
" (2.00e+00, inf) \n",
" 0.2857 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3000 \n",
" 0.6500 \n",
" 130 \n",
" \n",
" \n",
" 0.3016 \n",
" 0.3150 \n",
" 63 \n",
" \n",
" \n",
" 0.2857 \n",
" 0.0350 \n",
" 7 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING: No robust combination for Numerical('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 Numerical('num_dependents') (20/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.0e+00] \n",
" 0.2984 \n",
" 0.8433 \n",
" 506 \n",
" \n",
" \n",
" (1.0e+00, inf) \n",
" 0.3085 \n",
" 0.1567 \n",
" 94 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 0.3000 \n",
" 0.8500 \n",
" 170 \n",
" \n",
" \n",
" 0.3000 \n",
" 0.1500 \n",
" 30 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING: No robust combination for Numerical('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",
" library \n",
" fit_s \n",
" transform_s \n",
" train_auc \n",
" test_auc \n",
" auc_drop \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" AutoCarver \n",
" 2.690 \n",
" 0.0139 \n",
" 0.8496 \n",
" 0.8044 \n",
" 0.0451 \n",
" \n",
" \n",
" 1 \n",
" optbinning \n",
" 1.216 \n",
" 0.0145 \n",
" 0.8523 \n",
" 0.7931 \n",
" 0.0592 \n",
" \n",
" \n",
" 2 \n",
" KBinsDiscretizer \n",
" 0.003 \n",
" 0.0009 \n",
" 0.8401 \n",
" 0.7943 \n",
" 0.0458 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" library fit_s transform_s train_auc test_auc auc_drop\n",
"0 AutoCarver 2.690 0.0139 0.8496 0.8044 0.0451\n",
"1 optbinning 1.216 0.0145 0.8523 0.7931 0.0592\n",
"2 KBinsDiscretizer 0.003 0.0009 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, carver = 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": "8003c457",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJwAAAFcCAYAAACN/qTPAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWIZJREFUeJzt3QucTfX+//GP67jEuOWaUOSSW4hIoRyURKeEzokk59SJSEkkQyqp43aipJJUIiWVNJJMdQ6SW9JBKbfKuFTIYBTr/3h/f/+9z94ze8YMa+6v5+OxMnvt71p73fb6tj77+/1883me5xkAAAAAAADgk/x+rQgAAAAAAAAg4AQAAAAAAADf0cIJAAAAAAAAviLgBAAAAAAAAF8RcAIAAAAAAICvCDgBAAAAAADAVwScAAAAAAAA4CsCTgAAAAAAAPAVAScAAAAAAAD4ioATAADIErNmzbJ8+fLZjh07gvPatm3rpuzmtttus3POOSdNZbVPo0ePttxKx6J69erZ6rqRp556yi644AIrUKCANW7c2M3Tdmp7M5vOv7YRAIC8jIATACDX2r59uw0YMMAuuugiK1asmJvq1atnd999t23cuNHyug0bNthf//pXq1q1qkVFRVmZMmWsffv29tJLL9nJkyctO/jpp5/cw7u2FUjJhx9+aA888IBdfvnl7vp9/PHHM/xgHT161F2bcXFxnBgAACIoGGkmAAA53aJFi6xHjx5WsGBB+8tf/mKNGjWy/Pnz25YtW2zBggX27LPPuoBUtWrVLC964YUX7M4777QKFSrYrbfearVq1bLffvvNli1bZv369bM9e/bYiBEjsiRwkDTgNGbMGNdSJdBqJbs7duyYu+6QMXS99uzZ0wVJAz7++GP3/X7xxRetcOHCwflbt2518zMq4KRrU5K2yhs5cqQ9+OCDGfK5AADkFPzfEAAg1/nuu+/cA6mCSQqgVKpUKez98ePH2zPPPOPbg2hCQoIVL17ccopVq1a5YFPLli1t8eLFVqJEieB7gwcPtjVr1timTZtSXP6PP/6wU6dOhT3Y+yUj1pnZihQpkumf6XmeHT9+3IoWLWq5nbrMaQq1b98+t+9Jr5/QoFRmUsCRoCMAIK+jSx0AINd58sknXRBIXWuSBptED4L33HOP60oWSq2fbrrpJte1TEGDZs2a2bvvvhsxf8wnn3xi//jHP6x8+fJ23nnnBVs51K9f33XXa9OmjevCV7NmTXvzzTfd+1qmRYsW7sG4du3a9tFHH4Wte+fOnW6dek9lypYta927d0+WqyawDf/5z39syJAhdu6557qA1w033GD79+8/7fFRqwwt/9prr4UFmwK034G8N/pslf3nP/9pkydPtgsvvNA9xP/3v/9N8zGTr7/+2q666iq3Xzpejz76qAtaJRWaw0ldlS699FL3d9++fd12aNL+Z5Xvv//eOnbs6I535cqV7ZFHHnHBntRyOAXy+Wzbts0d11KlSll0dLTbJ7WSCaVrVsdJ15WOs7qAqjVeUmrxdd1119mSJUvcMddxfe6559x1p9Z8kei60rafzgcffODWo2ujZMmS7hzMmTMn1WV0fbRq1cpds9qWpk2bBq/7UEuXLrXWrVu7Y6CcWNqmpC3pnn76abv44ovd96d06dJu/0I/P2kOJ/2t46bvfNJrJFIOp4MHD9q9997r3tMx1vXYu3dvO3DggHv/xIkTNmrUKLcPOk8611dccYUtX748uA59tr53od+n0PMeKYeTArVjx44Nfof0+dr3xMTEiOf23//+tzVv3tx9r5Sbavbs2ameAwAAshtaOAEAcmV3OgV6FNxJKwVElP+lSpUqriuMHjLfeOMN69atm7311lsumBNKgSE9cOrBVA+6Ab/++qt7WFQLKwWLFCzQ3wruqPWQWhbdcsstLsGxAjW7d+8OBn2++OILW7FihSuvh2A91Gp5BWAU4NEDeKiBAwe6B/KYmBhXVgEh5ayaN29eivupAIdafV155ZV2/vnnp/n46IFeLWj+9re/BfM9pfWYxcfHW7t27dwDd6DcjBkzTtsap27dui6go2Osz9VDvyiwkRWU16pTp0522WWXuaBmbGysO/baL23n6dx8881Wo0YNGzdunK1bt851a1RgSS3uAnS+FWy5/vrrXWD0vffec9eagnPKPRZK3cV69eplf//7361///4ueKMgjv5WCzUFPwN0bX3zzTeuq1dqFKi5/fbb3TYMHz7cBYbWr1/v9lXXbUqmTJnitlndVxWwmTt3rrv+9V3s3LmzK6PrRd+Nhg0buuOl60hBOAVOA55//nkXDNZ3Y9CgQe6aUwD3888/T/HzX3nlFXc9rV692h3T1K6RI0eOuOto8+bNbj+bNGniAk0Kkv7www9Wrlw5O3z4sFuP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hLrPKYeSEq0rKfxjjz2W1ZsEAADyKAJOAAAAAAAA8FV+f1cHAAAAAACAvI6AEwAAAAAAAHxFwAkAAAAAAAC+IuAEAAAAAAAAXxFwAgAAAAAAgK8IOAEAAAAAAMBXBJwAAAAAAADgKwJOAAAAAAAA8BUBJwAAAAAAAPiKgBMAAAAAAAB8RcAJAAAAAAAAviLgBAAAAAAAAF8RcAIAAAAAAICvCDgBAAAAAADAVwScAAAAAAAA4CsCTgAAAAAAAPAVAScAAAAAAAD4ioATAAAAAAAAfEXACQAAAAAAAL4i4AQAAAAAAABfEXACAAAAAACArwg4AQAAAAAAwFcEnJDnffHFF9aqVSsrXry45cuXz7p16+b+BQAAAIDsatasWe65ZceOHVm9KUBEBJyQp/3+++/WvXt3++WXX2zSpEn2yiuvWLVq1ZKVe/zxx23hwoVZso0AgLO3YsUKGz16tB08eDDDDid1BQAAwP8QcEKe9t1339nOnTvt/vvvt7/97W/217/+1SZMmGDHjh0LK8dDBADk/IDTmDFjCDgBAABkEgJOyNP27dvn/i1VqlRwXsGCBa1IkSJZuFUAAAAAcPY8z0v2YzqQWQg4Ic+67bbbrE2bNu5vdatT/+e2bdu6LhehOZz0d0JCgr388svub01aNq3mzp1rTZs2tRIlSljJkiWtQYMGNmXKlAzZJwBAcrqvDx061P1do0aN4L08kPPi1VdfdffpokWLWpkyZaxnz562e/fusHV8++23duONN1rFihXdjxLnnXeeK3fo0CFf6op//vOfLp9g2bJl3XZoe958882wMtperVc5O5LSfO1nqB9//NH69etnlStXtqioKLfvd911l504cYLLBAAiUM+Hf/zjH1a7dm13L9Y9Wc8JSXMkJX1eOF1OpQ8++MA9dwSeBy699FKbM2dOus7B119/bVdddZXbLtVBjz76qJ06dSpZuerVq9t1111nS5YssWbNmrnyzz33nHvv+++/d/ujuq5YsWJ22WWX2fvvvx+2fFxcnNuHefPm2YgRI1y9p1y3119/fbK6ETidgqctAeRSf//7361KlSquu9w999zjbvwVKlSw//znP2HllNfpjjvusObNm7tud3LhhRem6TOWLl1qvXr1squvvtrGjx/v5m3evNl9xqBBgzJgrwAASf35z3+2b775xl5//XWXr69cuXJu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P/20NW/ePMXyBw8etIceesjVOb/88otVq1bNJk+eTN0BAMgVcnNri+za0gJANm/h9Mknn9jdd99tq1atsqVLl9rvv/9uHTp0sISEhBSXWbFihfXq1cv69etn69evt27durlp06ZNfmw/ACCbmzdvng0ZMsRiYmJs3bp1LuDUsWNH27dvX8TyJ06csD/96U/uR4o333zTtm7das8//7xVqVIl07cdAAAAQCa0cIqNjQ17PWvWLCtfvrytXbvWrrzyyojLTJkyxTp16mRDhw51r8eOHeuCVVOnTrXp06ef4WYDAHKKiRMnWv/+/a1v377ute7977//vs2cOdMefPDBZOU1X62a9INFoUKF3Lzq1atn+nYDAAAAyKIcTocOHXL/lilTJsUyK1eutPbt24fN0y/bmg8AyN3UWkk/SoTWA/nz53evU6oH3n33XWvZsqVrUVuhQgWrX7++Pf7443by5MkUPycxMdEOHz4cNgEAAADIgQGnU6dO2eDBg+3yyy93DwMpUb4OPTCE0mvNTwkPDgCQOxw4cMAFitJTD3z//feuK52WW7x4scsBOGHCBHv00UdTzTEYHR0dnKpWrer7vgAAAADIhICTfnlWHqa5c+ea33hwAIC8Sz9oqLv2jBkzrGnTptajRw+XQDy1btjDhw93rW4D0+7duzN1mwEAAAD4EHAaMGCALVq0yJYvX27nnXdeqmUrVqxoe/fuDZun15qfEh4cACB3KFeunBUoUCBd9UClSpXsoosucssF1K1b17WIUhe9SKKioqxkyZJhEwAAAIAcEnDyPM8Fm95++237+OOPrUaNGqddRnk4li1bFjZPScM1PyU8OABA7lC4cGHXSim0HlALJr1OqR5QV+1t27a5cgHffPONC0RpfQAAAAByWcBJ3eheffVVmzNnjpUoUcL92qzp2LFjwTK9e/d2LZQCBg0a5Ea3U/6NLVu22OjRo23NmjUucAUAyP2GDBlizz//vL388su2efNmu+uuuywhISE4al3SekPva5Q61R8KNGlEOyUNVx0EAAAAIGcomJ7Czz77rPu3bdu2YfNfeuklu+2229zfu3btciMQBbRq1coFqEaOHGkjRoywWrVq2cKFC1NNNA4AyD2Ug2n//v02atQo9yNF48aN3Q8RgUTiSesNJfxesmSJ3XvvvdawYUOrUqWKCz4NGzYsC/cCAAAA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fvvtsHm//fabd+DAgSzbJpwZ6o28i3oj7ag3zh71Ru5BvZF3UW+kHfVG7q838mQLpxdffNEGDhxon376qf3000+Z8pknTpywjh072hNPPOGGbF2xYoWtXr3a7r77bnv66aft66+/PuN1//7775ZR24z/qVixohvi0k/R0dFWqlSpHHGYX3jhBfvLX/5izz77rN13331uXqdOnWzPnj1uWrZsmRUsWNCuu+664DIFChRwx03z/bR161b33f3iiy9s2LBh9tFHH7nhkb/66qtMObZn850755xzrGzZspZR+N5mDOoNrr8zQb1BvRFAvZH3UG+kDf/fEo56g3oj19UbXh6jaN8555zjbdmyxevRo4f32GOPpRqNVrQwcJj0fmiLDk2aJzt37vSuv/56r3jx4l6JEiW87t27e/Hx8cH1qGWTWlWtW7cu2TapddORI0fc3x988IF3+eWXu+1Qi5HOnTt727ZtC5bdvn27+9y5c+d6V155pWttMmXKFK9IkSLe4sWLw9a7YMECt68JCQnu9a5du9x2ad2lS5d226v1JY0wP/roo16lSpW86tWre9mNWhgNHDjQO/fcc92+61itXr06rPXLokWLvAYNGrj3W7Ro4X311Vdh74dOarEWaOH0yCOPeD179vSKFSvmVa5c2Zs6dWqK0ePAeXjrrbe8tm3buhZrarmmX7OSXk+xsbFenTp13LWhFkChLXGSRvXbtGnj9k8tdnSOKlSoENzGgM2bN7v91v7VrVvXW7p0acTI9tkK3TZdv7rGdE2ltO3y2WefuW3Zt29f2HFav3592Dn46KOPvKZNm7rj1rJlS/d9DNiwYYM7prp29V1q0qSJ98UXX4Qtn7Tl0tGjR73atWu745LS9ql1Vv369d1+6Lt19dVXB7938uKLL3r16tXzChcu7FWsWNG7++67g+/pM5955hmvS5cu7voInJOFCxd6l1xyiTsXNWrU8EaPHh1szaVrKvRa0+tIrSSTXpOhZUXXb6dOndz1U758ee+vf/2rt3///rBrRts6aNAg12pSxw7+ot6g3qDeSBvqDeoNUG/wvMHzRnpQb9yd65838lzASQ+VzZo1c3+/99573oUXXuidOnUqTQEnPdTed9993sUXX+y6CWnSvJMnT7puPa1bt/bWrFnjrVq1yj1M68QEKBjRoUOH027fm2++6YIY3377rXtI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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": "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",
"numericals=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'numericals={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', 'Latitude', 'Longitude'])\n",
"------\n",
"\n",
"---------\n",
"------ [ContinuousCarver] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
"--- [ContinuousCarver] Fit Numerical('MedInc') (1/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.335e+00] \n",
" 1.1984 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.335e+00, 1.593e+00] \n",
" 1.0105 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.593e+00, 1.740e+00] \n",
" 1.1133 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.740e+00, 1.906e+00] \n",
" 1.1535 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (1.906e+00, 2.029e+00] \n",
" 1.2090 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" (2.029e+00, 2.152e+00] \n",
" 1.2141 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (2.152e+00, 2.243e+00] \n",
" 1.2417 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.243e+00, 2.350e+00] \n",
" 1.3827 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (2.350e+00, 2.468e+00] \n",
" 1.3614 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.468e+00, 2.569e+00] \n",
" 1.4190 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.569e+00, 2.655e+00] \n",
" 1.5264 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.655e+00, 2.737e+00] \n",
" 1.5428 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.737e+00, 2.862e+00] \n",
" 1.5708 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.862e+00, 2.974e+00] \n",
" 1.6630 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.974e+00, 3.054e+00] \n",
" 1.6270 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.054e+00, 3.135e+00] \n",
" 1.7079 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.135e+00, 3.216e+00] \n",
" 1.8554 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.216e+00, 3.315e+00] \n",
" 1.8373 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.315e+00, 3.423e+00] \n",
" 1.9121 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.423e+00, 3.531e+00] \n",
" 1.9162 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (3.531e+00, 3.633e+00] \n",
" 1.9678 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.633e+00, 3.723e+00] \n",
" 2.0226 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.723e+00, 3.839e+00] \n",
" 1.9891 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (3.839e+00, 3.971e+00] \n",
" 2.0493 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (3.971e+00, 4.073e+00] \n",
" 2.0538 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (4.073e+00, 4.179e+00] \n",
" 2.2004 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (4.179e+00, 4.315e+00] \n",
" 2.2417 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.315e+00, 4.464e+00] \n",
" 2.2394 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.464e+00, 4.611e+00] \n",
" 2.2577 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (4.611e+00, 4.757e+00] \n",
" 2.4351 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" (4.757e+00, 4.946e+00] \n",
" 2.3482 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.946e+00, 5.117e+00] \n",
" 2.4592 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.117e+00, 5.308e+00] \n",
" 2.5784 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.308e+00, 5.538e+00] \n",
" 2.6892 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.538e+00, 5.828e+00] \n",
" 2.7867 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (5.828e+00, 6.148e+00] \n",
" 3.0943 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (6.148e+00, 6.599e+00] \n",
" 3.3031 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.599e+00, 7.313e+00] \n",
" 3.6064 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (7.313e+00, 8.433e+00] \n",
" 4.0191 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (8.433e+00, inf) \n",
" 4.7343 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.2507 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 1.0319 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 1.1587 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 1.0855 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 1.2523 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 1.2606 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 1.2643 \n",
" 0.0208 \n",
" 86 \n",
" \n",
" \n",
" 1.3335 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.4528 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 1.4887 \n",
" 0.0305 \n",
" 126 \n",
" \n",
" \n",
" 1.5142 \n",
" 0.0237 \n",
" 98 \n",
" \n",
" \n",
" 1.6485 \n",
" 0.0208 \n",
" 86 \n",
" \n",
" \n",
" 1.5544 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 1.6189 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 1.7433 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 1.6369 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 1.7802 \n",
" 0.0276 \n",
" 114 \n",
" \n",
" \n",
" 1.9721 \n",
" 0.0283 \n",
" 117 \n",
" \n",
" \n",
" 1.8287 \n",
" 0.0279 \n",
" 115 \n",
" \n",
" \n",
" 1.8295 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 1.9907 \n",
" 0.0300 \n",
" 124 \n",
" \n",
" \n",
" 1.9517 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 2.0220 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 2.1509 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 2.0977 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 2.2054 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 2.2979 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 2.3553 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 2.2924 \n",
" 0.0184 \n",
" 76 \n",
" \n",
" \n",
" 2.4401 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 2.2931 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.4940 \n",
" 0.0237 \n",
" 98 \n",
" \n",
" \n",
" 2.6133 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.7177 \n",
" 0.0189 \n",
" 78 \n",
" \n",
" \n",
" 2.9110 \n",
" 0.0276 \n",
" 114 \n",
" \n",
" \n",
" 3.0729 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 3.0759 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 3.5985 \n",
" 0.0228 \n",
" 94 \n",
" \n",
" \n",
" 4.0385 \n",
" 0.0206 \n",
" 85 \n",
" \n",
" \n",
" 4.6131 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.47e+00] \n",
" 1.2093 \n",
" 0.2250 \n",
" 2787 \n",
" \n",
" \n",
" (2.47e+00, 3.13e+00] \n",
" 1.5796 \n",
" 0.1750 \n",
" 2167 \n",
" \n",
" \n",
" (3.13e+00, 4.07e+00] \n",
" 1.9560 \n",
" 0.2251 \n",
" 2788 \n",
" \n",
" \n",
" (4.07e+00, 5.83e+00] \n",
" 2.4238 \n",
" 0.2499 \n",
" 3095 \n",
" \n",
" \n",
" (5.83e+00, inf) \n",
" 3.7524 \n",
" 0.1249 \n",
" 1547 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.2323 \n",
" 0.2275 \n",
" 939 \n",
" \n",
" \n",
" 1.5934 \n",
" 0.1747 \n",
" 721 \n",
" \n",
" \n",
" 1.9604 \n",
" 0.2425 \n",
" 1001 \n",
" \n",
" \n",
" 2.4652 \n",
" 0.2372 \n",
" 979 \n",
" \n",
" \n",
" 3.6870 \n",
" 0.1182 \n",
" 488 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('HouseAge') (2/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 5.00e+00] \n",
" 2.2358 \n",
" 0.0271 \n",
" 336 \n",
" \n",
" \n",
" (5.00e+00, 8.00e+00] \n",
" 1.9727 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" (8.00e+00, 1.10e+01] \n",
" 1.8133 \n",
" 0.0352 \n",
" 436 \n",
" \n",
" \n",
" (1.10e+01, 1.40e+01] \n",
" 1.8538 \n",
" 0.0468 \n",
" 579 \n",
" \n",
" \n",
" (1.40e+01, 1.60e+01] \n",
" 1.9355 \n",
" 0.0652 \n",
" 807 \n",
" \n",
" \n",
" (1.60e+01, 1.70e+01] \n",
" 1.8929 \n",
" 0.0319 \n",
" 395 \n",
" \n",
" \n",
" (1.70e+01, 1.80e+01] \n",
" 1.9455 \n",
" 0.0276 \n",
" 342 \n",
" \n",
" \n",
" (1.80e+01, 2.00e+01] \n",
" 1.9470 \n",
" 0.0470 \n",
" 582 \n",
" \n",
" \n",
" (2.00e+01, 2.30e+01] \n",
" 1.9934 \n",
" 0.0632 \n",
" 783 \n",
" \n",
" \n",
" (2.30e+01, 2.50e+01] \n",
" 2.1713 \n",
" 0.0480 \n",
" 595 \n",
" \n",
" \n",
" (2.50e+01, 2.60e+01] \n",
" 2.0937 \n",
" 0.0304 \n",
" 377 \n",
" \n",
" \n",
" (2.60e+01, 2.70e+01] \n",
" 2.0568 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" (2.70e+01, 2.80e+01] \n",
" 1.9827 \n",
" 0.0241 \n",
" 299 \n",
" \n",
" \n",
" (2.80e+01, 2.90e+01] \n",
" 2.0203 \n",
" 0.0232 \n",
" 287 \n",
" \n",
" \n",
" (2.90e+01, 3.00e+01] \n",
" 2.0515 \n",
" 0.0236 \n",
" 292 \n",
" \n",
" \n",
" (3.00e+01, 3.20e+01] \n",
" 2.0453 \n",
" 0.0484 \n",
" 599 \n",
" \n",
" \n",
" (3.20e+01, 3.30e+01] \n",
" 2.0343 \n",
" 0.0316 \n",
" 391 \n",
" \n",
" \n",
" (3.30e+01, 3.40e+01] \n",
" 2.1357 \n",
" 0.0320 \n",
" 396 \n",
" \n",
" \n",
" (3.40e+01, 3.50e+01] \n",
" 2.0004 \n",
" 0.0399 \n",
" 494 \n",
" \n",
" \n",
" (3.50e+01, 3.60e+01] \n",
" 2.1148 \n",
" 0.0437 \n",
" 541 \n",
" \n",
" \n",
" (3.60e+01, 3.70e+01] \n",
" 2.0004 \n",
" 0.0257 \n",
" 318 \n",
" \n",
" \n",
" (3.70e+01, 3.90e+01] \n",
" 2.0133 \n",
" 0.0355 \n",
" 440 \n",
" \n",
" \n",
" (3.90e+01, 4.20e+01] \n",
" 2.0148 \n",
" 0.0440 \n",
" 545 \n",
" \n",
" \n",
" (4.20e+01, 4.40e+01] \n",
" 2.0742 \n",
" 0.0351 \n",
" 435 \n",
" \n",
" \n",
" (4.40e+01, 4.70e+01] \n",
" 2.0852 \n",
" 0.0343 \n",
" 425 \n",
" \n",
" \n",
" (4.70e+01, inf) \n",
" 2.5848 \n",
" 0.0857 \n",
" 1061 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.0720 \n",
" 0.0245 \n",
" 101 \n",
" \n",
" \n",
" 1.9201 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 1.9054 \n",
" 0.0344 \n",
" 142 \n",
" \n",
" \n",
" 1.8581 \n",
" 0.0412 \n",
" 170 \n",
" \n",
" \n",
" 1.8826 \n",
" 0.0606 \n",
" 250 \n",
" \n",
" \n",
" 1.8592 \n",
" 0.0375 \n",
" 155 \n",
" \n",
" \n",
" 1.8799 \n",
" 0.0283 \n",
" 117 \n",
" \n",
" \n",
" 1.8746 \n",
" 0.0436 \n",
" 180 \n",
" \n",
" \n",
" 2.1128 \n",
" 0.0577 \n",
" 238 \n",
" \n",
" \n",
" 2.0847 \n",
" 0.0579 \n",
" 239 \n",
" \n",
" \n",
" 2.0778 \n",
" 0.0296 \n",
" 122 \n",
" \n",
" \n",
" 2.1784 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 2.2242 \n",
" 0.0208 \n",
" 86 \n",
" \n",
" \n",
" 1.7802 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 1.7629 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 2.0493 \n",
" 0.0504 \n",
" 208 \n",
" \n",
" \n",
" 1.9343 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.0837 \n",
" 0.0349 \n",
" 144 \n",
" \n",
" \n",
" 2.1957 \n",
" 0.0417 \n",
" 172 \n",
" \n",
" \n",
" 2.0157 \n",
" 0.0431 \n",
" 178 \n",
" \n",
" \n",
" 2.2006 \n",
" 0.0296 \n",
" 122 \n",
" \n",
" \n",
" 2.0026 \n",
" 0.0351 \n",
" 145 \n",
" \n",
" \n",
" 1.9358 \n",
" 0.0499 \n",
" 206 \n",
" \n",
" \n",
" 2.0117 \n",
" 0.0312 \n",
" 129 \n",
" \n",
" \n",
" 2.0839 \n",
" 0.0380 \n",
" 157 \n",
" \n",
" \n",
" 2.5968 \n",
" 0.0911 \n",
" 376 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.30e+01] \n",
" 1.9466 \n",
" 0.3703 \n",
" 4586 \n",
" \n",
" \n",
" (2.30e+01, 2.60e+01] \n",
" 2.1412 \n",
" 0.0785 \n",
" 972 \n",
" \n",
" \n",
" (2.60e+01, 3.60e+01] \n",
" 2.0526 \n",
" 0.2909 \n",
" 3602 \n",
" \n",
" \n",
" (3.60e+01, 4.70e+01] \n",
" 2.0381 \n",
" 0.1747 \n",
" 2163 \n",
" \n",
" \n",
" (4.70e+01, inf) \n",
" 2.5848 \n",
" 0.0857 \n",
" 1061 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.9316 \n",
" 0.3547 \n",
" 1464 \n",
" \n",
" \n",
" 2.0824 \n",
" 0.0875 \n",
" 361 \n",
" \n",
" \n",
" 2.0383 \n",
" 0.2829 \n",
" 1168 \n",
" \n",
" \n",
" 2.0347 \n",
" 0.1839 \n",
" 759 \n",
" \n",
" \n",
" 2.5968 \n",
" 0.0911 \n",
" 376 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('AveRooms') (3/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.066e+00] \n",
" 1.9506 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.066e+00, 3.432e+00] \n",
" 1.8880 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.432e+00, 3.647e+00] \n",
" 1.8233 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.647e+00, 3.792e+00] \n",
" 1.8292 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.792e+00, 3.933e+00] \n",
" 1.7847 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.933e+00, 4.052e+00] \n",
" 1.8499 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.052e+00, 4.168e+00] \n",
" 1.8718 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.168e+00, 4.276e+00] \n",
" 1.8333 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.276e+00, 4.365e+00] \n",
" 1.7965 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.365e+00, 4.454e+00] \n",
" 1.6952 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.454e+00, 4.536e+00] \n",
" 1.7535 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.536e+00, 4.621e+00] \n",
" 1.7952 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.621e+00, 4.705e+00] \n",
" 1.8465 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.705e+00, 4.794e+00] \n",
" 1.7486 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.794e+00, 4.874e+00] \n",
" 1.7719 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.874e+00, 4.941e+00] \n",
" 1.7219 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (4.941e+00, 5.014e+00] \n",
" 1.7176 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (5.014e+00, 5.088e+00] \n",
" 1.7707 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.088e+00, 5.160e+00] \n",
" 1.7918 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.160e+00, 5.233e+00] \n",
" 1.7791 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.233e+00, 5.315e+00] \n",
" 1.8209 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.315e+00, 5.384e+00] \n",
" 1.9107 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.384e+00, 5.460e+00] \n",
" 1.7728 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.460e+00, 5.532e+00] \n",
" 1.8996 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.532e+00, 5.616e+00] \n",
" 1.8872 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.616e+00, 5.694e+00] \n",
" 1.9905 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.694e+00, 5.778e+00] \n",
" 2.0029 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.778e+00, 5.858e+00] \n",
" 2.0107 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.858e+00, 5.959e+00] \n",
" 2.1137 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (5.959e+00, 6.059e+00] \n",
" 2.0469 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.059e+00, 6.157e+00] \n",
" 2.1450 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (6.157e+00, 6.270e+00] \n",
" 2.2477 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.270e+00, 6.396e+00] \n",
" 2.3495 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (6.396e+00, 6.543e+00] \n",
" 2.4232 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.543e+00, 6.717e+00] \n",
" 2.6241 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.717e+00, 6.946e+00] \n",
" 2.7573 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (6.946e+00, 7.233e+00] \n",
" 3.0763 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (7.233e+00, 7.637e+00] \n",
" 3.1118 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (7.637e+00, 8.324e+00] \n",
" 3.5846 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (8.324e+00, inf) \n",
" 2.7391 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.0908 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 1.8579 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 2.0031 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 1.8060 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.8137 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 1.7725 \n",
" 0.0211 \n",
" 87 \n",
" \n",
" \n",
" 1.7723 \n",
" 0.0283 \n",
" 117 \n",
" \n",
" \n",
" 1.7839 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 1.7902 \n",
" 0.0286 \n",
" 118 \n",
" \n",
" \n",
" 1.8121 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 1.6265 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 1.8349 \n",
" 0.0276 \n",
" 114 \n",
" \n",
" \n",
" 1.8339 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 1.7725 \n",
" 0.0342 \n",
" 141 \n",
" \n",
" \n",
" 1.8188 \n",
" 0.0254 \n",
" 105 \n",
" \n",
" \n",
" 1.8480 \n",
" 0.0191 \n",
" 79 \n",
" \n",
" \n",
" 1.8333 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 1.8191 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 1.7419 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 1.7642 \n",
" 0.0220 \n",
" 91 \n",
" \n",
" \n",
" 1.7645 \n",
" 0.0303 \n",
" 125 \n",
" \n",
" \n",
" 1.7917 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 1.8651 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 1.8645 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.8082 \n",
" 0.0286 \n",
" 118 \n",
" \n",
" \n",
" 1.8483 \n",
" 0.0177 \n",
" 73 \n",
" \n",
" \n",
" 2.0778 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.0005 \n",
" 0.0187 \n",
" 77 \n",
" \n",
" \n",
" 1.9724 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 2.2623 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 2.0818 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 2.2889 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.3280 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 2.5373 \n",
" 0.0254 \n",
" 105 \n",
" \n",
" \n",
" 2.6787 \n",
" 0.0201 \n",
" 83 \n",
" \n",
" \n",
" 2.7457 \n",
" 0.0211 \n",
" 87 \n",
" \n",
" \n",
" 3.0108 \n",
" 0.0303 \n",
" 125 \n",
" \n",
" \n",
" 3.1596 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 3.4340 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 2.7568 \n",
" 0.0245 \n",
" 101 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.43e+00] \n",
" 1.9193 \n",
" 0.0501 \n",
" 620 \n",
" \n",
" \n",
" (3.43e+00, 5.62e+00] \n",
" 1.8031 \n",
" 0.5749 \n",
" 7120 \n",
" \n",
" \n",
" (5.62e+00, 6.16e+00] \n",
" 2.0516 \n",
" 0.1500 \n",
" 1857 \n",
" \n",
" \n",
" (6.16e+00, 6.54e+00] \n",
" 2.3401 \n",
" 0.0750 \n",
" 929 \n",
" \n",
" \n",
" (6.54e+00, inf) \n",
" 2.9823 \n",
" 0.1500 \n",
" 1858 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.9670 \n",
" 0.0497 \n",
" 205 \n",
" \n",
" \n",
" 1.8045 \n",
" 0.6000 \n",
" 2477 \n",
" \n",
" \n",
" 2.0474 \n",
" 0.1359 \n",
" 561 \n",
" \n",
" \n",
" 2.3886 \n",
" 0.0717 \n",
" 296 \n",
" \n",
" \n",
" 2.9752 \n",
" 0.1427 \n",
" 589 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('AveBedrms') (4/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 9.1220e-01] \n",
" 2.0511 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (9.1220e-01, 9.4022e-01] \n",
" 2.1264 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (9.4022e-01, 9.5595e-01] \n",
" 2.0638 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (9.5595e-01, 9.6743e-01] \n",
" 2.0756 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (9.6743e-01, 9.7590e-01] \n",
" 2.2562 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (9.7590e-01, 9.8343e-01] \n",
" 2.1709 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (9.8343e-01, 9.8987e-01] \n",
" 2.1450 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (9.8987e-01, 9.9592e-01] \n",
" 2.1772 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (9.9592e-01, 1.0019e+00] \n",
" 2.1915 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (1.0019e+00, 1.0068e+00] \n",
" 2.0949 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.0068e+00, 1.0112e+00] \n",
" 2.2440 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0112e+00, 1.0156e+00] \n",
" 2.1687 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0156e+00, 1.0204e+00] \n",
" 2.1723 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.0204e+00, 1.0250e+00] \n",
" 2.2003 \n",
" 0.0254 \n",
" 314 \n",
" \n",
" \n",
" (1.0250e+00, 1.0290e+00] \n",
" 2.1324 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" (1.0290e+00, 1.0331e+00] \n",
" 2.1840 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0331e+00, 1.0369e+00] \n",
" 2.0321 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.0369e+00, 1.0412e+00] \n",
" 2.1746 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0412e+00, 1.0453e+00] \n",
" 2.2536 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.0453e+00, 1.0493e+00] \n",
" 2.1546 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0493e+00, 1.0534e+00] \n",
" 2.0738 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (1.0534e+00, 1.0574e+00] \n",
" 2.1224 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.0574e+00, 1.0615e+00] \n",
" 2.0414 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0615e+00, 1.0662e+00] \n",
" 2.1569 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (1.0662e+00, 1.0712e+00] \n",
" 2.0972 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.0712e+00, 1.0763e+00] \n",
" 2.0714 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.0763e+00, 1.0816e+00] \n",
" 2.0244 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.0816e+00, 1.0874e+00] \n",
" 2.0135 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (1.0874e+00, 1.0933e+00] \n",
" 2.2239 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.0933e+00, 1.1000e+00] \n",
" 2.0244 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" (1.1000e+00, 1.1071e+00] \n",
" 2.0077 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" (1.1071e+00, 1.1160e+00] \n",
" 1.9564 \n",
" 0.0245 \n",
" 304 \n",
" \n",
" \n",
" (1.1160e+00, 1.1267e+00] \n",
" 2.0077 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.1267e+00, 1.1387e+00] \n",
" 1.9305 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.1387e+00, 1.1538e+00] \n",
" 1.8130 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" (1.1538e+00, 1.1739e+00] \n",
" 1.8060 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" (1.1739e+00, 1.2074e+00] \n",
" 1.9109 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.2074e+00, 1.2730e+00] \n",
" 1.8950 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.2730e+00, 1.5018e+00] \n",
" 1.7962 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.5018e+00, inf) \n",
" 1.4931 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.7961 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 2.0098 \n",
" 0.0298 \n",
" 123 \n",
" \n",
" \n",
" 2.3039 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 2.2390 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.3293 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 1.9318 \n",
" 0.0194 \n",
" 80 \n",
" \n",
" \n",
" 2.1575 \n",
" 0.0199 \n",
" 82 \n",
" \n",
" \n",
" 2.1740 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 2.2207 \n",
" 0.0337 \n",
" 139 \n",
" \n",
" \n",
" 2.1811 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 2.0475 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.2743 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 2.2627 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 2.1068 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 2.4459 \n",
" 0.0228 \n",
" 94 \n",
" \n",
" \n",
" 2.1280 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 2.1193 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.2280 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.0336 \n",
" 0.0237 \n",
" 98 \n",
" \n",
" \n",
" 2.0195 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 1.9898 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 2.2270 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 1.9244 \n",
" 0.0254 \n",
" 105 \n",
" \n",
" \n",
" 2.1509 \n",
" 0.0237 \n",
" 98 \n",
" \n",
" \n",
" 2.2223 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.9654 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 2.1085 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 2.0332 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 1.9262 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 2.1139 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.9025 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 1.8628 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 1.9501 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.0231 \n",
" 0.0206 \n",
" 85 \n",
" \n",
" \n",
" 1.8622 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 1.8137 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.0399 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 1.6392 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 1.7221 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 1.6019 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.049e+00] \n",
" 2.1535 \n",
" 0.5000 \n",
" 6192 \n",
" \n",
" \n",
" (1.049e+00, 1.093e+00] \n",
" 2.0915 \n",
" 0.2250 \n",
" 2787 \n",
" \n",
" \n",
" (1.093e+00, 1.139e+00] \n",
" 1.9857 \n",
" 0.1249 \n",
" 1547 \n",
" \n",
" \n",
" (1.139e+00, 1.273e+00] \n",
" 1.8563 \n",
" 0.1000 \n",
" 1238 \n",
" \n",
" \n",
" (1.273e+00, inf) \n",
" 1.6446 \n",
" 0.0501 \n",
" 620 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.1526 \n",
" 0.5029 \n",
" 2076 \n",
" \n",
" \n",
" 2.0582 \n",
" 0.2248 \n",
" 928 \n",
" \n",
" \n",
" 1.9707 \n",
" 0.1235 \n",
" 510 \n",
" \n",
" \n",
" 1.8475 \n",
" 0.0998 \n",
" 412 \n",
" \n",
" \n",
" 1.6632 \n",
" 0.0489 \n",
" 202 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('Population') (5/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.08e+02] \n",
" 1.9050 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (2.08e+02, 3.53e+02] \n",
" 2.0277 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (3.53e+02, 4.42e+02] \n",
" 2.0655 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.42e+02, 5.12e+02] \n",
" 2.2067 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (5.12e+02, 5.75e+02] \n",
" 2.1327 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (5.75e+02, 6.27e+02] \n",
" 2.0731 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (6.27e+02, 6.75e+02] \n",
" 2.3627 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (6.75e+02, 7.16e+02] \n",
" 2.2006 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (7.16e+02, 7.56e+02] \n",
" 2.0900 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (7.56e+02, 7.94e+02] \n",
" 2.0191 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (7.94e+02, 8.32e+02] \n",
" 2.3248 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (8.32e+02, 8.67e+02] \n",
" 2.0763 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (8.67e+02, 9.02e+02] \n",
" 2.0313 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" (9.02e+02, 9.40e+02] \n",
" 2.1185 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" (9.40e+02, 9.78e+02] \n",
" 2.1790 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (9.78e+02, 1.02e+03] \n",
" 2.0746 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.02e+03, 1.06e+03] \n",
" 1.9522 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" (1.06e+03, 1.09e+03] \n",
" 2.1186 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.09e+03, 1.13e+03] \n",
" 2.0592 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (1.13e+03, 1.17e+03] \n",
" 2.0640 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (1.17e+03, 1.22e+03] \n",
" 2.0134 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.22e+03, 1.26e+03] \n",
" 2.1690 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.26e+03, 1.30e+03] \n",
" 2.0558 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" (1.30e+03, 1.35e+03] \n",
" 1.9711 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (1.35e+03, 1.41e+03] \n",
" 2.0185 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.41e+03, 1.46e+03] \n",
" 2.0004 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (1.46e+03, 1.52e+03] \n",
" 2.0911 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" (1.52e+03, 1.59e+03] \n",
" 2.1322 \n",
" 0.0254 \n",
" 315 \n",
" \n",
" \n",
" (1.59e+03, 1.66e+03] \n",
" 1.9949 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" (1.66e+03, 1.73e+03] \n",
" 2.0233 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.73e+03, 1.82e+03] \n",
" 1.8946 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (1.82e+03, 1.91e+03] \n",
" 1.9504 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" (1.91e+03, 2.02e+03] \n",
" 2.0074 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.02e+03, 2.16e+03] \n",
" 2.0213 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.16e+03, 2.32e+03] \n",
" 2.0541 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.32e+03, 2.56e+03] \n",
" 2.0757 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.56e+03, 2.86e+03] \n",
" 2.0142 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.86e+03, 3.28e+03] \n",
" 1.9196 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.28e+03, 4.25e+03] \n",
" 2.0439 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.25e+03, inf) \n",
" 2.0010 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.9895 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 1.8189 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 2.1479 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 2.2434 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 2.1281 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 2.2908 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 2.0926 \n",
" 0.0283 \n",
" 117 \n",
" \n",
" \n",
" 2.1757 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 2.2182 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.1433 \n",
" 0.0286 \n",
" 118 \n",
" \n",
" \n",
" 2.0769 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 2.1889 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.0488 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 2.1585 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 2.0699 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.0396 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 1.9843 \n",
" 0.0254 \n",
" 105 \n",
" \n",
" \n",
" 2.1062 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 1.9823 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 2.1353 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 2.1132 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 1.9696 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 2.1243 \n",
" 0.0196 \n",
" 81 \n",
" \n",
" \n",
" 1.9774 \n",
" 0.0245 \n",
" 101 \n",
" \n",
" \n",
" 1.8002 \n",
" 0.0245 \n",
" 101 \n",
" \n",
" \n",
" 2.1500 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 1.9471 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 1.9535 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.0915 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 2.0390 \n",
" 0.0228 \n",
" 94 \n",
" \n",
" \n",
" 2.1380 \n",
" 0.0211 \n",
" 87 \n",
" \n",
" \n",
" 1.9706 \n",
" 0.0203 \n",
" 84 \n",
" \n",
" \n",
" 1.8717 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 1.9082 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 2.0895 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 1.8131 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 2.0019 \n",
" 0.0269 \n",
" 111 \n",
" \n",
" \n",
" 2.0234 \n",
" 0.0201 \n",
" 83 \n",
" \n",
" \n",
" 2.1558 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.0339 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.53e+02] \n",
" 1.9663 \n",
" 0.0502 \n",
" 622 \n",
" \n",
" \n",
" (3.53e+02, 8.32e+02] \n",
" 2.1636 \n",
" 0.2253 \n",
" 2790 \n",
" \n",
" \n",
" (8.32e+02, 1.73e+03] \n",
" 2.0604 \n",
" 0.4745 \n",
" 5876 \n",
" \n",
" \n",
" (1.73e+03, 2.16e+03] \n",
" 1.9683 \n",
" 0.1000 \n",
" 1239 \n",
" \n",
" \n",
" (2.16e+03, inf) \n",
" 2.0181 \n",
" 0.1500 \n",
" 1857 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.9038 \n",
" 0.0540 \n",
" 223 \n",
" \n",
" \n",
" 2.1659 \n",
" 0.2398 \n",
" 990 \n",
" \n",
" \n",
" 2.0445 \n",
" 0.4680 \n",
" 1932 \n",
" \n",
" \n",
" 1.9639 \n",
" 0.0925 \n",
" 382 \n",
" \n",
" \n",
" 2.0169 \n",
" 0.1456 \n",
" 601 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('AveOccup') (6/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 1.699e+00] \n",
" 2.6141 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.699e+00, 1.868e+00] \n",
" 2.7986 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (1.868e+00, 1.976e+00] \n",
" 2.6979 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (1.976e+00, 2.071e+00] \n",
" 2.5558 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.071e+00, 2.161e+00] \n",
" 2.4582 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.161e+00, 2.228e+00] \n",
" 2.2757 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.228e+00, 2.288e+00] \n",
" 2.3592 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.288e+00, 2.341e+00] \n",
" 2.2507 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.341e+00, 2.388e+00] \n",
" 2.1371 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.388e+00, 2.435e+00] \n",
" 2.2708 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.435e+00, 2.475e+00] \n",
" 2.1989 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.475e+00, 2.515e+00] \n",
" 2.1564 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.515e+00, 2.557e+00] \n",
" 2.1279 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.557e+00, 2.598e+00] \n",
" 2.2428 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.598e+00, 2.639e+00] \n",
" 2.1116 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.639e+00, 2.674e+00] \n",
" 2.2343 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.674e+00, 2.712e+00] \n",
" 2.0489 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.712e+00, 2.746e+00] \n",
" 2.2196 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.746e+00, 2.784e+00] \n",
" 2.1211 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.784e+00, 2.824e+00] \n",
" 2.2645 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (2.824e+00, 2.861e+00] \n",
" 2.1565 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (2.861e+00, 2.899e+00] \n",
" 2.2323 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.899e+00, 2.943e+00] \n",
" 2.0714 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.943e+00, 2.984e+00] \n",
" 2.0495 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (2.984e+00, 3.026e+00] \n",
" 1.9917 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.026e+00, 3.071e+00] \n",
" 1.9623 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.071e+00, 3.117e+00] \n",
" 2.0491 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.117e+00, 3.168e+00] \n",
" 1.9336 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.168e+00, 3.221e+00] \n",
" 1.9472 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.221e+00, 3.279e+00] \n",
" 1.8938 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.279e+00, 3.344e+00] \n",
" 1.8804 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.344e+00, 3.424e+00] \n",
" 1.8724 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.424e+00, 3.508e+00] \n",
" 1.8000 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.508e+00, 3.606e+00] \n",
" 1.6571 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.606e+00, 3.719e+00] \n",
" 1.5624 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.719e+00, 3.870e+00] \n",
" 1.5709 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (3.870e+00, 4.089e+00] \n",
" 1.4854 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.089e+00, 4.317e+00] \n",
" 1.4240 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" (4.317e+00, 4.705e+00] \n",
" 1.3233 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (4.705e+00, inf) \n",
" 1.5280 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.7524 \n",
" 0.0220 \n",
" 91 \n",
" \n",
" \n",
" 2.7763 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 2.6502 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 2.5990 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 2.4828 \n",
" 0.0296 \n",
" 122 \n",
" \n",
" \n",
" 2.4039 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 2.2567 \n",
" 0.0281 \n",
" 116 \n",
" \n",
" \n",
" 2.4137 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 2.3471 \n",
" 0.0211 \n",
" 87 \n",
" \n",
" \n",
" 2.2425 \n",
" 0.0300 \n",
" 124 \n",
" \n",
" \n",
" 2.0911 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 2.2072 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 2.1370 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.0973 \n",
" 0.0281 \n",
" 116 \n",
" \n",
" \n",
" 2.0188 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 2.0825 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 2.2615 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 2.0114 \n",
" 0.0213 \n",
" 88 \n",
" \n",
" \n",
" 2.2314 \n",
" 0.0257 \n",
" 106 \n",
" \n",
" \n",
" 2.0203 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 2.0908 \n",
" 0.0286 \n",
" 118 \n",
" \n",
" \n",
" 1.8887 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 1.9894 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.2316 \n",
" 0.0228 \n",
" 94 \n",
" \n",
" \n",
" 2.0891 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 1.9787 \n",
" 0.0223 \n",
" 92 \n",
" \n",
" \n",
" 2.0818 \n",
" 0.0279 \n",
" 115 \n",
" \n",
" \n",
" 1.8602 \n",
" 0.0203 \n",
" 84 \n",
" \n",
" \n",
" 1.9611 \n",
" 0.0189 \n",
" 78 \n",
" \n",
" \n",
" 1.7265 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 1.7789 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 1.8341 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 1.6481 \n",
" 0.0211 \n",
" 87 \n",
" \n",
" \n",
" 1.6989 \n",
" 0.0247 \n",
" 102 \n",
" \n",
" \n",
" 1.6267 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 1.5547 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 1.4150 \n",
" 0.0293 \n",
" 121 \n",
" \n",
" \n",
" 1.5364 \n",
" 0.0220 \n",
" 91 \n",
" \n",
" \n",
" 1.4245 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 1.5598 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 2.16e+00] \n",
" 2.6250 \n",
" 0.1250 \n",
" 1548 \n",
" \n",
" \n",
" (2.16e+00, 2.90e+00] \n",
" 2.2005 \n",
" 0.4251 \n",
" 5264 \n",
" \n",
" \n",
" (2.90e+00, 3.51e+00] \n",
" 1.9501 \n",
" 0.2749 \n",
" 3404 \n",
" \n",
" \n",
" (3.51e+00, 3.87e+00] \n",
" 1.5968 \n",
" 0.0750 \n",
" 929 \n",
" \n",
" \n",
" (3.87e+00, inf) \n",
" 1.4402 \n",
" 0.1000 \n",
" 1239 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.6484 \n",
" 0.1308 \n",
" 540 \n",
" \n",
" \n",
" 2.1665 \n",
" 0.4247 \n",
" 1753 \n",
" \n",
" \n",
" 1.9311 \n",
" 0.2636 \n",
" 1088 \n",
" \n",
" \n",
" 1.6265 \n",
" 0.0768 \n",
" 317 \n",
" \n",
" \n",
" 1.4801 \n",
" 0.1042 \n",
" 430 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('Latitude') (7/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.275e+01] \n",
" 1.5912 \n",
" 0.0287 \n",
" 355 \n",
" \n",
" \n",
" (3.275e+01, 3.321e+01] \n",
" 2.0299 \n",
" 0.0466 \n",
" 577 \n",
" \n",
" \n",
" (3.321e+01, 3.365e+01] \n",
" 2.7833 \n",
" 0.0279 \n",
" 345 \n",
" \n",
" \n",
" (3.365e+01, 3.374e+01] \n",
" 2.4326 \n",
" 0.0268 \n",
" 332 \n",
" \n",
" \n",
" (3.374e+01, 3.379e+01] \n",
" 2.1829 \n",
" 0.0262 \n",
" 325 \n",
" \n",
" \n",
" (3.379e+01, 3.383e+01] \n",
" 2.4232 \n",
" 0.0229 \n",
" 283 \n",
" \n",
" \n",
" (3.383e+01, 3.387e+01] \n",
" 2.3003 \n",
" 0.0241 \n",
" 299 \n",
" \n",
" \n",
" (3.387e+01, 3.391e+01] \n",
" 2.1570 \n",
" 0.0279 \n",
" 345 \n",
" \n",
" \n",
" (3.391e+01, 3.394e+01] \n",
" 1.6300 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" (3.394e+01, 3.397e+01] \n",
" 1.8594 \n",
" 0.0225 \n",
" 279 \n",
" \n",
" \n",
" (3.397e+01, 3.400e+01] \n",
" 1.9482 \n",
" 0.0224 \n",
" 278 \n",
" \n",
" \n",
" (3.400e+01, 3.403e+01] \n",
" 2.1267 \n",
" 0.0277 \n",
" 343 \n",
" \n",
" \n",
" (3.403e+01, 3.406e+01] \n",
" 2.4021 \n",
" 0.0339 \n",
" 420 \n",
" \n",
" \n",
" (3.406e+01, 3.410e+01] \n",
" 2.1760 \n",
" 0.0417 \n",
" 516 \n",
" \n",
" \n",
" (3.410e+01, 3.413e+01] \n",
" 2.3646 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" (3.413e+01, 3.417e+01] \n",
" 2.7771 \n",
" 0.0301 \n",
" 373 \n",
" \n",
" \n",
" (3.417e+01, 3.427e+01] \n",
" 2.4100 \n",
" 0.0435 \n",
" 539 \n",
" \n",
" \n",
" (3.427e+01, 3.453e+01] \n",
" 2.4559 \n",
" 0.0240 \n",
" 297 \n",
" \n",
" \n",
" (3.453e+01, 3.532e+01] \n",
" 1.4914 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" (3.532e+01, 3.623e+01] \n",
" 0.9208 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.623e+01, 3.672e+01] \n",
" 1.2441 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" (3.672e+01, 3.697e+01] \n",
" 1.3129 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (3.697e+01, 3.729e+01] \n",
" 2.6241 \n",
" 0.0239 \n",
" 296 \n",
" \n",
" \n",
" (3.729e+01, 3.737e+01] \n",
" 2.6574 \n",
" 0.0258 \n",
" 320 \n",
" \n",
" \n",
" (3.737e+01, 3.753e+01] \n",
" 3.0105 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" (3.753e+01, 3.765e+01] \n",
" 2.4197 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" (3.765e+01, 3.772e+01] \n",
" 2.1174 \n",
" 0.0256 \n",
" 317 \n",
" \n",
" \n",
" (3.772e+01, 3.777e+01] \n",
" 2.5537 \n",
" 0.0286 \n",
" 354 \n",
" \n",
" \n",
" (3.777e+01, 3.793e+01] \n",
" 2.6887 \n",
" 0.0459 \n",
" 569 \n",
" \n",
" \n",
" (3.793e+01, 3.800e+01] \n",
" 1.7622 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (3.800e+01, 3.826e+01] \n",
" 1.5924 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" (3.826e+01, 3.850e+01] \n",
" 1.8570 \n",
" 0.0254 \n",
" 315 \n",
" \n",
" \n",
" (3.850e+01, 3.863e+01] \n",
" 1.3981 \n",
" 0.0241 \n",
" 298 \n",
" \n",
" \n",
" (3.863e+01, 3.898e+01] \n",
" 1.3962 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" (3.898e+01, 3.975e+01] \n",
" 1.1241 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" (3.975e+01, inf) \n",
" 0.8442 \n",
" 0.0244 \n",
" 302 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.5761 \n",
" 0.0320 \n",
" 132 \n",
" \n",
" \n",
" 2.0768 \n",
" 0.0552 \n",
" 228 \n",
" \n",
" \n",
" 2.7115 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 2.4368 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.2910 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 2.3528 \n",
" 0.0220 \n",
" 91 \n",
" \n",
" \n",
" 2.3233 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 2.0937 \n",
" 0.0368 \n",
" 152 \n",
" \n",
" \n",
" 1.6319 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 1.7992 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 1.9408 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.1292 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 2.3261 \n",
" 0.0334 \n",
" 138 \n",
" \n",
" \n",
" 2.2762 \n",
" 0.0443 \n",
" 183 \n",
" \n",
" \n",
" 2.2228 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 2.8224 \n",
" 0.0303 \n",
" 125 \n",
" \n",
" \n",
" 2.2938 \n",
" 0.0465 \n",
" 192 \n",
" \n",
" \n",
" 2.5025 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 1.3719 \n",
" 0.0201 \n",
" 83 \n",
" \n",
" \n",
" 0.9336 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 1.2516 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
" 1.2597 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 2.5507 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.5351 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 2.9827 \n",
" 0.0283 \n",
" 117 \n",
" \n",
" \n",
" 2.6519 \n",
" 0.0194 \n",
" 80 \n",
" \n",
" \n",
" 2.0869 \n",
" 0.0203 \n",
" 84 \n",
" \n",
" \n",
" 2.6145 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 2.5853 \n",
" 0.0516 \n",
" 213 \n",
" \n",
" \n",
" 1.6630 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 1.5156 \n",
" 0.0206 \n",
" 85 \n",
" \n",
" \n",
" 1.7549 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 1.3101 \n",
" 0.0196 \n",
" 81 \n",
" \n",
" \n",
" 1.3997 \n",
" 0.0279 \n",
" 115 \n",
" \n",
" \n",
" 1.1114 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 0.8671 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, 3.45e+01] \n",
" 2.2311 \n",
" 0.5254 \n",
" 6506 \n",
" \n",
" \n",
" (3.45e+01, 3.70e+01] \n",
" 1.2415 \n",
" 0.1011 \n",
" 1252 \n",
" \n",
" \n",
" (3.70e+01, 3.79e+01] \n",
" 2.5927 \n",
" 0.1997 \n",
" 2473 \n",
" \n",
" \n",
" (3.79e+01, 3.90e+01] \n",
" 1.6035 \n",
" 0.1240 \n",
" 1535 \n",
" \n",
" \n",
" (3.90e+01, inf) \n",
" 0.9873 \n",
" 0.0499 \n",
" 618 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.2111 \n",
" 0.5487 \n",
" 2265 \n",
" \n",
" \n",
" 1.2065 \n",
" 0.0952 \n",
" 393 \n",
" \n",
" \n",
" 2.5902 \n",
" 0.1945 \n",
" 803 \n",
" \n",
" \n",
" 1.5312 \n",
" 0.1156 \n",
" 477 \n",
" \n",
" \n",
" 0.9918 \n",
" 0.0460 \n",
" 190 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [ContinuousCarver] Fit Numerical('Longitude') (8/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, -1.2269e+02] \n",
" 1.4063 \n",
" 0.0259 \n",
" 321 \n",
" \n",
" \n",
" (-1.2269e+02, -1.2247e+02] \n",
" 2.8878 \n",
" 0.0259 \n",
" 321 \n",
" \n",
" \n",
" (-1.2247e+02, -1.2241e+02] \n",
" 3.2397 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" (-1.2241e+02, -1.2229e+02] \n",
" 2.1582 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" (-1.2229e+02, -1.2215e+02] \n",
" 2.3071 \n",
" 0.0476 \n",
" 589 \n",
" \n",
" \n",
" (-1.2215e+02, -1.2206e+02] \n",
" 2.5665 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" (-1.2206e+02, -1.2199e+02] \n",
" 2.6265 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" (-1.2199e+02, -1.2191e+02] \n",
" 2.6924 \n",
" 0.0237 \n",
" 294 \n",
" \n",
" \n",
" (-1.2191e+02, -1.2181e+02] \n",
" 2.2919 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" (-1.2181e+02, -1.2157e+02] \n",
" 1.7103 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" (-1.2157e+02, -1.2139e+02] \n",
" 1.1736 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" (-1.2139e+02, -1.2127e+02] \n",
" 1.3270 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" (-1.2127e+02, -1.2101e+02] \n",
" 1.4857 \n",
" 0.0238 \n",
" 295 \n",
" \n",
" \n",
" (-1.2101e+02, -1.2064e+02] \n",
" 1.4716 \n",
" 0.0245 \n",
" 304 \n",
" \n",
" \n",
" (-1.2064e+02, -1.2007e+02] \n",
" 1.3376 \n",
" 0.0254 \n",
" 314 \n",
" \n",
" \n",
" (-1.2007e+02, -1.1972e+02] \n",
" 1.2624 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" (-1.1972e+02, -1.1929e+02] \n",
" 1.3332 \n",
" 0.0239 \n",
" 296 \n",
" \n",
" \n",
" (-1.1929e+02, -1.1897e+02] \n",
" 1.3300 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" (-1.1897e+02, -1.1852e+02] \n",
" 2.7211 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" (-1.1852e+02, -1.1843e+02] \n",
" 3.1653 \n",
" 0.0284 \n",
" 352 \n",
" \n",
" \n",
" (-1.1843e+02, -1.1838e+02] \n",
" 3.4432 \n",
" 0.0238 \n",
" 295 \n",
" \n",
" \n",
" (-1.1838e+02, -1.1834e+02] \n",
" 2.7480 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (-1.1834e+02, -1.1830e+02] \n",
" 2.3435 \n",
" 0.0271 \n",
" 336 \n",
" \n",
" \n",
" (-1.1830e+02, -1.1822e+02] \n",
" 1.7476 \n",
" 0.0480 \n",
" 594 \n",
" \n",
" \n",
" (-1.1822e+02, -1.1818e+02] \n",
" 1.8055 \n",
" 0.0227 \n",
" 281 \n",
" \n",
" \n",
" (-1.1818e+02, -1.1813e+02] \n",
" 2.1480 \n",
" 0.0287 \n",
" 356 \n",
" \n",
" \n",
" (-1.1813e+02, -1.1808e+02] \n",
" 2.2494 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" (-1.1808e+02, -1.1801e+02] \n",
" 2.4079 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" (-1.1801e+02, -1.1790e+02] \n",
" 2.2304 \n",
" 0.0468 \n",
" 580 \n",
" \n",
" \n",
" (-1.1790e+02, -1.1780e+02] \n",
" 2.4820 \n",
" 0.0266 \n",
" 329 \n",
" \n",
" \n",
" (-1.1780e+02, -1.1766e+02] \n",
" 2.2864 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" (-1.1766e+02, -1.1739e+02] \n",
" 1.6791 \n",
" 0.0237 \n",
" 294 \n",
" \n",
" \n",
" (-1.1739e+02, -1.1725e+02] \n",
" 1.6380 \n",
" 0.0290 \n",
" 359 \n",
" \n",
" \n",
" (-1.1725e+02, -1.1716e+02] \n",
" 2.0512 \n",
" 0.0229 \n",
" 284 \n",
" \n",
" \n",
" (-1.1716e+02, -1.1708e+02] \n",
" 1.5113 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" (-1.1708e+02, -1.1696e+02] \n",
" 1.6669 \n",
" 0.0235 \n",
" 291 \n",
" \n",
" \n",
" (-1.1696e+02, inf) \n",
" 1.1769 \n",
" 0.0245 \n",
" 304 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 1.3927 \n",
" 0.0216 \n",
" 89 \n",
" \n",
" \n",
" 3.0129 \n",
" 0.0233 \n",
" 96 \n",
" \n",
" \n",
" 3.1899 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 2.1911 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 2.3035 \n",
" 0.0453 \n",
" 187 \n",
" \n",
" \n",
" 2.9862 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.5471 \n",
" 0.0240 \n",
" 99 \n",
" \n",
" \n",
" 2.6969 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 2.1464 \n",
" 0.0250 \n",
" 103 \n",
" \n",
" \n",
" 1.7105 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 1.0959 \n",
" 0.0220 \n",
" 91 \n",
" \n",
" \n",
" 1.2918 \n",
" 0.0291 \n",
" 120 \n",
" \n",
" \n",
" 1.3781 \n",
" 0.0230 \n",
" 95 \n",
" \n",
" \n",
" 1.4767 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 1.2441 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 1.2810 \n",
" 0.0281 \n",
" 116 \n",
" \n",
" \n",
" 1.2813 \n",
" 0.0252 \n",
" 104 \n",
" \n",
" \n",
" 1.4223 \n",
" 0.0274 \n",
" 113 \n",
" \n",
" \n",
" 2.7081 \n",
" 0.0218 \n",
" 90 \n",
" \n",
" \n",
" 3.2548 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 3.3604 \n",
" 0.0242 \n",
" 100 \n",
" \n",
" \n",
" 2.8064 \n",
" 0.0262 \n",
" 108 \n",
" \n",
" \n",
" 2.2395 \n",
" 0.0305 \n",
" 126 \n",
" \n",
" \n",
" 1.7631 \n",
" 0.0434 \n",
" 179 \n",
" \n",
" \n",
" 1.6175 \n",
" 0.0298 \n",
" 123 \n",
" \n",
" \n",
" 2.0881 \n",
" 0.0264 \n",
" 109 \n",
" \n",
" \n",
" 2.3487 \n",
" 0.0245 \n",
" 101 \n",
" \n",
" \n",
" 2.4322 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 2.1850 \n",
" 0.0497 \n",
" 205 \n",
" \n",
" \n",
" 2.5202 \n",
" 0.0288 \n",
" 119 \n",
" \n",
" \n",
" 2.2701 \n",
" 0.0235 \n",
" 97 \n",
" \n",
" \n",
" 1.7464 \n",
" 0.0225 \n",
" 93 \n",
" \n",
" \n",
" 1.8748 \n",
" 0.0310 \n",
" 128 \n",
" \n",
" \n",
" 2.1466 \n",
" 0.0266 \n",
" 110 \n",
" \n",
" \n",
" 1.4479 \n",
" 0.0279 \n",
" 115 \n",
" \n",
" \n",
" 1.5746 \n",
" 0.0271 \n",
" 112 \n",
" \n",
" \n",
" 1.2465 \n",
" 0.0259 \n",
" 107 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ContinuousCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution \n",
" \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" (-inf, -1.218e+02] \n",
" 2.4438 \n",
" 0.2509 \n",
" 3107 \n",
" \n",
" \n",
" (-1.218e+02, -1.190e+02] \n",
" 1.3787 \n",
" 0.2242 \n",
" 2776 \n",
" \n",
" \n",
" (-1.190e+02, -1.183e+02] \n",
" 3.0175 \n",
" 0.1029 \n",
" 1274 \n",
" \n",
" \n",
" (-1.183e+02, -1.177e+02] \n",
" 2.1601 \n",
" 0.2735 \n",
" 3387 \n",
" \n",
" \n",
" (-1.177e+02, inf) \n",
" 1.6155 \n",
" 0.1486 \n",
" 1840 \n",
" \n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution \n",
" \n",
" \n",
" target_mean \n",
" frequency \n",
" count \n",
" \n",
" \n",
" \n",
" \n",
" 2.4780 \n",
" 0.2357 \n",
" 973 \n",
" \n",
" \n",
" 1.3487 \n",
" 0.2243 \n",
" 926 \n",
" \n",
" \n",
" 3.0414 \n",
" 0.0988 \n",
" 408 \n",
" \n",
" \n",
" 2.1328 \n",
" 0.2800 \n",
" 1156 \n",
" \n",
" \n",
" 1.6763 \n",
" 0.1611 \n",
" 665 \n",
" \n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" library \n",
" fit_s \n",
" transform_s \n",
" train_r2 \n",
" test_r2 \n",
" r2_drop \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" AutoCarver \n",
" 5.890 \n",
" 0.0889 \n",
" 0.6652 \n",
" 0.6595 \n",
" 0.0057 \n",
" \n",
" \n",
" 1 \n",
" optbinning \n",
" 2.876 \n",
" 0.0083 \n",
" 0.5145 \n",
" 0.5077 \n",
" 0.0068 \n",
" \n",
" \n",
" 2 \n",
" KBinsDiscretizer \n",
" 0.009 \n",
" 0.0018 \n",
" 0.6181 \n",
" 0.6192 \n",
" -0.0011 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" library fit_s transform_s train_r2 test_r2 r2_drop\n",
"0 AutoCarver 5.890 0.0889 0.6652 0.6595 0.0057\n",
"1 optbinning 2.876 0.0083 0.5145 0.5077 0.0068\n",
"2 KBinsDiscretizer 0.009 0.0018 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, carver = 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": "b7da7c9b",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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u+lde//5z3/M/Llz53rM131yn79o0aI0135q/fv3t0JCQqwLFy6kW2blypVmPfo3u9+fESNGeKzzuuuusxo3bpzuNgEAKKjoXgcAQBZoCxilLVoyyz0/jt2aR1uR7N2717y+XNoiR1uBaEsb91w12t1NW554yy+VXosMTU5ut55SDRs2NF2UdF8z+xk10bl+xptuusm0mNm5c2emPoeOxqctVVJPug/uli5dav5qqyp32uJJZSeflrZk0eTvu3fvzvKylzpm2jJGW8NodyztfmjT7modOnSQ3KYt5rTlTuquZnr+ypQpY86lPeln1c/zzTffmHLajVBbIWkLKfecSRm14Et97em2SpUqZVqUuW9Lu7ppq7mVK1eacnZroyVLlnht/WaX0TxR7t0iffH9efzxxz1e67G61HcEAICCiO51AABkgQYT7MBKZmkXnbi4OFmzZo0JwrjToJPecF+OX3/91fzVblGp6U2zdv9yp138qlat6nVd2o0qNQ08pM6tk5oGbHR0N+1WZwfmbJkNrGm3Ns0r5G377t3u9PNqYEODNu5CQ0NN0ME+HlmhXd06d+4sV199tcnNpF3hNE9R6oBXdo6ZBjR0tLTU+6u8zUtN84fplB0atNHpUkGn1DT49sMPP6Tb/c9OaK/HWrsMunfRzOhzebv2dFt6jWjOs4y2pYFa7bao3RPfeOMNk+NMA3kPPPCAayRFDRy9//77JphXpUoV0x3vvvvuM+fTqe+PBqZSH5fMfEcAACiICDoBAJDFoJO2Vtm+fXumymvSZM0vozev48aNM0mZdah2ba2jN86pkzLnBL1B16CNN+mNSvffnmTeacJpDQjosdHgjbb60RtzzYf0/PPP++wzXk4C7tRJn2+++WZzrjQf0ZdffilvvfWWOT/Tpk0zeZ4ykp1jlhWaN0gDLdmhwU5vidTdeRupTs+ZtjwaPHiw12U0OOfUtafb0oDT3LlzvS5jB3j0fH/wwQeydu1akxdNk59rEnHNp6TzNLim69myZYt57/PPPzeTJvKPiooyOcCcUBBHbgQAILsIOgEAkEU62pcm89aWS82bN8+wrN4c64hqn3zyiUeLGLvLkBOqV6/uSgito+S503n2+76io4DpCGaa0FmDNzZNBu0L+nk0UKEtZOrVq+ear8mfNQDm/nm1BYrOc3f+/HmTDDu1smXLmmTSOmnL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x4xcV79+fSnI+B7kL5yv/INzBfBdyG/43co/OFf/U8hiPFUAAAAAAAA4LEs5nQAAAAAAAIDMIOgEAAAAAAAAxxF0AgAAAAAAgOMIOiFfCwsLMyNiZaRQoUImGbGTevbsKV26dBF/sn//fnOstmzZkuPbzqvHc9iwYSb5NYCCiTrGOdQxaVHHAAUbdYxzqGPyeB1j5VOrV6+2ChcubN1xxx1ZXjYuLs5q1KhRtrabnJxsvfbaa1bDhg2tokWLWuXKlbNatGhhzZw50zp//ny21olLmzVrllWqVKk086tXr2698cYbGS77+++/W+fOnXP0MJ84ccL666+/rLwiOjra6ty5s8e8hQsXWkFBQdaYMWPM+/p1t6eyZctakZGR1tatW13lL1y4YI7VP//848g+rVy50rW9QoUKWSEhIVZERIQ1aNAg69ChQ3nueOp+Llq0yGPeqVOnrOPHj+faPiH3UMcULNQxGaOOuXzUMXBHHVOwUMdkjDrG/+uYfNvS6e2335annnpKvvnmGzl06FCObPP8+fMSGRkpr776qjz66KOyevVqWb9+vfTt21cmTZokP/74Y7bX/c8//4iv9rmgCw0NNUNWOqlUqVJSunRpyaveeust6dGjh0ydOlWeffZZM699+/by+++/m2n58uVSpEgRufPOO13LBAQEmGOl8520a9cu8x39/vvv5fnnn5evvvpK6tevL9u2bcuR43k5360SJUpIuXLlxFf4fuZd1DGZwzVMHUMdQx0D6hjuY3yH+xjuY/ziPsbKhzRqV6JECWvnzp1Wt27drJdffjnDSLJG/eyPqu+7t/jQSeepX3/91brrrrus4sWLWyVLlrS6du1qHT582LUebeGkras2bdqUZp+0ldPp06fNvz///HOrZcuWZj+0RUnHjh2tPXv2uMru27fPbHf+/PnWzTffbFqjTJgwwQoODraWLl3qsd6PPvrIfNYzZ86Y1wcOHDD7pesuU6aM2V9dX+pI8ahRo6xKlSpZYWFhVl6gLY2eeuop68orrzSfV4/P+vXrPVrELFmyxGrQoIF5v1mzZta2bds83neftLWa3dJpxIgR1v33328VK1bMqly5sjV58uR0I7/2sf/www+tNm3amNZq2mpNnzilvoYSEhKsunXrmutBWwW5t85JHZFv3bq1+XzaikfPS8WKFV37aPvpp5/M59bPV69ePWvZsmVeo9LZ4b4/ep3qtaTXTnr7q/7zn/+Y7R89etTj2GzevNnjuH/11VdW48aNzbFq3ry5+d7ZtmzZYo6jXqP6nbn++uut77//3mP51C2Y/v77b+uaa64xxyK9/dNWWvXr1zefQ79Dt956q+v7pd5++20rPDzcCgwMtEJDQ62+ffu63tNt/vvf/7Y6depkrgn7PCxevNi67rrrzPGvUaOGNWzYMFerLr2O3K8vfe2tVWTq69C9rNJrtn379uaaqVChgvXggw9ax44d87hOdF/79+9vWknqsUPeQx1DHUMd44k6hjoG1DE27mO4j+E+hvuYclm8j8mXQSe94WzSpIn596effmrVqlXLunjxYqaCTnrD++yzz1rXXnut6Uqkk85LSUkxXX9atWplbdiwwVq7dq250dabRJsGJ26//fZL7t8HH3xgghq7d+82N/B686vBFN2G+4+1BoS03N69e01A49577zU3qe7uuece1zwNbOmX/OGHH7Z++OEHa8eOHdYDDzxgbuC125/9P4YaAHjooYes7du3mykvePrpp01ASINqP/74o9lPDc788ccfruCEfrYvv/zSfLY777zTHB/9zPrZxo8fb7pn2edMbwqV3vBrsCM+Pt7atWuXNXHiRCsgIMCsJ6OgkwaTNMily+hx1/XYAQi9hq644gqrXbt2JoCyceNGs296rDMKOun+aSDj559/tt555x3TpczeD+26pufptttuM4EaDfg0bdrU8aDT4MGDzfnXQJG39216/B577DGrdu3aaa7L1EEnDQCuWrXKnLebbrrJdCe16fdIr08NqOnnfv/9983nc1/eW7c57RKp7x05ciTN/ul3oUiRIta4cePMPun1MGXKFNc514CSBqP0mtDzp8FL9y6Wul4N+GiX119++cUEk7/55htzfmbPnm3m6XnR60vPl9LAmx2A1uvLDsSlDjrZ159OGkjW46ffNaWfU4OqMTEx5nhocFrPd9u2bT2uEz0/GpzU4J17AA95B3UMdQx1jCfqGOoYUMdwH8N9DPcx/8V9zKAs38fky6CT3vTqDafSQEH58uXNDW5mgk7p5XTSm1ANVmhLIpveZOtydoscbemhwZOs0pYOuh675Y59c29/Bvf9dG/VlJSUZG6uteWUmjNnjglc2AE2pQEZ3a8vvvjC9T+G2srGDkLlBdpCRYM4c+fOdc3T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",
"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
}