{
"cells": [
{
"cell_type": "markdown",
"id": "intro-md",
"metadata": {},
"source": [
"# Benchmark: AutoCarver vs. optbinning vs. KBinsDiscretizer\n",
"\n",
"This notebook runs the three binning libraries side-by-side on two public datasets:\n",
"\n",
"1. **German Credit** — binary classification, mixed numeric / categorical features, 1,000 rows.\n",
"2. **California Housing** — regression, all-numeric features, 20,640 rows.\n",
"\n",
"For each library and dataset, we report:\n",
"\n",
"- **`fit` and `transform` wall-clock** (seconds)\n",
"- **Downstream-model score** — AUC for binary, R² for regression — using a linear model (logistic regression / ridge) on the one-hot-encoded bin output\n",
"- **`train` → `test` score drop** as a coarse proxy for drift sensitivity\n",
"\n",
"All three libraries see the same `train + dev` data and are evaluated on the same held-out `test`. AutoCarver uses the dev sample for its built-in robustness veto; optbinning and KBinsDiscretizer don't have a dev-set concept and so treat the union of train + dev as one pooled training set — which is the comparison practitioners actually run.\n",
"\n",
"**This is not an IV / Tschuprow's T leaderboard.** Those metrics structurally favour the library whose objective they are. The downstream-model score is the metric a real scorecard team would use to pick a binner.\n",
"\n",
"Numbers come from a single run on a single machine with a fixed seed; treat them as illustrative, not as authoritative benchmark figures. Re-run on your own data before drawing conclusions."
]
},
{
"cell_type": "markdown",
"id": "setup-md",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "imports",
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import warnings\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.datasets import fetch_california_housing, fetch_openml\n",
"from sklearn.linear_model import LogisticRegression, Ridge\n",
"from sklearn.metrics import r2_score, roc_auc_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import KBinsDiscretizer\n",
"\n",
"from AutoCarver import BinaryCarver, ContinuousCarver, Features\n",
"from AutoCarver.discretizers.utils.base_discretizer import DiscretizerConfig\n",
"\n",
"try:\n",
" from optbinning import ContinuousOptimalBinning, OptimalBinning\n",
"\n",
" HAS_OPTBINNING = True\n",
"except ImportError:\n",
" HAS_OPTBINNING = False\n",
" print('optbinning is not installed \\u2014 its rows will be skipped.')\n",
"\n",
"SEED = 42\n",
"warnings.filterwarnings('ignore')\n",
"plt.rcParams['figure.figsize'] = (10, 3.5)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "helpers",
"metadata": {},
"outputs": [],
"source": [
"def one_hot(df):\n",
" \"\"\"Treat every bin label as a categorical level and one-hot encode it.\n",
"\n",
" Lets a linear downstream model consume any of the three libraries' outputs\n",
" uniformly, without us computing WoE per bin.\n",
" \"\"\"\n",
" return pd.get_dummies(df.astype(str), drop_first=True).astype(float)\n",
"\n",
"\n",
"def fit_eval_binary(X_train, X_test, y_train, y_test):\n",
" Xtr = one_hot(X_train)\n",
" Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n",
" model = LogisticRegression(max_iter=1000, random_state=SEED).fit(Xtr, y_train)\n",
" return {\n",
" 'train_auc': roc_auc_score(y_train, model.predict_proba(Xtr)[:, 1]),\n",
" 'test_auc': roc_auc_score(y_test, model.predict_proba(Xte)[:, 1]),\n",
" }\n",
"\n",
"\n",
"def fit_eval_regression(X_train, X_test, y_train, y_test):\n",
" Xtr = one_hot(X_train)\n",
" Xte = one_hot(X_test).reindex(columns=Xtr.columns, fill_value=0.0)\n",
" model = Ridge(random_state=SEED).fit(Xtr, y_train)\n",
" return {\n",
" 'train_r2': r2_score(y_train, model.predict(Xtr)),\n",
" 'test_r2': r2_score(y_test, model.predict(Xte)),\n",
" }\n",
"\n",
"\n",
"def plot_bars(results_df, score_cols, title):\n",
" fig, axes = plt.subplots(1, len(score_cols), figsize=(4 * len(score_cols), 3.5))\n",
" if len(score_cols) == 1:\n",
" axes = [axes]\n",
" for ax, col in zip(axes, score_cols):\n",
" results_df.plot.bar(x='library', y=col, ax=ax, legend=False, color='#4C72B0')\n",
" ax.set_title(col)\n",
" ax.set_xlabel('')\n",
" ax.tick_params(axis='x', rotation=0)\n",
" fig.suptitle(title)\n",
" fig.tight_layout()\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "binners",
"metadata": {},
"outputs": [],
"source": [
"MAX_N_MOD = 5\n",
"MIN_FREQ = 0.05\n",
"\n",
"def bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n",
" Carver = BinaryCarver if kind == 'binary' else ContinuousCarver\n",
" features = Features(categoricals=categoricals, quantitatives=quantitatives)\n",
" config = DiscretizerConfig(verbose=True) # showing statistics\n",
" carver = Carver(features=features, min_freq=MIN_FREQ, max_n_mod=MAX_N_MOD, config=config)\n",
"\n",
" t0 = time.perf_counter()\n",
" X_tr = carver.fit_transform(X_train.copy(), y_train, X_dev=X_dev.copy(), y_dev=y_dev)\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" X_dv = carver.transform(X_dev.copy())\n",
" t1 = time.perf_counter()\n",
" X_te = carver.transform(X_test.copy())\n",
" transform_t = time.perf_counter() - t1\n",
" return pd.concat([X_tr, X_dv]), X_te, fit_t, transform_t\n",
"\n",
"\n",
"def bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, kind):\n",
" Cls = OptimalBinning if kind == 'binary' else ContinuousOptimalBinning\n",
" X_all = pd.concat([X_train, X_dev])\n",
" y_all = pd.concat([y_train, y_dev])\n",
" binners = {}\n",
" train_binned = pd.DataFrame(index=X_all.index)\n",
" test_binned = pd.DataFrame(index=X_test.index)\n",
"\n",
" t0 = time.perf_counter()\n",
" for col in X_all.columns:\n",
" dtype = 'categorical' if col in categoricals else 'numerical'\n",
" binner = Cls(name=col, dtype=dtype, min_prebin_size=MIN_FREQ/2, max_n_bins=MAX_N_MOD)\n",
" binner.fit(X_all[col].to_numpy(), y_all.to_numpy())\n",
" binners[col] = binner\n",
" train_binned[col] = binner.transform(X_all[col].to_numpy(), metric='bins')\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" t1 = time.perf_counter()\n",
" for col, b in binners.items():\n",
" test_binned[col] = b.transform(X_test[col].to_numpy(), metric='bins')\n",
" transform_t = time.perf_counter() - t1\n",
" return train_binned, test_binned, fit_t, transform_t\n",
"\n",
"\n",
"def bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives, n_bins=5):\n",
" X_all = pd.concat([X_train, X_dev])\n",
" num_train = X_all[quantitatives].apply(lambda c: c.fillna(c.median()))\n",
" num_test = X_test[quantitatives].apply(lambda c: c.fillna(c.median()))\n",
" kbd = KBinsDiscretizer(n_bins=n_bins, encode='ordinal', strategy='quantile')\n",
"\n",
" t0 = time.perf_counter()\n",
" binned_num_train = pd.DataFrame(\n",
" kbd.fit_transform(num_train), columns=quantitatives, index=X_all.index\n",
" )\n",
" fit_t = time.perf_counter() - t0\n",
"\n",
" t1 = time.perf_counter()\n",
" binned_num_test = pd.DataFrame(\n",
" kbd.transform(num_test), columns=quantitatives, index=X_test.index\n",
" )\n",
" transform_t = time.perf_counter() - t1\n",
"\n",
" # KBins has no opinion on categoricals — pass them through as labels\n",
" train = pd.concat([binned_num_train, X_all[categoricals].astype(str)], axis=1)\n",
" test = pd.concat([binned_num_test, X_test[categoricals].astype(str)], axis=1)\n",
" return train, test, fit_t, transform_t"
]
},