{
"cells": [
{
"cell_type": "markdown",
"id": "intro-md",
"metadata": {},
"source": [
"# Benchmark: AutoCarver vs. optbinning vs. KBinsDiscretizer\n",
"\n",
"This notebook runs the three binning libraries side-by-side on two public datasets:\n",
"\n",
"1. **German Credit** — binary classification, mixed numeric / categorical features, 1,000 rows.\n",
"2. **California Housing** — regression, all-numeric features, 20,640 rows.\n",
"\n",
"For each library and dataset, we report:\n",
"\n",
"- **`fit` and `transform` wall-clock** (seconds)\n",
"- **Downstream-model score** — AUC for binary, R² for regression — using a linear model (logistic regression / ridge) on the one-hot-encoded bin output\n",
"- **`train` → `test` score drop** as a coarse proxy for drift sensitivity\n",
"\n",
"All three libraries see the same `train + dev` data and are evaluated on the same held-out `test`. AutoCarver uses the dev sample for its built-in robustness veto; optbinning and KBinsDiscretizer don't have a dev-set concept and so treat the union of train + dev as one pooled training set — which is the comparison practitioners actually run.\n",
"\n",
"**This is not an IV / Tschuprow's T leaderboard.** Those metrics structurally favour the library whose objective they are. The downstream-model score is the metric a real scorecard team would use to pick a binner.\n",
"\n",
"Numbers come from a single run on a single machine with a fixed seed; treat them as illustrative, not as authoritative benchmark figures. Re-run on your own data before drawing conclusions."
]
},
{
"cell_type": "markdown",
"id": "setup-md",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "imports",
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import warnings\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.datasets import fetch_california_housing, fetch_openml\n",
"from sklearn.linear_model import LogisticRegression, Ridge\n",
"from sklearn.metrics import r2_score, roc_auc_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"\n",
"from AutoCarver import BinaryCarver, ContinuousCarver, Features\n",
"from AutoCarver.discretizers.utils.base_discretizer import DiscretizerConfig\n",
"\n",
"try:\n",
" from optbinning import ContinuousOptimalBinning, OptimalBinning\n",
"\n",
" HAS_OPTBINNING = True\n",
"except ImportError:\n",
" HAS_OPTBINNING = False\n",
" print('optbinning is not installed \\u2014 its rows will be skipped.')\n",
"\n",
"SEED = 42\n",
"warnings.filterwarnings('ignore')\n",
"plt.rcParams['figure.figsize'] = (10, 3.5)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "helpers",
"metadata": {},
"outputs": [],
"source": [
"def one_hot(df):\n",
" \"\"\"Treat every bin label as a categorical level and one-hot encode it.\n",
"\n",
" Lets a linear downstream model consume any of the three libraries' outputs\n",
" uniformly, without us computing WoE per bin.\n",
" \"\"\"\n",
" return pd.get_dummies(df.astype(str), drop_first=True).astype(float)\n",
"\n",
"\n",
"def fit_eval_binary(X_train, X_test, y_train, y_test):\n",
" Xtr = one_hot(X_train)\n",
" Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n",
" model = LogisticRegression(max_iter=1000, random_state=SEED).fit(Xtr, y_train)\n",
" return {\n",
" 'train_auc': roc_auc_score(y_train, model.predict_proba(Xtr)[:, 1]),\n",
" 'test_auc': roc_auc_score(y_test, model.predict_proba(Xte)[:, 1]),\n",
" }\n",
"\n",
"\n",
"def fit_eval_regression(X_train, X_test, y_train, y_test):\n",
" Xtr = one_hot(X_train)\n",
" Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n",
" model = Ridge(random_state=SEED).fit(Xtr, y_train)\n",
" return {\n",
" 'train_r2': r2_score(y_train, model.predict(Xtr)),\n",
" 'test_r2': r2_score(y_test, model.predict(Xte)),\n",
" }\n",
"\n",
"\n",
"def plot_bars(results_df, score_cols, title):\n",
" fig, axes = plt.subplots(1, len(score_cols), figsize=(4 * len(score_cols), 3.5))\n",
" if len(score_cols) == 1:\n",
" axes = [axes]\n",
" for ax, col in zip(axes, score_cols):\n",
" results_df.plot.bar(x='library', y=col, ax=ax, legend=False, color='#4C72B0')\n",
" ax.set_title(col)\n",
" ax.set_xlabel('')\n",
" ax.tick_params(axis='x', rotation=0)\n",
" fig.suptitle(title)\n",
" fig.tight_layout()\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "binners",
"metadata": {},
"outputs": [],
"source": [
"MAX_N_MOD = 5\n",
"MIN_FREQ = 0.05\n",
"\n",
"def bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n",
" Carver = BinaryCarver if kind == 'binary' else ContinuousCarver\n",
" features = Features(categoricals=categoricals, quantitatives=quantitatives)\n",
" config = DiscretizerConfig(verbose=True) # showing statistics\n",
" carver = Carver(features=features, min_freq=MIN_FREQ, max_n_mod=MAX_N_MOD, config=config)\n",
"\n",
" t0 = time.perf_counter()\n",
" X_tr = carver.fit_transform(X_train.copy(), y_train, X_dev=X_dev.copy(), y_dev=y_dev)\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" X_dv = carver.transform(X_dev.copy())\n",
" t1 = time.perf_counter()\n",
" X_te = carver.transform(X_test.copy())\n",
" transform_t = time.perf_counter() - t1\n",
" return pd.concat([X_tr, X_dv]), X_te, fit_t, transform_t\n",
"\n",
"\n",
"def bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n",
" Cls = OptimalBinning if kind == 'binary' else ContinuousOptimalBinning\n",
" X_all = pd.concat([X_train, X_dev])\n",
" y_all = pd.concat([y_train, y_dev])\n",
" binners = {}\n",
" train_binned = pd.DataFrame(index=X_all.index)\n",
" test_binned = pd.DataFrame(index=X_test.index)\n",
"\n",
" t0 = time.perf_counter()\n",
" for col in X_all.columns:\n",
" dtype = 'categorical' if col in categoricals else 'numerical'\n",
" binner = Cls(name=col, dtype=dtype, min_prebin_size=MIN_FREQ/2, max_n_bins=MAX_N_MOD)\n",
" binner.fit(X_all[col].to_numpy(), y_all.to_numpy())\n",
" binners[col] = binner\n",
" train_binned[col] = binner.transform(X_all[col].to_numpy(), metric='bins')\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" t1 = time.perf_counter()\n",
" for col, b in binners.items():\n",
" test_binned[col] = b.transform(X_test[col].to_numpy(), metric='bins')\n",
" transform_t = time.perf_counter() - t1\n",
" return train_binned, test_binned, fit_t, transform_t\n",
"\n",
"\n",
"def bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives, n_bins=5):\n",
" X_all = pd.concat([X_train, X_dev])\n",
" num_train = X_all[quantitatives].apply(lambda c: c.fillna(c.median()))\n",
" num_test = X_test[quantitatives].apply(lambda c: c.fillna(c.median()))\n",
" kbd = KBinsDiscretizer(n_bins=n_bins, encode='ordinal', strategy='quantile')\n",
"\n",
" t0 = time.perf_counter()\n",
" binned_num_train = pd.DataFrame(\n",
" kbd.fit_transform(num_train), columns=quantitatives, index=X_all.index\n",
" )\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" t1 = time.perf_counter()\n",
" binned_num_test = pd.DataFrame(\n",
" kbd.transform(num_test), columns=quantitatives, index=X_test.index\n",
" )\n",
" transform_t = time.perf_counter() - t1\n",
"\n",
" # KBins has no opinion on categoricals — pass them through as labels\n",
" train = pd.concat([binned_num_train, X_all[categoricals].astype(str)], axis=1)\n",
" test = pd.concat([binned_num_test, X_test[categoricals].astype(str)], axis=1)\n",
" return train, test, fit_t, transform_t"
]
},
{
"cell_type": "markdown",
"id": "binary-md",
"metadata": {},
"source": [
"## Binary classification — German Credit\n",
"\n",
"20 features (numeric + categorical), 1,000 rows, target = `class == 'bad'`. Train / dev / test split = 60 / 20 / 20 %."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "381a7051",
"metadata": {},
"outputs": [],
"source": "credit = fetch_openml(data_id=31, as_frame=True)\ndf = credit.frame.copy()\n\ny_binary = (df['class'] == 'bad').astype(int)\nX_binary = df.drop(columns=['class'])\n\nX_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)\nX_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\ncategoricals = [c for c in X_binary.columns if X_binary[c].dtype == object or isinstance(X_binary[c].dtype, pd.CategoricalDtype)]\nquantitatives = [c for c in X_binary.columns if c not in categoricals]\n\nprint(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\nprint(f'categoricals={len(categoricals)}, quantitatives={len(quantitatives)}')\nprint(f'bad rate (train)={y_train.mean():.3f}, (test)={y_test.mean():.3f}')"
},