{ "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": 13, "id": "imports", "metadata": {}, "outputs": [], "source": [ "import time\n", "import warnings\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sklearn.datasets import fetch_california_housing, fetch_openml\n", "from sklearn.linear_model import LogisticRegression, Ridge\n", "from sklearn.metrics import r2_score, roc_auc_score\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import KBinsDiscretizer\n", "\n", "from AutoCarver import BinaryCarver, ContinuousCarver, Features\n", "from AutoCarver.discretizers.utils.base_discretizer import DiscretizerConfig\n", "\n", "try:\n", " from optbinning import ContinuousOptimalBinning, OptimalBinning\n", "\n", " HAS_OPTBINNING = True\n", "except ImportError:\n", " HAS_OPTBINNING = False\n", " print('optbinning is not installed \\u2014 its rows will be skipped.')\n", "\n", "SEED = 42\n", "warnings.filterwarnings('ignore')\n", "plt.rcParams['figure.figsize'] = (10, 3.5)" ] }, { "cell_type": "code", "execution_count": 14, "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": 15, "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, quantitatives=quantitatives)\n", " config = DiscretizerConfig(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": 16, "id": "381a7051", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train=600, dev=200, test=200\n", "categoricals=13, quantitatives=7\n", "bad rate (train)=0.300, (test)=0.300\n" ] } ], "source": [ "credit = fetch_openml(data_id=31, as_frame=True)\n", "df = credit.frame.copy()\n", "\n", "y_binary = (df['class'] == 'bad').astype(int)\n", "X_binary = df.drop(columns=['class'])\n", "\n", "X_train, X_rest, y_train, y_rest = train_test_split(\n", " X_binary, y_binary, test_size=0.4, random_state=SEED, stratify=y_binary,\n", ")\n", "X_dev, X_test, y_dev, y_test = train_test_split(\n", " X_rest, y_rest, test_size=0.5, random_state=SEED, stratify=y_rest,\n", ")\n", "\n", "categoricals = [c for c in X_binary.columns if X_binary[c].dtype == object or isinstance(X_binary[c].dtype, pd.CategoricalDtype)]\n", "quantitatives = [c for c in X_binary.columns if c not in categoricals]\n", "\n", "print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n", "print(f'categoricals={len(categoricals)}, quantitatives={len(quantitatives)}')\n", "print(f'bad rate (train)={y_train.mean():.3f}, (test)={y_test.mean():.3f}')" ] }, { "cell_type": "code", "execution_count": 17, "id": "run-binary", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------\n", "--- [QuantitativeDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", " - [ContinuousDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", " - [OrdinalDiscretizer] Fit Features(['duration', 'installment_commitment', 'residence_since', 'existing_credits', 'num_dependents'])\n", "------\n", "\n", "------\n", "--- [QualitativeDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n", " - [CategoricalDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n", "------\n", "\n", "---------\n", "------ [BinaryCarver] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker', 'duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n", "--- [BinaryCarver] Fit Categorical('checking_status') (1/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
no checking0.13170.4050243
>=2000.27780.060036
0<=X<2000.38960.2567154
<00.46710.2783167
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.06940.360072
0.08330.060012
0.37100.310062
0.57410.270054
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
no checking0.13170.4050243
>=2000.27780.060036
0<=X<2000.38960.2567154
<00.46710.2783167
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.06940.360072
0.08330.060012
0.37100.310062
0.57410.270054
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('credit_history') (2/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
critical/other existing credit0.16760.2883173
existing paid0.31850.5233314
delayed previously0.36210.096758
all paid0.54550.055033
no credits/all paid0.54550.036722
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.22410.290058
0.27030.5550111
0.35710.070014
0.72730.055011
0.66670.03006
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
critical/other existing credit0.16760.2883173
existing paid0.31850.5233314
delayed previously0.36210.096758
all paid, no credits/all paid0.54550.091755
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.22410.290058
0.27030.5550111
0.35710.070014
0.70590.085017
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('purpose') (3/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
used car0.18750.106764
other, retraining0.22220.01509
radio/tv0.23030.2750165
domestic appliance0.30000.016710
furniture/equipment0.33330.1700102
new car0.34010.2450147
business0.37290.098359
repairs0.37500.026716
education0.46430.046728
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.12500.080016
0.30000.050010
0.22950.305061
0.00000.00501
0.32350.170034
0.42220.225045
0.27780.090018
0.00000.01002
0.46150.065013
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
used car0.18750.106764
radio/tv, other, retraining0.22990.2900174
furniture/equipment, domestic appliance0.33040.1867112
new car, business, repairs0.35140.3700222
education0.46430.046728
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.12500.080016
0.23940.355071
0.31430.175035
0.36920.325065
0.46150.065013
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('savings_status') (4/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
>=10000.06670.050030
500<=X<10000.16220.061737
no known savings0.17140.1750105
100<=X<5000.33330.115069
<1000.36490.5983359
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.33330.03006
0.12500.080016
0.16670.180036
0.38890.090018
0.34680.6200124
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
no known savings, >=1000, 500<=X<10000.15120.2867172
<100, 100<=X<5000.35980.7133428
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.17240.290058
0.35210.7100142
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('employment') (5/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
4<=X<70.19350.155093
>=70.25160.2650159
1<=X<40.29110.3550213
<10.42720.1717103
unemployed0.50000.053332
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.26320.190038
0.26000.250050
0.36210.290058
0.33330.180036
0.22220.090018
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
>=7, 4<=X<70.23020.4200252
unemployed, 1<=X<4, <10.35060.5800348
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.26140.440088
0.33040.5600112
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('personal_status') (6/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
male single0.26790.5600336
male mar/wid0.27780.090054
female div/dep/mar0.35590.2950177
male div/sep0.36360.055033
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.28300.5300106
0.23810.105021
0.33850.325065
0.37500.04008
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
male single, male mar/wid0.26920.6500390
female div/dep/mar0.35590.2950177
male div/sep0.36360.055033
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.27560.6350127
0.33850.325065
0.37500.04008
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('other_parties') (7/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
guarantor0.17860.046728
none0.29960.9067544
co applicant0.42860.046728
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.25000.04008
0.29890.9200184
0.37500.04008
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
guarantor0.17860.046728
none0.29960.9067544
co applicant0.42860.046728
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.25000.04008
0.29890.9200184
0.37500.04008
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
real estate0.21300.2817169
life insurance0.31250.2133128
car0.31430.3500210
no known property0.40860.155093
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.21820.275055
0.26000.250050
0.32810.320064
0.45160.155031
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
real estate0.21300.2817169
life insurance0.31250.2133128
car0.31430.3500210
no known property0.40860.155093
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.21820.275055
0.26000.250050
0.32810.320064
0.45160.155031
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('other_payment_plans') (9/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
none0.26190.8083485
stores0.43750.053332
bank0.46990.138383
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.28660.8200164
0.44440.04509
0.33330.135027
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
none0.26190.8083485
bank, stores0.46090.1917115
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.28660.8200164
0.36110.180036
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('housing') (10/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
own0.25580.7233434
for free0.37500.106764
rent0.44120.1700102
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.28570.7350147
0.43480.115023
0.26670.150030
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
own0.25580.7233434
for free, rent0.41570.2767166
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.28570.7350147
0.33960.265053
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('job') (11/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
skilled0.28980.6383383
unskilled resident0.29660.1967118
high qualif/self emp/mgmt0.32580.148389
unemp/unskilled non res0.50000.016710
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.25410.6100122
0.31710.205041
0.48390.155031
0.16670.03006
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
skilled0.28980.6383383
unskilled resident0.29660.1967118
high qualif/self emp/mgmt, unemp/unskilled non res0.34340.165099
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.25410.6100122
0.31710.205041
0.43240.185037
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Categorical('own_telephone') (12/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
yes0.26450.4033242
none0.32400.5967358
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.31250.400080
0.29170.6000120
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
no0.04350.038323
yes0.31020.9617577
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.33330.03006
0.29900.9700194
\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 Quantitative('duration') (14/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 8.00e+000.09800.085051
8.00e+00 < x <= 9.00e+000.23330.050030
9.00e+00 < x <= 1.10e+010.08700.038323
1.10e+01 < x <= 1.20e+010.28830.1850111
1.20e+01 < x <= 1.50e+010.22730.073344
1.50e+01 < x <= 1.80e+010.36920.108365
1.80e+01 < x <= 2.20e+010.23810.035021
2.20e+01 < x <= 2.40e+010.33330.1950117
2.40e+01 < x <= 2.80e+010.22220.01509
2.80e+01 < x <= 3.30e+010.38460.043326
3.30e+01 < x <= 3.60e+010.47270.091755
3.60e+01 < x <= 4.70e+010.26670.025015
4.70e+01 < x0.42420.055033
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.10000.100020
0.30770.065013
0.00000.04008
0.24320.185037
0.07140.070014
0.30430.115023
0.44440.04509
0.35480.155031
0.75000.02004
0.42860.03507
0.35290.085017
0.66670.01503
0.57140.070014
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 8.00e+000.09800.085051
8.00e+00 < x <= 1.10e+010.16980.088353
1.10e+01 < x <= 1.50e+010.27100.2583155
1.50e+01 < x <= 2.80e+010.33020.3533212
2.80e+01 < x0.41860.2150129
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.10000.100020
0.19050.105021
0.19610.255051
0.37310.335067
0.46340.205041
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('credit_amount') (15/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 6.18e+020.20000.025015
6.18e+02 < x <= 7.08e+020.40000.025015
7.08e+02 < x <= 7.97e+020.33330.025015
7.97e+02 < x <= 9.09e+020.40000.025015
9.09e+02 < x <= 1.03e+030.40000.025015
1.03e+03 < x <= 1.16e+030.20000.025015
1.16e+03 < x <= 1.21e+030.26670.025015
1.21e+03 < x <= 1.26e+030.20000.025015
1.26e+03 < x <= 1.31e+030.33330.025015
1.31e+03 < x <= 1.37e+030.46670.025015
1.37e+03 < x <= 1.41e+030.12500.026716
1.41e+03 < x <= 1.47e+030.14290.023314
1.47e+03 < x <= 1.53e+030.26670.025015
1.53e+03 < x <= 1.60e+030.20000.025015
1.60e+03 < x <= 1.82e+030.20000.025015
1.82e+03 < x <= 1.92e+030.50000.026716
1.92e+03 < x <= 1.98e+030.28570.023314
1.98e+03 < x <= 2.12e+030.33330.025015
2.12e+03 < x <= 2.21e+030.26670.025015
2.21e+03 < x <= 2.30e+030.26670.025015
2.30e+03 < x <= 2.38e+030.20000.025015
2.38e+03 < x <= 2.48e+030.40000.025015
2.48e+03 < x <= 2.62e+030.26670.025015
2.62e+03 < x <= 2.75e+030.33330.025015
2.75e+03 < x <= 2.92e+030.20000.025015
2.92e+03 < x <= 3.07e+030.20000.025015
3.07e+03 < x <= 3.35e+030.40000.025015
3.35e+03 < x <= 3.51e+030.13330.025015
3.51e+03 < x <= 3.63e+030.13330.025015
3.63e+03 < x <= 3.91e+030.06670.025015
3.91e+03 < x <= 4.24e+030.46670.025015
4.24e+03 < x <= 4.66e+030.40000.025015
4.66e+03 < x <= 5.08e+030.46670.025015
5.08e+03 < x <= 5.80e+030.20000.025015
5.80e+03 < x <= 6.36e+030.26670.025015
6.36e+03 < x <= 6.85e+030.46670.025015
6.85e+03 < x <= 7.48e+030.20000.025015
7.48e+03 < x <= 8.23e+030.46670.025015
8.23e+03 < x <= 9.57e+030.40000.025015
9.57e+03 < x0.53330.025015
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.20000.02505
0.50000.02004
0.50000.03006
0.00000.01002
0.33330.03006
0.14290.03507
0.50000.01002
0.33330.060012
0.00000.01002
0.28570.03507
0.00000.01503
0.33330.03006
0.25000.02004
0.00000.01503
0.33330.03006
0.28570.03507
0.25000.02004
0.00000.04008
0.50000.01002
0.50000.01002
0.00000.01503
0.00000.00501
0.66670.01503
0.00000.02004
0.00000.02004
0.33330.01503
0.20000.050010
0.50000.04008
0.00000.03006
0.10000.050010
0.25000.02004
0.80000.02505
0.33330.01503
0.40000.02505
0.28570.03507
0.00000.02004
0.66670.01503
0.66670.01503
0.66670.01503
0.61540.065013
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.03e+030.34670.125075
1.03e+03 < x <= 3.35e+030.27580.5500330
3.35e+03 < x <= 3.91e+030.11110.075045
3.91e+03 < x <= 7.48e+030.35240.1750105
7.48e+03 < x0.46670.075045
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.34780.115023
0.22330.5150103
0.20830.120024
0.38710.155031
0.63160.095019
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('installment_commitment') (16/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.00e+000.24360.130078
1.00e+00 < x <= 2.00e+000.26060.2367142
2.00e+00 < x <= 3.00e+000.29790.156794
3.00e+00 < x0.33570.4767286
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.10710.140028
0.26670.225045
0.24140.145029
0.38780.490098
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.00e+000.25450.3667220
2.00e+00 < x <= 3.00e+000.29790.156794
3.00e+00 < x0.33570.4767286
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.20550.365073
0.24140.145029
0.38780.490098
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('residence_since') (17/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.00e+000.31170.128377
1.00e+00 < x <= 2.00e+000.29050.2983179
2.00e+00 < x <= 3.00e+000.30000.1667100
3.00e+00 < x0.30330.4067244
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.21740.115023
0.35290.340068
0.33330.150030
0.26580.395079
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING: No robust combination for Quantitative('residence_since'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Quantitative('age') (18/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.10e+010.40000.025015
2.10e+01 < x <= 2.20e+010.36840.031719
2.20e+01 < x <= 2.30e+010.45000.033320
2.30e+01 < x <= 2.40e+010.33330.035021
2.40e+01 < x <= 2.50e+010.51610.051731
2.50e+01 < x <= 2.60e+010.25000.046728
2.60e+01 < x <= 2.70e+010.22580.051731
2.70e+01 < x <= 2.80e+010.40910.036722
2.80e+01 < x <= 2.90e+010.39130.038323
2.90e+01 < x <= 3.00e+010.21430.046728
3.00e+01 < x <= 3.10e+010.23080.043326
3.10e+01 < x <= 3.20e+010.25000.033320
3.20e+01 < x <= 3.30e+010.36360.036722
3.30e+01 < x <= 3.40e+010.36360.036722
3.40e+01 < x <= 3.50e+010.17240.048329
3.50e+01 < x <= 3.60e+010.20830.040024
3.60e+01 < x <= 3.70e+010.33330.025015
3.70e+01 < x <= 3.80e+010.18750.026716
3.80e+01 < x <= 3.90e+010.29410.028317
3.90e+01 < x <= 4.10e+010.31820.036722
4.10e+01 < x <= 4.20e+010.27270.018311
4.20e+01 < x <= 4.40e+010.19050.035021
4.40e+01 < x <= 4.60e+010.26320.031719
4.60e+01 < x <= 4.70e+010.40000.016710
4.70e+01 < x <= 4.90e+010.14290.023314
4.90e+01 < x <= 5.10e+010.14290.023314
5.10e+01 < x <= 5.40e+010.29410.028317
5.40e+01 < x <= 5.70e+010.33330.020012
5.70e+01 < x <= 6.30e+010.43750.026716
6.30e+01 < x0.26670.025015
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.33330.03006
0.50000.02004
0.33330.075015
0.63640.055011
0.33330.01503
0.33330.060012
0.15380.065013
0.14290.03507
0.40000.02505
0.50000.050010
0.33330.03006
0.20000.02505
0.37500.04008
0.33330.01503
0.25000.02004
0.14290.03507
0.25000.04008
0.25000.02004
0.00000.00501
0.23080.065013
0.60000.02505
0.33330.03006
0.12500.04008
0.00000.02004
0.20000.02505
0.50000.01002
0.60000.02505
0.25000.02004
0.25000.04008
0.00000.04008
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [BinaryCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.50e+010.42450.1767106
2.50e+01 < x <= 3.20e+010.27530.2967178
3.20e+01 < x <= 3.40e+010.36360.073344
3.40e+01 < x <= 3.60e+010.18870.088353
3.60e+01 < x0.27400.3650219
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.43590.195039
0.29310.290058
0.36360.055011
0.18180.055011
0.24690.405081
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [BinaryCarver] Fit Quantitative('existing_credits') (19/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.00e+000.30610.6317379
1.00e+00 < x <= 2.00e+000.28990.3450207
2.00e+00 < x0.28570.023314
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.30000.6500130
0.30160.315063
0.28570.03507
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING: No robust combination for Quantitative('existing_credits'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n", "--- [BinaryCarver] Fit Quantitative('num_dependents') (20/20)\n", " [BinaryCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.0e+000.29840.8433506
1.0e+00 < x0.30850.156794
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
0.30000.8500170
0.30000.150030
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING: No robust combination for Quantitative('num_dependents'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
libraryfit_stransform_strain_auctest_aucauc_drop
0AutoCarver1.9480.01150.84740.81180.0356
1optbinning1.0250.01410.85230.79310.0592
2KBinsDiscretizer0.0020.00090.84010.79430.0458
\n", "
" ], "text/plain": [ " library fit_s transform_s train_auc test_auc auc_drop\n", "0 AutoCarver 1.948 0.0115 0.8474 0.8118 0.0356\n", "1 optbinning 1.025 0.0141 0.8523 0.7931 0.0592\n", "2 KBinsDiscretizer 0.002 0.0009 0.8401 0.7943 0.0458" ] }, "execution_count": 17, "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": 18, "id": "1ea9c0a3", "metadata": {}, "outputs": [ { "data": { "image/png": "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V9L1xx57LKs3CQAA5GEElAAAAAAAAOBLfn+TAwAAAAAAIK8joAQAAAAAAABfCCgBAAAAAADAFwJKAAAAAAAA8IWAEgAAAAAAAHwhoAQAAAAAAABfCCgBAAAAAADAFwJKAAAAAAAA8IWAEgAAAAAAAHwhoAQAAAAAAABfCCgBAAAAAADAFwJKAAAAAAAA8IWAEgAAAAAAAHwhoAQAAAAAAABfCCgBAAAAAADAFwJKAAAAAAAA8IWAEgAAAAAAAHwhoAQAAAAAAABfCCgBAAAAAADAFwJKAAAAAAAA8IWAEgAAAAAAAHwhoAQAAAAAAABfCCghz/r888+tefPmVrx4ccuXL5917tzZ/R8AAAAAstr06dPd88mOHTuyelOAiAgoIU/6/fffrWvXrvbzzz/b+PHj7aWXXrKqVasmm+7xxx+3efPmZck2AgBO3/Lly23EiBF26NChDDuMlBEAACAvI6CEPOm7776znTt32gMPPGB//etf7dZbb7WxY8fab7/9FjYdDwsAkHMDSiNHjiSgBAAAkEEIKCFP2r9/v/t/yZIlg+MKFixoRYoUycKtAgAAAID08zwv2UtxILMQUEKec/vtt1vLli3d32r2pnbJrVq1ck0jQnMo6e+EhAR78cUX3d8aNG96zZo1yxo3bmznnHOOxcTEWL169WzixIkZsk8AgP/R/XzQoEHu72rVqgXv4YEcFC+//LK7PxctWtRKlSplN910k+3evTvsEH777bd2ww03WIUKFdzLhj/96U9uusOHD0eljHjqqadcHr/SpUu77dD2vP7662HTaHu1XOXQSErjtZ+hfvjhB+vdu7dVqlTJChcu7Pb97rvvthMnTnB5AICZa6Hw97//3WrWrOnuvboH63kgaY6ipM8FaeU0eu+999zzReDf/ZdcconNnDnT1zH/6quv7Morr3TbpTLn0UcftVOnTiWbLjY21q699lpbtGiRNWnSxE3/n//8x323bds2tz8q24oVK2aXXnqpvfvuu2HzL1u2zO3D7NmzbejQoa6cU07Z6667LllZCKSlYJpTALnM3/72N6tcubJrznbvvfe6G3758uXt008/DZtOeZXuvPNOa9q0qWsWJxdccEG61rF48WLr3r27XXXVVTZmzBg3btOmTW4d/fv3z4C9AgAE/OUvf7FvvvnGXn31VZcnr0yZMm582bJl7bHHHrOHH37YbrzxRnePP3DggP373/+2K664wtatW+dqrioA065dO0tMTLR+/fq5f2wrWPPOO++4JnQlSpQ4ozJC9IJB/3i/5ZZb3Pr0EkIPAVpHhw4dfJ/MH3/80W2Ltk/bU6tWLbfNClIdO3bMChUqxAUCIM9TpzxqEq0XBAraKDD0zDPPuJfLX3/9tQvC+KUg0x133GEXXXSRDRkyxJUjKk8WLlxoN998c7qWsXfvXmvdurX98ccf9o9//MMFeKZOneqCRZFs2bLFPWvouaZPnz4uQLZv3z73okL3fD3jKFimlx4qa1QWXH/99WHLUHmowNLgwYNd640JEyZYmzZtbP369SmuF0jGA/KgpUuXerr858yZExwXHx/vxoUqXry417NnT9/L79+/vxcTE+P98ccfUdleAIA///znP909ffv27cFxO3bs8AoUKOA99thjYdN++eWXXsGCBYPj161bl6yMiOR0ywg5duxY2OcTJ054devW9a688srgOG27tuOFF15INr/Gq9wK6NGjh5c/f37v888/TzbtqVOnTmsbASC3SXrvlRUrVrh76owZM1J9LhDdj0PLlkOHDnnnnHOOFxcX5/3222+nfe8dMGCAW+7KlSuD4/bv3++VKFEiWVlWtWpVN27hwoURl/Hxxx8Hx/36669etWrVvNjYWO/kyZNhz0GVK1f2jhw5Epz2tddec+MnTpyY7u0GaPIGZAC9mVBTCNVUAgBkD3PnznXNB1Q76eDBg8FBNZCqV69uS5cuddOpBpKoOYHe9GaE0Le/v/zyi2tKd/nll9vatWt9L0v7pB5JO3bs6Jo/JBWp2QYA5EWh9171+vzTTz/ZhRde6P7tfjr3X/1b/9dff3W1ipLmYvVz712wYIFrnqaapgGqVatarJGoSbNq0iZdhuZv0aJFcNzZZ5/taq2qJpZqYIXq0aOHa6IX0KVLF6tYsaJbDpBeBJSADKC22TVq1LCrr77aVadVNVhVewUAZB3lRVLlHgWP9A/10EHNkgMdNugf6gMHDrTnnnvONZfTP9onT54czJ8UDWrapocHPYAo14W2Qc0uTmcdarZ35MgRq1u3btS2DwByIyWvHj58uFWpUsXlmtM9XvdfNRc+nfuveo6WM73/KreTyqak1JQtEpVTkZYRafratWsHvw+VdH0KgCm4ljQ/FJAacigBGaBcuXKu/bHebitJ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AICoOXHihK1Zs8batGnzv4eO/Pnd5xUrVkScR+NDpxfVaEo6/bJly6xcuXJWs2ZNu/vuu+2nn35KdVsSExPtyJEjYQMAIDoIKAEAAACImoMHD9rJkyetfPnyYeP1ee/evRHn0fi0plcNphkzZtiSJUtszJgx9t///teuvvpqt66UjB492kqUKBEcqlSpcsb7BwD4/wr+3/8BAAAAINu66aabgn8raXf9+vXtggsucLWWrrrqqojzDBkyxOVyClANJYJKABAd1FACAAAAEDVlypSxAgUK2L59+8LG67PyHkWi8X6ml/PPP9+ta+vWrSlOo5xLMTExYQMAIDoIKAEAAACImkKFClnjxo1d07SAU6dOuc/NmjWLOI/Gh04vixcvTnF6+f77710OpYoVK3L2ACALEFACAAAAEFVqZvbss8/aiy++aJs2bXIJtBMSElyvb9KjRw/XHC2gf//+tnDhQhs7dqxt3rzZRowYYatXr7a+ffu6748ePep6gPvss89sx44dLvjUqVMnu/DCC13ybgBA5iOHEgAAAICo6tatmx04cMCGDx/uEms3bNjQBYwCibd37drlen4LaN68uc2cOdOGDRtmQ4cOterVq9u8efOsbt267ns1oduwYYMLUB06dMgqVapkbdu2tVGjRrlmbQCAzEdACQAAAEDUqXZRoIZRUkqknVTXrl3dEEnRokVt0aJFUd9GAMDpo8kbAAAAAAAAfCGgBAAAAAAAAF8IKAEAAAAAAMAXAkoAAAAAAADwhYASAAAAAAAAfCGgBAAAAAAAgIwNKH300UfWsWNHq1SpkuXLl8/mzZuX6vTqElTTJR327t3rd9UAAAAAAADIiQGlhIQEa9CggU2ePNnXfFu2bLE9e/YEh3LlyvldNQAAAAAAALKBgn5nuPrqq93glwJIJUuW9D0fAAAAAAAA8mgOpYYNG1rFihXtz3/+s3366aeZtVoAAAAAAABkdQ0lvxREmjJlijVp0sQSExPtueees1atWtnKlSutUaNGEefRdBoCjhw5ktGbCQAAAAAAcqCO98+33OrtsZ0szwaUatas6YaA5s2b23fffWfjx4+3l156KeI8o0ePtpEjR2b0pgEAAAAAACA7N3kL1bRpU9u6dWuK3w8ZMsQOHz4cHHbv3p2p2wcAAAAAAIBsFlBav369awqXksKFC1tMTEzYAADIWdQb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QMYGlD766CPr2LGjVapUyfLly2fz5s1Lc55ly5ZZo0aNrHDhwnbhhRfa9OnT/a4WAAAAAAAAOTWglJCQYA0aNLDJkyena/rt27dbhw4drHXr1rZ+/XobMGCA3XnnnbZo0aLT2V4AAAAAOYCeF2JjY61IkSIWFxdnq1atSnX6OXPmWK1atdz09erVswULFoR9P2LECPd98eLF7dxzz7U2bdrYypUrM3gvAAApKWg+XX311W5IrylTpli1atVs7Nix7nPt2rXtk08+sfHjx1u7du38rh5IUcf75+fKo/P22E5ZvQkAAAC+zJ492wYOHOieBRRMmjBhgvu3/5YtW6xcuXLJpl++fLl1797dRo8ebddee63NnDnTOnfubGvXrrW6deu6aWrUqGGTJk2y888/33777Tf3PNG2bVvbunWrlS1bljMEALkth9KKFSvc24NQKkw0PiWJiYl25MiRsAEAAABAzjBu3Djr06eP9erVy+rUqeMCS8WKFbNp06ZFnH7ixInWvn17GzRokHsBPWrUKJcyQwGkgJtvvtk9VyigdNFFF7l16Dlhw4YNmbhnAIBMCyjt3bvXypcvHzZOn3Xz15uFSPRmokSJEsGhSpUqGb2ZAAAAAKLgxIkTtmbNmrCXyvnz53efU3qp7PcltNYxdepU96ygdBwAgMyXLXt5GzJkiB0+fDg47N69O6s3CQCQwbkzAmbNmuU6fVBTBwBAznPw4EE7efJkxJfKetns5yV00unfeecdO/vss13ZoiZvixcvtjJlyqS4LbR8AIAcHFCqUKGC7du3L2ycPsfExFjRokUjzqPe4PR96AAAyHm5M+Lj413+C7091pvm/fv3pzrfjh077IEHHrDLL78807YVAJBzBDr6Uc4lNZG78cYbUy1baPkAADk4oNSsWTNbsmRJ2Di9SdB4AEDu5Dd3huht9i233GIjR450+TEAADmTagwVKFAg4ktlvWz28xI66fTq4e3CCy+0Sy+91J5//nkrWLCg+39KaPkAANkooHT06FH3VkCDbN++3f29a9eu4E27R48ewenvuusu27Ztmz344IO2efNme/rpp+21116z++67L5r7AQDIwbkz5JFHHnE9//Tu3Ttd66EZAwBkT4UKFbLGjRuHvVQ+deqU+5zSS+XTfQmt5ao8SAktHwAg4xT0O8Pq1atdVdMANWmQnj172vTp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m9x+a/9q167tLV68OGLU+kyEbpeuXV1fup5S2m75+OOP3Xbs378/7BitW7cu7Ph/8MEHXuPGjd0xa9asmfstBqxfv94dT123+h01atTI+/zzz8PmT1rz6NixY17NmjXdMUlp+1S7qm7dum4/9Lu66qqrgr85ef755706dep4hQoV8ipUqODdc889we+0zqefftrr2LGjuzYC52PevHnexRdf7M5DtWrVvBEjRgRrY+l6Cr3O9DlSDcek12PotKJrt3379u7aKVeunHfrrbd6Bw4cCLtetK39+/d3NR517BAdlBWUFZQVaaOsoKzI6ygrKCsoK9JGWXFPrn+uyFMBJT04NmnSxP399ttvexdccIF36tSpdAWU9OB6//33exdddJFryqNB406ePOma3rRo0cJbvXq199lnn7kHZp2UAAUb2rZtm+b2vf766y5I8e2337oHcV1sCo5oHaEP6Qr2aLpt27a5AEWXLl3cRRHqhhtuCI5T0ErBhzvuuMPbsGGD9/XXX3s333yzexBXU7zAj10P8rfddpu3ceNGN2Q39957rwv2KHj21VdfuW1W4OWnn34KBhy0n++//77bz2uvvdYdK+2/9nPChAmuqVTg/OkfAqIfmwIYo0eP9rZs2eL961//8goUKOCWk1pASYEiBbA0j86BlhP48et6Ouuss7w2bdq4oMiaNWvctum4pxZQ0vbpJvLNN994L774omveFdgONSPTOfvzn//sgi8K4jRt2jTDAkoPPviguyYUBIr0fYCO49/+9jfvwgsvTHatJg0oKci3bNkyd/4uv/xy1+wzQL8tXbMKmmn/X3vtNbefofNHasqm5or6bt++fcm2T7+PggULeuPGjXPbpOti8uTJwXOvm7oCTbo2dB4VoAxt/qjl6qarpqnfffedCx5/9NFH7jxNnz7djdP50XWm8yYKqgUCzrrOAkG2pDf+wHWoQYFjHT/9/kT7qcDpkCFD3PFQMFrnvXXr1mHXi86PApAKzIUG53BmKCsoKygr0kZZQVmR11FWUFZQVqSNsmJ8rn+uyFMBJT286sFR9OBfpkwZ96CanoBSSjmUdNIVfFANoAA9LGu+QO0Z1cZQMMQvRQ21nEAtm8BDemAfQrcztDbS4cOH3UOyajzJSy+95AIRgeCZKMCi7Vq0aFHwx64aMYEAU3ajGiUK0LzyyivBcQoUKcD0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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": 19, "id": "load-regression", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train=12384, dev=4128, test=4128\n", "quantitatives=8 (['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n" ] } ], "source": [ "housing = fetch_california_housing(as_frame=True)\n", "X_reg = housing.frame.drop(columns=['MedHouseVal'])\n", "y_reg = housing.frame['MedHouseVal']\n", "\n", "X_train, X_rest, y_train, y_rest = train_test_split(X_reg, y_reg, test_size=0.4, random_state=SEED)\n", "X_dev, X_test, y_dev, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=SEED)\n", "\n", "quantitatives = list(X_reg.columns)\n", "categoricals = []\n", "\n", "print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n", "print(f'quantitatives={len(quantitatives)} ({quantitatives})')" ] }, { "cell_type": "code", "execution_count": 20, "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 Quantitative('MedInc') (1/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.335e+001.19840.0250310
1.335e+00 < x <= 1.593e+001.01050.0250310
1.593e+00 < x <= 1.740e+001.11330.0250309
1.740e+00 < x <= 1.906e+001.15350.0252312
1.906e+00 < x <= 2.029e+001.20900.0248307
2.029e+00 < x <= 2.152e+001.21410.0251311
2.152e+00 < x <= 2.243e+001.24170.0250310
2.243e+00 < x <= 2.350e+001.38270.0249308
2.350e+00 < x <= 2.468e+001.36140.0250310
2.468e+00 < x <= 2.569e+001.41900.0250309
2.569e+00 < x <= 2.655e+001.52640.0250310
2.655e+00 < x <= 2.737e+001.54280.0250309
2.737e+00 < x <= 2.862e+001.57080.0250310
2.862e+00 < x <= 2.974e+001.66300.0250310
2.974e+00 < x <= 3.054e+001.62700.0250309
3.054e+00 < x <= 3.135e+001.70790.0250310
3.135e+00 < x <= 3.216e+001.85540.0250309
3.216e+00 < x <= 3.315e+001.83730.0250310
3.315e+00 < x <= 3.423e+001.91210.0250309
3.423e+00 < x <= 3.531e+001.91620.0251311
3.531e+00 < x <= 3.633e+001.96780.0250309
3.633e+00 < x <= 3.723e+002.02260.0250309
3.723e+00 < x <= 3.839e+001.98910.0251311
3.839e+00 < x <= 3.971e+002.04930.0249308
3.971e+00 < x <= 4.073e+002.05380.0252312
4.073e+00 < x <= 4.179e+002.20040.0249308
4.179e+00 < x <= 4.315e+002.24170.0250309
4.315e+00 < x <= 4.464e+002.23940.0250310
4.464e+00 < x <= 4.611e+002.25770.0252312
4.611e+00 < x <= 4.757e+002.43510.0248307
4.757e+00 < x <= 4.946e+002.34820.0250309
4.946e+00 < x <= 5.117e+002.45920.0250310
5.117e+00 < x <= 5.308e+002.57840.0250309
5.308e+00 < x <= 5.538e+002.68920.0250310
5.538e+00 < x <= 5.828e+002.78670.0251311
5.828e+00 < x <= 6.148e+003.09430.0249308
6.148e+00 < x <= 6.599e+003.30310.0250310
6.599e+00 < x <= 7.313e+003.60640.0250309
7.313e+00 < x <= 8.433e+004.01910.0250310
8.433e+00 < x4.73430.0250310
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.25070.0247102
1.03190.0262108
1.15870.0257106
1.08550.0252104
1.25230.022593
1.26060.0293121
1.26430.020886
1.33350.0274113
1.45280.0257106
1.48870.0305126
1.51420.023798
1.64850.020886
1.55440.0293121
1.61890.0257106
1.74330.023396
1.63690.021388
1.78020.0276114
1.97210.0283117
1.82870.0279115
1.82950.0242100
1.99070.0300124
1.95170.021689
2.02200.0269111
2.15090.0269111
2.09770.0291120
2.20540.022593
2.29790.0274113
2.35530.0274113
2.29240.018476
2.44010.021388
2.29310.0250103
2.49400.023798
2.61330.0250103
2.71770.018978
2.91100.0276114
3.07290.021388
3.07590.0271112
3.59850.022894
4.03850.020685
4.61310.0264109
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.47e+001.20930.22502787
2.47e+00 < x <= 3.13e+001.57960.17502167
3.13e+00 < x <= 4.07e+001.95600.22512788
4.07e+00 < x <= 5.83e+002.42380.24993095
5.83e+00 < x3.75240.12491547
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.23230.2275939
1.59340.1747721
1.96040.24251001
2.46520.2372979
3.68700.1182488
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('HouseAge') (2/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 5.00e+002.23580.0271336
5.00e+00 < x <= 8.00e+001.97270.0263326
8.00e+00 < x <= 1.10e+011.81330.0352436
1.10e+01 < x <= 1.40e+011.85380.0468579
1.40e+01 < x <= 1.60e+011.93550.0652807
1.60e+01 < x <= 1.70e+011.89290.0319395
1.70e+01 < x <= 1.80e+011.94550.0276342
1.80e+01 < x <= 2.00e+011.94700.0470582
2.00e+01 < x <= 2.30e+011.99340.0632783
2.30e+01 < x <= 2.50e+012.17130.0480595
2.50e+01 < x <= 2.60e+012.09370.0304377
2.60e+01 < x <= 2.70e+012.05680.0245303
2.70e+01 < x <= 2.80e+011.98270.0241299
2.80e+01 < x <= 2.90e+012.02030.0232287
2.90e+01 < x <= 3.00e+012.05150.0236292
3.00e+01 < x <= 3.20e+012.04530.0484599
3.20e+01 < x <= 3.30e+012.03430.0316391
3.30e+01 < x <= 3.40e+012.13570.0320396
3.40e+01 < x <= 3.50e+012.00040.0399494
3.50e+01 < x <= 3.60e+012.11480.0437541
3.60e+01 < x <= 3.70e+012.00040.0257318
3.70e+01 < x <= 3.90e+012.01330.0355440
3.90e+01 < x <= 4.20e+012.01480.0440545
4.20e+01 < x <= 4.40e+012.07420.0351435
4.40e+01 < x <= 4.70e+012.08520.0343425
4.70e+01 < x2.58480.08571061
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.07200.0245101
1.92010.0269111
1.90540.0344142
1.85810.0412170
1.88260.0606250
1.85920.0375155
1.87990.0283117
1.87460.0436180
2.11280.0577238
2.08470.0579239
2.07780.0296122
2.17840.021689
2.22420.020886
1.78020.021388
1.76290.023396
2.04930.0504208
1.93430.0259107
2.08370.0349144
2.19570.0417172
2.01570.0431178
2.20060.0296122
2.00260.0351145
1.93580.0499206
2.01170.0312129
2.08390.0380157
2.59680.0911376
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.30e+011.94660.37034586
2.30e+01 < x <= 2.60e+012.14120.0785972
2.60e+01 < x <= 3.60e+012.05260.29093602
3.60e+01 < x <= 4.70e+012.03810.17472163
4.70e+01 < x2.58480.08571061
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.93160.35471464
2.08240.0875361
2.03830.28291168
2.03470.1839759
2.59680.0911376
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveRooms') (3/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 3.066e+001.95060.0250310
3.066e+00 < x <= 3.432e+001.88800.0250310
3.432e+00 < x <= 3.647e+001.82330.0250309
3.647e+00 < x <= 3.792e+001.82920.0250310
3.792e+00 < x <= 3.933e+001.78470.0250309
3.933e+00 < x <= 4.052e+001.84990.0250310
4.052e+00 < x <= 4.168e+001.87180.0250310
4.168e+00 < x <= 4.276e+001.83330.0250309
4.276e+00 < x <= 4.365e+001.79650.0250310
4.365e+00 < x <= 4.454e+001.69520.0250309
4.454e+00 < x <= 4.536e+001.75350.0250310
4.536e+00 < x <= 4.621e+001.79520.0250309
4.621e+00 < x <= 4.705e+001.84650.0250310
4.705e+00 < x <= 4.794e+001.74860.0250310
4.794e+00 < x <= 4.874e+001.77190.0250309
4.874e+00 < x <= 4.941e+001.72190.0251311
4.941e+00 < x <= 5.014e+001.71760.0249308
5.014e+00 < x <= 5.088e+001.77070.0250310
5.088e+00 < x <= 5.160e+001.79180.0250309
5.160e+00 < x <= 5.233e+001.77910.0250310
5.233e+00 < x <= 5.315e+001.82090.0250310
5.315e+00 < x <= 5.384e+001.91070.0250309
5.384e+00 < x <= 5.460e+001.77280.0250310
5.460e+00 < x <= 5.532e+001.89960.0250309
5.532e+00 < x <= 5.616e+001.88720.0250310
5.616e+00 < x <= 5.694e+001.99050.0250309
5.694e+00 < x <= 5.778e+002.00290.0250310
5.778e+00 < x <= 5.858e+002.01070.0250310
5.858e+00 < x <= 5.959e+002.11370.0250309
5.959e+00 < x <= 6.059e+002.04690.0250310
6.059e+00 < x <= 6.157e+002.14500.0250309
6.157e+00 < x <= 6.270e+002.24770.0250310
6.270e+00 < x <= 6.396e+002.34950.0250309
6.396e+00 < x <= 6.543e+002.42320.0250310
6.543e+00 < x <= 6.717e+002.62410.0250310
6.717e+00 < x <= 6.946e+002.75730.0250309
6.946e+00 < x <= 7.233e+003.07630.0250310
7.233e+00 < x <= 7.637e+003.11180.0250309
7.637e+00 < x <= 8.324e+003.58460.0250310
8.324e+00 < x2.73910.0250310
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.09080.023396
1.85790.0264109
2.00310.0242100
1.80600.0274113
1.81370.024099
1.77250.021187
1.77230.0283117
1.78390.0247102
1.79020.0286118
1.81210.0264109
1.62650.0264109
1.83490.0276114
1.83390.0247102
1.77250.0342141
1.81880.0254105
1.84800.019179
1.83330.023597
1.81910.0266110
1.74190.0266110
1.76420.022091
1.76450.0303125
1.79170.0266110
1.86510.0262108
1.86450.0274113
1.80820.0286118
1.84830.017773
2.07780.024099
2.00050.018777
1.97240.0291120
2.26230.023597
2.08180.023095
2.28890.0250103
2.32800.021388
2.53730.0254105
2.67870.020183
2.74570.021187
3.01080.0303125
3.15960.023396
3.43400.023597
2.75680.0245101
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 3.43e+001.91930.0501620
3.43e+00 < x <= 5.62e+001.80310.57497120
5.62e+00 < x <= 6.16e+002.05160.15001857
6.16e+00 < x <= 6.54e+002.34010.0750929
6.54e+00 < x2.98230.15001858
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.96700.0497205
1.80450.60002477
2.04740.1359561
2.38860.0717296
2.97520.1427589
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveBedrms') (4/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 9.1220e-012.05110.0250310
9.1220e-01 < x <= 9.4022e-012.12640.0250310
9.4022e-01 < x <= 9.5595e-012.06380.0250309
9.5595e-01 < x <= 9.6743e-012.07560.0251311
9.6743e-01 < x <= 9.7590e-012.25620.0249308
9.7590e-01 < x <= 9.8343e-012.17090.0250310
9.8343e-01 < x <= 9.8987e-012.14500.0250310
9.8987e-01 < x <= 9.9592e-012.17720.0250309
9.9592e-01 < x <= 1.0019e+002.19150.0251311
1.0019e+00 < x <= 1.0068e+002.09490.0249308
1.0068e+00 < x <= 1.0112e+002.24400.0250310
1.0112e+00 < x <= 1.0156e+002.16870.0250310
1.0156e+00 < x <= 1.0204e+002.17230.0250309
1.0204e+00 < x <= 1.0250e+002.20030.0254314
1.0250e+00 < x <= 1.0290e+002.13240.0246305
1.0290e+00 < x <= 1.0331e+002.18400.0250310
1.0331e+00 < x <= 1.0369e+002.03210.0250309
1.0369e+00 < x <= 1.0412e+002.17460.0250310
1.0412e+00 < x <= 1.0453e+002.25360.0250309
1.0453e+00 < x <= 1.0493e+002.15460.0250310
1.0493e+00 < x <= 1.0534e+002.07380.0251311
1.0534e+00 < x <= 1.0574e+002.12240.0249308
1.0574e+00 < x <= 1.0615e+002.04140.0250310
1.0615e+00 < x <= 1.0662e+002.15690.0251311
1.0662e+00 < x <= 1.0712e+002.09720.0250309
1.0712e+00 < x <= 1.0763e+002.07140.0249308
1.0763e+00 < x <= 1.0816e+002.02440.0250310
1.0816e+00 < x <= 1.0874e+002.01350.0252312
1.0874e+00 < x <= 1.0933e+002.22390.0249308
1.0933e+00 < x <= 1.1000e+002.02440.0262324
1.1000e+00 < x <= 1.1071e+002.00770.0242300
1.1071e+00 < x <= 1.1160e+001.95640.0245304
1.1160e+00 < x <= 1.1267e+002.00770.0250310
1.1267e+00 < x <= 1.1387e+001.93050.0250309
1.1387e+00 < x <= 1.1538e+001.81300.0258319
1.1538e+00 < x <= 1.1739e+001.80600.0242300
1.1739e+00 < x <= 1.2074e+001.91090.0250310
1.2074e+00 < x <= 1.2730e+001.89500.0250309
1.2730e+00 < x <= 1.5018e+001.79620.0250310
1.5018e+00 < x1.49310.0250310
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.79610.0252104
2.00980.0298123
2.30390.0257106
2.23900.0262108
2.32930.024099
1.93180.019480
2.15750.019982
2.17400.0291120
2.22070.0337139
2.18110.023396
2.04750.0262108
2.27430.021890
2.26270.0293121
2.10680.0247102
2.44590.022894
2.12800.0269111
2.11930.024099
2.22800.0259107
2.03360.023798
2.01950.021689
1.98980.023597
2.22700.021689
1.92440.0254105
2.15090.023798
2.22230.0274113
1.96540.0271112
2.10850.0257106
2.03320.024099
1.92620.0264109
2.11390.0274113
1.90250.022593
1.86280.0271112
1.95010.0259107
2.02310.020685
1.86220.0271112
1.81370.0250103
2.03990.0259107
1.63920.021890
1.72210.0250103
1.60190.024099
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.049e+002.15350.50006192
1.049e+00 < x <= 1.093e+002.09150.22502787
1.093e+00 < x <= 1.139e+001.98570.12491547
1.139e+00 < x <= 1.273e+001.85630.10001238
1.273e+00 < x1.64460.0501620
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.15260.50292076
2.05820.2248928
1.97070.1235510
1.84750.0998412
1.66320.0489202
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Population') (5/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.08e+021.90500.0251311
2.08e+02 < x <= 3.53e+022.02770.0251311
3.53e+02 < x <= 4.42e+022.06550.0250310
4.42e+02 < x <= 5.12e+022.20670.0249308
5.12e+02 < x <= 5.75e+022.13270.0250310
5.75e+02 < x <= 6.27e+022.07310.0250310
6.27e+02 < x <= 6.75e+022.36270.0249308
6.75e+02 < x <= 7.16e+022.20060.0250309
7.16e+02 < x <= 7.56e+022.09000.0253313
7.56e+02 < x <= 7.94e+022.01910.0251311
7.94e+02 < x <= 8.32e+022.32480.0251311
8.32e+02 < x <= 8.67e+022.07630.0253313
8.67e+02 < x <= 9.02e+022.03130.0247306
9.02e+02 < x <= 9.40e+022.11850.0247306
9.40e+02 < x <= 9.78e+022.17900.0253313
9.78e+02 < x <= 1.02e+032.07460.0249308
1.02e+03 < x <= 1.06e+031.95220.0247306
1.06e+03 < x <= 1.09e+032.11860.0250310
1.09e+03 < x <= 1.13e+032.05920.0252312
1.13e+03 < x <= 1.17e+032.06400.0252312
1.17e+03 < x <= 1.22e+032.01340.0249308
1.22e+03 < x <= 1.26e+032.16900.0250310
1.26e+03 < x <= 1.30e+032.05580.0248307
1.30e+03 < x <= 1.35e+031.97110.0249308
1.35e+03 < x <= 1.41e+032.01850.0250310
1.41e+03 < x <= 1.46e+032.00040.0251311
1.46e+03 < x <= 1.52e+032.09110.0248307
1.52e+03 < x <= 1.59e+032.13220.0254315
1.59e+03 < x <= 1.66e+031.99490.0246305
1.66e+03 < x <= 1.73e+032.02330.0250309
1.73e+03 < x <= 1.82e+031.89460.0253313
1.82e+03 < x <= 1.91e+031.95040.0247306
1.91e+03 < x <= 2.02e+032.00740.0250310
2.02e+03 < x <= 2.16e+032.02130.0250310
2.16e+03 < x <= 2.32e+032.05410.0250309
2.32e+03 < x <= 2.56e+032.07570.0250310
2.56e+03 < x <= 2.86e+032.01420.0250309
2.86e+03 < x <= 3.28e+031.91960.0250309
3.28e+03 < x <= 4.25e+032.04390.0250310
4.25e+03 < x2.00100.0250310
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.98950.0269111
1.81890.0271112
2.14790.0271112
2.24340.0266110
2.12810.0269111
2.29080.0257106
2.09260.0283117
2.17570.021388
2.21820.0259107
2.14330.0286118
2.07690.0293121
2.18890.024099
2.04880.021890
2.15850.0247102
2.06990.0259107
2.03960.0247102
1.98430.0254105
2.10620.021388
1.98230.0242100
2.13530.0271112
2.11320.023095
1.96960.0252104
2.12430.019681
1.97740.0245101
1.80020.0245101
2.15000.0264109
1.94710.0293121
1.95350.0262108
2.09150.0274113
2.03900.022894
2.13800.021187
1.97060.020384
1.87170.0264109
1.90820.0247102
2.08950.023396
1.81310.0266110
2.00190.0269111
2.02340.020183
2.15580.0262108
2.03390.022593
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 3.53e+021.96630.0502622
3.53e+02 < x <= 8.32e+022.16360.22532790
8.32e+02 < x <= 1.73e+032.06040.47455876
1.73e+03 < x <= 2.16e+031.96830.10001239
2.16e+03 < x2.01810.15001857
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.90380.0540223
2.16590.2398990
2.04450.46801932
1.96390.0925382
2.01690.1456601
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('AveOccup') (6/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 1.699e+002.61410.0250310
1.699e+00 < x <= 1.868e+002.79860.0250310
1.868e+00 < x <= 1.976e+002.69790.0250309
1.976e+00 < x <= 2.071e+002.55580.0250310
2.071e+00 < x <= 2.161e+002.45820.0250309
2.161e+00 < x <= 2.228e+002.27570.0250310
2.228e+00 < x <= 2.288e+002.35920.0250310
2.288e+00 < x <= 2.341e+002.25070.0250309
2.341e+00 < x <= 2.388e+002.13710.0250310
2.388e+00 < x <= 2.435e+002.27080.0250309
2.435e+00 < x <= 2.475e+002.19890.0250310
2.475e+00 < x <= 2.515e+002.15640.0250309
2.515e+00 < x <= 2.557e+002.12790.0250310
2.557e+00 < x <= 2.598e+002.24280.0250310
2.598e+00 < x <= 2.639e+002.11160.0250309
2.639e+00 < x <= 2.674e+002.23430.0250310
2.674e+00 < x <= 2.712e+002.04890.0250309
2.712e+00 < x <= 2.746e+002.21960.0250310
2.746e+00 < x <= 2.784e+002.12110.0250309
2.784e+00 < x <= 2.824e+002.26450.0250310
2.824e+00 < x <= 2.861e+002.15650.0251311
2.861e+00 < x <= 2.899e+002.23230.0250309
2.899e+00 < x <= 2.943e+002.07140.0250309
2.943e+00 < x <= 2.984e+002.04950.0250309
2.984e+00 < x <= 3.026e+001.99170.0250310
3.026e+00 < x <= 3.071e+001.96230.0250309
3.071e+00 < x <= 3.117e+002.04910.0250310
3.117e+00 < x <= 3.168e+001.93360.0250310
3.168e+00 < x <= 3.221e+001.94720.0250310
3.221e+00 < x <= 3.279e+001.89380.0250309
3.279e+00 < x <= 3.344e+001.88040.0250309
3.344e+00 < x <= 3.424e+001.87240.0250310
3.424e+00 < x <= 3.508e+001.80000.0250309
3.508e+00 < x <= 3.606e+001.65710.0250310
3.606e+00 < x <= 3.719e+001.56240.0250310
3.719e+00 < x <= 3.870e+001.57090.0250309
3.870e+00 < x <= 4.089e+001.48540.0250310
4.089e+00 < x <= 4.317e+001.42400.0250309
4.317e+00 < x <= 4.705e+001.32330.0250310
4.705e+00 < x1.52800.0250310
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.75240.022091
2.77630.0293121
2.65020.0257106
2.59900.0242100
2.48280.0296122
2.40390.0247102
2.25670.0281116
2.41370.023095
2.34710.021187
2.24250.0300124
2.09110.0252104
2.20720.0259107
2.13700.0262108
2.09730.0281116
2.01880.023095
2.08250.022593
2.26150.0247102
2.01140.021388
2.23140.0257106
2.02030.023396
2.09080.0286118
1.88870.023396
1.98940.0250103
2.23160.022894
2.08910.0291120
1.97870.022392
2.08180.0279115
1.86020.020384
1.96110.018978
1.72650.023095
1.77890.0259107
1.83410.0274113
1.64810.021187
1.69890.0247102
1.62670.0271112
1.55470.0250103
1.41500.0293121
1.53640.022091
1.42450.0262108
1.55980.0266110
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 2.16e+002.62500.12501548
2.16e+00 < x <= 2.90e+002.20050.42515264
2.90e+00 < x <= 3.51e+001.95010.27493404
3.51e+00 < x <= 3.87e+001.59680.0750929
3.87e+00 < x1.44020.10001239
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.64840.1308540
2.16650.42471753
1.93110.26361088
1.62650.0768317
1.48010.1042430
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Latitude') (7/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 3.275e+011.59120.0287355
3.275e+01 < x <= 3.321e+012.02990.0466577
3.321e+01 < x <= 3.365e+012.78330.0279345
3.365e+01 < x <= 3.374e+012.43260.0268332
3.374e+01 < x <= 3.379e+012.18290.0262325
3.379e+01 < x <= 3.383e+012.42320.0229283
3.383e+01 < x <= 3.387e+012.30030.0241299
3.387e+01 < x <= 3.391e+012.15700.0279345
3.391e+01 < x <= 3.394e+011.63000.0242300
3.394e+01 < x <= 3.397e+011.85940.0225279
3.397e+01 < x <= 3.400e+011.94820.0224278
3.400e+01 < x <= 3.403e+012.12670.0277343
3.403e+01 < x <= 3.406e+012.40210.0339420
3.406e+01 < x <= 3.410e+012.17600.0417516
3.410e+01 < x <= 3.413e+012.36460.0242300
3.413e+01 < x <= 3.417e+012.77710.0301373
3.417e+01 < x <= 3.427e+012.41000.0435539
3.427e+01 < x <= 3.453e+012.45590.0240297
3.453e+01 < x <= 3.532e+011.49140.0246305
3.532e+01 < x <= 3.623e+010.92080.0250310
3.623e+01 < x <= 3.672e+011.24410.0262324
3.672e+01 < x <= 3.697e+011.31290.0253313
3.697e+01 < x <= 3.729e+012.62410.0239296
3.729e+01 < x <= 3.737e+012.65740.0258320
3.737e+01 < x <= 3.753e+013.01050.0255316
3.753e+01 < x <= 3.765e+012.41970.0243301
3.765e+01 < x <= 3.772e+012.11740.0256317
3.772e+01 < x <= 3.777e+012.55370.0286354
3.777e+01 < x <= 3.793e+012.68870.0459569
3.793e+01 < x <= 3.800e+011.76220.0250310
3.800e+01 < x <= 3.826e+011.59240.0243301
3.826e+01 < x <= 3.850e+011.85700.0254315
3.850e+01 < x <= 3.863e+011.39810.0241298
3.863e+01 < x <= 3.898e+011.39620.0251311
3.898e+01 < x <= 3.975e+011.12410.0255316
3.975e+01 < x0.84420.0244302
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.57610.0320132
2.07680.0552228
2.71150.0264109
2.43680.0262108
2.29100.0291120
2.35280.022091
2.32330.023396
2.09370.0368152
1.63190.023095
1.79920.023597
1.94080.0250103
2.12920.0250103
2.32610.0334138
2.27620.0443183
2.22280.021689
2.82240.0303125
2.29380.0465192
2.50250.0252104
1.37190.020183
0.93360.021890
1.25160.0259107
1.25970.0274113
2.55070.024099
2.53510.0266110
2.98270.0283117
2.65190.019480
2.08690.020384
2.61450.0242100
2.58530.0516213
1.66300.0250103
1.51560.020685
1.75490.022593
1.31010.019681
1.39970.0279115
1.11140.023597
0.86710.022593
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= 3.45e+012.23110.52546506
3.45e+01 < x <= 3.70e+011.24150.10111252
3.70e+01 < x <= 3.79e+012.59270.19972473
3.79e+01 < x <= 3.90e+011.60350.12401535
3.90e+01 < x0.98730.0499618
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.21110.54872265
1.20650.0952393
2.59020.1945803
1.53120.1156477
0.99180.0460190
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "--- [ContinuousCarver] Fit Quantitative('Longitude') (8/8)\n", " [ContinuousCarver] Raw distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= -1.2269e+021.40630.0259321
-1.2269e+02 < x <= -1.2247e+022.88780.0259321
-1.2247e+02 < x <= -1.2241e+023.23970.0245303
-1.2241e+02 < x <= -1.2229e+022.15820.0262324
-1.2229e+02 < x <= -1.2215e+022.30710.0476589
-1.2215e+02 < x <= -1.2206e+022.56650.0263326
-1.2206e+02 < x <= -1.2199e+022.62650.0253313
-1.2199e+02 < x <= -1.2191e+022.69240.0237294
-1.2191e+02 < x <= -1.2181e+022.29190.0255316
-1.2181e+02 < x <= -1.2157e+021.71030.0242300
-1.2157e+02 < x <= -1.2139e+021.17360.0252312
-1.2139e+02 < x <= -1.2127e+021.32700.0263326
-1.2127e+02 < x <= -1.2101e+021.48570.0238295
-1.2101e+02 < x <= -1.2064e+021.47160.0245304
-1.2064e+02 < x <= -1.2007e+021.33760.0254314
-1.2007e+02 < x <= -1.1972e+021.26240.0258319
-1.1972e+02 < x <= -1.1929e+021.33320.0239296
-1.1929e+02 < x <= -1.1897e+021.33000.0250310
-1.1897e+02 < x <= -1.1852e+022.72110.0258319
-1.1852e+02 < x <= -1.1843e+023.16530.0284352
-1.1843e+02 < x <= -1.1838e+023.44320.0238295
-1.1838e+02 < x <= -1.1834e+022.74800.0249308
-1.1834e+02 < x <= -1.1830e+022.34350.0271336
-1.1830e+02 < x <= -1.1822e+021.74760.0480594
-1.1822e+02 < x <= -1.1818e+021.80550.0227281
-1.1818e+02 < x <= -1.1813e+022.14800.0287356
-1.1813e+02 < x <= -1.1808e+022.24940.0243301
-1.1808e+02 < x <= -1.1801e+022.40790.0245303
-1.1801e+02 < x <= -1.1790e+022.23040.0468580
-1.1790e+02 < x <= -1.1780e+022.48200.0266329
-1.1780e+02 < x <= -1.1766e+022.28640.0248307
-1.1766e+02 < x <= -1.1739e+021.67910.0237294
-1.1739e+02 < x <= -1.1725e+021.63800.0290359
-1.1725e+02 < x <= -1.1716e+022.05120.0229284
-1.1716e+02 < x <= -1.1708e+021.51130.0249308
-1.1708e+02 < x <= -1.1696e+021.66690.0235291
-1.1696e+02 < x1.17690.0245304
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
1.39270.021689
3.01290.023396
3.18990.022593
2.19110.0271112
2.30350.0453187
2.98620.024099
2.54710.024099
2.69690.023095
2.14640.0250103
1.71050.021890
1.09590.022091
1.29180.0291120
1.37810.023095
1.47670.022593
1.24410.0252104
1.28100.0281116
1.28130.0252104
1.42230.0274113
2.70810.021890
3.25480.0266110
3.36040.0242100
2.80640.0262108
2.23950.0305126
1.76310.0434179
1.61750.0298123
2.08810.0264109
2.34870.0245101
2.43220.023597
2.18500.0497205
2.52020.0288119
2.27010.023597
1.74640.022593
1.87480.0310128
2.14660.0266110
1.44790.0279115
1.57460.0271112
1.24650.0259107
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " [ContinuousCarver] Carved distribution\n" ] }, { "data": { "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X distribution
 target_meanfrequencycount
x <= -1.218e+022.44380.25093107
-1.218e+02 < x <= -1.190e+021.37870.22422776
-1.190e+02 < x <= -1.183e+023.01750.10291274
-1.183e+02 < x <= -1.177e+022.16010.27353387
-1.177e+02 < x1.61550.14861840
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X_dev distribution
target_meanfrequencycount
2.47800.2357973
1.34870.2243926
3.04140.0988408
2.13280.28001156
1.67630.1611665
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
libraryfit_stransform_strain_r2test_r2r2_drop
0AutoCarver5.2450.07780.66520.65950.0057
1optbinning2.4040.00830.51450.50770.0068
2KBinsDiscretizer0.0070.00150.61810.6192-0.0011
\n", "
" ], "text/plain": [ " library fit_s transform_s train_r2 test_r2 r2_drop\n", "0 AutoCarver 5.245 0.0778 0.6652 0.6595 0.0057\n", "1 optbinning 2.404 0.0083 0.5145 0.5077 0.0068\n", "2 KBinsDiscretizer 0.007 0.0015 0.6181 0.6192 -0.0011" ] }, "execution_count": 20, "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": 21, "id": "b7da7c9b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_bars(regression_results, ['fit_s', 'test_r2', 'r2_drop'], 'California Housing \\u2014 regression')" ] }, { "cell_type": "markdown", "id": "notes-md", "metadata": {}, "source": [ "## How to read these numbers\n", "\n", "- **`fit_s` / `transform_s`** measure only `.fit` / `.transform` wall-clock — not data loading, not one-hot encoding, not the downstream model.\n", "- **`test_auc` / `test_r2`** are the headline metric. They reflect how well a *simple* downstream model performs on each library's binned output. A tree-based downstream model would tell a different (and less binning-sensitive) story.\n", "- **`auc_drop` / `r2_drop`** are `train - test` and measure how much each library's bins overfit. Lower is more robust. AutoCarver's dev-set veto is designed to keep this small.\n", "- **Same data, same seed, same downstream model** across libraries — but a single run, on one machine, with one set of hyper-parameters. Treat as illustrative.\n", "\n", "## When the result will move\n", "\n", "- **Bigger `max_n_mod` / smaller `min_freq`** will improve AutoCarver and optbinning's in-sample scores at the cost of `*_drop`. KBins doesn't have a target, so it's mostly insensitive.\n", "- **Different downstream model.** Gradient-boosted trees on the raw features beat any binning + linear pipeline. The point of binning is interpretability, not raw accuracy.\n", "- **Different dataset.** German Credit is small; on a 10M-row credit-risk dataset, `fit_s` is what dominates the comparison.\n", "\n", "See [comparison.rst](../../comparison.html) for the qualitative scope and algorithmic comparison." ] } ], "metadata": { "kernelspec": { "display_name": "AutoCarver", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.15" } }, "nbformat": 4, "nbformat_minor": 5 }