
{
"cell_type": "markdown",
"id": "binary-md",
"metadata": {},
"source": [
"## Binary classification — German Credit\n",
"\n",
"20 features (numeric + categorical), 1,000 rows, target = `class == 'bad'`. Train / dev / test split = 60 / 20 / 20 %."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "381a7051",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train=600, dev=200, test=200\n",
"categoricals=13, quantitatives=7\n",
"bad rate (train)=0.300, (test)=0.300\n"
]
}
],
"source": [
"credit = fetch_openml(data_id=31, as_frame=True)\n",
"df = credit.frame.copy()\n",
"\n",
"y_binary = (df['class'] == 'bad').astype(int)\n",
"X_binary = df.drop(columns=['class'])\n",
"\n",
"X_train, X_rest, y_train, y_rest = train_test_split(\n",
" X_binary, y_binary, test_size=0.4, random_state=SEED, stratify=y_binary,\n",
")\n",
"X_dev, X_test, y_dev, y_test = train_test_split(\n",
" X_rest, y_rest, test_size=0.5, random_state=SEED, stratify=y_rest,\n",
")\n",
"\n",
"categoricals = [c for c in X_binary.columns if X_binary[c].dtype == object or isinstance(X_binary[c].dtype, pd.CategoricalDtype)]\n",
"quantitatives = [c for c in X_binary.columns if c not in categoricals]\n",
"\n",
"print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n",
"print(f'categoricals={len(categoricals)}, quantitatives={len(quantitatives)}')\n",
"print(f'bad rate (train)={y_train.mean():.3f}, (test)={y_test.mean():.3f}')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "run-binary",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"------\n",
"--- [QuantitativeDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
" - [ContinuousDiscretizer] Fit Features(['duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
" - [OrdinalDiscretizer] Fit Features(['duration', 'installment_commitment', 'residence_since', 'existing_credits', 'num_dependents'])\n",
"------\n",
"\n",
"------\n",
"--- [QualitativeDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n",
" - [CategoricalDiscretizer] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker'])\n",
"------\n",
"\n",
"---------\n",
"------ [BinaryCarver] Fit Features(['checking_status', 'credit_history', 'purpose', 'savings_status', 'employment', 'personal_status', 'other_parties', 'property_magnitude', 'other_payment_plans', 'housing', 'job', 'own_telephone', 'foreign_worker', 'duration', 'credit_amount', 'installment_commitment', 'residence_since', 'age', 'existing_credits', 'num_dependents'])\n",
"--- [BinaryCarver] Fit Categorical('checking_status') (1/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"
\n",
" 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, 5284.40it/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, 10330.80it/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, 96015.37it/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, ?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",
" | 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, 220.01it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 6363.27it/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, 3005.95it/s]\n",
"Testing robustness : 100%|██████████| 3/3 [00:00<00:00, 520.41it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('other_parties'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Categorical('property_magnitude') (8/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 2997.36it/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, 363.24it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [BinaryCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 189.40it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('own_telephone'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Categorical('foreign_worker') (13/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 473.08it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Categorical('foreign_worker'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('duration') (14/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 113615.13it/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, 25717.85it/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, 187.60it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('residence_since'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('age') (18/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 36613.59it/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, 489.53it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('existing_credits'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n",
"--- [BinaryCarver] Fit Quantitative('num_dependents') (20/20)\n",
" [BinaryCarver] Raw distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 224.23it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"WARNING: No robust combination for Quantitative('num_dependents'). Consider increasing the size of X_dev or dropping the feature (X not representative of X_dev for this feature).\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 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.196 | \n",
" 0.0126 | \n",
" 0.8321 | \n",
" 0.7874 | \n",
" 0.0447 | \n",
"
\n",
" \n",
" | 1 | \n",
" optbinning | \n",
" 1.150 | \n",
" 0.0131 | \n",
" 0.8523 | \n",
" 0.7931 | \n",
" 0.0592 | \n",
"
\n",
" \n",
" | 2 | \n",
" KBinsDiscretizer | \n",
" 0.003 | \n",
" 0.0010 | \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.196 0.0126 0.8321 0.7874 0.0447\n",
"1 optbinning 1.150 0.0131 0.8523 0.7931 0.0592\n",
"2 KBinsDiscretizer 0.003 0.0010 0.8401 0.7943 0.0458"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_full = pd.concat([y_train, y_dev])\n",
"\n",
"runs = [(\n",
" 'AutoCarver',\n",
" lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n",
")]\n",
"if HAS_OPTBINNING:\n",
" runs.append((\n",
" 'optbinning',\n",
" lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'binary'),\n",
" ))\n",
"runs.append((\n",
" 'KBinsDiscretizer',\n",
" lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n",
"))\n",
"\n",
"rows = []\n",
"for name, run in runs:\n",
" X_tr, X_te, fit_t, transform_t = run()\n",
" scores = fit_eval_binary(X_tr, X_te, y_train_full, y_test)\n",
" rows.append({\n",
" 'library': name,\n",
" 'fit_s': round(fit_t, 3),\n",
" 'transform_s': round(transform_t, 4),\n",
" 'train_auc': round(scores['train_auc'], 4),\n",
" 'test_auc': round(scores['test_auc'], 4),\n",
" 'auc_drop': round(scores['train_auc'] - scores['test_auc'], 4),\n",
" })\n",
"\n",
"binary_results = pd.DataFrame(rows)\n",
"binary_results"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1ea9c0a3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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DrjlaN9qX6p7qbrnKVCn71B3Tv32dazuu+8+d57feOONbvnatrTcc8899vLLL7tte+ihh9w26VzQusydOzesrPaLyqlLa9euXW3KlCkuaKYAmI4NAAC5ngcAQAzZv3+/mpl4HTp0SPXezz//7O3duzc4HTlyJPjeVVdd5dWpU8c7evRocN6JEye8Zs2aedWqVQvOe+mll9zymzdv7v3+++9hy2/RooV7b/r06cF5mzZtcvMKFizorVixIjh/0aJFbr6WFxC6PgHLly935aZNm5ZqHVq1auXWMeDBBx/0ChUq5P3yyy9p7p/PPvvMfbZPnz5eRmzdutWVj4+P9/bs2RP2Xkb3Wd++fd0yPvnkk+A8LSshIcHN13eE7kNNAZ9++mmq/XQ6dO3a1a1H7969w7a1Xbt2XpEiRdz5FKByycnJwdf6W/PuvvvusGXecMMNXpkyZcLmRTsH2rRp451//vlh86pWreqWuXDhwrD5OvZxcXHegAEDwuY/8MADXokSJbxDhw6luY36bMmSJb2kpCTv119/DXsv9DzTvtD3p7fex44d82rXru1deeWVwXnPPfecW+fQfRWpffv23sUXX+ylJ3D+h543WidtXyStp94LGDJkiPvsnDlzUpUNbKN+1ykpKamuHeXLlw87htqOyGMdecwD1q1b517fc889YeUefvhhN//9998PW2fN++ijj8J+L0WLFvUeeuihdPcNAAC5Bd3oAAAxRa0SJNow9WohpBYJgWn8+PFu/k8//eQSDKvliVoxqKWDph9//NG1Zvjqq6/s+++/D1uWWjxE5o0JfK9aJgWotYlah6iVTmhLq8Df6pYVENrS57fffnPfrxZa+rxawkRSa5/QrjpqsaHWN+qOd7L9E637XHpuuummYLehzO4z5YVSayB1CQrQstQKJq9Ry7EA7Xu9VkueyC6R0ahVWygdL+2vwDGJPAf279/v9qm6tOk80etQaiUV2S1O3b7at29vr776arB7n84JtXZTi7P0coupi5uOpVqfReadiuwSFil0vdW6T+uq7Qs9b3UeyxtvvBG1C2WgjFoYqSVWdlCLO3UzjGypGLqN+l0Hcj9pPXWuq/WauvNF+x1mhH4Dom6vodTCSd5+++2w+eo+GWjJF/i96FoSer0AACA3oxsdACCmBIIo6i4TSTltdDO9e/duu+OOO8K6rOjG/LHHHnNTNEpArO5ioTf60aj7W+SNuQIAkfmhNC9wYx46ipm61ajLmgI1obmAIgMNEtkNTl3qIpcZSTl4RPshMyK3NzP7TMGvaF0adfPsJwV9FBjICgUX1DUwPUoor9w5oS666CL3/8i8WtGkd7wCx0VdytQ1b/ny5anyOekcCJw36Z2Dyj+k4NLHH3/suksqEKZzXqO4nSyxvoR2v8sodZdTHq5169aF5SAK/S1odEh1T1N3MgW0rrrqKtf9TN3FAsn6BwwY4NZXgUkFWlu3bu26z6m7ph+0jQqcnoy6u40aNcrlJFPg92T7/GT0G9A2aptCVahQwQXYIgPE0bq46nxJ77cNAEBuQrAJABBTdDOupODRRlMLBDwiAwOBVhYPP/xwmgmUI28S08o3FK21U3rzQwNKysGkQJNyO2mkOG2LbtbVUipaS5CMLDPadigX0Oeff26ZEbm9Wdln2U35rpQbKivUekgJybPTyY6XAiEKwNSoUcNGjx7tApQKgqlVzHPPPZfqHEjrHNTxKF++vP3rX/9ywSb9X0GNVq1aZcNWmQtqKV+TvkujPOr3d8YZZ7hzOTSxt9b3o48+com21ZJHeaAUFFNC9HfffdftH7UAVC4qBa/0vloiaZnK26VE3DlB+0v5kdQSrH///i6vltZNgeBAQC6rTtZC7FR+2wAA5CYEmwAAMUcJidWCQsl8Q7tupSXQWkU3yNl1Q54RGr1LyYDVoiJACZI1epZflGRcN/fqAqfk5JEtrjIqM/usatWqrltdJAUV/Lo5F3WPUlewrAi0MkqPgj3qxhRozSRKuh0YQexUKRm4WgUpWXVoy5bQUdAyGqhQayAl+1by8Xnz5qXZ7TOURkkTBWozEyhUQEjd7jQynpJ+ByjYFEmtexRQ06SA2ogRI+zRRx912xg4j9TVT62gNKm1mlo/Pfnkky5heWT3vszSNkYLREf+DnV+z5kzJ+z8U4uzrJ6b+g3o/NHvQAG1ALU40+9b7wMAEEvI2QQAiDmPPPKIC6potCndzJ2sdYBaLiifk7rZ7dy5M1X5vXv3Wk5QMCBy3TQMvHLu+Ek3zfoedauK1t1w9erVrhtRejKzz6655hpbsWKFC/6Fvq8R+k4mkGMoIwE3BYwUsMjKpFG+MmLcuHHBv7UP9VoBNwVPTlUgGBTZfTJa0OZkdGzV5Uoj1ekYh3YbTYu6rKkbqlrwKMiZ0RY1Wm8FXkLPU7UeVJArVLQujhrZTQJd75TDKpRadil/kb4/tDtbVqkL3WeffZZq9LfQbYx2HDRynLo2hgqMDpmRc1O/AdGIkaEUcJPAiH0AAMQKWjYBAGJOtWrVXPcdDV2uvEBKRK1WL7p53Lp1q3tPLSyUXylAycKbN29uderUca1A1LJBgSrdYCphsW5Qs5uGhdcw7uo+pxtsfbfy15QpU8bX79Gw8Nre+++/33XZUmBC+0x5nNSVTC1rlH/nZDK6zxT803a1bdvWDWevAJKGqldrDg1rf7KWKMppM3HiRBcI0WfVHTKruXNOhVrVqGuXWp9pHd555x3XHWzQoEFhydOzSsEeBVeuu+66YJBo8uTJLrAXLaCXnj/84Q8u99KsWbNcS5oGDRqc9DPKG6Xuesqp1LhxY9c6SgE8HUflj0orAKlAiYImOr76jHJ16dxQ66jQ4/v444+7bnQqr2Ovcuoip9+hzqPAPlCXP+VoUlfAjRs3uoCePpPZpPbRqFucWi517NjRBaMVZFQQTOe8zjFdJ/Q7VKsmJRHX9+qaoff0mwwNzqpboOapK6Bauynnl/Z5tJxXWq7OG533Ck6p26aCr9qn6q6X1e6fAADkVgSbAAAxSSNyKS+RuqQpH8yUKVNc6wvd5OoGUiOD6QYwQDeNq1atcnlh1P1ILSx0k6+bduWLyQljx451rSrU4kctS3TDrWBTWjmRToWCGQooaP9MmzbNtTTSSHoKSqglTUZawmR0nymHj7pJKSfVU0895YJn2v+VKlWy7t27p/sdajWkG3J1odJnNCqY1u90BJt0bBRsuu+++1zQQsEPtRLz6/xQYFSBkMGDB7tcWAq66LsUyFJgJLOUKFyBvpMlBg+l46FjqOM0fPhwt/8VkHzwwQfT/Iy6Zb744ovuM8o3pmOj7ntq3RQabFJeJ83Tb1Gj7JUtW9YFXXT+BBKf67zU+a/glQI7CkQ98MADbp/4Qee4ckzpuKl1k84tba9apgWCz8rXtGvXLtdqT10DdZ4rj5MCd5F5vdRdV+e19o+6/Gm5aSVYV1kFZPVb0Xfr+Oq8juyeBwBALCjgkWkQAAAg5ih4qSCIAjzRRjcDAADILgSbAAAAYoyeJarlnlqRZTbBOAAAwKmiGx0AAECMOHz4sMs/pACTupG+8cYbp3uVAABAPkTLJgAAgBihLnPKmaSk6koA/+STT57uVQIAAPkQwSYAAAAAAAD4pqB/iwIAAAAAAEB+R7AJAAAAAAAAviHYBAAAAAAAAN8QbAIAAAAAAIBvCDYBAAAAAADANwSbAAAAAAAA4BuCTQAAAAAAAPANwSYAAAAAAAD4hmATAAAAAAAAfEOwCQAAAAAAAL4h2AQAAAAAAADfEGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNiEmffvqpNWvWzEqUKGEFChSwDh06uP8DAAAAQF41depUd1+zbdu2070qQLoINiHm/Pbbb9axY0f76aef7LnnnrN//vOfVrVq1VTlRowYYfPmzTst6wgA8N+yZcts6NCh9ssvv2Tb7qXuAAAAODmCTYg5X3/9tX377bf28MMP27333mt33HGHjRo1yn799dewctwwAEDsBZuGDRtGsAkAAOA0I9iEmLNnzx73/1KlSgXnFS5c2OLi4k7jWgEAAABA9vM8L9WDdiCnEWxCTLnrrrusRYsW7m91pVN/5iuuuMJ1qwjN2aS/Dx8+bC+//LL7W5M+m1EzZsywhg0bWsmSJS0+Pt7q1KljY8eOzZZtAgCcnK7z/fv3d3+fd955wWt7IKfFv/71L3fdLlasmJ111ll266232o4dO8KW8dVXX9lNN91kFSpUcA8ozjnnHFdu//79vtQdzz77rMsnWKZMGbceWp/Zs2eHldH6arnKyRFJ87Wdob7//nvr3r27VapUyYoWLeq2/b777rNjx45x2gBABqhHxP3332/Vq1d312Zdo3UfEZkTKfJ+4mQ5lN555x13XxK4X2jcuLFNnz49U8fkiy++sCuvvNKtl+qkJ554wk6cOJGqXGJiol177bW2aNEia9SokSv//PPPu/e++eYbtz2q+4oXL26XXHKJvf3222GfX7p0qduGmTNn2qBBg1w9qNy3119/faq6EsiowhkuCeQBf/rTn6xy5cqui9wDDzzgLurly5e3//znP2HllMfpnnvusSZNmriudnLBBRdk6DsWL15snTt3tquuusqefvppN2/jxo3uO/r06ZMNWwUAOJkbb7zRvvzyS3v11Vddvr6yZcu6+WeffbY9+eST9thjj9ktt9zirv179+61v//973b55Zfb2rVrXUtYBWfatGljKSkp1rt3b/cPbQVy3nrrLdctLyEh4ZTqDtFDCf3D/fbbb3ffpwcXugHQd7Rr1y7TB/mHH35w66L10/rUqFHDrbMCWEeOHLEiRYpw4gBABgYWUjdsPVxQQEdBowkTJrgH1v/9739dgCazFIC6++677eKLL7aBAwe6ekb1zcKFC+22227L0DJ27dplLVu2tN9//93+8pe/uODPpEmTXCApms2bN7t7FN0P9ejRwwXPdu/e7R5yqE7QvZECaXpgorpIdcUNN9wQtgzVlwo6DRgwwPUWGTNmjLVq1crWrVuX5vcCafKAGPPBBx94OrVnzZoVnJecnOzmhSpRooTXtWvXTC+/T58+Xnx8vPf777/7sr4AAH/89a9/ddf6rVu3Budt27bNK1SokPfkk0+Glf3888+9woULB+evXbs2Vd0RTVbrDjly5EjY62PHjnm1a9f2rrzyyuA8rbvW46WXXkr1ec1XfRbQpUsXr2DBgt6nn36aquyJEyeytI4AkN9EXptl+fLl7po7bdq0dO8nRNfr0Lrnl19+8UqWLOklJSV5v/76a5avzX379nXL/eSTT4Lz9uzZ4yUkJKSq66pWrermLVy4MOoyPv744+C8gwcPeuedd56XmJjoHT9+POz+qXLlyt6BAweCZV977TU3f+zYsRlebyCAbnRAJunJhLpRqIUTACB3mzNnjutyoFZN+/btC05quVStWjX74IMPXDm1XBJ1QdAT4OwQ+lT4559/dt3zLrvsMluzZk2ml6Vt0oiq1113nesyESlaVw8AQPrXZo1q/eOPP9qFF17o/s2fleuz7hEOHjzoWiNF5ozNzLV5wYIFrsubWrAGqLWuWsdGo27UaqEbuQx9vnnz5sF5Z555pmsNqxZcarkVqkuXLq7bX8DNN99sFStWdMsBMotgE5BJ6tN90UUX2dVXX+2a2qqJrJrEAgByH+VhUqMgBZb0j/TQSV2gA4NK6B/p/fr1sxdeeMF1wdM/2MePHx/M1+QHdZfTjYNuPpQ7Q+ugrhpZ+Q51BTxw4IDVrl3bt/UDgPxIibSHDBliVapUcbnvVAfo+qwuylm5PmtkbDnV67NySanuiqTucdGoHou2jGjla9asGXw/VOT3KTimwFtkPiogI8jZBGRSuXLlXL9lPf1W4j9NL730knsSoD7QAIDcQy2A9I9lXasLFSqU6n094Q0YNWqUS/j9xhtv2LvvvuvyW4wcOdJWrFjhHi6cio8//tjlyFCeqH/84x/uSfEZZ5zh6o/QhLFpPfU+fvz4KX0/ACA65enTtbhv377WtGlT19JV12LlcApNxp3br8/kVEJuQ7AJ+dapdDFQ0lV1XdCkSkitnTTigxLQKvoPAMgd13Ul8FbLJj3xVavUk9HoopoGDx7sEsZeeumlNnHiRDcCUFrfkRGvv/66a9GkBxV6ch6gG5xQpUuXdv/XE/VQkU+f9dRdoxtt2LAhS+sDAPg/SpTdtWtX98Ah4OjRo6muw6HXZ3WxS+v6HBg4QtfnU7kvqFq1qmudGy0ReGaWEa38pk2bgu+Hivw+1Z9btmyxunXrZmLNgf9DNzrkWxrRIbISyQj14w5VsGDB4AVYoxgBAE4PXdcl9NquUerUomnYsGHuH82h9DpwTVeXNI34E0pBJ13jQ6/tWa07tA4KVIU+AVe3BOVdCqUAkrpwfPTRR2Hz1RoqlNarQ4cO9uabb9qqVatSfV/ktgIA0r4+R14zNWJpZIulQBAp9PqsPK6RPRtat27t8h6pZayCVlm9Nl9zzTWuZe3KlSvDulC/8sormVqGPr98+fKwddaodomJiVarVq2w8tOmTXP5pkIDcTt37nTpQ4DMomUT8q2GDRvae++9Z6NHj7ZKlSq5p95JSUkn/ZyGvf7pp5/syiuvdN0q9DRDFVL9+vWD/Z8BAKfnui6PPvqo6/6gbmpqgapWSRp6WsEdBWh0E7B161abO3euS5L68MMP2/vvv2+9evWyjh07uhZQCjz985//dDchN9100ynXHe3atXOfadu2rRv2WrmilBNKT73Xr1+fqp556qmn3P+V/Fs3Nl9++WWqZY4YMcJ192vRooXbDtVBuimYNWuW/fvf/w578g4AiO7aa69113t1n1PwRYEZXefLlCmTKoh07rnnWvfu3a1///6ufpgyZYprabp9+/awhwbPPfecu4Y3btzYXfPVKuqzzz5zA1BkNO3GI4884tZL9UafPn3cww4FidQaKbLeSIuSlL/66qsuWKSu4coXqO9XHagWt3pwEUrvK5l4t27dbPfu3TZmzBhXT/Xo0YPTB5kXHJcOiBGBoTtDh6+ONlTppk2bvMsvv9wrVqyYey+jQ1nPnj3ba926tVeuXDmvSJEi3rnnnuv96U9/8nbu3On7tgAAMmf48OFu6OaCBQuGDQ39+uuve82bN/dKlCjhpho1ang9e/b0Nm/e7N7/5ptvvLvvvtu74IILvLi4OO+ss87yWrZs6b333nu+1B3y4osvetWqVfOKFi3qvl/DZUernzQMd/fu3d3w1ho++5ZbbnHDXaucyof69ttvvS5dunhnn322W+7555/vtislJYVTBwAy4Oeff/a6devmlS1b1jvzzDO9Nm3auGt91apVU13jV69e7SUlJQXvAUaPHu2u5aH1TcD8+fO9Zs2aufoiPj7ea9Kkiffqq69m6pisX7/ea9GihauXVLepjlNdEvl9Wtd27dpFXcbXX3/t3XzzzV6pUqXccrQeb731VtT7J63fwIED3X2O1lvLVD0DZEUB/ScLMSoAAAAAAJDHLV261Fq2bOlaxt58882ne3UQI8jZBAAAAAAAAN+Qswn4/5QEUEn30qMhskOHyQYA5G/UHQCAzPj1119t//796ZZR7iSNfg3kZQSbgP9vx44dLtFrepKTk23o0KHsMwAAdQcAINNmzpzpEnCn54MPPrArrriCvYs8jZxNwP+noUk1ek96zj//fDcBAEDdAQDILI0a+sUXX6RbRiOfagQ7IC8j2AQAAAAAAADfkCAcAAAAAAAAeTdn04kTJ+yHH36wkiVLWoECBXL66wEgz/I8zw4ePGiVKlWyggXz77MC6hEAyBrqEeoRAMipeiTHg00KNFWpUiWnvxYAYiqZ/TnnnGP5FfUIAJwa6hHuRwAgu+uRHA82qUVTYOXi4+Nz+usBIM86cOCAC9YHrqP5FfUIAGQN9Qj1CADkVD2S48GmQNc5BZoINgFA1q+j+RX1CAD4cx3Nr6hHACD765H8m/QDAAAAAAAAviPYBAAAACDbjB8/3hITEy0uLs6SkpJs5cqV6ZafNWuW1ahRw5WvU6eOLViwIFWZjRs32vXXX28JCQlWokQJa9y4sW3fvp2jCAC5BMEmAAAAANli5syZ1q9fP0tOTrY1a9ZYvXr1rE2bNrZnz56o5ZctW2adO3e27t2729q1a61Dhw5u2rBhQ7DM119/bc2bN3cBqaVLl9r69evtsccec8EpAEDuQLAJAJCjT6zHjBlj1atXt2LFirkEgw8++KAdPXqUowAAMWj06NHWo0cP69atm9WqVcsmTpxoxYsXtylTpkQtP3bsWGvbtq3179/fatasacOHD7cGDRrYuHHjgmUeffRRu+aaa+yZZ56xP/zhD3bBBRe4Vk7lypXLwS0DAKSHYBMAIMeeWE+fPt3+8pe/uPLqAvHiiy+6ZQwaNIijAAAx5tixY7Z69Wpr1apVcF7BggXd6+XLl0f9jOaHlhfVK4HyJ06csLffftsuuugiN18BJj3omDdvXjZvDQAgMwg2AQBy7Im1ukdceumldtttt7nWUK1bt3bdJU7WGgoAkPfs27fPjh8/buXLlw+br9e7du2K+hnNT6+8HmYcOnTInnrqKdcC6t1337UbbrjBbrzxRvvwww+jLjMlJcUN1x06AQCyF8EmAECOPbFu1qyZ+0wguPTNN9+4xK/qDpEWbhIAAAFq2STt27d33bDr16/vWsxee+217oFHNCNHjnSJxAOTunADALIXwSYAQI49sVaLpscff9wldj3jjDNcno0rrrgi3W503CQAQN5UtmxZK1SokO3evTtsvl5XqFAh6mc0P73yWmbhwoVda9pQyu+U1mh0AwcOtP379wenHTt2nOKWAQBOhmATACDHaNSgESNG2D/+8Q+X42nOnDku94YSwKaFmwQAyJuKFCliDRs2tCVLloS1TNLrpk2bRv2M5oeWl8WLFwfLa5mNGze2zZs3h5X58ssvrWrVqlGXWbRoUYuPjw+bAADZq7DlA9c99IbFsjdHtT/dqwAgH8rKE2sNTX3nnXfaPffc417XqVPHDh8+bPfee68bXUjd8KLdJGgCsop/B+RtHL+8TYNIdO3a1Ro1amRNmjRxI5Lquq9cf9KlSxerXLmya8Uqffr0sRYtWtioUaOsXbt2NmPGDFu1apVNmjQpuEyNVNepUye7/PLLrWXLlrZw4UJ788033QMNIDtwHQIyj5ZNAIAce2J95MiRVAElBazE8zyOBADEGAWFnn32WRsyZIjLr7Ru3ToXHAp0wVbXt507d4bl9tPIpQouaYTT2bNnu5HmateuHSyjhODKz/TMM8+4hxYvvPCCvf76666LNgAgd8gXLZsAALnjifV1113nRrD7wx/+4Iaq3rJli2vtpPmBoFNuxBNNAMi6Xr16uSmaaK2ROnbs6Kb03H333W4CAMRIsOn777+3AQMG2DvvvOOeUF944YX20ksvuRsNAED+e2K9d+9e98RaScH11DryiXVoS6bBgwdbgQIF3P9Vn5x99tku0PTkk0+exq0AAAAAcNqCTT///LNdeumlrm+0gk26Sfjqq6+sdOnSvq4UACA2n1hrBKHk5GQ3AQAAAIhNmQo2Pf3001alShXXkingvPPOy471AgAAAAAAQKwnCJ8/f77rLqc+1OXKlXM5NyZPnpzuZ1JSUuzAgQNhEwAAAAAAAGJTpoJN33zzjU2YMMGqVatmixYtsvvuu88eeOABe/nll9P8jJLCJiQkBCe1jAIAAAAAAEBsylSwSUNaN2jQwEaMGOFaNd17773Wo0cPN/RoWgYOHGj79+8PTjt27PBjvQEAAAAAAJDXg00VK1a0WrVqhc2rWbOmG20oLUWLFrX4+PiwCQAAAAAAALEpU8EmjUS3efPmsHlffvmlVa1a1e/1AgAAAAAAQKwHmx588EFbsWKF60a3ZcsWmz59uk2aNMl69uyZfWsIAAAAAACA2Aw2NW7c2ObOnWuvvvqq1a5d24YPH25jxoyx22+/PfvWEAAAAAAAAHlG4cx+4Nprr3UTAAAAAAAAcEotmwAAAAAAAID0EGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAAAAAPiGYBMAAAAAAAB8Q7AJAAAAAAAAviHYBAAAAAAAAN8QbAIAAACQbcaPH2+JiYkWFxdnSUlJtnLlynTLz5o1y2rUqOHK16lTxxYsWBD2/l133WUFChQIm9q2bcsRBIBchGATAAAAgGwxc+ZM69evnyUnJ9uaNWusXr161qZNG9uzZ0/U8suWLbPOnTtb9+7dbe3atdahQwc3bdiwIaycgks7d+4MTq+++ipHEAByEYJNAAAAALLF6NGjrUePHtatWzerVauWTZw40YoXL25TpkyJWn7s2LEukNS/f3+rWbOmDR8+3Bo0aGDjxo0LK1e0aFGrUKFCcCpdujRHEAByEYJNAAAAAHx37NgxW716tbVq1ep/Nx8FC7rXy5cvj/oZzQ8tL2oJFVl+6dKlVq5cOatevbrdd9999uOPP6a5HikpKXbgwIGwCQCQvQg2AQAAAPDdvn377Pjx41a+fPmw+Xq9a9euqJ/R/JOVV8unadOm2ZIlS+zpp5+2Dz/80K6++mr3XdGMHDnSEhISglOVKlV82T4AQNoKp/MeAAAAAOQqt956a/BvJRCvW7euXXDBBa6101VXXZWq/MCBA13eqAC1bCLgBADZi5ZNAAAAAHxXtmxZK1SokO3evTtsvl4rz1I0mp+Z8nL++ee779qyZUvU95XfKT4+PmwCAGQvgk0AAAAAfFekSBFr2LCh6+4WcOLECfe6adOmUT+j+aHlZfHixWmWl++++87lbKpYsaKPaw8AOBUEmwAAAABkC3Vfmzx5sr388su2ceNGl8z78OHDbnQ66dKli+vmFtCnTx9buHChjRo1yjZt2mRDhw61VatWWa9evdz7hw4dciPVrVixwrZt2+YCU+3bt7cLL7zQJRIHAOQOmQo26WJfoECBsKlGjRrZt3YAAAAA8qxOnTrZs88+a0OGDLH69evbunXrXDApkAR8+/bttnPnzmD5Zs2a2fTp023SpElWr149mz17ts2bN89q167t3le3vPXr19v1119vF110kXXv3t21nvr4449ddzkAQB5NEH7xxRfbe++9978FFCbHOAAAAIDo1Cop0DIpkpJ6R+rYsaOboilWrJgtWrSIXQ0AuVymI0UKLqWXoA8AAAAAAAD5V6ZzNn311VdWqVIlN+rD7bff7pq+piclJcUNLxo6AQAAAAAAIDZlKtiUlJRkU6dOdf2sJ0yYYFu3brXLLrvMDh48mOZnRo4caQkJCcGpSpUqfqw3AAAAAAAA8nqw6eqrr3b9p+vWretGe1iwYIH98ssv9tprr6X5GY0usX///uC0Y8cOP9YbAAAAAAAAudApZfcuVaqUGwViy5YtaZbRqBCMDAEAAAAAAJA/ZDpnU6hDhw7Z119/bRUrVvRvjQAAAAAAAJA/gk0PP/ywffjhh7Zt2zZbtmyZ3XDDDVaoUCHr3Llz9q0hAAAAAAAAYrMb3XfffecCSz/++KOdffbZ1rx5c1uxYoX7GwAAAAAAAMhUsGnGjBnsMQAAAAAAAGRPziYAAMaPH2+JiYkWFxdnSUlJtnLlynR3ikYx7dmzp8v3pwEkNNCERjcFAAAAEBtOaTQ6AED+NnPmTOvXr59NnDjRBZrGjBljbdq0sc2bN1u5cuVSlT927Jj98Y9/dO/Nnj3bKleubN9++60b3RQAAADw23UPvRHTO/XNUe0tNyLYBADIstGjR1uPHj2sW7du7rWCTm+//bZNmTLF/vKXv6Qqr/k//fSTG2TijDPOcPPUKgoAAABA7KAbHQAgS9RKafXq1daqVav/VSoFC7rXy5cvj/qZ+fPnW9OmTV03uvLly1vt2rVtxIgRdvz4cY4CAAAAECNo2QQAyJJ9+/a5IJGCRqH0etOmTVE/880339j7779vt99+u8vTtGXLFrv//vvtt99+s+Tk5KifSUlJcVPAgQMHOGIAAABALkawCQCQY06cOOHyNU2aNMkKFSpkDRs2tO+//97++te/phlsGjlypA0bNoyjBADIs8gZAyC/oRsdACBLypYt6wJGu3fvDpuv1xUqVIj6GY1Ap9Hn9LmAmjVr2q5du1y3vGgGDhxo+/fvD047duzgiAEAAAC5GMEmAECWFClSxLVMWrJkSVjLJb1WXqZoLr30Utd1TuUCvvzySxeE0vKiKVq0qMXHx4dNAAAAAHIvgk0AgCzr16+fTZ482V5++WXbuHGj3XfffXb48OHg6HRdunRxLZMC9L5Go+vTp48LMmnkOiUIV8JwAAAAALGBnE0AgCzr1KmT7d2714YMGeK6wtWvX98WLlwYTBq+fft2N0JdQJUqVWzRokX24IMPWt26da1y5cou8DRgwACOAgAAABAjCDYBAE5Jr1693BTN0qVLU81TF7sVK1aw1wEAAIAYRTc6AAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAADZZvz48ZaYmGhxcXGWlJRkK1euTLf8rFmzrEaNGq58nTp1bMGCBWmW/fOf/2wFChSwMWPGZMOaAwCyimATAAAAgGwxc+ZM69evnyUnJ9uaNWusXr161qZNG9uzZ0/U8suWLbPOnTtb9+7dbe3atdahQwc3bdiwIVXZuXPn2ooVK6xSpUocPQDIZQg2AQAAAMgWo0ePth49eli3bt2sVq1aNnHiRCtevLhNmTIlavmxY8da27ZtrX///lazZk0bPny4NWjQwMaNGxdW7vvvv7fevXvbK6+8YmeccQZHDwByGYJNAAAAAHx37NgxW716tbVq1ep/Nx8FC7rXy5cvj/oZzQ8tL2oJFVr+xIkTduedd7qA1MUXX3zS9UhJSbEDBw6ETQCA7EWwCQAAAIDv9u3bZ8ePH7fy5cuHzdfrXbt2Rf2M5p+s/NNPP22FCxe2Bx54IEPrMXLkSEtISAhOVapUydL2AAAyjmATAAAAgDxBLaXU1W7q1KkuMXhGDBw40Pbv3x+cduzYke3rCQD5HcEmAAAAAL4rW7asFSpUyHbv3h02X68rVKgQ9TOan175jz/+2CUXP/fcc13rJk3ffvutPfTQQ27Eu2iKFi1q8fHxYRMAIBcHm5566in3RKFv377+rREAAACAPK9IkSLWsGFDW7JkSVi+Jb1u2rRp1M9ofmh5Wbx4cbC8cjWtX7/e1q1bF5w0Gp3yNy1atCibtwgAkFGFLYs+/fRTe/75561u3bpZXQQAAACAGNavXz/r2rWrNWrUyJo0aWJjxoyxw4cPu9HppEuXLla5cmWXV0n69OljLVq0sFGjRlm7du1sxowZtmrVKps0aZJ7v0yZMm4KpdHo1PKpevXqp2ELAQC+tWw6dOiQ3X777TZ58mQrXbp0VhYBAAAAIMZ16tTJnn32WRsyZIjVr1/ftURauHBhMAn49u3bbefOncHyzZo1s+nTp7vgUr169Wz27Nk2b948q1279mncCgBAjrRs6tmzp3vSoGFJn3jiiZMONaopgKFGAQAAgPyjV69ebopm6dKlqeZ17NjRTRm1bdu2U1o/AEAuCDapKeuaNWtcN7qMUJPYYcOGZWXdAAAAAAAAEMvd6DRMqPpRv/LKKxYXF5ehzzDUKAAAAAAAQP6RqZZNq1evdkONNmjQIDjv+PHj9tFHH9m4ceNcdzkNbxo51KgmAAAAAAAAxL5MBZuuuuoq+/zzz8PmaSSJGjVq2IABA1IFmgAAAAAAAJC/ZCrYVLJkyVQjQZQoUcINP8oIEQAAAAAAAMhUziYAAAAAAADA19HoMjJcKQAAAAAAAPInWjYBAAAAAADANwSbAAAAAAAA4BuCTQAAAAAAAPANwSYAAAAAAAD4hmATAAAAAAAAfEOwCQAAAAAAAL4h2AQAAAAAAADfEGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAAAAAPiGYBMAAACAbDN+/HhLTEy0uLg4S0pKspUrV6ZbftasWVajRg1Xvk6dOrZgwYKw94cOHereL1GihJUuXdpatWpln3zyCUcQAHIRgk0AgBy9iQiYMWOGFShQwDp06MARAIAYNXPmTOvXr58lJyfbmjVrrF69etamTRvbs2dP1PLLli2zzp07W/fu3W3t2rWujtC0YcOGYJmLLrrIxo0bZ59//rn9+9//dnVQ69atbe/evTm4ZQCA9BBsAgDk2E1EwLZt2+zhhx+2yy67jL0PADFs9OjR1qNHD+vWrZvVqlXLJk6caMWLF7cpU6ZELT927Fhr27at9e/f32rWrGnDhw+3Bg0auOBSwG233eZaM51//vl28cUXu+84cOCArV+/Pge3DACQHoJNAIAcu4mQ48eP2+23327Dhg1zNwoAgNh07NgxW716tQsMBRQsWNC9Xr58edTPaH5oedFDjLTK6zsmTZpkCQkJ7oEHACB3INgEAMixmwh5/PHHrVy5cq6LBAAgdu3bt889YChfvnzYfL3etWtX1M9ofkbKv/XWW3bmmWe6LtzPPfecLV682MqWLRt1mSkpKa7lU+gEAMheBJsAADl2E6HcGi+++KJNnjw5w9/DTQIAIFLLli1t3bp1LseTut3dcsstaXbhHjlypGv5FJiqVKnCDgWA3BRsmjBhgtWtW9fi4+Pd1LRpU3vnnXeyb+0AADHj4MGDduedd7pAU1pPn6PhJgEA8iZd6wsVKmS7d+8Om6/XFSpUiPoZzc9IeY1Ed+GFF9oll1ziHmIULlzY/T+agQMH2v79+4PTjh07TnnbAAA+BpvOOecce+qpp1y3iVWrVtmVV15p7du3ty+++CIziwEA5MObiK+//tolBr/uuuvcTYGmadOm2fz5893fej8abhIAIG8qUqSINWzY0JYsWRKcd+LECfdaD62j0fzQ8qIucmmVD12uWsJGU7Ro0eDD8sAEAMhehTNTWDcIoZ588knX2mnFihVuJAgAQP68idCw1KE3Eb169UpVvkaNGm6Y6lCDBw92LZ40+lBa3Rp0k6AJAJD3aMTSrl27WqNGjaxJkyY2ZswYO3z4sBtYQrp06WKVK1d2rVilT58+1qJFCxs1apS1a9fOZsyY4R5yKwm46LO6B7n++uutYsWKrkv3+PHj7fvvv7eOHTue1m0FAGQx2BRKeTpmzZrlLvjpPWnQE4bQpwwk5AOA/HkToSSutWvXDvt8qVKl3P8j5wMAYkOnTp1s7969NmTIEJfPr379+rZw4cJgvr/t27e7wSUCmjVrZtOnT3cPIwYNGmTVqlWzefPmBesJtajdtGmTvfzyyy7QVKZMGWvcuLF9/PHHPPwGgLwcbNJTaQWXjh496kaAmDt3rhvuOi26wdDw1gCA2JPZmwgAQP6j1q7RWrzK0qVLU81TC6W0WinpwcWcOXN8X0cAwGkONlWvXt2N/KDkerNnz3ZPtD/88MM0A07KtaEn36EtmxgBAgDy701EqKlTp2bTWgEAAADIM8Em5ejQyA+iXB2ffvqpy7Xx/PPPRy1Prg0AAAAAAID845T7NqQ38gMAAAAAAADyl0y1bFKXuKuvvtrOPfdcN3qQkvepi8SiRYuybw0BAAAAAAAQm8GmPXv2uJGFdu7caQkJCVa3bl0XaPrjH/+YfWsIAAAAAACA2Aw2vfjii9m3JgAAAAAAAMjzGI8aAAAAAAAAviHYBAAAAAAAAN8QbAIAAAAAAIBvCDYBAAAAAADANwSbAAAAAAAA4BuCTQAAAAAAAPANwSYAAAAAAAD4hmATAAAAAAAAfEOwCQAAAAAAAL4h2AQAAAAAAADfEGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAADZZvz48ZaYmGhxcXGWlJRkK1euTLf8rFmzrEaNGq58nTp1bMGCBcH3fvvtNxswYICbX6JECatUqZJ16dLFfvjhB44gAOQiBJsAAAAAZIuZM2dav379LDk52dasWWP16tWzNm3a2J49e6KWX7ZsmXXu3Nm6d+9ua9eutQ4dOrhpw4YN7v0jR4645Tz22GPu/3PmzLHNmzfb9ddfzxEEgFyEYBMAAACAbDF69Gjr0aOHdevWzWrVqmUTJ0604sWL25QpU6KWHzt2rLVt29b69+9vNWvWtOHDh1uDBg1s3Lhx7v2EhARbvHix3XLLLVa9enW75JJL3HurV6+27du3cxQBIJcg2AQAAADAd8eOHXNBoFatWv3v5qNgQfd6+fLlUT+j+aHlRS2h0iov+/fvtwIFClipUqV8XHsAQI4Fm0aOHGmNGze2kiVLWrly5VyTVjVbBQAAAIBQ+/bts+PHj1v58uXD5uv1rl27ou4szc9M+aNHj7ocTup6Fx8fH7VMSkqKHThwIGwCAOSiYNOHH35oPXv2tBUrVrjmq0rQ17p1azt8+HD2rSEAAAAARNC9iLrTeZ5nEyZMSPeBubrfBaYqVaqwLwEgmxXOTOGFCxeGvZ46dapr4aTmsZdffrnf6wYAAAAgjypbtqwVKlTIdu/eHTZfrytUqBD1M5qfkfKBQNO3335r77//fpqtmmTgwIEuSXmAWjYRcAKAXJyzSf2j5ayzzkqzDM1WAQAAgPynSJEi1rBhQ1uyZElw3okTJ9zrpk2bRv2M5oeWF/WoCC0fCDR99dVX9t5771mZMmXSXY+iRYu6YFToBADIpcEmVRR9+/a1Sy+91GrXrp1mOZqtAgAAAPmTWhRNnjzZXn75Zdu4caPdd999LgWHRqeTLl26uJZHAX369HG9KUaNGmWbNm2yoUOH2qpVq6xXr17BQNPNN9/s5r3yyisuJ5TyOWlSQnIAQB7sRhdKuZs2bNhg//73v9MtR7NVAAAAIH/q1KmT7d2714YMGeICQvXr13fBpEAS8O3bt7sR6gKaNWtm06dPt8GDB9ugQYOsWrVqNm/evODD7e+//97mz5/v/tayQn3wwQd2xRVX5Oj2AQB8DDbpycJbb71lH330kZ1zzjknbbaqCQAAAED+o3uHQMukSEuXLk01r2PHjm6KJjEx0SUEBwDEULBJF/bevXvb3LlzXcVw3nnnZd+aAQAAAAAAILaDTeo6p2atb7zxhpUsWdI1hRUNIVqsWLHsWkcAAAAAAADEYoLwCRMmuBHo1Be6YsWKwWnmzJnZt4YAAAAAAACI3W50AAAAAAAAgC8tmwAAAAAAAID0EGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAMApGT9+vCUmJlpcXJwlJSXZypUr0yw7efJku+yyy6x06dJuatWqVbrlAQAAAOQ9BJsAAFk2c+ZM69evnyUnJ9uaNWusXr161qZNG9uzZ0/U8kuXLrXOnTvbBx98YMuXL7cqVapY69at7fvvv+coAAAAADGCYBMAIMtGjx5tPXr0sG7dulmtWrVs4sSJVrx4cZsyZUrU8q+88ordf//9Vr9+fatRo4a98MILduLECVuyZAlHAQAAAIgRBJsAAFly7NgxW716tesKF6xUChZ0r9VqKSOOHDliv/32m5111llplklJSbEDBw6ETQAAAAByL4JNAIAs2bdvnx0/ftzKly8fNl+vd+3alaFlDBgwwCpVqhQWsIo0cuRIS0hICE7qegcAAAAg9yLYBAA4LZ566imbMWOGzZ071yUXT8vAgQNt//79wWnHjh05up4AAAAAMqdwJssDAOCULVvWChUqZLt37w7bI3pdoUKFdPfSs88+64JN7733ntWtWzfdskWLFnUTAAAAgLyBlk0AgCwpUqSINWzYMCy5dyDZd9OmTdP83DPPPGPDhw+3hQsXWqNGjdj7AAAAQIyhZRMAIMv69etnXbt2dUGjJk2a2JgxY+zw4cNudDrp0qWLVa5c2eVdkqefftqGDBli06dPt8TExGBupzPPPNNNAAAAAPI+gk0AgCzr1KmT7d271wWQFDiqX7++a7EUSBq+fft2N0JdwIQJE9wodjfffHPYcpKTk23o0KEcCQAAACAGEGwCAJySXr16uSmapUuXhr3etm0bexsAAACIceRsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAAAAAPiGYBMAAAAAAAB8Q7AJAAAAAAAAviHYBAAAAAAAAN8QbAIAAACQbcaPH2+JiYkWFxdnSUlJtnLlynTLz5o1y2rUqOHK16lTxxYsWBD2/pw5c6x169ZWpkwZK1CggK1bt46jBwC5TOHTvQLAyVz30BsxvZPeHNX+dK8CAABAtpg5c6b169fPJk6c6AJNY8aMsTZt2tjmzZutXLlyqcovW7bMOnfubCNHjrRrr73Wpk+fbh06dLA1a9ZY7dq1XZnDhw9b8+bN7ZZbbrEePXpw5AAgFlo2ffTRR3bddddZpUqV3JOEefPmZc+aAQAAAMjTRo8e7QJC3bp1s1q1armgU/HixW3KlClRy48dO9batm1r/fv3t5o1a9rw4cOtQYMGNm7cuGCZO++804YMGWKtWrXKwS0BAGRrsElPEurVq+eawwIAAABANMeOHbPVq1eHBYUKFizoXi9fvjzqZzQ/MoikllBplQcAxEg3uquvvtpNAAAAAJCWffv22fHjx618+fJh8/V606ZNUT+za9euqOU1P6tSUlLcFHDgwAEOGgDk9QThurDrgh46AQAAAEBOUP6nhISE4FSlShV2PADk9WATF3cAAAAg/ylbtqwVKlTIdu/eHTZfrytUqBD1M5qfmfIZMXDgQNu/f39w2rFjR5aXBQDIJcEmLu4AAABA/lOkSBFr2LChLVmyJDjvxIkT7nXTpk2jfkbzQ8vL4sWL0yyfEUWLFrX4+PiwCQCQy3I2ZeXirgkAAABA/tKvXz/r2rWrNWrUyJo0aWJjxoxxAw5pdDrp0qWLVa5c2fWGkD59+liLFi1s1KhR1q5dO5sxY4atWrXKJk2aFFzmTz/9ZNu3b7cffvjBvd68ebP7v1o/nUoLKABAHgo2AQAAAMifOnXqZHv37rUhQ4a4JN/169e3hQsXBpOAK2ikEeoCmjVrZtOnT7fBgwfboEGDrFq1ajZv3jyrXbt2sMz8+fODwSq59dZb3f+Tk5Nt6NChObp9AACfgk2HDh2yLVu2BF9v3brV1q1bZ2eddZade+65mV0cAAAAgBjWq1cvN0WzdOnSVPM6duzoprTcddddbgIAxFCwSc1YW7ZsGdY0VtQ8durUqf6uHQAAAAAAAGI72HTFFVeY53nZszYAAAAAAADI07J9NDoAAAAAAADkHwSbAAAAAAAA4BuCTQAAAAAAAPANwSYAAAAAAAD4hmATAAAAAAAAfEOwCQAAAAAAAL4h2AQAAAAAAADfEGwCAAAAAACAbwg2AQAAAAAAwDcEmwAAAAAAAOAbgk0AAAAAAADwDcEmAAAAAAAA+IZgEwAAAAAAAHxDsAkAAAAAAAC+IdgEAAAAAAAA3xBsAgAAAAAAgG8INgEAAAAAAMA3BJsAAAAAAADgG4JNAAAAAAAA8A3BJgAAAAAAAPiGYBMAAAAAAAB8Q7AJAAAAAAAAviHYBAAAAAAAAN8QbAIAAAAAAIBvCDYBAAAAAADANwSbAAAAAAAAcHqDTePHj7fExESLi4uzpKQkW7lypX9rBADIUzJbJ8yaNctq1KjhytepU8cWLFiQY+sKAMj79YTneTZkyBCrWLGiFStWzFq1amVfffVVNm8FACBbg00zZ860fv36WXJysq1Zs8bq1atnbdq0sT179mR2UQCAPC6zdcKyZcusc+fO1r17d1u7dq116NDBTRs2bMjxdQcA5M164plnnrG//e1vNnHiRPvkk0+sRIkSbplHjx7lkAJAXg02jR492nr06GHdunWzWrVquYt88eLFbcqUKdmzhgCAXCuzdcLYsWOtbdu21r9/f6tZs6YNHz7cGjRoYOPGjcvxdQcA5L16Qq2axowZY4MHD7b27dtb3bp1bdq0afbDDz/YvHnzOKQAkEsUzkzhY8eO2erVq23gwIHBeQULFnRNV5cvXx71MykpKW4K2L9/v/v/gQMHLKf8lnLEYllO7svTgeMHhP/W9Q/t3CArdYLm6wl3KD2NTu8GgXok+1GP5G0cv7wtJ49fTtcj2VFPbN261Xbt2uWWEZCQkOC65+mzt956a6plUo9kP65DeRvHL287kEvrkUwFm/bt22fHjx+38uXLh83X602bNkX9zMiRI23YsGGp5lepUiUzX410JIxn9+RlHD9k1sGDB90/rE+3rNQJukGIVl7z00I9kv24DuVtHL+87XQcv5yqR7Kjngj8PzN1CfVI9uM6lLdx/PK2hFxaj2Qq2JQVepIR+nTixIkT9tNPP1mZMmWsQIECFmsU6VMgbceOHRYfH3+6VweZxPHL22L9+OkJgi7slSpVsvyEegR5Saxfh2JdrB8/6pH/w/0IcrNYvw7Fulg/fl4m7kcyFWwqW7asFSpUyHbv3h02X68rVKgQ9TNFixZ1U6hSpUpZrNOJFYsnV37B8cvbYvn45YYWTadSJ2h+ZsoL9Qjyoli+DuUHsXz8crIeyY56IvB/zdNodKFl6tevH3WZ1CPIi2L5OpQfxMfw8ctoPZKpBOFFihSxhg0b2pIlS8KeDOh106ZNM7+WAIA8Kyt1guaHlpfFixdThwBADMqOeuK8885zAafQMmpJoFHpuB8BgNwj093o1CWua9eu1qhRI2vSpIkbDeLw4cNuhAkAQP5ysjqhS5cuVrlyZZcvQ/r06WMtWrSwUaNGWbt27WzGjBm2atUqmzRp0mneEgBAXqgnlIajb9++9sQTT1i1atVc8Omxxx5zXTo6dOjAQQSAvBps6tSpk+3du9eGDBnikvCpuerChQtTJenLr9RMNzk5OVXXQeQNHL+8jeOX805WJ2zfvt2NPBTQrFkzmz59uhuyetCgQe5GQSMM1a5d+zSsfe7EeZy3cfzyNo5f3qgnHnnkERewuvfee+2XX36x5s2bu2XGxcVlwxbkPZzHeRvHL2/j+P1PAS+3jKENAAAAAACAPC9TOZsAAAAAAACA9BBsAgAAAAAAgG8INgEAAAAAAMA3BJsQsxITE92IJ+nRiCZKOumnu+66K1+MhrJt2za3/9atW5fj351b9/HQoUNd4lMAsYF6JHtRj6RGPQLEHuqS7EM9ksvrES+PW7ZsmVewYEHvmmuuyfRnk5OTvXr16mXpe1NSUrynn37aq1u3rlesWDGvTJkyXrNmzbwpU6Z4x44dy9IykTUvvfSSl5CQkGp+1apVveeeey7dz+7cudM7evSor7v+l19+8X7++WcvN+vatavXvn37sHmzZs3yihYt6j377LPufV0eAtNZZ53ltWnTxvvss8+C5X///Xe3/3777Tdf1umDDz4Ifl+BAgW8+Ph4r379+l7//v29H374IdftY63n3Llzw+YdPHjQ27dv32lbJ2QddUn+Rj2SedQjp456JLZQj4C6JHOoR2K/HsnzLZtefPFF6927t3300Uf2ww8/5Mh3Hjt2zNq0aWNPPfWUG3J12bJltnLlSuvZs6f9/e9/ty+++CLLy/7tt98su9YZqVWoUMENT+mnhIQEK1WqVJ7a3S+88ILdfvvtNmHCBHvooYfcvLZt29rOnTvdtGTJEitcuLBde+21wc8UKlTI7T/N99PmzZvdb/nTTz+1AQMG2HvvveeGO/78889zZB+fym/wzDPPtDJlylh24XecfahLOAezinrk/1CP/A/1SP5EPZIx/FsmOuoS6pGYrEe8PExRuzPPPNPbtGmT16lTJ+/JJ59MN7KsqF9gk/V+aMsNTZon3377rXf99dd7JUqU8EqWLOl17NjR27VrV3A5atGk1lRr1qxJtU5q1XTo0CH39zvvvONdeumlbj3UMqRdu3beli1bgmW3bt3qvnfGjBne5Zdf7lqVjB071ouLi/MWLFgQttw5c+a4bT18+LB7vX37drdeWnbp0qXd+mp5kZHiJ554wqtYsaKXmJjo5VZqWdS7d2/v7LPPdvtA+2zlypVhrV3eeustr06dOu79pKQk7/PPPw97P3RSi7VAy6bHH3/cu/XWW73ixYt7lSpV8saNG5dmNDhwPF5//XXviiuucC3W1HJNT6oiz6uFCxd6NWrUcOeIWvyEtryJjNK3aNHCbZ9a6OhYlS9fPriOARs3bnTbre2rWbOmt3jx4qiRar+ErqPOZ51zOsfS2gb5+OOP3Trt2bMnbH+tXbs27Fi89957XsOGDd3+a9q0qft9Bqxbt87tW53L+m01aNDA+/TTT8M+H9li6ciRI1716tXd/klr/dQqq3bt2m479Fu76qqrgr9DefHFF71atWp5RYoU8SpUqOD17Nkz+J6+8x//+Id33XXXufMkcGzmzZvn/eEPf3DH5LzzzvOGDh0abMWlcyv0nNPraK0lI8/N0LKi87ht27buPCpXrpx3xx13eHv37g07d7Suffr0ca0nte/gP+qSvF+XUI9Qjwj1CPXI6UI9kvfrEaEuydm6hPuRnjF/P5Kng026gWzUqJH7+8033/QuuOAC78SJExkKNukG9qGHHvIuvvhi1xVIk+YdP37cdd1p3ry5t2rVKm/FihXuxlk7OUABiNatW590/WbPnu0CF1999ZW7IdfJo4CJviP0Zl0XXZX75ptvXNDi5ptvdgc51E033RScp4CWfvx33323t379eu+///2vd9ttt7kbcnXvC/x4dUN/5513ehs2bHBTbvXAAw+4QJACbF988YVbd1VWP/74Y/Afjtred999123vtdde6/aZ9oO2d8yYMa7LVeA4qsIX/YgU0Bg5cqS3efNm729/+5tXqFAht5z0gk0KIim4pc/oWGg5gR+1zqszzjjDa9WqlQuSrF692q2b9n96wSatny4OX375pffyyy+7bmKB9VB3NB27P/7xjy4Yo6BOkyZNciTY9Mgjj7jzRAGiaO8HaJ/+6U9/8i688MJU529ksEnBwKVLl7pjedlll7nupQH6vek8VkWmffHaa6+5bQ79fLTuceoOqfd2796dav30mylcuLA3evRot046R8aPHx88D3ThVhBK54mOqQKZod0rtVxdWNUF9uuvv3bB5o8++sgds6lTp7p5OlY653QMRQG3QIBa51wgABd5cQ+ck5oUaNb+029StJ0KsA4cONDtDwWvdQ60bNky7NzR8VGgUkG70MAd/ENdkvfrEuoR6hGhHqEeOV2oR/J+PSLUJTlbl3A/8lzM34/k6WCTbmJ1AykKBpQtW9b9QyMjwaa0cjbpICogoZZDAbpp1ucCrW3UYkMXo8xShFDLCbTKCdysB7YhdD1DWzHt37/f3SyrpZT885//dBeCQGBNdEHXei1atCj441ULmsCFPrdS6xMFb1555ZXgPAWRFHx65plngv9wVOuvAAWhtK0zZ848af9oRWlDqQXc1VdfnW6w6YUXXkh1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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_bars(binary_results, ['fit_s', 'test_auc', 'auc_drop'], 'German Credit \\u2014 binary classification')"
]
},