
{
"cell_type": "code",
"execution_count": 5,
"id": "run-binary",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"------\n",
"--- [QuantitativeDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
" - [ContinuousDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
" - [OrdinalDiscretizer] Fit Features(['duration', 'installment_commitment', 'residence_since', 'existing_credits', 'num_dependents'])\n",
"------\n",
"\n",
"------\n",
"--- [QualitativeDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n",
" - [CategoricalDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n",
"------\n",
"\n",
"---------\n",
"------ [BinaryCarver] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker', 'duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
"--- [BinaryCarver] Fit Categorical('checking_status') (1/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"
\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | no checking | \n",
" 0.1317 | \n",
" 0.4050 | \n",
"
\n",
" \n",
" | >=200 | \n",
" 0.2778 | \n",
" 0.0600 | \n",
"
\n",
" \n",
" | 0<=X<200 | \n",
" 0.3896 | \n",
" 0.2567 | \n",
"
\n",
" \n",
" | <0 | \n",
" 0.4671 | \n",
" 0.2783 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.0694 | \n",
" 0.3600 | \n",
"
\n",
" \n",
" | 0.0833 | \n",
" 0.0600 | \n",
"
\n",
" \n",
" | 0.3710 | \n",
" 0.3100 | \n",
"
\n",
" \n",
" | 0.5741 | \n",
" 0.2700 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/7 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | no checking, >=200 | \n",
" 0.1505 | \n",
" 0.4650 | \n",
"
\n",
" \n",
" | 0<=X<200, <0 | \n",
" 0.4299 | \n",
" 0.5350 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.0714 | \n",
" 0.4200 | \n",
"
\n",
" \n",
" | 0.4655 | \n",
" 0.5800 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('credit_history') (2/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | critical/other existing credit | \n",
" 0.1676 | \n",
" 0.2883 | \n",
"
\n",
" \n",
" | existing paid | \n",
" 0.3185 | \n",
" 0.5233 | \n",
"
\n",
" \n",
" | delayed previously | \n",
" 0.3621 | \n",
" 0.0967 | \n",
"
\n",
" \n",
" | all paid | \n",
" 0.5455 | \n",
" 0.0550 | \n",
"
\n",
" \n",
" | no credits/all paid | \n",
" 0.5455 | \n",
" 0.0367 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2241 | \n",
" 0.2900 | \n",
"
\n",
" \n",
" | 0.2703 | \n",
" 0.5550 | \n",
"
\n",
" \n",
" | 0.3571 | \n",
" 0.0700 | \n",
"
\n",
" \n",
" | 0.7273 | \n",
" 0.0550 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0300 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 15it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/15 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | critical/other existing credit | \n",
" 0.1676 | \n",
" 0.2883 | \n",
"
\n",
" \n",
" | existing paid, delayed previously | \n",
" 0.3253 | \n",
" 0.6200 | \n",
"
\n",
" \n",
" | all paid, no credits/all paid | \n",
" 0.5455 | \n",
" 0.0917 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2241 | \n",
" 0.2900 | \n",
"
\n",
" \n",
" | 0.2800 | \n",
" 0.6250 | \n",
"
\n",
" \n",
" | 0.7059 | \n",
" 0.0850 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('purpose') (3/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | used car | \n",
" 0.1875 | \n",
" 0.1067 | \n",
"
\n",
" \n",
" | radio/tv | \n",
" 0.2303 | \n",
" 0.2750 | \n",
"
\n",
" \n",
" | other, domestic appliance, retraining | \n",
" 0.2632 | \n",
" 0.0317 | \n",
"
\n",
" \n",
" | furniture/equipment | \n",
" 0.3333 | \n",
" 0.1700 | \n",
"
\n",
" \n",
" | new car | \n",
" 0.3401 | \n",
" 0.2450 | \n",
"
\n",
" \n",
" | business | \n",
" 0.3729 | \n",
" 0.0983 | \n",
"
\n",
" \n",
" | repairs | \n",
" 0.3750 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | education | \n",
" 0.4643 | \n",
" 0.0467 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.1250 | \n",
" 0.0800 | \n",
"
\n",
" \n",
" | 0.2295 | \n",
" 0.3050 | \n",
"
\n",
" \n",
" | 0.2727 | \n",
" 0.0550 | \n",
"
\n",
" \n",
" | 0.3235 | \n",
" 0.1700 | \n",
"
\n",
" \n",
" | 0.4222 | \n",
" 0.2250 | \n",
"
\n",
" \n",
" | 0.2778 | \n",
" 0.0900 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.4615 | \n",
" 0.0650 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 98it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/98 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | used car, radio/tv, other, domestic appliance, ret... | \n",
" 0.2218 | \n",
" 0.4133 | \n",
"
\n",
" \n",
" | new car, furniture/equipment, business, education,... | \n",
" 0.3551 | \n",
" 0.5867 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2159 | \n",
" 0.4400 | \n",
"
\n",
" \n",
" | 0.3661 | \n",
" 0.5600 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('savings_status') (4/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | >=1000 | \n",
" 0.0667 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" | 500<=X<1000 | \n",
" 0.1622 | \n",
" 0.0617 | \n",
"
\n",
" \n",
" | no known savings | \n",
" 0.1714 | \n",
" 0.1750 | \n",
"
\n",
" \n",
" | 100<=X<500 | \n",
" 0.3333 | \n",
" 0.1150 | \n",
"
\n",
" \n",
" | <100 | \n",
" 0.3649 | \n",
" 0.5983 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.1250 | \n",
" 0.0800 | \n",
"
\n",
" \n",
" | 0.1667 | \n",
" 0.1800 | \n",
"
\n",
" \n",
" | 0.3889 | \n",
" 0.0900 | \n",
"
\n",
" \n",
" | 0.3468 | \n",
" 0.6200 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 15it [00:00, 15040.54it/s]\n",
"Testing robustness : 0%| | 0/15 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | no known savings, >=1000, 500<=X<1000 | \n",
" 0.1512 | \n",
" 0.2867 | \n",
"
\n",
" \n",
" | <100, 100<=X<500 | \n",
" 0.3598 | \n",
" 0.7133 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.1724 | \n",
" 0.2900 | \n",
"
\n",
" \n",
" | 0.3521 | \n",
" 0.7100 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('employment') (5/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 4<=X<7 | \n",
" 0.1935 | \n",
" 0.1550 | \n",
"
\n",
" \n",
" | >=7 | \n",
" 0.2516 | \n",
" 0.2650 | \n",
"
\n",
" \n",
" | 1<=X<4 | \n",
" 0.2911 | \n",
" 0.3550 | \n",
"
\n",
" \n",
" | <1 | \n",
" 0.4272 | \n",
" 0.1717 | \n",
"
\n",
" \n",
" | unemployed | \n",
" 0.5000 | \n",
" 0.0533 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2632 | \n",
" 0.1900 | \n",
"
\n",
" \n",
" | 0.2600 | \n",
" 0.2500 | \n",
"
\n",
" \n",
" | 0.3621 | \n",
" 0.2900 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.1800 | \n",
"
\n",
" \n",
" | 0.2222 | \n",
" 0.0900 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 15it [00:00, ?it/s]\n",
"Testing robustness : 60%|██████ | 9/15 [00:00<00:00, 170.78it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [BinaryCarver] Carved distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | >=7, 4<=X<7 | \n",
" 0.2302 | \n",
" 0.4200 | \n",
"
\n",
" \n",
" | unemployed, 1<=X<4, <1 | \n",
" 0.3506 | \n",
" 0.5800 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2614 | \n",
" 0.4400 | \n",
"
\n",
" \n",
" | 0.3304 | \n",
" 0.5600 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('personal_status') (6/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | male single | \n",
" 0.2679 | \n",
" 0.5600 | \n",
"
\n",
" \n",
" | male mar/wid | \n",
" 0.2778 | \n",
" 0.0900 | \n",
"
\n",
" \n",
" | female div/dep/mar | \n",
" 0.3559 | \n",
" 0.2950 | \n",
"
\n",
" \n",
" | male div/sep | \n",
" 0.3636 | \n",
" 0.0550 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2830 | \n",
" 0.5300 | \n",
"
\n",
" \n",
" | 0.2381 | \n",
" 0.1050 | \n",
"
\n",
" \n",
" | 0.3385 | \n",
" 0.3250 | \n",
"
\n",
" \n",
" | 0.3750 | \n",
" 0.0400 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/7 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | male single, male mar/wid | \n",
" 0.2692 | \n",
" 0.6500 | \n",
"
\n",
" \n",
" | female div/dep/mar, male div/sep | \n",
" 0.3571 | \n",
" 0.3500 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2756 | \n",
" 0.6350 | \n",
"
\n",
" \n",
" | 0.3425 | \n",
" 0.3650 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('other_parties') (7/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | guarantor | \n",
" 0.1786 | \n",
" 0.0467 | \n",
"
\n",
" \n",
" | none | \n",
" 0.2996 | \n",
" 0.9067 | \n",
"
\n",
" \n",
" | co applicant | \n",
" 0.4286 | \n",
" 0.0467 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2500 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.2989 | \n",
" 0.9200 | \n",
"
\n",
" \n",
" | 0.3750 | \n",
" 0.0400 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 3it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 3/3 [00:00<00:00, 498.35it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('other_parties'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Categorical('property_magnitude') (8/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | real estate | \n",
" 0.2130 | \n",
" 0.2817 | \n",
"
\n",
" \n",
" | life insurance | \n",
" 0.3125 | \n",
" 0.2133 | \n",
"
\n",
" \n",
" | car | \n",
" 0.3143 | \n",
" 0.3500 | \n",
"
\n",
" \n",
" | no known property | \n",
" 0.4086 | \n",
" 0.1550 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2182 | \n",
" 0.2750 | \n",
"
\n",
" \n",
" | 0.2600 | \n",
" 0.2500 | \n",
"
\n",
" \n",
" | 0.3281 | \n",
" 0.3200 | \n",
"
\n",
" \n",
" | 0.4516 | \n",
" 0.1550 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/7 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | real estate | \n",
" 0.2130 | \n",
" 0.2817 | \n",
"
\n",
" \n",
" | car, life insurance | \n",
" 0.3136 | \n",
" 0.5633 | \n",
"
\n",
" \n",
" | no known property | \n",
" 0.4086 | \n",
" 0.1550 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2182 | \n",
" 0.2750 | \n",
"
\n",
" \n",
" | 0.2982 | \n",
" 0.5700 | \n",
"
\n",
" \n",
" | 0.4516 | \n",
" 0.1550 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('other_payment_plans') (9/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | none | \n",
" 0.2619 | \n",
" 0.8083 | \n",
"
\n",
" \n",
" | stores | \n",
" 0.4375 | \n",
" 0.0533 | \n",
"
\n",
" \n",
" | bank | \n",
" 0.4699 | \n",
" 0.1383 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2866 | \n",
" 0.8200 | \n",
"
\n",
" \n",
" | 0.4444 | \n",
" 0.0450 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.1350 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 3it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/3 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | none | \n",
" 0.2619 | \n",
" 0.8083 | \n",
"
\n",
" \n",
" | bank, stores | \n",
" 0.4609 | \n",
" 0.1917 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2866 | \n",
" 0.8200 | \n",
"
\n",
" \n",
" | 0.3611 | \n",
" 0.1800 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('housing') (10/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | own | \n",
" 0.2558 | \n",
" 0.7233 | \n",
"
\n",
" \n",
" | for free | \n",
" 0.3750 | \n",
" 0.1067 | \n",
"
\n",
" \n",
" | rent | \n",
" 0.4412 | \n",
" 0.1700 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2857 | \n",
" 0.7350 | \n",
"
\n",
" \n",
" | 0.4348 | \n",
" 0.1150 | \n",
"
\n",
" \n",
" | 0.2667 | \n",
" 0.1500 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 3it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/3 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | own | \n",
" 0.2558 | \n",
" 0.7233 | \n",
"
\n",
" \n",
" | for free, rent | \n",
" 0.4157 | \n",
" 0.2767 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2857 | \n",
" 0.7350 | \n",
"
\n",
" \n",
" | 0.3396 | \n",
" 0.2650 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('job') (11/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | skilled | \n",
" 0.2898 | \n",
" 0.6383 | \n",
"
\n",
" \n",
" | unskilled resident | \n",
" 0.2966 | \n",
" 0.1967 | \n",
"
\n",
" \n",
" | high qualif/self emp/mgmt | \n",
" 0.3258 | \n",
" 0.1483 | \n",
"
\n",
" \n",
" | unemp/unskilled non res | \n",
" 0.5000 | \n",
" 0.0167 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2541 | \n",
" 0.6100 | \n",
"
\n",
" \n",
" | 0.3171 | \n",
" 0.2050 | \n",
"
\n",
" \n",
" | 0.4839 | \n",
" 0.1550 | \n",
"
\n",
" \n",
" | 0.1667 | \n",
" 0.0300 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 57%|█████▋ | 4/7 [00:00<00:00, 389.52it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | skilled, unskilled resident | \n",
" 0.2914 | \n",
" 0.8350 | \n",
"
\n",
" \n",
" | high qualif/self emp/mgmt, unemp/unskilled non res | \n",
" 0.3434 | \n",
" 0.1650 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2699 | \n",
" 0.8150 | \n",
"
\n",
" \n",
" | 0.4324 | \n",
" 0.1850 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- [BinaryCarver] Fit Categorical('own_telephone') (12/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | yes | \n",
" 0.2645 | \n",
" 0.4033 | \n",
"
\n",
" \n",
" | none | \n",
" 0.3240 | \n",
" 0.5967 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3125 | \n",
" 0.4000 | \n",
"
\n",
" \n",
" | 0.2917 | \n",
" 0.6000 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 1it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 195.15it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('own_telephone'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Categorical('foreign_worker') (13/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | no | \n",
" 0.0435 | \n",
" 0.0383 | \n",
"
\n",
" \n",
" | yes | \n",
" 0.3102 | \n",
" 0.9617 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.2990 | \n",
" 0.9700 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 1it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 485.85it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('foreign_worker'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('duration') (14/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 8.00e+00 | \n",
" 0.0980 | \n",
" 0.0850 | \n",
"
\n",
" \n",
" | 8.00e+00 < x <= 9.00e+00 | \n",
" 0.2333 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" | 9.00e+00 < x <= 1.10e+01 | \n",
" 0.0870 | \n",
" 0.0383 | \n",
"
\n",
" \n",
" | 1.10e+01 < x <= 1.20e+01 | \n",
" 0.2883 | \n",
" 0.1850 | \n",
"
\n",
" \n",
" | 1.20e+01 < x <= 1.50e+01 | \n",
" 0.2273 | \n",
" 0.0733 | \n",
"
\n",
" \n",
" | 1.50e+01 < x <= 1.80e+01 | \n",
" 0.3692 | \n",
" 0.1083 | \n",
"
\n",
" \n",
" | 1.80e+01 < x <= 2.20e+01 | \n",
" 0.2381 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 2.20e+01 < x <= 2.40e+01 | \n",
" 0.3333 | \n",
" 0.1950 | \n",
"
\n",
" \n",
" | 2.40e+01 < x <= 2.80e+01 | \n",
" 0.2222 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 2.80e+01 < x <= 3.30e+01 | \n",
" 0.3846 | \n",
" 0.0433 | \n",
"
\n",
" \n",
" | 3.30e+01 < x <= 3.60e+01 | \n",
" 0.4727 | \n",
" 0.0917 | \n",
"
\n",
" \n",
" | 3.60e+01 < x <= 4.70e+01 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.70e+01 < x | \n",
" 0.4242 | \n",
" 0.0550 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.1000 | \n",
" 0.1000 | \n",
"
\n",
" \n",
" | 0.3077 | \n",
" 0.0650 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.2432 | \n",
" 0.1850 | \n",
"
\n",
" \n",
" | 0.0714 | \n",
" 0.0700 | \n",
"
\n",
" \n",
" | 0.3043 | \n",
" 0.1150 | \n",
"
\n",
" \n",
" | 0.4444 | \n",
" 0.0450 | \n",
"
\n",
" \n",
" | 0.3548 | \n",
" 0.1550 | \n",
"
\n",
" \n",
" | 0.7500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.4286 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.3529 | \n",
" 0.0850 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.5714 | \n",
" 0.0700 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 793it [00:00, 72200.99it/s]\n",
"Testing robustness : 0%| | 0/793 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.10e+01 | \n",
" 0.1346 | \n",
" 0.1733 | \n",
"
\n",
" \n",
" | 1.10e+01 < x <= 2.80e+01 | \n",
" 0.3052 | \n",
" 0.6117 | \n",
"
\n",
" \n",
" | 2.80e+01 < x | \n",
" 0.4186 | \n",
" 0.2150 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.1463 | \n",
" 0.2050 | \n",
"
\n",
" \n",
" | 0.2966 | \n",
" 0.5900 | \n",
"
\n",
" \n",
" | 0.4634 | \n",
" 0.2050 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 6.18e+02 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.18e+02 < x <= 7.08e+02 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.08e+02 < x <= 7.97e+02 | \n",
" 0.3333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.97e+02 < x <= 9.09e+02 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.09e+02 < x <= 1.03e+03 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.03e+03 < x <= 1.16e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.16e+03 < x <= 1.21e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.21e+03 < x <= 1.26e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.26e+03 < x <= 1.31e+03 | \n",
" 0.3333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.31e+03 < x <= 1.37e+03 | \n",
" 0.4667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.37e+03 < x <= 1.41e+03 | \n",
" 0.1250 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | 1.41e+03 < x <= 1.47e+03 | \n",
" 0.1429 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.47e+03 < x <= 1.53e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.53e+03 < x <= 1.60e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.60e+03 < x <= 1.82e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.82e+03 < x <= 1.92e+03 | \n",
" 0.5000 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | 1.92e+03 < x <= 1.98e+03 | \n",
" 0.2857 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.98e+03 < x <= 2.12e+03 | \n",
" 0.3333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.12e+03 < x <= 2.21e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.21e+03 < x <= 2.30e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.30e+03 < x <= 2.38e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.38e+03 < x <= 2.48e+03 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.48e+03 < x <= 2.62e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.62e+03 < x <= 2.75e+03 | \n",
" 0.3333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.75e+03 < x <= 2.92e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.92e+03 < x <= 3.07e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.07e+03 < x <= 3.35e+03 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.35e+03 < x <= 3.51e+03 | \n",
" 0.1333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.51e+03 < x <= 3.63e+03 | \n",
" 0.1333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.63e+03 < x <= 3.91e+03 | \n",
" 0.0667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.91e+03 < x <= 4.24e+03 | \n",
" 0.4667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.24e+03 < x <= 4.66e+03 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.66e+03 < x <= 5.08e+03 | \n",
" 0.4667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.08e+03 < x <= 5.80e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.80e+03 < x <= 6.36e+03 | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.36e+03 < x <= 6.85e+03 | \n",
" 0.4667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.85e+03 < x <= 7.48e+03 | \n",
" 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.48e+03 < x <= 8.23e+03 | \n",
" 0.4667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 8.23e+03 < x <= 9.57e+03 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.57e+03 < x | \n",
" 0.5333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.1429 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0600 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.2857 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.2857 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0050 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.2000 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.1000 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.8000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.2857 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.6667 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.6154 | \n",
" 0.0650 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 24828.55it/s]\n",
"Testing robustness : 0%| | 0/92170 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.35e+03 | \n",
" 0.2889 | \n",
" 0.6750 | \n",
"
\n",
" \n",
" | 3.35e+03 < x <= 3.91e+03 | \n",
" 0.1111 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 3.91e+03 < x | \n",
" 0.3867 | \n",
" 0.2500 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2460 | \n",
" 0.6300 | \n",
"
\n",
" \n",
" | 0.2083 | \n",
" 0.1200 | \n",
"
\n",
" \n",
" | 0.4800 | \n",
" 0.2500 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.00e+00 | \n",
" 0.2436 | \n",
" 0.1300 | \n",
"
\n",
" \n",
" | 1.00e+00 < x <= 2.00e+00 | \n",
" 0.2606 | \n",
" 0.2367 | \n",
"
\n",
" \n",
" | 2.00e+00 < x <= 3.00e+00 | \n",
" 0.2979 | \n",
" 0.1567 | \n",
"
\n",
" \n",
" | 3.00e+00 < x | \n",
" 0.3357 | \n",
" 0.4767 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.1071 | \n",
" 0.1400 | \n",
"
\n",
" \n",
" | 0.2667 | \n",
" 0.2250 | \n",
"
\n",
" \n",
" | 0.2414 | \n",
" 0.1450 | \n",
"
\n",
" \n",
" | 0.3878 | \n",
" 0.4900 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 0%| | 0/7 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.0e+00 | \n",
" 0.2545 | \n",
" 0.3667 | \n",
"
\n",
" \n",
" | 2.0e+00 < x | \n",
" 0.3263 | \n",
" 0.6333 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2055 | \n",
" 0.3650 | \n",
"
\n",
" \n",
" | 0.3543 | \n",
" 0.6350 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.00e+00 | \n",
" 0.3117 | \n",
" 0.1283 | \n",
"
\n",
" \n",
" | 1.00e+00 < x <= 2.00e+00 | \n",
" 0.2905 | \n",
" 0.2983 | \n",
"
\n",
" \n",
" | 2.00e+00 < x <= 3.00e+00 | \n",
" 0.3000 | \n",
" 0.1667 | \n",
"
\n",
" \n",
" | 3.00e+00 < x | \n",
" 0.3033 | \n",
" 0.4067 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.2174 | \n",
" 0.1150 | \n",
"
\n",
" \n",
" | 0.3529 | \n",
" 0.3400 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.1500 | \n",
"
\n",
" \n",
" | 0.2658 | \n",
" 0.3950 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 7it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 7/7 [00:00<00:00, 221.74it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('residence_since'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('age') (18/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.10e+01 | \n",
" 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.10e+01 < x <= 2.20e+01 | \n",
" 0.3684 | \n",
" 0.0317 | \n",
"
\n",
" \n",
" | 2.20e+01 < x <= 2.30e+01 | \n",
" 0.4500 | \n",
" 0.0333 | \n",
"
\n",
" \n",
" | 2.30e+01 < x <= 2.40e+01 | \n",
" 0.3333 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 2.40e+01 < x <= 2.50e+01 | \n",
" 0.5161 | \n",
" 0.0517 | \n",
"
\n",
" \n",
" | 2.50e+01 < x <= 2.60e+01 | \n",
" 0.2500 | \n",
" 0.0467 | \n",
"
\n",
" \n",
" | 2.60e+01 < x <= 2.70e+01 | \n",
" 0.2258 | \n",
" 0.0517 | \n",
"
\n",
" \n",
" | 2.70e+01 < x <= 2.80e+01 | \n",
" 0.4091 | \n",
" 0.0367 | \n",
"
\n",
" \n",
" | 2.80e+01 < x <= 2.90e+01 | \n",
" 0.3913 | \n",
" 0.0383 | \n",
"
\n",
" \n",
" | 2.90e+01 < x <= 3.00e+01 | \n",
" 0.2143 | \n",
" 0.0467 | \n",
"
\n",
" \n",
" | 3.00e+01 < x <= 3.10e+01 | \n",
" 0.2308 | \n",
" 0.0433 | \n",
"
\n",
" \n",
" | 3.10e+01 < x <= 3.20e+01 | \n",
" 0.2500 | \n",
" 0.0333 | \n",
"
\n",
" \n",
" | 3.20e+01 < x <= 3.30e+01 | \n",
" 0.3636 | \n",
" 0.0367 | \n",
"
\n",
" \n",
" | 3.30e+01 < x <= 3.40e+01 | \n",
" 0.3636 | \n",
" 0.0367 | \n",
"
\n",
" \n",
" | 3.40e+01 < x <= 3.50e+01 | \n",
" 0.1724 | \n",
" 0.0483 | \n",
"
\n",
" \n",
" | 3.50e+01 < x <= 3.60e+01 | \n",
" 0.2083 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 3.60e+01 < x <= 3.70e+01 | \n",
" 0.3333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.70e+01 < x <= 3.80e+01 | \n",
" 0.1875 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | 3.80e+01 < x <= 3.90e+01 | \n",
" 0.2941 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 3.90e+01 < x <= 4.10e+01 | \n",
" 0.3182 | \n",
" 0.0367 | \n",
"
\n",
" \n",
" | 4.10e+01 < x <= 4.20e+01 | \n",
" 0.2727 | \n",
" 0.0183 | \n",
"
\n",
" \n",
" | 4.20e+01 < x <= 4.40e+01 | \n",
" 0.1905 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 4.40e+01 < x <= 4.60e+01 | \n",
" 0.2632 | \n",
" 0.0317 | \n",
"
\n",
" \n",
" | 4.60e+01 < x <= 4.70e+01 | \n",
" 0.4000 | \n",
" 0.0167 | \n",
"
\n",
" \n",
" | 4.70e+01 < x <= 4.90e+01 | \n",
" 0.1429 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 4.90e+01 < x <= 5.10e+01 | \n",
" 0.1429 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 5.10e+01 < x <= 5.40e+01 | \n",
" 0.2941 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 5.40e+01 < x <= 5.70e+01 | \n",
" 0.3333 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 5.70e+01 < x <= 6.30e+01 | \n",
" 0.4375 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | 6.30e+01 < x | \n",
" 0.2667 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 0.6364 | \n",
" 0.0550 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0600 | \n",
"
\n",
" \n",
" | 0.1538 | \n",
" 0.0650 | \n",
"
\n",
" \n",
" | 0.1429 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.4000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0500 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.3750 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0150 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.1429 | \n",
" 0.0350 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0050 | \n",
"
\n",
" \n",
" | 0.2308 | \n",
" 0.0650 | \n",
"
\n",
" \n",
" | 0.6000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.3333 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 0.1250 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.2000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.5000 | \n",
" 0.0100 | \n",
"
\n",
" \n",
" | 0.6000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 0.2500 | \n",
" 0.0400 | \n",
"
\n",
" \n",
" | 0.0000 | \n",
" 0.0400 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 27840it [00:00, 36056.63it/s]\n",
"Testing robustness : 0%| | 0/27840 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.5e+01 | \n",
" 0.4245 | \n",
" 0.1767 | \n",
"
\n",
" \n",
" | 2.5e+01 < x | \n",
" 0.2733 | \n",
" 0.8233 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.4359 | \n",
" 0.1950 | \n",
"
\n",
" \n",
" | 0.2671 | \n",
" 0.8050 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.00e+00 | \n",
" 0.3061 | \n",
" 0.6317 | \n",
"
\n",
" \n",
" | 1.00e+00 < x <= 2.00e+00 | \n",
" 0.2899 | \n",
" 0.3450 | \n",
"
\n",
" \n",
" | 2.00e+00 < x | \n",
" 0.2857 | \n",
" 0.0233 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3000 | \n",
" 0.6500 | \n",
"
\n",
" \n",
" | 0.3016 | \n",
" 0.3150 | \n",
"
\n",
" \n",
" | 0.2857 | \n",
" 0.0350 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 3it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 3/3 [00:00<00:00, 287.10it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('existing_credits'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('num_dependents') (20/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.0e+00 | \n",
" 0.2984 | \n",
" 0.8433 | \n",
"
\n",
" \n",
" | 1.0e+00 < x | \n",
" 0.3085 | \n",
" 0.1567 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0.3000 | \n",
" 0.8500 | \n",
"
\n",
" \n",
" | 0.3000 | \n",
" 0.1500 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 1it [00:00, ?it/s]\n",
"Testing robustness : 100%|██████████| 1/1 [00:00<00:00, 228.14it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('num_dependents'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" library | \n",
" fit_s | \n",
" transform_s | \n",
" train_auc | \n",
" test_auc | \n",
" auc_drop | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" AutoCarver | \n",
" 6.405 | \n",
" 0.0110 | \n",
" 0.8321 | \n",
" 0.7874 | \n",
" 0.0447 | \n",
"
\n",
" \n",
" | 1 | \n",
" optbinning | \n",
" 1.043 | \n",
" 0.0149 | \n",
" 0.8523 | \n",
" 0.7931 | \n",
" 0.0592 | \n",
"
\n",
" \n",
" | 2 | \n",
" KBinsDiscretizer | \n",
" 0.005 | \n",
" 0.0012 | \n",
" 0.8401 | \n",
" 0.7943 | \n",
" 0.0458 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" library fit_s transform_s train_auc test_auc auc_drop\n",
"0 AutoCarver 6.405 0.0110 0.8321 0.7874 0.0447\n",
"1 optbinning 1.043 0.0149 0.8523 0.7931 0.0592\n",
"2 KBinsDiscretizer 0.005 0.0012 0.8401 0.7943 0.0458"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_full = pd.concat([y_train, y_dev])\n",
"\n",
"runs = [(\n",
" 'AutoCarver',\n",
" lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n",
")]\n",
"if HAS_OPTBINNING:\n",
" runs.append((\n",
" 'optbinning',\n",
" lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n",
" ))\n",
"runs.append((\n",
" 'KBinsDiscretizer',\n",
" lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n",
"))\n",
"\n",
"rows = []\n",
"for name, run in runs:\n",
" X_tr, X_te, fit_t, transform_t = run()\n",
" scores = fit_eval_binary(X_tr, X_te, y_train_full, y_test)\n",
" rows.append({\n",
" 'library': name,\n",
" 'fit_s': round(fit_t, 3),\n",
" 'transform_s': round(transform_t, 4),\n",
" 'train_auc': round(scores['train_auc'], 4),\n",
" 'test_auc': round(scores['test_auc'], 4),\n",
" 'auc_drop': round(scores['train_auc'] - scores['test_auc'], 4),\n",
" })\n",
"\n",
"binary_results = pd.DataFrame(rows)\n",
"binary_results"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "plot-binary",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJsAAAFcCAYAAABvIr+2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVotJREFUeJzt3QucTeX++PEvIzNuM+7XZCgMueU2kZKSSxIVoctIUkcuoyk5IxlSpBNRREToJFJIpRGiOsctt6Tcr5MwozLjklFm/V/f5/z3/u29Z8+YGWuP2Xs+79dr1ey111r7WZe9Huu7n+f7FLAsyxIAAAAAAADABgXt2AgAAAAAAABAsAkAAAAAAAC2omUTAAAAAAAAbEOwCQAAAAAAALYh2AQAAAAAAADbEGwCAAAAAACAbQg2AQAAAAAAwDYEmwAAAAAAAGAbgk0AAAAAAACwDcEmAABwVcyZM0cKFCgghw8fds67/fbbzZTXPPbYY1K8ePEsLav7NGrUKAlUeizCw8Pz1HWj/vWvf0mNGjUkKChIGjVqZOZpObW8uU3Pv5YRAID8imATACBgHTp0SAYOHCi1atWSokWLmqlu3boyYMAA2bFjh+R327dvl0ceeUSqVq0qwcHBUrp0aWnbtq289957cunSJckLfv31V/PgrmUFMvLVV1/J888/L7fccou5fseOHevzg3X+/Hlzba5du5YTAwCAh0KeMwAACASff/659OjRQwoVKiQPP/ywNGzYUAoWLCi7d++WxYsXy7Rp00wwqlq1apIfvfvuu/KPf/xDKlSoII8++qjUrFlTzpw5I6tXr5a+ffvK8ePHZfjw4VclaOAZbBo9erRpoeJorZLX/fnnn+a6g2/o9dqzZ08TIHX4+uuvzfd71qxZUrhwYef8PXv2mPm+Cjbptak8W+ONGDFC/vnPf/rkcwEA8Af8SwgAEHAOHDhgHkY1kKTBk0qVKrm9P378eHn77bdtewg9d+6cFCtWTPzFhg0bTKCpRYsWsnz5cilRooTzvSFDhsjmzZtl586dGa7/999/S1pamttDvV18sc3cFhISkuufaVmWXLhwQYoUKSKBTrvJ6eQqMTHR7Lvn9eMakMpNGmwk4AgAyM/oRgcACDivvfaaCQBpdxrPQJPSh8DBgweb7mOutNVTt27dTHcyDRg0bdpUli1b5jVfzDfffCNPP/20lC9fXq699lpn64Z69eqZLnqtW7c23fZuuOEG+fjjj837uk5kZKR5KK5du7asWrXKbdtHjhwx29T3dJkyZcpI9+7d0+WmcZThv//9r8TExEi5cuVMsOu+++6TpKSkyx4fbY2h63/wwQdugSYH3W9Hnhv9bF329ddfl0mTJsn1119vHuB//vnnLB8z9dNPP8kdd9xh9kuP18svv2wCVp5cczZp96RmzZqZv/v06WPKoZPu/9Vy8OBBad++vTnelStXlpdeeskEejLL2eTI37N//35zXEuWLClhYWFmn7R1jCu9ZvU46XWlx1m7fWorPE/a0uuee+6RFStWmGOux/Wdd94x15224vNGryst++V8+eWXZjt6bYSGhppzMH/+/EzX0eujZcuW5prVsjRp0sR53btauXKltGrVyhwDzYGlZfJsQffWW2/JjTfeaL4/pUqVMvvn+vmeOZv0bz1u+p33vEa85Ww6ffq0PPPMM+Y9PcZ6PUZFRcmpU6fM+xcvXpSRI0eafdDzpOf61ltvlTVr1ji3oZ+t3zvX75PrefeWs0mDtGPGjHF+h/Tzdd9TU1O9ntv//Oc/0rx5c/O90lxU8+bNy/QcAACQl9CyCQAQkF3oNMijgZ2s0mCI5nupUqWK6f6iD5gfffSRdO3aVT755BMTyHGlQSF92NSHUn3Idfjjjz/Mg6K2rNJAkQYK9G8N7GirIW1R9NBDD5lkxhqkSUhIcAZ8vv/+e1m3bp1ZXh+A9YFW19fgiwZ39OHb1aBBg8zDeFxcnFlWg0Gao2rhwoUZ7qcGN7S112233SbXXXddlo+PPsxry5knn3zSmd8pq8fsxIkT0qZNG/Ow7VhuxowZl22FU6dOHRPM0WOsn6sP/EqDGleD5rHq0KGD3HzzzSagGR8fb4697peW83IefPBBqV69uowbN062bt1qujJqUElb2jno+dZAy7333muCop999pm51jQwp7nGXGkXsV69eslTTz0l/fr1M4EbDeDo39oyTQOfDnpt7d2713TvyowGaR5//HFThtjYWBMU2rZtm9lXvW4zMnnyZFNm7bKqwZoFCxaY61+/i506dTLL6PWi340GDRqY46XXkQbgNGjqMHPmTBMI1u9GdHS0ueY0eLtx48YMP//9998319OmTZvMMc3sGjl79qy5jnbt2mX2s3HjxibIpAHSX375RcqWLSsp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jA67du0y+637V6dOHWvlypVeI9V2cS2jXs96zek1ltE+qO+++86UKTEx0e14bdu2ze1crFq1ymrSpIk5fi1atDDfT4ft27ebY6vXsn63GjdubH3//fdu63u2WDp//rxVu3Ztc3wyKp+2yqpXr57ZD/2u3Xnnnc7voZo1a5ZVt25dq3DhwlbFihWtAQMGON/Tz3z77betzp07m+vEcW6WLl1q3XTTTeacVK9e3Ro1apSzFZdeW67XnL721lrS89p0XVbpddyhQwdzHZUvX9565JFHrKSkJLdrR8saHR1tWk/qsYP9qEv8vy6hHqEeUdQj1CNXC/WI/9cjirokd+sSnkcGBPzziF8Hm/QBsmnTpubvzz77zLr++uuttLS0LAWb9AH22WeftW688UbTFUgnnXfp0iXTdadVq1bW5s2brQ0bNpgHZz3IDhqAaNeu3WXL9/HHH5vAxb59+8wDuV48GjDRz3B9WNebri538OBBE7To1q2bOcmuHnjgAec8DWjpl//xxx+3duzYYf3888/WQw89ZB7ItXuf48urD/SPPvqotXPnTjPlVYMHDzaBIA2w/fTTT6bsWln99ttvzn846v5+9dVXZn/vuecec8z0OOj+Tpo0yXS5cpxHrfCVfok0oDFu3Dhrz5491ptvvmkFBQWZ7WQWbNIgkga3dB09F7odx5dar6trrrnGatu2rQmSbNmyxZRNj39mwSYtn94c9u7da82dO9d0E3OUQ7uj6bm76667TDBGgzrNmzfPlWDT888/b64TDRB5e99Bj+lTTz1l3XDDDemuX89gkwYD165da87lrbfearqXOuj3Ta9jrcj0WHz00Udmn13X99Y9TrtD6nsnT55MVz79zhQqVMiaOHGiKZNeI1OnTnVeB3rj1iCUXid6TjWQ6dq9UrerN1btAnvgwAETbP7222/NOZszZ46Zp+dKrzk9h0oDbo4AtV5zjgCc583dcU3qpIFmPX76nVS6nxpgjY2NNcdDg9d6DbRp08bt2tHzo4FKDdq5Bu5gH+oS/69LqEeoRxT1CPXI1UI94v/1iKIuyd26hOeRNwL+ecSvg036EKsPkEqDAWXLljX/0MhKsCmjnE16EjUgoS2HHPShWddztLbRFht6M8oujRDqdhytchwP6459cC2nayum5ORk87CsLaXU+++/b24EjsCa0hu6lmvFihXOL6+2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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_bars(binary_results, ['fit_s', 'test_auc', 'auc_drop'], 'German Credit \\u2014 binary classification')"
]
},