{
"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",
" x <= 8.00e+00 \n",
" 0.0980 \n",
" 0.0850 \n",
" 51 \n",
" \n",
" \n",
" 8.00e+00 < x <= 9.00e+00 \n",
" 0.2333 \n",
" 0.0500 \n",
" 30 \n",
" \n",
" \n",
" 9.00e+00 < x <= 1.10e+01 \n",
" 0.0870 \n",
" 0.0383 \n",
" 23 \n",
" \n",
" \n",
" 1.10e+01 < x <= 1.20e+01 \n",
" 0.2883 \n",
" 0.1850 \n",
" 111 \n",
" \n",
" \n",
" 1.20e+01 < x <= 1.50e+01 \n",
" 0.2273 \n",
" 0.0733 \n",
" 44 \n",
" \n",
" \n",
" 1.50e+01 < x <= 1.80e+01 \n",
" 0.3692 \n",
" 0.1083 \n",
" 65 \n",
" \n",
" \n",
" 1.80e+01 < x <= 2.20e+01 \n",
" 0.2381 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" 2.20e+01 < x <= 2.40e+01 \n",
" 0.3333 \n",
" 0.1950 \n",
" 117 \n",
" \n",
" \n",
" 2.40e+01 < x <= 2.80e+01 \n",
" 0.2222 \n",
" 0.0150 \n",
" 9 \n",
" \n",
" \n",
" 2.80e+01 < x <= 3.30e+01 \n",
" 0.3846 \n",
" 0.0433 \n",
" 26 \n",
" \n",
" \n",
" 3.30e+01 < x <= 3.60e+01 \n",
" 0.4727 \n",
" 0.0917 \n",
" 55 \n",
" \n",
" \n",
" 3.60e+01 < x <= 4.70e+01 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 4.70e+01 < x \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",
" x <= 8.00e+00 \n",
" 0.0980 \n",
" 0.0850 \n",
" 51 \n",
" \n",
" \n",
" 8.00e+00 < x <= 1.10e+01 \n",
" 0.1698 \n",
" 0.0883 \n",
" 53 \n",
" \n",
" \n",
" 1.10e+01 < x <= 1.50e+01 \n",
" 0.2710 \n",
" 0.2583 \n",
" 155 \n",
" \n",
" \n",
" 1.50e+01 < x <= 2.80e+01 \n",
" 0.3302 \n",
" 0.3533 \n",
" 212 \n",
" \n",
" \n",
" 2.80e+01 < x \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",
" x <= 6.18e+02 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 6.18e+02 < x <= 7.08e+02 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 7.08e+02 < x <= 7.97e+02 \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 7.97e+02 < x <= 9.09e+02 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 9.09e+02 < x <= 1.03e+03 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.03e+03 < x <= 1.16e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.16e+03 < x <= 1.21e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.21e+03 < x <= 1.26e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.26e+03 < x <= 1.31e+03 \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.31e+03 < x <= 1.37e+03 \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.37e+03 < x <= 1.41e+03 \n",
" 0.1250 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" 1.41e+03 < x <= 1.47e+03 \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" 1.47e+03 < x <= 1.53e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.53e+03 < x <= 1.60e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.60e+03 < x <= 1.82e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 1.82e+03 < x <= 1.92e+03 \n",
" 0.5000 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" 1.92e+03 < x <= 1.98e+03 \n",
" 0.2857 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" 1.98e+03 < x <= 2.12e+03 \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.12e+03 < x <= 2.21e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.21e+03 < x <= 2.30e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.30e+03 < x <= 2.38e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.38e+03 < x <= 2.48e+03 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.48e+03 < x <= 2.62e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.62e+03 < x <= 2.75e+03 \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.75e+03 < x <= 2.92e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.92e+03 < x <= 3.07e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.07e+03 < x <= 3.35e+03 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.35e+03 < x <= 3.51e+03 \n",
" 0.1333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.51e+03 < x <= 3.63e+03 \n",
" 0.1333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.63e+03 < x <= 3.91e+03 \n",
" 0.0667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.91e+03 < x <= 4.24e+03 \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 4.24e+03 < x <= 4.66e+03 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 4.66e+03 < x <= 5.08e+03 \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 5.08e+03 < x <= 5.80e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 5.80e+03 < x <= 6.36e+03 \n",
" 0.2667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 6.36e+03 < x <= 6.85e+03 \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 6.85e+03 < x <= 7.48e+03 \n",
" 0.2000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 7.48e+03 < x <= 8.23e+03 \n",
" 0.4667 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 8.23e+03 < x <= 9.57e+03 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 9.57e+03 < x \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",
" x <= 1.03e+03 \n",
" 0.3467 \n",
" 0.1250 \n",
" 75 \n",
" \n",
" \n",
" 1.03e+03 < x <= 3.35e+03 \n",
" 0.2758 \n",
" 0.5500 \n",
" 330 \n",
" \n",
" \n",
" 3.35e+03 < x <= 3.91e+03 \n",
" 0.1111 \n",
" 0.0750 \n",
" 45 \n",
" \n",
" \n",
" 3.91e+03 < x <= 7.48e+03 \n",
" 0.3524 \n",
" 0.1750 \n",
" 105 \n",
" \n",
" \n",
" 7.48e+03 < x \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.3478 \n",
" 0.1150 \n",
" 23 \n",
" \n",
" \n",
" 0.2233 \n",
" 0.5150 \n",
" 103 \n",
" \n",
" \n",
" 0.2083 \n",
" 0.1200 \n",
" 24 \n",
" \n",
" \n",
" 0.3871 \n",
" 0.1550 \n",
" 31 \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",
" x <= 1.00e+00 \n",
" 0.2436 \n",
" 0.1300 \n",
" 78 \n",
" \n",
" \n",
" 1.00e+00 < x <= 2.00e+00 \n",
" 0.2606 \n",
" 0.2367 \n",
" 142 \n",
" \n",
" \n",
" 2.00e+00 < x <= 3.00e+00 \n",
" 0.2979 \n",
" 0.1567 \n",
" 94 \n",
" \n",
" \n",
" 3.00e+00 < x \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",
" x <= 2.00e+00 \n",
" 0.2545 \n",
" 0.3667 \n",
" 220 \n",
" \n",
" \n",
" 2.00e+00 < x <= 3.00e+00 \n",
" 0.2979 \n",
" 0.1567 \n",
" 94 \n",
" \n",
" \n",
" 3.00e+00 < x \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",
" x <= 1.00e+00 \n",
" 0.3117 \n",
" 0.1283 \n",
" 77 \n",
" \n",
" \n",
" 1.00e+00 < x <= 2.00e+00 \n",
" 0.2905 \n",
" 0.2983 \n",
" 179 \n",
" \n",
" \n",
" 2.00e+00 < x <= 3.00e+00 \n",
" 0.3000 \n",
" 0.1667 \n",
" 100 \n",
" \n",
" \n",
" 3.00e+00 < x \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",
" x <= 2.10e+01 \n",
" 0.4000 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 2.10e+01 < x <= 2.20e+01 \n",
" 0.3684 \n",
" 0.0317 \n",
" 19 \n",
" \n",
" \n",
" 2.20e+01 < x <= 2.30e+01 \n",
" 0.4500 \n",
" 0.0333 \n",
" 20 \n",
" \n",
" \n",
" 2.30e+01 < x <= 2.40e+01 \n",
" 0.3333 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" 2.40e+01 < x <= 2.50e+01 \n",
" 0.5161 \n",
" 0.0517 \n",
" 31 \n",
" \n",
" \n",
" 2.50e+01 < x <= 2.60e+01 \n",
" 0.2500 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" 2.60e+01 < x <= 2.70e+01 \n",
" 0.2258 \n",
" 0.0517 \n",
" 31 \n",
" \n",
" \n",
" 2.70e+01 < x <= 2.80e+01 \n",
" 0.4091 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" 2.80e+01 < x <= 2.90e+01 \n",
" 0.3913 \n",
" 0.0383 \n",
" 23 \n",
" \n",
" \n",
" 2.90e+01 < x <= 3.00e+01 \n",
" 0.2143 \n",
" 0.0467 \n",
" 28 \n",
" \n",
" \n",
" 3.00e+01 < x <= 3.10e+01 \n",
" 0.2308 \n",
" 0.0433 \n",
" 26 \n",
" \n",
" \n",
" 3.10e+01 < x <= 3.20e+01 \n",
" 0.2500 \n",
" 0.0333 \n",
" 20 \n",
" \n",
" \n",
" 3.20e+01 < x <= 3.30e+01 \n",
" 0.3636 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" 3.30e+01 < x <= 3.40e+01 \n",
" 0.3636 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" 3.40e+01 < x <= 3.50e+01 \n",
" 0.1724 \n",
" 0.0483 \n",
" 29 \n",
" \n",
" \n",
" 3.50e+01 < x <= 3.60e+01 \n",
" 0.2083 \n",
" 0.0400 \n",
" 24 \n",
" \n",
" \n",
" 3.60e+01 < x <= 3.70e+01 \n",
" 0.3333 \n",
" 0.0250 \n",
" 15 \n",
" \n",
" \n",
" 3.70e+01 < x <= 3.80e+01 \n",
" 0.1875 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" 3.80e+01 < x <= 3.90e+01 \n",
" 0.2941 \n",
" 0.0283 \n",
" 17 \n",
" \n",
" \n",
" 3.90e+01 < x <= 4.10e+01 \n",
" 0.3182 \n",
" 0.0367 \n",
" 22 \n",
" \n",
" \n",
" 4.10e+01 < x <= 4.20e+01 \n",
" 0.2727 \n",
" 0.0183 \n",
" 11 \n",
" \n",
" \n",
" 4.20e+01 < x <= 4.40e+01 \n",
" 0.1905 \n",
" 0.0350 \n",
" 21 \n",
" \n",
" \n",
" 4.40e+01 < x <= 4.60e+01 \n",
" 0.2632 \n",
" 0.0317 \n",
" 19 \n",
" \n",
" \n",
" 4.60e+01 < x <= 4.70e+01 \n",
" 0.4000 \n",
" 0.0167 \n",
" 10 \n",
" \n",
" \n",
" 4.70e+01 < x <= 4.90e+01 \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" 4.90e+01 < x <= 5.10e+01 \n",
" 0.1429 \n",
" 0.0233 \n",
" 14 \n",
" \n",
" \n",
" 5.10e+01 < x <= 5.40e+01 \n",
" 0.2941 \n",
" 0.0283 \n",
" 17 \n",
" \n",
" \n",
" 5.40e+01 < x <= 5.70e+01 \n",
" 0.3333 \n",
" 0.0200 \n",
" 12 \n",
" \n",
" \n",
" 5.70e+01 < x <= 6.30e+01 \n",
" 0.4375 \n",
" 0.0267 \n",
" 16 \n",
" \n",
" \n",
" 6.30e+01 < x \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",
" x <= 2.50e+01 \n",
" 0.4245 \n",
" 0.1767 \n",
" 106 \n",
" \n",
" \n",
" 2.50e+01 < x <= 3.20e+01 \n",
" 0.2753 \n",
" 0.2967 \n",
" 178 \n",
" \n",
" \n",
" 3.20e+01 < x <= 3.40e+01 \n",
" 0.3636 \n",
" 0.0733 \n",
" 44 \n",
" \n",
" \n",
" 3.40e+01 < x <= 3.60e+01 \n",
" 0.1887 \n",
" 0.0883 \n",
" 53 \n",
" \n",
" \n",
" 3.60e+01 < x \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",
" x <= 1.00e+00 \n",
" 0.3061 \n",
" 0.6317 \n",
" 379 \n",
" \n",
" \n",
" 1.00e+00 < x <= 2.00e+00 \n",
" 0.2899 \n",
" 0.3450 \n",
" 207 \n",
" \n",
" \n",
" 2.00e+00 < x \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",
" x <= 1.0e+00 \n",
" 0.2984 \n",
" 0.8433 \n",
" 506 \n",
" \n",
" \n",
" 1.0e+00 < x \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.031 \n",
" 0.0233 \n",
" 0.8474 \n",
" 0.8118 \n",
" 0.0356 \n",
" \n",
" \n",
" 1 \n",
" optbinning \n",
" 1.081 \n",
" 0.0133 \n",
" 0.8523 \n",
" 0.7931 \n",
" 0.0592 \n",
" \n",
" \n",
" 2 \n",
" KBinsDiscretizer \n",
" 0.003 \n",
" 0.0008 \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.031 0.0233 0.8474 0.8118 0.0356\n",
"1 optbinning 1.081 0.0133 0.8523 0.7931 0.0592\n",
"2 KBinsDiscretizer 0.003 0.0008 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": "1ea9c0a3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJQAAAFcCAYAAACeKeQ7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVcdJREFUeJzt3Qu8TXX+//GP+y2HECI5KteIQU6kpAxKoiLURJKZaXJLyZAcUqkmtxlKKkklUlJJJGVqxi23pKKUW+VaIYRi/R/v7++/9ux9zj6XxT731/PxWGWvve5r7fU967O+3883n+d5ngEAAAAAAADplD+9EwIAAAAAAAAElAAAAAAAABAYNZQAAAAAAAAQCAElAAAAAAAABEJACQAAAAAAAIEQUAIAAAAAAEAgBJQAAAAAAAAQCAElAAAAAAAABEJACQAAAAAAAIEQUAIAADE3bdo0y5cvn23dujU07oorrnBDdnPbbbfZGWecka5ptU8jRoyw3ErHIj4+PltdN/KPf/zDzjvvPCtQoIA1aNDAjdN2anszm86/thEAgLyOgBIAIEfasmWL9enTx2rUqGHFixd3Q506deyuu+6y9evXW163bt06+9Of/mRVqlSxIkWKWJkyZaxVq1b2/PPP24kTJyw7+OGHH9zDubYVSMl7771n9913n1166aXu+n3kkUcy/GAdOXLEXZtLlizhxAAAkIKCKX0BAEB2NW/ePOvSpYsVLFjQbrnlFqtfv77lz5/fNm7caHPmzLGnnnrKBZyqVq1qedGzzz5rf/3rX61ChQp26623WvXq1e2XX36xxYsXW69evWznzp02dOjQLAkMJA0ojRw50tU08WudZHe//vqru+6QMXS9du3a1QVBfR988IH7fT/33HNWuHDh0PhNmza58RkVUNK1KUlr1Q0bNsz+/ve/Z8h6AQDISfiLCACQo3zzzTfugVPBIgVIzj777IjvH3vsMXvyySdj9qB5+PBhK1GihOUUy5cvd8Gkpk2b2vz5861kyZKh7wYMGGCrVq2yDRs2pDj/77//bidPnox4cI+VjFhmZitatGimr9PzPDt69KgVK1bMcjs1adMQbs+ePW7fk14/4UGnzKSAIkFFAABo8gYAyGEef/xxF+RR05ekwSTRg16/fv1cU69wqr3UqVMn1/RLQYHGjRvbW2+9FTV/y7///W/729/+ZuXLl7dzzjknVEuhbt26rjldixYtXBO7Cy64wF577TX3veZJSEhwD741a9a0999/P2LZ27Ztc8vUd5qmbNmy1rlz52S5Yvxt+O9//2sDBw60s846ywW0rr/+etu7d2+ax0e1KjT/yy+/HBFM8mm//bwzWremfeKJJ2z8+PF2/vnnu4f0L774It3HTD7//HO78sor3X7peD300EMuKJVUeA4lNSW6+OKL3b979uzptkOD9j+rfPvtt9amTRt3vCtVqmQPPvigC+aklkPJz6ezefNmd1xLly5tpUqVcvukWi7hdM3qOOm60nFWE03VpktKNbauvfZaW7hwoTvmOq5PP/20u+5UGy8aXVfa9rS8++67bjm6NuLi4tw5mDFjRqrz6Ppo1qyZu2a1LY0aNQpd9+EWLVpkzZs3d8dAOam0TUlrwv3rX/+yCy+80P1+zjzzTLd/4etPmkNJ/9Zx028+6TUSLYfS/v377e6773bf6Rjreuzevbvt27fPfX/8+HEbPny42wedJ53ryy67zD788MPQMrRu/e7Cf0/h5z1aDiUFYkeNGhX6DWn92vdjx45FPbf/+c9/rEmTJu53pdxQ06dPT/UcAACQHVFDCQCQ45q7KZCj4E16KeCh/CuVK1d2TVX0EPnqq69ax44d7fXXX3fBmnAK/OiBUg+eepD1/fzzz+5hUDWkFAxSMED/VvBGtX9UM+jmm292CYQViNmxY0coqPPJJ5/Y0qVL3fR6yNVDq+ZXgEUBHD1gh+vbt6974E5MTHTTKuCjnFGzZs1KcT8VwFCtrcsvv9zOPffcdB8fPbCrBsyf//znUL6l9B6zXbt2WcuWLd0DtT/dlClT0qxNU7t2bRew0THWevVQLwpcZAXllWrbtq1dcsklLmi5YMECd+y1X9rOtNx0001WrVo1Gz16tK1Zs8Y1O1TgSDXmfDrfCqZcd911LvD59ttvu2tNwTfl/gqn5lzdunWzv/zlL9a7d28XnFGQRv9WDTMFN326tr766ivXFCs1CsTcfvvtbhuGDBniAj9r1651+6rrNiUTJkxw26zmpQrIzJw5013/+i22a9fOTaPrRb+Niy66yB0vXUcKsikw6nvmmWdcsFe/jf79+7trTgHaFStWpLj+F1980V1PK1eudMc0tWvk0KFD7jr68ssv3X42bNjQBZIUBP3uu++sXLlydvDgQbccHVsdSzUFVVM6BeO0DjW91G9f5+rOO+901/kNN9zglq99S8kdd9xhL7zwgtu3e+65x+2TrgVtyxtvvBExrY6LplPz0x49etjUqVNdYExBLp0bAAByDA8AgBziwIEDqi7idezYMdl3P//8s7d3797QcOTIkdB3V111lVevXj3v6NGjoXEnT570mjVr5lWvXj007vnnn3fLb968uff7779HLL9FixbuuxkzZoTGbdy40Y3Lnz+/t3z58tD4hQsXuvFani98e3zLli1z002fPj3ZNrRq1cpto+/uu+/2ChQo4O3fvz/F4/Ppp5+6efv37++lx5YtW9z0cXFx3p49eyK+S+8xGzBggFvGihUrQuO0rFKlSrnxWkf4MdTg++STT5Idp6zQo0cPtx19+/aN2Nd27dp5hQsXdteTT9MlJiaGPuvfGnf77bdHLPP666/3ypYtGzEu2jXQpk0b77zzzosYV7VqVbfMBQsWRIzXuS9atKg3ePDgiPH9+vXzSpQo4R06dCjFfdS8JUuW9BISErxff/014rvw60zHQutPbbuPHz/u1a1b17vyyitD48aNG+e2OfxYJdWhQwfvwgsv9FLjX//h1422SfuXlLZT3/mGDx/u5p0zZ06yaf191O/62LFjye4dFSpUiDiH2o+k5zrpOfetW7fOfb7jjjsiprv33nvd+A8++CBimzXuo48+ivi9FClSxLvnnntSPTYAAGQ39PIGAMgxVLtAonXxrpo+qlngD5MmTXLjf/rpJ5fUVzVIVBtBNRY0/Pjjj65Wwtdff23ff/99xLJUcyFpHhd/vaph5FOtEdXyUG2b8BpT/r/VhMoXXmPnt99+c+tXTSvNrxotSanWTnizGtW8UC0aNZ1L6/hEa+qWmhtvvDHUxCfoMVOeJtXqUfMdn5al2iw5jWqA+XTs9Vk1cpI2X4xGtdPC6XzpePnnJOk1cODAAXdM1fxM14k+h1Ntp6RN2NREq0OHDvbKK6+EmuLpmlCtNdUcSy3Xl5qj6VyqFlnSPFBJm28lFb7dqqWnbdX+hV+3uo7lzTffjNrc0Z9GNYVUoyojqOacmgQmrXEYvo/6Xfu5mLSdutZVC01N76L9DtNDvwFRE9Vwqqkk77zzTsR4NXX0a+T5vxfdS8LvFwAA5AQ0eQMA5Bh+oERNW5JSjhk9MO/evdv+9Kc/RTQv0cP3Aw884IZolPRXTbvCH+ajUVO1pA/feshPmq9J4/yH7/DewdQERs3LFIwJz82TNJggSZusqflb0mUmpZw4ouMQRNL9DXLMFOCK1vxQD8ixpMCOHv5PhQIIasaXGiVxVy6bcDVq1HD/T5rnKprUzpd/XtT8S83oli1bliy/kq4B/7pJ7RpUPiAFkD7++GPXtFHBLl3z6h0trWT2Et5ULr3UtE15sdatWxeREyj8t6BeF9WUTE2/FLS66qqrXFMxNe3yE+QPHjzYba+Cjwqmtm7d2jV1U9PKWNA+KjiaFjVNGzNmjMsRpuBuWsc8LfoNaB+1T+EqVqzogmhJg8DRmqPqeknttw0AQHZEQAkAkGPogVuJuKP1UuYHNZI+/Pu1Je69994UkxYnfRBMKf9PtFpLqY0PDxopJ5KCScq1pB7YtC96IFeNp2g1OtKzzGj7odw8n332mQWRdH9P5ZhlNOWfUq6mU6FaQEoCnpHSOl8KdijIUqtWLRs7dqwLQirQpdot48aNS3YNpHQN6nxUqFDBXnrpJRdQ0v8VuGjVqlUG7JW5wJXyJ2ld6j1Rv79ChQq5azk8mba296OPPnLJrVUjR3mZFPhSEvL33nvPHR/V5FNuKAWo9L1qFGmZyqOl5NeZQcdL+YpUo2vQoEEuz5W2TcFeP+h2qtKq6XU6v20AALIjAkoAgBxFSYBVE0IJdMObWaXEr3Wih+CMeuhOD/WKpQS8qhnhU1Ji9UoVK0rsrQd4NVdTQvCkNafSK8gxq1q1qmsCl5QCB7F6ABc1ZVKzrVPh1xZKjQI6anLk10oSJbr2e+Y6XUrArdo9ShAdXkMlvHex9AYjVKtHCbaV8Hvu3LkpNtEMp97HRMHYIMFABX3URE49zinRtk8BpaRUS0dBMw0Kmj3yyCN2//33u330ryM1y1NtJg2qdaZaTA8//LBLEp60KV5Q2sdoweakv0Nd33PmzIm4/lRz7FSvTf0GdP3od6CgmU81x/T71vcAAORG5FACAOQo9913nwucqBcnPbCl9ZZfNRCUX0lN4nbu3Jls+r1791pm0AN/0m1TF+rKgRNLejDWetQEKlrTwNWrV7smP6kJcsyuueYaW758uQvwhX+vnu/S4uf8SU9QTUEhBSVOZVDvWekxceLE0L91DPVZQTUFSE6XH/BJ2tQxWmAmLTq3ah6lHuB0jsObeKZEzcvUZFQ1cRTITG/NGG23givh16lqASqQFS5ac0T1mCZ+MznllAqnGlrKJ6T1hzc9O1Vq7vbpp58m61UtfB+jnQf1yKZmiOH8XhfTc23qNyDqiTGcgmri94QHAEBuQw0lAECOUr16ddfURt1+K0+Pkj+r9ooeELds2eK+U00J5TvyKUF38+bNrV69eq42h2ooKBilh0glCdZDaEZTl+rqAl1N3fQQrXUrn0zZsmVjuh51qa79VXf0al6l4IOOmfIqqdmXasgoH05a0nvMFODTfrVt29Z1Ba8gkbp5V60MdQmfVo0S5ZiZPHmyC3ZoXjVdPNVcNqdDtWPUDEu1yLQN7777rmu6NXTo0IiE5adKAR0FUNq3bx8KBD3zzDMueBctaJeaP/zhDy4X0uzZs12NmIYNG6Y5j/I4qWmdchxdfPHFrpaTgnQ6j8rnlFKQUcEQBUZ0fjWPcmfp2lAtp/Dz++CDD7omb5pe517TqTmbfoe6jvxjoOZ5ypmkZntffvmlC9ppnqCJ5KNREzbVQOrcubMLOCuQqECXrnldY7pP6Heo2klK3K316p6h7/SbDA/AqgmfxqnZnmqtKQeXjnm0HFRarq4bXfcKQKmJpQKsOqZqWneqTTUBAMjuCCgBAHIc9XSlPEFqPqb8LFOnTnW1KPQgq4dE9bilhzyfHgxXrVrl8rSoqZBqSuhBXg/myt+SGSZMmOBqR6jmjmqI6KFaAaWUchSdDgUsFDTQ8Zk+fbqrMaQe6hR4UI2Y9NRoSe8xU04dNWlSjqhHH33UBch0/CtVqmS9evVKdR2q/aOHbjV30jzqbUvblxUBJZ0bBZTuvPNOF5hQgEO1vWJ1fSj4qWDHsGHDXG4qBVa0LgWrFPwISsm5FcxLKxl3OJ0PnUOdp1GjRrnjr6Dj3XffneI8akL53HPPuXmU/0vnRk3tVEspPKCkPEsap9+ieq8rV66cC6zo+vGTjeu61PWvAJWCNwo29evXzx2TWNA1rpxPOm+qpaRrS/urGmZ+gFn5k3bt2uVq36kZn65z5VVScC5pni01rdV1reOj5nlabkpJzTWtgq76rWjdOr+6rpM2pQMAIDfJ55EBEAAAIEdRgFKBDgVxovUaBgAAkNEIKAEAAOQgeheoGniqDRY0qTcAAECs0OQNAAAgBzh8+LDLB6Qgkpp8vvnmm1m9SQAAIA+jhhIAAEAOoOZtymGkROZKuv7www9n9SYBAIA8jIASAAAAAAAAAskfbHIAAAAAAADkdQSUAAAAAAAAEAgBJQAAAAAAAARCQAkAAAAAAACBEFACAAAAAABAIASUAAAAAAAAEAgBJQAAAAAAAARCQAkAAAAAAACBEFACAAAAAABAIASUAAAAAAAAEAgBJQAAAAAAAARCQAkAAAAAAACBEFACAAAAAABAIASUAAAAAAAAEAgBJQAAAAAAAARCQAkAAAAAAACBEFACAAAAAABAIASUAAAAAAAAEAgBJQAAAAAAAARCQAkAAAAAAACBEFACAAAAAABAIASUAAAAAAAAEAgBJeRZn3zyiTVr1sxKlChh+fLls44dO7r/AwAAAEBWmzZtmns+2bp1a1ZvChAVASXkSb/99pt17tzZfvrpJxs3bpy9+OKLVrVq1WTTPfLIIzZ37tws2UYAwKlbunSpjRgxwvbv359hh5EyAgAA5GUElJAnffPNN7Zt2za799577c9//rP96U9/sjFjxtivv/4aMR0PCwCQcwNKI0eOJKAEAACQQQgoIU/as2eP+3/p0qVD4woWLGhFixbNwq0CAAAAgPTzPC/ZS3EgsxBQQp5z2223WYsWLdy/1exN7ZKvuOIK1zQiPIeS/n348GF74YUX3L81aN70mjlzpjVq1MhKlixpcXFxVq9ePZswYUKG7BMA4H90Px80aJD7d7Vq1UL3cD8HxUsvveTuz8WKFbMyZcpY165dbceOHRGH8Ouvv7Ybb7zRKlas6F42nHPOOW66AwcOxKSMeOKJJ1wev7Jly7rt0Pa89tprEdNoe7Vc5dBISuO1n+G+//5769Wrl1WqVMmKFCni9v3OO++048ePc3kAgJlrofC3v/3Natas6e69ugfreSBpjqKkzwVp5TR699133fOF/3f/xRdfbDNmzAh0zD///HO78sor3XapzHnooYfs5MmTyaaLj4+3a6+91hYuXGiNGzd20z/99NPuu2+//dbtj8q24sWL2yWXXGLvvPNOxPxLlixx+zBr1iwbOnSoK+eUU/a6665LVhYCaSmY5hRALvOXv/zFKleu7Jqz9evXz93wK1SoYP/9738jplNepTvuuMOaNGnimsXJ+eefn651LFq0yLp162ZXXXWVPfbYY27cl19+6dbRv3//DNgrAIDvhhtusK+++speeeUVlyevXLlybvxZZ51lDz/8sD3wwAN20003uXv83r177V//+pddfvnltnbtWldzVQGYNm3a2LFjx6xv377uj20Fa+bNm+ea0JUqVeq0ygjRCwb98X7LLbe49eklhB4CtI527doFPpk//PCD2xZtn7anVq1abpsVpDpy5IgVLlyYCwRAnqdOedQkWi8IFLRRYOipp55yL5e/+OILF4QJSkGm22+/3S688EIbMmSIK0dUnixYsMBuvvnmdC1j165d1rJlS/v999/t73//uwvwTJkyxQWLotm0aZN71tBzTe/evV2AbPfu3e5Fhe75esZRsEwvPVTWqCy4/vrrI5ah8lCBpcGDB7vWG+PHj7dWrVrZunXrUlwvkIwH5EEffvihp8t/9uzZoXGJiYluXLgSJUp4PXr0CLz8/v37e3Fxcd7vv/8ek+0FAATzj3/8w93Tt2zZEhq3detWr0CBAt7DDz8cMe1nn33mFSxYMDR+7dq1ycqIaE61jJAjR45EfD5+/LhXt25d78orrwyN07ZrO55//vlk82u8yi1f9+7dvfz583uffPJJsmlPnjx5StsIALlN0nuvLFu2zN1Tp0+fnupzgeh+HF627N+/3ytZsqSXkJDg/frrr6d87x0wYIBb7ooVK0Lj9uzZ45UqVSpZWVa1alU3bsGCBVGX8fHHH4fG/fLLL161atW8+Ph478SJExHPQZUrV/YOHjwYmvbVV1914ydMmJDu7QZo8gZkAL2ZUFMI1VQCAGQPc+bMcc0HVDtp3759oUE1kKpXr24ffvihm041kETNCfSmNyOEv/39+eefXVO6yy67zNasWRN4Wdon9Ujavn171/whqWjNNgAgLwq/96rX5x9//NEuuOAC97f7qdx/9bf+L7/84moVJc3FGuTeO3/+fNc8TTVNfapVq1qs0ahJs2rSJl2G5m/evHlo3BlnnOFqraomlmpghevevbtroufr1KmTnX322W45QHoRUAIygNpm16hRw66++mpXnVbVYFXtFQCQdZQXSZV7FDzSH+rhg5ol+x026A/1gQMH2rPPPuuay+mP9kmTJoXyJ8WCmrbp4UEPIMp1oW1Qs4tTWYea7R08eNDq1q0bs+0DgNxIyauHDx9uVapUcbnmdI/X/VfNhU/l/queo+V077/K7aSyKSk1ZYtG5VS0ZUSbvnbt2qHvwyVdnwJgCq4lzQ8FpIYcSkAGKF++vGt/rLfbStKn4fnn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1So0Ln/+/O7zsmXLos7z1ltvWdOmTV2TtwoVKljdunXtkUcesRMnTmTilgMAAADIsBpKQSmIpDfTjRs3tmPHjtmzzz5rV1xxha1YscIaNmwYdR5Np8F38ODBjN5MAECM7Nu3zwWCFBgKp88bN26MOs+3335rH3zwgd1yyy0ub9LmzZvtb3/7m/3222+WmJgYdR7KCgAAACAXB5Rq1qzpBl+zZs3sm2++sXHjxtmLL74YdZ7Ro0fbyJEjM3rTAADZxMmTJ13T6ClTpliBAgWsUaNG9v3339s//vGPFANKlBUAAABAHmjyFq5Jkybu7XNKhgwZYgcOHAgNO3bsyNTtAwCcunLlyrmg0O7duyPG63PFihVTrM2qXt00n6927dquR1A1oYuGsgIAAADIYwGldevWuYeHlKi7aPUIFz4AAHKGwoULuxpGixcvjqiBpM/KkxTNpZde6l40aDrfV1995coKLS8aygoAAAAgBzV5O3ToUETtoi1btrgAUZkyZezcc891b4zVTGH69Onue3UVXa1aNbvwwgvt6NGjLoeS8mS89957sd0TAEC2MXDgQOvRo4fLn6daqSoLDh8+HOr1rXv37la5cmXXbE3uvPNOmzhxovXv39/69u1rX3/9tUvK3a9fvyzeEwAAAAAxCSitWrXKWrZsGfHQIHpwmDZtmu3cudO2b98e+l5NFe655x4XZCpevLhddNFF9v7770csAwCQu3Tp0sX27t1rw4cPd83W1NPnggULQom6VU6o5zdflSpVbOHChXb33Xe7ckLBJgWXBg8enIV7AQAAACBmASX10OZ5XorfK6gU7r777nMDACBv6dOnjxuiWbJkSbJxag63fPnyTNgyAAAAADkyhxIAAAAAAAByLgJKAAAAAAAACISAEgAAAAAAAAIhoAQAAAAAAIBACCgBAAAAiLlJkyZZfHy8FS1a1BISEmzlypWpTj979myrVauWm75evXo2f/78FKf961//avny5bPx48dz5gAgixBQAgAAABBTs2bNsoEDB1piYqKtWbPG6tevb23atLE9e/ZEnX7p0qXWrVs369Wrl61du9Y6duzohg0bNiSb9o033nC9glaqVImzBgBZiIASAAAAgJgaO3as9e7d23r27Gl16tSxyZMnW/HixW3q1KlRp58wYYK1bdvWBg0aZLVr17ZRo0ZZw4YNbeLEiRHT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WLGid9ddd4W+0zqffPJJr3379u7a8M/H3LlzvT/84Q/uPFSrVs0bMWJEqDaWrqfw60yfo9VwTHo9hk8runbbtm3rrp3y5ct7f/rTn7y9e/dGXC/a1v79+7sajzp2iA3KCsoKyoq0UVZQVuR1lBWUFZQVaaOsuCvXP1fkqYCSHhwbN27s/v322297559/vnfy5Ml0BZT04HrPPfd4F154oWvKo0HjTpw44ZreNG/e3Fu1apW3fPly98Csk+JTsKF169Zpbt9rr73mghRff/21exDXxabgiNYR/pCuYI+m+/bbb12AolOnTu6iCHfjjTeGxilopeDD7bff7q1fv9774osvvJtvvtk9iKspnv9j14P8rbfe6m3YsMEN2U2/fv1csEfBs88//9xtswIvP/74YyjgoP1877333H5ee+217lhp/7Wf48ePd02l/POnPwREPzYFMEaPHu1t2rTJ++c//+kVKFDALSe1gJICRQpgaR6dAy3H//HreipUqJDXqlUrFxRZvXq12zYd99QCSto+3US++uor74UXXnDNu/ztUDMynbM//vGPLviiIE6TJk0yLKB03333uWtCQaBo3/t0HP/yl794F1xwQbJrNWlASUG+JUuWuPN32WWXuWafPv22dM0qaKb9f/XVV91+hs8frSmbmivqu927dyfbPv0+ChYs6I0dO9Ztk66LSZMmhc69buoKNOna0HlUgDK8+aOWq5uumqZ+8803Lnj80UcfufM0bdo0N07nR9eZzpsoqOYHnHWd+UG2pDd+/zrUoMCxjp9+f6L9VOB0yJAh7ngoGK3z3rJly4jrRedHAUgF5sKDczg9lBWUFZQVaaOsoKzI6ygrKCsoK9JGWTEu1z9X5KmAkh5e9eAoevAvV66ce1BNT0AppRxKOukKPqgGkE8Py5rPrz2j2hgKhgSlqKGW49ey8R/S/X0I387w2kgHDhxwD8mq8SQvvviiC0T4wTNRgEXbtXDhwtCPXTVi/ABTdqMaJQrQvPzyy6FxChQpwPT444+HAg6qveVToEn7OGvWrDTbOitiG0412K6++upUA0rPPvtssnOuH6m/Ln0Or2GmQIaOcWoBJQUmw1188cXe4MGD3b91PhUc0Y3Cl1E1lFRbR8tdvHhx1O91zSvCrUHTqVabgma+1Goo+d555x037tdff3WfFdTTzTSa1AJKOi76bsWK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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_bars(binary_results, ['fit_s', 'test_auc', 'auc_drop'], 'German Credit \\u2014 binary classification')"
]
},
{
"cell_type": "markdown",
"id": "afa44e90",
"metadata": {},
"source": [
"Here, **AutoCarver** has dropped 6 columns that were not stable on dev set."
]
},
{
"cell_type": "markdown",
"id": "regression-md",
"metadata": {},
"source": [
"## Regression — California Housing\n",
"\n",
"6 numeric demographic features (Latitude / Longitude dropped — see comment in the next cell), 20,640 rows, target = median house value. Same 60 / 20 / 20 split."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "load-regression",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train=12384, dev=4128, test=4128\n",
"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",
" x <= 1.335e+00 \n",
" 1.1984 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.335e+00 < x <= 1.593e+00 \n",
" 1.0105 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.593e+00 < x <= 1.740e+00 \n",
" 1.1133 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.740e+00 < x <= 1.906e+00 \n",
" 1.1535 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 1.906e+00 < x <= 2.029e+00 \n",
" 1.2090 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" 2.029e+00 < x <= 2.152e+00 \n",
" 1.2141 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 2.152e+00 < x <= 2.243e+00 \n",
" 1.2417 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.243e+00 < x <= 2.350e+00 \n",
" 1.3827 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 2.350e+00 < x <= 2.468e+00 \n",
" 1.3614 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.468e+00 < x <= 2.569e+00 \n",
" 1.4190 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.569e+00 < x <= 2.655e+00 \n",
" 1.5264 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.655e+00 < x <= 2.737e+00 \n",
" 1.5428 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.737e+00 < x <= 2.862e+00 \n",
" 1.5708 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.862e+00 < x <= 2.974e+00 \n",
" 1.6630 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.974e+00 < x <= 3.054e+00 \n",
" 1.6270 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.054e+00 < x <= 3.135e+00 \n",
" 1.7079 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.135e+00 < x <= 3.216e+00 \n",
" 1.8554 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.216e+00 < x <= 3.315e+00 \n",
" 1.8373 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.315e+00 < x <= 3.423e+00 \n",
" 1.9121 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.423e+00 < x <= 3.531e+00 \n",
" 1.9162 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 3.531e+00 < x <= 3.633e+00 \n",
" 1.9678 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.633e+00 < x <= 3.723e+00 \n",
" 2.0226 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.723e+00 < x <= 3.839e+00 \n",
" 1.9891 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 3.839e+00 < x <= 3.971e+00 \n",
" 2.0493 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 3.971e+00 < x <= 4.073e+00 \n",
" 2.0538 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 4.073e+00 < x <= 4.179e+00 \n",
" 2.2004 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 4.179e+00 < x <= 4.315e+00 \n",
" 2.2417 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.315e+00 < x <= 4.464e+00 \n",
" 2.2394 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.464e+00 < x <= 4.611e+00 \n",
" 2.2577 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 4.611e+00 < x <= 4.757e+00 \n",
" 2.4351 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" 4.757e+00 < x <= 4.946e+00 \n",
" 2.3482 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.946e+00 < x <= 5.117e+00 \n",
" 2.4592 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.117e+00 < x <= 5.308e+00 \n",
" 2.5784 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.308e+00 < x <= 5.538e+00 \n",
" 2.6892 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.538e+00 < x <= 5.828e+00 \n",
" 2.7867 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 5.828e+00 < x <= 6.148e+00 \n",
" 3.0943 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 6.148e+00 < x <= 6.599e+00 \n",
" 3.3031 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.599e+00 < x <= 7.313e+00 \n",
" 3.6064 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 7.313e+00 < x <= 8.433e+00 \n",
" 4.0191 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 8.433e+00 < x \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",
" x <= 2.47e+00 \n",
" 1.2093 \n",
" 0.2250 \n",
" 2787 \n",
" \n",
" \n",
" 2.47e+00 < x <= 3.13e+00 \n",
" 1.5796 \n",
" 0.1750 \n",
" 2167 \n",
" \n",
" \n",
" 3.13e+00 < x <= 4.07e+00 \n",
" 1.9560 \n",
" 0.2251 \n",
" 2788 \n",
" \n",
" \n",
" 4.07e+00 < x <= 5.83e+00 \n",
" 2.4238 \n",
" 0.2499 \n",
" 3095 \n",
" \n",
" \n",
" 5.83e+00 < x \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",
" x <= 5.00e+00 \n",
" 2.2358 \n",
" 0.0271 \n",
" 336 \n",
" \n",
" \n",
" 5.00e+00 < x <= 8.00e+00 \n",
" 1.9727 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" 8.00e+00 < x <= 1.10e+01 \n",
" 1.8133 \n",
" 0.0352 \n",
" 436 \n",
" \n",
" \n",
" 1.10e+01 < x <= 1.40e+01 \n",
" 1.8538 \n",
" 0.0468 \n",
" 579 \n",
" \n",
" \n",
" 1.40e+01 < x <= 1.60e+01 \n",
" 1.9355 \n",
" 0.0652 \n",
" 807 \n",
" \n",
" \n",
" 1.60e+01 < x <= 1.70e+01 \n",
" 1.8929 \n",
" 0.0319 \n",
" 395 \n",
" \n",
" \n",
" 1.70e+01 < x <= 1.80e+01 \n",
" 1.9455 \n",
" 0.0276 \n",
" 342 \n",
" \n",
" \n",
" 1.80e+01 < x <= 2.00e+01 \n",
" 1.9470 \n",
" 0.0470 \n",
" 582 \n",
" \n",
" \n",
" 2.00e+01 < x <= 2.30e+01 \n",
" 1.9934 \n",
" 0.0632 \n",
" 783 \n",
" \n",
" \n",
" 2.30e+01 < x <= 2.50e+01 \n",
" 2.1713 \n",
" 0.0480 \n",
" 595 \n",
" \n",
" \n",
" 2.50e+01 < x <= 2.60e+01 \n",
" 2.0937 \n",
" 0.0304 \n",
" 377 \n",
" \n",
" \n",
" 2.60e+01 < x <= 2.70e+01 \n",
" 2.0568 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" 2.70e+01 < x <= 2.80e+01 \n",
" 1.9827 \n",
" 0.0241 \n",
" 299 \n",
" \n",
" \n",
" 2.80e+01 < x <= 2.90e+01 \n",
" 2.0203 \n",
" 0.0232 \n",
" 287 \n",
" \n",
" \n",
" 2.90e+01 < x <= 3.00e+01 \n",
" 2.0515 \n",
" 0.0236 \n",
" 292 \n",
" \n",
" \n",
" 3.00e+01 < x <= 3.20e+01 \n",
" 2.0453 \n",
" 0.0484 \n",
" 599 \n",
" \n",
" \n",
" 3.20e+01 < x <= 3.30e+01 \n",
" 2.0343 \n",
" 0.0316 \n",
" 391 \n",
" \n",
" \n",
" 3.30e+01 < x <= 3.40e+01 \n",
" 2.1357 \n",
" 0.0320 \n",
" 396 \n",
" \n",
" \n",
" 3.40e+01 < x <= 3.50e+01 \n",
" 2.0004 \n",
" 0.0399 \n",
" 494 \n",
" \n",
" \n",
" 3.50e+01 < x <= 3.60e+01 \n",
" 2.1148 \n",
" 0.0437 \n",
" 541 \n",
" \n",
" \n",
" 3.60e+01 < x <= 3.70e+01 \n",
" 2.0004 \n",
" 0.0257 \n",
" 318 \n",
" \n",
" \n",
" 3.70e+01 < x <= 3.90e+01 \n",
" 2.0133 \n",
" 0.0355 \n",
" 440 \n",
" \n",
" \n",
" 3.90e+01 < x <= 4.20e+01 \n",
" 2.0148 \n",
" 0.0440 \n",
" 545 \n",
" \n",
" \n",
" 4.20e+01 < x <= 4.40e+01 \n",
" 2.0742 \n",
" 0.0351 \n",
" 435 \n",
" \n",
" \n",
" 4.40e+01 < x <= 4.70e+01 \n",
" 2.0852 \n",
" 0.0343 \n",
" 425 \n",
" \n",
" \n",
" 4.70e+01 < x \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",
" x <= 2.30e+01 \n",
" 1.9466 \n",
" 0.3703 \n",
" 4586 \n",
" \n",
" \n",
" 2.30e+01 < x <= 2.60e+01 \n",
" 2.1412 \n",
" 0.0785 \n",
" 972 \n",
" \n",
" \n",
" 2.60e+01 < x <= 3.60e+01 \n",
" 2.0526 \n",
" 0.2909 \n",
" 3602 \n",
" \n",
" \n",
" 3.60e+01 < x <= 4.70e+01 \n",
" 2.0381 \n",
" 0.1747 \n",
" 2163 \n",
" \n",
" \n",
" 4.70e+01 < x \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",
" x <= 3.066e+00 \n",
" 1.9506 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.066e+00 < x <= 3.432e+00 \n",
" 1.8880 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.432e+00 < x <= 3.647e+00 \n",
" 1.8233 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.647e+00 < x <= 3.792e+00 \n",
" 1.8292 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.792e+00 < x <= 3.933e+00 \n",
" 1.7847 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.933e+00 < x <= 4.052e+00 \n",
" 1.8499 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.052e+00 < x <= 4.168e+00 \n",
" 1.8718 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.168e+00 < x <= 4.276e+00 \n",
" 1.8333 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.276e+00 < x <= 4.365e+00 \n",
" 1.7965 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.365e+00 < x <= 4.454e+00 \n",
" 1.6952 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.454e+00 < x <= 4.536e+00 \n",
" 1.7535 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.536e+00 < x <= 4.621e+00 \n",
" 1.7952 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.621e+00 < x <= 4.705e+00 \n",
" 1.8465 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.705e+00 < x <= 4.794e+00 \n",
" 1.7486 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.794e+00 < x <= 4.874e+00 \n",
" 1.7719 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.874e+00 < x <= 4.941e+00 \n",
" 1.7219 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 4.941e+00 < x <= 5.014e+00 \n",
" 1.7176 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 5.014e+00 < x <= 5.088e+00 \n",
" 1.7707 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.088e+00 < x <= 5.160e+00 \n",
" 1.7918 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.160e+00 < x <= 5.233e+00 \n",
" 1.7791 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.233e+00 < x <= 5.315e+00 \n",
" 1.8209 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.315e+00 < x <= 5.384e+00 \n",
" 1.9107 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.384e+00 < x <= 5.460e+00 \n",
" 1.7728 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.460e+00 < x <= 5.532e+00 \n",
" 1.8996 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.532e+00 < x <= 5.616e+00 \n",
" 1.8872 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.616e+00 < x <= 5.694e+00 \n",
" 1.9905 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.694e+00 < x <= 5.778e+00 \n",
" 2.0029 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.778e+00 < x <= 5.858e+00 \n",
" 2.0107 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.858e+00 < x <= 5.959e+00 \n",
" 2.1137 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 5.959e+00 < x <= 6.059e+00 \n",
" 2.0469 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.059e+00 < x <= 6.157e+00 \n",
" 2.1450 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 6.157e+00 < x <= 6.270e+00 \n",
" 2.2477 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.270e+00 < x <= 6.396e+00 \n",
" 2.3495 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 6.396e+00 < x <= 6.543e+00 \n",
" 2.4232 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.543e+00 < x <= 6.717e+00 \n",
" 2.6241 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.717e+00 < x <= 6.946e+00 \n",
" 2.7573 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 6.946e+00 < x <= 7.233e+00 \n",
" 3.0763 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 7.233e+00 < x <= 7.637e+00 \n",
" 3.1118 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 7.637e+00 < x <= 8.324e+00 \n",
" 3.5846 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 8.324e+00 < x \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",
" x <= 3.43e+00 \n",
" 1.9193 \n",
" 0.0501 \n",
" 620 \n",
" \n",
" \n",
" 3.43e+00 < x <= 5.62e+00 \n",
" 1.8031 \n",
" 0.5749 \n",
" 7120 \n",
" \n",
" \n",
" 5.62e+00 < x <= 6.16e+00 \n",
" 2.0516 \n",
" 0.1500 \n",
" 1857 \n",
" \n",
" \n",
" 6.16e+00 < x <= 6.54e+00 \n",
" 2.3401 \n",
" 0.0750 \n",
" 929 \n",
" \n",
" \n",
" 6.54e+00 < x \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",
" x <= 9.1220e-01 \n",
" 2.0511 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 9.1220e-01 < x <= 9.4022e-01 \n",
" 2.1264 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 9.4022e-01 < x <= 9.5595e-01 \n",
" 2.0638 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 9.5595e-01 < x <= 9.6743e-01 \n",
" 2.0756 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 9.6743e-01 < x <= 9.7590e-01 \n",
" 2.2562 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 9.7590e-01 < x <= 9.8343e-01 \n",
" 2.1709 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 9.8343e-01 < x <= 9.8987e-01 \n",
" 2.1450 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 9.8987e-01 < x <= 9.9592e-01 \n",
" 2.1772 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 9.9592e-01 < x <= 1.0019e+00 \n",
" 2.1915 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 1.0019e+00 < x <= 1.0068e+00 \n",
" 2.0949 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.0068e+00 < x <= 1.0112e+00 \n",
" 2.2440 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0112e+00 < x <= 1.0156e+00 \n",
" 2.1687 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0156e+00 < x <= 1.0204e+00 \n",
" 2.1723 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.0204e+00 < x <= 1.0250e+00 \n",
" 2.2003 \n",
" 0.0254 \n",
" 314 \n",
" \n",
" \n",
" 1.0250e+00 < x <= 1.0290e+00 \n",
" 2.1324 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" 1.0290e+00 < x <= 1.0331e+00 \n",
" 2.1840 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0331e+00 < x <= 1.0369e+00 \n",
" 2.0321 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.0369e+00 < x <= 1.0412e+00 \n",
" 2.1746 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0412e+00 < x <= 1.0453e+00 \n",
" 2.2536 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.0453e+00 < x <= 1.0493e+00 \n",
" 2.1546 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0493e+00 < x <= 1.0534e+00 \n",
" 2.0738 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 1.0534e+00 < x <= 1.0574e+00 \n",
" 2.1224 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.0574e+00 < x <= 1.0615e+00 \n",
" 2.0414 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0615e+00 < x <= 1.0662e+00 \n",
" 2.1569 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 1.0662e+00 < x <= 1.0712e+00 \n",
" 2.0972 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.0712e+00 < x <= 1.0763e+00 \n",
" 2.0714 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.0763e+00 < x <= 1.0816e+00 \n",
" 2.0244 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.0816e+00 < x <= 1.0874e+00 \n",
" 2.0135 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 1.0874e+00 < x <= 1.0933e+00 \n",
" 2.2239 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.0933e+00 < x <= 1.1000e+00 \n",
" 2.0244 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" 1.1000e+00 < x <= 1.1071e+00 \n",
" 2.0077 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" 1.1071e+00 < x <= 1.1160e+00 \n",
" 1.9564 \n",
" 0.0245 \n",
" 304 \n",
" \n",
" \n",
" 1.1160e+00 < x <= 1.1267e+00 \n",
" 2.0077 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.1267e+00 < x <= 1.1387e+00 \n",
" 1.9305 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.1387e+00 < x <= 1.1538e+00 \n",
" 1.8130 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" 1.1538e+00 < x <= 1.1739e+00 \n",
" 1.8060 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" 1.1739e+00 < x <= 1.2074e+00 \n",
" 1.9109 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.2074e+00 < x <= 1.2730e+00 \n",
" 1.8950 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.2730e+00 < x <= 1.5018e+00 \n",
" 1.7962 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.5018e+00 < x \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",
" x <= 1.049e+00 \n",
" 2.1535 \n",
" 0.5000 \n",
" 6192 \n",
" \n",
" \n",
" 1.049e+00 < x <= 1.093e+00 \n",
" 2.0915 \n",
" 0.2250 \n",
" 2787 \n",
" \n",
" \n",
" 1.093e+00 < x <= 1.139e+00 \n",
" 1.9857 \n",
" 0.1249 \n",
" 1547 \n",
" \n",
" \n",
" 1.139e+00 < x <= 1.273e+00 \n",
" 1.8563 \n",
" 0.1000 \n",
" 1238 \n",
" \n",
" \n",
" 1.273e+00 < x \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",
" x <= 2.08e+02 \n",
" 1.9050 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 2.08e+02 < x <= 3.53e+02 \n",
" 2.0277 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 3.53e+02 < x <= 4.42e+02 \n",
" 2.0655 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.42e+02 < x <= 5.12e+02 \n",
" 2.2067 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 5.12e+02 < x <= 5.75e+02 \n",
" 2.1327 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 5.75e+02 < x <= 6.27e+02 \n",
" 2.0731 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 6.27e+02 < x <= 6.75e+02 \n",
" 2.3627 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 6.75e+02 < x <= 7.16e+02 \n",
" 2.2006 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 7.16e+02 < x <= 7.56e+02 \n",
" 2.0900 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" 7.56e+02 < x <= 7.94e+02 \n",
" 2.0191 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 7.94e+02 < x <= 8.32e+02 \n",
" 2.3248 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 8.32e+02 < x <= 8.67e+02 \n",
" 2.0763 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" 8.67e+02 < x <= 9.02e+02 \n",
" 2.0313 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" 9.02e+02 < x <= 9.40e+02 \n",
" 2.1185 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" 9.40e+02 < x <= 9.78e+02 \n",
" 2.1790 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" 9.78e+02 < x <= 1.02e+03 \n",
" 2.0746 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.02e+03 < x <= 1.06e+03 \n",
" 1.9522 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" 1.06e+03 < x <= 1.09e+03 \n",
" 2.1186 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.09e+03 < x <= 1.13e+03 \n",
" 2.0592 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 1.13e+03 < x <= 1.17e+03 \n",
" 2.0640 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" 1.17e+03 < x <= 1.22e+03 \n",
" 2.0134 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.22e+03 < x <= 1.26e+03 \n",
" 2.1690 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.26e+03 < x <= 1.30e+03 \n",
" 2.0558 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" 1.30e+03 < x <= 1.35e+03 \n",
" 1.9711 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" 1.35e+03 < x <= 1.41e+03 \n",
" 2.0185 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.41e+03 < x <= 1.46e+03 \n",
" 2.0004 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 1.46e+03 < x <= 1.52e+03 \n",
" 2.0911 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" 1.52e+03 < x <= 1.59e+03 \n",
" 2.1322 \n",
" 0.0254 \n",
" 315 \n",
" \n",
" \n",
" 1.59e+03 < x <= 1.66e+03 \n",
" 1.9949 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" 1.66e+03 < x <= 1.73e+03 \n",
" 2.0233 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.73e+03 < x <= 1.82e+03 \n",
" 1.8946 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" 1.82e+03 < x <= 1.91e+03 \n",
" 1.9504 \n",
" 0.0247 \n",
" 306 \n",
" \n",
" \n",
" 1.91e+03 < x <= 2.02e+03 \n",
" 2.0074 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.02e+03 < x <= 2.16e+03 \n",
" 2.0213 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.16e+03 < x <= 2.32e+03 \n",
" 2.0541 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.32e+03 < x <= 2.56e+03 \n",
" 2.0757 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.56e+03 < x <= 2.86e+03 \n",
" 2.0142 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.86e+03 < x <= 3.28e+03 \n",
" 1.9196 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.28e+03 < x <= 4.25e+03 \n",
" 2.0439 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.25e+03 < x \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",
" x <= 3.53e+02 \n",
" 1.9663 \n",
" 0.0502 \n",
" 622 \n",
" \n",
" \n",
" 3.53e+02 < x <= 8.32e+02 \n",
" 2.1636 \n",
" 0.2253 \n",
" 2790 \n",
" \n",
" \n",
" 8.32e+02 < x <= 1.73e+03 \n",
" 2.0604 \n",
" 0.4745 \n",
" 5876 \n",
" \n",
" \n",
" 1.73e+03 < x <= 2.16e+03 \n",
" 1.9683 \n",
" 0.1000 \n",
" 1239 \n",
" \n",
" \n",
" 2.16e+03 < x \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",
" x <= 1.699e+00 \n",
" 2.6141 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.699e+00 < x <= 1.868e+00 \n",
" 2.7986 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 1.868e+00 < x <= 1.976e+00 \n",
" 2.6979 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 1.976e+00 < x <= 2.071e+00 \n",
" 2.5558 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.071e+00 < x <= 2.161e+00 \n",
" 2.4582 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.161e+00 < x <= 2.228e+00 \n",
" 2.2757 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.228e+00 < x <= 2.288e+00 \n",
" 2.3592 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.288e+00 < x <= 2.341e+00 \n",
" 2.2507 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.341e+00 < x <= 2.388e+00 \n",
" 2.1371 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.388e+00 < x <= 2.435e+00 \n",
" 2.2708 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.435e+00 < x <= 2.475e+00 \n",
" 2.1989 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.475e+00 < x <= 2.515e+00 \n",
" 2.1564 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.515e+00 < x <= 2.557e+00 \n",
" 2.1279 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.557e+00 < x <= 2.598e+00 \n",
" 2.2428 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.598e+00 < x <= 2.639e+00 \n",
" 2.1116 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.639e+00 < x <= 2.674e+00 \n",
" 2.2343 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.674e+00 < x <= 2.712e+00 \n",
" 2.0489 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.712e+00 < x <= 2.746e+00 \n",
" 2.2196 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.746e+00 < x <= 2.784e+00 \n",
" 2.1211 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.784e+00 < x <= 2.824e+00 \n",
" 2.2645 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 2.824e+00 < x <= 2.861e+00 \n",
" 2.1565 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 2.861e+00 < x <= 2.899e+00 \n",
" 2.2323 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.899e+00 < x <= 2.943e+00 \n",
" 2.0714 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.943e+00 < x <= 2.984e+00 \n",
" 2.0495 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 2.984e+00 < x <= 3.026e+00 \n",
" 1.9917 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.026e+00 < x <= 3.071e+00 \n",
" 1.9623 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.071e+00 < x <= 3.117e+00 \n",
" 2.0491 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.117e+00 < x <= 3.168e+00 \n",
" 1.9336 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.168e+00 < x <= 3.221e+00 \n",
" 1.9472 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.221e+00 < x <= 3.279e+00 \n",
" 1.8938 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.279e+00 < x <= 3.344e+00 \n",
" 1.8804 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.344e+00 < x <= 3.424e+00 \n",
" 1.8724 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.424e+00 < x <= 3.508e+00 \n",
" 1.8000 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.508e+00 < x <= 3.606e+00 \n",
" 1.6571 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.606e+00 < x <= 3.719e+00 \n",
" 1.5624 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.719e+00 < x <= 3.870e+00 \n",
" 1.5709 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 3.870e+00 < x <= 4.089e+00 \n",
" 1.4854 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.089e+00 < x <= 4.317e+00 \n",
" 1.4240 \n",
" 0.0250 \n",
" 309 \n",
" \n",
" \n",
" 4.317e+00 < x <= 4.705e+00 \n",
" 1.3233 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 4.705e+00 < x \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",
" x <= 2.16e+00 \n",
" 2.6250 \n",
" 0.1250 \n",
" 1548 \n",
" \n",
" \n",
" 2.16e+00 < x <= 2.90e+00 \n",
" 2.2005 \n",
" 0.4251 \n",
" 5264 \n",
" \n",
" \n",
" 2.90e+00 < x <= 3.51e+00 \n",
" 1.9501 \n",
" 0.2749 \n",
" 3404 \n",
" \n",
" \n",
" 3.51e+00 < x <= 3.87e+00 \n",
" 1.5968 \n",
" 0.0750 \n",
" 929 \n",
" \n",
" \n",
" 3.87e+00 < x \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",
" x <= 3.275e+01 \n",
" 1.5912 \n",
" 0.0287 \n",
" 355 \n",
" \n",
" \n",
" 3.275e+01 < x <= 3.321e+01 \n",
" 2.0299 \n",
" 0.0466 \n",
" 577 \n",
" \n",
" \n",
" 3.321e+01 < x <= 3.365e+01 \n",
" 2.7833 \n",
" 0.0279 \n",
" 345 \n",
" \n",
" \n",
" 3.365e+01 < x <= 3.374e+01 \n",
" 2.4326 \n",
" 0.0268 \n",
" 332 \n",
" \n",
" \n",
" 3.374e+01 < x <= 3.379e+01 \n",
" 2.1829 \n",
" 0.0262 \n",
" 325 \n",
" \n",
" \n",
" 3.379e+01 < x <= 3.383e+01 \n",
" 2.4232 \n",
" 0.0229 \n",
" 283 \n",
" \n",
" \n",
" 3.383e+01 < x <= 3.387e+01 \n",
" 2.3003 \n",
" 0.0241 \n",
" 299 \n",
" \n",
" \n",
" 3.387e+01 < x <= 3.391e+01 \n",
" 2.1570 \n",
" 0.0279 \n",
" 345 \n",
" \n",
" \n",
" 3.391e+01 < x <= 3.394e+01 \n",
" 1.6300 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" 3.394e+01 < x <= 3.397e+01 \n",
" 1.8594 \n",
" 0.0225 \n",
" 279 \n",
" \n",
" \n",
" 3.397e+01 < x <= 3.400e+01 \n",
" 1.9482 \n",
" 0.0224 \n",
" 278 \n",
" \n",
" \n",
" 3.400e+01 < x <= 3.403e+01 \n",
" 2.1267 \n",
" 0.0277 \n",
" 343 \n",
" \n",
" \n",
" 3.403e+01 < x <= 3.406e+01 \n",
" 2.4021 \n",
" 0.0339 \n",
" 420 \n",
" \n",
" \n",
" 3.406e+01 < x <= 3.410e+01 \n",
" 2.1760 \n",
" 0.0417 \n",
" 516 \n",
" \n",
" \n",
" 3.410e+01 < x <= 3.413e+01 \n",
" 2.3646 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" 3.413e+01 < x <= 3.417e+01 \n",
" 2.7771 \n",
" 0.0301 \n",
" 373 \n",
" \n",
" \n",
" 3.417e+01 < x <= 3.427e+01 \n",
" 2.4100 \n",
" 0.0435 \n",
" 539 \n",
" \n",
" \n",
" 3.427e+01 < x <= 3.453e+01 \n",
" 2.4559 \n",
" 0.0240 \n",
" 297 \n",
" \n",
" \n",
" 3.453e+01 < x <= 3.532e+01 \n",
" 1.4914 \n",
" 0.0246 \n",
" 305 \n",
" \n",
" \n",
" 3.532e+01 < x <= 3.623e+01 \n",
" 0.9208 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.623e+01 < x <= 3.672e+01 \n",
" 1.2441 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" 3.672e+01 < x <= 3.697e+01 \n",
" 1.3129 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" 3.697e+01 < x <= 3.729e+01 \n",
" 2.6241 \n",
" 0.0239 \n",
" 296 \n",
" \n",
" \n",
" 3.729e+01 < x <= 3.737e+01 \n",
" 2.6574 \n",
" 0.0258 \n",
" 320 \n",
" \n",
" \n",
" 3.737e+01 < x <= 3.753e+01 \n",
" 3.0105 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" 3.753e+01 < x <= 3.765e+01 \n",
" 2.4197 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" 3.765e+01 < x <= 3.772e+01 \n",
" 2.1174 \n",
" 0.0256 \n",
" 317 \n",
" \n",
" \n",
" 3.772e+01 < x <= 3.777e+01 \n",
" 2.5537 \n",
" 0.0286 \n",
" 354 \n",
" \n",
" \n",
" 3.777e+01 < x <= 3.793e+01 \n",
" 2.6887 \n",
" 0.0459 \n",
" 569 \n",
" \n",
" \n",
" 3.793e+01 < x <= 3.800e+01 \n",
" 1.7622 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" 3.800e+01 < x <= 3.826e+01 \n",
" 1.5924 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" 3.826e+01 < x <= 3.850e+01 \n",
" 1.8570 \n",
" 0.0254 \n",
" 315 \n",
" \n",
" \n",
" 3.850e+01 < x <= 3.863e+01 \n",
" 1.3981 \n",
" 0.0241 \n",
" 298 \n",
" \n",
" \n",
" 3.863e+01 < x <= 3.898e+01 \n",
" 1.3962 \n",
" 0.0251 \n",
" 311 \n",
" \n",
" \n",
" 3.898e+01 < x <= 3.975e+01 \n",
" 1.1241 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" 3.975e+01 < x \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",
" x <= 3.45e+01 \n",
" 2.2311 \n",
" 0.5254 \n",
" 6506 \n",
" \n",
" \n",
" 3.45e+01 < x <= 3.70e+01 \n",
" 1.2415 \n",
" 0.1011 \n",
" 1252 \n",
" \n",
" \n",
" 3.70e+01 < x <= 3.79e+01 \n",
" 2.5927 \n",
" 0.1997 \n",
" 2473 \n",
" \n",
" \n",
" 3.79e+01 < x <= 3.90e+01 \n",
" 1.6035 \n",
" 0.1240 \n",
" 1535 \n",
" \n",
" \n",
" 3.90e+01 < x \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",
" x <= -1.2269e+02 \n",
" 1.4063 \n",
" 0.0259 \n",
" 321 \n",
" \n",
" \n",
" -1.2269e+02 < x <= -1.2247e+02 \n",
" 2.8878 \n",
" 0.0259 \n",
" 321 \n",
" \n",
" \n",
" -1.2247e+02 < x <= -1.2241e+02 \n",
" 3.2397 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" -1.2241e+02 < x <= -1.2229e+02 \n",
" 2.1582 \n",
" 0.0262 \n",
" 324 \n",
" \n",
" \n",
" -1.2229e+02 < x <= -1.2215e+02 \n",
" 2.3071 \n",
" 0.0476 \n",
" 589 \n",
" \n",
" \n",
" -1.2215e+02 < x <= -1.2206e+02 \n",
" 2.5665 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" -1.2206e+02 < x <= -1.2199e+02 \n",
" 2.6265 \n",
" 0.0253 \n",
" 313 \n",
" \n",
" \n",
" -1.2199e+02 < x <= -1.2191e+02 \n",
" 2.6924 \n",
" 0.0237 \n",
" 294 \n",
" \n",
" \n",
" -1.2191e+02 < x <= -1.2181e+02 \n",
" 2.2919 \n",
" 0.0255 \n",
" 316 \n",
" \n",
" \n",
" -1.2181e+02 < x <= -1.2157e+02 \n",
" 1.7103 \n",
" 0.0242 \n",
" 300 \n",
" \n",
" \n",
" -1.2157e+02 < x <= -1.2139e+02 \n",
" 1.1736 \n",
" 0.0252 \n",
" 312 \n",
" \n",
" \n",
" -1.2139e+02 < x <= -1.2127e+02 \n",
" 1.3270 \n",
" 0.0263 \n",
" 326 \n",
" \n",
" \n",
" -1.2127e+02 < x <= -1.2101e+02 \n",
" 1.4857 \n",
" 0.0238 \n",
" 295 \n",
" \n",
" \n",
" -1.2101e+02 < x <= -1.2064e+02 \n",
" 1.4716 \n",
" 0.0245 \n",
" 304 \n",
" \n",
" \n",
" -1.2064e+02 < x <= -1.2007e+02 \n",
" 1.3376 \n",
" 0.0254 \n",
" 314 \n",
" \n",
" \n",
" -1.2007e+02 < x <= -1.1972e+02 \n",
" 1.2624 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" -1.1972e+02 < x <= -1.1929e+02 \n",
" 1.3332 \n",
" 0.0239 \n",
" 296 \n",
" \n",
" \n",
" -1.1929e+02 < x <= -1.1897e+02 \n",
" 1.3300 \n",
" 0.0250 \n",
" 310 \n",
" \n",
" \n",
" -1.1897e+02 < x <= -1.1852e+02 \n",
" 2.7211 \n",
" 0.0258 \n",
" 319 \n",
" \n",
" \n",
" -1.1852e+02 < x <= -1.1843e+02 \n",
" 3.1653 \n",
" 0.0284 \n",
" 352 \n",
" \n",
" \n",
" -1.1843e+02 < x <= -1.1838e+02 \n",
" 3.4432 \n",
" 0.0238 \n",
" 295 \n",
" \n",
" \n",
" -1.1838e+02 < x <= -1.1834e+02 \n",
" 2.7480 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" -1.1834e+02 < x <= -1.1830e+02 \n",
" 2.3435 \n",
" 0.0271 \n",
" 336 \n",
" \n",
" \n",
" -1.1830e+02 < x <= -1.1822e+02 \n",
" 1.7476 \n",
" 0.0480 \n",
" 594 \n",
" \n",
" \n",
" -1.1822e+02 < x <= -1.1818e+02 \n",
" 1.8055 \n",
" 0.0227 \n",
" 281 \n",
" \n",
" \n",
" -1.1818e+02 < x <= -1.1813e+02 \n",
" 2.1480 \n",
" 0.0287 \n",
" 356 \n",
" \n",
" \n",
" -1.1813e+02 < x <= -1.1808e+02 \n",
" 2.2494 \n",
" 0.0243 \n",
" 301 \n",
" \n",
" \n",
" -1.1808e+02 < x <= -1.1801e+02 \n",
" 2.4079 \n",
" 0.0245 \n",
" 303 \n",
" \n",
" \n",
" -1.1801e+02 < x <= -1.1790e+02 \n",
" 2.2304 \n",
" 0.0468 \n",
" 580 \n",
" \n",
" \n",
" -1.1790e+02 < x <= -1.1780e+02 \n",
" 2.4820 \n",
" 0.0266 \n",
" 329 \n",
" \n",
" \n",
" -1.1780e+02 < x <= -1.1766e+02 \n",
" 2.2864 \n",
" 0.0248 \n",
" 307 \n",
" \n",
" \n",
" -1.1766e+02 < x <= -1.1739e+02 \n",
" 1.6791 \n",
" 0.0237 \n",
" 294 \n",
" \n",
" \n",
" -1.1739e+02 < x <= -1.1725e+02 \n",
" 1.6380 \n",
" 0.0290 \n",
" 359 \n",
" \n",
" \n",
" -1.1725e+02 < x <= -1.1716e+02 \n",
" 2.0512 \n",
" 0.0229 \n",
" 284 \n",
" \n",
" \n",
" -1.1716e+02 < x <= -1.1708e+02 \n",
" 1.5113 \n",
" 0.0249 \n",
" 308 \n",
" \n",
" \n",
" -1.1708e+02 < x <= -1.1696e+02 \n",
" 1.6669 \n",
" 0.0235 \n",
" 291 \n",
" \n",
" \n",
" -1.1696e+02 < x \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",
" x <= -1.218e+02 \n",
" 2.4438 \n",
" 0.2509 \n",
" 3107 \n",
" \n",
" \n",
" -1.218e+02 < x <= -1.190e+02 \n",
" 1.3787 \n",
" 0.2242 \n",
" 2776 \n",
" \n",
" \n",
" -1.190e+02 < x <= -1.183e+02 \n",
" 3.0175 \n",
" 0.1029 \n",
" 1274 \n",
" \n",
" \n",
" -1.183e+02 < x <= -1.177e+02 \n",
" 2.1601 \n",
" 0.2735 \n",
" 3387 \n",
" \n",
" \n",
" -1.177e+02 < x \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.141 \n",
" 0.0694 \n",
" 0.6652 \n",
" 0.6595 \n",
" 0.0057 \n",
" \n",
" \n",
" 1 \n",
" optbinning \n",
" 2.655 \n",
" 0.0096 \n",
" 0.5145 \n",
" 0.5077 \n",
" 0.0068 \n",
" \n",
" \n",
" 2 \n",
" KBinsDiscretizer \n",
" 0.008 \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.141 0.0694 0.6652 0.6595 0.0057\n",
"1 optbinning 2.655 0.0096 0.5145 0.5077 0.0068\n",
"2 KBinsDiscretizer 0.008 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": "iVBORw0KGgoAAAANSUhEUgAABJ0AAAFcCAYAAABiPM/xAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUbtJREFUeJzt3Qd0VNXWwPEdEpPQEpoQwEhoSicSBCkCPtFQRPApIpYgIjbQ8FBQEBOaoghIfaAogggfiAoqYhQp+hQUqYIUQcGgSFPpTcL91j5v3XkzySRkwp2Uyf+31jXMnXP7nTnePefsE2RZliUAAAAAAACAg4o4uTIAAAAAAACAoBMAAAAAAAD8gpZOAAAAAAAAcBxBJwAAAAAAADiOoBMAAAAAAAAcR9AJAAAAAAAAjiPoBAAAAAAAAMcRdAIAAAAAAIDjCDoBAAAAAADAcQSdAADIJ9q0aWMm2549eyQoKEhmzpzpUS4lJUViY2MlPDzcvH/kyJFc3U/dH92u7l9hMnToUHPcKNhWrlxprqP+BQAA/kXQCQCAHPrpp5/k4YcflmrVqpkAUEREhLRo0UImTJggp0+f9st5/eOPP+TOO++UokWLypQpU2T27NlSvHhxKcjsINbatWu9vq+BuHr16uX6fgEAAODShFzi8gAAFEoff/yxdO3aVcLCwiQhIcEERc6dOydfffWVDBgwQH744Qd57bXXLmkbVapUMcGryy67zDXvu+++k+PHj8uIESOkbdu2khfuu+8+ueuuu8yxFyZDhgyRZ555Jq93A5eoVatW5nMVGhrKuQQAwM8IOgEA4KPdu3eboIsGhZYvXy4VK1Z0vdenTx/ZtWuXCUpdKm39oy2o3B08eND8LVWqlGPX7eTJkz61lgoODjZTYRMSEmKmQGZZlpw5c8a0pMsNvt57TihSpEiGzxUAAPAPutcBAOCj0aNHy4kTJ+SNN97wCDjZatSoIYmJia7Xb775pvzjH/+Q8uXLm9ZBderUkalTp150O+lzOmk3sx49eph/X3vttea9+++/31V+wYIFEhcXZwIG5cqVk3vvvVd+++03j3Vq+RIlSpiugR06dJCSJUvKPffcY97T9fXt21cWLVpkWm7pvtatW9fkkLpYTqcPPvhAOnbsKJUqVTLLVa9e3bTGSktLE384f/68Wb9uR7cXExMjgwcPlrNnz3qU0/3UXEzpaXn3c/f333/LsGHDpGbNmiYgUbZsWWnZsqUsXbo0y5xO2T1nSnMINW7c2Kxf9/vVV1/N8zxReh5uueUW+fTTT82+6b2j+6U0V1i/fv0kOjraHJfe1y+99JJcuHAhQ5dPbf2m3Us1GKr36KZNmzLkI8vq3tN1jh8/3pw7PT8VKlQwXVf/+usvj21pF8z4+Hhzf+u+Vq1aVR544AGPMvPmzTOfA12/7lP9+vVNl9eL5XTy5fOj87t06WL+ffnll8tTTz3lt3sdAICCLLB/rgMAwA8++ugjk8epefPm2SqvASZ9mL711ltNSxld/rHHHjMP2toyKrueffZZufrqq023veHDh5sHbg1eKH2479mzpwlGjRo1Sg4cOGAetL/++mvZsGGDR8soDdjog7sGVcaMGSPFihVzvafdA99//32zf/rQPnHiRLn99tslNTXVBGIyo9vXB/D+/fubv9oCLCkpSY4dOyYvv/xyto7v6NGjcvjw4QzzNSCU3oMPPiizZs2SO+64Q5588kn59ttvzXFv27ZNFi5cKL7S4I8ur+tt0qSJ2W8NcKxfv15uuummLJfNzjnTa9CuXTsTpNTglgYo9BpqwCKv7dixQ7p3726CPL179zb32KlTp6R169YmuKLzr7zySlm1apUMGjRIfv/9dxMgUnoPd+rUSdasWSOPPvqo1KpVywQg7eBoepnde7oN+x5+4oknTGvCyZMnm/Om97B2MdVWfjfffLM5Z9rNUe9pDXzqubdpkFCP5cYbbzQBMqX3hK7DPRCcni+fH712egxNmzY1x/D555/L2LFjzWdRzwEAAHBjAQCAbDt69Kil1Wfnzp2zvcypU6cyzIuPj7eqVavmMa9169Zmsu3evdts680333TN03/rvO+++84179y5c1b58uWtevXqWadPn3bNX7x4sSmblJTkmtejRw8z75lnnsmwTzo/NDTU2rVrl2vepk2bzPxJkyZl2Afdv6yO8eGHH7aKFStmnTlzJsvzY68vq6lu3bqu8hs3bjTzHnzwQY/1PPXUU2b+8uXLPY4pOTk5wzarVKlizoWtYcOGVseOHbPcT11P+v91yu4569SpkzkXv/32m2vezp07rZCQkAzrzE16HnT7KSkpHvNHjBhhFS9e3Prxxx895ut9ExwcbKWmpprX7733nll+/PjxrjJpaWnWP/7xjwz3bmb3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Xjz22GNmmFNtiqrNV3XY05SUFM4VAAQIzdOk3SA0wKT/g+4+aXdqe8AKzQPVv39/ef311023CO1qN2XKFFc+J6fodrKSlpZm8khpfo53331XKlWq5Oj2AQDOf39rfqTbbrvN5GLSesQXv/zyi/mr9VR6V199dbb2xV6Ht/I6Erj+2KI/tLtLvz3tLq45qhgpDzlFTifAi/Lly5tfBfSX7U8++cRM2kc6ISHBJIoFABRs2spJE6bq93twcHCG90uUKOH699ixY82vxB988IHJr6H5BO1cF5nl1fCVtl7KSu/evU0eqTlz5vj0SzkAwL8y+/7WQSluvvlm00pJWwnp4ET+drG6JCfcB2oCcoKgEwLapXxJ6vCinTp1MpM+nGjrp1dffdUkna1Ro4aj+wkAyN26QH+51ZZO+quwtmy9GB3BVKchQ4bIqlWrTALWadOmuYa+9uf/lOvoe/rDh45IpINcAADyN034rQEnHYRi2bJlUrFiRZ/XUaVKFVfL3PR27Njh0zq8lddWWNqCV0e0c6fbc28xtWvXLvMslD7hOJBddK9DQNMvUR1dKCcVhTttUqp9n5VWHgCAgsP+H2r3+kBHtdMWTppnI/1oQ/rargeOHTsm58+f93hfg09aL7jXBzmtby7m5ZdfNkNgDx48mNFTAaAA0O5qHTp0MCOdagsnb93jskMDVbGxsaaXhXuXbs05q12tfV2Hex21ZcsW03JX9zM97ULuTke6U5p2BMgJWjohoMXFxZlhQseNG2fyX2jUvmnTphddToe+/vPPP00XBu06of2h9QtXv7S1/zMAoGDVBerZZ581eZEuu+wy04pVWykNGjTI5Kno0qWL6fqwe/duWbhwoRlu+qmnnpLly5dL3759TQJvbRGlAajZs2ebgJUmbL3U+iYruh8DBw40Dyxa97z99tse72sS2AoVKlzSNgAAzrrnnntkzZo1Jies5gjUyb3rttY32aVduTt27CgtW7Y069PnE30mqVu3rpw4cSLbP15owKhZs2bSq1cvOX36tFmHdvsbOnRohvJaD956663Srl07Wb16tal77r77bmnYsGG29xvwkKMx74A8tmLFigxDWNvDfLrbvn271apVK6to0aLmvewOZ/3uu+9aN998sxleNDQ01Lryyiuthx9+2Pr9998dPxYAgP/pcNWVK1c2Q0RrfaDDS6v33nvPatmypVW8eHEz1apVy+rTp4+1Y8cO8/7PP/9sPfDAA1b16tWt8PBwq0yZMtYNN9xgff75547UN/Yw1y+//HKG9+x6LbNJ60IAQN6wv6MPHTrkMb9KlSqZfm/re77Seqp27dpWWFiYVadOHev99983dYz7urKqS5TWWS1atDB1VEREhNWpUydr69atXo9H599xxx1WyZIlrdKlS1t9+/a1Tp8+7fN+A7Yg/Y9nGAoAAAAAABQW2upJu5wfOnTI5HoCnEJOJwAAAAAAADiOnE4oVNLS0kz0Piva19p9qGwAAKhvAABO0cTgmlspK1FRUZxwBASCTihU9u7d6zEEqDfJyclek+oBAEB9AwC4VImJiWZEuayQBQeBgpxOKFTOnDkjX331VZZlqlWrZiYAAKhvAABO27p1q+zbty/LMm3btuXEIyAQdAIAAAAAAIDjSCQOAAAAAACAgp/T6cKFC6YpYcmSJSUoKCi3Nw8AeU776B8/flwqVaokRYoQ+3cSdQyAwo46xn+oYwAUdlYOnmNyPeikAafo6Ojc3iwA5MvE9ldccUVe70ZAoY4BgP+ijqGOAYD8UMfketBJWzjZOxkREZHbmweAPHfs2DETfLe/D+Ec6hgAhR11jP9QxwAo7I7l4Dkm14NOdpc6DTgRdAJQmNHF2H/nlDoGQGFHHeO/c0odA6CwC/IhVRLJRAAAAAAAAOA4gk4AAAAAAABwHEEnAAAAAAAAOI6gEwAAAAAAABxH0AkAAAAAAACOI+gEAAAAAAAAxxF0AgAAAAAAgOMIOgEAAAAAAMBxIc6vEgAAAACAwqHTkx9IIPpobOe83gUEgIAOOvHhBwBQz/iG/8EEAACAU+heBwAAAAAAgLwNOg0dOlSCgoI8plq1ajm/VwAAAAAAAChc3evq1q0rn3/++f9WEBLQPfQAAAAAAACQAz5HjDTIFBUVlZNtAQAAAAAAoJDwOafTzp07pVKlSlKtWjW55557JDU1NcvyZ8+elWPHjnlMAAAAAAAACGw+BZ2aNm0qM2fOlJSUFJk6dars3r1brr/+ejl+/Himy4waNUoiIyNdU3R0tBP7DQAAAAAAgEAJOrVv3166du0qDRo0kPj4eFmyZIkcOXJE3nnnnUyXGTRokBw9etQ17d2714n9BgAAAAAAQD52SVnAS5UqJVdddZXs2rUr0zJhYWFmAgAAAAAAQOHhc04ndydOnJCffvpJKlas6NweAQAAAAAAoHAFnZ566in54osvZM+ePbJq1Sq57bbbJDg4WLp37+6/PQQAAAAAAEBgd6/79ddfTYDpjz/+kMsvv1xatmwp33zzjfk3AAAAAAAAkKOg07x583wpDgAAAAAAgELqknI6AQAAAAAAAI6PXgcAAAA4rdOTHwTcSf1obOe83gUAAHIdLZ0AAAAAAADgOIJOAAC/mTJlisTExEh4eLg0bdpU1qxZk2X5I0eOSJ8+faRixYoSFhYmV111lSxZsoQrBAAAABRABJ0AAH4xf/586d+/vyQnJ8v69eulYcOGEh8fLwcPHvRa/ty5c3LTTTfJnj175N1335UdO3bI9OnTpXLlylwhACjEP0gsWLBAatWqZcrXr18/w48RlmVJUlKS+cGiaNGi0rZtW9m5c2eG9Xz88cdme1qmdOnS0qVLF8ePDQDgiaATAMAvxo0bJ71795aePXtKnTp1ZNq0aVKsWDGZMWOG1/I6/88//5RFixZJixYtzANJ69atTbAKAFA4f5BYtWqVdO/eXXr16iUbNmwwgSKdtmzZ4iozevRomThxoqlnvv32WylevLhZ55kzZ1xl3nvvPbnvvvtMnbRp0yb5+uuv5e67786VYwaAwoygEwDAcdpqad26debXZleFU6SIeb169Wqvy3z44YfSrFkz072uQoUKUq9ePXnhhRckLS2NKwQAhfQHiQkTJki7du1kwIABUrt2bRkxYoQ0atRIJk+e7GrlNH78eBkyZIh07txZGjRoIG+99Zbs27fP/Iihzp8/L4mJifLyyy/LI488Yrpu67bvvPPOXD12ACiMCDoBABx3+PBhEyzS4JE7fb1//36vy/z888+mW50up10nnnvuORk7dqyMHDky0+2cPXtWjh075jEBAALnBwmd715eaSsmu/zu3btNveJeJjIy0nSjs8toi6rffvvNbOuaa64x3fDat2/v0VrKG+oYALh0BJ0AAPnChQsXpHz58vLaa69JXFycdOvWTZ599lnzK3hmRo0aZR4u7Ck6OjpX9xkA4N8fJHR+VuXtv1mV0R811NChQ02LqMWLF5ucTm3atDHdujNDHQMAl46gEwDAceXKlZPg4GA5cOCAx3x9HRUV5XUZ/eVZuzzocjbtSqEPDfrruDeDBg2So0ePuqa9e/c6fCQAgED4UUPp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kX1asWKFa3tBQUFWRESEFRsbaw0YMMDat29fvjufup8LFy70mHf8+HHr8OHDebZPyDvUMYULdUzWqGMuHXUM3FHHFC7UMVmjjgn8OqbAtnR644035PHHH5cvv/xS9u3blyvbPHfunMTHx8uLL74oDz30kKxatUrWrFkjffr0kUmTJskPP/yQ43X//fff4q99LuyioqLMkJVOioyMlFKlSkl+9frrr8s999wjU6dOlSeffNLMa9eunfz+++9mWrZsmYSEhMgtt9ziWiY4ONicK53vpB07dpjP6HfffSdPP/20fP7551KvXj3ZvHlzrpzPS/lslShRQsqWLSv+wucz/6KOyR7uYeoY6hjqGFDH8BzjPzzH8BwTEM8xVgGkUbsSJUpY27dvt7p162Y9//zzWUaSNepnH6q+797iQyedp3755Rfr1ltvtYoXL26VLFnS6tq1q7V//37XerSFk7auWr9+fYZ90lZOJ06cMP/+5JNPrBYtWpj90BYlHTt2tHbt2uUqu3v3brPdefPmWa1atTKtUSZMmGCFh4dbS5Ys8Vjv+++/b4715MmT5nVqaqrZL1136dKlzf7q+tJHikeOHGlVrFjRiomJsfIDbWn0+OOPW5dffrk5Xj0/a9as8WgRs3jxYqt+/frm/aZNm1qbN2/2eN990tZqdkun4cOHW3fddZdVrFgxq1KlStbkyZMzjfza5/69996z2rRpY1qraas1/cUp/T2UkpJi1apVy9wP2irIvXVO+oh869atzfFpKx69LhUqVHDto23btm3muPX4ateubS1dutRrVDon3PdH71O9l/TeyWx/1X/+8x+z/YMHD3qcmw0bNnic988//9yKi4sz56pZs2bmc2fbuHGjOY96j+pnplGjRtZ3333nsXz6FkynTp2yrr76anMuMts/baVVr149cxz6Gbrxxhtdny/1xhtvWHXq1LFCQ0OtqKgoq0+fPq73dJv//ve/rU6dOpl7wr4OixYtsq655hpz/qtWrWoNHTrU1apL7yP3+0tfe2sVmf4+dC+r9J5t166duWfKly9v3XvvvdahQ4c87hPd18TERNNKUs8d8h/qGOoY6hhP1DHUMaCOsfEcw3MMzzE8x5T18TmmQAad9IGzcePG5t8fffSRVb16devChQvZCjrpA++TTz5p1a1b13Ql0knnpaWlma4/LVu2tNauXWt988035kFbHxJtGpy4+eabL7p/7777rglq7Ny50zzA68OvBlN0G+5f1hoQ0nI///yzCWjccccd5iHV3e233+6ap4Et/ZA/8MAD1vfff29t3brVuvvuu80DvHb7s//HUAMA9913n7VlyxYz5QdPPPGECQhpUO2HH34w+6nBmT/++MMVnNBj++yzz8yx3XLLLeb86DHrsY0fP950z7KvmT4UKn3g12DHqFGjrB07dlgTJ060goODzXqyCjppMEmDXLqMnnddjx2A0Hvosssus9q2bWsCKOvWrTP7puc6q6CT7p8GMn788Udr1qxZpkuZvR/adU2v00033WQCNRrwadKkieNBp4EDB5rrr4Eib+/b9Pw9/PDDVo0aNTLcl+mDThoAXLlypblu119/velOatPPkd6fGlDT437nnXfM8bkv763bnHaJ1PcOHDiQYf/0sxASEmKNGzfO7JPeD1OmTHFdcw0oaTBK7wm9fhq8dO9iqevVgI92ef3pp59MMPnLL78012fmzJlmnl4Xvb/0eikNvNkBaL2/7EBc+qCTff/ppIFkPX/6WVN6nBpUHTRokDkfGpzW633DDTd43Cd6fTQ4qcE79wAe8g/qGOoY6hhP1DHUMaCO4TmG5xieY/6L55gBPj/HFMigkz706gOn0kBBuXLlzANudoJOmeV00odQDVZoSyKbPmTrcnaLHG3pocETX2lLB12P3XLHfri3j8F9P91bNR09etQ8XGvLKTV79mwTuLADbEoDMrpfn376qet/DLWVjR2Eyg+0hYoGcebMmeOap8EkDUKNHj3aFZzQll82DUbpcc2fP/+ifaG1ZYk7bf3Wvn37LINOr7/+eobrrIECe1v62r11mgY99LxmFXTSgKW7a6+91nr66afNv/UaaiBFgxU2p1s6aasfXd+yZcu8vq/3t7bA0UnLaUs4DajZsmrpZPv444/NvNOnT5vXGvDTQI43WQWd9Hzoe99++22G86n7pO/t2bPH63r1vnn22WczPRe6bL9+/TzmaUupF154wWOefp70HLgvl/5aZJb/TT+Dt912mwlMa9BajRgxIkNQeu/evWa9Ghyz7xNtbYX8jTqGOsZGHfNf1DH/Qx0D6hieY3iO4TmG55gAz+mk+WE0j1L37t3Na80/061bN5N/41Js27ZNoqOjzWSrU6eOyTOj76n//r/Gxe3cudPsX7Vq1SQiIsKMTKBSU1M9yjVu3NjjdYcOHeSyyy6TDz/80Lx+7733zPJt27Y1rzdt2iS7du2SkiVLmj6aOpUpU0bOnDkjP/30k2s99evXl9DQUMkvdN+0r3eLFi1c8/Q4mzRp4jq3qlmzZq5/63FdffXVHu9nxn05+/XFlmvQoIHr3xUrVjR/Dx486JpXrFgxqV69ukcZ9/cvts70y+h9q/eW9su26fE7Sbev91pycrKcOHEiw/s33HCDGZlOJ/0MaX6y9u3byy+//HLR9bofk7KPq3///vLggw+ae1Rznbnfh1mxP0s6Wl56DRs2lBtvvNHcx127dpXp06fLX3/95dqu5ofS97OS/rOln53hw4e7Pjc69e7d2+S3OnXqlPhq8ODBsnr1avnggw+kaNGirm2sWLHCYxu1atUy77mfl7i4OJ+3h9xDHUMdkx51zH9Rx/wPdQyoY3iO4TmG5xieY7LP2YzBuUCDS+fPn5dKlSp5PMBqoujJkydLkSJFMgSHnEpud9VVV8n27dsvWq5Tp05SpUoV87Cs+3nhwgWTODl9sq3ixYt7vNZA0R133CFz586Vu+66y/zVgJqd2FkDCfrAOmfOnAzbvPzyyzNdLzLSoJfN/sLQ6+TtfbvMxYKO3pZxX6e/Va5cWd59910TXNKk4Z988okJULrfFzVq1PBINq4JvPU+HTlyZI7OlQ7Feffdd8vHH39stqcBr3nz5sltt92W5b7aQUE7IOtOE5ovXbrUJOr/7LPPTJL+Z599Vr799lspV65cts5F+s+AfnaGDRsm//znPzOUDQ8PF1+8/fbb8sorr8jKlSvNOXffhn72X3rppQzL2ME6b/uG/IU6hjrGCdQx1DE26hhQx/Ac4zTqGOqYglbHFKiWThpseuutt2Ts2LGuFhs6aQsDDe783//9nwm+HD9+XE6ePOlaTsukD+6kpaV5zKtdu7bs3bvXTLatW7fKkSNHTIsnpQ/XOvLWhg0bMuybBrZ0m3/88Yf5pXzIkCGmNYau126lkR064lhKSooZCW/58uXmta1Ro0amFVX58uVN8MB90uBBfqUthvScf/311x7nS0czs8+t+uabb1z/1nP2448/mvOX2TXztpz92l4uv9BWW3pvHThwwDVPj99pGuz84osvZP/+/SbwpJ+FzGgASYO0p0+fvuRg7L/+9S8TINKgzptvvplled3ea6+9Jq1atfIIlqbfN20Zp4Ei/bzp9V+4cKEJommgSkff84V+dvRzmf5zo5OeA7sCz+wes2nrJm3Z9eqrr8p1112XYRv6udX9S78NAk0FA3UMdYw31DH/Qx3jHXUMqGP+i+eY/+I5JmeoYwK3jilQQafFixebD3GvXr1MyyH36fbbbze/UDdt2tR0jdLuL9qlRVsLzZw502M9ejJ3795tglGHDx+Ws2fPmu5B2p1HvyzXr19vuh8lJCRI69atXc2o+/XrZx6ENZg0ZcoUE+z6+eef5Z133jEXTgNCpUuXNkMT6kO1doXTwJF2QcoufRDXLli6H1WrVjXHY9N52tKjc+fO8p///Mccg0Ypn3jiCfn1118lv9Ib9dFHH5UBAwaYgJoG87Rrk3Zr0mtp0+5PGkzYsmWL3H///eZYu3Tp4rpmGoHV9/WauXeJ0mDW6NGjTZBKr8uCBQskMTFR8pObbrrJBN969Ogh33//vdlnDUxm1jTzUmg3Pr0vtCuadqE7duyYma/3uQajdNKWRo8//rgrqp0TGjzq27ev2ZZ20dNj0kBa+oCf7oduUz8f2gpKP0N6DadOnep1vdqi6YUXXpC1a9eaLqnvv/++HDp0yLVebV2lgeeJEyeadernVVtDZSUpKckErDWIpV+oevy6L/Y1UHYwS/fVW6BY52sLLm2FqOfVPpe6b6pPnz7y559/mq61eh70++fTTz+Vnj17XrQSQP5AHUMdQx1zcdQxGVHHgDrmv3iO4TnmUlHHBGgdYxUgOqJZhw4dvL6nCYn1cDZt2mSSAeuoUpqIWpd57bXXPBKJnzlzxowKV6pUKdeIVUpHubr11ltNomVNkNy1a1dr//79HtvRZXWkNB2Nzh7OXYd+12TK9uhnmiBaRzvTodl1xDsd+ctbMms7YXN6OgKZvp+UlJThPU1EnZCQYJKn6/qrVatm9e7d2yQd95bgOr/QxNOPP/64a7/1nNkJ2u2E0zoSoY6GpgmxdWQ3vZbuHnnkETM8Y/rhrIcNG2auVbFixayoqChrwoQJHstd7Nxromud50syem+JxBMTEz2W0fe1nE0Tletx6/Hp6Hl6vLrOlJSUSziz3vdH/frrr1bNmjWt6667ziS91m3Zk97fmuhcR1q8WCJx90Tg+p7O07KarP6uu+6yoqOjzTFpgu++ffu6kozby+ukI/npNjUpt47c5p5QPf3+66iM8fHxZiQ4vVeuuuoqa9KkSR7lp02bZpLqa4J6TQau95Yts+Tsep41QbR+L+hIdnqP6XeD7cMPPzTfG5rwXe+r9InE3Y/HfbLLKh3BT8+1frfodvQ6a1JzO/m/t/sE+Qd1DHUMdYx31DHUMaCO4TmG5xieY3iOSczhc0yQ/ufSQ1dAzmlLGc1DpFFZTdxeWGjLoJYtW5oWce5JywEAzqGOoY4BAH+hjqGOQQAmEgcKKs1JpCOa1axZ0wSatAugdjUj4AQAoI4BAORXPMfgUhB0AnKJJvV++umnTZ4izVelecQ0NxEAANQxAID8iucYXAq61wEAAAAAAMBxBWr0OgAAAAAAABQMBJ0AAAAAAADgOIJOAAAAAAAAcBxBJwAAAAAAADiOoBMAAAAAAAAcR9AJAAAAAAAAjiPoBAAAAAAAAMcRdAIAAAAAAIDjCDoBAAAAAABAnPb/KlUweB4kPDcAAAAASUVORK5CYII=",
"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
}