
{
"cell_type": "markdown",
"id": "afa44e90",
"metadata": {},
"source": [
"Here, **AutoCarver** has dropped 6 columns that were not stable on dev set."
]
},
{
"cell_type": "markdown",
"id": "regression-md",
"metadata": {},
"source": [
"## Regression — California Housing\n",
"\n",
"6 numeric demographic features (Latitude / Longitude dropped — see comment in the next cell), 20,640 rows, target = median house value. Same 60 / 20 / 20 split."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "load-regression",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"train=12384, dev=4128, test=4128\n",
"quantitatives=8 (['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n"
]
}
],
"source": [
"housing = fetch_california_housing(as_frame=True)\n",
"X_reg = housing.frame.drop(columns=['MedHouseVal'])\n",
"y_reg = housing.frame['MedHouseVal']\n",
"\n",
"X_train, X_rest, y_train, y_rest = train_test_split(X_reg, y_reg, test_size=0.4, random_state=SEED)\n",
"X_dev, X_test, y_dev, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=SEED)\n",
"\n",
"quantitatives = list(X_reg.columns)\n",
"categoricals = []\n",
"\n",
"print(f'train={len(X_train)}, dev={len(X_dev)}, test={len(X_test)}')\n",
"print(f'quantitatives={len(quantitatives)} ({quantitatives})')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "adebc1c4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"------\n",
"--- [QuantitativeDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
" - [ContinuousDiscretizer] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
" - [OrdinalDiscretizer] Fit Features(['HouseAge'])\n",
"------\n",
"\n",
"---------\n",
"------ [ContinuousCarver] Fit Features(['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude'])\n",
"--- [ContinuousCarver] Fit Quantitative('MedInc') (1/8)\n",
" [ContinuousCarver] Raw distribution\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 27184.56it/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:00, 33725.96it/s]\n",
"Testing robustness : 1%| | 310/31930 [00:00<00:54, 584.35it/s] "
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 28430.03it/s]\n",
"Testing robustness : 0%| | 227/92170 [00:00<03:45, 407.92it/s] "
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 26708.78it/s]\n",
"Testing robustness : 2%|▏ | 1722/92170 [00:02<02:08, 706.46it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 26163.59it/s]\n",
"Testing robustness : 1%| | 753/92170 [00:00<01:43, 885.21it/s] "
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 26604.88it/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, 27314.34it/s]\n",
"Testing robustness : 0%| | 1/92170 [00:00<12:41:40, 2.02it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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, 27465.39it/s]\n",
"Testing robustness : 0%| | 1/92170 [00:00<4:52:24, 5.25it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
" [ContinuousCarver] Carved distribution\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
" 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",
" 33.499 | \n",
" 0.0577 | \n",
" 0.6633 | \n",
" 0.6566 | \n",
" 0.0067 | \n",
"
\n",
" \n",
" | 1 | \n",
" optbinning | \n",
" 2.548 | \n",
" 0.0086 | \n",
" 0.5145 | \n",
" 0.5077 | \n",
" 0.0068 | \n",
"
\n",
" \n",
" | 2 | \n",
" KBinsDiscretizer | \n",
" 0.007 | \n",
" 0.0015 | \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 33.499 0.0577 0.6633 0.6566 0.0067\n",
"1 optbinning 2.548 0.0086 0.5145 0.5077 0.0068\n",
"2 KBinsDiscretizer 0.007 0.0015 0.6181 0.6192 -0.0011"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_full = pd.concat([y_train, y_dev])\n",
"\n",
"runs = [(\n",
" 'AutoCarver',\n",
" lambda: bin_with_autocarver(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n",
")]\n",
"if HAS_OPTBINNING:\n",
" runs.append((\n",
" 'optbinning',\n",
" lambda: bin_with_optbinning(X_train, y_train, X_dev, y_dev, X_test, categoricals, quantitatives, 'continuous'),\n",
" ))\n",
"runs.append((\n",
" 'KBinsDiscretizer',\n",
" lambda: bin_with_kbins(X_train, X_dev, X_test, categoricals, quantitatives),\n",
"))\n",
"\n",
"rows = []\n",
"for name, run in runs:\n",
" X_tr, X_te, fit_t, transform_t = run()\n",
" scores = fit_eval_regression(X_tr, X_te, y_train_full, y_test)\n",
" rows.append({\n",
" 'library': name,\n",
" 'fit_s': round(fit_t, 3),\n",
" 'transform_s': round(transform_t, 4),\n",
" 'train_r2': round(scores['train_r2'], 4),\n",
" 'test_r2': round(scores['test_r2'], 4),\n",
" 'r2_drop': round(scores['train_r2'] - scores['test_r2'], 4),\n",
" })\n",
"\n",
"regression_results = pd.DataFrame(rows)\n",
"regression_results"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "f0e3640f",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAAFcCAYAAACJC3TyAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVq5JREFUeJzt3QmcTfX/+PH3oDG2sWaXsS9ZpogsWYrGkkxJlmrwFS2IFEXMWFO2rFGyRHxJoZLImsqWNQohouyVfef8H+/P73/u996ZO2NmzJnl3tfz8TiNe+7nnv3eT+d9Pp/3J8CyLEsAAAAAAACAJJYuqRcIAAAAAAAAEHgCAAAAAACAY2jxBAAAAAAAAEcQeAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQCAVKJevXpmsh06dEgCAgJkxowZHuWWLl0qoaGhEhQUZN4/c+ZMsm6nbo+uV7fPnwwYMMDsN9K2NWvWmPOofwEAgPMIPAEAkEgHDhyQF154QYoXL26CQMHBwVKrVi0ZO3asXL582ZHj+vfff8vTTz8tmTJlkokTJ8qsWbMkS5YskpbZgazNmzd7fV+DcRUqVEj27QIAAMCdy5AEywAAwO98/fXX0rJlS8mYMaNERESYwMi1a9fkhx9+kF69eskvv/wiH3744R2to2jRoiaAddddd7nm/fTTT3L+/HkZPHiwNGjQQFLCc889J61btzb77k/69esnb775ZkpvBu5QnTp1zPcqMDCQYwkAQDIg8AQAQAIdPHjQBF40MLRq1SopUKCA670uXbrI/v37TWDqTmkrIG1J5e7kyZPmb44cOZLsvF28eDFBrabSp09vJn+TIUMGM/kyy7LkypUrpkVdckjotZcU0qVLF+N7BQAAnENXOwAAEmj48OFy4cIFmTp1qkfQyVayZEnp3r276/X06dPl4Ycflrx585pWQuXLl5dJkybddj3Rczxpl7N27dqZfz/wwAPmvfbt27vKz58/X6pUqWKCBnny5JFnn31W/vrrL49lavmsWbOaboJNmjSRbNmyyTPPPGPe0+V17dpVFi1aZFpw6bbee++9JqfU7XI8ffHFF9K0aVMpWLCg+VyJEiVMq6ybN2+KE27cuGGWr+vR9YWEhEjfvn3l6tWrHuV0OzU3U3Ra3v3YXb9+XQYOHCilSpUyQYncuXNL7dq1Zfny5XHmeIrvMVOaU6hq1apm+brdH3zwQYrnjdLj8Nhjj8myZcvMtum1o9ulNHdYjx49pEiRIma/9Lp+99135datWzG6f2orOO1qqgFRvUZ37NgRIz9ZXNeeLnPMmDHm2OnxyZcvn+nG+u+//3qsS7tjhoWFmetbt7VYsWLyn//8x6PM3LlzzfdAl6/bVLFiRdP99XY5nhLy/dH54eHh5t933323vP76645d6wAApHW+/dgOAAAHfPXVVyavU82aNeNVXoNMekP9+OOPmxYz+vmXX37Z3GxrC6n4euutt6RMmTKmC9+gQYPMTbcGMJTe4Hfo0MEEpIYNGyYnTpwwN9s//vijbNu2zaOFlAZt9OZdAysjR46UzJkzu97TroILFiww26c37uPGjZMWLVrI4cOHTTAmNrp+vQnv2bOn+astwSIjI+XcuXMyYsSIeO3f2bNn5fTp0zHma1Aouueff14+/vhjeeqpp+S1116TjRs3mv3evXu3LFy4UBJKA0D6eV1utWrVzHZrkGPr1q3SsGHDOD8bn2Om56BRo0YmUKkBLg1S6DnUoEVK27t3r7Rp08YEejp16mSusUuXLkndunVNgEXn33PPPbJu3Trp06ePHDt2zASJlF7DzZo1k02bNslLL70kZcuWNUFIO0AaXWzXnq7DvoZfeeUV06pwwoQJ5rjpNazdTbW136OPPmqOmXZ51Gtag5967G0aKNR9eeSRR0yQTOk1octwDwZHl5Dvj5473Yfq1aubfVixYoWMGjXKfBf1GAAAgGgsAAAQb2fPnrW0+mzevHm8P3Pp0qUY88LCwqzixYt7zKtbt66ZbAcPHjTrmj59umue/lvn/fTTT655165ds/LmzWtVqFDBunz5smv+4sWLTdnIyEjXvHbt2pl5b775Zoxt0vmBgYHW/v37XfN27Nhh5o8fPz7GNuj2xbWPL7zwgpU5c2brypUrcR4fe3lxTffee6+r/Pbt2828559/3mM5r7/+upm/atUqj32KioqKsc6iRYuaY2GrXLmy1bRp0zi3U5cT/X+d4nvMmjVrZo7FX3/95Zq3b98+K0OGDDGWmZz0OOj6ly5d6jF/8ODBVpYsWazffvvNY75eN+nTp7cOHz5sXn/++efm82PGjHGVuXnzpvXwww/HuHZju/a+//57M3/27Nke83Wb3OcvXLgwxrUfXffu3a3g4GDrxo0bsZZZvXq1WY7+Tez3Z9CgQR7LvO+++6wqVarEuk4AAPwZXe0AAEgAbQmjtGVLfLnny7Fb9Whrkt9//928vlPaMkdbg2iLG/fcNdr1TVugeMs3FVvLDE1YbreiUpUqVTLdlXRb47uPmvxc9/Ghhx4yLWf27NkTr/3QUfq0xUr0SbfB3ZIlS8xfbV3lTls+qcTk19IWLZoQft++fQn+7O2OmbaQ0VYx2jVLuyLatOta48aNJaVpyzltwRO925mev5w5c5pzaU+6r7o/a9euNeW0S6G2RtKWUu45lOJqyRf92tN1Zc+e3bQsc1+XdnvT1nOrV6825exWR4sXL/baCs4uo3mj3LtIOvH9efHFFz1e67G63XcEAAB/RVc7AAASQAMKdnAlvrS7TlRUlKxfv94EYtxp4Elvuu/EH3/8Yf5qF6no9MZZu4K50+5+hQsX9ros7VIVnQYfoufaiU6DNjrqm3axs4NztvgG17SLm+YZ8rZ+9y54ur8a3NDAjbv8+fObwIN9PBJCu701b95cSpcubXI1abc4zVsUPeiVmGOmQQ0dRS369ipv86LTfGI6JYYGbnS6XeApOg3A/fzzz7F2BbST3Oux1u6D7t0149ovb9eerkuvEc2BFte6NFirXRi1q+J7771ncp5pMK9t27auERY1ePTpp5+agF6hQoVM17ynn37anM+k+v5ocCr6cYnPdwQAAH9F4AkAgAQGnrTVyq5du+JVXhMpa74ZvYEdPXq0SdSsw7hrqx29eY6eqDk56E26Bm68iW20uv/rVeadJqHWoIAeGw3gaOsfvTnX/EhvvPGGY/t4J0m5oyeCrlOnjjlXmp/o22+/lY8++sicn8mTJ5u8T3FJzDFLCM0jpMGWxNCAp7fk6u68jWCn50xbIPXu3dvrZzRAl1TXnq5Lg06zZ8/2+hk7yKPn+7PPPpMNGzaYPGmaEF0Ti2t+JZ2nATZdzvbt281733zzjZk0uX9ERITJCZYU/HFERwAA7gSBJwAAEkhHAdME39qCqUaNGnGW1RtkHWntyy+/9GgZY3cfSgpFixZ1JYnW0fPc6Tz7fafo6GA6spkmedYAjk0TRDtB90eDFdpSply5cq75mhBag2Du+6stUXSeu2vXrpkE2dHlypXLJJjWSVsY6b5o0OZ2gafb0WCIBuL2798f4z1v86LToIkm404MTYKfGBo81GOgXeviosdar2Vtyefe6ik+++W+Lu2KWKtWLa9BsOgefPBBMw0dOlTmzJljRsbTkezs86SBXU14rpNeJ9oKSkfq69+/v9eWWCn9/QEAwNeR4wkAgATSViBZsmQxN7oa7IhOW87Yw7fbrSPcW79otyJthZFUtHuaBje0dY4GuWza2kNH9NJcNU7yto8a3Hn//fcdWV+TJk3MX3tkNZu2KFPu+6tBDTsfkU2DhtFbPGngzJ22ntEghfvxvJPjowGcRYsWydGjRz2CM3qO4hM80s8nZkps4Em7p2lgVVsORaeBPB2dTmluKM23NGXKFNf7GuzRfF0JWZeej8GDB8d4T9djBw61K1v0VmShoaHmr32eop9HbV1ld5eM7Vym9PcHAABfR4snAAASSIMZ2tKiVatWpsWNtkjRvEAabNEh5zVZcvv27U1ZzTFjt8DQIeO1FYnepOuNrrdWN4mhyZ116HhtqaNd3nQ4eXs4+JCQEHn11VcdPcc1a9Y0LYvatWsnr7zyiukSNWvWrCTrahZd5cqVzbo0gGR389u0aZPpSqU5f+rXr+8qq8FBTQStuYG069iOHTtMMCVPnjweyyxfvrzJGaQJrbXlkyac1m5dXbt2TZJt1pZT2oVPW/Vocm0NtEyYMMFcN9o1LLXp1auXaaWnrfv0Wtbjokm7d+7caY7LoUOHzDHU4625uTSxuwbStEupfu6ff/6Jd3dIPX/63Rg2bJg5Fvqd0WtaW7Tpd0mv46eeesqcXw1mPvHEE+Y7qHnW9LukXTztYKSeb123tlzSXFKav2n8+PEmQOXeOi41fX8AAPB1BJ4AAEiExx9/3CRfHjFihMkLNGnSJJO/RltXaM4Ze5QvTVisN+qaePv11183CbA18KB5azQ/TVLR4IB2dXrnnXdMXiVtkaU36HpDbY8G5pTcuXObkcY0+KD7qUGoZ5991uS2ij5aWlLRHEzammfGjBmycOFCc1z79Oljchq50/OgXf6mTp1qRmDT0cd0xDPdNncaMNOAiQaHtNWLdq8aMmSICcAkBQ3caAsavQa0y5fm+tJ8WNqiJr6j/iUnvZa+++47efvtt03wZ+bMmSbAo7mdNN+UnRBfW3PpqG/du3c3gSFtYaTXnZ4HDbK5jxIXF21tpMdIu8T17dvXJCHXoI9eR7ocZQcYtVudBoZ0GzTopbmh7ATpWl4Dkhqg0qCkXhcaINbAX2x5zVL6+wMAgK8LsJx6HAkAAIA4aYshHRFQW/f4Eu1WqIEbHRHODhwBAAD/RI4nAACAZHD58mWP1xps0tENtYufL+2XdiPU7m3aQur+++9Pse0CAACpA13tAAAAkoF2DdQuXfpXcw9p90zN/6XJ6tOybt26meCTjvCo3RR1dEPNdabd9OIzSh0AAPBtdLUDAABIBpq8evXq1XL8+HGTD0wDNRqcSeutgjTRvuY10+TiV65cMaMBah6zpErMDgAA0jYCTwAAAAAAAHAEOZ4AAAAAAADgCAJPAAAAAAAAcASBJwAAAAAAADiCwBMAAAAAAAAcQeAJAAAAAAAAjiDwBAAAAAAAAEcQeAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQAAAAAAAI4g8AQAAAAAAABHEHgCAAAAAACAIwg8AQAAAAAAwBEEngAAAAAAAOAIAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4gk/66aefpGbNmpIlSxYJCAiQ8PBw8xcAAAAA0rr27dtLSEhISm8GEC8EnuBzrl+/Li1btpR//vlH3nvvPZk1a5YULVo0Rrm3335bFi1alCLbCABIWevWrZMBAwbImTNnHFuHE/XMkSNHZODAgVKtWjXJmTOn5MmTR+rVqycrVqxI0vUAABJv5cqV8p///EdKly4tmTNnluLFi8vzzz8vx44d47DCLwVYlmWl9EYASWnPnj1Srlw5mTJlivmBVzdu3DBTUFCQq1zWrFnlqaeekhkzZnACAMDPjBw5Unr16iUHDx507ImxE/XMhAkTpHfv3qYlb61atUzdNnPmTNm6datMmzZNOnTokGTrAgAkTtWqVc1DcH0YXqpUKfn999/N77cGobZv3y758+dPkhZPa9askUOHDnGakOplSOkNAJLayZMnzd8cOXK45mXIkMFMAACkRRpgunXrltSvX18OHz5sWjrZXnzxRQkNDZXIyEgCTwCQwi5evCijR4+W2rVrS7p0/+tg1KhRI6lbt64JQA0ZMiRZ647AwMBkWR8QG7rawado5F9/0JU+YdC8TtoFQbtTuOd40n9rpfDxxx+bf+ukn42vuXPnSpUqVSRbtmwSHBwsFStWlLFjxzqyTwCApKV1grZ2UsWKFXPVA/ZT408++cT8xmfKlEly5colrVu3Nl3c3O3bt09atGhhnlpra9rChQubcmfPnr3jeka3Q8trq6wxY8ZIiRIlJGPGjPLrr7/Kvffe6xF0UvpekyZN5M8//5Tz588n0VECANyOfY+hv89t27Y1XaA14FSnTh2PoJPSeVqn7N69O8EHVrttV6hQwdQ3+nfhwoUJqjvUqlWr5KGHHjI5cPUBffPmzWNsi70/2oPk6aefNvc5uXPnlu7du8uVK1e4IJBoNAGBT3nhhRekUKFCJq/GK6+8Ig888IDky5dPfvzxR49ymvdJu+FpjozOnTubefrjHB/Lly+XNm3ayCOPPCLvvvuumac/2roO/VEGAKRuTz75pPz222/y3//+1+QCtAM5d999twwdOlT69+9v/odb64lTp07J+PHjzQ3Dtm3bzP+sX7t2TcLCwuTq1avSrVs3E3z666+/ZPHixSZnVPbs2e+onrFNnz7d/I++fl5vHvSGJTbHjx83XTh0AgAkL7tLnd6DxJbJ5sKFC2aK/vDgdr799lvzoKN8+fIybNgw+fvvv03rVn3gEd+6Q/MANm7c2OSa0uDS5cuXTd2mXba1q3b0LudaB+o8Xd+GDRtk3Lhx8u+//5qu3UCiaI4nwJesXr1af+2t+fPnu+ZFRUWZee6yZMlitWvXLsHL7969uxUcHGzduHEjSbYXAJD8RowYYeqFgwcPuuYdOnTISp8+vTV06FCPsjt37rQyZMjgmr9t27YY9Yw3ia1ndJt0+VrXnDx58rbl9+3bZwUFBVnPPfdcgtcFAEg8+x6jTZs2ty07ePBgU3blypUJWkdoaKhVoEAB68yZM6553377rVlW0aJF41V36DLy5s1r/f333655O3bssNKlS2dFRETE2J/HH3/c4/Mvv/yyma+fARKDrnZAAunTbu0+oS2fAAC+Y8GCBSYXhj7pPX36tGvSFk36JHv16tWmnLZoUsuWLZNLly45tj36hFtbYcVF169P2rVb4DvvvOPYtgAAYqe59uKydu1aMyKp1i8PP/xwvA+ljoKnycjbtWvnqntUw4YNTQuo+NQd9jK0u7d7y9lKlSqZ5SxZsiTGMrp06eLxWlv3Km9lgfgg8AQk0Msvv2yGRtXmqtrEVYdKXbp0KccRANI4zdukXSQ0yKT/0+4+aZdqe/AKzQvVs2dP+eijj0yXCe12N3HiRFd+p6Si64nLzZs3TV4pzd/x2WefScGCBZN0/QCAO/+91nxJTzzxhMnNpPVGQvzxxx/mr9ZL0ZUpUyZe22Ivw1t5HQlcH7DoQ3V30denXcU1ZxUj6CGxyPEEJFDevHnNUwN90v3NN9+YSftSR0REmCSyAIC0SVs7aVJV/V1Pnz59jPezZs3q+veoUaPM0+MvvvjC5N/QvIJ2LozY8m4klLZiikunTp1MXqnZs2cn6Ak6ACBpxfZ7rQNTPProo6a1krYW0oGJnHa7uiMx3AdpAhKDwBP81p38gOqQpM2aNTOT3qhoK6gPPvjAJKQtWbJkkm4nACB56gB9oqstnvRpsbZsvR0d0VSnfv36ybp160yS1smTJ7uGyXbyf9R1VD596KEjF+mAFwCA1EWTgGvQSQeiWLlypRQoUCDByyhatKirRW50e/fuTdAyvJXX1ljacldHunOn63NvObV//35zzxM9CTkQX3S1g9/SH1gdfSgxlYg7bXaqfaSVViwAgNTP/p9s93pAR7vTlk6ahyP6qET62v79P3funNy4ccPjfQ1AaX3gXg8ktp65nREjRpjhsvv27ctoqgCQCmnXtSZNmpgRT7Wlk7eucvGhwarQ0FDTq8K9O7fmmtVu1gldhnudtGvXLtNiV7czOu0+7k5HwFOaagRIDFo8wW9VqVLFDC06evRokxdDo/rVq1e/7ed0eOx//vnHdGvQ7hTab1p/jPUHXftJAwDSRh2g3nrrLZMn6a677jKtWLW1Up8+fUwei/DwcNMt4uDBg7Jw4UIzNPXrr78uq1atkq5du5qk3toySoNQs2bNMkErTep6p/VMXHQ7evfubW5itM755JNPPN7XRLH58uW7o3UAAO7MM888I5s2bTK5YDVHoE7u3ba1fokv7cbdtGlTqV27tlme3ofovce9994rFy5ciPcDCw0a1ahRQzp27CiXL182y9AugAMGDIhRXuu9xx9/XBo1aiTr1683dU3btm2lcuXK8d5uwEOixsIDUrHVq1fHGObaHhrU3Z49e6w6depYmTJlMu/Fd8jrzz77zHr00UfNkKSBgYHWPffcY73wwgvWsWPHknxfAADO0aGtCxUqZIaT1npAh6JWn3/+uVW7dm0rS5YsZipbtqzVpUsXa+/eveb933//3frPf/5jlShRwgoKCrJy5cpl1a9f31qxYkWS1DP2kNgjRoyI8Z5dn8U2aR0IAEge9m/yqVOnPOYXLVo01t9pfS+htF4qV66clTFjRqt8+fLWggULTJ3ivqy46g6ldVStWrVMnRQcHGw1a9bM+vXXX73uj85/6qmnrGzZslk5c+a0unbtal2+fDnB2w3YAvQ/nqEoAAAAAADgT7T1k3Y3P3XqlMn9BCQVcjwBAAAAAADAEeR4Av6/mzdvmuh+XLRPtvtw2gAAxBf1DADApsnCNddSXPLnz88Bg08g8AT8f0eOHPEYNtSbqKgorwn4AAC4HeoZAICte/fuZqS5uJAVB76CHE/A/3flyhX54Ycf4jwexYsXNxMAAAlFPQMAsP36669y9OjROA9IgwYNOGDwv8DTpEmTzKRDDCsdwjEyMtIMzajq1asn3333ncdnXnjhBZk8eXJSbzcAAAAAAAB8KfD01VdfSfr06aVUqVKm2Z82DRwxYoRs27bNBKE08FS6dGkZNGiQ6zOZM2eW4OBgp7YfAAAAAAAAvpDjqVmzZh6vhw4dalpAbdiwwQSe7EDTnSRBu3XrlmlymC1bNgkICEj0cgAgrdGA/vnz56VgwYKSLh2DjiYl6hYA/oh6xTnUKwD8kZXI+5UMdzIyy/z58+XixYtSo0YN1/zZs2fLJ598YoJPGqjq37+/CUbFlwadihQpktjNAgCfSEBcuHDhlN4Mn0LdAsCfUa8kPeoVAP7sSALvVxIceNq5c6cJNGmCTB1WfuHChVK+fHnzXtu2baVo0aIm+vXzzz/LG2+8IXv37pUFCxbEuryrV6+ayWb3/NMdoYseAH9y7tw5E3jXFp9IWvYxpW4B4E+oV5xDvQLAH51L5P1KggNPZcqUke3bt8vZs2fls88+k3bt2pmE4hp86ty5s6tcxYoVpUCBAvLII4/IgQMHpESJEl6XN2zYMBk4cGCM+Rp0IvAEwB/Rzdi5Y0rdAsAfUa84d0ypVwD4o4AEpkVKcBKRwMBAKVmypFSpUsUEjSpXrixjx471WrZ69erm7/79+2NdXp8+fUwQy570aTQAAAAAAADSvkTneHJPrOfeVc6dtoxS2vIpNhkzZjQTAAAAAAAA/DjwpK2TGjduLPfcc4/JZD5nzhxZs2aNLFu2zHSn09dNmjSR3LlzmxxPr776qtSpU0cqVark3B4AAAAAAAAg7QeeTp48KREREXLs2DHJnj27CShp0Klhw4ami9yKFStkzJgxZqQ7TTjVokUL6devn3NbDwAAAAAAAN8IPE2dOjXW9zTQpEnGAQAAAAAAgEQlFwcAAAAAAADig8ATAAAAAAAAHEHgCQAAAAAAACmf4wkAAAAAAMTU7LUvfO6wfDWqeUpvAnyA3wee+HEAACQl6hUAAADgf+hqBwAAAAAAAEf4fYsnAAAAAEitfLElraILF+A/aPEEAAAAAAAARxB4AgAAAAAAgCMIPAEAAAAAAMARBJ4AAAAAAADgCAJPAAAAAAAAcASBJwAAAAAAADiCwBMAAAAAAAAcQeAJAAAAAAAAjiDwBAAAAAAAAAJPAAAAAAAASDsypPQGAAAAALFp9toXPndwvhrVPKU3AQCAZENXOwAAAAAAADiCwBMAINlNnDhRQkJCJCgoSKpXry6bNm2Ks/yZM2ekS5cuUqBAAcmYMaOULl1alixZkmzbCwAAACBx6GoHAEhW8+bNk549e8rkyZNN0GnMmDESFhYme/fulbx588Yof+3aNWnYsKF577PPPpNChQrJH3/8ITly5ODMAQAAAKkcLZ4AAMlq9OjR0qlTJ+nQoYOUL1/eBKAyZ84s06ZN81pe5//zzz+yaNEiqVWrlmkpVbduXalcuTJnDgD8rAXs/PnzpWzZsqZ8xYoVY7R+tSxLIiMjTQvZTJkySYMGDWTfvn0xlvP111+b9WmZnDlzSnh4eJLvGwDg/xB4AgAkG229tGXLFnMjYEuXLp15vX79eq+f+fLLL6VGjRqmq12+fPmkQoUK8vbbb8vNmzc5cwDgAy1go6KiZOvWreaBgraAPXnypNfy69atkzZt2kjHjh1l27ZtJlik065du1xlhg8fLuPGjTMPNTZu3ChZsmQxy7xy5YqrzOeffy7PPfeceQCyY8cO+fHHH6Vt27bJss8A4I8SFHiaNGmSVKpUSYKDg82kNwLffPON6339Qdcbg9y5c0vWrFmlRYsWcuLECSe2GwCQBp0+fdoEjDSA5E5fHz9+3Otnfv/9d9PFTj+nT7b79+8vo0aNkiFDhsS6nqtXr8q5c+c8JgBA2m4BO3bsWGnUqJH06tVLypUrJ4MHD5b7779fJkyY4GrtpN23+/XrJ82bNzf3LTNnzpSjR4+aVrPqxo0b0r17dxkxYoS8+OKLJmegrvvpp59O1n0HAH+SoMBT4cKF5Z133jFPqzdv3iwPP/yw+VH/5ZdfzPuvvvqqfPXVV6YJ7HfffWd+5J988kmnth0A4Adu3bpl8jt9+OGHUqVKFWnVqpW89dZb5gYlNsOGDZPs2bO7piJFiiTrNgMAkr4FrM53L6+0NZNd/uDBg+YhhnsZrQO0S51dRltW/fXXX2Zd9913n+mS17hxY49WU97wQAMAkinw1KxZM2nSpImUKlXKPB0YOnSoadm0YcMGOXv2rEydOtU8udCAlN4cTJ8+3TSJ1fcBAMiTJ4+kT58+RmtYfZ0/f36vB0hvCrTO0c/Z9Em33lzojYs3ffr0MfWSPR05coSDDwBpvAWszo+rvP03rjLailYNGDDAtIxavHixyfFUr149k08wNjzQAIAUyPGkFcXcuXPl4sWLpsudPrG4fv26xxMGTfx3zz33xPrUAgDgXwIDA82DiZUrV3q0aNLXWpd4ownF9+/fb8rZfvvtNxOQ0uV5kzFjRle3cHsCAMCuS7TlrKYFsR+WBwQEmF4bseGBBgAkY+Bp586dppWT/k+99oteuHCh6RetTxH0BiD68NZxPbVQNFsFAP+iiWSnTJkiH3/8sezevVteeukl8xBDc3yoiIgI8z/4Nn1fn0JrTg4NOOlIRJpcXHMKAgD8pwWszo+rvP03rjL60ELp/YtN72uKFy8uhw8fjnV7eaABAMkYeCpTpoxs377djBKhNwPt2rWTX3/9NdEbQLNVAPAvmqNp5MiRZrjr0NBQU6csXbrU1TVC/8f/2LFjrvKan2nZsmXy008/mUSxr7zyiglCvfnmmym4FwCA5G4Bq/Pdy6vly5e7yhcrVswEmNzL6OASet9il9F1ahBp7969rjLaa+PQoUNStGhRTioAOCBDYiqJkiVLun649UZAR5jQGwnNtXHmzBmPVk9xPbVQ+lRbn367Vw4kgQUA39a1a1czebNmzZoY8/SGgXyBAOBb9B5AH2JXrVpVqlWrZkaki94CtlChQuZBtdKHDnXr1jUjmzZt2tSk/dABj3TwCaXd5Xr06GFGPdWctBqI0pFQCxYsKOHh4aaMdr3WXhtRUVHmnkODTTrCnWrZsmWKHQsA8GUJDjxFp08mtLucBqHuuusu84RB+0srfZKgT65je2qh9ImDTgAAAAD8hz64PnXqlGkBq6k5tBVs9BawOvqcrWbNmjJnzhyTFLxv374muLRo0SKpUKGCq0zv3r1N8Kpz587mgXjt2rXNMoOCglxlNNCUIUMGee655+Ty5ctm1LtVq1aZJOMAgBQOPGnrJB1uVBOGnz9/3vzw65Np7QKhQ5V27NjRPLnIlSuXeZrQrVs3E3R68MEHHdh0AAAAAP7UAlZbJcXVMklbPQ0aNMhMsdGH5drlWycAQCoLPJ08edI0edXcGxpo0lwbGnRq2LChef+9994zTyW0xZO2ggoLC5P333/fqW0HAAAAAACArwSepk6dGuf72oR14sSJZgIAAAAAAIB/S/CodgAAAAAAAEB8EHgCAAAAAACAIwg8AQAAAAAAwBEEngAAAAAAAOAIAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAAAAAAgCMIPAEAAAAAAMARBJ4AAAAAAADgCAJPAAAAAAAAcASBJwAAAAAAADiCwBMAAAAAAAAcQeAJAAAAAAAAjiDwBAAAAAAAAEcQeAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwCAZDdx4kQJCQmRoKAgqV69umzatCnWsjNmzJCAgACPST8HAAAAIPUj8AQASFbz5s2Tnj17SlRUlGzdulUqV64sYWFhcvLkyVg/ExwcLMeOHXNNf/zxR7JuMwAAAIDEyZDIzwEAkCijR4+WTp06SYcOHczryZMny9dffy3Tpk2TN9980+tntJVT/vz5OeJIUs1e+8LnjuhXo5qn9CYAAAB4oMUTACDZXLt2TbZs2SINGjT4X0WULp15vX79+lg/d+HCBSlatKgUKVJEmjdvLr/88ksybTEAAACAZAs8DRs2TB544AHJli2b5M2bV8LDw2Xv3r0eZerVqxcjF8eLL754RxsJAPANp0+flps3b0q+fPk85uvr48ePe/1MmTJlTGuoL774Qj755BO5deuW1KxZU/78889Y13P16lU5d+6cxwQAAAAglQeevvvuO+nSpYts2LBBli9fLtevX5dHH31ULl686FFOu1C45+IYPnx4Um83AMBP1KhRQyIiIiQ0NFTq1q0rCxYskLvvvls++OCDOB+UZM+e3TVpSykAAAAAqTzH09KlS2OMNKQtn7TbRJ06dVzzM2fOTC4OAEAMefLkkfTp08uJEyc85uvr+OZwuuuuu+S+++6T/fv3x1qmT58+JoG5TVs8EXwCAAAA0liOp7Nnz5q/uXLl8pg/e/Zsc3NRoUIF8z//ly5dinUZdIcAAP8RGBgoVapUkZUrV7rmadc5fa0tm+JDu+rt3LlTChQoEGuZjBkzmpHw3CcAAAAAaWhUO71R6NGjh9SqVcsEmGxt27Y1CWALFiwoP//8s7zxxhsmD5R2jYitO8TAgQMTuxkAgDRGWyK1a9dOqlatKtWqVZMxY8aYLtv2KHfara5QoUKmflCDBg2SBx98UEqWLClnzpyRESNGyB9//CHPP/98Cu8JAAAAAMcCT5rradeuXfLDDz94zO/cubPr3xUrVjRPpB955BE5cOCAlChRIsZy6A4BAP6lVatWcurUKYmMjDQJxTV3k3blthOOHz582Ix0Z/v3339N7kAtmzNnTtNiat26dVK+fPkU3AsAAAAAjgWeunbtKosXL5a1a9dK4cKF4yxbvXp181dzcXgLPGl3CJ0AAP5D6xGdvFmzZo3H6/fee89MAAAAAHw88GRZlnTr1k0WLlxobgyKFSt2289s377d/I0rFwcAAAAAAAD8PPCk3evmzJkjX3zxhWTLls10e1A6VHWmTJlMdzp9v0mTJpI7d26T4+nVV181I95VqlTJqX0AAAAAAABAWg88TZo0yfytV6+ex/zp06dL+/btzWhFK1ascCWK1aGrW7RoIf369UvarQYAAAAAAIDvdbWLiwaavvvuuzvdJgAAAAAAAPiA/w0bBAAAAAAAACQhAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAAAAAAgCMIPAEAAABIERMnTpSQkBAJCgqS6tWry6ZNm+IsP3/+fClbtqwpX7FiRVmyZInH+5ZlSWRkpBQoUEAyZcokDRo0kH379nld1tWrVyU0NFQCAgJk+/btSbpfAID/IfAEAAAAINnNmzdPevbsKVFRUbJ161apXLmyhIWFycmTJ72WX7dunbRp00Y6duwo27Ztk/DwcDPt2rXLVWb48OEybtw4mTx5smzcuFGyZMlilnnlypUYy+vdu7cULFjQ0X0EABB4AgAAAJACRo8eLZ06dZIOHTpI+fLlTbAoc+bMMm3aNK/lx44dK40aNZJevXpJuXLlZPDgwXL//ffLhAkTXK2dxowZI/369ZPmzZtLpUqVZObMmXL06FFZtGiRx7K++eYb+fbbb2XkyJHJsq8A4M9o8QQAAAAgWV27dk22bNliusLZ0qVLZ16vX7/e62d0vnt5pa2Z7PIHDx6U48ePe5TJnj276cLnvswTJ06YgNesWbNMoAsA4CwCTwAAAACS1enTp+XmzZuSL18+j/n6WoNH3uj8uMrbf+Mqo62i2rdvLy+++KJUrVo13tur+aDOnTvnMQEA4ofAEwAAAAC/MH78eDl//rz06dMnQZ8bNmyYaT1lT0WKFHFsGwHA1xB4AgAAAJCs8uTJI+nTpzfd3tzp6/z583v9jM6Pq7z9N64yq1atMt3uMmbMKBkyZJCSJUua+dr6qV27drFurwaqzp4965qOHDmSqP0GAH9E4AkAAABAsgoMDJQqVarIypUrXfNu3bplXteoUcPrZ3S+e3m1fPlyV/lixYqZAJN7Ge0Sp6Pb2WV0xLsdO3bI9u3bzbRkyRLXCHtDhw6NdXs1UBUcHOwxAQDiJ0M8ywEAAABAkunZs6dpZaStjapVq2ZGpLt48aIZ5U5FRERIoUKFTDc31b17d6lbt66MGjVKmjZtKnPnzpXNmzfLhx9+aN4PCAiQHj16yJAhQ6RUqVImENW/f38pWLCghIeHmzL33HOPxzZkzZrV/C1RooQULlyYswsADiDwBAAAACDZtWrVSk6dOiWRkZEm+XdoaKgsXbrUlRz88OHDZqQ7W82aNWXOnDnSr18/6du3rwkuLVq0SCpUqOAq07t3bxO86ty5s5w5c0Zq165tlhkUFMQZBoAUQuAJAAAAQIro2rWrmbxZs2ZNjHktW7Y0U2y01dOgQYPMFB8hISFmpDsAgHPI8QQAAAAAAABHEHgCAAAAAACAIwg8AQCS3cSJE033Bs25Ub16ddm0aVO8PqeJZLUbhZ0kFgAAAEDqRuAJAJCsdMhqHckoKipKtm7dKpUrV5awsDA5efJknJ87dOiQvP766/LQQw8l27YCAAAAuDMEngAAyWr06NHSqVMnM1x2+fLlZfLkyZI5c2aZNm1arJ+5efOmPPPMMzJw4EApXrx4sm4vAAAAgGQKPA0bNkweeOAByZYtm+TNm9d0ddi7d69HmStXrkiXLl0kd+7ckjVrVmnRooWcOHHiDjYRAOArrl27Jlu2bJEGDRq45ulQ2fp6/fr1sX5ORyfSeqdjx47xWs/Vq1fl3LlzHhMAAACAVB54+u6770xQacOGDbJ8+XK5fv26PProo3Lx4kVXmVdffVW++uormT9/vil/9OhRefLJJ53YdgBAGnP69GnTeilfvnwe8/X18ePHvX7mhx9+kKlTp8qUKVMS9KAke/bsrqlIkSJ3vO0AAAAAEi5DQgovXbrU4/WMGTPME2h9el2nTh05e/asuTmYM2eOPPzww6bM9OnTpVy5ciZY9eCDDyZiEwEA/ur8+fPy3HPPmaBTnjx54v25Pn36mDxSNm3xRPAJAAAASOWBp+g00KRy5cpl/moASltBuXehKFu2rNxzzz2mC4W3wJN2h9DJRncIAPBdGjxKnz59jC7Y+jp//vwxyh84cMAkFW/WrJlr3q1bt8zfDBkymO7eJUqUiPG5jBkzmgkAAABAGk0urv/j36NHD6lVq5ZUqFDBzNNuEoGBgZIjR454d6GgOwQA+A+tI6pUqSIrV670qE/0dY0aNWKU14cXO3fulO3bt7umxx9/XOrXr2/+TSsmAAAAwEdbPGmup127dpncG3eC7hAA4F+0C1y7du2katWqUq1aNRkzZozJFaij3KmIiAgpVKiQeTARFBTkerhhsx9uRJ8PAAAAwEcCT127dpXFixfL2rVrpXDhwq752k1CRyw6c+aMR6un2LpQKLpDAIB/adWqlZw6dUoiIyNNa9jQ0FCTQ9BOOH748GEz0h0AAAAAPws8WZYl3bp1k4ULF8qaNWukWLFiHu9r94m77rrLdJlo0aKFmaf5N/QmwlsXCgCAf9IHGDp5o/VLXHRgCwAAAAA+GHjS7nU6Yt0XX3wh2bJlc+Vt0qGqM2XKZP527NjRdKPQhOPBwcEmUKVBJ0a0AwAAAAAA8C8JCjxNmjTJ/K1Xr57H/OnTp0v79u3Nv9977z3TRUJbPOlodWFhYfL+++8n5TYDAAAAAADAF7va3Y4mgp04caKZAAAAAAAA4L/I3goAAAAAAABHEHgCAAAAAACAIwg8AQAAAAAAwBEEngAAAAAAAOAIAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAAAAAAAIEnAAAAAAAApB20eAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQAAAAAAAI4g8AQAAAAAAABHEHgCAAAAAACAIwg8AQAAAAAAwBEEngAAyW7ixIkSEhIiQUFBUr16ddm0aVOsZRcsWCBVq1aVHDlySJYsWSQ0NFRmzZqVrNsLAAAAIHEIPAEAktW8efOkZ8+eEhUVJVu3bpXKlStLWFiYnDx50mv5XLlyyVtvvSXr16+Xn3/+WTp06GCmZcuWceYAAAAAXws8rV27Vpo1ayYFCxaUgIAAWbRokcf77du3N/Pdp0aNGiXlNgMA0rDRo0dLp06dTPCofPnyMnnyZMmcObNMmzbNa/l69erJE088IeXKlZMSJUpI9+7dpVKlSvLDDz8k+7YDAAAAcDjwdPHiRfN0WrtJxEYDTceOHXNN//3vfxO6GgCAD7p27Zps2bJFGjRo4JqXLl0681pbNN2OZVmycuVK2bt3r9SpUyfWclevXpVz5855TAAAAACSX4aEfqBx48ZmikvGjBklf/78d7JdAAAfdPr0abl586bky5fPY76+3rNnT6yfO3v2rBQqVMgElNKnTy/vv/++NGzYMNbyw4YNk4EDBybptgMAAABIJTme1qxZI3nz5pUyZcrISy+9JH///bcTqwEA+Ils2bLJ9u3b5aeffpKhQ4eaHFFa18SmT58+JlhlT0eOHEnW7QUAAACQyBZPt6Pd7J588kkpVqyYHDhwQPr27WtaSGkXCn1KHZ0+vdbJRncIAPBdefLkMXXBiRMnPObr67haymp3vJIlS5p/66h2u3fvNq2aNP9TbC1vdQIAAADgYy2eWrduLY8//rhUrFhRwsPDZfHixeYJdWxPpvXGIXv27K6pSJEiSb1JAIBUIjAwUKpUqWLyNNlu3bplXteoUSPey9HPuD+0AAAAAOBHXe3cFS9e3Dzh3r9/v9f36Q4BAP5Fu8lNmTJFPv74Y9NySbtk68AVOsqdioiIMHWD+wOK5cuXy++//27Kjxo1SmbNmiXPPvtsCu4FACAp6IBFISEhEhQUJNWrV5dNmzbFWX7+/PlStmxZU14fdC9ZsiTGIBSRkZFSoEAByZQpkxm8Yt++fa73Dx06JB07djS9M/R9HS01KirKDH4BAEgjXe2i+/PPP02OJ/3x94buEADgX1q1aiWnTp0yNwbHjx83XeeWLl3qSjh++PBh07XOpkGpl19+2dQnepOgNxyffPKJWQ4AIO2aN2+eeRgxefJkE3QaM2aMhIWFmZFLNV9sdOvWrZM2bdqYBxKPPfaYzJkzx/Sw2Lp1q1SoUMGUGT58uIwbN8483NDgUv/+/c0yf/31VxOs0oEstNXsBx98YLpw79q1Szp16mTqmpEjR6bAUQAA35fgwNOFCxc8Wi8dPHjQJHzNlSuXmXQUoRYtWphcHZrjqXfv3uZHXX/wAQBQXbt2NZM30btmDxkyxEwAAN8yevRoE/SxW7xqAOrrr7+WadOmyZtvvhmj/NixY00+2V69epnXgwcPNi1iJ0yYYD6rrZ00eNWvXz9p3ry5KTNz5kzzYGPRokUmJYh+Xif33hka6Jo0aRKBJwBILV3tNm/eLPfdd5+ZlD6l0H/rk2tNGPvzzz+bHE+lS5c2zVg1l8f3339PklcAAAAAhnZt27Jli+kK57oxSZfOvNZBibzR+e7llT7ctsvrA3FtSeteRnPIamuq2JapdPRTfYAeF80rqIMguU8AAIdaPOkIQvo0ITbLli1L6CIBAAAA+JHTp0/LzZs3Xd2sbfpau8N5o0Elb+V1vv2+PS+2MtFpT47x48fftrWTdu/Tnh0AgFSYXBwAAAAAUpu//vrLdLtr2bKl6fIXFwZEAoDEI/AEAAAAIFnpqNeapuPEiRMe8/W15or1RufHVd7+G59lHj16VOrXry81a9aUDz/88LbbqwMiBQcHe0wAgPgh8AQAAAAgWQUGBppcsCtXrnTN09Hm9HWNGjW8fkbnu5dXmlzcLq+j2GmAyb2M5mLauHGjxzK1pZOmD9H1T58+3WMkVQBAKsjxBAAAAAB3SgcpateunVStWlWqVatmRqS7ePGia5S7iIgIKVSokMmvpLp37y5169aVUaNGSdOmTWXu3Llm4CO7xVJAQID06NHDjIRaqlQpE4jq37+/FCxYUMLDwz2CTkWLFjV5nU6dOuXanthaWgEA7gyBJwAAAADJrlWrVibwo6Nja/Lv0NBQWbp0qSs5+OHDhz1aI2m3uDlz5ki/fv2kb9++Jri0aNEiqVChgqtM7969TfCqc+fOcubMGaldu7ZZZlBQkKuFlCYU16lw4cIe2xPXAEoAgMQj8AQAAAAgRXTt2tVM3qxZsybGPE0ErlNstNXToEGDzORN+/btzQQASD50aAYAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQAAAAAAAI4g8AQAAAAAAABHEHgCAAAAAACAIwg8AQAAAAAAwBEEngAAAAAAAOAIAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAku4kTJ0pISIgEBQVJ9erVZdOmTbGWnTJlijz00EOSM2dOMzVo0CDO8gAAAADScOBp7dq10qxZMylYsKAEBATIokWLPN63LEsiIyOlQIECkilTJnODsG/fvqTcZgBAGjZv3jzp2bOnREVFydatW6Vy5coSFhYmJ0+e9Fp+zZo10qZNG1m9erWsX79eihQpIo8++qj89ddfyb7tAAAAABwOPF28eNHcJOjTam+GDx8u48aNk8mTJ8vGjRslS5Ys5obiypUrCV0VAMAHjR49Wjp16iQdOnSQ8uXLm/oic+bMMm3aNK/lZ8+eLS+//LKEhoZK2bJl5aOPPpJbt27JypUrk33bAQAAACRMhgSWl8aNG5vJG23tNGbMGOnXr580b97czJs5c6bky5fPtIxq3bp1QlcHAPAh165dky1btkifPn1c89KlS2dax2prpvi4dOmSXL9+XXLlyhVrmatXr5rJdu7cuTvccgAAAAApnuPp4MGDcvz4cXMDYcuePbvJ3xHfGwoAgO86ffq03Lx50zyQcKevtf6IjzfeeMN093ava6IbNmyYqX/sSbvnAQAAAEjjgSf7piEhNxT6RFqfRLtPAAB4884778jcuXNl4cKFJjF5bLRF1dmzZ13TkSNHOKAAAACAP45qx1NpAPAfefLkkfTp08uJEyc85uvr/Pnzx/nZkSNHmsDTt99+K5UqVYqzbMaMGSU4ONhjAgAAAJDGA0/2TUNCbih4Kg0A/iMwMFCqVKnikRjcThReo0aNWD+nA1cMHjxYli5dKlWrVk2mrQUAAACQqgJPxYoVMwEm9xsK7Tqno9vFdkPBU2kA8C89e/aUKVOmyMcffyy7d++Wl156yYyYqqPcqYiICI/k4++++67079/fjHoXEhJium7rdOHChRTcCwAAAACOjGqn/6O/f/9+j4Ti27dvN6ML3XPPPdKjRw8ZMmSIlCpVygSi9GZBk8CGh4cndFUAAB/UqlUrOXXqlERGRpoAUmhoqGnJZOcHPHz4sBnpzjZp0iQzGt5TTz3lsZyoqCgZMGBAsm8/AAAAAAcDT5s3b5b69et7PLlW7dq1kxkzZkjv3r3Nk+vOnTvLmTNnpHbt2uaGIq4ksAAA/9K1a1czebNmzRqP14cOHUqmrQIAAACQ4oGnevXqiWVZsb4fEBAggwYNMhMAAAAAAAD8V4qPagcAAAAAAADfROAJAAAAAAAAjiDwBAAAAAAAAEcQeAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQAAAAAAAI4g8AQAAAAAAABHEHgCAAAAAACAIwg8AQAAAAAAwBEEngAAAAAAAOAIAk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAIAUMXHiRAkJCZGgoCCpXr26bNq0Kc7y8+fPl7Jly5ryFStWlCVLlni8b1mWREZGSoECBSRTpkzSoEED2bdvn0eZf/75R5555hkJDg6WHDlySMeOHeXChQuO7B8AgMATAAAAgBQwb9486dmzp0RFRcnWrVulcuXKEhYWJidPnvRaft26ddKmTRsTKNq2bZuEh4ebadeuXa4yw4cPl3HjxsnkyZNl48aNkiVLFrPMK1euuMpo0OmXX36R5cuXy+LFi2Xt2rXSuXPnZNlnAPBHtHgCAAAAkOxGjx4tnTp1kg4dOkj58uVNsChz5swybdo0r+XHjh0rjRo1kl69ekm5cuVk8ODBcv/998uECRNcrZ3GjBkj/fr1k+bNm0ulSpVk5syZcvToUVm0aJEps3v3blm6dKl89NFHpoVV7dq1Zfz48TJ37lxTDgCQ9Ag8AQAAAEhW165dky1btpiucLZ06dKZ1+vXr/f6GZ3vXl5paya7/MGDB+X48eMeZbJnz24CTHYZ/avd66pWreoqo+V13dpCCgCQ9DI4sEwAAAAAiNXp06fl5s2bki9fPo/5+nrPnj1eP6NBJW/ldb79vj0vrjJ58+b1eD9DhgySK1cuVxlvrl69aibbuXPnOLsAEE8EngAAAAAgDsOGDZOBAwemyDH6alTzFFkvEo5zlTY0e+0L8UVfpeLfCrraAQAAAEhWefLkkfTp08uJEyc85uvr/Pnze/2Mzo+rvP33dmWiJy+/ceOGGekutvWqPn36yNmzZ13TkSNHErS/AODPCDwBAFL18Nk68lCLFi1M+YCAAJM4FgCQtgUGBkqVKlVk5cqVrnm3bt0yr2vUqOH1MzrfvbzSkens8sWKFTPBI/cy2iVOczfZZfTvmTNnTH4p26pVq8y6tT6KTcaMGSU4ONhjAgCkUOBpwIAB5sbAfSpbtmxSrwYA4CfDZ1+6dEmKFy8u77zzTpxPowEAaYvWBVOmTJGPP/7YjDb30ksvycWLF80odyoiIsK0NLJ1797djEg3atQokwdK7zs2b94sXbt2Ne/rfUePHj1kyJAh8uWXX8rOnTvNMgoWLCjh4eGmjI6GpyPj6Wh6+tDjxx9/NJ9v3bq1KQcASCM5nu69915ZsWLF/1aSgVRSAICYw2crHT7766+/NsNnv/nmmzEO0wMPPGAm5e19AEDa1KpVKzl16pRERkaaxN6hoaEmsGQnBz98+LAZbc5Ws2ZNmTNnjvTr10/69u0rpUqVkkWLFkmFChVcZXr37m2CV507dzYtm2rXrm2WqS1sbbNnzzbBpkceecQsX1vVjhs3Lpn3HgD8hyMRIQ008VQaABDb8NnuT7BvN3x2YjD6EACkDRoAslssRbdmzZoY81q2bGmm2Girp0GDBpkpNjqCnQawAABpOMfTvn37TFNV7RrxzDPPmKcVcd0caN9r9wkA4H/DZ8c1jHViRh/Knj27aypSpEiSLRsAAABACgaeNCnfjBkzTJPWSZMmycGDB+Whhx6S8+fPey3PzQEAIKkx+hAAAADgo13tGjdu7Pp3pUqVTCCqaNGi8umnn0rHjh293hxoYkGbtnjiyTQA+KbEDJ+dGDr6kE4AAAAAfLCrnbscOXJI6dKlZf/+/V7fZ2hSAPAfiRk+GwAAAEDa5Xjg6cKFC3LgwAEpUKCA06sCAPjg8NmakHz79u1m0n//9ddf5t+xPdAAAAAA4MNd7V5//XVp1qyZ6V539OhRiYqKMt0q2rRpk9SrAgD4wfDZWpfcd999rtcjR440U926db2OeAQAAADAhwNPf/75pwky/f3333L33XdL7dq1ZcOGDebfAAAkdPjskJAQsSyLAwcAAACkQUkeeJo7d25SLxIAAAAAAABpkOM5ngAAAAAAAOCfCDwBAAAAAADAEQSeAAAAAAAA4AgCTwAAAAAAACDwBAAAAAAAgLSDFk8AAAAAAABwBIEnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAAR2RwZrFA0mr22hc+eUi/GtU8pTcBAAAAAADH0OIJAAAAAAAAjiDwBAAAAAAAAEcQeAIAAAAAAIAjCDwBAAAAAADAEQSeAAAAAAAA4AhGtQMAAAAAAH6BkcWTHy2eAAAAAAAA4AgCTwAAAAAAAHAEgScAAAAAAAA4gsATAAAAAAAAHEHgCQAAAAAAAI4g8AQAAAAAAIC0FXiaOHGihISESFBQkFSvXl02bdrk1KoAAGlMQuuI+fPnS9myZU35ihUrypIlS5JtWwEAAACkssDTvHnzpGfPnhIVFSVbt26VypUrS1hYmJw8edKJ1QEA0pCE1hHr1q2TNm3aSMeOHWXbtm0SHh5upl27diX7tgMAAABIBYGn0aNHS6dOnaRDhw5Svnx5mTx5smTOnFmmTZvmxOoAAGlIQuuIsWPHSqNGjaRXr15Srlw5GTx4sNx///0yYcKEZN92AAAAAAmTQZLYtWvXZMuWLdKnTx/XvHTp0kmDBg1k/fr1McpfvXrVTLazZ8+av+fOnZPkcP3qJfE1yXXskpMvnidfPVe48+vBsiyfPYwJrSOUztcWUu60hdSiRYtiXU9K1i2++Hvlq79VnKu0gfOUeP5Qr6QU+5j66u8jACRlvZLkgafTp0/LzZs3JV++fB7z9fWePXtilB82bJgMHDgwxvwiRYok9ab5jewTU3oLEF+cK3hz/vx5yZ49u08enITWEer48eNey+v82FC3JC1+q9IOzlXakNznyZfrlZSix1RxzwLAH51PYL2S5IGnhNKn3u5Psm/duiX//POP5M6dWwICAsSXIoNaMR05ckSCg4NTenMQC85T2uGL50qfHOiPeMGCBVN6U9I8f6hbfPE74Is4T2mHL54r6hXnaF2t10q2bNmoV5CsfPG3ylf54rmyEnm/kuSBpzx58kj69OnlxIkTHvP1df78+WOUz5gxo5nc5ciRQ3yVXnC+ctH5Ms5T2uFr58rXn0gntI5QOj8h5f2tbvG174Cv4jylHb52rny9Xkkp2k28cOHC4ot87TvgqzhPaUewj32nElOvJHly8cDAQKlSpYqsXLnS40mzvq5Ro0ZSrw4AkIYkpo7Q+e7l1fLly6lTAAAAgDTAka522r2hXbt2UrVqValWrZqMGTNGLl68aEYwAgD4t9vVEREREVKoUCGTp0l1795d6tatK6NGjZKmTZvK3LlzZfPmzfLhhx+m8J4AAAAASJHAU6tWreTUqVMSGRlpkr+GhobK0qVLYySH9Sfa5SMqKipG1w+kLpyntINzlXbdro44fPiw6cJgq1mzpsyZM0f69esnffv2lVKlSpkR7SpUqCD+jO9A2sB5Sjs4V/B3fAfSBs5T2sG5+p8Ai/FVAQAAAAAA4IAkz/EEAAAAAAAAEHgCAAAAAACAY2jxBAAAAAAAAEcQeIJPCwkJMSNmxSUgIMAkKk5K7du3l/DwcPEVhw4dMsdp+/btyb7u1HosBwwYYJJiA/Av1CtJg3olJuoVwD9RryQN6pVUXq9YPmrdunVWunTprCZNmiT4s1FRUVblypUTtd6rV69a7777rlWpUiUrU6ZMVu7cua2aNWta06ZNs65du5aoZeL2pk+fbmXPnj3G/KJFi1rvvfdenJ89duyYdeXKlSQ9zGfOnLH+/fdfKzVo166d1bx5c4958+fPtzJmzGiNHDnSvK8/BfaUK1cuKywszNqxY4er/I0bN8xxun79epJs0+rVq13rCwgIsIKDg63Q0FCrV69e1tGjR1PdsdTtXLhwoce88+fPW6dPn06xbULyo17xL9QrsaNeuXPUK7BRt/gP6pXYUa/4fr3isy2epk6dKt26dZO1a9fK0aNHk2Wd165dk7CwMHnnnXekc+fOsm7dOtm0aZN06dJFxo8fL7/88kuil339+nVxapv9Xf78+c1Ql0kpe/bskiNHDkmNPvroI3nmmWdk0qRJ8tprr5l5jRo1kmPHjplp5cqVkiFDBnnsscdcn0mfPr05Tjo/Ke3du9d8P3/66Sd54403ZMWKFVKhQgXZuXNnshzLO/leZc2aVXLnzi1O4buZ+lCvxA/XLvWKol5JOOoV/0TdEj/+Xrdwv0K9kubrFcsHaWQva9as1p49e6xWrVpZQ4cOjTPSrJFB+1Do++6tP3TSeeqPP/6wHn/8cStLlixWtmzZrJYtW1rHjx93LUdbOmkrq61bt8bYJm3tdOHCBfPvb775xqpVq5bZDm1d0rRpU2v//v2usgcPHjTrnTt3rlWnTh3TMmXs2LFWUFCQtWTJEo/lLliwwOzrxYsXzevDhw+b7dJl58yZ02yvLi96NHnIkCFWgQIFrJCQECs10BZH3bp1s+6++26zv3p8Nm3a5NE6ZvHixVbFihXN+9WrV7d27tzp8b77pK3W7BZPgwYNslq3bm1lzpzZKliwoDVhwoRYo8P2sf/888+tevXqmVZr2npNn0ZFv4aWLl1qlS1b1lwP2kLIvaVO9Kh93bp1zf5pix49L/ny5XNto2337t1mv3X/ypUrZy1fvtxr5Dqh3LdFr1G9jvS6iW1b1ffff2/WffLkSY/jsm3bNo9jvmLFCqtKlSrmONWoUcN852zbt283x1CvT/2+3H///dZPP/3k8fnoLZkuXbpklSlTxhyH2LZPW2tVqFDB7Id+fx555BHXd0tNnTrVKl++vBUYGGjlz5/f6tKli+s9Xef7779vNWvWzFwP9jlYtGiRdd9995ljX6xYMWvAgAGu1l16DblfW/raW8vI6Nege1ml12ujRo3M9ZI3b17r2WeftU6dOuVxjei2du/e3bSU1GOH1IN6hXqFeuV/qFeoV0Dd4o/3LNyvcL+iuF/pkqj7FZ8MPOmNZ9WqVc2/v/rqK6tEiRLWrVu34hV40gvptddes+69917TtUgnnXfz5k3TFah27drW5s2brQ0bNpgbbr1ZtGmA4tFHH73t9n322WcmsLFv3z5zI683wRpQ0XW4/4jrD6yW+/33301Q46mnnjI3q+5atGjhmqfBLQ1Y/Oc//7F+/vln69dff7Xatm1rbuS1C6D9I64/+s8995y1a9cuM6UGr7zyigkKaSX1yy+/mO3USujvv/92BSl037799luzb4899pg5PrrPum9jxowx3bXsc6Y3iUpv/DXoMWzYMGvv3r3WuHHjrPTp05vlxBV40oCSBrr0M3rcdTl2IEKvobvuustq0KCBCaRs2bLFbJse67gCT7p9GtD47bffrI8//th0MbO3Q7uy6Xlq2LChCdho4KdatWpJGnjq3bu3OfcaLPL2vk2P3QsvvGCVLFkyxjUZPfCkAcA1a9aYc/bQQw+ZbqU2/Q7ptakBNd3nTz/91Oyb++e9daHTrpH63okTJ2Jsn34PMmTIYI0ePdpsk14LEydOdJ1vDSrp/+zo9aDnToOX7l0tdbka9NGurwcOHDDB5LVr15pzM2PGDDNPz4leW3qulAbf7AC0Xlt2MC564Mm+9nTSQLIeP/2eKd1PDar26dPHHA8NTuu5rl+/vsc1oudHg5MawHMP4iHlUa9Qr1Cv/A/1CvUKqFv88Z6F+xXuV2zcr/RK8P2KTwae9OZXbzyVBgvy5MljbnTjE3iKLceT3oxqwEKj8za92dbP2S1ztNWH/iAllLZ60OXYLXjsH3F7H9y30/1JwdmzZ81NtragUrNmzTI/2HaQTemPt27XsmXLXD/i2trG/lFPDbS1igZyZs+e7ZqnFZIGooYPH+4KUujTFJsGpHS/5s2bd9s+09rKxJ22gmvcuHGcgaePPvooxnnWgIG9Ln3t3kpNgx96XOMKPGnQ0t0DDzxgvfHGG+bfeg41oKJBC1tStnjS1j+6rJUrV3p9X69tbYmjk5bTJ0saULPF1eLJ9vXXX5t5ly9fNq814KfBHG/iCjzpsdD3Nm7cGONY6jbpe4cOHfK6XL1m3nrrrViPhX62R48eHvO0xdTbb7/tMU+/S3oM3D8X/TzElgtOv39PPPGECUxr0FoNHjw4RlD6yJEjZrkaILOvEW11hdSJeoV6xUa9Qr3ijnoF1C3+cc/C/Qr3K+64X0k4n8vxpDljNK9SmzZtzGvNSdOqVSvTf/pO7N69W4oUKWImW/ny5U3uGX1P/d//f9zevn37zPYVL15cgoODzUgG6vDhwx7lqlat6vG6SZMmctddd8mXX35pXn/++efm8w0aNDCvd+zYIfv375ds2bKZ/pw65cqVS65cuSIHDhxwLadixYoSGBgoqYVum+baqVWrlmue7me1atVcx1bVqFHD9W/drzJlyni8Hxv3z9mvb/e5SpUquf5doEAB8/fkyZOueZkzZ5YSJUp4lHF//3bLjP4ZvW712tL+2zbd/6Si69brLCoqSi5cuBDj/fr165sR63TS74/mKmvcuLH88ccfiT5OPXv2lOeff95cn5r3zP0ajIv9PdJR9KKrXLmyPPLII+YabtmypUyZMkX+/fdf13o1X5S+H5fo3yv93gwaNMj1ndGpU6dOJt/VpUuXJKH69u0r69evly+++EIyZcrkWsfq1as91lG2bFnznvtxqVKlSoLXB+dRr1CvREe9Qr3ijnoF1C2+f8/C/Qr3K+64X0m4pM0UnApogOnGjRtSsGBBjwtDk0dPmDBB0qVLFyNAlFSJu0uXLi179uy5bblmzZpJ0aJFzU2zbuetW7dMQuXoybmyZMni8Vp/eJ966imZM2eOtG7d2vzVoJqd8FkDCnrjOnv27BjrvPvuu2NdLmLSytJmB0D0PHl73y5zu8Cjt8+4L9NJhQoVks8++8wEmDTh6zfffGMqe/dromTJkh4JyDWpt16jQ4YMSdRx0uE727ZtK19//bVZnwa95s6dK0888USc22oHBe2ArDtNcr58+XKTuP/bb781Sfvfeust2bhxo+TJkydexyL69a/fm4EDB8qTTz4Zo2xQUJAkxCeffCLvvfeerFmzxhxz93Xo9/7dd9+N8Rk7YOdt25A6UK9QryQF6hXqFUW9AuoW7lmSCvUK9Upaqld8qsWTBpxmzpwpo0aNcrXe0Emj6hrg+e9//2sCMOfPn5eLFy+6Pqdlogd4bt686TGvXLlycuTIETPZfv31Vzlz5oxp+aT0JltH5dq2bVuMbdPglq7z77//Nk/P+/XrZ1pm6HLtFhvxoaORLV261IyQt2rVKvPadv/995vWVHnz5jVBBPdJgwiplbYc0mP+448/ehwvHenMPrZqw4YNrn/rMfvtt9/M8YvtnHn7nP3a/lxqoa239No6ceKEa57uf1LSYOd3330nx48fN8En/R7ERoNIGqS9fPnyHQdjX331VRMk0sDO9OnT4yyv6/vwww+lTp06HsHS6NumreM0WKTfNT33CxcuNIE0DVbpqHwJod8b/U5G/87opMfArthju75s2spJW3h98MEH8uCDD8ZYh35ndfuir4NgU+pGvUK94g31yv+hXvGOegXULb53z8L9CvcrNu5XEsenAk+LFy82AYmOHTuaFkTuU4sWLcxT6+rVq5tuUtodRptMaquhGTNmeCxHbw4PHjxoAlKnT5+Wq1evmqah2txTfzS3bt1quiNFRERI3bp1XU2se/ToYW6INaA0ceJEE/D6/fff5dNPPzU3ovoDmzNnTjOkod5caxNT/SHWLknxpTfk2h1Lt6NYsWJmf2w6T1t9NG/eXL7//nuzDxrJfOWVV+TPP/+U1EpvvF966SXp1auXqaA0oKddnbSbk55Lm3aH0qDCrl27pH379mZfw8PDXedMo7T6vp4z9y5SGtAaPny4CVTpeZk/f750795dUpOGDRuaCq1du3by888/m23W4GRsXc4SS7vz6TWh3dK0O925c+fMfL3GNSClk7Y46tatmyvqnRj6g9y1a1ezLu2up/ujgbToAT/dDl2nfje0NZR+f/T8TZo0yetytWXT22+/LZs3bzZdUxcsWCCnTp1yLVdbWWngedy4cWaZ+l3VVlFxiYyMNAFrDWTp/xzp/uu22Mdf2QEt3VZvgWKdry25tCWiHlf7WOq2qS5dusg///xjutjqcdDfnmXLlkmHDh1uG9BCyqJeoV6hXokb9UpM1CugbvG9exbuV7hf4X7lDlk+REc6a9Kkidf3NFGx7u6OHTtMwjsdcUoT2OlnPvzwQ4/k4jpUpo68kCNHDtdoVkpHwNKhPjUBsyZO1iFAjx8/7rEe/ayOoKaj1NnDvevQ8Jpk2R4VTZNG60gOOuSojoSno4J5S3BtJ3KOTkcn0/cjIyNjvKfJqSMiIkxCdV1+8eLFrU6dOpmkft6SXqcWmpC6W7duru3WY2YnbbcTUesIhTpSmibK1hHf9Fy6e/HFF82wjtGHvR44cKA5V5kzZ7by589vhnl1d7tjrwmwdV5CEtR7Sy6uw0660/e1nE2Tl+t+6/7pqHq6v7rMpUuX3sGR9X7O//zzT6tUqVLWgw8+aBJh63rsSa9tTXyuoy/eLrm4e3JwfU/naVlNBNm6dWurSJEiZn806XfXrl1dicftz+uko/vpOjVRt47o5p5gPfr266gnYWFhZoQ4vU5Kly5tjR8/3qP85MmTTcJKTVivCcL1urLFlqxdj7Emj9bfBB3hTq8v/V2wffnll+Y3QxPA6zUVPbm4+/64T3ZZpSP76bHW3xVdj55jTXRuJ9b0do0g5VGvUK9Qr8REvUK9AuoWf7xn4X6F+xXuV+om+n4lQP9zp8ErwEn6BERzE2lLE03m7i+0lVDt2rVNyzj3ROYAgDtDvUK9AgBJiXqFegV+llwcSKs0T5GO6lGqVCkTbNLugNr1jKATAIB6BQCQ0rhfQWIReAJSCU32/cYbb5jcRdrvXfOKab4iAACoVwAAKY37FSQWXe0AAAAAAADgCJ8a1Q4AAAAAAACpB4EnAAAAAAAAOILAEwAAAAAAABxB4AkAAAAAAACOIPAEAAAAAAAARxB4AgAAAAAAgCMIPAEAAAAAAMARBJ4AAAAAAADgCAJPAAAAAAAAECf8P/XWxSdO0/huAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_bars(regression_results, ['fit_s', 'test_r2', 'r2_drop'], 'California Housing \\u2014 regression')"
]
},