
{
"cell_type": "markdown",
"id": "regression-md",
"metadata": {},
"source": [
"## Regression — California Housing\n",
"\n",
"6 numeric demographic features (Latitude / Longitude dropped — see comment in the next cell), 20,640 rows, target = median house value. Same 60 / 20 / 20 split."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "load-regression",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train=12384, dev=4128, test=4128\n",
"quantitatives=8 (['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n"
]
}
],
"source": [
"housing = fetch_california_housing(as_frame=True)\n",
"X_reg = housing.frame.drop(columns=['MedHouseVal'])\n",
"y_reg = housing.frame['MedHouseVal']\n",
"\n",
"X_train, X_rest, y_train, y_rest = train_test_split(X_reg, y_reg, test_size=0.4, random_state=SEED)\n",
"X_dev, X_test, y_dev, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=SEED)\n",
"\n",
"quantitatives = list(X_reg.columns)\n",
"categoricals = []\n",
"\n",
"print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n",
"print(f'quantitatives={len(quantitatives)} ({quantitatives})')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "adebc1c4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"------\n",
"--- [QuantitativeDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
" - [ContinuousDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
" - [OrdinalDiscretizer] Fit Features(['HouseAge'])\n",
"------\n",
"\n",
"---------\n",
"------ [ContinuousCarver] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
"--- [ContinuousCarver] Fit Quantitative('MedInc') (1/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.335e+00 | \n",
" 1.1984 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.335e+00 < x <= 1.593e+00 | \n",
" 1.0105 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.593e+00 < x <= 1.740e+00 | \n",
" 1.1133 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.740e+00 < x <= 1.906e+00 | \n",
" 1.1535 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.906e+00 < x <= 2.029e+00 | \n",
" 1.2090 | \n",
" 0.0248 | \n",
"
\n",
" \n",
" | 2.029e+00 < x <= 2.152e+00 | \n",
" 1.2141 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 2.152e+00 < x <= 2.243e+00 | \n",
" 1.2417 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.243e+00 < x <= 2.350e+00 | \n",
" 1.3827 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 2.350e+00 < x <= 2.468e+00 | \n",
" 1.3614 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.468e+00 < x <= 2.569e+00 | \n",
" 1.4190 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.569e+00 < x <= 2.655e+00 | \n",
" 1.5264 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.655e+00 < x <= 2.737e+00 | \n",
" 1.5428 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.737e+00 < x <= 2.862e+00 | \n",
" 1.5708 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.862e+00 < x <= 2.974e+00 | \n",
" 1.6630 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.974e+00 < x <= 3.054e+00 | \n",
" 1.6270 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.054e+00 < x <= 3.135e+00 | \n",
" 1.7079 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.135e+00 < x <= 3.216e+00 | \n",
" 1.8554 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.216e+00 < x <= 3.315e+00 | \n",
" 1.8373 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.315e+00 < x <= 3.423e+00 | \n",
" 1.9121 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.423e+00 < x <= 3.531e+00 | \n",
" 1.9162 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 3.531e+00 < x <= 3.633e+00 | \n",
" 1.9678 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.633e+00 < x <= 3.723e+00 | \n",
" 2.0226 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.723e+00 < x <= 3.839e+00 | \n",
" 1.9891 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 3.839e+00 < x <= 3.971e+00 | \n",
" 2.0493 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 3.971e+00 < x <= 4.073e+00 | \n",
" 2.0538 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 4.073e+00 < x <= 4.179e+00 | \n",
" 2.2004 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 4.179e+00 < x <= 4.315e+00 | \n",
" 2.2417 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.315e+00 < x <= 4.464e+00 | \n",
" 2.2394 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.464e+00 < x <= 4.611e+00 | \n",
" 2.2577 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 4.611e+00 < x <= 4.757e+00 | \n",
" 2.4351 | \n",
" 0.0248 | \n",
"
\n",
" \n",
" | 4.757e+00 < x <= 4.946e+00 | \n",
" 2.3482 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.946e+00 < x <= 5.117e+00 | \n",
" 2.4592 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.117e+00 < x <= 5.308e+00 | \n",
" 2.5784 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.308e+00 < x <= 5.538e+00 | \n",
" 2.6892 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.538e+00 < x <= 5.828e+00 | \n",
" 2.7867 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 5.828e+00 < x <= 6.148e+00 | \n",
" 3.0943 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 6.148e+00 < x <= 6.599e+00 | \n",
" 3.3031 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.599e+00 < x <= 7.313e+00 | \n",
" 3.6064 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.313e+00 < x <= 8.433e+00 | \n",
" 4.0191 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 8.433e+00 < x | \n",
" 4.7343 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.2507 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.0319 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 1.1587 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 1.0855 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.2523 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 1.2606 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 1.2643 | \n",
" 0.0208 | \n",
"
\n",
" \n",
" | 1.3335 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.4528 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 1.4887 | \n",
" 0.0305 | \n",
"
\n",
" \n",
" | 1.5142 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | 1.6485 | \n",
" 0.0208 | \n",
"
\n",
" \n",
" | 1.5544 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 1.6189 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 1.7433 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.6369 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 1.7802 | \n",
" 0.0276 | \n",
"
\n",
" \n",
" | 1.9721 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 1.8287 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 1.8295 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 1.9907 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 1.9517 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 2.0220 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 2.1509 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 2.0977 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 2.2054 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 2.2979 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 2.3553 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 2.2924 | \n",
" 0.0184 | \n",
"
\n",
" \n",
" | 2.4401 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 2.2931 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.4940 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | 2.6133 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.7177 | \n",
" 0.0189 | \n",
"
\n",
" \n",
" | 2.9110 | \n",
" 0.0276 | \n",
"
\n",
" \n",
" | 3.0729 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 3.0759 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 3.5985 | \n",
" 0.0228 | \n",
"
\n",
" \n",
" | 4.0385 | \n",
" 0.0206 | \n",
"
\n",
" \n",
" | 4.6131 | \n",
" 0.0264 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 25379.50it/s]\n",
"Testing robustness : 0%| | 0/92170 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.47e+00 | \n",
" 1.2093 | \n",
" 0.2250 | \n",
"
\n",
" \n",
" | 2.47e+00 < x <= 3.13e+00 | \n",
" 1.5796 | \n",
" 0.1750 | \n",
"
\n",
" \n",
" | 3.13e+00 < x <= 4.07e+00 | \n",
" 1.9560 | \n",
" 0.2251 | \n",
"
\n",
" \n",
" | 4.07e+00 < x <= 5.83e+00 | \n",
" 2.4238 | \n",
" 0.2499 | \n",
"
\n",
" \n",
" | 5.83e+00 < x | \n",
" 3.7524 | \n",
" 0.1249 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.2323 | \n",
" 0.2275 | \n",
"
\n",
" \n",
" | 1.5934 | \n",
" 0.1747 | \n",
"
\n",
" \n",
" | 1.9604 | \n",
" 0.2425 | \n",
"
\n",
" \n",
" | 2.4652 | \n",
" 0.2372 | \n",
"
\n",
" \n",
" | 3.6870 | \n",
" 0.1182 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 5.00e+00 | \n",
" 2.2358 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 5.00e+00 < x <= 8.00e+00 | \n",
" 1.9727 | \n",
" 0.0263 | \n",
"
\n",
" \n",
" | 8.00e+00 < x <= 1.10e+01 | \n",
" 1.8133 | \n",
" 0.0352 | \n",
"
\n",
" \n",
" | 1.10e+01 < x <= 1.30e+01 | \n",
" 1.8358 | \n",
" 0.0267 | \n",
"
\n",
" \n",
" | 1.30e+01 < x <= 1.40e+01 | \n",
" 1.8778 | \n",
" 0.0200 | \n",
"
\n",
" \n",
" | 1.40e+01 < x <= 1.60e+01 | \n",
" 1.9355 | \n",
" 0.0652 | \n",
"
\n",
" \n",
" | 1.60e+01 < x <= 1.70e+01 | \n",
" 1.8929 | \n",
" 0.0319 | \n",
"
\n",
" \n",
" | 1.70e+01 < x <= 1.80e+01 | \n",
" 1.9455 | \n",
" 0.0276 | \n",
"
\n",
" \n",
" | 1.80e+01 < x <= 2.00e+01 | \n",
" 1.9470 | \n",
" 0.0470 | \n",
"
\n",
" \n",
" | 2.00e+01 < x <= 2.10e+01 | \n",
" 1.9630 | \n",
" 0.0217 | \n",
"
\n",
" \n",
" | 2.10e+01 < x <= 2.20e+01 | \n",
" 2.0661 | \n",
" 0.0195 | \n",
"
\n",
" \n",
" | 2.20e+01 < x <= 2.30e+01 | \n",
" 1.9593 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 2.30e+01 < x <= 2.50e+01 | \n",
" 2.1713 | \n",
" 0.0480 | \n",
"
\n",
" \n",
" | 2.50e+01 < x <= 2.60e+01 | \n",
" 2.0937 | \n",
" 0.0304 | \n",
"
\n",
" \n",
" | 2.60e+01 < x <= 2.70e+01 | \n",
" 2.0568 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 2.70e+01 < x <= 2.80e+01 | \n",
" 1.9827 | \n",
" 0.0241 | \n",
"
\n",
" \n",
" | 2.80e+01 < x <= 2.90e+01 | \n",
" 2.0203 | \n",
" 0.0232 | \n",
"
\n",
" \n",
" | 2.90e+01 < x <= 3.00e+01 | \n",
" 2.0515 | \n",
" 0.0236 | \n",
"
\n",
" \n",
" | 3.00e+01 < x <= 3.20e+01 | \n",
" 2.0453 | \n",
" 0.0484 | \n",
"
\n",
" \n",
" | 3.20e+01 < x <= 3.30e+01 | \n",
" 2.0343 | \n",
" 0.0316 | \n",
"
\n",
" \n",
" | 3.30e+01 < x <= 3.40e+01 | \n",
" 2.1357 | \n",
" 0.0320 | \n",
"
\n",
" \n",
" | 3.40e+01 < x <= 3.50e+01 | \n",
" 2.0004 | \n",
" 0.0399 | \n",
"
\n",
" \n",
" | 3.50e+01 < x <= 3.60e+01 | \n",
" 2.1148 | \n",
" 0.0437 | \n",
"
\n",
" \n",
" | 3.60e+01 < x <= 3.70e+01 | \n",
" 2.0004 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 3.70e+01 < x <= 3.90e+01 | \n",
" 2.0133 | \n",
" 0.0355 | \n",
"
\n",
" \n",
" | 3.90e+01 < x <= 4.10e+01 | \n",
" 2.0306 | \n",
" 0.0273 | \n",
"
\n",
" \n",
" | 4.10e+01 < x <= 4.20e+01 | \n",
" 1.9889 | \n",
" 0.0167 | \n",
"
\n",
" \n",
" | 4.20e+01 < x <= 4.40e+01 | \n",
" 2.0742 | \n",
" 0.0351 | \n",
"
\n",
" \n",
" | 4.40e+01 < x <= 4.50e+01 | \n",
" 2.2977 | \n",
" 0.0132 | \n",
"
\n",
" \n",
" | 4.50e+01 < x <= 4.70e+01 | \n",
" 1.9517 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 4.70e+01 < x | \n",
" 2.5848 | \n",
" 0.0857 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.0720 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 1.9201 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 1.9054 | \n",
" 0.0344 | \n",
"
\n",
" \n",
" | 1.8736 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 1.8410 | \n",
" 0.0196 | \n",
"
\n",
" \n",
" | 1.8826 | \n",
" 0.0606 | \n",
"
\n",
" \n",
" | 1.8592 | \n",
" 0.0375 | \n",
"
\n",
" \n",
" | 1.8799 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 1.8746 | \n",
" 0.0436 | \n",
"
\n",
" \n",
" | 1.9849 | \n",
" 0.0206 | \n",
"
\n",
" \n",
" | 2.2181 | \n",
" 0.0170 | \n",
"
\n",
" \n",
" | 2.1550 | \n",
" 0.0201 | \n",
"
\n",
" \n",
" | 2.0847 | \n",
" 0.0579 | \n",
"
\n",
" \n",
" | 2.0778 | \n",
" 0.0296 | \n",
"
\n",
" \n",
" | 2.1784 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 2.2242 | \n",
" 0.0208 | \n",
"
\n",
" \n",
" | 1.7802 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 1.7629 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 2.0493 | \n",
" 0.0504 | \n",
"
\n",
" \n",
" | 1.9343 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.0837 | \n",
" 0.0349 | \n",
"
\n",
" \n",
" | 2.1957 | \n",
" 0.0417 | \n",
"
\n",
" \n",
" | 2.0157 | \n",
" 0.0431 | \n",
"
\n",
" \n",
" | 2.2006 | \n",
" 0.0296 | \n",
"
\n",
" \n",
" | 2.0026 | \n",
" 0.0351 | \n",
"
\n",
" \n",
" | 1.9461 | \n",
" 0.0305 | \n",
"
\n",
" \n",
" | 1.9196 | \n",
" 0.0194 | \n",
"
\n",
" \n",
" | 2.0117 | \n",
" 0.0312 | \n",
"
\n",
" \n",
" | 2.1310 | \n",
" 0.0155 | \n",
"
\n",
" \n",
" | 2.0515 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 2.5968 | \n",
" 0.0911 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 31930it [00:01, 30868.38it/s]\n",
"Testing robustness : 1%| | 310/31930 [00:01<01:51, 284.45it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.30e+01 | \n",
" 1.9466 | \n",
" 0.3703 | \n",
"
\n",
" \n",
" | 2.30e+01 < x <= 2.60e+01 | \n",
" 2.1412 | \n",
" 0.0785 | \n",
"
\n",
" \n",
" | 2.60e+01 < x <= 3.60e+01 | \n",
" 2.0526 | \n",
" 0.2909 | \n",
"
\n",
" \n",
" | 3.60e+01 < x <= 4.70e+01 | \n",
" 2.0381 | \n",
" 0.1747 | \n",
"
\n",
" \n",
" | 4.70e+01 < x | \n",
" 2.5848 | \n",
" 0.0857 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.9316 | \n",
" 0.3547 | \n",
"
\n",
" \n",
" | 2.0824 | \n",
" 0.0875 | \n",
"
\n",
" \n",
" | 2.0383 | \n",
" 0.2829 | \n",
"
\n",
" \n",
" | 2.0347 | \n",
" 0.1839 | \n",
"
\n",
" \n",
" | 2.5968 | \n",
" 0.0911 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.066e+00 | \n",
" 1.9506 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.066e+00 < x <= 3.432e+00 | \n",
" 1.8880 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.432e+00 < x <= 3.647e+00 | \n",
" 1.8233 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.647e+00 < x <= 3.792e+00 | \n",
" 1.8292 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.792e+00 < x <= 3.933e+00 | \n",
" 1.7847 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.933e+00 < x <= 4.052e+00 | \n",
" 1.8499 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.052e+00 < x <= 4.168e+00 | \n",
" 1.8718 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.168e+00 < x <= 4.276e+00 | \n",
" 1.8333 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.276e+00 < x <= 4.365e+00 | \n",
" 1.7965 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.365e+00 < x <= 4.454e+00 | \n",
" 1.6952 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.454e+00 < x <= 4.536e+00 | \n",
" 1.7535 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.536e+00 < x <= 4.621e+00 | \n",
" 1.7952 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.621e+00 < x <= 4.705e+00 | \n",
" 1.8465 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.705e+00 < x <= 4.794e+00 | \n",
" 1.7486 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.794e+00 < x <= 4.874e+00 | \n",
" 1.7719 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.874e+00 < x <= 4.941e+00 | \n",
" 1.7219 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 4.941e+00 < x <= 5.014e+00 | \n",
" 1.7176 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 5.014e+00 < x <= 5.088e+00 | \n",
" 1.7707 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.088e+00 < x <= 5.160e+00 | \n",
" 1.7918 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.160e+00 < x <= 5.233e+00 | \n",
" 1.7791 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.233e+00 < x <= 5.315e+00 | \n",
" 1.8209 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.315e+00 < x <= 5.384e+00 | \n",
" 1.9107 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.384e+00 < x <= 5.460e+00 | \n",
" 1.7728 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.460e+00 < x <= 5.532e+00 | \n",
" 1.8996 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.532e+00 < x <= 5.616e+00 | \n",
" 1.8872 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.616e+00 < x <= 5.694e+00 | \n",
" 1.9905 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.694e+00 < x <= 5.778e+00 | \n",
" 2.0029 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.778e+00 < x <= 5.858e+00 | \n",
" 2.0107 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.858e+00 < x <= 5.959e+00 | \n",
" 2.1137 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.959e+00 < x <= 6.059e+00 | \n",
" 2.0469 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.059e+00 < x <= 6.157e+00 | \n",
" 2.1450 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.157e+00 < x <= 6.270e+00 | \n",
" 2.2477 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.270e+00 < x <= 6.396e+00 | \n",
" 2.3495 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.396e+00 < x <= 6.543e+00 | \n",
" 2.4232 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.543e+00 < x <= 6.717e+00 | \n",
" 2.6241 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.717e+00 < x <= 6.946e+00 | \n",
" 2.7573 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.946e+00 < x <= 7.233e+00 | \n",
" 3.0763 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.233e+00 < x <= 7.637e+00 | \n",
" 3.1118 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.637e+00 < x <= 8.324e+00 | \n",
" 3.5846 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 8.324e+00 < x | \n",
" 2.7391 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.0908 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.8579 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 2.0031 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 1.8060 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.8137 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 1.7725 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 1.7723 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 1.7839 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.7902 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 1.8121 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 1.6265 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 1.8349 | \n",
" 0.0276 | \n",
"
\n",
" \n",
" | 1.8339 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.7725 | \n",
" 0.0342 | \n",
"
\n",
" \n",
" | 1.8188 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 1.8480 | \n",
" 0.0191 | \n",
"
\n",
" \n",
" | 1.8333 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 1.8191 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 1.7419 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 1.7642 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 1.7645 | \n",
" 0.0303 | \n",
"
\n",
" \n",
" | 1.7917 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 1.8651 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 1.8645 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.8082 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 1.8483 | \n",
" 0.0177 | \n",
"
\n",
" \n",
" | 2.0778 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.0005 | \n",
" 0.0187 | \n",
"
\n",
" \n",
" | 1.9724 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 2.2623 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 2.0818 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 2.2889 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.3280 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 2.5373 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 2.6787 | \n",
" 0.0201 | \n",
"
\n",
" \n",
" | 2.7457 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 3.0108 | \n",
" 0.0303 | \n",
"
\n",
" \n",
" | 3.1596 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 3.4340 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 2.7568 | \n",
" 0.0245 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 24989.21it/s]\n",
"Testing robustness : 0%| | 227/92170 [00:00<04:38, 329.59it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.65e+00 | \n",
" 1.8874 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 3.65e+00 < x <= 5.62e+00 | \n",
" 1.8022 | \n",
" 0.5500 | \n",
"
\n",
" \n",
" | 5.62e+00 < x <= 6.16e+00 | \n",
" 2.0516 | \n",
" 0.1500 | \n",
"
\n",
" \n",
" | 6.16e+00 < x <= 6.54e+00 | \n",
" 2.3401 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 6.54e+00 < x | \n",
" 2.9823 | \n",
" 0.1500 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.9788 | \n",
" 0.0739 | \n",
"
\n",
" \n",
" | 1.7962 | \n",
" 0.5758 | \n",
"
\n",
" \n",
" | 2.0474 | \n",
" 0.1359 | \n",
"
\n",
" \n",
" | 2.3886 | \n",
" 0.0717 | \n",
"
\n",
" \n",
" | 2.9752 | \n",
" 0.1427 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 9.1220e-01 | \n",
" 2.0511 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.1220e-01 < x <= 9.4022e-01 | \n",
" 2.1264 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.4022e-01 < x <= 9.5595e-01 | \n",
" 2.0638 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.5595e-01 < x <= 9.6743e-01 | \n",
" 2.0756 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 9.6743e-01 < x <= 9.7590e-01 | \n",
" 2.2562 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 9.7590e-01 < x <= 9.8343e-01 | \n",
" 2.1709 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.8343e-01 < x <= 9.8987e-01 | \n",
" 2.1450 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.8987e-01 < x <= 9.9592e-01 | \n",
" 2.1772 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 9.9592e-01 < x <= 1.0019e+00 | \n",
" 2.1915 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 1.0019e+00 < x <= 1.0068e+00 | \n",
" 2.0949 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.0068e+00 < x <= 1.0112e+00 | \n",
" 2.2440 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0112e+00 < x <= 1.0156e+00 | \n",
" 2.1687 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0156e+00 < x <= 1.0204e+00 | \n",
" 2.1723 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0204e+00 < x <= 1.0250e+00 | \n",
" 2.2003 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 1.0250e+00 < x <= 1.0290e+00 | \n",
" 2.1324 | \n",
" 0.0246 | \n",
"
\n",
" \n",
" | 1.0290e+00 < x <= 1.0331e+00 | \n",
" 2.1840 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0331e+00 < x <= 1.0369e+00 | \n",
" 2.0321 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0369e+00 < x <= 1.0412e+00 | \n",
" 2.1746 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0412e+00 < x <= 1.0453e+00 | \n",
" 2.2536 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0453e+00 < x <= 1.0493e+00 | \n",
" 2.1546 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0493e+00 < x <= 1.0534e+00 | \n",
" 2.0738 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 1.0534e+00 < x <= 1.0574e+00 | \n",
" 2.1224 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.0574e+00 < x <= 1.0615e+00 | \n",
" 2.0414 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0615e+00 < x <= 1.0662e+00 | \n",
" 2.1569 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 1.0662e+00 < x <= 1.0712e+00 | \n",
" 2.0972 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0712e+00 < x <= 1.0763e+00 | \n",
" 2.0714 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.0763e+00 < x <= 1.0816e+00 | \n",
" 2.0244 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.0816e+00 < x <= 1.0874e+00 | \n",
" 2.0135 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.0874e+00 < x <= 1.0933e+00 | \n",
" 2.2239 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.0933e+00 < x <= 1.1000e+00 | \n",
" 2.0244 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 1.1000e+00 < x <= 1.1071e+00 | \n",
" 2.0077 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 1.1071e+00 < x <= 1.1160e+00 | \n",
" 1.9564 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 1.1160e+00 < x <= 1.1267e+00 | \n",
" 2.0077 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.1267e+00 < x <= 1.1387e+00 | \n",
" 1.9305 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.1387e+00 < x <= 1.1538e+00 | \n",
" 1.8130 | \n",
" 0.0258 | \n",
"
\n",
" \n",
" | 1.1538e+00 < x <= 1.1739e+00 | \n",
" 1.8060 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 1.1739e+00 < x <= 1.2074e+00 | \n",
" 1.9109 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.2074e+00 < x <= 1.2730e+00 | \n",
" 1.8950 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.2730e+00 < x <= 1.5018e+00 | \n",
" 1.7962 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.5018e+00 < x | \n",
" 1.4931 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.7961 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 2.0098 | \n",
" 0.0298 | \n",
"
\n",
" \n",
" | 2.3039 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 2.2390 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.3293 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 1.9318 | \n",
" 0.0194 | \n",
"
\n",
" \n",
" | 2.1575 | \n",
" 0.0199 | \n",
"
\n",
" \n",
" | 2.1740 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 2.2207 | \n",
" 0.0337 | \n",
"
\n",
" \n",
" | 2.1811 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 2.0475 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.2743 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 2.2627 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 2.1068 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 2.4459 | \n",
" 0.0228 | \n",
"
\n",
" \n",
" | 2.1280 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 2.1193 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.2280 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.0336 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | 2.0195 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 1.9898 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 2.2270 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 1.9244 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 2.1509 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | 2.2223 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.9654 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 2.1085 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 2.0332 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 1.9262 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 2.1139 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.9025 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 1.8628 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 1.9501 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.0231 | \n",
" 0.0206 | \n",
"
\n",
" \n",
" | 1.8622 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 1.8137 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.0399 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 1.6392 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 1.7221 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.6019 | \n",
" 0.0240 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 24396.36it/s]\n",
"Testing robustness : 2%|▏ | 1722/92170 [00:05<04:27, 338.26it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.049e+00 | \n",
" 2.1535 | \n",
" 0.5000 | \n",
"
\n",
" \n",
" | 1.049e+00 < x <= 1.093e+00 | \n",
" 2.0915 | \n",
" 0.2250 | \n",
"
\n",
" \n",
" | 1.093e+00 < x <= 1.139e+00 | \n",
" 1.9857 | \n",
" 0.1249 | \n",
"
\n",
" \n",
" | 1.139e+00 < x <= 1.207e+00 | \n",
" 1.8434 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 1.207e+00 < x | \n",
" 1.7279 | \n",
" 0.0750 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.1526 | \n",
" 0.5029 | \n",
"
\n",
" \n",
" | 2.0582 | \n",
" 0.2248 | \n",
"
\n",
" \n",
" | 1.9707 | \n",
" 0.1235 | \n",
"
\n",
" \n",
" | 1.9057 | \n",
" 0.0780 | \n",
"
\n",
" \n",
" | 1.6558 | \n",
" 0.0707 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.08e+02 | \n",
" 1.9050 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 2.08e+02 < x <= 3.53e+02 | \n",
" 2.0277 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 3.53e+02 < x <= 4.42e+02 | \n",
" 2.0655 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.42e+02 < x <= 5.12e+02 | \n",
" 2.2067 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 5.12e+02 < x <= 5.75e+02 | \n",
" 2.1327 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 5.75e+02 < x <= 6.27e+02 | \n",
" 2.0731 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 6.27e+02 < x <= 6.75e+02 | \n",
" 2.3627 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 6.75e+02 < x <= 7.16e+02 | \n",
" 2.2006 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 7.16e+02 < x <= 7.56e+02 | \n",
" 2.0900 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | 7.56e+02 < x <= 7.94e+02 | \n",
" 2.0191 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 7.94e+02 < x <= 8.32e+02 | \n",
" 2.3248 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 8.32e+02 < x <= 8.67e+02 | \n",
" 2.0763 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | 8.67e+02 < x <= 9.02e+02 | \n",
" 2.0313 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 9.02e+02 < x <= 9.40e+02 | \n",
" 2.1185 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 9.40e+02 < x <= 9.78e+02 | \n",
" 2.1790 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | 9.78e+02 < x <= 1.02e+03 | \n",
" 2.0746 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.02e+03 < x <= 1.06e+03 | \n",
" 1.9522 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.06e+03 < x <= 1.09e+03 | \n",
" 2.1186 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.09e+03 < x <= 1.13e+03 | \n",
" 2.0592 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.13e+03 < x <= 1.17e+03 | \n",
" 2.0640 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.17e+03 < x <= 1.22e+03 | \n",
" 2.0134 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.22e+03 < x <= 1.26e+03 | \n",
" 2.1690 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.26e+03 < x <= 1.30e+03 | \n",
" 2.0558 | \n",
" 0.0248 | \n",
"
\n",
" \n",
" | 1.30e+03 < x <= 1.35e+03 | \n",
" 1.9711 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | 1.35e+03 < x <= 1.41e+03 | \n",
" 2.0185 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.41e+03 < x <= 1.46e+03 | \n",
" 2.0004 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 1.46e+03 < x <= 1.52e+03 | \n",
" 2.0911 | \n",
" 0.0248 | \n",
"
\n",
" \n",
" | 1.52e+03 < x <= 1.59e+03 | \n",
" 2.1322 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 1.59e+03 < x <= 1.66e+03 | \n",
" 1.9949 | \n",
" 0.0246 | \n",
"
\n",
" \n",
" | 1.66e+03 < x <= 1.73e+03 | \n",
" 2.0233 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.73e+03 < x <= 1.82e+03 | \n",
" 1.8946 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | 1.82e+03 < x <= 1.91e+03 | \n",
" 1.9504 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.91e+03 < x <= 2.02e+03 | \n",
" 2.0074 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.02e+03 < x <= 2.16e+03 | \n",
" 2.0213 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.16e+03 < x <= 2.32e+03 | \n",
" 2.0541 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.32e+03 < x <= 2.56e+03 | \n",
" 2.0757 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.56e+03 < x <= 2.86e+03 | \n",
" 2.0142 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.86e+03 < x <= 3.28e+03 | \n",
" 1.9196 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.28e+03 < x <= 4.25e+03 | \n",
" 2.0439 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.25e+03 < x | \n",
" 2.0010 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.9895 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 1.8189 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 2.1479 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 2.2434 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 2.1281 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 2.2908 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 2.0926 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 2.1757 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 2.2182 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.1433 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 2.0769 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 2.1889 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.0488 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 2.1585 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 2.0699 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.0396 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.9843 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 2.1062 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 1.9823 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 2.1353 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 2.1132 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 1.9696 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 2.1243 | \n",
" 0.0196 | \n",
"
\n",
" \n",
" | 1.9774 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 1.8002 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 2.1500 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 1.9471 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 1.9535 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.0915 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 2.0390 | \n",
" 0.0228 | \n",
"
\n",
" \n",
" | 2.1380 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 1.9706 | \n",
" 0.0203 | \n",
"
\n",
" \n",
" | 1.8717 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 1.9082 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 2.0895 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.8131 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 2.0019 | \n",
" 0.0269 | \n",
"
\n",
" \n",
" | 2.0234 | \n",
" 0.0201 | \n",
"
\n",
" \n",
" | 2.1558 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.0339 | \n",
" 0.0225 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 23487.99it/s]\n",
"Testing robustness : 1%| | 753/92170 [00:01<04:00, 380.31it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.53e+02 | \n",
" 1.9663 | \n",
" 0.0502 | \n",
"
\n",
" \n",
" | 3.53e+02 < x <= 8.32e+02 | \n",
" 2.1636 | \n",
" 0.2253 | \n",
"
\n",
" \n",
" | 8.32e+02 < x <= 1.73e+03 | \n",
" 2.0604 | \n",
" 0.4745 | \n",
"
\n",
" \n",
" | 1.73e+03 < x <= 2.16e+03 | \n",
" 1.9683 | \n",
" 0.1000 | \n",
"
\n",
" \n",
" | 2.16e+03 < x | \n",
" 2.0181 | \n",
" 0.1500 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.9038 | \n",
" 0.0540 | \n",
"
\n",
" \n",
" | 2.1659 | \n",
" 0.2398 | \n",
"
\n",
" \n",
" | 2.0445 | \n",
" 0.4680 | \n",
"
\n",
" \n",
" | 1.9639 | \n",
" 0.0925 | \n",
"
\n",
" \n",
" | 2.0169 | \n",
" 0.1456 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 1.699e+00 | \n",
" 2.6141 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.699e+00 < x <= 1.868e+00 | \n",
" 2.7986 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.868e+00 < x <= 1.976e+00 | \n",
" 2.6979 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.976e+00 < x <= 2.071e+00 | \n",
" 2.5558 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.071e+00 < x <= 2.161e+00 | \n",
" 2.4582 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.161e+00 < x <= 2.228e+00 | \n",
" 2.2757 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.228e+00 < x <= 2.288e+00 | \n",
" 2.3592 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.288e+00 < x <= 2.341e+00 | \n",
" 2.2507 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.341e+00 < x <= 2.388e+00 | \n",
" 2.1371 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.388e+00 < x <= 2.435e+00 | \n",
" 2.2708 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.435e+00 < x <= 2.475e+00 | \n",
" 2.1989 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.475e+00 < x <= 2.515e+00 | \n",
" 2.1564 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.515e+00 < x <= 2.557e+00 | \n",
" 2.1279 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.557e+00 < x <= 2.598e+00 | \n",
" 2.2428 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.598e+00 < x <= 2.639e+00 | \n",
" 2.1116 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.639e+00 < x <= 2.674e+00 | \n",
" 2.2343 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.674e+00 < x <= 2.712e+00 | \n",
" 2.0489 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.712e+00 < x <= 2.746e+00 | \n",
" 2.2196 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.746e+00 < x <= 2.784e+00 | \n",
" 2.1211 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.784e+00 < x <= 2.824e+00 | \n",
" 2.2645 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.824e+00 < x <= 2.861e+00 | \n",
" 2.1565 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 2.861e+00 < x <= 2.899e+00 | \n",
" 2.2323 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.899e+00 < x <= 2.943e+00 | \n",
" 2.0714 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.943e+00 < x <= 2.984e+00 | \n",
" 2.0495 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.984e+00 < x <= 3.026e+00 | \n",
" 1.9917 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.026e+00 < x <= 3.071e+00 | \n",
" 1.9623 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.071e+00 < x <= 3.117e+00 | \n",
" 2.0491 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.117e+00 < x <= 3.168e+00 | \n",
" 1.9336 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.168e+00 < x <= 3.221e+00 | \n",
" 1.9472 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.221e+00 < x <= 3.279e+00 | \n",
" 1.8938 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.279e+00 < x <= 3.344e+00 | \n",
" 1.8804 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.344e+00 < x <= 3.424e+00 | \n",
" 1.8724 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.424e+00 < x <= 3.508e+00 | \n",
" 1.8000 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.508e+00 < x <= 3.606e+00 | \n",
" 1.6571 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.606e+00 < x <= 3.719e+00 | \n",
" 1.5624 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.719e+00 < x <= 3.870e+00 | \n",
" 1.5709 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.870e+00 < x <= 4.089e+00 | \n",
" 1.4854 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.089e+00 < x <= 4.317e+00 | \n",
" 1.4240 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.317e+00 < x <= 4.705e+00 | \n",
" 1.3233 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 4.705e+00 < x | \n",
" 1.5280 | \n",
" 0.0250 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.7524 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 2.7763 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 2.6502 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 2.5990 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 2.4828 | \n",
" 0.0296 | \n",
"
\n",
" \n",
" | 2.4039 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 2.2567 | \n",
" 0.0281 | \n",
"
\n",
" \n",
" | 2.4137 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 2.3471 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 2.2425 | \n",
" 0.0300 | \n",
"
\n",
" \n",
" | 2.0911 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 2.2072 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 2.1370 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.0973 | \n",
" 0.0281 | \n",
"
\n",
" \n",
" | 2.0188 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 2.0825 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 2.2615 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 2.0114 | \n",
" 0.0213 | \n",
"
\n",
" \n",
" | 2.2314 | \n",
" 0.0257 | \n",
"
\n",
" \n",
" | 2.0203 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 2.0908 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 1.8887 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 1.9894 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.2316 | \n",
" 0.0228 | \n",
"
\n",
" \n",
" | 2.0891 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 1.9787 | \n",
" 0.0223 | \n",
"
\n",
" \n",
" | 2.0818 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 1.8602 | \n",
" 0.0203 | \n",
"
\n",
" \n",
" | 1.9611 | \n",
" 0.0189 | \n",
"
\n",
" \n",
" | 1.7265 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 1.7789 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 1.8341 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 1.6481 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 1.6989 | \n",
" 0.0247 | \n",
"
\n",
" \n",
" | 1.6267 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 1.5547 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.4150 | \n",
" 0.0293 | \n",
"
\n",
" \n",
" | 1.5364 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 1.4245 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 1.5598 | \n",
" 0.0266 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 25299.64it/s]\n",
"Testing robustness : 0%| | 0/92170 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 2.16e+00 | \n",
" 2.6250 | \n",
" 0.1250 | \n",
"
\n",
" \n",
" | 2.16e+00 < x <= 2.90e+00 | \n",
" 2.2005 | \n",
" 0.4251 | \n",
"
\n",
" \n",
" | 2.90e+00 < x <= 3.51e+00 | \n",
" 1.9501 | \n",
" 0.2749 | \n",
"
\n",
" \n",
" | 3.51e+00 < x <= 3.87e+00 | \n",
" 1.5968 | \n",
" 0.0750 | \n",
"
\n",
" \n",
" | 3.87e+00 < x | \n",
" 1.4402 | \n",
" 0.1000 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.6484 | \n",
" 0.1308 | \n",
"
\n",
" \n",
" | 2.1665 | \n",
" 0.4247 | \n",
"
\n",
" \n",
" | 1.9311 | \n",
" 0.2636 | \n",
"
\n",
" \n",
" | 1.6265 | \n",
" 0.0768 | \n",
"
\n",
" \n",
" | 1.4801 | \n",
" 0.1042 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.275e+01 | \n",
" 1.5912 | \n",
" 0.0287 | \n",
"
\n",
" \n",
" | 3.275e+01 < x <= 3.284e+01 | \n",
" 1.9471 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 3.284e+01 < x <= 3.321e+01 | \n",
" 2.1038 | \n",
" 0.0246 | \n",
"
\n",
" \n",
" | 3.321e+01 < x <= 3.365e+01 | \n",
" 2.7833 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 3.365e+01 < x <= 3.374e+01 | \n",
" 2.4326 | \n",
" 0.0268 | \n",
"
\n",
" \n",
" | 3.374e+01 < x <= 3.379e+01 | \n",
" 2.1829 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 3.379e+01 < x <= 3.383e+01 | \n",
" 2.4232 | \n",
" 0.0229 | \n",
"
\n",
" \n",
" | 3.383e+01 < x <= 3.387e+01 | \n",
" 2.3003 | \n",
" 0.0241 | \n",
"
\n",
" \n",
" | 3.387e+01 < x <= 3.391e+01 | \n",
" 2.1570 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 3.391e+01 < x <= 3.394e+01 | \n",
" 1.6300 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 3.394e+01 < x <= 3.397e+01 | \n",
" 1.8594 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 3.397e+01 < x <= 3.400e+01 | \n",
" 1.9482 | \n",
" 0.0224 | \n",
"
\n",
" \n",
" | 3.400e+01 < x <= 3.403e+01 | \n",
" 2.1267 | \n",
" 0.0277 | \n",
"
\n",
" \n",
" | 3.403e+01 < x <= 3.406e+01 | \n",
" 2.4021 | \n",
" 0.0339 | \n",
"
\n",
" \n",
" | 3.406e+01 < x <= 3.408e+01 | \n",
" 2.2476 | \n",
" 0.0214 | \n",
"
\n",
" \n",
" | 3.408e+01 < x <= 3.410e+01 | \n",
" 2.1003 | \n",
" 0.0203 | \n",
"
\n",
" \n",
" | 3.410e+01 < x <= 3.413e+01 | \n",
" 2.3646 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 3.413e+01 < x <= 3.417e+01 | \n",
" 2.7771 | \n",
" 0.0301 | \n",
"
\n",
" \n",
" | 3.417e+01 < x <= 3.420e+01 | \n",
" 2.5061 | \n",
" 0.0174 | \n",
"
\n",
" \n",
" | 3.420e+01 < x <= 3.427e+01 | \n",
" 2.3463 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 3.427e+01 < x <= 3.453e+01 | \n",
" 2.4559 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 3.453e+01 < x <= 3.532e+01 | \n",
" 1.4914 | \n",
" 0.0246 | \n",
"
\n",
" \n",
" | 3.532e+01 < x <= 3.623e+01 | \n",
" 0.9208 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.623e+01 < x <= 3.672e+01 | \n",
" 1.2441 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 3.672e+01 < x <= 3.697e+01 | \n",
" 1.3129 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | 3.697e+01 < x <= 3.729e+01 | \n",
" 2.6241 | \n",
" 0.0239 | \n",
"
\n",
" \n",
" | 3.729e+01 < x <= 3.737e+01 | \n",
" 2.6574 | \n",
" 0.0258 | \n",
"
\n",
" \n",
" | 3.737e+01 < x <= 3.753e+01 | \n",
" 3.0105 | \n",
" 0.0255 | \n",
"
\n",
" \n",
" | 3.753e+01 < x <= 3.765e+01 | \n",
" 2.4197 | \n",
" 0.0243 | \n",
"
\n",
" \n",
" | 3.765e+01 < x <= 3.772e+01 | \n",
" 2.1174 | \n",
" 0.0256 | \n",
"
\n",
" \n",
" | 3.772e+01 < x <= 3.777e+01 | \n",
" 2.5537 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 3.777e+01 < x <= 3.781e+01 | \n",
" 2.7647 | \n",
" 0.0221 | \n",
"
\n",
" \n",
" | 3.781e+01 < x <= 3.793e+01 | \n",
" 2.6181 | \n",
" 0.0238 | \n",
"
\n",
" \n",
" | 3.793e+01 < x <= 3.800e+01 | \n",
" 1.7622 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 3.800e+01 < x <= 3.826e+01 | \n",
" 1.5924 | \n",
" 0.0243 | \n",
"
\n",
" \n",
" | 3.826e+01 < x <= 3.850e+01 | \n",
" 1.8570 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 3.850e+01 < x <= 3.863e+01 | \n",
" 1.3981 | \n",
" 0.0241 | \n",
"
\n",
" \n",
" | 3.863e+01 < x <= 3.898e+01 | \n",
" 1.3962 | \n",
" 0.0251 | \n",
"
\n",
" \n",
" | 3.898e+01 < x <= 3.975e+01 | \n",
" 1.1241 | \n",
" 0.0255 | \n",
"
\n",
" \n",
" | 3.975e+01 < x | \n",
" 0.8442 | \n",
" 0.0244 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.5761 | \n",
" 0.0320 | \n",
"
\n",
" \n",
" | 1.9445 | \n",
" 0.0298 | \n",
"
\n",
" \n",
" | 2.2318 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 2.7115 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 2.4368 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.2910 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 2.3528 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 2.3233 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 2.0937 | \n",
" 0.0368 | \n",
"
\n",
" \n",
" | 1.6319 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 1.7992 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 1.9408 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.1292 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 2.3261 | \n",
" 0.0334 | \n",
"
\n",
" \n",
" | 2.2713 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 2.2817 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 2.2228 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 2.8224 | \n",
" 0.0303 | \n",
"
\n",
" \n",
" | 2.3178 | \n",
" 0.0187 | \n",
"
\n",
" \n",
" | 2.2778 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 2.5025 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.3719 | \n",
" 0.0201 | \n",
"
\n",
" \n",
" | 0.9336 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 1.2516 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | 1.2597 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 2.5507 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.5351 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 2.9827 | \n",
" 0.0283 | \n",
"
\n",
" \n",
" | 2.6519 | \n",
" 0.0194 | \n",
"
\n",
" \n",
" | 2.0869 | \n",
" 0.0203 | \n",
"
\n",
" \n",
" | 2.6145 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 2.5272 | \n",
" 0.0208 | \n",
"
\n",
" \n",
" | 2.6246 | \n",
" 0.0308 | \n",
"
\n",
" \n",
" | 1.6630 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.5156 | \n",
" 0.0206 | \n",
"
\n",
" \n",
" | 1.7549 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 1.3101 | \n",
" 0.0196 | \n",
"
\n",
" \n",
" | 1.3997 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 1.1114 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 0.8671 | \n",
" 0.0225 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 26786.63it/s]\n",
"Testing robustness : 0%| | 1/92170 [00:00<5:13:31, 4.90it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= 3.45e+01 | \n",
" 2.2311 | \n",
" 0.5254 | \n",
"
\n",
" \n",
" | 3.45e+01 < x <= 3.70e+01 | \n",
" 1.2415 | \n",
" 0.1011 | \n",
"
\n",
" \n",
" | 3.70e+01 < x <= 3.79e+01 | \n",
" 2.5927 | \n",
" 0.1997 | \n",
"
\n",
" \n",
" | 3.79e+01 < x <= 3.85e+01 | \n",
" 1.7393 | \n",
" 0.0748 | \n",
"
\n",
" \n",
" | 3.85e+01 < x | \n",
" 1.1907 | \n",
" 0.0991 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.2111 | \n",
" 0.5487 | \n",
"
\n",
" \n",
" | 1.2065 | \n",
" 0.0952 | \n",
"
\n",
" \n",
" | 2.5902 | \n",
" 0.1945 | \n",
"
\n",
" \n",
" | 1.6488 | \n",
" 0.0681 | \n",
"
\n",
" \n",
" | 1.1801 | \n",
" 0.0935 | \n",
"
\n",
" \n",
"
\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",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= -1.2269e+02 | \n",
" 1.4063 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | -1.2269e+02 < x <= -1.2247e+02 | \n",
" 2.8878 | \n",
" 0.0259 | \n",
"
\n",
" \n",
" | -1.2247e+02 < x <= -1.2241e+02 | \n",
" 3.2397 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | -1.2241e+02 < x <= -1.2229e+02 | \n",
" 2.1582 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | -1.2229e+02 < x <= -1.2223e+02 | \n",
" 2.3463 | \n",
" 0.0260 | \n",
"
\n",
" \n",
" | -1.2223e+02 < x <= -1.2215e+02 | \n",
" 2.2598 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | -1.2215e+02 < x <= -1.2206e+02 | \n",
" 2.5665 | \n",
" 0.0263 | \n",
"
\n",
" \n",
" | -1.2206e+02 < x <= -1.2199e+02 | \n",
" 2.6265 | \n",
" 0.0253 | \n",
"
\n",
" \n",
" | -1.2199e+02 < x <= -1.2191e+02 | \n",
" 2.6924 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | -1.2191e+02 < x <= -1.2181e+02 | \n",
" 2.2919 | \n",
" 0.0255 | \n",
"
\n",
" \n",
" | -1.2181e+02 < x <= -1.2157e+02 | \n",
" 1.7103 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | -1.2157e+02 < x <= -1.2139e+02 | \n",
" 1.1736 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | -1.2139e+02 < x <= -1.2127e+02 | \n",
" 1.3270 | \n",
" 0.0263 | \n",
"
\n",
" \n",
" | -1.2127e+02 < x <= -1.2101e+02 | \n",
" 1.4857 | \n",
" 0.0238 | \n",
"
\n",
" \n",
" | -1.2101e+02 < x <= -1.2064e+02 | \n",
" 1.4716 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | -1.2064e+02 < x <= -1.2007e+02 | \n",
" 1.3376 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | -1.2007e+02 < x <= -1.1972e+02 | \n",
" 1.2624 | \n",
" 0.0258 | \n",
"
\n",
" \n",
" | -1.1972e+02 < x <= -1.1929e+02 | \n",
" 1.3332 | \n",
" 0.0239 | \n",
"
\n",
" \n",
" | -1.1929e+02 < x <= -1.1897e+02 | \n",
" 1.3300 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | -1.1897e+02 < x <= -1.1852e+02 | \n",
" 2.7211 | \n",
" 0.0258 | \n",
"
\n",
" \n",
" | -1.1852e+02 < x <= -1.1843e+02 | \n",
" 3.1653 | \n",
" 0.0284 | \n",
"
\n",
" \n",
" | -1.1843e+02 < x <= -1.1838e+02 | \n",
" 3.4432 | \n",
" 0.0238 | \n",
"
\n",
" \n",
" | -1.1838e+02 < x <= -1.1834e+02 | \n",
" 2.7480 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | -1.1834e+02 < x <= -1.1830e+02 | \n",
" 2.3435 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | -1.1830e+02 < x <= -1.1827e+02 | \n",
" 1.8482 | \n",
" 0.0207 | \n",
"
\n",
" \n",
" | -1.1827e+02 < x <= -1.1822e+02 | \n",
" 1.6714 | \n",
" 0.0273 | \n",
"
\n",
" \n",
" | -1.1822e+02 < x <= -1.1818e+02 | \n",
" 1.8055 | \n",
" 0.0227 | \n",
"
\n",
" \n",
" | -1.1818e+02 < x <= -1.1813e+02 | \n",
" 2.1480 | \n",
" 0.0287 | \n",
"
\n",
" \n",
" | -1.1813e+02 < x <= -1.1808e+02 | \n",
" 2.2494 | \n",
" 0.0243 | \n",
"
\n",
" \n",
" | -1.1808e+02 < x <= -1.1801e+02 | \n",
" 2.4079 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | -1.1801e+02 < x <= -1.1795e+02 | \n",
" 2.1794 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | -1.1795e+02 < x <= -1.1790e+02 | \n",
" 2.2897 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | -1.1790e+02 < x <= -1.1780e+02 | \n",
" 2.4820 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | -1.1780e+02 < x <= -1.1766e+02 | \n",
" 2.2864 | \n",
" 0.0248 | \n",
"
\n",
" \n",
" | -1.1766e+02 < x <= -1.1739e+02 | \n",
" 1.6791 | \n",
" 0.0237 | \n",
"
\n",
" \n",
" | -1.1739e+02 < x <= -1.1725e+02 | \n",
" 1.6380 | \n",
" 0.0290 | \n",
"
\n",
" \n",
" | -1.1725e+02 < x <= -1.1716e+02 | \n",
" 2.0512 | \n",
" 0.0229 | \n",
"
\n",
" \n",
" | -1.1716e+02 < x <= -1.1708e+02 | \n",
" 1.5113 | \n",
" 0.0249 | \n",
"
\n",
" \n",
" | -1.1708e+02 < x <= -1.1696e+02 | \n",
" 1.6669 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | -1.1696e+02 < x | \n",
" 1.1769 | \n",
" 0.0245 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1.3927 | \n",
" 0.0216 | \n",
"
\n",
" \n",
" | 3.0129 | \n",
" 0.0233 | \n",
"
\n",
" \n",
" | 3.1899 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 2.1911 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 2.3576 | \n",
" 0.0254 | \n",
"
\n",
" \n",
" | 2.2342 | \n",
" 0.0199 | \n",
"
\n",
" \n",
" | 2.9862 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.5471 | \n",
" 0.0240 | \n",
"
\n",
" \n",
" | 2.6969 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 2.1464 | \n",
" 0.0250 | \n",
"
\n",
" \n",
" | 1.7105 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 1.0959 | \n",
" 0.0220 | \n",
"
\n",
" \n",
" | 1.2918 | \n",
" 0.0291 | \n",
"
\n",
" \n",
" | 1.3781 | \n",
" 0.0230 | \n",
"
\n",
" \n",
" | 1.4767 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 1.2441 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.2810 | \n",
" 0.0281 | \n",
"
\n",
" \n",
" | 1.2813 | \n",
" 0.0252 | \n",
"
\n",
" \n",
" | 1.4223 | \n",
" 0.0274 | \n",
"
\n",
" \n",
" | 2.7081 | \n",
" 0.0218 | \n",
"
\n",
" \n",
" | 3.2548 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 3.3604 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 2.8064 | \n",
" 0.0262 | \n",
"
\n",
" \n",
" | 2.2395 | \n",
" 0.0305 | \n",
"
\n",
" \n",
" | 1.7551 | \n",
" 0.0191 | \n",
"
\n",
" \n",
" | 1.7695 | \n",
" 0.0242 | \n",
"
\n",
" \n",
" | 1.6175 | \n",
" 0.0298 | \n",
"
\n",
" \n",
" | 2.0881 | \n",
" 0.0264 | \n",
"
\n",
" \n",
" | 2.3487 | \n",
" 0.0245 | \n",
"
\n",
" \n",
" | 2.4322 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 2.1831 | \n",
" 0.0286 | \n",
"
\n",
" \n",
" | 2.1875 | \n",
" 0.0211 | \n",
"
\n",
" \n",
" | 2.5202 | \n",
" 0.0288 | \n",
"
\n",
" \n",
" | 2.2701 | \n",
" 0.0235 | \n",
"
\n",
" \n",
" | 1.7464 | \n",
" 0.0225 | \n",
"
\n",
" \n",
" | 1.8748 | \n",
" 0.0310 | \n",
"
\n",
" \n",
" | 2.1466 | \n",
" 0.0266 | \n",
"
\n",
" \n",
" | 1.4479 | \n",
" 0.0279 | \n",
"
\n",
" \n",
" | 1.5746 | \n",
" 0.0271 | \n",
"
\n",
" \n",
" | 1.2465 | \n",
" 0.0259 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Computing associations: 92170it [00:03, 24160.68it/s]\n",
"Testing robustness : 0%| | 1/92170 [00:00<5:15:41, 4.87it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" X distribution\n",
" \n",
" \n",
" | | \n",
" target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | x <= -1.218e+02 | \n",
" 2.4438 | \n",
" 0.2509 | \n",
"
\n",
" \n",
" | -1.218e+02 < x <= -1.190e+02 | \n",
" 1.3787 | \n",
" 0.2242 | \n",
"
\n",
" \n",
" | -1.190e+02 < x <= -1.183e+02 | \n",
" 3.0175 | \n",
" 0.1029 | \n",
"
\n",
" \n",
" | -1.183e+02 < x <= -1.177e+02 | \n",
" 2.1601 | \n",
" 0.2735 | \n",
"
\n",
" \n",
" | -1.177e+02 < x | \n",
" 1.6155 | \n",
" 0.1486 | \n",
"
\n",
" \n",
"
\n",
" \n",
"\n",
" X_dev distribution\n",
" \n",
" \n",
" | target_mean | \n",
" frequency | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2.4780 | \n",
" 0.2357 | \n",
"
\n",
" \n",
" | 1.3487 | \n",
" 0.2243 | \n",
"
\n",
" \n",
" | 3.0414 | \n",
" 0.0988 | \n",
"
\n",
" \n",
" | 2.1328 | \n",
" 0.2800 | \n",
"
\n",
" \n",
" | 1.6763 | \n",
" 0.1611 | \n",
"
\n",
" \n",
"
\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" library | \n",
" fit_s | \n",
" transform_s | \n",
" train_r2 | \n",
" test_r2 | \n",
" r2_drop | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" AutoCarver | \n",
" 40.214 | \n",
" 0.0619 | \n",
" 0.6633 | \n",
" 0.6566 | \n",
" 0.0067 | \n",
"
\n",
" \n",
" | 1 | \n",
" optbinning | \n",
" 2.686 | \n",
" 0.0078 | \n",
" 0.5145 | \n",
" 0.5077 | \n",
" 0.0068 | \n",
"
\n",
" \n",
" | 2 | \n",
" KBinsDiscretizer | \n",
" 0.008 | \n",
" 0.0014 | \n",
" 0.6181 | \n",
" 0.6192 | \n",
" -0.0011 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" library fit_s transform_s train_r2 test_r2 r2_drop\n",
"0 AutoCarver 40.214 0.0619 0.6633 0.6566 0.0067\n",
"1 optbinning 2.686 0.0078 0.5145 0.5077 0.0068\n",
"2 KBinsDiscretizer 0.008 0.0014 0.6181 0.6192 -0.0011"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_full = pd.concat([y_train, y_dev])\n",
"\n",
"runs = [(\n",
" 'AutoCarver',\n",
" lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n",
")]\n",
"if HAS_OPTBINNING:\n",
" runs.append((\n",
" 'optbinning',\n",
" lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n",
" ))\n",
"runs.append((\n",
" 'KBinsDiscretizer',\n",
" lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n",
"))\n",
"\n",
"rows = []\n",
"for name, run in runs:\n",
" X_tr, X_te, fit_t, transform_t = run()\n",
" scores = fit_eval_regression(X_tr, X_te, y_train_full, y_test)\n",
" rows.append({\n",
" 'library': name,\n",
" 'fit_s': round(fit_t, 3),\n",
" 'transform_s': round(transform_t, 4),\n",
" 'train_r2': round(scores['train_r2'], 4),\n",
" 'test_r2': round(scores['test_r2'], 4),\n",
" 'r2_drop': round(scores['train_r2'] - scores['test_r2'], 4),\n",
" })\n",
"\n",
"regression_results = pd.DataFrame(rows)\n",
"regression_results"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "plot-regression",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAAFcCAYAAACJC3TyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVEVJREFUeJzt3QmcjWX/+PHv2GZsY42xTMZWyDIZ0SBSakQyJaHFJNGCaIoizdhKCdkmSpYoD4+KSprSoJ6yrw+FCM2UvWKQ3fm/vtfvf5/nnJkzY2ac+8z2eb9ed+Pc57r3+5yr+3uu63v5ORwOhwAAAAAAAABeVsDbKwQAAAAAAAAIPAEAAAAAAMA2tHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAAGALAk8AAAAAAACwBYEnAAAAAAAA2ILAEwAAAAAAAGxB4AkAAAAAAAC2IPAEAEAOcfvtt5vJcuDAAfHz85M5c+a4lYuPj5fQ0FAJCAgw7584ccKn+6n7o9vV/ctPhg8fbo4buduqVavMddS/AADAfgSeAADIol9//VWeeuopqVGjhgkCBQYGSosWLWTSpEly9uxZW87rn3/+KQ899JAULVpU4uLiZN68eVK8eHHJzaxA1saNGz2+r8G4+vXr+3y/AAAAcO0KeWEdAADkO19++aV06dJF/P39pUePHiYwcuHCBfnhhx9k0KBB8tNPP8l77713TduoVq2aCWAVLlzYOW/Dhg1y6tQpGTVqlLRt21ayw2OPPSbdunUzx56fDBs2TF5++eXs3g1co1atWpnPVZEiRTiXAAD4AIEnAAAyaf/+/SbwooGhFStWSKVKlZzv9e3bV/bu3WsCU9dKWwFpSypXR48eNX9Lly7ttet25syZTLWaKliwoJnym0KFCpkpL3M4HHLu3DnTos4XMnvveUOBAgVSfa4AAIB96GoHAEAmjR07Vk6fPi0zZ850CzpZatWqJQMGDHC+nj17ttxxxx1SoUIF00qoXr16Mm3atKtuJ2WOJ+1yFhUVZf59yy23mPcef/xxZ/lFixZJWFiYCRqUL19eHn30Ufnjjz/c1qnlS5QoYboJtm/fXkqWLCmPPPKIeU/X169fP1myZIlpwaX7etNNN5mcUlfL8fTZZ59Jhw4dpHLlyma5mjVrmlZZly9fFjtcunTJrF+3o9sLCQmRoUOHyvnz593K6X5qbqaUtLzrubt48aKMGDFCateubYIS5cqVk5YtW8ry5cvTzfGU0XOmNKdQkyZNzPp1v999991szxul5+Hee++Vr7/+2uyb3ju6X0pzhw0cOFCCg4PNcel9/eabb8qVK1dSdf/UVnDa1VQDonqPbtu2LVV+svTuPV3nxIkTzbnT81OxYkXTjfXvv/9225Z2x4yIiDD3t+5r9erV5YknnnArs2DBAvM50PXrPjVo0MB0f71ajqfMfH50fmRkpPn3ddddJy+++KJt9zoAALld3v7ZDgAAG3zxxRcmr1Pz5s0zVF6DTPpAfd9995kWM7r8s88+ax62tYVURr3yyity4403mi58I0eONA/dGsBQ+oDfs2dPE5AaM2aMHDlyxDxs//jjj7Jlyxa3FlIatNGHdw2sjBs3TooVK+Z8T7sKfvrpp2b/9MF98uTJ0rlzZ0lMTDTBmLTo9vUhPDo62vzVlmAxMTGSnJwsb731VoaO7+TJk3L8+PFU8zUolNKTTz4pH3zwgTz44IPywgsvyLp168xx79y5UxYvXiyZpQEgXV7X27RpU7PfGuTYvHmz3HXXXekum5FzptegXbt2JlCpAS4NUug11KBFdtu9e7d0797dBHp69+5t7rF//vlHWrdubQIsOv/666+X1atXy5AhQ+TQoUMmSKT0Hu7YsaOsX79ennnmGalTp44JQloB0pTSuvd0G9Y9/Nxzz5lWhVOnTjXnTe9h7W6qrf3uvvtuc860y6Pe0xr81HNv0UChHsudd95pgmRK7wldh2swOKXMfH702ukxNGvWzBzDt99+K+PHjzefRT0HAAAgBQcAAMiwkydPOrT67NSpU4aX+eeff1LNi4iIcNSoUcNtXuvWrc1k2b9/v9nW7NmznfP03zpvw4YNznkXLlxwVKhQwVG/fn3H2bNnnfOXLl1qysbExDjnRUVFmXkvv/xyqn3S+UWKFHHs3bvXOW/btm1m/pQpU1Ltg+5fesf41FNPOYoVK+Y4d+5cuufHWl9600033eQsv3XrVjPvySefdFvPiy++aOavWLHC7ZhiY2NTbbNatWrmXFgaNWrk6NChQ7r7qetJ+b9OGT1nHTt2NOfijz/+cM7bs2ePo1ChQqnW6Ut6HnT78fHxbvNHjRrlKF68uOOXX35xm6/3TcGCBR2JiYnm9SeffGKWnzhxorPM5cuXHXfccUeqezete+8///mPmf/RRx+5zdd9cp2/ePHiVPd+SgMGDHAEBgY6Ll26lGaZlStXmvXo36x+fkaOHOm2zptvvtkRFhaW5jYBAMjP6GoHAEAmaEsYpS1bMso1X47Vqkdbk+zbt8+8vlbaMkdbg2iLG9fcNdr1TVugeMo3lVbLDE1YbrWiUg0bNjTdlXRfM3qMmvxcj/G2224zLWd27dqVoePQUfq0xUrKSffB1bJly8xfbV3lSls+qazk19IWLZoQfs+ePZle9mrnTFvIaKsY7ZqlXREt2nXtnnvukeymLee0BU/Kbmd6/cqUKWOupTXpserxfP/996acdinU1kjaUso1h1J6LflS3nu6rVKlSpmWZa7b0m5v2npu5cqVppzV6mjp0qUeW8FZZTRvlGsXSTs+P08//bTbaz1XV/uMAACQX9HVDgCATNCAghVcySjtrhMbGytr1qwxgRhXGnjSh+5r8dtvv5m/2kUqJX1w1q5grrS7X9WqVT2uS7tUpaTBh5S5dlLSoI2O+qZd7KzgnCWjwTXt4qZ5hjxt37ULnh6vBjc0cOMqKCjIBB6s85EZ2u2tU6dOcsMNN5hcTdotTvMWpQx6ZeWcaVBDR1FLub/K07yUNJ+YTlmhgRudrhZ4SkkDcP/973/T7ApoJbnXc63dB127a6Z3XJ7uPd2W3iOaAy29bWmwVrswalfFt99+2+Q802Deww8/7BxhUYNH//73v01Ar0qVKqZr3kMPPWSup7c+PxqcSnleMvIZAQAgvyLwBABAJgNP2mplx44dGSqviZQ134w+wE6YMMEkatZh3LXVjj48p0zU7Av6kK6BG0/SGq3u/3qVeaZJqDUooOdGAzja+kcfzjU/0ksvvWTbMV5LUu6UiaBbtWplrpXmJ/rmm2/k/fffN9dn+vTpJu9TerJyzjJD8whpsCUrNODpKbm6K08j2Ok10xZIgwcP9riMBui8de/ptjTo9NFHH3lcxgry6PX++OOPZe3atSZPmiZE18Timl9J52mATdezdetW895XX31lJk3u36NHD5MTzBvy44iOAABcCwJPAABkko4Cpgm+tQVTeHh4umX1AVlHWvv888/dWsZY3Ye8oVq1as4k0Tp6niudZ71vFx0dTEc20yTPGsCxaIJoO+jxaLBCW8rUrVvXOV8TQmsQzPV4tSWKznN14cIFkyA7pbJly5oE0zppCyM9Fg3aXC3wdDUaDNFA3N69e1O952leSho00WTcWaFJ8LNCg4d6DrRrXXr0XOu9rC35XFs9ZeS4XLelXRFbtGjhMQiW0q233mqm1157TebPn29GxtOR7KzrpIFdTXiuk94n2gpKR+p79dVXPbbEyu7PDwAAeR05ngAAyCRtBVK8eHHzoKvBjpS05Yw1fLvVOsK19Yt2K9JWGN6i3dM0uKGtczTIZdHWHjqil+aqsZOnY9TgzjvvvGPL9tq3b2/+WiOrWbRFmXI9Xg1qWPmILBo0TNniSQNnrrT1jAYpXM/ntZwfDeAsWbJEDh486Bac0WuUkeCRLp+VKauBJ+2epoFVbTmUkgbydHQ6pbmhNN/SjBkznO9rsEfzdWVmW3o9Ro0aleo93Y4VONSubClbkYWGhpq/1nVKeR21dZXVXTKta5ndnx8AAPI6WjwBAJBJGszQlhZdu3Y1LW60RYrmBdJgiw45r8mSH3/8cVNWc8xYLTB0yHhtRaIP6fqg66nVTVZocmcdOl5b6miXNx1O3hoOPiQkRJ5//nlbr3Hz5s1Ny6KoqCh57rnnTJeoefPmea2rWUqNGjUy29IAktXNb/369aYrleb8adOmjbOsBgc1EbTmBtKuY9u2bTPBlPLly7uts169eiZnkCa01pZPmnBau3X169fPK/usLae0C5+26tHk2hpomTp1qrlvtGtYTjNo0CDTSk9b9+m9rOdFk3Zv377dnJcDBw6Yc6jnW3NzaWJ3DaRpl1Jd7q+//spwd0i9fvrZGDNmjDkX+pnRe1pbtOlnSe/jBx980FxfDWbef//95jOoedb0s6RdPK1gpF5v3ba2XNJcUpq/acqUKSZA5do6Lid9fgAAyOsIPAEAkAX33XefSb781ltvmbxA06ZNM/lrtHWF5pyxRvnShMX6oK6Jt1988UWTAFsDD5q3RvPTeIsGB7Sr0xtvvGHyKmmLLH1A1wdqazQwu5QrV86MNKbBBz1ODUI9+uijJrdVytHSvEVzMGlrnjlz5sjixYvNeR0yZIjJaeRKr4N2+Zs5c6YZgU1HH9MRz3TfXGnATAMmGhzSVi/avWr06NEmAOMNGrjRFjR6D2iXL831pfmwtEVNRkf98yW9l7777jt5/fXXTfBn7ty5JsCjuZ0035SVEF9bc+mobwMGDDCBIW1hpPedXgcNsrmOEpcebW2k50i7xA0dOtQkIdegj95Huh5lBRi1W50GhnQfNOiluaGsBOlaXgOSGqDSoKTeFxog1sBfWnnNsvvzAwBAXufnsOvnSAAAAKRLWwzpiIDauicv0W6FGrjREeGswBEAAMifyPEEAADgA2fPnnV7rcEmHd1Qu/jlpePSboTavU1bSDVu3Djb9gsAAOQMdLUDAADwAe0aqF269K/mHtLumZr/S5PV52b9+/c3wScd4VG7KerohprrTLvpZWSUOgAAkLfR1Q4AAMAHNHn1ypUr5fDhwyYfmAZqNDiT21sFaaJ9zWumycXPnTtnRgPUPGbeSswOAAByNwJPAAAAAAAAsAU5ngAAAAAAAGALAk8AAAAAAACwBYEnAAAAAAAA2ILAEwAAAAAAAGxB4AkAAAAAAAC2IPAEAAAAAAAAWxB4AgAAAAAAgC0IPAEAAAAAAMAWBJ4AAAAAAABgCwJPAAAAAAAAsAWBJwAAAAAAANiCwBMAAAAAAABsQeAJAAAAAAAAtiDwBAAAAAAAAFsQeAIAAAAAAIAtCDwBAAAAAADAFgSeAAAAAAAAYAsCTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHhCnrRhwwZp3ry5FC9eXPz8/CQyMtL8BQAAAIDc7vHHH5eQkJDs3g0gQwg8Ic+5ePGidOnSRf766y95++23Zd68eVKtWrVU5V5//XVZsmRJtuwjACB7rV69WoYPHy4nTpywbRt21DNJSUkyYsQIadq0qZQpU0bKly8vt99+u3z77bde3Q4AIOsSEhLkiSeekBtuuEGKFSsmNWrUkCeffFIOHTrEaUW+5OdwOBzZvROAN+3atUvq1q0rM2bMMF/w6tKlS2YKCAhwlitRooQ8+OCDMmfOHC4AAOQz48aNk0GDBsn+/ftt+8XYjnpm6tSpMnjwYNOSt0WLFqZumzt3rmzevFlmzZolPXv29Nq2AABZ06RJE/MjuP4YXrt2bdm3b5/5/tYg1NatWyUoKMgrLZ5WrVolBw4c4DIhxyuU3TsAeNvRo0fN39KlSzvnFSpUyEwAAORGGmC6cuWKtGnTRhITE01LJ8vTTz8toaGhEhMTQ+AJALLZmTNnZMKECdKyZUspUOB/HYzatWsnrVu3NgGo0aNH+7TuKFKkiE+2B6SFrnbIUzTyr1/oSn9h0LxO2gVBu1O45njSf2ul8MEHH5h/66TLZtSCBQskLCxMSpYsKYGBgdKgQQOZNGmSLccEAPAurRO0tZOqXr26sx6wfjX+8MMPzXd80aJFpWzZstKtWzfTxc3Vnj17pHPnzuZXa21NW7VqVVPu5MmT11zP6H5oeW2VNXHiRKlZs6b4+/vLzz//LDfddJNb0Enpe+3bt5fff/9dTp065aWzBAC4GusZQ7+fH374YdMFWgNOrVq1cgs6KZ2ndcrOnTszfWK123b9+vVNfaN/Fy9enKm6Q61YsUJuu+02kwNXf6Dv1KlTqn2xjkd7kDz00EPmOadcuXIyYMAAOXfuHDcEsowmIMhTnnrqKalSpYrJq/Hcc8/JLbfcIhUrVpQff/zRrZzmfdJueJojo0+fPmaefjlnxPLly6V79+5y5513yptvvmnm6Ze2bkO/lAEAOdsDDzwgv/zyi/zrX/8yuQCtQM51110nr732mrz66qvmf7i1njh27JhMmTLFPDBs2bLF/M/6hQsXJCIiQs6fPy/9+/c3wac//vhDli5danJGlSpV6prqGcvs2bPN/+jr8vrwoA8saTl8+LDpwqETAMC3rC51+gySViab06dPmynljwdX880335gfOurVqydjxoyRP//807Ru1R88Mlp3aB7Ae+65x+Sa0uDS2bNnTd2mXba1q3bKLudaB+o83d7atWtl8uTJ8vfff5uu3UCWaI4nIC9ZuXKlfts7Fi1a5JwXGxtr5rkqXry4IyoqKtPrHzBggCMwMNBx6dIlr+wvAMD33nrrLVMv7N+/3znvwIEDjoIFCzpee+01t7Lbt293FCpUyDl/y5YtqeoZT7Jaz+g+6fq1rjl69OhVy+/Zs8cREBDgeOyxxzK9LQBA1lnPGN27d79q2VGjRpmyCQkJmdpGaGioo1KlSo4TJ044533zzTdmXdWqVctQ3aHrqFChguPPP/90ztu2bZujQIECjh49eqQ6nvvuu89t+WeffdbM12WArKCrHZBJ+mu3dp/Qlk8AgLzj008/Nbkw9Jfe48ePOydt0aS/ZK9cudKU0xZN6uuvv5Z//vnHtv3RX7i1FVZ6dPv6S7t2C3zjjTds2xcAQNo01156vv/+ezMiqdYvd9xxR4ZPpY6Cp8nIo6KinHWPuuuuu0wLqIzUHdY6tLu3a8vZhg0bmvUsW7Ys1Tr69u3r9lpb9ypPZYGMIPAEZNKzzz5rhkbV5qraxFWHSo2Pj+c8AkAup3mbtIuEBpn0f9pdJ+1SbQ1eoXmhoqOj5f333zddJrTbXVxcnDO/k7fodtJz+fJlk1dK83d8/PHHUrlyZa9uHwBw7d/Xmi/p/vvvN7mZtN7IjN9++8381XoppRtvvDFD+2Ktw1N5HQlcf2DRH9VdpdyedhXXnFWMoIesIscTkEkVKlQwvxroL91fffWVmbQvdY8ePUwSWQBA7qStnTSpqn6vFyxYMNX7JUqUcP57/Pjx5tfjzz77zOTf0LyCVi6MtPJuZJa2YkpP7969TV6pjz76KFO/oAMAvCut72sdmOLuu+82rZW0tZAOTGS3q9UdWeE6SBOQFQSekG9dyxeoDknasWNHM+mDiraCevfdd01C2lq1anl1PwEAvqkD9BddbfGkvxZry9ar0RFNdRo2bJisXr3aJGmdPn26c5hsO/9HXUfl0x89dOQiHfACAJCzaBJwDTrpQBQJCQlSqVKlTK+jWrVqzha5Ke3evTtT6/BUXltjactdHenOlW7PteXU3r17zTNPyiTkQEbR1Q75ln7B6uhDWalEXGmzU+0jrbRiAQDkfNb/ZLvWAzranbZ00jwcKUcl0tfW939ycrJcunTJ7X0NQGl94FoPZLWeuZq33nrLDJc9dOhQRlMFgBxIu661b9/ejHiqLZ08dZXLCA1WhYaGml4Vrt25NdesdrPO7Dpc66QdO3aYFru6nylp93FXOgKe0lQjQFbQ4gn5VlhYmBladMKECSYvhkb1mzVrdtXldHjsv/76y3Rr0O4U2m9av4z1C137SQMAckcdoF555RWTJ6lw4cKmFau2VhoyZIjJYxEZGWm6Rezfv18WL15shqZ+8cUXZcWKFdKvXz+T1FtbRmkQat68eSZopUldr7WeSY/ux+DBg81DjNY5H374odv7mii2YsWK17QNAMC1eeSRR2T9+vUmF6zmCNTJtdu21i8Zpd24O3ToIC1btjTr0+cQffa46aab5PTp0xn+wUKDRuHh4dKrVy85e/asWYd2ARw+fHiq8lrv3XfffdKuXTtZs2aNqWsefvhhadSoUYb3G3CTpbHwgBxs5cqVqYa5toYGdbVr1y5Hq1atHEWLFjXvZXTI648//thx9913myFJixQp4rj++usdTz31lOPQoUNePxYAgH10aOsqVaqY4aS1HtChqNUnn3ziaNmypaN48eJmqlOnjqNv376O3bt3m/f37dvneOKJJxw1a9Z0BAQEOMqWLeto06aN49tvv/VKPWMNif3WW2+les+qz9KatA4EAPiG9Z187Ngxt/nVqlVL83ta38ssrZfq1q3r8Pf3d9SrV8/x6aefmjrFdV3p1R1K66gWLVqYOikwMNDRsWNHx88//+zxeHT+gw8+6ChZsqSjTJkyjn79+jnOnj2b6f0GLH76H/dQFAAAAAAAyE+09ZN2Nz927JjJ/QR4CzmeAAAAAAAAYAtyPAH/3+XLl010Pz3aJ9t1OG0AADKKegYAYNFk4ZprKT1BQUGcMOQJBJ6A/y8pKclt2FBPYmNjPSbgAwDgaqhnAACWAQMGmJHm0kNWHOQV5HgC/r9z587JDz/8kO75qFGjhpkAAMgs6hkAgOXnn3+WgwcPpntC2rZtywlDnkDgCQAAAAAAALYguTgAAAAAAADyR46nK1eumCaHJUuWFD8/v+zeHQDwGe3Hf+rUKalcubIUKMDvAt5E3QIgP6JesQ/1CoD8yJHF55UcF3jSoFNwcHB27wYAZGsC4qpVq3IFvIi6BUB+Rr3ifdQrAPKzpEw+r+S4wJO2dLIOJDAwMLt3BwB8Jjk52QTere9BeA91C4D8iHrFPtQrAPKj5Cw+r+S4wJPVvU6DTgSeAORHdDO275xStwDIj6hX7Dun1CsA8iO/TKZFIokIAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAAJDzAk9vvPGGGUZv4MCBznnnzp2Tvn37Srly5aREiRLSuXNnOXLkiDf2FQAAAAAAAPkh8LRhwwZ59913pWHDhm7zn3/+efniiy9k0aJF8t1338nBgwflgQce8Ma+AgAAAAAAIBcplJWFTp8+LY888ojMmDFDRo8e7Zx/8uRJmTlzpsyfP1/uuOMOM2/27NlSt25dWbt2rdx6663e23MAAAAAAHKIji98JnnNF+M7ZfcuIL8GnrQrXYcOHaRt27ZugadNmzbJxYsXzXxLnTp15Prrr5c1a9Z4DDydP3/eTJbk5GTxJb4cAADUK+njfzoBAADgs8DTggULZPPmzaarXUqHDx+WIkWKSOnSpd3mV6xY0bznyZgxY2TEiBGZ3Q0AAAAAAADkpcBTUlKSDBgwQJYvXy4BAQFe2YEhQ4ZIdHS0W4un4OBgr6wbAAAAAHKzvNhDQ9GaFsg/MpVcXLvSHT16VBo3biyFChUykyYQnzx5svm3tmy6cOGCnDhxwm05HdUuKCjI4zr9/f0lMDDQbQIAAAAAAEA+a/F05513yvbt293m9ezZ0+Rxeumll0xLpcKFC0tCQoJ07tzZvL97925JTEyU8PBw7+45AAAAAAAA8k7gqWTJklK/fn23ecWLF5dy5co55/fq1ct0nStbtqxpvdS/f38TdGJEOwAAAAAAgPwlS6Papeftt9+WAgUKmBZPOlpdRESEvPPOO97eDAAAAAAAAPJ64GnVqlVurzXpeFxcnJkAAAAAAACQf2UquTgAAAAAAACQUQSeAAAAAAAAYAsCTwAAAAAAALAFgScAAAAAAAAQeAIAAAAAAEA+GtUOAAAAsEvHFz7Lcyf3i/GdsnsXAADwGbraAQAAAAAAwBYEngAAPhcXFychISESEBAgzZo1k/Xr16db/sSJE9K3b1+pVKmS+Pv7yw033CDLli3z2f4CAAAAyBq62gEAfGrhwoUSHR0t06dPN0GniRMnSkREhOzevVsqVKiQqvyFCxfkrrvuMu99/PHHUqVKFfntt9+kdOnSXDkAAAAgh6PFEwDApyZMmCC9e/eWnj17Sr169UwAqlixYjJr1iyP5XX+X3/9JUuWLJEWLVqYllKtW7eWRo0aceUAIJ+1gF20aJHUqVPHlG/QoEGq1q8Oh0NiYmJMC9miRYtK27ZtZc+ePanW8+WXX5rtaZkyZcpIZGSk148NAPB/CDwBAHxGWy9t2rTJPAhYChQoYF6vWbPG4zKff/65hIeHm652FStWlPr168vrr78uly9f5soBQB5oARsbGyubN282PyhoC9ijR496LL969Wrp3r279OrVS7Zs2WKCRTrt2LHDWWbs2LEyefJk86PGunXrpHjx4mad586dc5b55JNP5LHHHjM/gGzbtk1+/PFHefjhh31yzACQHxF4AgD4zPHjx03ASANIrvT14cOHPS6zb98+08VOl9Nftl999VUZP368jB49Os3tnD9/XpKTk90mAEDubgE7adIkadeunQwaNEjq1q0ro0aNksaNG8vUqVOdrZ20+/awYcOkU6dO0rBhQ5k7d64cPHjQtJpVly5dkgEDBshbb70lTz/9tMkZqNt+6KGHfHrsAJCfEHgCAORoV65cMfmd3nvvPQkLC5OuXbvKK6+8Yh5Q0jJmzBgpVaqUcwoODvbpPgMAvN8CVue7llfamskqv3//fvMjhmsZrQO0S51VRltW/fHHH2ZbN998s+mSd88997i1mvKEHzQAIOsIPAEAfKZ8+fJSsGBBOXLkiNt8fR0UFORxGX0o0F+kdTmL/tKtDxf64OLJkCFD5OTJk84pKSnJy0cCAPB1C1idn1556296ZbQVrRo+fLhpGbV06VKT4+n22283+QTTwg8aAJB1BJ4AAD5TpEgR02opISHBrUWTvtY8Tp5oQvG9e/eacpZffvnFBKR0fZ74+/tLYGCg2wQAgFWXaMvZzp07mzpp9uzZ4ufnZxKXp4UfNAAg6wg8AQB8ShPJzpgxQz744APZuXOnPPPMM3LmzBmT40P16NHD/A++Rd/XX6E1J4cGnHQkIk0ursnGAQD5pwWszk+vvPU3vTL6o4XSvE6uP1bUqFFDEhMT09xfftAAgKwj8AQA8CnN0TRu3Dgz3HVoaKhs3bpV4uPjnV0j9H/8Dx065Cyv+Zm+/vpr2bBhg0kU+9xzz5kg1Msvv8yVA4B81AJW57uWV8uXL3eWr169ugkwuZbRwSV0dDurjG5Tg0i7d+92lrl48aIcOHBAqlWr5vXjBACIFOIkAAB8rV+/fmbyZNWqVanm6QPD2rVrfbBnAABftoCNioqSJk2aSNOmTc2IdClbwFapUsXkV1L6o0Pr1q3NyKYdOnSQBQsWyMaNG83gE0q7yw0cONCMelq7dm0TiNKRUCtXriyRkZGmjHa91tHsYmNjzQ8bGmzSEe5Uly5duPgAYAMCTwAAAACypQXssWPHTAtYTf6trWBTtoDV0ecszZs3l/nz55uk4EOHDjXBpSVLlkj9+vWdZQYPHmyCV3369JETJ05Iy5YtzToDAgKcZTTQVKhQIXnsscfk7NmzZtS7FStWmCTjAADvI/AEAAAAIFe0gNVWSem1TNJWTyNHjjRTWgoXLmy6fOsEALAfOZ4AAAAAAABgCwJPAAAAAAAAsAWBJwAAAAAAANiCwBMAAAAAAABsQeAJAAAAAAAAtiDwBAAAAAAAAFsQeAIAAAAAAIAtCDwBAAAAAADAFgSeAAAAAAAAYAsCTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAAGALAk8AAAAAAACwBYEnAAAAAAAA2ILAEwAAAAAAAGxB4AkAAAAAAAC2IPAEAAAAAAAAWxB4AgD4XFxcnISEhEhAQIA0a9ZM1q9fn2bZOXPmiJ+fn9ukywEAAADI+Qg8AQB8auHChRIdHS2xsbGyefNmadSokURERMjRo0fTXCYwMFAOHTrknH777Tef7jMAAACArCmUxeUAAMiSCRMmSO/evaVnz57m9fTp0+XLL7+UWbNmycsvv+xxGW3lFBQUxBmHV3V84bM8d0a/GN8pu3cBAADADS2eAAA+c+HCBdm0aZO0bdv2fxVRgQLm9Zo1a9Jc7vTp01KtWjUJDg6WTp06yU8//eSjPQYAAADgs8DTtGnTpGHDhqbLg07h4eHy1VdfOd8/d+6c9O3bV8qVKyclSpSQzp07y5EjR65pBwEAecfx48fl8uXLUrFiRbf5+vrw4cMel7nxxhtNa6jPPvtMPvzwQ7ly5Yo0b95cfv/99zS3c/78eUlOTnabAAAAAOTwwFPVqlXljTfeML9Wb9y4Ue644w63X56ff/55+eKLL2TRokXy3XffycGDB+WBBx6wa98BAPmA/sjRo0cPCQ0NldatW8unn34q1113nbz77rtpLjNmzBgpVaqUc9KWUgAAAAByeOCpY8eO0r59e6ldu7bccMMN8tprr5mWTWvXrpWTJ0/KzJkzTe4ODUiFhYXJ7NmzZfXq1eZ9AADKly8vBQsWTNUaVl9nNIdT4cKF5eabb5a9e/emWWbIkCGmXrKmpKQkTj4AAACQm3I8aVeJBQsWyJkzZ8yv0doK6uLFi255O+rUqSPXX399unk76A4BAPlHkSJFzA8TCQkJznnadU5fa12S0fpn+/btUqlSpTTL+Pv7O7uFWxMAAACAXBB40v/Z11ZO+j/1Tz/9tCxevFjq1atncnPoA0Xp0qUznLdD0R0CAPKX6OhomTFjhnzwwQeyc+dOeeaZZ8yPGNYod9qtTlssWUaOHCnffPON7Nu3TzZv3iyPPvqo/Pbbb/Lkk09m41EAAAAAyIhCkkma5HXr1q2m68LHH38sUVFRJp9TVunDhT6EWDQBLLk4ACDv6tq1qxw7dkxiYmLMDxOauyk+Pt6ZcDwxMdGMdGf5+++/pXfv3qZsmTJlTIsp7catP3oAAAAAyGOBJ23VVKtWLfNv/Z//DRs2yKRJk8yDhA6TfeLECbdWT1fL26Etp3QCAOQf/fr1M5Mnq1atcnv99ttvmwkAAABAPsrx5JqbQ/M0aRBKE7665u3YvXu3+eU6o3k7AAAAAAAAkE9bPGm3uHvuucckDD916pTMnz/f/DL99ddfm+Gqe/XqZbrNlS1b1iRy7d+/vwk63XrrrfYdAQAAAAAAAHJ/4Ono0aMm6euhQ4dMoKlhw4Ym6HTXXXeZ97UrhObl6Ny5s2kFFRERIe+8845d+w4AAAAAAIC8EniaOXNmuu8HBARIXFycmQAAAAAAAJC/XXOOJwAAAAAAAMATAk8AAAAAAACwBYEnAAAAAAAA2ILAEwAAAAAAAGxB4AkAAAAAAAC2IPAEAAAAAAAAWxB4AgAAAAAAgC0IPAEAAADIFnFxcRISEiIBAQHSrFkzWb9+fbrlFy1aJHXq1DHlGzRoIMuWLXN73+FwSExMjFSqVEmKFi0qbdu2lT179nhc1/nz5yU0NFT8/Pxk69atXj0uAMD/EHgCAAAA4HMLFy6U6OhoiY2Nlc2bN0ujRo0kIiJCjh496rH86tWrpXv37tKrVy/ZsmWLREZGmmnHjh3OMmPHjpXJkyfL9OnTZd26dVK8eHGzznPnzqVa3+DBg6Vy5cq2HiMAgMATAAAAgGwwYcIE6d27t/Ts2VPq1atngkXFihWTWbNmeSw/adIkadeunQwaNEjq1q0ro0aNksaNG8vUqVOdrZ0mTpwow4YNk06dOknDhg1l7ty5cvDgQVmyZInbur766iv55ptvZNy4cT45VgDIz2jxBAAAAMCnLly4IJs2bTJd4SwFChQwr9esWeNxGZ3vWl5payar/P79++Xw4cNuZUqVKmW68Lmu88iRIybgNW/ePBPoAgDYi8ATAAAAAJ86fvy4XL58WSpWrOg2X19r8MgTnZ9eeetvemW0VdTjjz8uTz/9tDRp0iTD+6v5oJKTk90mAEDGEHgCAAAAkC9MmTJFTp06JUOGDMnUcmPGjDGtp6wpODjYtn0EgLyGwBMAAAAAnypfvrwULFjQdHtzpa+DgoI8LqPz0ytv/U2vzIoVK0y3O39/fylUqJDUqlXLzNfWT1FRUWnurwaqTp486ZySkpKydNwAkB8ReAIAAADgU0WKFJGwsDBJSEhwzrty5Yp5HR4e7nEZne9aXi1fvtxZvnr16ibA5FpGu8Tp6HZWGR3xbtu2bbJ161YzLVu2zDnC3muvvZbm/mqgKjAw0G0CAGRMoQyWAwAAAACviY6ONq2MtLVR06ZNzYh0Z86cMaPcqR49ekiVKlVMNzc1YMAAad26tYwfP146dOggCxYskI0bN8p7771n3vfz85OBAwfK6NGjpXbt2iYQ9eqrr0rlypUlMjLSlLn++uvd9qFEiRLmb82aNaVq1apcXQCwAYEnAAAAAD7XtWtXOXbsmMTExJjk36GhoRIfH+9MDp6YmGhGurM0b95c5s+fL8OGDZOhQ4ea4NKSJUukfv36zjKDBw82was+ffrIiRMnpGXLlmadAQEBXGEAyCYEngAAAABki379+pnJk1WrVqWa16VLFzOlRVs9jRw50kwZERISYka6AwDYhxxPAAAAAAAAsAWBJwAAAAAAANiCwBMAwOfi4uJM9wbNudGsWTNZv359hpbTRLLajcJKEgsAAAAgZyPwBADwKR2yWkcyio2Nlc2bN0ujRo0kIiJCjh49mu5yBw4ckBdffFFuu+02n+0rAAAAgGtD4AkA4FMTJkyQ3r17m+Gy69WrJ9OnT5dixYrJrFmz0lzm8uXL8sgjj8iIESOkRo0aPt1fAAAAAFlH4AkA4DMXLlyQTZs2Sdu2bf9XERUoYF6vWbMmzeV0dKIKFSpIr169MrSd8+fPS3JystsEAAAAwPcIPAEAfOb48eOm9VLFihXd5uvrw4cPe1zmhx9+kJkzZ8qMGTMyvJ0xY8ZIqVKlnFNwcPA17zsAAACAzCPwBADIsU6dOiWPPfaYCTqVL18+w8sNGTJETp486ZySkpJs3U8AAAAAnhVKYz4AAF6nwaOCBQvKkSNH3Obr66CgoFTlf/31V5NUvGPHjs55V65cMX8LFSoku3fvlpo1a6Zazt/f30wAAAAAshctngAAPlOkSBEJCwuThIQEt0CSvg4PD09Vvk6dOrJ9+3bZunWrc7rvvvukTZs25t90oQMAAAByNlo8AQB8Kjo6WqKioqRJkybStGlTmThxopw5c8aMcqd69OghVapUMXmaAgICpH79+m7Lly5d2vxNOR8AAABAzkPgCQDgU127dpVjx45JTEyMSSgeGhoq8fHxzoTjiYmJZqQ7AAAAALkfgScAgM/169fPTJ6sWrUq3WXnzJlj014BAAAA8DZ+UgYAAAAAAIAtCDwBAAAAAADAFgSeAAAAAAAAYAsCTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAAGALAk8AAAAAAACwBYEnAAAAAAAAEHgCAAAAAABA7kGLJwAAAAAAAGR/4GnMmDFyyy23SMmSJaVChQoSGRkpu3fvditz7tw56du3r5QrV05KlCghnTt3liNHjnh7vwEAAAAAAJCXAk/fffedCSqtXbtWli9fLhcvXpS7775bzpw54yzz/PPPyxdffCGLFi0y5Q8ePCgPPPCAHfsOAAAAAACAHKxQZgrHx8e7vZ4zZ45p+bRp0yZp1aqVnDx5UmbOnCnz58+XO+64w5SZPXu21K1b1wSrbr31Vu/uPQAAAAAAAPJmjicNNKmyZcuavxqA0lZQbdu2dZapU6eOXH/99bJmzRqP6zh//rwkJye7TQAAAAAAAMjHgacrV67IwIEDpUWLFlK/fn0z7/Dhw1KkSBEpXbq0W9mKFSua99LKG1WqVCnnFBwcnNVdAgAAAAAAQF4IPGmupx07dsiCBQuuaQeGDBliWk5ZU1JS0jWtDwAAAAAAALkwx5OlX79+snTpUvn++++latWqzvlBQUFy4cIFOXHihFurJx3VTt/zxN/f30wAAAAAAADIxy2eHA6HCTotXrxYVqxYIdWrV3d7PywsTAoXLiwJCQnOebt375bExEQJDw/33l4DAAAAAAAgb7V40u51OmLdZ599JiVLlnTmbdLcTEWLFjV/e/XqJdHR0SbheGBgoPTv398EnRjRDgAAAAAAIH/JVIunadOmmTxMt99+u1SqVMk5LVy40Fnm7bfflnvvvVc6d+4srVq1Ml3sPv30Uzv2HQCQS8XFxUlISIgEBARIs2bNZP369WmW1TqkSZMmpgt38eLFJTQ0VObNm+fT/QUAAADggxZP2tXuavQhQh8odAIAICX9sUJbxk6fPt0EnSZOnCgRERGma3aFChVSldcWtK+88orUqVPHjJyqOQZ79uxpyupyAAAAAPLgqHYAAGTFhAkTpHfv3iZ4VK9ePROAKlasmMyaNctjeW1le//990vdunWlZs2aMmDAAGnYsKH88MMPXAAAAAAghyPwBADwGR35dNOmTdK2bdv/VUQFCpjXa9asyVDLWx3AQltHaXfutJw/f16Sk5PdJgAAAAC+R+AJAOAzx48fl8uXL0vFihXd5utra8AKTzS/YIkSJUxXuw4dOsiUKVPkrrvuSrP8mDFjzIAX1hQcHOzV4wAAAACQMQSeAAA5no6kunXrVtmwYYO89tprJkfUqlWr0iw/ZMgQE6yypqSkJJ/uLwAAAIAsJBcHAOBalC9fXgoWLChHjhxxm6+vdRTUtGh3vFq1apl/66h2O3fuNK2aNP+TJ/7+/mYCAAAAkL1o8QQA8BntKhcWFmbyNFmuXLliXoeHh2d4PbqM5nECAAAAkLMReAIA+JR2k5sxY4Z88MEHpuXSM888I2fOnDGj3KkePXqYrnIWbdm0fPly2bdvnyk/fvx4mTdvnjz66KNcOQDI5eLi4iQkJEQCAgKkWbNmsn79+nTLL1q0SOrUqWPKN2jQQJYtW5ZqEIqYmBipVKmSFC1a1AxesWfPHuf7Bw4ckF69ekn16tXN+zpaamxsrBn8AgBgD7raAQB8qmvXrnLs2DHzYKAJxbXrXHx8vDPheGJioulaZ9Gg1LPPPiu///67eUjQB44PP/zQrAcAkHstXLjQ/Bgxffp0E3SaOHGiREREmJFLK1SokKr86tWrpXv37uYHiXvvvVfmz58vkZGRsnnzZqlfv74pM3bsWJk8ebL5cUODS6+++qpZ588//2yCVbt27TKtZt99913ThXvHjh3Su3dvU9eMGzcuG84CAOR9BJ4AAD7Xr18/M3mSMmn46NGjzQQAyFsmTJhggj5Wi1cNQH355Zcya9Ysefnll1OVnzRpkrRr104GDRpkXo8aNcq0iJ06dapZVls7afBq2LBh0qlTJ1Nm7ty55oeNJUuWSLdu3czyOllq1KhhAl3Tpk0j8AQANqGrHQAAAACf0q5tmzZtMl3hLNraVV+vWbPG4zI637W80tZMVvn9+/eblrSuZUqVKmVaU6W1TqWjn5YtWzbd/dW8gsnJyW4TACBjCDwBAAAA8Knjx4/L5cuXnd2sLfpag0ee6Pz0ylt/M7POvXv3ypQpU+Spp55Kd3+1e58GsawpODg4A0cJAFAEngAAAADkO3/88YfpdtelSxfT5S89OuiFtoyypqSkJJ/tJwDkdgSeAAAAAPhU+fLlpWDBgnLkyBG3+fo6KCjI4zI6P73y1t+MrPPgwYPSpk0bad68ubz33ntX3V9/f38JDAx0mwAAGUPgCQAAAIBPFSlSRMLCwiQhIcE5T0eb09fh4eEel9H5ruWVJhe3yusodhpgci2juZjWrVvntk5t6XT77beb7c+ePdttJFUAgPcxqh0AAAAAn4uOjpaoqChp0qSJNG3a1IxId+bMGecodz169JAqVaqY/EpqwIAB0rp1axk/frx06NBBFixYIBs3bnS2WPLz85OBAweakVBr165tAlGvvvqqVK5cWSIjI92CTtWqVTOj2B07dsy5P2m1tAIAXBsCTwAAAAB8rmvXribwExMTY5J/h4aGSnx8vDM5eGJioltrJO0WN3/+fBk2bJgMHTrUBJeWLFki9evXd5YZPHiwCV716dNHTpw4IS1btjTrDAgIcLaQ0oTiOlWtWtVtfxwOh8+OHQDyEwJPAAAAALJFv379zOTJqlWrUs3TROA6pUVbPY0cOdJMnjz++ONmAgD4Dh2aAQAAAAAAYAsCTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAAGALAk8AAAAAAACwBYEnAAAAAAAA2ILAEwAAAAAAAGxB4AkAAAAAAAC2IPAEAAAAAAAAWxB4AgAAAAAAgC0IPAEAAAAAAMAWBJ4AAD4XFxcnISEhEhAQIM2aNZP169enWXbGjBly2223SZkyZczUtm3bdMsDAAAAyDkIPAEAfGrhwoUSHR0tsbGxsnnzZmnUqJFERETI0aNHPZZftWqVdO/eXVauXClr1qyR4OBgufvuu+WPP/7gygEAAAA5HIEnAIBPTZgwQXr37i09e/aUevXqyfTp06VYsWIya9Ysj+U/+ugjefbZZyU0NFTq1Kkj77//vly5ckUSEhK4cgAAAEAOR+AJAOAzFy5ckE2bNpnucs6KqEAB81pbM2XEP//8IxcvXpSyZcumWeb8+fOSnJzsNgEAAADwPQJPAACfOX78uFy+fFkqVqzoNl9fHz58OEPreOmll6Ry5cpuwauUxowZI6VKlXJO2j0PAAAAgO8ReAIA5BpvvPGGLFiwQBYvXmwSk6dlyJAhcvLkSeeUlJTk0/0EAAAA8H8K/f+/AADYrnz58lKwYEE5cuSI23x9HRQUlO6y48aNM4Gnb7/9Vho2bJhuWX9/fzMBAAAAyF60eAIA+EyRIkUkLCzMLTG4lSg8PDw8zeXGjh0ro0aNkvj4eGnSpImP9hYAAADAtaLFEwDAp6KjoyUqKsoEkJo2bSoTJ06UM2fOmFHuVI8ePaRKlSomT5N68803JSYmRubPny8hISHOXFAlSpQwEwAAAICci8ATAMCnunbtKseOHTPBJA0ihYaGmpZMVsLxxMREM9KdZdq0aWY0vAcffNBtPbGxsTJ8+HCuHgAAAJCDEXgCAPhcv379zOTJqlWr3F4fOHDAR3sFAAAAwNvI8QQAAAAAAABbEHgCAAAAAABAzgg8ff/999KxY0epXLmy+Pn5yZIlS9zedzgcJm9HpUqVpGjRotK2bVvZs2ePN/cZAAAAAAAAeTHwpCMPNWrUSOLi4tIc8nry5Mkyffp0WbdunRQvXlwiIiLk3Llz3thfAAAAAAAA5NXk4vfcc4+ZPNHWTjos9rBhw6RTp05m3ty5c81IRdoyqlu3bte+xwAAAAAAAMh/OZ72799vhsbW7nWWUqVKSbNmzWTNmjUelzl//rwkJye7TQAAAAAAAMj9vBp40qCT0hZOrvS19V5KY8aMMcEpawoODvbmLgEAAAAAACC/jmo3ZMgQOXnypHNKSkrK7l0CAAAAAABATgs8BQUFmb9Hjhxxm6+vrfdS8vf3l8DAQLcJAAAAAAAAuZ9XA0/Vq1c3AaaEhATnPM3ZpKPbhYeHe3NTAAAAAAAAyGuj2p0+fVr27t3rllB869atUrZsWbn++utl4MCBMnr0aKldu7YJRL366qtSuXJliYyM9Pa+AwAAAAAAIC8FnjZu3Cht2rRxvo6OjjZ/o6KiZM6cOTJ48GA5c+aM9OnTR06cOCEtW7aU+Ph4CQgI8O6eAwAAAAAAIG8Fnm6//XZxOBxpvu/n5ycjR440EwAAAAAAAPKvbB/VDgAAAAAAAHkTgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAgW8TFxUlISIgZAbtZs2ayfv36dMsvWrRI6tSpY8o3aNBAli1b5va+DoIUExMjlSpVkqJFi0rbtm1lz549bmX++usveeSRRyQwMFBKly4tvXr1ktOnT9tyfAAAAk8AAAAAssHChQslOjpaYmNjZfPmzdKoUSOJiIiQo0ePeiy/evVq6d69uwkUbdmyRSIjI820Y8cOZ5mxY8fK5MmTZfr06bJu3TopXry4Wee5c+ecZTTo9NNPP8ny5ctl6dKl8v3330ufPn18cswAkB/R4gkAAACAz02YMEF69+4tPXv2lHr16plgUbFixWTWrFkey0+aNEnatWsngwYNkrp168qoUaOkcePGMnXqVGdrp4kTJ8qwYcOkU6dO0rBhQ5k7d64cPHhQlixZYsrs3LlT4uPj5f333zctrFq2bClTpkyRBQsWmHIAAO8j8AQAAADApy5cuCCbNm0yXeEsBQoUMK/XrFnjcRmd71peaWsmq/z+/fvl8OHDbmVKlSplAkxWGf2r3euaNGniLKPlddvaQgoA4H2FbFgnAAAAAKTp+PHjcvnyZalYsaLbfH29a9cuj8toUMlTeZ1vvW/NS69MhQoV3N4vVKiQlC1b1lnGk/Pnz5vJkpyczNUFgAwi8AQAAAAA6RgzZoyMGDEiW87RF+M7Zct2kXlcq9yh4wufSV70RQ7+rqCrHQAAAACfKl++vBQsWFCOHDniNl9fBwUFeVxG56dX3vp7tTIpk5dfunTJjHSX1nbVkCFD5OTJk84pKSkpU8cLAPkZgScAQI4ePltHHurcubMp7+fnZxLHAgBytyJFikhYWJgkJCQ45125csW8Dg8P97iMznctr3RkOqt89erVTfDItYx2idPcTVYZ/XvixAmTX8qyYsUKs22tj9Li7+8vgYGBbhMAIGMIPAEAcvTw2f/884/UqFFD3njjjXR/jQYA5C5aF8yYMUM++OADM9rcM888I2fOnDGj3KkePXqYlkaWAQMGmBHpxo8fb/JADR8+XDZu3Cj9+vUz7+uPEwMHDpTRo0fL559/Ltu3bzfrqFy5skRGRpoyOhqejoyno+npjx4//vijWb5bt26mHADA+8jxBADItuGzlQ6f/eWXX5rhs19++eVU5W+55RYzKU/vAwByp65du8qxY8ckJibGJPYODQ01gSUrOXhiYqIZbc7SvHlzmT9/vgwbNkyGDh0qtWvXliVLlkj9+vWdZQYPHmyCV3369DEtm1q2bGnWqS1sLR999JEJNt15551m/dqqdvLkyT4+egDIPwg8AQB8Pny26y/YVxs+OysYfQgAcgcNAFktllJatWpVqnldunQxU1q01dPIkSPNlBYdwU4DWAAA36CrHQAgRwyfnd4w1lkZfahUqVLOKTg42GvrBgAAAJBxBJ4AAHkOow8BAAAAOQNd7QAAOXr47KzQ0Yd0AgAAAJC9aPEEAMjRw2cDAAAAyL1o8QQA8Pnw2VFRUdKkSRNp2rSpTJw4MdXw2VWqVDF5mqyE5D///LPz33/88Yds3bpVSpQoIbVq1eLqAQAAADkYgScAQI4ePvvgwYNy8803O1+PGzfOTK1bt/Y44hEAAACAnIPAEwAgRw+fHRISIg6Hw0d7BgAAAMCbyPEEAAAAAAAAWxB4AgAAAAAAgC0IPAEAAAAAAMAWBJ4AAAAAAABgCwJPAAAAAAAAIPAEAAAAAACA3IMWTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBaF7Fkt4F0dX/gsT57SL8Z3yu5dAAAAAADANrR4AgAAAAAAgC0IPAEAAAAAAMAWBJ4AAAAAAABgC3I8AQAAAACAfIE8u75HiycAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAIHcFnuLi4iQkJEQCAgKkWbNmsn79ers2BQDIZTJbRyxatEjq1Kljyjdo0ECWLVvms30FAAAAkMMCTwsXLpTo6GiJjY2VzZs3S6NGjSQiIkKOHj1qx+YAALlIZuuI1atXS/fu3aVXr16yZcsWiYyMNNOOHTt8vu8AAAAAckDgacKECdK7d2/p2bOn1KtXT6ZPny7FihWTWbNm2bE5AEAuktk6YtKkSdKuXTsZNGiQ1K1bV0aNGiWNGzeWqVOn+nzfAQAAAGROIfGyCxcuyKZNm2TIkCHOeQUKFJC2bdvKmjVrUpU/f/68mSwnT540f5OTk8UXLp7/R/IaX507X8qL1ymvXitc+/3gcDjy7GnMbB2hdL62kHKlLaSWLFmS5nays27Ji99XefW7imuVO3Cdsi4/1CvZxTqnefX7EQC8Wa94PfB0/PhxuXz5slSsWNFtvr7etWtXqvJjxoyRESNGpJofHBzs7V3LN0rFZfceIKO4VvDk1KlTUqpUqTx5cjJbR6jDhw97LK/z00Ld4l18V+UeXKvcwdfXKS/XK9lFz6nimQVAfnQqk/WK1wNPmaW/erv+kn3lyhX566+/pFy5cuLn5yd5KTKoFVNSUpIEBgZm9+4gDVyn3CMvXiv95UC/xCtXrpzdu5Lr5Ye6JS9+BvIirlPukRevFfWKfbSu1nulZMmS1Cvwqbz4XZVX5cVr5cji84rXA0/ly5eXggULypEjR9zm6+ugoKBU5f39/c3kqnTp0pJX6Q2XV266vIzrlHvktWuV13+RzmwdoXR+Zsrnt7olr30G8iquU+6R165VXq9Xsot2E69atarkRXntM5BXcZ1yj8A89pnKSr3i9eTiRYoUkbCwMElISHD7pVlfh4eHe3tzAIBcJCt1hM53La+WL19OnQIAAADkArZ0tdPuDVFRUdKkSRNp2rSpTJw4Uc6cOWNGMAIA5G9XqyN69OghVapUMXma1IABA6R169Yyfvx46dChgyxYsEA2btwo7733XjYfCQAAAIBsCTx17dpVjh07JjExMSb5a2hoqMTHx6dKDpufaJeP2NjYVF0/kLNwnXIPrlXudbU6IjEx0XRhsDRv3lzmz58vw4YNk6FDh0rt2rXNiHb169eX/IzPQO7Adco9uFbI7/gM5A5cp9yDa/U/fg7GVwUAAAAAAIANvJ7jCQAAAAAAACDwBAAAAAAAANvQ4gkAAAAAAAC2IPCEPC0kJMSMmJUePz8/k6jYmx5//HGJjIyUvOLAgQPmPG3dutXn286p53L48OEmKTaA/IV6xTuoV1KjXgHyJ+oV76BeyeH1iiOPWr16taNAgQKO9u3bZ3rZ2NhYR6NGjbK03fPnzzvefPNNR8OGDR1FixZ1lCtXztG8eXPHrFmzHBcuXMjSOnF1s2fPdpQqVSrV/GrVqjnefvvtdJc9dOiQ49y5c149zSdOnHD8/fffjpwgKirK0alTJ7d5ixYtcvj7+zvGjRtn3tevAmsqW7asIyIiwrFt2zZn+UuXLpnzdPHiRa/s08qVK53b8/PzcwQGBjpCQ0MdgwYNchw8eDDHnUvdz8WLF7vNO3XqlOP48ePZtk/wPeqV/IV6JW3UK9eOegUW6pb8g3olbdQreb9eybMtnmbOnCn9+/eX77//Xg4ePOiTbV64cEEiIiLkjTfekD59+sjq1atl/fr10rdvX5kyZYr89NNPWV73xYsXxa59zu+CgoLMUJfeVKpUKSldurTkRO+//7488sgjMm3aNHnhhRfMvHbt2smhQ4fMlJCQIIUKFZJ7773XuUzBggXNedL53rR7927z+dywYYO89NJL8u2330r9+vVl+/btPjmX1/K5KlGihJQrV07swmcz56FeyRjuXeoVRb2SedQr+RN1S8bk97qF5xXqlVxfrzjyII3slShRwrFr1y5H165dHa+99lq6kWaNDFqnQt93bf2hk85Tv/32m+O+++5zFC9e3FGyZElHly5dHIcPH3auR1s6aSurzZs3p9onbe10+vRp8++vvvrK0aJFC7Mf2rqkQ4cOjr179zrL7t+/32x3wYIFjlatWpmWKZMmTXIEBAQ4li1b5rbeTz/91BzrmTNnzOvExESzX7ruMmXKmP3V9aWMJo8ePdpRqVIlR0hIiCMn0BZH/fv3d1x33XXmePX8rF+/3q11zNKlSx0NGjQw7zdr1syxfft2t/ddJ221ZrV4GjlypKNbt26OYsWKOSpXruyYOnVqmtFh69x/8sknjttvv920WtPWa/prVMp7KD4+3lGnTh1zP2gLIdeWOimj9q1btzbHpy169LpUrFjRuY+WnTt3muPW46tbt65j+fLlHiPXmeW6L3qP6n2k901a+6r+85//mG0fPXrU7bxs2bLF7Zx/++23jrCwMHOewsPDzWfOsnXrVnMO9f7Uz0vjxo0dGzZscFs+ZUumf/75x3HjjTea85DW/mlrrfr165vj0M/PnXfe6fxsqZkzZzrq1avnKFKkiCMoKMjRt29f53u6zXfeecfRsWNHcz9Y12DJkiWOm2++2Zz76tWrO4YPH+5s3aX3kOu9pa89tYxMeQ+6llV6v7Zr187cLxUqVHA8+uijjmPHjrndI7qvAwYMMC0l9dwh56BeoV6hXvkf6hXqFVC35MdnFp5XeF5RPK/0zdLzSp4MPOmDZ5MmTcy/v/jiC0fNmjUdV65cyVDgSW+kF154wXHTTTeZrkU66bzLly+brkAtW7Z0bNy40bF27VrzwK0PixYNUNx9991X3b+PP/7YBDb27NljHuT1IVgDKroN1y9x/YLVcvv27TNBjQcffNA8rLrq3Lmzc54GtzRg8cQTTzj++9//On7++WfHww8/bB7ktQug9SWuX/qPPfaYY8eOHWbKCZ577jkTFNJK6qeffjL7qZXQn3/+6QxS6LF988035tjuvfdec370mPXYJk6caLprWddMHxKVPvhr0GPMmDGO3bt3OyZPnuwoWLCgWU96gScNKGmgS5fR867rsQIReg8VLlzY0bZtWxNI2bRpk9k3PdfpBZ50/zSg8csvvzg++OAD08XM2g/tyqbX6a677jIBGw38NG3a1KuBp8GDB5trr8EiT+9b9Nw99dRTjlq1aqW6J1MGnjQAuGrVKnPNbrvtNtOt1KKfIb03NaCmx/zvf//bHJvr8p660GnXSH3vyJEjqfZPPweFChVyTJgwweyT3gtxcXHO661BJf2fHb0f9Npp8NK1q6WuV4M+2vX1119/NcHk77//3lybOXPmmHl6TfTe0mulNPhmBaD13rKCcSkDT9a9p5MGkvX86edM6XFqUHXIkCHmfGhwWq91mzZt3O4RvT4anNQAnmsQD9mPeoV6hXrlf6hXqFdA3ZIfn1l4XuF5xcLzyqBMP6/kycCTPvzqg6fSYEH58uXNg25GAk9p5XjSh1ENWGh03qIP27qc1TJHW33oF1JmaasHXY/Vgsf6EreOwXU/XX8pOHnypHnI1hZUat68eeYL2wqyKf3y1v36+uuvnV/i2trG+lLPCbS1igZyPvroI+c8rZA0EDV27FhnkEJ/TbFoQEqPa+HChVftM62tTFxpK7h77rkn3cDT+++/n+o6a8DA2pa+dm2lpsEPPa/pBZ40aOnqlltucbz00kvm33oNNaCiQQuLN1s8aesfXVdCQoLH9/Xe1pY4Omk5/WVJA2qW9Fo8Wb788ksz7+zZs+a1Bvw0mONJeoEnPRf63rp161KdS90nfe/AgQMe16v3zCuvvJLmudBlBw4c6DZPW0y9/vrrbvP0s6TnwHW5lNchrVxw+vm7//77TWBag9Zq1KhRqYLSSUlJZr0aILPuEW11hZyJeoV6xUK9Qr3iinoF1C3545mF5xWeV1zxvJJ5eS7Hk+aM0bxK3bt3N681J03Xrl1N/+lrsXPnTgkODjaTpV69eib3jL6n/u//P65uz549Zv9q1KghgYGBZiQDlZiY6FauSZMmbq/bt28vhQsXls8//9y8/uSTT8zybdu2Na+3bdsme/fulZIlS5r+nDqVLVtWzp07J7/++qtzPQ0aNJAiRYpITqH7prl2WrRo4Zynx9m0aVPnuVXh4eHOf+tx3XjjjW7vp8V1Oev11ZZr2LCh89+VKlUyf48ePeqcV6xYMalZs6ZbGdf3r7bOlMvofav3lvbftujxe4tuW++z2NhYOX36dKr327RpY0as00k/P5qr7J577pHffvsty+cpOjpannzySXN/at4z13swPdbnSEfRS6lRo0Zy5513mnu4S5cuMmPGDPn777+d29V8Ufp+elJ+rvRzM3LkSOdnRqfevXubfFf//POPZNbQoUNlzZo18tlnn0nRokWd21i5cqXbNurUqWPecz0vYWFhmd4e7Ee9Qr2SEvUK9Yor6hVQt+T9ZxaeV3heccXzSuZ5N1NwDqABpkuXLknlypXdbgxNHj116lQpUKBAqgCRtxJ333DDDbJr166rluvYsaNUq1bNPDTrfl65csUkVE6ZnKt48eJur/WL98EHH5T58+dLt27dzF8NqlkJnzWgoA+uH330UaptXnfddWmuF6lpZWmxAiB6nTy9b5W5WuDR0zKu67RTlSpV5OOPPzYBJk34+tVXX5nK3vWeqFWrllsCck3qrffo6NGjs3SedPjOhx9+WL788kuzPQ16LViwQO6///5099UKCloBWVea5Hz58uUmcf8333xjkva/8sorsm7dOilfvnyGzkXK+18/NyNGjJAHHnggVdmAgADJjA8//FDefvttWbVqlTnnrtvQz/2bb76ZahkrYOdp35AzUK9Qr3gD9Qr1iqJeAXULzyzeQr1CvZKb6pU81eJJA05z586V8ePHO1tv6KRRdQ3w/Otf/zIBmFOnTsmZM2ecy2mZlAGey5cvu82rW7euJCUlmcny888/y4kTJ0zLJ6UP2Toq15YtW1Ltmwa3dJt//vmn+fV82LBhpmWGrtdqsZEROhpZfHy8GSFvxYoV5rWlcePGpjVVhQoVTBDBddIgQk6lLYf0nP/4449u50tHOrPOrVq7dq3z33rOfvnlF3P+0rpmnpazXlvL5RTaekvvrSNHjjjn6fF7kwY7v/vuOzl8+LAJPunnIC0aRNIg7dmzZ685GPv888+bIJEGdmbPnp1ued3ee++9J61atXILlqbcN20dp8Ei/azptV+8eLEJpGmwSkflywz93OhnMuVnRic9B1bFntb9ZdFWTtrC691335Vbb7011Tb0M6v7l3IbBJtyNuoV6hVPqFf+D/WKZ9QroG7Je88sPK/wvGLheSVr8lTgaenSpSYg0atXL9OCyHXq3Lmz+dW6WbNmppuUdofRJpPaamjOnDlu69GHw/3795uA1PHjx+X8+fOmaag299Qvzc2bN5vuSD169JDWrVs7m1gPHDjQPBBrQCkuLs4EvPbt2yf//ve/zYOofsGWKVPGDGmoD9faxFS/iLVLUkbpA7l2x9L9qF69ujkei87TVh+dOnWS//znP+YYNJL53HPPye+//y45lT54P/PMMzJo0CBTQWlAT7s6aTcnvZYW7Q6lQYUdO3bI448/bo41MjLSec00Sqvv6zVz7SKlAa2xY8eaQJVel0WLFsmAAQMkJ7nrrrtMhRYVFSX//e9/zT5rcDKtLmdZpd359J7QbmnanS45OdnM13tcA1I6aYuj/v37O6PeWaFfyP369TPb0u56ejwaSEsZ8NP90G3qZ0NbQ+nnR6/ftGnTPK5XWza9/vrrsnHjRtM19dNPP5Vjx44516utrDTwPHnyZLNO/axqq6j0xMTEmIC1BrL0f470+HVfrPOvrICW7qunQLHO15Zc2hJRz6t1LnXfVN++feWvv/4yXWz1POh3z9dffy09e/a8akAL2Yt6hXqFeiV91CupUa+AuiXvPbPwvMLzCs8r18iRh+hIZ+3bt/f4niYq1sPdtm2bSXinI05pAjtd5r333nNLLq5DZerIC6VLl3aOZqV0BCwd6lMTMGviZB0C9PDhw27b0WV1BDUdpc4a7l2Hhtcky9aoaJo0Wkdy0CFHdSQ8HRXMU4JrK5FzSjo6mb4fExOT6j1NTt2jRw+TUF3XX6NGDUfv3r1NUj9PSa9zCk1I3b9/f+d+6zmzkrZbiah1hEIdKU0TZeuIb3otXT399NNmWMeUw16PGDHCXKtixYo5goKCzDCvrq527jUBts7LTIJ6T8nFddhJV/q+lrNo8nI9bj0+HVVPj1fXGR8ffw1n1vM1//333x21a9d23HrrrSYRtm7HmvTe1sTnOvri1ZKLuyYH1/d0npbVRJDdunVzBAcHm+PRpN/9+vVzJh63ltdJR/fTbWqibh3RzTXBesr911FPIiIizAhxep/ccMMNjilTpriVnz59uklYqQnrNUG43leWtJK16znW5NH6naAj3On9pd8Lls8//9x8Z2gCeL2nUiYXdz0e18kqq3RkPz3X+r2i29FrrInOrcSanu4RZD/qFeoV6pXUqFeoV0Ddkh+fWXhe4XmF55XWWX5e8dP/XGvwCrCT/gKiuYm0pYkmc88vtJVQy5YtTcs410TmAIBrQ71CvQIA3kS9Qr2CfJZcHMitNE+RjupRu3ZtE2zS7oDa9YygEwCAegUAkN14XkFWEXgCcghN9v3SSy+Z3EXa713zimm+IgAAqFcAANmN5xVkFV3tAAAAAAAAYIs8NaodAAAAAAAAcg4CTwAAAAAAALAFgScAAAAAAADYgsATAAAAAAAAbEHgCQAAAAAAALYg8AQAAAAAAABbEHgCAAAAAACALQg8AQAAAAAAwBYEngAAAAAAACB2+H9MfUBubtiyGwAAAABJRU5ErkJggg==",
"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."
]
},
{
"cell_type": "markdown",
"id": "fe8171ac",
"metadata": {},
"source": []
}
],
"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.13.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}