
{
"cell_type": "markdown",
"id": "notes-md",
"metadata": {},
"source": [
"## How to read these numbers\n",
"\n",
"- **`fit_s` / `transform_s`** measure only `.fit` / `.transform` wall-clock — not data loading, not one-hot encoding, not the downstream model.\n",
"- **`test_auc` / `test_r2`** are the headline metric. They reflect how well a *simple* downstream model performs on each library's binned output. A tree-based downstream model would tell a different (and less binning-sensitive) story.\n",
"- **`auc_drop` / `r2_drop`** are `train - test` and measure how much each library's bins overfit. Lower is more robust. AutoCarver's dev-set veto is designed to keep this small.\n",
"- **Same data, same seed, same downstream model** across libraries — but a single run, on one machine, with one set of hyper-parameters. Treat as illustrative.\n",
"\n",
"## When the result will move\n",
"\n",
"- **Bigger `max_n_mod` / smaller `min_freq`** will improve AutoCarver and optbinning's in-sample scores at the cost of `*_drop`. KBins doesn't have a target, so it's mostly insensitive.\n",
"- **Different downstream model.** Gradient-boosted trees on the raw features beat any binning + linear pipeline. The point of binning is interpretability, not raw accuracy.\n",
"- **Different dataset.** German Credit is small; on a 10M-row credit-risk dataset, `fit_s` is what dominates the comparison.\n",
"\n",
"See [comparison.rst](../../comparison.html) for the qualitative scope and algorithmic comparison."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "AutoCarver",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}