{ "cells": [ { "cell_type": "markdown", "id": "md1a972a0e", "metadata": {}, "source": [ "# BitBullet:Lessons: Wholesale Customer Segmentation\n", "\n", "Every business serves a mix of customer types — but most treat them identically. A wholesale food distributor serves two fundamentally different customer groups: **Horeca** (hotels, restaurants, cafes) and **retailers** — yet within each group, spending patterns diverge dramatically. Some customers are fresh-produce-heavy; others lean heavily on packaged groceries or dairy.\n", "\n", "In this tutorial we apply BitBullet's clustering engine to the **UCI Wholesale Customers dataset** — a real-world record of annual spending across six product categories for 440 wholesale distributor customers. The goal: discover natural spending segments that cut across the known Channel/Region labels and reveal actionable customer archetypes.\n", "\n", "**Dataset**: `Wholesale_customers_data.csv` — 440 customers, 8 features. \n", "**Source**: [UCI ML Repository — Wholesale Customers](https://archive.uci.edu/dataset/292/wholesale+customers) \n", "**Task**: Discover natural spending clusters with zero pre-labelled ground truth.\n", "\n", "---\n", "\n", "### What You Will Build\n", "\n", "| Step | Component | What BitBullet Handles For You |\n", "|------|-----------|--------------------------------|\n", "| 1 | Feature profiling | `generate_feature_stats` — detect numerical vs. categorical automatically |\n", "| 2 | Zero-config clustering | `auto_cluster` — algorithm selection, K selection, fitting, evaluation |\n", "| 3 | Column type detection | `detect_column_types`, `select_algorithm` — mixed-data awareness |\n", "| 4 | Optimal K search | `find_optimal_k` — silhouette scoring across candidate K values |\n", "| 5 | Manual configuration | `KPrototypesClusterer` — full control over mixed-type clustering |\n", "| 6 | Evaluation metrics | `evaluate_clustering` — silhouette, Calinski-Harabász, Davies-Bouldin, quality score |\n", "| 7 | Cluster profiling | `profile_clusters` — suggested labels, key characteristics, feature importance |\n", "| 8 | Visualisation suite | Scatter, silhouette, FAMD decomposition, comprehensive dashboard |\n", "| 9 | Segment activation | Attach labels to DataFrame, compute segment means, business interpretation |" ] }, { "cell_type": "markdown", "id": "62e614e9", "metadata": {}, "source": [ "> **Explore and compare clustering configurations without building the lifecycle yourself.**\n", "> [BitBullet Platform](https://bitbullet.co.uk/platform/clustering) centralises datasets, managed compute, storage, candidate configurations, and results in one guided environment. Use guided controls or the AI assistant to prepare a draft, inspect cluster quality and profile evidence, compare candidate structures, then export fitted clustering artefacts, preprocessing, metadata, and generated inference code. This lesson gives you direct SDK control over the same work." ] }, { "cell_type": "markdown", "id": "md9642b073", "metadata": {}, "source": [ "## 1. Environment & Imports" ] }, { "cell_type": "code", "execution_count": 2, "id": "cd62df3317", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "bitbullet : vdev\n", "All imports successful.\n" ] } ], "source": [ "import sys\n", "import os\n", "import warnings\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.ticker as mticker\n", "import plotly.express as px\n", "import plotly.graph_objects as go\n", "from sklearn.metrics import silhouette_samples\n", "\n", "warnings.filterwarnings('ignore')\n", "\n", "# When running this notebook from bitbullet/lessons in a local clone, prefer the local SDK source.\n", "sdk_root = os.path.abspath(\"..\")\n", "if sdk_root not in sys.path:\n", " sys.path.insert(0, sdk_root)\n", "\n", "import bitbullet\n", "print(f\"bitbullet : v{getattr(bitbullet, '__version__', 'dev')}\")\n", "\n", "from bitbullet.cluster import ClusterConfig\n", "from bitbullet.cluster.core import auto_cluster, detect_column_types, select_algorithm\n", "from bitbullet.cluster.algorithms.partitional import KPrototypesClusterer, KMeansClusterer\n", "from bitbullet.cluster.evaluation import evaluate_clustering, profile_clusters, find_optimal_k\n", "from bitbullet.cluster.visualization import (\n", " plot_cluster_scatter,\n", " plot_silhouette,\n", " plot_cluster_sizes,\n", " create_dashboard,\n", " auto_decompose,\n", " plot_decomposition,\n", ")\n", "from bitbullet.transform.eda import generate_feature_stats\n", "\n", "print(\"All imports successful.\")" ] }, { "cell_type": "markdown", "id": "mdf957b46d", "metadata": {}, "source": [ "## 2. Load and Prepare the Dataset\n", "\n", "Each row is a wholesale customer. Columns record their annual spending in monetary units across six product categories. `Channel` (1 = Horeca, 2 = Retail) and `Region` (1 = Lisbon, 2 = Oporto, 3 = Other) are integer-coded categorical attributes.\n", "\n", "We convert `Channel` and `Region` to descriptive strings before clustering. This serves two purposes: (1) `detect_column_types` will correctly identify them as categorical, and (2) cluster profiles and suggested labels will be human-readable without needing a lookup table.\n", "\n", "**Dataset:** Wholesale Customers Dataset \n", "**Source:** [UCI ML Repository — Wholesale Customers](https://archive.uci.edu/dataset/292/wholesale+customers) \n", "**File:** `Wholesale_customers_data.csv`\n", "\n", "> **Before running this cell:** download `Wholesale_customers_data.csv` from the link above and\n", "> place it in the **same directory as this notebook**. If you store it elsewhere,\n", "> update `data_path` in the code cell below to match your chosen location." ] }, { "cell_type": "code", "execution_count": null, "id": "cdb6f6eec9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset loaded — Shape: (440, 8)\n", "Columns: ['Channel', 'Region', 'Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicassen']\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ChannelRegionFreshMilkGroceryFrozenDetergents_PaperDelicassen
023126699656756121426741338
123705798109568176232931776
223635388087684240535167844
313132651196422164045071788
4232261554107198391517775185
\n", "
" ], "text/plain": [ " Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen\n", "0 2 3 12669 9656 7561 214 2674 1338\n", "1 2 3 7057 9810 9568 1762 3293 1776\n", "2 2 3 6353 8808 7684 2405 3516 7844\n", "3 1 3 13265 1196 4221 6404 507 1788\n", "4 2 3 22615 5410 7198 3915 1777 5185" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Update this path if you stored the file in a different location.\n", "data_path = \"Wholesale_customers_data.csv\"\n", "\n", "df_raw = pd.read_csv(data_path)\n", "print(f\"Dataset loaded — Shape: {df_raw.shape}\")\n", "print(f\"Columns: {list(df_raw.columns)}\")\n", "display(df_raw.head())" ] }, { "cell_type": "code", "execution_count": 4, "id": "cdc1d03f45", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Channel distribution:\n", "Channel\n", "Horeca 298\n", "Retail 142\n", "\n", "Region distribution:\n", "Region\n", "Other 316\n", "Lisbon 77\n", "Oporto 47\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ChannelRegionFreshMilkGroceryFrozenDetergents_PaperDelicassen
0RetailOther126699656756121426741338
1RetailOther705798109568176232931776
2RetailOther635388087684240535167844
3HorecaOther132651196422164045071788
4RetailOther2261554107198391517775185
\n", "
" ], "text/plain": [ " Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen\n", "0 Retail Other 12669 9656 7561 214 2674 1338\n", "1 Retail Other 7057 9810 9568 1762 3293 1776\n", "2 Retail Other 6353 8808 7684 2405 3516 7844\n", "3 Horeca Other 13265 1196 4221 6404 507 1788\n", "4 Retail Other 22615 5410 7198 3915 1777 5185" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Convert integer-coded categorical columns to descriptive strings\n", "df = df_raw.copy()\n", "df['Channel'] = df['Channel'].map({1: 'Horeca', 2: 'Retail'})\n", "df['Region'] = df['Region'].map({1: 'Lisbon', 2: 'Oporto', 3: 'Other'})\n", "\n", "print(\"Channel distribution:\")\n", "print(df['Channel'].value_counts().to_string())\n", "print(\"\\nRegion distribution:\")\n", "print(df['Region'].value_counts().to_string())\n", "print()\n", "display(df.head())" ] }, { "cell_type": "markdown", "id": "md18d2503f", "metadata": {}, "source": [ "## 3. Exploratory Feature Analysis\n", "\n", "Wholesale spending data is notoriously right-skewed: a handful of large accounts drive the mean far above the median. `generate_feature_stats` surfaces this immediately — and confirms we have a **mixed-type dataset** with both numerical spend features and categorical channel/region labels." ] }, { "cell_type": "code", "execution_count": 5, "id": "cda26775d1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Numerical (6): ['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicassen']\n", "Categorical (2): ['Channel', 'Region']\n", "----------------------------------------------------------------------\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dtypemissing_countmissing_percentunique_valueszero_countnegative_countmeanstdskewnesskurtosismean_percentilemin25%50%75%maxtopfreq
Channelobject00.0200----------Horeca298
Regionobject00.0300----------Other316
Freshint6400.04330012000.29772712647.3288652.56132311.53640864.0909093.03127.758504.016933.75112151.0--
Milkint6400.0421005796.2659097380.3771754.05375524.66939866.13636455.01533.03627.07190.2573498.0--
Groceryint6400.0430007951.2772739503.1628293.58742920.9146766.1363643.02153.04755.510655.7592780.0--
Frozenint6400.0426003071.9318184854.6733335.90798654.68928171.13636425.0742.251526.03554.2560869.0--
Detergents_Paperint6400.0417002881.4931824767.8544483.63185119.00946468.8636363.0256.75816.53922.040827.0--
Delicassenint6400.0403001524.8704552820.10593711.151586170.69493968.8636363.0408.25965.51820.2547943.0--
\n", "
" ], "text/plain": [ " dtype missing_count missing_percent unique_values \\\n", "Channel object 0 0.0 2 \n", "Region object 0 0.0 3 \n", "Fresh int64 0 0.0 433 \n", "Milk int64 0 0.0 421 \n", "Grocery int64 0 0.0 430 \n", "Frozen int64 0 0.0 426 \n", "Detergents_Paper int64 0 0.0 417 \n", "Delicassen int64 0 0.0 403 \n", "\n", " zero_count negative_count mean std \\\n", "Channel 0 0 - - \n", "Region 0 0 - - \n", "Fresh 0 0 12000.297727 12647.328865 \n", "Milk 0 0 5796.265909 7380.377175 \n", "Grocery 0 0 7951.277273 9503.162829 \n", "Frozen 0 0 3071.931818 4854.673333 \n", "Detergents_Paper 0 0 2881.493182 4767.854448 \n", "Delicassen 0 0 1524.870455 2820.105937 \n", "\n", " skewness kurtosis mean_percentile min 25% \\\n", "Channel - - - - - \n", "Region - - - - - \n", "Fresh 2.561323 11.536408 64.090909 3.0 3127.75 \n", "Milk 4.053755 24.669398 66.136364 55.0 1533.0 \n", "Grocery 3.587429 20.91467 66.136364 3.0 2153.0 \n", "Frozen 5.907986 54.689281 71.136364 25.0 742.25 \n", "Detergents_Paper 3.631851 19.009464 68.863636 3.0 256.75 \n", "Delicassen 11.151586 170.694939 68.863636 3.0 408.25 \n", "\n", " 50% 75% max top freq \n", "Channel - - - Horeca 298 \n", "Region - - - Other 316 \n", "Fresh 8504.0 16933.75 112151.0 - - \n", "Milk 3627.0 7190.25 73498.0 - - \n", "Grocery 4755.5 10655.75 92780.0 - - \n", "Frozen 1526.0 3554.25 60869.0 - - \n", "Detergents_Paper 816.5 3922.0 40827.0 - - \n", "Delicassen 965.5 1820.25 47943.0 - - " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "stats_df, numerical_cols, categorical_cols = generate_feature_stats(df)\n", "\n", "print(f\"Numerical ({len(numerical_cols)}): {numerical_cols}\")\n", "print(f\"Categorical ({len(categorical_cols)}): {categorical_cols}\")\n", "print(\"-\" * 70)\n", "display(stats_df)" ] }, { "cell_type": "markdown", "id": "mdf78b7aab", "metadata": {}, "source": [ "**Key observations from the feature audit:**\n", "\n", "- **Mixed feature types** — `Channel` and `Region` are categorical; all spend columns are numerical. This rules out plain K-Means.\n", "- **Extreme right skew** on all spend columns — `Fresh`, `Frozen`, and `Delicassen` all show skewness > 5. A few very large accounts will distort centroids if left untreated. `auto_cluster` handles normalisation internally.\n", "- **No missing values** — the dataset is clean.\n", "- **Small dataset** (440 rows) — K-search range should be kept tight (2–7) to avoid fitting noise as structure." ] }, { "cell_type": "markdown", "id": "md43600e80", "metadata": {}, "source": [ "## 4. Zero-Config Auto-Clustering" ] }, { "cell_type": "code", "execution_count": 6, "id": "cdb61664b1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running auto_cluster — detecting column types, selecting algorithm,\n", "searching for optimal K, fitting, and evaluating automatically.\n", "\n", "================================================================================\n", "AUTO-CLUSTERING PIPELINE\n", "================================================================================\n", "\n", "[1/5] Auto-detecting column types...\n", " Numerical: ['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicassen']\n", " Categorical: ['Channel', 'Region']\n", "\n", "[2/5] Auto-selecting algorithm...\n", " Selected: kprototypes\n", "\n", "[3/5] Finding optimal K (testing 2-10)...\n", " Recommended K: 2 (confidence: low)\n", " - Silhouette score peaks at k=2 (-1.000)\n", " - Tested k from 2 to 10\n", " - Multiple k values have similar scores - try domain knowledge\n", " - Note: Elbow method suggests k=3 instead\n", "\n", "[4/5] Clustering with kprototypes (K=2)...\n", "Fitting kprototypes...\n", "Calculating gamma using 'huang' method...\n", "Gamma = 3497.7919\n", "Calculating categorical weights using 'relevance' method...\n", "Applying per-feature weights. Gamma range: [1786.6539, 5208.9299]\n", "Initialization method and algorithm are deterministic. Setting n_init to 1.\n", "\n", "Fitting K-Prototypes (n_clusters=2)...\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Starting iterations...\n", "Run: 2, iteration: 1/100, moves: 47, ncost: 123614095846.56082\n", "Run: 1, iteration: 1/100, moves: 16, ncost: 114438252123.06128\n", "Run: 5, iteration: 1/100, moves: 26, ncost: 123542653483.19649\n", "Run: 4, iteration: 1/100, moves: 59, ncost: 115221241623.77393\n", "Run: 2, iteration: 2/100, moves: 27, ncost: 121882603579.68947\n", "Run: 8, iteration: 1/100, moves: 48, ncost: 114819707216.52832\n", "Run: 1, iteration: 2/100, moves: 14, ncost: 113892018217.07164\n", "Run: 10, iteration: 1/100, moves: 80, ncost: 121651564687.64377\n", "Run: 5, iteration: 2/100, moves: 25, ncost: 121882054671.93109\n", "Run: 4, iteration: 2/100, moves: 18, ncost: 114571716477.99518\n", "Run: 2, iteration: 3/100, moves: 28, ncost: 120629337219.31061\n", "Run: 8, iteration: 2/100, moves: 11, ncost: 114544377192.07077\n", "Run: 1, iteration: 3/100, moves: 10, ncost: 113559610606.74165\n", "Run: 10, iteration: 2/100, moves: 53, ncost: 118060689238.85434\n", "Run: 5, iteration: 3/100, moves: 29, ncost: 120629337219.31061\n", "Run: 4, iteration: 3/100, moves: 14, ncost: 114124923387.80376\n", "Run: 2, iteration: 4/100, moves: 17, ncost: 120126662534.90063\n", "Run: 8, iteration: 3/100, moves: 13, ncost: 114124923387.80376\n", "Run: 6, iteration: 1/100, moves: 20, ncost: 114247161638.78679\n", "Run: 7, iteration: 1/100, moves: 28, ncost: 113693698699.33847\n", "Run: 3, iteration: 1/100, moves: 109, ncost: 120949607760.71414\n", "Run: 1, iteration: 4/100, moves: 11, ncost: 113248392104.92256\n", "Run: 9, iteration: 1/100, moves: 31, ncost: 114706574594.15979\n", "Run: 10, iteration: 3/100, moves: 35, ncost: 115615795947.62486\n", "Run: 5, iteration: 4/100, moves: 17, ncost: 120126662534.90063\n", "Run: 4, iteration: 4/100, moves: 9, ncost: 113901908192.20638\n", "Run: 2, iteration: 5/100, moves: 11, ncost: 119897192593.96259\n", "Run: 8, iteration: 4/100, moves: 9, ncost: 113901908192.20638\n", "Run: 1, iteration: 5/100, moves: 2, ncost: 113223071281.33212\n", "Run: 10, iteration: 4/100, moves: 24, ncost: 114716161244.52449\n", "Run: 5, iteration: 5/100, moves: 11, ncost: 119897192593.96259\n", "Run: 4, iteration: 5/100, moves: 5, ncost: 113824498016.4025\n", "Run: 2, iteration: 6/100, moves: 7, ncost: 119776842897.16995\n", "Run: 8, iteration: 5/100, moves: 5, ncost: 113824498016.4025\n", "Run: 6, iteration: 2/100, moves: 10, ncost: 113891937069.4903\n", "Run: 7, iteration: 2/100, moves: 10, ncost: 113234847977.8884\n", "Run: 3, iteration: 2/100, moves: 23, ncost: 120207166856.01108\n", "Run: 1, iteration: 6/100, moves: 1, ncost: 113218428133.06653\n", "Run: 9, iteration: 2/100, moves: 15, ncost: 114307974813.4363\n", "Run: 5, iteration: 6/100, moves: 7, ncost: 119776842897.16995\n", "Run: 10, iteration: 5/100, moves: 13, ncost: 114272665863.77339\n", "Run: 4, iteration: 6/100, moves: 7, ncost: 113569936611.23627\n", "Run: 2, iteration: 7/100, moves: 3, ncost: 119732693953.55994\n", "Run: 8, iteration: 6/100, moves: 7, ncost: 113569936611.23627\n", "Run: 1, iteration: 7/100, moves: 0, ncost: 113218428133.06653\n", "Run: 5, iteration: 7/100, moves: 3, ncost: 119732693953.55994\n", "Run: 10, iteration: 6/100, moves: 12, ncost: 113920390656.67844\n", "Run: 2, iteration: 8/100, moves: 6, ncost: 119626208811.00294\n", "Run: 4, iteration: 7/100, moves: 6, ncost: 113248392104.92256\n", "Run: 6, iteration: 3/100, moves: 4, ncost: 113824498016.4025\n", "Run: 8, iteration: 7/100, moves: 6, ncost: 113248392104.92256\n", "Run: 7, iteration: 3/100, moves: 2, ncost: 113218428133.06653\n", "Run: 3, iteration: 3/100, moves: 13, ncost: 119938498955.17961\n", "Run: 5, iteration: 8/100, moves: 6, ncost: 119626208811.00294\n", "Run: 10, iteration: 7/100, moves: 6, ncost: 113824498016.4025\n", "Run: 9, iteration: 3/100, moves: 13, ncost: 113920390656.67844\n", "Run: 4, iteration: 8/100, moves: 2, ncost: 113223071281.33212\n", "Run: 2, iteration: 9/100, moves: 5, ncost: 119556236333.16246\n", "Run: 6, iteration: 4/100, moves: 7, ncost: 113569936611.23627\n", "Run: 8, iteration: 8/100, moves: 2, ncost: 113223071281.33212\n", "Run: 5, iteration: 9/100, moves: 5, ncost: 119556236333.16246\n", "Run: 2, iteration: 10/100, moves: 0, ncost: 119556236333.16246\n", "Run: 4, iteration: 9/100, moves: 1, ncost: 113218428133.06653\n", "Run: 10, iteration: 8/100, moves: 7, ncost: 113569936611.23627\n", "Run: 8, iteration: 9/100, moves: 1, ncost: 113218428133.06653\n", "Run: 6, iteration: 5/100, moves: 6, ncost: 113248392104.92256\n", "Run: 7, iteration: 4/100, moves: 0, ncost: 113218428133.06653\n", "Run: 3, iteration: 4/100, moves: 7, ncost: 119804439348.86752\n", "Run: 5, iteration: 10/100, moves: 0, ncost: 119556236333.16246\n", "Run: 4, iteration: 10/100, moves: 0, ncost: 113218428133.06653\n", "Run: 10, iteration: 9/100, moves: 6, ncost: 113248392104.92256\n", "Run: 9, iteration: 4/100, moves: 6, ncost: 113824498016.4025\n", "Run: 8, iteration: 10/100, moves: 0, ncost: 113218428133.06653\n", "Run: 6, iteration: 6/100, moves: 2, ncost: 113223071281.33212\n", "Run: 10, iteration: 10/100, moves: 2, ncost: 113223071281.33212\n", "Run: 9, iteration: 5/100, moves: 7, ncost: 113569936611.23627\n", "Run: 6, iteration: 7/100, moves: 1, ncost: 113218428133.06653\n", "Run: 3, iteration: 5/100, moves: 5, ncost: 119732693953.55994\n", "Run: 10, iteration: 11/100, moves: 1, ncost: 113218428133.06653\n", "Run: 6, iteration: 8/100, moves: 0, ncost: 113218428133.06653\n", "Run: 9, iteration: 6/100, moves: 6, ncost: 113248392104.92256\n", "Run: 3, iteration: 6/100, moves: 6, ncost: 119626208811.00294\n", "Run: 10, iteration: 12/100, moves: 0, ncost: 113218428133.06653\n", "Run: 9, iteration: 7/100, moves: 2, ncost: 113223071281.33212\n", "Run: 3, iteration: 7/100, moves: 5, ncost: 119556236333.16246\n", "Run: 9, iteration: 8/100, moves: 1, ncost: 113218428133.06653\n", "Run: 3, iteration: 8/100, moves: 0, ncost: 119556236333.16246\n", "Run: 9, iteration: 9/100, moves: 0, ncost: 113218428133.06653\n", "Best run was number 1\n", "Clustering complete. Final cost: 113218428133.07\n", "Fitted kprototypes. Found 2 clusters.\n", " Clustering complete!\n", "\n", "[5/5] Evaluating clustering quality...\n", " Quality: 7.2/10 (Good)\n", " Silhouette: 0.512\n", "\n", " Top Insights:\n", " - Clustering quality is Good (7.2/10)\n", " - Cluster 0 is weakly defined (avg silhouette: 0.13)\n", " - Cluster 1 is very large (375 samples, 85.2% of data)\n", "\n", "================================================================================\n", "AUTO-CLUSTERING COMPLETE\n", "================================================================================\n" ] } ], "source": [ "print(\"Running auto_cluster — detecting column types, selecting algorithm,\")\n", "print(\"searching for optimal K, fitting, and evaluating automatically.\\n\")\n", "\n", "result = auto_cluster(df, verbose=True)" ] }, { "cell_type": "markdown", "id": "mdbd95bc34", "metadata": {}, "source": [ "## 5. Inspecting the Auto-Cluster Result" ] }, { "cell_type": "code", "execution_count": 7, "id": "cd3e358bda", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "════════════════════════════════════════════════════════════\n", " AUTO-CLUSTER RESULT SUMMARY\n", "════════════════════════════════════════════════════════════\n", " Algorithm selected : kprototypes\n", " K selected : 2\n", " Samples clustered : 440\n", "\n", " Cluster sizes:\n", " Cluster 0 → 65 customers (14.8%)\n", " Cluster 1 → 375 customers (85.2%)\n", "\n", " Silhouette score : 0.5115\n", " Quality score : 7.18 / 10 (Good)\n", "\n", " Configuration applied:\n", " algorithm : kprototypes\n", " n_clusters : 2\n", " numerical_columns : ['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicassen']\n", " categorical_columns : ['Channel', 'Region']\n", " auto_gamma : True\n", " auto_weights : True\n" ] } ], "source": [ "auto_labels = result.labels\n", "auto_eval = result.evaluation\n", "auto_config = result.config_used\n", "auto_clusterer = result.clusterer\n", "\n", "print(\"\\u2550\" * 60)\n", "print(\" AUTO-CLUSTER RESULT SUMMARY\")\n", "print(\"\\u2550\" * 60)\n", "print(f\" Algorithm selected : {auto_config.get('algorithm', 'N/A')}\")\n", "print(f\" K selected : {auto_config.get('n_clusters', 'N/A')}\")\n", "print(f\" Samples clustered : {len(auto_labels):,}\")\n", "print()\n", "print(\" Cluster sizes:\")\n", "unique, counts = np.unique(auto_labels, return_counts=True)\n", "for cid, cnt in zip(unique, counts):\n", " print(f\" Cluster {cid} \\u2192 {cnt:,} customers ({cnt / len(auto_labels):.1%})\")\n", "print()\n", "print(f\" Silhouette score : {auto_eval.metrics.silhouette:.4f}\")\n", "print(f\" Quality score : {auto_eval.metrics.overall_quality:.2f} / 10 ({auto_eval.metrics.quality_label})\")\n", "print()\n", "print(\" Configuration applied:\")\n", "for k, v in auto_config.items():\n", " print(f\" {str(k):30s}: {v}\")" ] }, { "cell_type": "markdown", "id": "mdbe741ccb", "metadata": {}, "source": [ "## 6. Manual Configuration" ] }, { "cell_type": "markdown", "id": "md0106f06d", "metadata": {}, "source": [ "### 6.1 Column Type Detection" ] }, { "cell_type": "code", "execution_count": 8, "id": "cdb1ed0b52", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Numerical columns (6): ['Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', 'Delicassen']\n", "Categorical columns (2): ['Channel', 'Region']\n", "\n", "Recommended algorithm: KPROTOTYPES\n", "\n", "K-Prototypes selected because the dataset contains both numerical and\n", "categorical columns. It combines Euclidean distance for spend features\n", "with simple matching distance for Channel and Region.\n" ] } ], "source": [ "numerical_cols, categorical_cols = detect_column_types(df)\n", "algorithm = select_algorithm(numerical_cols, categorical_cols)\n", "\n", "print(f\"Numerical columns ({len(numerical_cols)}): {numerical_cols}\")\n", "print(f\"Categorical columns ({len(categorical_cols)}): {categorical_cols}\")\n", "print()\n", "print(f\"Recommended algorithm: {algorithm.upper()}\")\n", "print()\n", "if algorithm == \"kprototypes\":\n", " print(\"K-Prototypes selected because the dataset contains both numerical and\")\n", " print(\"categorical columns. It combines Euclidean distance for spend features\")\n", " print(\"with simple matching distance for Channel and Region.\")" ] }, { "cell_type": "markdown", "id": "mdd777696a", "metadata": {}, "source": [ "### 6.2 Finding a Useful Number of Clusters\n", "\n", "A plain silhouette search can over-prefer **K = 2** when one or more influential features have cardinality two. That is mathematically valid, but it is not always the most useful segmentation answer.\n", "\n", "For each point $i$, silhouette is:\n", "\n", "$$\n", "s(i) = \\frac{b(i) - a(i)}{\\max(a(i), b(i))}\n", "$$\n", "\n", "where $a(i)$ is the mean distance from point $i$ to points in its own cluster, and $b(i)$ is the mean distance to the nearest other cluster. If a meaningful feature has cardinality two, it can create a strong binary partition in the distance geometry. When other features line up with that split, **K = 2** can maximise the average gap between clusters. As K increases, the nearest alternative cluster may become a neighbouring sub-segment inside the same binary side, so $b(i)$ shrinks and the global silhouette score can fall.\n", "\n", "For business segmentation we often want the next stable refinement, not just the coarsest separation. So we use `find_optimal_k` to calculate the silhouette curve, then select an interior post-2 local peak where:\n", "\n", "$$\n", "S(k) > S(k - 1) \\quad \\text{and} \\quad S(k) \\ge S(k + 1)\n", "$$\n", "\n", "That means silhouette improved despite adding another cluster, then stopped improving. If the best score is at the edge of the tested range, extend the range before treating it as a peak. If no post-2 local peak exists, we keep the global silhouette recommendation and note that the richer split is weak." ] }, { "cell_type": "code", "execution_count": 9, "id": "cd4682dbe9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Searching for silhouette scores in range [2, 7]...\n", "\n", "Global silhouette maximum : K = 2\n", "Confidence : Low\n", "Tutorial selection : K = 6\n", "Reasoning : Selected K=6: strongest post-2 local silhouette peak (0.3903).\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
KSilhouette ScoreDelta vs Previous KPost-2 Local Peak
020.5115
130.4784-0.0332
240.3901-0.0882
350.3833-0.0068
460.39030.007Yes
570.3297-0.0606
\n", "
" ], "text/plain": [ " K Silhouette Score Delta vs Previous K Post-2 Local Peak\n", "0 2 0.5115 \n", "1 3 0.4784 -0.0332 \n", "2 4 0.3901 -0.0882 \n", "3 5 0.3833 -0.0068 \n", "4 6 0.3903 0.007 Yes\n", "5 7 0.3297 -0.0606 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def clusterer_factory(k):\n", " config = ClusterConfig(\n", " name=\"k_search\",\n", " algorithm_type=\"partitional\",\n", " method=\"kmeans\",\n", " n_clusters=k,\n", " numerical_columns=numerical_cols,\n", " )\n", " return KMeansClusterer(config)\n", "\n", "print(\"Searching for silhouette scores in range [2, 7]...\\n\")\n", "\n", "k_result = find_optimal_k(\n", " data=df[numerical_cols],\n", " clusterer_factory=clusterer_factory,\n", " k_range=range(2, 8),\n", " method=\"silhouette\",\n", ")\n", "\n", "scores_by_k = {int(k): float(score) for k, score in sorted(k_result.scores.items())}\n", "ks = list(scores_by_k.keys())\n", "score_values = [scores_by_k[k] for k in ks]\n", "\n", "local_peak_ks = []\n", "score_rows = []\n", "for idx, k in enumerate(ks):\n", " score = score_values[idx]\n", " previous_score = score_values[idx - 1] if idx > 0 else np.nan\n", " next_score = score_values[idx + 1] if idx < len(score_values) - 1 else np.nan\n", " delta = score - previous_score if idx > 0 else np.nan\n", "\n", " is_post_2_peak = (\n", " idx > 0\n", " and idx < len(score_values) - 1\n", " and delta > 0\n", " and score >= next_score\n", " )\n", " if is_post_2_peak:\n", " local_peak_ks.append(k)\n", "\n", " score_rows.append({\n", " \"K\": k,\n", " \"Silhouette Score\": round(score, 4),\n", " \"Delta vs Previous K\": \"\" if np.isnan(delta) else round(delta, 4),\n", " \"Post-2 Local Peak\": \"Yes\" if is_post_2_peak else \"\",\n", " })\n", "\n", "if local_peak_ks:\n", " optimal_k = max(local_peak_ks, key=lambda k: scores_by_k[k])\n", " selection_reason = (\n", " f\"Selected K={optimal_k}: strongest post-2 local silhouette peak \"\n", " f\"({scores_by_k[optimal_k]:.4f}).\"\n", " )\n", "else:\n", " optimal_k = int(k_result.recommended_k)\n", " selection_reason = (\n", " f\"No post-2 local silhouette peak was found, so we keep the global \"\n", " f\"silhouette recommendation K={optimal_k}.\"\n", " )\n", "\n", "print(f\"Global silhouette maximum : K = {k_result.recommended_k}\")\n", "print(f\"Confidence : {str(k_result.confidence).title()}\")\n", "print(f\"Tutorial selection : K = {optimal_k}\")\n", "print(f\"Reasoning : {selection_reason}\")\n", "print()\n", "display(pd.DataFrame(score_rows))" ] }, { "cell_type": "code", "execution_count": 10, "id": "cd0a9ca367", "metadata": {}, "outputs": [ { "data": { "image/png": "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qIiIiIiIni5MEhIREVmJuNdfR0aHDoh7/XW5QykRhULA4lFOaBVoY9p3J1nE6OVapKSLMkZGRERERPT0YJKQiIiILJ7aRsDKiU54xufhksf/u23Emyu1yNZz7l4iIiIioifFJCERERFVCk72Cnw23Rk13B42X05fMWDWujQYucgXEREREdETYZKQiIiIKg0vVyU+m+4MVwfBtG//WT3e25IBSWKikIiIiIiotJgktFAO9rYYN7QXBvVqBwd726JPICIishK1q6nw6RRnaB5OUYjNv2Tj091Z8gVFRERERFTJMUlooTRqGzRrWA8NnvGHWm1T9AlERERWpGkdGywf7wTFww6FWBaViR2/ZssXFBERERFRJcYkIREREVVKLzbWYMFwR7N98zam49B5vUwRERERERFVXkwSWiijUURyShpS0zJgNIpyh0NERGSRBrW3xeTedqZtowhM+1SLP/7JkTEqIiIiIqLKh0lCC5WaloGQiHVYujYK2rQMucMhIiKyWFP62OPV9hrTdpYeGPeRFtfvGGWMioiIiIioclHJHQARERFVjKqhobgXG4uqfn5yh1KmBEFA2FBH3E2VcPCP3KHGyekS3liWiu2hrnB34WeiRERERERFYauZiIjISmiCgqBs0gSaoCC5QylzKqWAZeOc0LjWw88/b94VMXZFKtKzOW0HEREREVFRmCQkIiKip4KdRsCnU5wR4KU07bsUa8TU1WnQGyQZIyMiIiIisnxMEhIREdFTo6qTAutnOMPDRTDti76Ug3kb0yFJTBQSERERERWESUIiIiIrkbRoEbKmTUPSokVyh1KufNyVWDfNBQ62DxOF3/2mw9JvM2WMioiIiIjIsjFJSEREZCX0f/0F8dw56P/6S+5Qyt2zfiqsnOQEm4cjj7FuTxY2HciSLygiIiIiIgsme5Jw1apVCAgIgK2tLZo1a4ajR48WWDY6Ohpt27aFm5sb7OzsEBgYiGXLlpmV2bBhAwRByPOVnZ1d6vsSERFR5dMmSI3Fo53M9r2/LQO7T+lkioiIiIiIyHKpii5SfrZt24bp06dj1apVaNu2LdasWYMePXrgzz//hJ+fX57yDg4OmDx5Mho2bAgHBwdER0dj/PjxcHBwwLhx40zlnJ2dERMTY3aura1tqe8rBxcnB0SGjsXdpLtwdnKQOxwiIqJKqddzGiSkiIjcngEA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Y8cOzJo1C+vWrQMAqNVqAIDRaDSVffbZZ6HRaBAbG5vnd+Pr61vkY6lXrx5mzJiBffv2YcCAAfjiiy8KLNukSZMCG3wajQY7duzAc889h06dOuHixYtmx7Ozs3H16lU0adKkyJiIiIhIXmwPFo3twbzYHiSqOEwSElGFCA4OxtChQ/N8WtmxY0ckJiZiyZIluHr1KlauXImffvqpzO67cuVKREVF4a+//sKkSZOQnJyMN954A0Du5M337t3DkCFDTCui7du3D2+88YZZA6k43nrrLSxevBjbtm1DTEwMQkJCcO7cOUybNq1E11m1ahWMRiOee+45fPvtt7hy5QouX76Mjz76yGyozKMeNNTCwsLw999/48cff8QHH3xgVmb69OnYu3cvrl27hjNnzuDgwYOmBqu/vz8EQcCuXbuQmJiI9PR0ODk5Yfbs2ZgxYwY2btyIq1ev4uzZs1i5ciU2btxYYPxZWVmYPHkyDh06hH///Re//vorTp06VWjjuFu3bnka1I9Sq9X49ttv0aZNG7zwwgu4cOGC6djx48eh0WgK/N0QERGR5WB7sHjYHsyL7UGiisEkIRFVmPfeey/PUJKgoCCsWrUKK1euRKNGjXDy5Ml8V3orrcjISCxevBiNGjXC0aNH8d1338Hd3R0AUL16dfz6668wGo3o1q0bGjRogGnTpsHFxcVsvpvimDp1KmbNmoVZs2YhODgYe/bswffff4+6deuW6DoBAQE4c+YMOnXqhFmzZqFBgwbo0qULfv75Z6xevTrfc2xsbLBlyxb89ddfaNSoERYvXozw8HCzMkajEZMmTUJQUBC6d++OZ555BqtWrQIA1KhRAwsWLEBISAi8vLwwefJkALn19e677yIiIgJBQUHo1q0bfvjhBwQEBBQYv1KpRFJSEl5//XXUq1cPr776Knr06IEFCxYUeM6wYcPw559/IiYmpsAyNjY22L59O9q3b48XXnjBNIfOli1bMHToUNjb2xd4LhEREVkOtgeLxvZg/tgeJCp/gvT4OzQREVEFmzNnDlJTU7FmzZpin5OYmIjAwED8/vvvhTZUiYiIiMjysT1IJD/2JCQiItnNmzcP/v7+JRrWc+3aNaxatYoNQiIiIqKnANuDRPJjT0IiIiIiIiIiIiIrx56EREREREREREREVo5JQiIiIiIiIiIiIivHJCEREREREREREZGVY5KQiIiIiIiIiIjIyjFJSEREREREREREZOWYJCQiIiIiIiIiIrJyTBISERERERERERFZOSYJiYiIiIiIiIiIrByThERERERERERERFbu/wEdM5vd4LXkCQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Proceeding with K = 6 for the full K-Prototypes fit.\n" ] } ], "source": [ "fig, axes = plt.subplots(1, 2, figsize=(13, 5))\n", "fig.suptitle(\"Optimal K Selection — Wholesale Customer Spending\", fontsize=13, fontweight=\"bold\")\n", "\n", "BLUE, RED, GREY, GREEN = \"#2563EB\", \"#DC2626\", \"#64748B\", \"#059669\"\n", "\n", "deltas = [np.nan] + [score_values[i] - score_values[i - 1] for i in range(1, len(score_values))]\n", "\n", "ax = axes[0]\n", "ax.plot(ks, score_values, color=BLUE, lw=2.5, marker=\"o\", markersize=7)\n", "ax.axvline(k_result.recommended_k, color=GREY, ls=\"--\", lw=1.6, label=f\"Global max = K {k_result.recommended_k}\")\n", "ax.axvline(optimal_k, color=RED, ls=\"--\", lw=1.8, label=f\"Tutorial choice = K {optimal_k}\")\n", "if local_peak_ks:\n", " ax.scatter(local_peak_ks, [scores_by_k[k] for k in local_peak_ks], color=RED, s=90, zorder=4)\n", "ax.set_xlabel(\"Number of Clusters (K)\")\n", "ax.set_ylabel(\"Silhouette Score\")\n", "ax.set_title(\"Silhouette Score vs K\", fontweight=\"bold\")\n", "ax.xaxis.set_major_locator(mticker.MultipleLocator(1))\n", "ax.legend(fontsize=9)\n", "ax.grid(True, alpha=0.3)\n", "\n", "ax = axes[1]\n", "bar_ks = ks[1:]\n", "bar_deltas = deltas[1:]\n", "bar_colours = [RED if k == optimal_k else (GREEN if delta > 0 else GREY) for k, delta in zip(bar_ks, bar_deltas)]\n", "ax.axhline(0, color=\"#111827\", lw=1)\n", "ax.bar(bar_ks, bar_deltas, color=bar_colours, alpha=0.85, edgecolor=\"white\", linewidth=0.8)\n", "ax.set_xlabel(\"Number of Clusters (K)\")\n", "ax.set_ylabel(\"Delta vs Previous K\")\n", "ax.set_title(\"Silhouette Gain from Adding a Cluster\", fontweight=\"bold\")\n", "ax.xaxis.set_major_locator(mticker.MultipleLocator(1))\n", "ax.grid(axis=\"y\", alpha=0.3)\n", "\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "print(f\"\\nProceeding with K = {optimal_k} for the full K-Prototypes fit.\")" ] }, { "cell_type": "markdown", "id": "md347da328", "metadata": {}, "source": [ "### 6.3 Fitting K-Prototypes\n", "\n", "With the tutorial K established from the silhouette local-peak rule, we fit K-Prototypes across all 8 features. Huang's gamma balances the overall categorical contribution against the numerical distance. Categorical weights then redistribute that categorical budget across Channel and Region, so a more useful categorical column can count more than a weaker one without changing the overall gamma scale. After fitting, BitBullet stores the resolved `gamma_by_column` and `categorical_weights_by_column` values in `clusterer.state.fitted_params` so future assignments can reproduce the same distance calculation exactly." ] }, { "cell_type": "code", "execution_count": 11, "id": "cd8f9f20db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting kprototypes...\n", "Calculating gamma using 'huang' method...\n", "Gamma = 3497.7919\n", "Calculating categorical weights using 'relevance' method...\n", "Applying per-feature weights. Gamma range: [1786.6539, 5208.9299]\n", "Initialization method and algorithm are deterministic. Setting n_init to 1.\n", "\n", "Fitting K-Prototypes (n_clusters=6)...\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Starting iterations...\n", "Starting iterations...\n", "Init: initializing centroids\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Starting iterations...\n", "Starting iterations...\n", "Init: initializing centroids\n", "Starting iterations...\n", "Starting iterations...\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Init: initializing clusters\n", "Starting iterations...\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Starting iterations...\n", "Run: 1, iteration: 1/100, moves: 70, ncost: 49649392753.392715\n", "Run: 2, iteration: 1/100, moves: 180, ncost: 51308332205.64385\n", "Run: 7, iteration: 1/100, moves: 130, ncost: 51682792308.93562\n", "Starting iterations...\n", "Run: 4, iteration: 1/100, moves: 130, ncost: 65414946639.87763\n", "Run: 5, iteration: 1/100, moves: 94, ncost: 51819045722.895485\n", "Init: initializing centroids\n", "Run: 1, iteration: 2/100, moves: 16, ncost: 49298549332.669174\n", "Init: initializing clusters\n", "Run: 7, iteration: 2/100, moves: 28, ncost: 49065141592.241196\n", "Run: 2, iteration: 2/100, moves: 63, ncost: 48301610492.62795\n", "Run: 3, iteration: 1/100, moves: 129, ncost: 54918192783.91495\n", "Run: 4, iteration: 2/100, moves: 79, ncost: 57312279566.96777\n", "Run: 1, iteration: 3/100, moves: 10, ncost: 48332061568.87334\n", "Run: 7, iteration: 3/100, moves: 15, ncost: 48453376935.35493\n", "Run: 5, iteration: 2/100, moves: 43, ncost: 47648855855.11714\n", "Run: 2, iteration: 3/100, moves: 10, ncost: 47828884263.17672\n", "Run: 6, iteration: 1/100, moves: 127, ncost: 59931196650.75278\n", "Init: initializing centroids\n", "Init: initializing clusters\n", "Run: 3, iteration: 2/100, moves: 78, ncost: 51340773812.6057\n", "Run: 9, iteration: 1/100, moves: 82, ncost: 58933184277.77784\n", "Run: 1, iteration: 4/100, moves: 5, ncost: 47669234105.81741\n", "Run: 4, iteration: 3/100, moves: 47, ncost: 56249512450.14134\n", "Run: 7, iteration: 4/100, moves: 3, ncost: 48227652054.49703\n", "Run: 2, iteration: 4/100, moves: 9, ncost: 47794026754.00624\n", "Run: 5, iteration: 3/100, moves: 10, ncost: 47407916731.60952\n", "Run: 3, iteration: 3/100, moves: 53, ncost: 49172026027.47575\n", "Run: 8, iteration: 1/100, moves: 117, ncost: 48199476104.368126\n", "Starting iterations...\n", "Run: 1, iteration: 5/100, moves: 1, ncost: 47668348996.0103\n", "Run: 4, iteration: 4/100, moves: 42, ncost: 54332538127.34818\n", "Run: 7, iteration: 5/100, moves: 10, ncost: 47882352428.88638\n", "Run: 2, iteration: 5/100, moves: 3, ncost: 47786508436.10258\n", "Run: 5, iteration: 4/100, moves: 7, ncost: 46993091189.986496\n", "Run: 6, iteration: 2/100, moves: 71, ncost: 56984069126.89836\n", "Run: 3, iteration: 4/100, moves: 32, ncost: 47892857341.56697\n", "Run: 1, iteration: 6/100, moves: 0, ncost: 47668348996.0103\n", "Run: 9, iteration: 2/100, moves: 46, ncost: 52882785311.721466\n", "Run: 7, iteration: 6/100, moves: 4, ncost: 47793652177.47762\n", "Run: 4, iteration: 5/100, moves: 51, ncost: 50887690839.78267\n", "Run: 5, iteration: 5/100, moves: 2, ncost: 46986315331.912796\n", "Run: 2, iteration: 6/100, moves: 0, ncost: 47786508436.10258\n", "Run: 3, iteration: 5/100, moves: 19, ncost: 47666655863.303474\n", "Run: 8, iteration: 2/100, moves: 27, ncost: 47754445955.88371\n", "Run: 6, iteration: 3/100, moves: 73, ncost: 52136709109.60636\n", "Run: 7, iteration: 7/100, moves: 6, ncost: 47763755780.27575\n", "Run: 5, iteration: 6/100, moves: 1, ncost: 46984794187.20419\n", "Run: 9, iteration: 3/100, moves: 23, ncost: 51481027287.35657\n", "Run: 4, iteration: 6/100, moves: 30, ncost: 48959749757.79218\n", "Run: 3, iteration: 6/100, moves: 11, ncost: 47528644509.02759\n", "Run: 6, iteration: 4/100, moves: 45, ncost: 50253091517.93228\n", "Run: 10, iteration: 1/100, moves: 90, ncost: 59083225690.359116\n", "Run: 7, iteration: 8/100, moves: 2, ncost: 47685487773.957695\n", "Run: 5, iteration: 7/100, moves: 0, ncost: 46984794187.20419\n", "Run: 9, iteration: 4/100, moves: 23, ncost: 47696913389.91361\n", "Run: 4, iteration: 7/100, moves: 19, ncost: 48207937033.868996\n", "Run: 3, iteration: 7/100, moves: 4, ncost: 47516544907.77154\n", "Run: 8, iteration: 3/100, moves: 7, ncost: 47691343472.49512\n", "Run: 6, iteration: 5/100, moves: 19, ncost: 48553154878.49\n", "Run: 7, iteration: 9/100, moves: 5, ncost: 47274647130.41096\n", "Run: 10, iteration: 2/100, moves: 29, ncost: 56289824356.230644\n", "Run: 9, iteration: 5/100, moves: 8, ncost: 47315399345.09145\n", "Run: 4, iteration: 8/100, moves: 7, ncost: 47953054232.44269\n", "Run: 3, iteration: 8/100, moves: 0, ncost: 47516544907.77154\n", "Run: 6, iteration: 6/100, moves: 15, ncost: 48086820664.54063\n", "Run: 7, iteration: 10/100, moves: 0, ncost: 47274647130.41096\n", "Run: 9, iteration: 6/100, moves: 7, ncost: 46989966012.00096\n", "Run: 10, iteration: 3/100, moves: 22, ncost: 54193989336.3235\n", "Run: 4, iteration: 9/100, moves: 4, ncost: 47716322402.81821\n", "Run: 8, iteration: 4/100, moves: 3, ncost: 47682029908.17376\n", "Run: 6, iteration: 7/100, moves: 5, ncost: 47851644388.32763\n", "Run: 9, iteration: 7/100, moves: 10, ncost: 46780813589.77353\n", "Run: 10, iteration: 4/100, moves: 13, ncost: 53864785435.76567\n", "Run: 4, iteration: 10/100, moves: 5, ncost: 47610834134.838905\n", "Run: 8, iteration: 5/100, moves: 0, ncost: 47682029908.17376\n", "Run: 6, iteration: 8/100, moves: 4, ncost: 47604974300.35931\n", "Run: 9, iteration: 8/100, moves: 1, ncost: 46776955072.002396\n", "Run: 10, iteration: 5/100, moves: 12, ncost: 53754873397.0775\n", "Run: 4, iteration: 11/100, moves: 3, ncost: 47595685970.181305\n", "Run: 6, iteration: 9/100, moves: 7, ncost: 47548639341.52393\n", "Run: 9, iteration: 9/100, moves: 1, ncost: 46775028002.47143\n", "Run: 10, iteration: 6/100, moves: 9, ncost: 53661130319.79628\n", "Run: 4, iteration: 12/100, moves: 5, ncost: 47576285369.82584\n", "Run: 6, iteration: 10/100, moves: 2, ncost: 47472063926.32072\n", "Run: 9, iteration: 10/100, moves: 0, ncost: 46775028002.47143\n", "Run: 4, iteration: 13/100, moves: 0, ncost: 47576285369.82584\n", "Run: 10, iteration: 7/100, moves: 13, ncost: 52231041788.457535\n", "Run: 6, iteration: 11/100, moves: 5, ncost: 47441530524.503624\n", "Run: 10, iteration: 8/100, moves: 13, ncost: 51803332200.7302\n", "Run: 6, iteration: 12/100, moves: 3, ncost: 47434954413.24388\n", "Run: 10, iteration: 9/100, moves: 8, ncost: 51752174729.57088\n", "Run: 6, iteration: 13/100, moves: 0, ncost: 47434954413.24388\n", "Run: 10, iteration: 10/100, moves: 3, ncost: 51727649570.51242\n", "Run: 10, iteration: 11/100, moves: 0, ncost: 51727649570.51242\n", "Best run was number 9\n", "Clustering complete. Final cost: 46775028002.47\n", "Fitted kprototypes. Found 6 clusters.\n", "\n", "Fitting complete — 6 clusters across 440 customers.\n" ] } ], "source": [ "config = ClusterConfig(\n", " name=\"wholesale_segments\",\n", " algorithm_type=\"partitional\",\n", " method=\"kprototypes\",\n", " n_clusters=optimal_k,\n", " numerical_columns=numerical_cols,\n", " categorical_columns=categorical_cols,\n", " params={\n", " \"gamma\": \"huang\",\n", " \"categorical_weights\": \"relevance\",\n", " \"init\": \"Cao\",\n", " \"n_init\": 10,\n", " },\n", ")\n", "\n", "clusterer = KPrototypesClusterer(config)\n", "clusterer.fit(df, verbose=True)\n", "\n", "labels = clusterer.labels_\n", "print(f\"\\nFitting complete — {len(np.unique(labels))} clusters across {len(labels):,} customers.\")" ] }, { "cell_type": "markdown", "id": "mdf4a279e5", "metadata": {}, "source": [ "## 7. Evaluation Metrics" ] }, { "cell_type": "code", "execution_count": 12, "id": "cdd5c639da", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "════════════════════════════════════════════════════════════\n", " CLUSTERING EVALUATION REPORT\n", "════════════════════════════════════════════════════════════\n", " Silhouette score : 0.3766\n", " Calinski-Harabasz : 205.65\n", " Davies-Bouldin : 0.9558\n", " Overall quality score : 6.98 / 10\n", " Quality label : Good\n", "\n", " Cluster sizes:\n", " Cluster 0 → 22 customers (5.0%)\n", " Cluster 1 → 7 customers (1.6%)\n", " Cluster 2 → 80 customers (18.2%)\n", " Cluster 3 → 3 customers (0.7%)\n", " Cluster 4 → 224 customers (50.9%)\n", " Cluster 5 → 104 customers (23.6%)\n", "\n", " Insights:\n", " [POSITIVE] Clustering quality is Good (7.0/10)\n", " [MEDIUM] Cluster 1 is weakly defined (avg silhouette: 0.12)\n", " [MEDIUM] Cluster 1 is very small (7 samples, 1.6% of data)\n", " [MEDIUM] Cluster 2 is weakly defined (avg silhouette: 0.28)\n", " [MEDIUM] Cluster 3 is weakly defined (avg silhouette: 0.01)\n", " [MEDIUM] Cluster 3 is very small (3 samples, 0.7% of data)\n", " [LOW] Cluster 4 is very large (224 samples, 50.9% of data)\n", " [MEDIUM] Clusters are highly imbalanced in size\n" ] } ], "source": [ "report = evaluate_clustering(df[numerical_cols], labels)\n", "\n", "print(\"\\u2550\" * 60)\n", "print(\" CLUSTERING EVALUATION REPORT\")\n", "print(\"\\u2550\" * 60)\n", "print(f\" Silhouette score : {report.metrics.silhouette:.4f}\")\n", "print(f\" Calinski-Harabasz : {report.metrics.calinski_harabasz:.2f}\")\n", "print(f\" Davies-Bouldin : {report.metrics.davies_bouldin:.4f}\")\n", "print(f\" Overall quality score : {report.metrics.overall_quality:.2f} / 10\")\n", "print(f\" Quality label : {report.metrics.quality_label}\")\n", "print()\n", "print(\" Cluster sizes:\")\n", "for cid, cnt in sorted(report.cluster_sizes.items()):\n", " print(f\" Cluster {cid} \\u2192 {cnt:,} customers ({cnt / len(labels):.1%})\")\n", "print()\n", "if report.insights:\n", " print(\" Insights:\")\n", " for insight in report.insights:\n", " severity_tag = f\"[{insight.severity.upper()}] \" if hasattr(insight, 'severity') and insight.severity else \"\"\n", " print(f\" {severity_tag}{insight.message}\")" ] }, { "cell_type": "markdown", "id": "mdbdca66ab", "metadata": {}, "source": [ "## 8. Cluster Profiling" ] }, { "cell_type": "code", "execution_count": 13, "id": "cd1973ac2a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "══════════════════════════════════════════════════════════════════════\n", " CLUSTER PROFILES\n", "══════════════════════════════════════════════════════════════════════\n", "\n", " Cluster 0 — 22 customers (5.0%)\n", " Suggested label : Moderately High Frozen · Very High Fresh\n", " Key characteristics:\n", " • Niche segment (5.0% of population)\n", " • Fresh: 317.1% higher than average (50049.68 vs population 12000.30)\n", " • Milk: 23.3% lower than average (4447.41 vs population 5796.27)\n", " • Grocery: 34.3% lower than average (5225.05 vs population 7951.28)\n", " • Frozen: 91.9% higher than average (5895.64 vs population 3071.93)\n", " • Detergents_Paper: 67.1% lower than average (948.18 vs population 2881.49)\n", " • Delicassen: 57.7% higher than average (2404.36 vs population 1524.87)\n", "\n", " Cluster 1 — 7 customers (1.6%)\n", " Suggested label : Very High Detergents_Paper · Very High Milk\n", " Key characteristics:\n", " • Niche segment (1.6% of population)\n", " • Channel: Predominantly Retail (100.0%) vs population Horeca\n", " • Fresh: 66.9% higher than average (20031.29 vs population 12000.30)\n", " • Milk: 557.0% higher than average (38084.00 vs population 5796.27)\n", " • Grocery: 605.9% higher than average (56126.14 vs population 7951.28)\n", " • Detergents_Paper: 859.4% higher than average (27644.57 vs population 2881.49)\n", " • Delicassen: 67.1% higher than average (2548.14 vs population 1524.87)\n", "\n", " Cluster 2 — 80 customers (18.2%)\n", " Suggested label : High Detergents_Paper · Moderately High Milk\n", " Key characteristics:\n", " • Channel: Predominantly Retail (91.2%) vs population Horeca\n", " • Fresh: 60.6% lower than average (4724.21 vs population 12000.30)\n", " • Milk: 104.2% higher than average (11837.01 vs population 5796.27)\n", " • Grocery: 132.2% higher than average (18461.59 vs population 7951.28)\n", " • Frozen: 49.7% lower than average (1546.58 vs population 3071.93)\n", " • Detergents_Paper: 184.4% higher than average (8195.89 vs population 2881.49)\n", "\n", " Cluster 3 — 3 customers (0.7%)\n", " Suggested label : Very High Delicassen · Very High Frozen\n", " Key characteristics:\n", " • Niche segment (0.7% of population)\n", " • Fresh: 166.5% higher than average (31979.00 vs population 12000.30)\n", " • Milk: 458.7% higher than average (32385.67 vs population 5796.27)\n", " • Grocery: 134.0% higher than average (18605.00 vs population 7951.28)\n", " • Frozen: 1012.8% higher than average (34185.67 vs population 3071.93)\n", " • Detergents_Paper: 32.3% lower than average (1949.33 vs population 2881.49)\n", " • Delicassen: 1431.8% higher than average (23358.33 vs population 1524.87)\n", "\n", " Cluster 4 — 224 customers (50.9%)\n", " Suggested label : Moderately Low Fresh · Horeca\n", " Key characteristics:\n", " • Dominant segment (50.9% of population)\n", " • Fresh: 49.4% lower than average (6072.05 vs population 12000.30)\n", " • Milk: 43.2% lower than average (3292.95 vs population 5796.27)\n", " • Grocery: 48.1% lower than average (4122.93 vs population 7951.28)\n", " • Frozen: 20.2% lower than average (2451.99 vs population 3071.93)\n", " • Detergents_Paper: 57.5% lower than average (1224.50 vs population 2881.49)\n", " • Delicassen: 34.6% lower than average (996.64 vs population 1524.87)\n", "\n", " Cluster 5 — 104 customers (23.6%)\n", " Suggested label : Moderately High Fresh · Horeca\n", " Key characteristics:\n", " • Fresh: 76.7% higher than average (21200.06 vs population 12000.30)\n", " • Milk: 32.9% lower than average (3886.42 vs population 5796.27)\n", " • Grocery: 35.4% lower than average (5138.93 vs population 7951.28)\n", " • Frozen: 34.1% higher than average (4119.86 vs population 3071.93)\n", " • Detergents_Paper: 60.7% lower than average (1131.52 vs population 2881.49)\n" ] } ], "source": [ "profiles = profile_clusters(df, labels)\n", "\n", "print(\"\\u2550\" * 70)\n", "print(\" CLUSTER PROFILES\")\n", "print(\"\\u2550\" * 70)\n", "\n", "for profile in profiles.cluster_profiles:\n", " print(f\"\\n Cluster {profile.cluster_id} \\u2014 {profile.size:,} customers ({profile.percentage:.1f}%)\")\n", " print(f\" Suggested label : {profile.suggested_label}\")\n", " print(f\" Key characteristics:\")\n", " for char in profile.key_characteristics:\n", " print(f\" \\u2022 {char}\")" ] }, { "cell_type": "markdown", "id": "md2ed28106", "metadata": {}, "source": [ "### 8.1 Feature Importance — What Separates Wholesale Segments?" ] }, { "cell_type": "code", "execution_count": 14, "id": "cdde805a81", "metadata": {}, "outputs": [ { "data": { "image/png": "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mTk2Z/Z44iir+4ZjfOXKlUv1i7uxY8cmmzYj2y69bVqtWjX9/vvv+ueff7RkyRK99dZbKlu2rC5duqRBgwYl+7+V9D/a09NToaGhac4btweSPACpql27tvV669atTuPuu+8+6/XkyZO1fft2nT17VoMHD06xC3vHf6gBAQGy2WxasGCBvv/++xuO85133lHHjh0lScuWLVO7du2sb9Tbt29v1YuJidHmzZuVkJCgU6dOadGiRercubPGjRt3wzFkp/fee0/vvfeejh07pqpVq6pTp06qW7euNf7QoUPW66R/5idPntSRI0cytZwHHnjAej158mRt3bpVcXFxGj58uPXNfoUKFVSyZMlMr0PTpk2tK2XfffedFi1apPPnz+v999/Xxo0bk9Vv166d9fq1117TwoULdeHCBZ0/f14bNmxQv3790v1CID1lypSxrgKcOHFCL7/8suLi4rRhwwa99957GZ7P119/rTfeeEP79+9X+fLl1bFjR6eT8KTPxzHe559/Xj/88IPOnz+vI0eOaPr06emenN4qHPdtDw8P+fv769ixY3rhhRdSrO94Anrw4EGnH3D29fVVs2bNJEnGGPXv31+nTp3S3r179dJLL1n1HNvujbp69aoGDRqkM2fOaMeOHZo4caI1Luk453gcGTp0qFatWqX4+HjFxsZq5cqV6tGjh2JiYlJcx507dybr8bJAgQKqUqWKpGs9X8bHx6tBgwaSZP1dsGCBJCkoKEh33XWXNW1SLMYYde/eXTt37tSVK1d07NgxffXVV2rRooU++ugjSTmzX10vo/tHZo7NmT2eZIdSpUrpzjvvlCT99ddfGjRokI4ePaorV65o3759evvtt1W5cuVMfUHkKK39QJJeeOEFzZ8/X1evXlX9+vXVpUsX64q9McbpizhjjPU/ulatWplKyuHCsvv+TwCu4+LFi1avc44dJxiTeu+afn5+xs/Pz3qf5NVXX01W183NzZQsWdJ6P2vWLKt+Ullqz7Bd/6xUQkKCadGihVXWqlUrk5CQYOLj4506DUhpcHxmxvGZvNzyxBNPpBqrh4eH1SujMf/XSYvj0L17d2NM+s8F2e1206FDh1SX5efn59SJjePzOo7PvqS2nJR6w5NkihQpYr1euXKlVd/xubiUBsfnVlKLJT1ffvllir1rOvZOmd4zeY4dEqU0fPfdd8aYrPWu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VLRoUVWvXl0vvPCCFixYoB9++MG6GhcbG6unnnpKhQoVUlBQkBo3bqzff/891Xlef7um3W7X+PHjVapUKXl7e6t48eJ65ZVXrPFDhgxRmTJl5OfnpzvuuEPDhw/XlStXrPG///67GjVqpMDAQAUFBalGjRr69ddfJUkHDx5UmzZtlC9fPvn7+6tixYpatGiRNe2OHTvUqlUrBQQEqHDhwnrsscd08uRJa3zDhg3Vt29fPffcc8qfP7/CwsI0atSoG9yqAAAAAHLbbZvkpaRx48aqUqWK5s2bJ2OMWrdurWPHjmnRokXavHmzqlevriZNmuj06dMZmt/QoUM1fvx4DR8+XDt27NAnn3yiwoULW+MDAwM1e/Zs7dixQ2+88Ybee+89TZ482RrftWtXFStWTJs2bdLmzZv1/PPPy9PTU5IUExOjhIQErV69Wtu3b9f48eMVEBAgSTp69KgaNGigqlWr6tdff9XixYv133//qUuXLk7xzZkzR/7+/vrll1/02muv6aWXXtKyZctSXZ+EhATFxcU5DQAAAADyFo/cDiCvKVeunLZt26YVK1Zo+/btOn78uLy9vSVJEydO1DfffKOvvvpKTz31VJrzOXfunN544w29+eab6t69uySpZMmSuueee6w6L774ovU6KipKAwcO1Oeff67nnntOknTo0CENHjxY5cqVkySVLl3aqn/o0CF17NhRlSpVkiTdcccd1rjp06erevXqGjt2rFU2c+ZMRUREaNeuXSpTpowkqXLlyho5cqQ17zfffFPLly9Xs2bNUlyncePGafTo0WmuNwAAAIDcRZJ3HWOMbDabNm/erPPnzys0NNRp/KVLl7R3795057Nz504lJCSoSZMmqdb56quvNGXKFO3Zs0fnz5/X1atXFRQUZI0fMGCAnnzySX300Udq2rSpOnfurJIlS0qS+vbtq2eeeUZLly5V06ZN1bFjR1WuXFmStHnzZq1YscK6sudo7969Tkmeo/DwcB0/fjzVeIcOHaoBAwZY7+Pi4hQREZHutgAAAACQc7hd8zo7d+5UiRIlZLfbFR4erq1btzoNf//9twYPHpzufHx9fdMcv2HDBj300ENq2bKlFi5cqC1btmjYsGG6fPmyVWfUqFH6888/1bp1a/3000+qUKGC5s+fL0l68skntW/fPj322GPavn27atasqWnTpkm69ixg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yZNls9lUtmxZbd++XZMnT9b//vc/7d27V59++qkOHz6sIkWKSJIGDRqkxYsXa9asWRo7dqyka0nl22+/rSpVqqQZY0JCghISEqz3cXFxWVpXAAAAADdPtiV5xhjZbDZt3rxZ58+fV2hoqNP4S5cuae/evalOn9HpIiMjrQRPkv7++29FREQ4JV61atVKNu89e/YoMDDQqTw+Pt5p3hUrVpS7u7v1Pjw8XNu3b09rtdW3b18988wzWrp0qZo2baqOHTuqcuXKaU7jqG7dunJzc9PFixcVHh6u2bNnq1KlSkpMTNSrr76qzz//XEeOHLESLH9/f6fp7777bitxlaQ6depo0qRJSkxM1G+//SZjjMqUKeM0TUJCgtN29vLyylDM48aN0+jRozO8bgAAAAByXrYleTt37lSJEiVkt9sVHh7u9NxXkpCQkFSnz+h01yc5ScllWux2u2rUqKG5c+cmG+eYMHp6ejqNs9ls6XZC8uSTT6p58+b6/vvvtXTpUo0bN06TJk1Snz590pwuyeeff64KFSpYz9QlmTRpkiZPnqwpU6aoUqVK8vf317PPPut0e2l67Ha73N3dtXnzZqfkVZLTLaW+vr7pbkNJGjp0qAYMGGC9j4uLU0RERIbjAQAAAHDzZUuSl3SrZf/+/VWsWDEdO3ZMHh4eioqKSrG+l5eXEhMTncqqV6+e7nQpKVeunA4dOqT//vtPhQsXliRt2rQp2bw///xzq0OXrEopbunaLZM9e/ZUz549NXToUL333nsZTvIiIiJUsmTJZOU///yz2rZtq0cffVTStYRt9+7dKl++vFO9DRs2JHtfunRpubu7q1q1akpMTNTx48d17733ZnQ1U+Xt7W3dSgsAAAAgb8p0xysJCQk6duyYjhw5ot9++01jx45V27Ztdf/996tbt25q2rSp6tSpo3bt2mnJkiU6cOCA1q1bpxdffFG//vqrpGu/N7d//35t3bpVJ0+eVEJCQoamS0mzZs1UsmRJde/eXdu2bdPatWutjleSrk517dpVBQoUUNu2bfXzzz9r//79WrVqlfr166fDhw9neN2joqK0evVqHTlyRCdPnpQkPfvss1qyZIn279+v3377TT/99FOyRCwrSpUqpWXLlmndunXauXOnnn76aR07dixZvX/++UcDBgzQ33//rU8//VTTpk1Tv379JEllypRR165d1a1bN82bN0/79+/Xpk2bNH78+Ez1AAoAAADg1pHpJG/x4sUKDw9XVFSUWrRooRUrVmjq1KlasGCB3N3dZbPZtGjRItWvX189evRQmTJl9NBDD+nAgQPWlbaOHTuqRYsWatSokQoWLKhPP/00Q9OlxN3dXd98843Onz+vu+66S08++aRefPFFSZKPj4+ka71Wrl69WsWLF1eHDh1Uvnx59ejRQ5cuXcrUlb2XXnpJBw4cUMmSJa3bPBMTExUTE6Py5curRYsWKlu2rN5+++3MbtZkhg8frurVq6t58+Zq2LChwsLC1K5du2T1unXrpkuXLqlWrVqKiYlRnz59rE5qpGsdzHTr1k0DBw5U2bJl9cADD+iXX37hNksAAADARdmM44+quYi1a9fqnnvu0Z49e1K8FdJVNGzYUFWrVtWUKVNyZflxcXEKDg5WqW57ZfPM+m2wuD242YzKFjqjv4/nk92k/wwobm+0l4zZMDm/8gdmy68h3fLsdruOHz+uQoUKyc2NbYK00V6QGXmpvSSdf8fGxqZ5sSrbOl7JTfPnz1dAQIBKly6tPXv2qF+/fqpXr55LJ3gAAAAAkBKX+Ori3Llz6tWrl8qVK6fo6GjdddddWrBgQa7G1LNnTwUEBKQ49OzZM1djAwAAAOC6XOJKXrdu3dStW7fcDsPJSy+95PRj5o5upIdPRyn93AQAAACA25tLJHl5UaFChVSoUKHcDgMAAADAbcYlbtcEAAAAAFxDkgcAAAAALoQkDwAAAABcCEkeAAAAALgQkjwAAAAAcCEkeQAAAADgQkjyAAAAAMCFkOQBAAAAgAvhx9Bxw5aNCVFQSEhuh4E8ztjtOn36ivLnzyebG98vIW20l4zxcM/tCAAAeRFJHm5YSKCbQgI5CUPa7HbpyiU35Qt0kxsn7UgH7QUAgKzjPycAAAAAuBCSPAAAAABwISR5AAAAAOBCSPIAAAAAwIWQ5AEAAACACyHJAwAAAAAXQpIHAAAAAC6E38nDDYuLN3KLN7kdBvI4u93o4mVzrb240V6QtlulvXi4SX5ettwOAwAAJyR5uGEvLLwqT7+ruR0G8jib7Crsnqj/Eq/KcBMB0nGrtJc3OvBvFACQ9+Td/5wAAAAAgEwjyQMAAAAAF0KSBwAAAAAuhCQPAAAAAFwISR4AAAAAuBCSPAAAAABwISR5AAAAAOBCSPIAAAAAwIWQ5AEAAACACyHJAwAAAAAXQpIHAAAAAC6EJM+FNWzYUM8++6z1PioqSlOmTLHe22w2ffPNNzkeFwAAAICbhyTvFhMdHS2bzaaePXsmG9erVy/ZbDZFR0dLkubNm6eXX345hyMEAAAAkJtI8m5BERER+uyzz3Tp0iWrLD4+Xp9++qmKFy9uleXPn1+BgYG5ESIAAACAXEKSdwuqXr26ihcvrnnz5lll8+bNU0REhKpVq2aVXX+7ZnpeeuklFS5cWFu3bs3GaAEAAADkJJK8W9Tjjz+uWbNmWe9nzpypHj16ZGlexhj169dPH3zwgdasWaOqVaumWC8hIUFxcXFOAwAAAIC8hSTvFvXYY49pzZo1OnDggA4ePKi1a9fq0UcfzfR8rl69qm7dumnp0qVau3atSpcunWrdcePGKTg42BoiIiJuZBUAAAAA3AQeuR0AsqZAgQJq3bq15syZI2OMWrdurQIFCmR6Pv3795e3t7c2bNiQ7vRDhw7VgAEDrPdxcXEkegAAAEAew5W8W1iPHj00e/ZszZkzJ8u3ajZr1kxHjhzRkiVL0q3r7e2toKAgpwEAAABA3sKVvFtYixYtdPnyZUlS8+bNszSPBx54QG3atNEjjzwid3d3PfTQQ9kZIgAAAIAcRpJ3C3N3d9fOnTut11nVvn17ffTRR3rsscfk4eGhTp06ZVeIAAAAAHIYSd4tLrtumezUqZPsdrsee+wxubm5qUOHDtkyXwAAAAA5iyTvFjN79uw0x3/zzTfW65UrVzqNO3DggNN7Y4zT+y5duqhLly43EB0AAACA3EbHKwAAAADgQkjyAAAAAMCFkOQBAAAAgAshyQMAAAAAF0KSBwAAAAAuhCQPAAAAAFwISR4AAAAAuBCSPAAAAABwISR5AAAAAOBCSPIAAAAAwIWQ5AEAAACAC/HI7QBw6xt7v4dCQmhKSJvdbtfpk+7KX8BDbm58v4S03SrtxSPvhgYAuI1xZo4bFuRjU5CPLbfDQB5nt9sU73Wtrbi50V6QNtoLAABZx3eQAAAAAOBCSPIAAAAAwIWQ5AEAAACACyHJAwAAAAAXQpIHAAAAAC6EJA8AAAAAXAhJHgAAAAC4EH4nDzcsLt7ILd7kdhjI4+x2o4uXzbX24kZ7QdryWnvxcJP8vPi9PgDArYEkDzfshYVX5el3NbfDQB5nk12F3RP1X+JVGW4iQDryWnt5owP/LgEAt47c/88JAAAAAMg2JHkAAAAA4EJI8gAAAADAhZDkAQAAAIALIckDAAAAABdCkgcAAAAALoQkDwAAAABcCEkeAAAAALgQkjwAAAAAcCEkeQAAAADgQkjyAAAAAMCFkOQBAAAAgAshycsmx44dU79+/VSqVCn5+PiocOHCuueee/TOO+/o4sWLuR0eAAAAgNuER24H4Ar27dunevXqKSQkRGPHjlWlSpV09epV7dq1SzNnzlSRIkX0wAMPJJvuypUr8vT0zPF4L1++LC8vrxxfLgAAAICbjyt52aBXr17y8PDQr7/+qi5duqh8+fKqVKmSOnbsqO+//15t2rSRJNlsNr3zzjtq27at/P39NWbMGEnS9OnTVbJkSXl5eals2bL66KOPnOZ/9uxZPfXUUypcuLB8fHx05513auHChdb4devWqX79+vL19VVERIT69u2rCxcuWOOjoqI0ZswYRUdHKzg4WP/73//UuHFj9e7d22k5p06dkre3t3766aebtakAAAAA3GQkeTfo1KlTWrp0qWJiYuTv759iHZvNZr0eOXKk2rZtq+3bt6tHjx6aP3+++vXrp4EDB+qPP/7Q008/rccff1wrVqyQJNntdrVs2VLr1q3Txx9/rB07dujVV1+Vu7u7JGn79u1q3ry5OnTooG3btunzzz/XmjVrkiVwEyZM0J133qnNmzdr+PDhevLJJ/XJJ58oISHBqjN37lwVKVJEjRo1SnE9EhISFBcX5zQAAAAAyFu4XfMG7dmzR8YYlS1b1qm8QIECio+PlyTFxMRo/PjxkqRHHnlEPXr0sOo98sgjio6OVq9evSRJAwYM0IYNGzRx4kQ1atRIP/74ozZu3KidO3eqTJkykqQ77rjDmn7ChAl65JFH9Oyzz0qSSpcuralTp6pBgwaaPn26fHx8JEmNGzfWoEGDrOkiIiLUp08fLViwQF26dJEkzZo1S9HR0U5JqaNx48Zp9OjRWd5WAAAAAG4+ruRlk+sTo40bN2rr1q2qWLGi09WymjVrOtXbuXOn6tWr51RWr1497dy5U5K0detWFStWzErwrrd582bNnj1bAQEB1tC8eXPZ7Xbt378/1eV6e3vr0Ucf1cyZM63l/P7774qOjk51HYcOHarY2Fhr+Oeff1KtCwAAACB3cCXvBpUqVUo2m01//fWXU3nS1TZfX1+n8pRu6bw+QTTGWGXXT389u92up59+Wn379k02rnjx4mku98knn1TVqlV1+PBhzZw5U02aNFFkZGSqy/L29pa3t3ea8QAAAADIXVzJu0GhoaFq1qyZ3nzzTafOTjKqfPnyWrNmjVPZunXrVL58eUlS5cqVdfjwYe3atSvF6atXr64///xTpUqVSjak14NmpUqVVLNmTb333nv65JNPnG4jBQAAAHBrIsnLBm+//bauXr2qmjVr6vPPP9fOnTv1999/6+OPP9Zff/1ldZKSksGDB2v27Nl65513tHv3br3++uuaN2+e9fxcgwYNVL9+fXXs2FHLli3T/v379cMPP2jx4sWSpCFDhmj9+vWKiYnR1q1btXv3bn377bfq06dPhmJ/8skn9eqrryoxMVHt27e/8Y0BAAAAIFeR5GWDkiVLasuWLWratKmGDh2qKlWqqGbNmpo2bZoGDRqkl19+OdVp27VrpzfeeEMTJkxQxYoVNWPGDM2aNUsNGza06nz99de666679PDDD6tChQp67rnnlJiYKOnalb5Vq1Zp9+7duvfee1WtWjUNHz5c4eHhGYr94YcfloeHhx555BGrkxYAAAAAty6bMcbkdhDIPf/884+ioqK0adMmVa9ePVPTxsXFKTg4WF3fOy5Pv5CbEyBchk12FXY/of8SC8rw/RLSkdfayxsdPBTkk3LPw8gb7Ha7jh8/rkKFCsnNLffbDPI22gsyIy+1l6Tz79jYWAUFBaVaj45XblNXrlzR0aNH9fzzz+vuu+/OdIIHAAAAIG/iq4vb1Nq1axUZGanNmzfrnXfeye1wAAAAAGQTruTdpho2bCju1AUAAABcD1fyAAAAAMCFkOQBAAAAgAshyQMAAAAAF0KSBwAAAAAuhCQPAAAAAFwISR4AAAAAuBCSPAAAAABwISR5AAAAAOBC+DF03LCx93soJISmhLTZ7XadPumu/AU85ObG90tIW15rLx65HwIAABnGmTluWJCPTUE+ttwOA3mc3W5TvNe1tuLmRntB2mgvAABkHd9NAgAAAIALIckDAAAAABdCkgcAAAAALoQkDwAAAABcCEkeAAAAALgQkjwAAAAAcCEkeQAAAADgQvidPNywy1eNLl81uR0GcpHNJnm681tmAAAAeQFJHm7Yxn+kgLO5HQVyU92o3I4AAAAASbhdEwAAAABc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+OOP6+mnn9aOHTs0ceLEZLdmZkSZMmXUs2dPvfjiizp9+rSaNGmiixcv6vvvv9eoUaNUtGhRjR49WnfddZeaN2+up556SoULF9axY8e0atUq3XvvvXr44YdTnPecOXP00Ucf6bHHHlO1atWs5xDHjx+vGjVqWElu//799eGHH6p+/foaPny47rjjDu3bt0+7du3S+PHjVaBAAfXt21cTJ06Ut7e36tWrp+XLl2vGjBkaPXp0stszr5fV+AEgy3K54xcAwG1m5MiRxt/fP806S5cuNQ0aNDD+/v7G39/fVKxY0QwcONCcPXvWGHOtN8eBAweaggULmsDAQNOpUyezYcMGI8l8+eWX1nz++OMPc++995rAwEAjycyaNcsYY8z58+fN448/bvLnz28KFixohg0bZsaPH59i75qbNm1KFl9sbKzp37+/KV68uPH09DTh4eGmVatWZuHChWmuV2q9a544ccKpnlLo0bJ79+6mYsWKybbjhg0bTI0aNYyXl5cpW7asWbBgQbLlvvPOO6Zs2bLG09PTFCtWzAwbNsxcuXIl3TiMMebnn3821atXN76+vkaSWbFihTHGmDlz5pg77rjD+Pj4mLvvvtts3LgxWW+m18dszLWeKh0/C2OMSUxMNK+99popXbq08fT0NGFhYebBBx80sbGxVp1du3aZLl26mNDQUOPt7W2ioqJMt27dUu1x1Rhj/vzzT9O7d29z5513mqCgIBMQEGAqVKhghg8fbs6cOeNU99ChQ6Zr164mf/78xsfHx5QrV85MnTrVKcYxY8aYyMhI4+npaUqWLGlef/11p3mk1bazEj8AZJXNmP//w0QAAOCWMWrUKE2cONH6LTkAAJLwEwoAAAAA4EJI8gAAAADAhXC7JgAAAAC4EK7kAQAAAIALIckDAAAAABdCkgcAAAAALoQkDwAAAABcCEkeAAAAALgQkjwAAAAAcCEkeQAAAADgQkjyAAAAAMCFkOQBAAAAgAv5f6mohBAK2WvbAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Top-5 most discriminative features:\n", " Delicassen 1.0000\n", " Frozen 0.7029\n", " Detergents_Paper 0.5040\n", " Milk 0.4583\n", " Grocery 0.4496\n" ] } ], "source": [ "importance = profiles.feature_importance\n", "imp_df = (\n", " pd.DataFrame(list(importance.items()), columns=[\"feature\", \"importance\"])\n", " .sort_values(\"importance\", ascending=False)\n", " .reset_index(drop=True)\n", ")\n", "\n", "q67 = imp_df[\"importance\"].quantile(0.67)\n", "q33 = imp_df[\"importance\"].quantile(0.33)\n", "colours = [\n", " \"#2563EB\" if v >= q67 else (\"#60A5FA\" if v >= q33 else \"#BFDBFE\")\n", " for v in imp_df[\"importance\"]\n", "]\n", "\n", "fig, ax = plt.subplots(figsize=(9, 5))\n", "ax.barh(imp_df[\"feature\"][::-1], imp_df[\"importance\"][::-1],\n", " color=colours[::-1], edgecolor=\"white\", linewidth=0.6)\n", "ax.set_xlabel(\"Feature Importance Score\", fontsize=11)\n", "ax.set_title(\n", " \"Feature Importance for Cluster Separation\\n(darker = stronger discriminator between segments)\",\n", " fontweight=\"bold\", fontsize=12,\n", ")\n", "ax.grid(axis=\"x\", alpha=0.3)\n", "plt.tight_layout()\n", "plt.show()\n", "\n", "print(\"\\nTop-5 most discriminative features:\")\n", "for _, row in imp_df.head(5).iterrows():\n", " print(f\" {row['feature']:25s} {row['importance']:.4f}\")" ] }, { "cell_type": "markdown", "id": "mdfe3efe6f", "metadata": {}, "source": [ "## 9. Scatter Plot" ] }, { "cell_type": "code", "execution_count": 15, "id": "cd3b1d8a99", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 0", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 0", "type": "scatter", "x": [ 823, 2916, 1278, 14351, 2498, 1621, 918, 1819, 3, 230, 8550, 2253, 3321, 818, 1824, 1404, 2406, 18, 22, 2235, 1242, 2346 ], "y": [ 1200, 10002, 532, 6312, 18028, 4787, 16538, 1718, 2995, 7368, 16745, 5243, 6422, 3012, 4802, 5970, 8692, 1042, 1388, 1364, 1034, 4510 ] }, { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 1", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 1", "type": "scatter", "x": [ 6465, 2017, 1423, 2944, 903, 2870, 1215 ], "y": [ 7782, 3254, 36, 1026, 987, 4736, 131 ] }, { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 2", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 2", "type": "scatter", "x": [ 2098, 1744, 1080, 5206, 714, 433, 46, 72, 4985, 1452, 1163, 224, 1340, 1282, 1295, 1009, 156, 5130, 244, 3029, 1838, 1831, 1438, 3, 1519, 4430, 2153, 3182, 303, 446, 2379, 323, 6250, 716, 1697, 156, 404, 1856, 666, 731, 1681, 710, 797, 791, 2388, 674, 6372, 2784, 5121, 1265, 3636, 2563, 698, 741, 172, 59, 2410, 211, 1543, 806, 142, 3508, 1625, 1102, 37, 1115, 445, 3137, 1111, 110, 1426, 5120, 2213, 553, 993, 776, 1393, 1894, 2080, 1867 ], "y": [ 1159, 4400, 134, 1158, 1920, 33, 188, 787, 1740, 1668, 1798, 744, 2616, 38, 2896, 869, 283, 3232, 206, 3252, 1593, 133, 2471, 673, 805, 42, 233, 317, 398, 2367, 4425, 1116, 651, 937, 52, 443, 2758, 275, 959, 3941, 3549, 955, 864, 913, 1374, 179, 1285, 230, 6746, 61, 10155, 2221, 1069, 902, 1809, 492, 617, 799, 1840, 1465, 1274, 662, 1128, 1234, 1456, 2693, 2005, 1741, 228, 137, 5641, 3635, 2644, 2854, 848, 133, 25, 3141, 575, 437 ] }, { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 3", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 3", "type": "scatter", "x": [ 16523, 47943, 5609 ], "y": [ 5154, 36534, 60869 ] }, { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 4", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 4", "type": "scatter", "x": [ 1338, 1776, 7844, 1788, 1451, 545, 2566, 750, 497, 412, 4478, 501, 569, 833, 985, 395, 436, 65, 1476, 2162, 301, 1130, 436, 1603, 225, 964, 1145, 27, 3095, 144, 181, 1780, 894, 167, 1653, 529, 2342, 120, 46, 360, 1117, 709, 217, 63, 132, 323, 1386, 1236, 1647, 610, 222, 1160, 635, 255, 860, 143, 3, 911, 310, 396, 537, 326, 1542, 36, 3271, 929, 318, 520, 526, 434, 1774, 1627, 8, 1682, 2157, 2233, 238, 3637, 693, 429, 750, 707, 1442, 2631, 395, 2165, 2794, 11, 247, 727, 3, 84, 409, 1142, 1468, 697, 347, 18, 1328, 285, 120, 806, 1775, 1215, 130, 239, 375, 1360, 659, 786, 689, 203, 980, 2137, 490, 7, 295, 225, 216, 2398, 1970, 610, 659, 291, 710, 1693, 3265, 373, 987, 548, 287, 411, 56, 1550, 1040, 1153, 379, 139, 1409, 1104, 2079, 128, 1522, 686, 1060, 254, 531, 1037, 259, 555, 656, 1117, 297, 1233, 1059, 1637, 51, 834, 1113, 573, 834, 522, 739, 1043, 778, 868, 550, 1942, 1371, 2158, 1328, 379, 303, 665, 995, 195, 127, 4100, 776, 405, 712, 314, 468, 3105, 447, 342, 296, 4829, 686, 70, 1114, 179, 361, 1068, 967, 406, 684, 1000, 1827, 654, 452, 290, 743, 247, 375, 1014, 378, 344, 5137, 1892, 4365, 62, 2435, 290, 1874, 1063, 1521, 1886, 317, 2501, 1498, 1449, 2125, 52 ], "y": [ 214, 1762, 2405, 6404, 666, 480, 1669, 425, 1420, 397, 839, 669, 3383, 3151, 2088, 425, 833, 541, 584, 3860, 239, 1057, 596, 129, 96, 4154, 3724, 175, 5870, 779, 8872, 1285, 7530, 2096, 868, 430, 737, 1178, 9735, 3347, 8693, 440, 145, 774, 895, 5639, 2561, 247, 2276, 2715, 1517, 1647, 3896, 2395, 1991, 2194, 142, 6316, 346, 436, 720, 1170, 4575, 661, 155, 825, 8425, 926, 1286, 4052, 531, 779, 75, 930, 824, 1092, 2540, 993, 405, 1393, 2399, 333, 2515, 1752, 1152, 4477, 402, 74, 2181, 3470, 6269, 890, 547, 806, 1127, 3527, 520, 469, 1383, 878, 2946, 1859, 1291, 1329, 2306, 91, 7496, 5612, 784, 660, 2286, 950, 6845, 8321, 1439, 937, 1218, 2312, 1112, 561, 1183, 1777, 2077, 6340, 1730, 7683, 4686, 453, 5004, 327, 6818, 4324, 5500, 1120, 529, 744, 862, 16919, 5845, 977, 1093, 1619, 502, 2507, 3838, 417, 1455, 934, 264, 364, 416, 12569, 4447, 1483, 2679, 978, 2121, 514, 2714, 915, 3498, 414, 5127, 3570, 650, 8170, 15601, 9584, 388, 767, 349, 2234, 402, 1341, 1796, 830, 245, 6114, 340, 1206, 560, 191, 1103, 1619, 1173, 1457, 1089, 876, 1492, 597, 282, 130, 4006, 2583, 1945, 1677, 3019, 5502, 907, 659, 1398, 2921, 6838, 5390, 1601, 3576, 2069, 1646, 2349, 1389, 1535, 98, 17866, 5679, 1691, 364, 633, 15348, 2198, 47, 13486, 1541, 1038, 65 ] }, { "hovertemplate": "X value: %{x}
Y value: %{y}
Cluster: 5", "marker": { "line": { "color": "white", "width": 0.5 }, "size": 8 }, "mode": "markers", "name": "Cluster 5", "type": "scatter", "x": [ 5185, 2931, 602, 2168, 3181, 2124, 4334, 5778, 57, 518, 2963, 405, 1083, 4626, 5864, 2802, 1333, 834, 1365, 14472, 648, 975, 772, 3178, 2698, 548, 1378, 2708, 1561, 1266, 933, 1136, 483, 2749, 328, 2616, 1450, 201, 1440, 1067, 184, 418, 610, 64, 1755, 2876, 6854, 2100, 1158, 749, 1553, 834, 2563, 1215, 2564, 1047, 578, 572, 1391, 615, 655, 3628, 204, 2503, 1721, 1384, 1027, 258, 1854, 898, 2005, 925, 117, 229, 1092, 1534, 2602, 3486, 2139, 1022, 2341, 548, 503, 558, 790, 3113, 270, 532, 2893, 961, 819, 1902, 340, 288, 715, 960, 1784, 1218, 668, 249, 1163, 395, 838, 2204 ], "y": [ 3915, 287, 3095, 294, 2205, 1066, 9408, 2915, 201, 485, 1148, 266, 6130, 1729, 9510, 2033, 2436, 1256, 10643, 5373, 8132, 4407, 2320, 3443, 35009, 1336, 910, 8853, 3220, 2555, 5343, 2417, 8195, 880, 576, 2279, 321, 118, 800, 853, 3001, 3378, 2665, 7332, 7888, 18711, 5065, 1801, 2532, 1765, 1759, 638, 4260, 4634, 11422, 2216, 3752, 559, 432, 3242, 982, 3975, 2516, 4479, 1293, 10303, 8366, 848, 909, 3045, 824, 1149, 3046, 3703, 2369, 7849, 2208, 11559, 1365, 2809, 6386, 3157, 2601, 2046, 8164, 1504, 3881, 9927, 2540, 1960, 8620, 13223, 220, 127, 4324, 9806, 1031, 830, 1059, 874, 15082, 269, 688, 13135 ] } ], "layout": { "annotations": [ { "showarrow": false, "text": "X axis", "x": 0, "xanchor": "left", "xref": "paper", "y": 1.22, "yref": "paper" }, { "showarrow": false, "text": "Y axis", "x": 0.32, "xanchor": "left", "xref": "paper", "y": 1.22, "yref": "paper" } ], "height": 650, "hovermode": "closest", "margin": { "t": 110 }, "plot_bgcolor": "white", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Cluster Scatter Plot — Select Features" }, "updatemenus": [ { "buttons": [ { "args": [ { "x": [ [ 823, 2916, 1278, 14351, 2498, 1621, 918, 1819, 3, 230, 8550, 2253, 3321, 818, 1824, 1404, 2406, 18, 22, 2235, 1242, 2346 ], [ 6465, 2017, 1423, 2944, 903, 2870, 1215 ], [ 2098, 1744, 1080, 5206, 714, 433, 46, 72, 4985, 1452, 1163, 224, 1340, 1282, 1295, 1009, 156, 5130, 244, 3029, 1838, 1831, 1438, 3, 1519, 4430, 2153, 3182, 303, 446, 2379, 323, 6250, 716, 1697, 156, 404, 1856, 666, 731, 1681, 710, 797, 791, 2388, 674, 6372, 2784, 5121, 1265, 3636, 2563, 698, 741, 172, 59, 2410, 211, 1543, 806, 142, 3508, 1625, 1102, 37, 1115, 445, 3137, 1111, 110, 1426, 5120, 2213, 553, 993, 776, 1393, 1894, 2080, 1867 ], [ 16523, 47943, 5609 ], [ 1338, 1776, 7844, 1788, 1451, 545, 2566, 750, 497, 412, 4478, 501, 569, 833, 985, 395, 436, 65, 1476, 2162, 301, 1130, 436, 1603, 225, 964, 1145, 27, 3095, 144, 181, 1780, 894, 167, 1653, 529, 2342, 120, 46, 360, 1117, 709, 217, 63, 132, 323, 1386, 1236, 1647, 610, 222, 1160, 635, 255, 860, 143, 3, 911, 310, 396, 537, 326, 1542, 36, 3271, 929, 318, 520, 526, 434, 1774, 1627, 8, 1682, 2157, 2233, 238, 3637, 693, 429, 750, 707, 1442, 2631, 395, 2165, 2794, 11, 247, 727, 3, 84, 409, 1142, 1468, 697, 347, 18, 1328, 285, 120, 806, 1775, 1215, 130, 239, 375, 1360, 659, 786, 689, 203, 980, 2137, 490, 7, 295, 225, 216, 2398, 1970, 610, 659, 291, 710, 1693, 3265, 373, 987, 548, 287, 411, 56, 1550, 1040, 1153, 379, 139, 1409, 1104, 2079, 128, 1522, 686, 1060, 254, 531, 1037, 259, 555, 656, 1117, 297, 1233, 1059, 1637, 51, 834, 1113, 573, 834, 522, 739, 1043, 778, 868, 550, 1942, 1371, 2158, 1328, 379, 303, 665, 995, 195, 127, 4100, 776, 405, 712, 314, 468, 3105, 447, 342, 296, 4829, 686, 70, 1114, 179, 361, 1068, 967, 406, 684, 1000, 1827, 654, 452, 290, 743, 247, 375, 1014, 378, 344, 5137, 1892, 4365, 62, 2435, 290, 1874, 1063, 1521, 1886, 317, 2501, 1498, 1449, 2125, 52 ], [ 5185, 2931, 602, 2168, 3181, 2124, 4334, 5778, 57, 518, 2963, 405, 1083, 4626, 5864, 2802, 1333, 834, 1365, 14472, 648, 975, 772, 3178, 2698, 548, 1378, 2708, 1561, 1266, 933, 1136, 483, 2749, 328, 2616, 1450, 201, 1440, 1067, 184, 418, 610, 64, 1755, 2876, 6854, 2100, 1158, 749, 1553, 834, 2563, 1215, 2564, 1047, 578, 572, 1391, 615, 655, 3628, 204, 2503, 1721, 1384, 1027, 258, 1854, 898, 2005, 925, 117, 229, 1092, 1534, 2602, 3486, 2139, 1022, 2341, 548, 503, 558, 790, 3113, 270, 532, 2893, 961, 819, 1902, 340, 288, 715, 960, 1784, 1218, 668, 249, 1163, 395, 838, 2204 ] ] }, { "xaxis": { "title": "Delicassen" } } ], "label": "Delicassen", "method": "update" }, { "args": [ { "x": [ [ 1200, 10002, 532, 6312, 18028, 4787, 16538, 1718, 2995, 7368, 16745, 5243, 6422, 3012, 4802, 5970, 8692, 1042, 1388, 1364, 1034, 4510 ], [ 7782, 3254, 36, 1026, 987, 4736, 131 ], [ 1159, 4400, 134, 1158, 1920, 33, 188, 787, 1740, 1668, 1798, 744, 2616, 38, 2896, 869, 283, 3232, 206, 3252, 1593, 133, 2471, 673, 805, 42, 233, 317, 398, 2367, 4425, 1116, 651, 937, 52, 443, 2758, 275, 959, 3941, 3549, 955, 864, 913, 1374, 179, 1285, 230, 6746, 61, 10155, 2221, 1069, 902, 1809, 492, 617, 799, 1840, 1465, 1274, 662, 1128, 1234, 1456, 2693, 2005, 1741, 228, 137, 5641, 3635, 2644, 2854, 848, 133, 25, 3141, 575, 437 ], [ 5154, 36534, 60869 ], [ 214, 1762, 2405, 6404, 666, 480, 1669, 425, 1420, 397, 839, 669, 3383, 3151, 2088, 425, 833, 541, 584, 3860, 239, 1057, 596, 129, 96, 4154, 3724, 175, 5870, 779, 8872, 1285, 7530, 2096, 868, 430, 737, 1178, 9735, 3347, 8693, 440, 145, 774, 895, 5639, 2561, 247, 2276, 2715, 1517, 1647, 3896, 2395, 1991, 2194, 142, 6316, 346, 436, 720, 1170, 4575, 661, 155, 825, 8425, 926, 1286, 4052, 531, 779, 75, 930, 824, 1092, 2540, 993, 405, 1393, 2399, 333, 2515, 1752, 1152, 4477, 402, 74, 2181, 3470, 6269, 890, 547, 806, 1127, 3527, 520, 469, 1383, 878, 2946, 1859, 1291, 1329, 2306, 91, 7496, 5612, 784, 660, 2286, 950, 6845, 8321, 1439, 937, 1218, 2312, 1112, 561, 1183, 1777, 2077, 6340, 1730, 7683, 4686, 453, 5004, 327, 6818, 4324, 5500, 1120, 529, 744, 862, 16919, 5845, 977, 1093, 1619, 502, 2507, 3838, 417, 1455, 934, 264, 364, 416, 12569, 4447, 1483, 2679, 978, 2121, 514, 2714, 915, 3498, 414, 5127, 3570, 650, 8170, 15601, 9584, 388, 767, 349, 2234, 402, 1341, 1796, 830, 245, 6114, 340, 1206, 560, 191, 1103, 1619, 1173, 1457, 1089, 876, 1492, 597, 282, 130, 4006, 2583, 1945, 1677, 3019, 5502, 907, 659, 1398, 2921, 6838, 5390, 1601, 3576, 2069, 1646, 2349, 1389, 1535, 98, 17866, 5679, 1691, 364, 633, 15348, 2198, 47, 13486, 1541, 1038, 65 ], [ 3915, 287, 3095, 294, 2205, 1066, 9408, 2915, 201, 485, 1148, 266, 6130, 1729, 9510, 2033, 2436, 1256, 10643, 5373, 8132, 4407, 2320, 3443, 35009, 1336, 910, 8853, 3220, 2555, 5343, 2417, 8195, 880, 576, 2279, 321, 118, 800, 853, 3001, 3378, 2665, 7332, 7888, 18711, 5065, 1801, 2532, 1765, 1759, 638, 4260, 4634, 11422, 2216, 3752, 559, 432, 3242, 982, 3975, 2516, 4479, 1293, 10303, 8366, 848, 909, 3045, 824, 1149, 3046, 3703, 2369, 7849, 2208, 11559, 1365, 2809, 6386, 3157, 2601, 2046, 8164, 1504, 3881, 9927, 2540, 1960, 8620, 13223, 220, 127, 4324, 9806, 1031, 830, 1059, 874, 15082, 269, 688, 13135 ] ] }, { "xaxis": { "title": "Frozen" } } ], "label": "Frozen", "method": "update" }, { "args": [ { "x": [ [ 1107, 212, 2587, 1579, 1480, 500, 778, 410, 20, 1532, 4948, 828, 730, 967, 210, 1041, 751, 436, 32, 523, 96, 93 ], [ 24171, 26701, 24231, 40827, 20070, 19410, 38102 ], [ 7425, 5977, 4508, 8604, 6506, 6956, 6899, 9529, 7353, 6792, 13583, 5611, 17740, 7572, 7677, 12034, 7818, 18906, 5038, 8035, 6766, 6830, 8969, 836, 6457, 12591, 11577, 6694, 8077, 13726, 7108, 7015, 8773, 9836, 4196, 6907, 6839, 4027, 5618, 9959, 14235, 9265, 12420, 5957, 5828, 13308, 4797, 8933, 18594, 5980, 830, 4882, 6374, 5952, 8752, 10069, 11783, 3909, 7558, 6846, 17120, 3891, 12408, 9606, 15469, 6600, 12218, 12638, 8682, 6747, 4666, 282, 3378, 7883, 6728, 6740, 6818, 5079, 241, 14841 ], [ 4337, 239, 1272 ], [ 2674, 3293, 3516, 507, 1795, 3140, 3321, 1716, 549, 964, 370, 2518, 375, 242, 820, 483, 4239, 4618, 5121, 609, 1538, 2024, 227, 3084, 4095, 4074, 1247, 3468, 788, 656, 1321, 1901, 529, 301, 1202, 610, 3537, 3837, 165, 69, 627, 223, 3874, 54, 56, 215, 4573, 2505, 169, 276, 310, 319, 266, 264, 25, 1976, 1062, 395, 70, 256, 47, 199, 2447, 721, 249, 637, 399, 73, 1082, 283, 255, 302, 7, 4004, 4424, 3, 3674, 4973, 1680, 79, 69, 2840, 153, 20, 120, 273, 1382, 334, 58, 949, 3459, 43, 187, 355, 4314, 592, 402, 954, 5, 288, 5316, 3381, 240, 3961, 86, 4167, 256, 788, 70, 761, 263, 4762, 694, 955, 1566, 409, 1216, 415, 72, 1682, 3143, 430, 44, 918, 234, 205, 1547, 392, 3593, 780, 49, 2894, 197, 147, 93, 759, 96, 621, 274, 167, 2328, 1226, 965, 212, 825, 2208, 3712, 4538, 290, 6236, 257, 299, 183, 857, 83, 821, 706, 275, 228, 1679, 387, 88, 492, 182, 146, 442, 15, 573, 7271, 5162, 4595, 217, 3843, 1184, 173, 90, 184, 536, 232, 159, 179, 1335, 514, 4515, 222, 252, 41, 397, 311, 476, 68, 813, 397, 192, 353, 200, 227, 311, 95, 122, 149, 841, 64, 74, 469, 153, 593, 2730, 2123, 1860, 235, 2970, 912, 1135, 3540, 3485, 1580, 108, 850, 84, 1377, 356, 168, 477 ], [ 1777, 3881, 6707, 5058, 2767, 2259, 2381, 4482, 4003, 100, 2134, 918, 361, 862, 1145, 2575, 204, 5141, 116, 4173, 764, 3, 550, 454, 71, 1491, 139, 483, 585, 118, 411, 174, 349, 2386, 955, 960, 51, 516, 113, 170, 352, 811, 232, 118, 330, 763, 284, 244, 130, 56, 2568, 284, 325, 28, 343, 412, 586, 562, 363, 111, 429, 737, 333, 603, 3620, 314, 386, 445, 811, 710, 2662, 351, 371, 1470, 140, 210, 178, 332, 4111, 4621, 1333, 9, 468, 101, 716, 1916, 600, 246, 1711, 231, 385, 92, 10, 632, 914, 1092, 3415, 948, 1803, 3213, 439, 1328, 2371, 182 ] ] }, { "xaxis": { "title": "Detergents_Paper" } } ], "label": "Detergents_Paper", "method": "update" }, { "args": [ { "x": [ [ 2100, 555, 3916, 5025, 3504, 1642, 3473, 926, 7152, 6958, 29627, 2567, 4563, 4959, 3045, 3965, 4411, 640, 286, 3944, 3154, 1431 ], [ 54259, 38369, 20959, 46197, 73498, 28326, 4980 ], [ 11093, 5403, 8816, 20484, 10556, 15729, 7555, 11095, 22044, 14069, 21412, 10473, 29892, 9933, 11601, 12697, 9540, 27472, 12220, 7779, 10810, 6337, 10646, 16729, 11114, 8384, 10690, 5291, 7704, 15726, 12653, 8675, 25862, 7677, 7845, 8533, 7639, 11577, 3485, 13240, 14399, 11711, 12729, 6551, 10765, 16599, 7504, 6154, 23133, 9679, 23527, 9763, 8053, 11103, 13316, 3688, 7460, 12939, 12867, 20655, 3737, 14982, 25071, 14881, 6964, 6939, 14641, 10044, 6264, 1275, 8630, 21858, 11991, 12844, 10940, 8494, 5266, 9347, 4230, 15488 ], [ 36423, 43950, 16784 ], [ 9656, 9810, 8808, 1196, 8259, 3199, 4956, 3648, 1124, 1114, 6157, 2495, 871, 961, 4339, 1979, 5491, 7027, 6152, 1095, 4051, 3683, 1970, 5360, 3045, 6245, 1227, 1534, 7260, 2820, 5139, 6343, 3587, 1175, 3259, 829, 9232, 3327, 542, 596, 2762, 2920, 2616, 254, 112, 2182, 6459, 8397, 1648, 793, 2521, 3880, 2344, 3234, 201, 10769, 8847, 2428, 589, 1042, 1882, 1289, 8579, 8080, 4257, 4979, 1596, 1936, 3373, 584, 3328, 9250, 55, 6570, 3651, 540, 7603, 6721, 3195, 735, 717, 5479, 1208, 7330, 7075, 4888, 6036, 918, 6448, 521, 8002, 295, 1461, 1012, 7097, 2154, 2280, 685, 891, 780, 4737, 3748, 1012, 6602, 367, 7503, 1115, 2527, 659, 3243, 2204, 577, 2746, 5989, 10678, 4984, 6380, 820, 475, 3576, 7775, 2428, 346, 3795, 1993, 1860, 17972, 5008, 1931, 4885, 1110, 1115, 1032, 5007, 8323, 1703, 1610, 829, 2317, 2884, 7108, 2247, 2160, 3354, 3086, 1897, 3199, 4560, 879, 5302, 1020, 1492, 925, 1795, 1375, 3088, 2713, 3696, 1897, 944, 1610, 899, 1486, 1786, 1511, 1347, 333, 1188, 4025, 5763, 5758, 1172, 2602, 2380, 1099, 1106, 727, 18664, 5878, 607, 1601, 997, 873, 6128, 2217, 894, 337, 3801, 2256, 1450, 3294, 5164, 1364, 922, 3620, 848, 1530, 1181, 2761, 4180, 865, 1316, 1666, 1032, 577, 906, 1046, 3880, 3634, 2096, 3289, 3605, 4859, 1990, 6046, 5499, 3783, 2408, 5970, 1750, 5506, 3218, 1981, 1698 ], [ 5410, 12319, 6208, 9465, 6327, 4519, 1917, 9776, 4230, 803, 3610, 1318, 4786, 4362, 4332, 3065, 1449, 6759, 2037, 1266, 5332, 1137, 1563, 3836, 3090, 2132, 1014, 2770, 2295, 1080, 1891, 1200, 1840, 7243, 2032, 4280, 13252, 3677, 1433, 1825, 1371, 1366, 2024, 6250, 5139, 7209, 11487, 1895, 1475, 899, 5921, 1780, 2703, 3838, 3575, 1801, 659, 5279, 7961, 489, 1372, 1222, 258, 3749, 6200, 3613, 2102, 594, 2013, 1304, 6243, 2374, 2335, 713, 3587, 2209, 3216, 928, 6817, 7184, 7393, 134, 2872, 1196, 1887, 6257, 944, 4591, 7435, 1916, 6730, 2801, 4753, 11006, 4613, 5010, 4847, 1377, 3686, 2884, 16687, 1162, 3922, 12051 ] ] }, { "xaxis": { "title": "Milk" } } ], "label": "Milk", "method": "update" }, { "args": [ { "x": [ [ 2609, 902, 5876, 8117, 8906, 2961, 7102, 1510, 8253, 6536, 18148, 3779, 2124, 7336, 1493, 4252, 12609, 3600, 471, 4955, 2648, 764 ], [ 55571, 59598, 45828, 92780, 32114, 39694, 67298 ], [ 18881, 12974, 12121, 25957, 12477, 16709, 14961, 23998, 21531, 21955, 28921, 11532, 26866, 10487, 15775, 28540, 14403, 32034, 11323, 12144, 16267, 10704, 14886, 28986, 17569, 34792, 19460, 14855, 14682, 26870, 19858, 13430, 19816, 19805, 11874, 10518, 11687, 11522, 20292, 23127, 24708, 23596, 16767, 11364, 15538, 36486, 15205, 13916, 33586, 15445, 13699, 22182, 19847, 12469, 20399, 13829, 24773, 8852, 21570, 13567, 19172, 11924, 17645, 26839, 26316, 15541, 20521, 22294, 21203, 22272, 13586, 15400, 9345, 18683, 10908, 18622, 13227, 14316, 16483, 30243 ], [ 22019, 20170, 13626 ], [ 7561, 9568, 7684, 4221, 5126, 6975, 9426, 6192, 4523, 3821, 2933, 9464, 2010, 2861, 3133, 2262, 11091, 10471, 10868, 1980, 6996, 5005, 1648, 8040, 7854, 6544, 3250, 7417, 3993, 1293, 2661, 9794, 6532, 2067, 3655, 3009, 11009, 4814, 4042, 1638, 2530, 6252, 8118, 610, 778, 1909, 7677, 6981, 1694, 2988, 3355, 5380, 2147, 1498, 245, 8814, 3823, 699, 314, 1235, 2174, 2591, 7030, 8282, 5034, 3343, 1096, 2177, 2707, 542, 2022, 2368, 137, 9618, 12822, 283, 8584, 9170, 3268, 803, 2155, 6536, 5241, 4533, 4945, 2500, 8887, 4710, 1139, 854, 9819, 1381, 2251, 2974, 10391, 6824, 2112, 2216, 5226, 950, 6089, 5838, 2062, 6861, 1390, 10646, 2856, 5265, 1499, 4157, 1563, 572, 2501, 5615, 3828, 3316, 2824, 3047, 585, 5119, 10817, 1777, 489, 2070, 1799, 4740, 4748, 5249, 1883, 2157, 1094, 6684, 975, 1563, 6869, 1841, 223, 683, 2543, 2431, 6235, 1242, 2642, 3261, 4329, 5234, 6986, 9965, 2060, 9785, 3007, 2405, 2405, 7647, 2201, 6114, 3558, 2280, 5167, 11593, 1431, 1664, 4583, 5109, 1330, 2611, 7021, 5332, 9670, 11238, 5923, 1763, 8335, 2028, 1997, 1533, 2012, 1660, 2109, 864, 2453, 4438, 1524, 8025, 1664, 534, 683, 1641, 1668, 1162, 1902, 10391, 3450, 1614, 2857, 1172, 1422, 1328, 2313, 3600, 3204, 1263, 1428, 582, 935, 1238, 1167, 6407, 6100, 4563, 3281, 12400, 6633, 3417, 8552, 11055, 2223, 2593, 4910, 3580, 5160, 1493, 2232, 2510 ], [ 7198, 11757, 14982, 12091, 10099, 4602, 4469, 13792, 7595, 3045, 11107, 2886, 7326, 5428, 4757, 5956, 1947, 13462, 3202, 21042, 8713, 3, 1783, 5330, 2062, 3445, 3970, 2469, 1733, 2000, 2362, 3412, 1658, 10685, 2479, 7305, 5189, 1988, 1651, 1765, 3135, 2474, 3810, 1981, 5230, 4897, 9490, 1393, 2046, 1382, 9212, 3838, 3833, 593, 7041, 2475, 2914, 2406, 16966, 1495, 1677, 2576, 1138, 6964, 9694, 2013, 2828, 1296, 6550, 3643, 6360, 2842, 8280, 3315, 2464, 3389, 1447, 2743, 10790, 12311, 2548, 218, 2006, 2406, 1939, 7398, 2146, 1617, 8469, 1573, 3842, 2128, 5091, 4604, 3444, 5026, 9053, 4172, 4657, 12232, 5429, 4754, 7994, 16027 ] ] }, { "xaxis": { "title": "Grocery" } } ], "label": "Grocery", "method": "update" }, { "args": [ { "x": [ [ 43088, 56159, 40721, 43265, 56082, 36050, 76237, 42312, 37036, 45640, 112151, 47493, 56083, 53205, 36817, 49063, 68951, 40254, 42786, 39679, 38793, 39228 ], [ 44466, 35942, 85, 16117, 22925, 12119, 8565 ], [ 6006, 3366, 1020, 4113, 15168, 4591, 10850, 630, 5181, 3103, 4967, 491, 4098, 5417, 9396, 12205, 219, 9198, 5626, 11594, 1420, 1454, 8797, 1406, 12579, 22039, 1989, 3830, 355, 5531, 15615, 260, 200, 514, 2343, 694, 8040, 834, 180, 3067, 4484, 1107, 5550, 2362, 2806, 2532, 18, 3062, 6134, 1073, 5909, 572, 11908, 3996, 5283, 2599, 161, 243, 6468, 918, 2137, 1479, 9759, 11223, 1689, 2771, 5981, 1210, 117, 37, 3136, 10683, 4515, 7362, 4389, 660, 4456, 13134, 3097, 14531 ], [ 26373, 36847, 32717 ], [ 12669, 7057, 6353, 13265, 9413, 12126, 7579, 5963, 13146, 10253, 5876, 7780, 5567, 9898, 2612, 1502, 688, 9670, 11519, 6269, 3347, 5264, 13779, 6137, 8590, 7823, 4760, 9, 2446, 8352, 4420, 8190, 717, 10766, 1640, 7005, 10362, 11867, 7864, 11405, 12754, 3, 23, 403, 503, 9658, 2932, 1531, 11818, 11134, 11173, 6990, 8258, 4020, 12212, 11170, 140, 7149, 2101, 9434, 7388, 6300, 4625, 3087, 13537, 5387, 10405, 7769, 9203, 5924, 1289, 3463, 622, 2861, 1725, 12434, 5224, 4822, 2926, 5809, 5414, 955, 286, 12759, 11002, 3157, 12356, 327, 8170, 3009, 2438, 13624, 5509, 7107, 2427, 11686, 9670, 583, 1956, 6373, 2541, 1537, 7291, 3317, 4155, 5396, 5041, 2790, 7274, 12680, 4042, 1869, 8656, 11072, 2344, 964, 1838, 8635, 7363, 11210, 6202, 8885, 13569, 8040, 3191, 6623, 10379, 11092, 8475, 9193, 7858, 2153, 4720, 2083, 514, 894, 680, 9061, 11693, 3366, 12238, 7149, 2708, 6022, 2838, 7588, 8090, 6758, 444, 2886, 6987, 7034, 9784, 10617, 7127, 1182, 11800, 1774, 9155, 13360, 4414, 542, 5113, 9790, 13970, 9351, 3, 2617, 381, 2320, 255, 3043, 1198, 3428, 3521, 608, 190, 759, 796, 4734, 2121, 4627, 2615, 4692, 9561, 3477, 6211, 3884, 6338, 5841, 3225, 4048, 1821, 11635, 1206, 9785, 9385, 3352, 2647, 518, 12377, 9602, 11535, 11442, 9612, 4446, 6884, 8257, 8708, 6633, 2126, 97, 4983, 5969, 7842, 5065, 8861, 11243, 3047, 8607, 8533, 1982, 10290, 2787 ], [ 22615, 31714, 21217, 24653, 18601, 17546, 31276, 22647, 16165, 14276, 18815, 21632, 29729, 29955, 24025, 19176, 27329, 19913, 16705, 18291, 19899, 20398, 20874, 24904, 11314, 14100, 15587, 19046, 14438, 18044, 20049, 17160, 19219, 21465, 14903, 17623, 30379, 18827, 31812, 16225, 18840, 17773, 15177, 16936, 17023, 30624, 25203, 18567, 18044, 14755, 20782, 25962, 15603, 18692, 22096, 24929, 18226, 15671, 29526, 31614, 23257, 20893, 15218, 27901, 17360, 25767, 15354, 16260, 21273, 19087, 16448, 17327, 29635, 15881, 25977, 16933, 22321, 16823, 27082, 27380, 14039, 22686, 19746, 22335, 20105, 15076, 28257, 17770, 34454, 20918, 23632, 27167, 26539, 25606, 18073, 25066, 17063, 26400, 17565, 16980, 31012, 21117, 16731, 29703 ] ] }, { "xaxis": { "title": "Fresh" } } ], "label": "Fresh", "method": "update" } ], "direction": "down", "showactive": true, "x": 0, "xanchor": "left", "y": 1.16, "yanchor": "top" }, { "buttons": [ { "args": [ { "y": [ [ 823, 2916, 1278, 14351, 2498, 1621, 918, 1819, 3, 230, 8550, 2253, 3321, 818, 1824, 1404, 2406, 18, 22, 2235, 1242, 2346 ], [ 6465, 2017, 1423, 2944, 903, 2870, 1215 ], [ 2098, 1744, 1080, 5206, 714, 433, 46, 72, 4985, 1452, 1163, 224, 1340, 1282, 1295, 1009, 156, 5130, 244, 3029, 1838, 1831, 1438, 3, 1519, 4430, 2153, 3182, 303, 446, 2379, 323, 6250, 716, 1697, 156, 404, 1856, 666, 731, 1681, 710, 797, 791, 2388, 674, 6372, 2784, 5121, 1265, 3636, 2563, 698, 741, 172, 59, 2410, 211, 1543, 806, 142, 3508, 1625, 1102, 37, 1115, 445, 3137, 1111, 110, 1426, 5120, 2213, 553, 993, 776, 1393, 1894, 2080, 1867 ], [ 16523, 47943, 5609 ], [ 1338, 1776, 7844, 1788, 1451, 545, 2566, 750, 497, 412, 4478, 501, 569, 833, 985, 395, 436, 65, 1476, 2162, 301, 1130, 436, 1603, 225, 964, 1145, 27, 3095, 144, 181, 1780, 894, 167, 1653, 529, 2342, 120, 46, 360, 1117, 709, 217, 63, 132, 323, 1386, 1236, 1647, 610, 222, 1160, 635, 255, 860, 143, 3, 911, 310, 396, 537, 326, 1542, 36, 3271, 929, 318, 520, 526, 434, 1774, 1627, 8, 1682, 2157, 2233, 238, 3637, 693, 429, 750, 707, 1442, 2631, 395, 2165, 2794, 11, 247, 727, 3, 84, 409, 1142, 1468, 697, 347, 18, 1328, 285, 120, 806, 1775, 1215, 130, 239, 375, 1360, 659, 786, 689, 203, 980, 2137, 490, 7, 295, 225, 216, 2398, 1970, 610, 659, 291, 710, 1693, 3265, 373, 987, 548, 287, 411, 56, 1550, 1040, 1153, 379, 139, 1409, 1104, 2079, 128, 1522, 686, 1060, 254, 531, 1037, 259, 555, 656, 1117, 297, 1233, 1059, 1637, 51, 834, 1113, 573, 834, 522, 739, 1043, 778, 868, 550, 1942, 1371, 2158, 1328, 379, 303, 665, 995, 195, 127, 4100, 776, 405, 712, 314, 468, 3105, 447, 342, 296, 4829, 686, 70, 1114, 179, 361, 1068, 967, 406, 684, 1000, 1827, 654, 452, 290, 743, 247, 375, 1014, 378, 344, 5137, 1892, 4365, 62, 2435, 290, 1874, 1063, 1521, 1886, 317, 2501, 1498, 1449, 2125, 52 ], [ 5185, 2931, 602, 2168, 3181, 2124, 4334, 5778, 57, 518, 2963, 405, 1083, 4626, 5864, 2802, 1333, 834, 1365, 14472, 648, 975, 772, 3178, 2698, 548, 1378, 2708, 1561, 1266, 933, 1136, 483, 2749, 328, 2616, 1450, 201, 1440, 1067, 184, 418, 610, 64, 1755, 2876, 6854, 2100, 1158, 749, 1553, 834, 2563, 1215, 2564, 1047, 578, 572, 1391, 615, 655, 3628, 204, 2503, 1721, 1384, 1027, 258, 1854, 898, 2005, 925, 117, 229, 1092, 1534, 2602, 3486, 2139, 1022, 2341, 548, 503, 558, 790, 3113, 270, 532, 2893, 961, 819, 1902, 340, 288, 715, 960, 1784, 1218, 668, 249, 1163, 395, 838, 2204 ] ] }, { "yaxis": { "title": "Delicassen" } } ], "label": "Delicassen", "method": "update" }, { "args": [ { "y": [ [ 1200, 10002, 532, 6312, 18028, 4787, 16538, 1718, 2995, 7368, 16745, 5243, 6422, 3012, 4802, 5970, 8692, 1042, 1388, 1364, 1034, 4510 ], [ 7782, 3254, 36, 1026, 987, 4736, 131 ], [ 1159, 4400, 134, 1158, 1920, 33, 188, 787, 1740, 1668, 1798, 744, 2616, 38, 2896, 869, 283, 3232, 206, 3252, 1593, 133, 2471, 673, 805, 42, 233, 317, 398, 2367, 4425, 1116, 651, 937, 52, 443, 2758, 275, 959, 3941, 3549, 955, 864, 913, 1374, 179, 1285, 230, 6746, 61, 10155, 2221, 1069, 902, 1809, 492, 617, 799, 1840, 1465, 1274, 662, 1128, 1234, 1456, 2693, 2005, 1741, 228, 137, 5641, 3635, 2644, 2854, 848, 133, 25, 3141, 575, 437 ], [ 5154, 36534, 60869 ], [ 214, 1762, 2405, 6404, 666, 480, 1669, 425, 1420, 397, 839, 669, 3383, 3151, 2088, 425, 833, 541, 584, 3860, 239, 1057, 596, 129, 96, 4154, 3724, 175, 5870, 779, 8872, 1285, 7530, 2096, 868, 430, 737, 1178, 9735, 3347, 8693, 440, 145, 774, 895, 5639, 2561, 247, 2276, 2715, 1517, 1647, 3896, 2395, 1991, 2194, 142, 6316, 346, 436, 720, 1170, 4575, 661, 155, 825, 8425, 926, 1286, 4052, 531, 779, 75, 930, 824, 1092, 2540, 993, 405, 1393, 2399, 333, 2515, 1752, 1152, 4477, 402, 74, 2181, 3470, 6269, 890, 547, 806, 1127, 3527, 520, 469, 1383, 878, 2946, 1859, 1291, 1329, 2306, 91, 7496, 5612, 784, 660, 2286, 950, 6845, 8321, 1439, 937, 1218, 2312, 1112, 561, 1183, 1777, 2077, 6340, 1730, 7683, 4686, 453, 5004, 327, 6818, 4324, 5500, 1120, 529, 744, 862, 16919, 5845, 977, 1093, 1619, 502, 2507, 3838, 417, 1455, 934, 264, 364, 416, 12569, 4447, 1483, 2679, 978, 2121, 514, 2714, 915, 3498, 414, 5127, 3570, 650, 8170, 15601, 9584, 388, 767, 349, 2234, 402, 1341, 1796, 830, 245, 6114, 340, 1206, 560, 191, 1103, 1619, 1173, 1457, 1089, 876, 1492, 597, 282, 130, 4006, 2583, 1945, 1677, 3019, 5502, 907, 659, 1398, 2921, 6838, 5390, 1601, 3576, 2069, 1646, 2349, 1389, 1535, 98, 17866, 5679, 1691, 364, 633, 15348, 2198, 47, 13486, 1541, 1038, 65 ], [ 3915, 287, 3095, 294, 2205, 1066, 9408, 2915, 201, 485, 1148, 266, 6130, 1729, 9510, 2033, 2436, 1256, 10643, 5373, 8132, 4407, 2320, 3443, 35009, 1336, 910, 8853, 3220, 2555, 5343, 2417, 8195, 880, 576, 2279, 321, 118, 800, 853, 3001, 3378, 2665, 7332, 7888, 18711, 5065, 1801, 2532, 1765, 1759, 638, 4260, 4634, 11422, 2216, 3752, 559, 432, 3242, 982, 3975, 2516, 4479, 1293, 10303, 8366, 848, 909, 3045, 824, 1149, 3046, 3703, 2369, 7849, 2208, 11559, 1365, 2809, 6386, 3157, 2601, 2046, 8164, 1504, 3881, 9927, 2540, 1960, 8620, 13223, 220, 127, 4324, 9806, 1031, 830, 1059, 874, 15082, 269, 688, 13135 ] ] }, { "yaxis": { "title": "Frozen" } } ], "label": "Frozen", "method": "update" }, { "args": [ { "y": [ [ 1107, 212, 2587, 1579, 1480, 500, 778, 410, 20, 1532, 4948, 828, 730, 967, 210, 1041, 751, 436, 32, 523, 96, 93 ], [ 24171, 26701, 24231, 40827, 20070, 19410, 38102 ], [ 7425, 5977, 4508, 8604, 6506, 6956, 6899, 9529, 7353, 6792, 13583, 5611, 17740, 7572, 7677, 12034, 7818, 18906, 5038, 8035, 6766, 6830, 8969, 836, 6457, 12591, 11577, 6694, 8077, 13726, 7108, 7015, 8773, 9836, 4196, 6907, 6839, 4027, 5618, 9959, 14235, 9265, 12420, 5957, 5828, 13308, 4797, 8933, 18594, 5980, 830, 4882, 6374, 5952, 8752, 10069, 11783, 3909, 7558, 6846, 17120, 3891, 12408, 9606, 15469, 6600, 12218, 12638, 8682, 6747, 4666, 282, 3378, 7883, 6728, 6740, 6818, 5079, 241, 14841 ], [ 4337, 239, 1272 ], [ 2674, 3293, 3516, 507, 1795, 3140, 3321, 1716, 549, 964, 370, 2518, 375, 242, 820, 483, 4239, 4618, 5121, 609, 1538, 2024, 227, 3084, 4095, 4074, 1247, 3468, 788, 656, 1321, 1901, 529, 301, 1202, 610, 3537, 3837, 165, 69, 627, 223, 3874, 54, 56, 215, 4573, 2505, 169, 276, 310, 319, 266, 264, 25, 1976, 1062, 395, 70, 256, 47, 199, 2447, 721, 249, 637, 399, 73, 1082, 283, 255, 302, 7, 4004, 4424, 3, 3674, 4973, 1680, 79, 69, 2840, 153, 20, 120, 273, 1382, 334, 58, 949, 3459, 43, 187, 355, 4314, 592, 402, 954, 5, 288, 5316, 3381, 240, 3961, 86, 4167, 256, 788, 70, 761, 263, 4762, 694, 955, 1566, 409, 1216, 415, 72, 1682, 3143, 430, 44, 918, 234, 205, 1547, 392, 3593, 780, 49, 2894, 197, 147, 93, 759, 96, 621, 274, 167, 2328, 1226, 965, 212, 825, 2208, 3712, 4538, 290, 6236, 257, 299, 183, 857, 83, 821, 706, 275, 228, 1679, 387, 88, 492, 182, 146, 442, 15, 573, 7271, 5162, 4595, 217, 3843, 1184, 173, 90, 184, 536, 232, 159, 179, 1335, 514, 4515, 222, 252, 41, 397, 311, 476, 68, 813, 397, 192, 353, 200, 227, 311, 95, 122, 149, 841, 64, 74, 469, 153, 593, 2730, 2123, 1860, 235, 2970, 912, 1135, 3540, 3485, 1580, 108, 850, 84, 1377, 356, 168, 477 ], [ 1777, 3881, 6707, 5058, 2767, 2259, 2381, 4482, 4003, 100, 2134, 918, 361, 862, 1145, 2575, 204, 5141, 116, 4173, 764, 3, 550, 454, 71, 1491, 139, 483, 585, 118, 411, 174, 349, 2386, 955, 960, 51, 516, 113, 170, 352, 811, 232, 118, 330, 763, 284, 244, 130, 56, 2568, 284, 325, 28, 343, 412, 586, 562, 363, 111, 429, 737, 333, 603, 3620, 314, 386, 445, 811, 710, 2662, 351, 371, 1470, 140, 210, 178, 332, 4111, 4621, 1333, 9, 468, 101, 716, 1916, 600, 246, 1711, 231, 385, 92, 10, 632, 914, 1092, 3415, 948, 1803, 3213, 439, 1328, 2371, 182 ] ] }, { "yaxis": { "title": "Detergents_Paper" } } ], "label": "Detergents_Paper", "method": "update" }, { "args": [ { "y": [ [ 2100, 555, 3916, 5025, 3504, 1642, 3473, 926, 7152, 6958, 29627, 2567, 4563, 4959, 3045, 3965, 4411, 640, 286, 3944, 3154, 1431 ], [ 54259, 38369, 20959, 46197, 73498, 28326, 4980 ], [ 11093, 5403, 8816, 20484, 10556, 15729, 7555, 11095, 22044, 14069, 21412, 10473, 29892, 9933, 11601, 12697, 9540, 27472, 12220, 7779, 10810, 6337, 10646, 16729, 11114, 8384, 10690, 5291, 7704, 15726, 12653, 8675, 25862, 7677, 7845, 8533, 7639, 11577, 3485, 13240, 14399, 11711, 12729, 6551, 10765, 16599, 7504, 6154, 23133, 9679, 23527, 9763, 8053, 11103, 13316, 3688, 7460, 12939, 12867, 20655, 3737, 14982, 25071, 14881, 6964, 6939, 14641, 10044, 6264, 1275, 8630, 21858, 11991, 12844, 10940, 8494, 5266, 9347, 4230, 15488 ], [ 36423, 43950, 16784 ], [ 9656, 9810, 8808, 1196, 8259, 3199, 4956, 3648, 1124, 1114, 6157, 2495, 871, 961, 4339, 1979, 5491, 7027, 6152, 1095, 4051, 3683, 1970, 5360, 3045, 6245, 1227, 1534, 7260, 2820, 5139, 6343, 3587, 1175, 3259, 829, 9232, 3327, 542, 596, 2762, 2920, 2616, 254, 112, 2182, 6459, 8397, 1648, 793, 2521, 3880, 2344, 3234, 201, 10769, 8847, 2428, 589, 1042, 1882, 1289, 8579, 8080, 4257, 4979, 1596, 1936, 3373, 584, 3328, 9250, 55, 6570, 3651, 540, 7603, 6721, 3195, 735, 717, 5479, 1208, 7330, 7075, 4888, 6036, 918, 6448, 521, 8002, 295, 1461, 1012, 7097, 2154, 2280, 685, 891, 780, 4737, 3748, 1012, 6602, 367, 7503, 1115, 2527, 659, 3243, 2204, 577, 2746, 5989, 10678, 4984, 6380, 820, 475, 3576, 7775, 2428, 346, 3795, 1993, 1860, 17972, 5008, 1931, 4885, 1110, 1115, 1032, 5007, 8323, 1703, 1610, 829, 2317, 2884, 7108, 2247, 2160, 3354, 3086, 1897, 3199, 4560, 879, 5302, 1020, 1492, 925, 1795, 1375, 3088, 2713, 3696, 1897, 944, 1610, 899, 1486, 1786, 1511, 1347, 333, 1188, 4025, 5763, 5758, 1172, 2602, 2380, 1099, 1106, 727, 18664, 5878, 607, 1601, 997, 873, 6128, 2217, 894, 337, 3801, 2256, 1450, 3294, 5164, 1364, 922, 3620, 848, 1530, 1181, 2761, 4180, 865, 1316, 1666, 1032, 577, 906, 1046, 3880, 3634, 2096, 3289, 3605, 4859, 1990, 6046, 5499, 3783, 2408, 5970, 1750, 5506, 3218, 1981, 1698 ], [ 5410, 12319, 6208, 9465, 6327, 4519, 1917, 9776, 4230, 803, 3610, 1318, 4786, 4362, 4332, 3065, 1449, 6759, 2037, 1266, 5332, 1137, 1563, 3836, 3090, 2132, 1014, 2770, 2295, 1080, 1891, 1200, 1840, 7243, 2032, 4280, 13252, 3677, 1433, 1825, 1371, 1366, 2024, 6250, 5139, 7209, 11487, 1895, 1475, 899, 5921, 1780, 2703, 3838, 3575, 1801, 659, 5279, 7961, 489, 1372, 1222, 258, 3749, 6200, 3613, 2102, 594, 2013, 1304, 6243, 2374, 2335, 713, 3587, 2209, 3216, 928, 6817, 7184, 7393, 134, 2872, 1196, 1887, 6257, 944, 4591, 7435, 1916, 6730, 2801, 4753, 11006, 4613, 5010, 4847, 1377, 3686, 2884, 16687, 1162, 3922, 12051 ] ] }, { "yaxis": { "title": "Milk" } } ], "label": "Milk", "method": "update" }, { "args": [ { "y": [ [ 2609, 902, 5876, 8117, 8906, 2961, 7102, 1510, 8253, 6536, 18148, 3779, 2124, 7336, 1493, 4252, 12609, 3600, 471, 4955, 2648, 764 ], [ 55571, 59598, 45828, 92780, 32114, 39694, 67298 ], [ 18881, 12974, 12121, 25957, 12477, 16709, 14961, 23998, 21531, 21955, 28921, 11532, 26866, 10487, 15775, 28540, 14403, 32034, 11323, 12144, 16267, 10704, 14886, 28986, 17569, 34792, 19460, 14855, 14682, 26870, 19858, 13430, 19816, 19805, 11874, 10518, 11687, 11522, 20292, 23127, 24708, 23596, 16767, 11364, 15538, 36486, 15205, 13916, 33586, 15445, 13699, 22182, 19847, 12469, 20399, 13829, 24773, 8852, 21570, 13567, 19172, 11924, 17645, 26839, 26316, 15541, 20521, 22294, 21203, 22272, 13586, 15400, 9345, 18683, 10908, 18622, 13227, 14316, 16483, 30243 ], [ 22019, 20170, 13626 ], [ 7561, 9568, 7684, 4221, 5126, 6975, 9426, 6192, 4523, 3821, 2933, 9464, 2010, 2861, 3133, 2262, 11091, 10471, 10868, 1980, 6996, 5005, 1648, 8040, 7854, 6544, 3250, 7417, 3993, 1293, 2661, 9794, 6532, 2067, 3655, 3009, 11009, 4814, 4042, 1638, 2530, 6252, 8118, 610, 778, 1909, 7677, 6981, 1694, 2988, 3355, 5380, 2147, 1498, 245, 8814, 3823, 699, 314, 1235, 2174, 2591, 7030, 8282, 5034, 3343, 1096, 2177, 2707, 542, 2022, 2368, 137, 9618, 12822, 283, 8584, 9170, 3268, 803, 2155, 6536, 5241, 4533, 4945, 2500, 8887, 4710, 1139, 854, 9819, 1381, 2251, 2974, 10391, 6824, 2112, 2216, 5226, 950, 6089, 5838, 2062, 6861, 1390, 10646, 2856, 5265, 1499, 4157, 1563, 572, 2501, 5615, 3828, 3316, 2824, 3047, 585, 5119, 10817, 1777, 489, 2070, 1799, 4740, 4748, 5249, 1883, 2157, 1094, 6684, 975, 1563, 6869, 1841, 223, 683, 2543, 2431, 6235, 1242, 2642, 3261, 4329, 5234, 6986, 9965, 2060, 9785, 3007, 2405, 2405, 7647, 2201, 6114, 3558, 2280, 5167, 11593, 1431, 1664, 4583, 5109, 1330, 2611, 7021, 5332, 9670, 11238, 5923, 1763, 8335, 2028, 1997, 1533, 2012, 1660, 2109, 864, 2453, 4438, 1524, 8025, 1664, 534, 683, 1641, 1668, 1162, 1902, 10391, 3450, 1614, 2857, 1172, 1422, 1328, 2313, 3600, 3204, 1263, 1428, 582, 935, 1238, 1167, 6407, 6100, 4563, 3281, 12400, 6633, 3417, 8552, 11055, 2223, 2593, 4910, 3580, 5160, 1493, 2232, 2510 ], [ 7198, 11757, 14982, 12091, 10099, 4602, 4469, 13792, 7595, 3045, 11107, 2886, 7326, 5428, 4757, 5956, 1947, 13462, 3202, 21042, 8713, 3, 1783, 5330, 2062, 3445, 3970, 2469, 1733, 2000, 2362, 3412, 1658, 10685, 2479, 7305, 5189, 1988, 1651, 1765, 3135, 2474, 3810, 1981, 5230, 4897, 9490, 1393, 2046, 1382, 9212, 3838, 3833, 593, 7041, 2475, 2914, 2406, 16966, 1495, 1677, 2576, 1138, 6964, 9694, 2013, 2828, 1296, 6550, 3643, 6360, 2842, 8280, 3315, 2464, 3389, 1447, 2743, 10790, 12311, 2548, 218, 2006, 2406, 1939, 7398, 2146, 1617, 8469, 1573, 3842, 2128, 5091, 4604, 3444, 5026, 9053, 4172, 4657, 12232, 5429, 4754, 7994, 16027 ] ] }, { "yaxis": { "title": "Grocery" } } ], "label": "Grocery", "method": "update" }, { "args": [ { "y": [ [ 43088, 56159, 40721, 43265, 56082, 36050, 76237, 42312, 37036, 45640, 112151, 47493, 56083, 53205, 36817, 49063, 68951, 40254, 42786, 39679, 38793, 39228 ], [ 44466, 35942, 85, 16117, 22925, 12119, 8565 ], [ 6006, 3366, 1020, 4113, 15168, 4591, 10850, 630, 5181, 3103, 4967, 491, 4098, 5417, 9396, 12205, 219, 9198, 5626, 11594, 1420, 1454, 8797, 1406, 12579, 22039, 1989, 3830, 355, 5531, 15615, 260, 200, 514, 2343, 694, 8040, 834, 180, 3067, 4484, 1107, 5550, 2362, 2806, 2532, 18, 3062, 6134, 1073, 5909, 572, 11908, 3996, 5283, 2599, 161, 243, 6468, 918, 2137, 1479, 9759, 11223, 1689, 2771, 5981, 1210, 117, 37, 3136, 10683, 4515, 7362, 4389, 660, 4456, 13134, 3097, 14531 ], [ 26373, 36847, 32717 ], [ 12669, 7057, 6353, 13265, 9413, 12126, 7579, 5963, 13146, 10253, 5876, 7780, 5567, 9898, 2612, 1502, 688, 9670, 11519, 6269, 3347, 5264, 13779, 6137, 8590, 7823, 4760, 9, 2446, 8352, 4420, 8190, 717, 10766, 1640, 7005, 10362, 11867, 7864, 11405, 12754, 3, 23, 403, 503, 9658, 2932, 1531, 11818, 11134, 11173, 6990, 8258, 4020, 12212, 11170, 140, 7149, 2101, 9434, 7388, 6300, 4625, 3087, 13537, 5387, 10405, 7769, 9203, 5924, 1289, 3463, 622, 2861, 1725, 12434, 5224, 4822, 2926, 5809, 5414, 955, 286, 12759, 11002, 3157, 12356, 327, 8170, 3009, 2438, 13624, 5509, 7107, 2427, 11686, 9670, 583, 1956, 6373, 2541, 1537, 7291, 3317, 4155, 5396, 5041, 2790, 7274, 12680, 4042, 1869, 8656, 11072, 2344, 964, 1838, 8635, 7363, 11210, 6202, 8885, 13569, 8040, 3191, 6623, 10379, 11092, 8475, 9193, 7858, 2153, 4720, 2083, 514, 894, 680, 9061, 11693, 3366, 12238, 7149, 2708, 6022, 2838, 7588, 8090, 6758, 444, 2886, 6987, 7034, 9784, 10617, 7127, 1182, 11800, 1774, 9155, 13360, 4414, 542, 5113, 9790, 13970, 9351, 3, 2617, 381, 2320, 255, 3043, 1198, 3428, 3521, 608, 190, 759, 796, 4734, 2121, 4627, 2615, 4692, 9561, 3477, 6211, 3884, 6338, 5841, 3225, 4048, 1821, 11635, 1206, 9785, 9385, 3352, 2647, 518, 12377, 9602, 11535, 11442, 9612, 4446, 6884, 8257, 8708, 6633, 2126, 97, 4983, 5969, 7842, 5065, 8861, 11243, 3047, 8607, 8533, 1982, 10290, 2787 ], [ 22615, 31714, 21217, 24653, 18601, 17546, 31276, 22647, 16165, 14276, 18815, 21632, 29729, 29955, 24025, 19176, 27329, 19913, 16705, 18291, 19899, 20398, 20874, 24904, 11314, 14100, 15587, 19046, 14438, 18044, 20049, 17160, 19219, 21465, 14903, 17623, 30379, 18827, 31812, 16225, 18840, 17773, 15177, 16936, 17023, 30624, 25203, 18567, 18044, 14755, 20782, 25962, 15603, 18692, 22096, 24929, 18226, 15671, 29526, 31614, 23257, 20893, 15218, 27901, 17360, 25767, 15354, 16260, 21273, 19087, 16448, 17327, 29635, 15881, 25977, 16933, 22321, 16823, 27082, 27380, 14039, 22686, 19746, 22335, 20105, 15076, 28257, 17770, 34454, 20918, 23632, 27167, 26539, 25606, 18073, 25066, 17063, 26400, 17565, 16980, 31012, 21117, 16731, 29703 ] ] }, { "yaxis": { "title": "Fresh" } } ], "label": "Fresh", "method": "update" } ], "direction": "down", "showactive": true, "x": 0.32, "xanchor": "left", "y": 1.16, "yanchor": "top" } ], "width": 900, "xaxis": { "gridcolor": "rgba(148, 163, 184, 0.25)", "showgrid": true, "title": { "text": "Delicassen" } }, "yaxis": { "gridcolor": "rgba(148, 163, 184, 0.25)", "showgrid": true, "title": { "text": "Frozen" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "\n", "feature_options = [feature for feature in imp_df[\"feature\"].tolist() if feature in numerical_cols]\n", "feature_options += [feature for feature in numerical_cols if feature not in feature_options]\n", "\n", "x_col = feature_options[0]\n", "y_col = feature_options[1] if len(feature_options) > 1 else feature_options[0]\n", "\n", "plot_df = df[feature_options].copy()\n", "plot_df[\"cluster\"] = labels.astype(str)\n", "cluster_ids = sorted(plot_df[\"cluster\"].unique(), key=lambda value: int(value) if str(value).isdigit() else str(value))\n", "cluster_frames = {cluster_id: plot_df[plot_df[\"cluster\"] == cluster_id] for cluster_id in cluster_ids}\n", "\n", "fig = go.Figure()\n", "for cluster_id, cluster_df in cluster_frames.items():\n", " fig.add_trace(go.Scatter(\n", " x=cluster_df[x_col].tolist(),\n", " y=cluster_df[y_col].tolist(),\n", " mode=\"markers\",\n", " name=f\"Cluster {cluster_id}\",\n", " marker=dict(size=8, line=dict(width=0.5, color=\"white\")),\n", " hovertemplate=(\n", " \"X value: %{x}
\"\n", " \"Y value: %{y}
\"\n", " f\"Cluster: {cluster_id}\"\n", " ),\n", " ))\n", "\n", "x_buttons = [\n", " dict(\n", " label=feature,\n", " method=\"update\",\n", " args=[\n", " {\"x\": [cluster_frames[cluster_id][feature].tolist() for cluster_id in cluster_ids]},\n", " {\"xaxis\": {\"title\": feature}},\n", " ],\n", " )\n", " for feature in feature_options\n", "]\n", "\n", "y_buttons = [\n", " dict(\n", " label=feature,\n", " method=\"update\",\n", " args=[\n", " {\"y\": [cluster_frames[cluster_id][feature].tolist() for cluster_id in cluster_ids]},\n", " {\"yaxis\": {\"title\": feature}},\n", " ],\n", " )\n", " for feature in feature_options\n", "]\n", "\n", "fig.update_layout(\n", " title=\"Cluster Scatter Plot — Select Features\",\n", " xaxis_title=x_col,\n", " yaxis_title=y_col,\n", " plot_bgcolor=\"white\",\n", " hovermode=\"closest\",\n", " width=900,\n", " height=650,\n", " margin=dict(t=110),\n", " updatemenus=[\n", " dict(\n", " buttons=x_buttons,\n", " direction=\"down\",\n", " showactive=True,\n", " x=0.0,\n", " xanchor=\"left\",\n", " y=1.16,\n", " yanchor=\"top\",\n", " ),\n", " dict(\n", " buttons=y_buttons,\n", " direction=\"down\",\n", " showactive=True,\n", " x=0.32,\n", " xanchor=\"left\",\n", " y=1.16,\n", " yanchor=\"top\",\n", " ),\n", " ],\n", " annotations=[\n", " dict(text=\"X axis\", x=0.0, xref=\"paper\", y=1.22, yref=\"paper\", showarrow=False, xanchor=\"left\"),\n", " dict(text=\"Y axis\", x=0.32, xref=\"paper\", y=1.22, yref=\"paper\", showarrow=False, xanchor=\"left\"),\n", " ],\n", ")\n", "fig.update_xaxes(showgrid=True, gridcolor=\"rgba(148, 163, 184, 0.25)\")\n", "fig.update_yaxes(showgrid=True, gridcolor=\"rgba(148, 163, 184, 0.25)\")\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "md07ad9bd0", "metadata": {}, "source": [ "## 10. Silhouette Analysis" ] }, { "cell_type": "code", "execution_count": 16, "id": "cd0726f63d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean silhouette coefficient : 0.3766\n", "Points with score < 0 : 16 (3.6%)\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "fill": "tozerox", "fillcolor": "#0B4F91", "hovertemplate": "Cluster 0
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 0", "showlegend": true, "type": "scatter", "x": { "bdata": "mwAPuY7sd78oVRt4SIJ+P9l5EElf+q8/N8XsPOMaxz/DQdfmCcXJP5WIcnyJ2cw/sRfah03BzT8DP7F+ja/PP2eXOZn2TNE/qMhqmIiY0T+0JRpj85jWP3VJjMhFOtc/AvcnsUP62D/HG2HlvabZP4m+jvUVXdo/MX+PGJzB2j/D0+fLXw3cP1mK2fwrGd8/0O64CoM+3z/8RTxVIdPfP40EknViDuA/9CnhL85C4D8=", "dtype": "f8" }, "y": { "bdata": "CgsMDQ4PEBESExQVFhcYGRobHB0eHw==", "dtype": "i1" } }, { "fill": "tozerox", "fillcolor": "#2E86DE", "hovertemplate": "Cluster 1
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 1", "showlegend": true, "type": "scatter", "x": { "bdata": "20l5Jc1nzb8+ALOUfyTMv0UmqTNZg7w/au3Ze/mcwz+WlFOpLS3TPyiFqeT7G9g/I+/E3L5/2D8=", "dtype": "f8" }, "y": { "bdata": "KissLS4vMA==", "dtype": "i1" } }, { "fill": "tozerox", "fillcolor": "#4A7DB5", "hovertemplate": "Cluster 2
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 2", "showlegend": true, "type": "scatter", "x": { "bdata": "wBiE0Agnub/F3GdXIYKyv0fFULQxBa+/9X2eMsASn7/9YHYqLV6bv8cqPqBfV5S/lwiB4jp5k79eoaxTvmKOv7J5RzMHin2/ZfGgC9spkz9tLDiy2TKVPxOXkS630ak/kBXzDmahsD8Qe8PrJn6yP/i1JySp4rg/xBlAe+4cvT8Be9/zRma9P+kQE3rEfb4/1Wylg/y3vj/L9lukGcK+P+BmjMG0h8A/4EUdyynAxD+j3HQ9URXFP377b4RHGsg/Btj8tTNOyD9/72lJdM7JP11cSD8q/8k/wEcxFGePyj/nxztTNkDLP9oVVYIKycw/aGvRFpAvzT+lOiFXa2TQP5UgHM/5uNA/wpATy9To0D/izacSsaLRP11RjPSt/tE/+uCvTI3v0z+ofY9SX/fTP+gD5E/LEtQ/FH6a9MA71D/DZE2qOZrUP9lunrEX6NQ/ujGlm/tX1T985bWfdOLVP0ZLZafI+9Y/fErf15wR1z99k9d9fe3XP0F7eAz5e9g/cxcmHgGM2D+tR3OtYV/ZP5wFdfLUYNk/o7LWPGJk2T903ASkHpXZPz9OgM3P6dk/+bAHg2MY2j+s+Ea70/faPyGPbMjucds/IEPubt6V2z9anFZZ9L3bP0Atpa0rz9s/U6MIAwIb3D9XgrDaeT3cPzOx1TU6sdw/zDuWi4HD3D/ubHiiJGPdP4srzxxQeN0/7ahsOLun3T/hrBuvT7TdP2cEIEwJE94//MdeERXu3j/vyX89fe7eP+8b3NT0od8/V/fGeKS43z+bpEtFG/ffP9rGYHim/N8/BpcxKDIW4D/se4ymbyPgP2zOa/voJ+A/G0iHcwQ94D+n16SYvlngPw==", "dtype": "f8" }, "y": { "bdata": "OwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAA==", "dtype": "i2" } }, { "fill": "tozerox", "fillcolor": "#1976D2", "hovertemplate": "Cluster 3
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 3", "showlegend": true, "type": "scatter", "x": { "bdata": "hVMl6Dz/0r8d0yghnsOePyvYH/yT4tI/", "dtype": "f8" }, "y": { "bdata": "lQCWAJcA", "dtype": "i2" } }, { "fill": "tozerox", "fillcolor": "#5DA3E8", "hovertemplate": "Cluster 4
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 4", "showlegend": true, "type": "scatter", "x": { "bdata": "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", "dtype": "f8" }, "y": { "bdata": "ogCjAKQApQCmAKcAqACpAKoAqwCsAK0ArgCvALAAsQCyALMAtAC1ALYAtwC4ALkAugC7ALwAvQC+AL8AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsAzADNAM4AzwDQANEA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkA6gDrAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A/wAAAQEBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAQ==", "dtype": "i2" } }, { "fill": "tozerox", "fillcolor": "#616161", "hovertemplate": "Cluster 5
Silhouette: %{x:.3f}", "line": { "width": 0 }, "name": "Cluster 5", "showlegend": true, "type": "scatter", "x": { "bdata": "qZXmHsvGq79hGyYkr8env79i/WQDenW/dgWLEHG+Sz+hJhzOo3iAP677Jnle/5M/H66vxYlfoj8poh+3gtixPyAwhmwXSrI/BDzGZbR8tz/znD3T0uO7P8cwHiSIpL4/48c4fkpswD/rl3r/Y1fBP0VOdZsxW8M/EjXFHNKRxD8Mm0mTFrHEP/mNCb5uc8Y/gPuDWuCWxj+VQUsTACjHP4ZRyV3fWcg/FJNfFssLyj/eH232YpLKPwuhVJfmAsw/CsDb6sBgzT8OOpcFuDXOP7l6PRzvQM8/g2NNZyBbzz9fj1s13CTQPwDZ2N7pvdA/SC5EGkpf0T8DIbURq7TRP3u+Dyay5dE/THfUFc1M0j8yXGm9JJbSP7irsBHk79I/2Vz/U1rx0j8f49B0cvfSP9O9ImxJE9M/3uyht+mK0z8emHCRh+7TP45oqTm/QNQ//xOiQvNA1D+yPYawsGXUP3bII+kgwtQ/jaDTK73Q1D9mLL+AEePUP5P3dybxgtU/rXfLCr2p1T++1C3I0P3VPzNKZQXqSdY/5u2/NRxW1j+AWAGlWG/WP8WP1+mko9Y/WKNxURYY1z9WBypZOyjXP5ghMBKBbtc/QNajo5N21z9Y9D1EqpXXPwWVW1p6odc/9MjID9e62D9+5bbNC+jYP7xGI3ElhNk/fQef/ZWU2T/g/dCItaHZP5OaUp/ME9o/H9/vjaxC2j/jUb1F7EzaP6epeqI5WNo/6/GhpF/i2j/wdekMWAXbP2KROTUtGts/fiMA6odI2z/YrgPos7HbP7M+5SQr7ds/NM5X31s83D96CmMIN5jcP0bGQERTpNw/ac59ZPWl3D8xXOdKLsTcP/v+5zgL4tw/3yd5N5sR3T8KNb3buCrdP5/oEblnUN0/cM060Opx3T/x2QYcy3fdPxPxzwqLg90/pUs8x7TE3T8homwy59DdPyK1yhUvM94/y+dLwNGi3j/rEsAeRNbePzx9ElhS1t4/yfUAE1Il3z8WZwv3wUffP1/6fjO8EuA/XJoccM0z4D8B693LnkXgP3/5B5OOWOA/PFFUfMRi4D9fyHNJ253gPxZmiYpLyOA/jH9ZuiTZ4D/vmCnpySbhPw==", "dtype": "f8" }, "y": { "bdata": "jAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAQ==", "dtype": "i2" } } ], "layout": { "annotations": [ { "showarrow": false, "text": "Average: 0.377", "x": 0.37663286757387654, "xanchor": "center", "xref": "x", "y": 1, "yanchor": "bottom", "yref": "y domain" } ], "hovermode": "closest", "plot_bgcolor": "white", "shapes": [ { "line": { "color": "#C62828", "dash": "dash" }, "type": "line", "x0": 0.37663286757387654, "x1": 0.37663286757387654, "xref": "x", "y0": 0, "y1": 1, "yref": "y domain" } ], "showlegend": true, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Silhouette Analysis" }, "xaxis": { "title": { "text": "Silhouette Score" } }, "yaxis": { "title": { "text": "Sample Index" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sil_samples = silhouette_samples(df[numerical_cols], labels)\n", "\n", "print(f\"Mean silhouette coefficient : {report.metrics.silhouette:.4f}\")\n", "print(f\"Points with score < 0 : {(sil_samples < 0).sum():,} ({(sil_samples < 0).mean():.1%})\")\n", "\n", "fig = plot_silhouette(labels, sil_samples, report.metrics.silhouette)\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "md91f03be5", "metadata": {}, "source": [ "## 11. FAMD Decomposition\n", "\n", "FAMD (Factor Analysis of Mixed Data) correctly handles our mix of numerical spend columns and categorical Channel/Region labels — preserving the contribution of all 8 features in a 2D projection." ] }, { "cell_type": "code", "execution_count": 17, "id": "cd2ca5e893", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running FAMD decomposition — synthesises all 8 features into 2 components.\n", "Method selected : FAMD\n", "Explained variance — Component 1: 63.4% | Component 2: 36.6%\n", "Total variance captured by 2D projection: 100.0%\n" ] }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "hovertemplate": "Cluster=4
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "4", "marker": { "color": "#636efa", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "4", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "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", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "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", "dtype": "f8" }, "yaxis": "y" }, { "hovertemplate": "Cluster=5
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "5", "marker": { "color": "#EF553B", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "5", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "uayrtsQF5D86EZBVeOH2P8W3dKAEZvY//Ns+OETY9T9B62vTFX/rP4pp2N3BwdQ/Umid71SG5r/o3LvHTN35Pwzp2X+UveE/VRiGyP/W878SqA38RRvQvzZ3FV2cV/K/nGi0AZ3m5788fMlyTADjvxiw3R8wFeK/f66omOBs4b+ZdmussdjzvycdJBlzRfM/niNIxqis8r/A6pwMRHfwP9CDM//H49M/5CbBRXeS9r9W7snzApHzv45foJ7uY+i/z7QpepGi879BUjXFJm3vv2R+UK1rAPK/LYkWwFiX8L8z2sZp2u/xv/6pCq98GPS/X7kwoMoQ878Il8SjI63yv6H3K1DUh/S/IXcaF4Nb7D9SsjhzX8rxv5YvGkbDd+K/vVQbyA5m07/r8gKybIXxvwwI8XNkLvS/mY3j1n5p87/ztynxy2/zv/nlDGirA/O/iP74tQvR8b/mprE4zljwvwL7T//MUem/bW7O25XM578vfplKDRmwP0YsswwSIfS/ergr4SUa9b8Bn3EJT5/2v8Poio97g+I/GqqOaYBH878TZoVC2qjwv3OCq6O/VvS/xl8unzR66786S3CXFi/0v7szy7x7BPW//5Agf8pi8L+w1C+ArDOgvwJYumh9q/e/Gb/ola+B9b9W3dSSL7/xv1EEEdH7m/e/WNmKKV6/5r/vZrVtQwvrP+3QGR7qB/K/w+gKFk+F8r8nx/FK7V71v2Mcv4XMG+i/zNYB0rWc8L/B0RzhcrfkPybApM0ymvC/N+tmIIES6r8ji0b7OMLwv2QRlD1cUfC/59A1IZ+X8L+rNE9c8wHwv3NfH8SmH8G/Zy/ODf048T+DSf+ZzIfxPyayinEHbeS/HeoVqRnA97/M8CYNtmfyv0uLq9ZbZPS/RuTYz5hS87/XTROshLfjP0RkpGYmpvS/q+mhjy7/8b/FVvbf+IvPv6ACOd/nvvO/G4U9Y2mw6r+00R02Xf/yv790vcabRu2/WGVWOGVG3r8gv2GAM+Tsv3LsreOqp+m/qsyEL2SS5j+COnjmeIXwvwmIlBHUysE/h28AMca/5D9vJs6ZLhXBv7Feau3QFfC/t6ZXzBLg379PGEFOvm7LPw==", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "4LWqn4h37z/GjMTDhPHjPyS/C+S/SMO/3jJf6JvjtD8Qk9Qif4fNPx2gU3fEpMe/QPUA/t5YAUC5uk4DLGbwPyUNceFOXem/4aJTYRVy07/9gK2eCI7cP2Gk5K4QAq6/4tNUaEeG8z9YzarTbX71PxgLR4U6MwJA5dRtZ8d/4D+uAN0n6FTkP6oYiAwL69S/P1JUR/mW8z9KBihyPfUHQP+ykt62guE/ePw7p5274D+BfT3/rZnPP2s5Sf4TE/E/nPlxUMAAEUCMNomllJXJvzlhxa/AKqC/kGPAkErm9T8/d/EkU+LQP53YEhasEdA/jmoTN87z4z8V+VGcDlbGP0iajSJTQes/4JgcTI/TwT8fTRXJhYvSv1lvJiYyrOA/p0xk1xZ76z9QpaiROHPDvy7KMBOpheQ/caXH9ABgqL81ImxZkyLBP1VGgDRksMU/IzPU9gdjpz+W5yGNM4vmP4P7wKbt6PA/tOENWrzMCEAb1CS5ptUAQF0GOwAAftE/KIn+eXeNwz93lDlMQjTFv3gnb6vtR8G/rwTk6jngxz+mTgNj69vhP99bbi+NgeA/ybAJu/1t+z+rqmPSTwLYPxjvO3V+48Q/hez9Yh9ryb/1tDIBr1viP/YwjA1cKeU/0n5CxGYpsj+OMqvtgHbsP6UnoNvfhce/PDudvQDf8j9qnqcW9LrNvzpjHmNCiPk/VOhANWRd6j/oQrsfyOjOv7IpnAjL8L4/uvaI+b5duD/qDaQuvgnbvxw7+HYrtsS/9dvM88NA2j+h6YPo3yS+v0n6mU4APNo/nzMsdMQC6D9M29WO7o3gP4C2jCcvcfE/iiDdFdXHsz+W1Gb9xRvNP4L3msCI8ew/8hXx1vqv1j/n7mmOcYnMP/VXxYxw0M0/MXPdRJ/j7T9Q+SOraWuGPwpvMKua7eM/y87clRV88T/wb6vJ5r71P2qfcDKTktA/b3NS8YyC9D/NjtbfFLUAQJ0ye10k3s4/p1Qu05n11T8xTrYIgTvcP1cYcfJ8Gfc/PWRMrkL90r+0U2LzPujWP8UzFQfaQ96/p9dVSCw45b/I1T/G7K8FQECFmfOm7ri/cFsvBHGSt79A8XIiH+IDQA==", "dtype": "f8" }, "yaxis": "y" }, { "hovertemplate": "Cluster=2
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "2", "marker": { "color": "#00cc96", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "2", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "3G/BFNskAUDL+Fw/MAD0P4j9SeJXBfQ/R0Jdg3GuC0CbHS21Rar4P8KDp1fSbgFAsKYpdfQ0+D/6X3AF0HgEQFWdzhykOwlAInYCIBE6A0BQIfWLZ/MPQA4BEoYMS/Y/71Zc6fWLE0DrmpdYByP5P10QC3YTa/8/MvRAVfHKCUBEREx85c37P7WGoVCGbhVAYe/S/nXK9j9989Rmg1n6P9uGPhCxV/4/xR6C7XH39D/Sf5WKFA0AQPc2gQfe7QFA37AONnmy/j/sBJY8I10MQHvrl0BW/QRAduarzgOR+D84V9mibL/6P8LoK2vX2wtA4DAidP/rAUDnkMDRYbL4PwjdJOmcZAxA09Efwf9iAUBRTOANRMryPzl4n52Fzts/E27pIDlo9T/jUhfYPS/2P33yUt0Ccvc/I0gMew78BEBbbzvo4H4KQNGYGS6f9wNADDts4gsnBEBF2Neyl8vxP9ddDFKm2eg/HR8ryIbbD0BnlrPq+3H5P62AFM/31Po/FIcGqAcgFECw82Qcr035PzTlaiLUku4/+UFvxw6Q/j8bCUyyGlL7PzMbSbeZ4/k/0DNFGWfMA0D/A8ll2TL6PwQUn5upngZArRKxg+uM9D8GtJKv6qkDQCaM4/L2LwNAWjkR573ABUAWASvaFnD8P6mZU7jacQxAOGi7qWSgCECrMQTtMI8IQCjB0bnpl/g/BdkMsHMdB0AWFFiYSUUHQJRuJbV7gABADwYMe5iE+D9Keou0Aif1P0TCwIQ+YPE/9DHVnWl78z8LZ+WiZ4gBQMQhWcqowPg/IHOOsAE5/T9fwRBov9LbP6T9IZ825uE//Io7jtziwL+lCDl5JtkOQA==", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "CWk9Z5FZ47/dWLoYISTgv61GyR72wvG/QGJUKO6CwT8K53MImd3Yv+VOKrpYDe+/TDvaFoTv77+oqlKUI/b0v+K/i3FDdNI/o2Sz/bnz5b8r0zx/u9Hjv6D0Al0BNfO/wUuohRay2L8NqkRXYV/uv67Gz9Udb9m/uHcemD6M5b/NEWKiitb1v7kqDg+fa+A/P16zmlSn77/5YpEomoCpv3utACM33ei/H489ROM98b+iCYnOXirgv2jCijdPyu2/Dzg8lROx3b+ivzKWDSfBP2ttNOlule+/Oh4CZ7Jr57+8Ot/MXAT2v2dfes7Tauq/NqtLiDxp0j9dSfyT6bzzv9ymZKFgDdE/Q22PdT5n9L/JZoVOXf7uv+G5YrQJfey/8BHnTYA3578FTGnJfpzrv6CZZ+E37PS/EZI4SCOf579ryiCLef3jv0MkPfdOX/O/ruknwo8e8b9HwIjLzjjzv36nY6RhItG/Z7iIkCep87//Pmxi6/PBv6Y0r56L7e6/iRJo4u2W4z+w7rGERu7yv4d8kZ37Zvo/F0m2IZNz5b/t6ho3ey3pv+80R2/uw/G/AavVgbIg8b/Z/EdZCJL6vyrkwH+X6vO/zS/RAnZQ9L9odCgod77nvyOXfP9EFe2/N5K9D3X/+7+uzfn07MThv1EpetaYEN2/SphOS/2P5r/qtynWzV/3v56vKO4wjuq/I4PpopjW6r98ag1TUkfmv3Qhi9AVCPW/E/H7uPDH+b/c2kLvaSzTv0P/qsJcJ/Y/QFxeGdf31L+WwsOa0ibjv6pt7gnnu+y/OO1aIK8N9L+0sRtZtqjkvx1t4RKXt9U/sToE1pOl17/vklcgz5Pdvw==", "dtype": "f8" }, "yaxis": "y" }, { "hovertemplate": "Cluster=3
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "3", "marker": { "color": "#ab63fa", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "3", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "zC3MKZ2FEUCj7bTOTAoUQDAsxVhynd4/", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "9SWHf0rwEEATtuez/F8uQInwa6sZ+CFA", "dtype": "f8" }, "yaxis": "y" }, { "hovertemplate": "Cluster=0
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "0", "marker": { "color": "#FFA15A", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "0", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "DaxyYgne8b+4yE2XoOf1v1EpfJUFLtM/f0hGKBRoyD/wYcCaEiXlv8uJ0BRHdfK/flLtEUru7r8KZ7QWvmP0v5srHoCtdOS/VmDbHzmg47/V5dSU/E8BQOJMPw/XZvG/zO9v6S5s8L/jCILZnJfpv030zzYXsfK/vovBv2pm7b+KFq056L/cv6jc80wnS/S/wwIrqDtP+L+PUHxsJUSzP08+Wun9+vG/i2bb+JPH9L8=", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "bGE2hdJk8D9TAYdB+gYIQHpCN49YNeA/zQ6TwQkjEUCttDzwHocPQMsbj0b/PfU/iCXkQ9cxEUDleH/sF6/zP+YaLnszGvA/TOepfwA4/j9xbtt2BWwfQLnCkeVNZf4//9HkycE9BUA7iIi+K2b6PxcB23EFKPc/AyBXCoAVAEALCMu87tMKQN9/4fkyzOY/Qhrk6a2N6z8/Ky5e1ZzpP5KwOXtT3O4/7DHqxO8R+T8=", "dtype": "f8" }, "yaxis": "y" }, { "hovertemplate": "Cluster=1
Dim1 (63.4%)=%{x}
Dim2 (36.6%)=%{y}", "legendgroup": "1", "marker": { "color": "#19d3f3", "line": { "color": "white", "width": 0.5 }, "size": 8, "symbol": "circle" }, "mode": "markers", "name": "1", "orientation": "v", "showlegend": true, "type": "scatter", "x": { "bdata": "wKHlL1/tIUDrE7EhbXggQNluP7ELghhAloQNnoCMKECo/NF+Y14gQNy0Y+ghrBZADdE8UbOGH0A=", "dtype": "f8" }, "xaxis": "x", "y": { "bdata": "kZtc8/HbCkBEDcxqVp/xP0nSZoUHdfS/VIIRrd6ioj9fv/FOgEL0P0PAA0tOjNM/pG5W8RhW/78=", "dtype": "f8" }, "yaxis": "y" } ], "layout": { "hovermode": "closest", "legend": { "title": { "text": "Cluster" }, "tracegroupgap": 0 }, "plot_bgcolor": "white", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "FAMD Decomposition — Wholesale Customer Segments" }, "xaxis": { "anchor": "y", "domain": [ 0, 1 ], "title": { "text": "Dim1 (63.4%)" } }, "yaxis": { "anchor": "x", "domain": [ 0, 1 ], "title": { "text": "Dim2 (36.6%)" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.express as px\n", "\n", "print(\"Running FAMD decomposition — synthesises all 8 features into 2 components.\")\n", "\n", "reduced_data, explained_var, method_used = auto_decompose(df, n_components=2)\n", "method_label = method_used.upper()\n", "\n", "print(f\"Method selected : {method_label}\")\n", "print(f\"Explained variance — Component 1: {explained_var[0]:.1%} | Component 2: {explained_var[1]:.1%}\")\n", "print(f\"Total variance captured by 2D projection: {sum(explained_var):.1%}\")\n", "\n", "decomp_df = reduced_data.copy()\n", "decomp_df[\"cluster\"] = labels.astype(str)\n", "\n", "fig = px.scatter(\n", " decomp_df,\n", " x=reduced_data.columns[0],\n", " y=reduced_data.columns[1],\n", " color=\"cluster\",\n", " title=f\"{method_label} Decomposition — Wholesale Customer Segments\",\n", " labels={\n", " reduced_data.columns[0]: f\"{reduced_data.columns[0]} ({explained_var[0] * 100:.1f}%)\",\n", " reduced_data.columns[1]: f\"{reduced_data.columns[1]} ({explained_var[1] * 100:.1f}%)\",\n", " \"cluster\": \"Cluster\",\n", " },\n", ")\n", "fig.update_traces(marker=dict(size=8, line=dict(width=0.5, color=\"white\")))\n", "fig.update_layout(plot_bgcolor=\"white\", hovermode=\"closest\")\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "mdaabc6a1a", "metadata": {}, "source": [ "## 12. Cluster Size Distribution" ] }, { "cell_type": "code", "execution_count": 18, "id": "cdb0362bd8", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "marker": { "color": [ "#0B4F91", "#2E86DE", "#4A7DB5", "#1976D2", "#5DA3E8", "#616161" ] }, "text": [ "22 (5.0%)", "7 (1.6%)", "80 (18.2%)", "3 (0.7%)", "224 (50.9%)", "104 (23.6%)" ], "textposition": "auto", "type": "bar", "x": [ "Cluster 0", "Cluster 1", "Cluster 2", "Cluster 3", "Cluster 4", "Cluster 5" ], "y": { "bdata": "FgAHAFAAAwDgAGgA", "dtype": "i2" } } ], "layout": { "plot_bgcolor": "white", "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Cluster Sizes" }, "xaxis": { "title": { "text": "Cluster" } }, "yaxis": { "title": { "text": "Number of Samples" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plot_cluster_sizes(labels)\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "mdbcc0eef2", "metadata": {}, "source": [ "## 13. Comprehensive Dashboard" ] }, { "cell_type": "code", "execution_count": 19, "id": "cd5291fca0", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "marker": { "color": "#0B4F91", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 0", "type": "scatter", "x": { "bdata": "UKgAAF/bAAARnwAAAakAABLbAADSjAAAzSkBAEilAACskAAASLIAABe2AQCFuQAAE9sAANXPAADRjwAAp78AAFcNAQA+nQAAIqcAAP+aAACJlwAAPJkAAA==", "dtype": "i4" }, "xaxis": "x", "y": { "bdata": "NAgrAkwPoROwDWoGkQ2eA/AbLhu7cwcK0xFfE+ULfQ87EYACHgFoD1IMlwU=", "dtype": "i2" }, "yaxis": "y" }, { "marker": { "color": "#2E86DE", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 1", "type": "scatter", "x": { "bdata": "sq0AAGaMAABVAAAA9T4AAI1ZAABXLwAAdSEAAA==", "dtype": "i4" }, "xaxis": "x", "y": { "bdata": "89MAAOGVAADfUQAAdbQAABofAQCmbgAAdBMAAA==", "dtype": "i4" }, "yaxis": "y" }, { "marker": { "color": "#4A7DB5", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 2", "type": "scatter", "x": { "bdata": "dhcmDfwDERBAO+8RYip2Aj0UHwxnE+sBAhApFbQkrS/bAO4j+hVKLYwFrgVdIn4FIzEXVsUH9g5jAZsV/zwEAcgAAgInCbYCaB9CA7QA+wuEEVMErhU6CfYK5AkSAPYL9hcxBBUXPAKELpwPoxQnCqEA8wBEGZYDWQjHBR8m1yuZBtMKXRe6BHUAJQBADLspoxHCHCURlAJoEU4zGQzDOA==", "dtype": "i2" }, "xaxis": "x", "y": { "bdata": "VSsbFXAiBFA8KXE9gx1XKxxW9TakU+koxHTNJlEtmTFEJVBrvC9jHjoqwRiWKVlBaivAIMIpqxQYHm49bTHjIQZl/R2lHlUh1x05LZ0NuDM/OL8tuTGXGQ0q10BQHQoYXVrPJedbIyZ1H18rBDRoDiQdizJDMq9QmQ6GOu9hITo0GxsbMTk8J3gY+wS2IWJV1y4sMrwqLiGSFIMkhhCAPA==", "dtype": "i2" }, "yaxis": "y" }, { "marker": { "color": "#1976D2", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 3", "type": "scatter", "x": { "bdata": "BWcAAO+PAADNfwAA", "dtype": "i4" }, "xaxis": "x", "y": { "bdata": "R44AAK6rAACQQQAA", "dtype": "i4" }, "yaxis": "y" }, { "marker": { "color": "#5DA3E8", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 4", "type": "scatter", "x": { "bdata": "fTGRG9EY0TPFJF4vmx1LF1ozDSj0FmQevxWqJjQK3gWwAsYl/yx9GBMNkBTTNfkXjiGPHpgSCQCOCaAgRBH+H80CDipoBl0beihbLrgejSzSMQMAFwCTAfcBuiV0C/sFKi5+K6UrThtCILQPtC+iK4wA7Rs1CNok3BycGBESDwzhNAsVpShZHvMjJBcJBYcNbgItC70GkjBoFNYSbguxFiYVuwMeAdcx+ipVDEQwRwHqH8ELhgk4NYUVwxt7CaYtxiVHAqQH5RjtCQEGexz1DDsQFBWxE+YKahyIMcoPTQfQIUArKAnEAy4HuyHDHMorOhi1IgE1aB93DN8ZiyhUKxsh6SOyHmkIcBIjCAICfgOoAmUjrS0mDc4v7RuUCoYXFgukHZofZhq8AUYLSxt6GzgmeSnXG54EGC7uBsMjMDQ+ER4C+RM+JpI2hyQDADkKfQEQCf8A4wuuBGQNwQ1gAr4A9wIcA34SSQgTEjcKVBJZJZUNQxgsD8IY0RaZDNAPHQdzLbYEOSapJBgNVwoGAlkwgiUPLbIsjCVeEeQaQSAEIukZTghhAHcTUReiHskTnSLrK+cLnyFVIb4HMijjCg==", "dtype": "i2" }, "xaxis": "x", "y": { "bdata": "uCVSJmgirARDIH8MXBNADmQEWgQNGL8JZwPBA/MQuwdzFXMbCBhHBNMPYw6yB/AU5QtlGMsE/gVcHAQLExTHGAMOlwS7DD0DECT/DB4CVALKCmgLOAr+AHAAhgg7Gc0gcAYZA9kJKA8oCaIMyQARKo8ifAlNAhIEWgcJBYMhkB+hEHMTPAaQBy0NSAIADSIkNwCqGUMOHAKzHUEaewzfAs0CZxW4BKIcoxsYE5QXlgMwGQkCQh8nAbUF9AO5G2oI6AitAnsDDAOBEqQO9APKGW8BTx1bBN8JkwKrDJwIQQK6CmUXtil4E+wYNAPbAfgNXx58CVoB0w7JB0QHNEaQE4sHFRNWBFsECASPE4MgpwZKBj0DDQlEC8QbxwhwCBoNDgxpB38M0BFvA7YU/APUBZ0DAwdfBRAMmQpwDmkHsANKBoMDzgX6BucFQwVNAaQEuQ+DFn4WlAQqCkwJSwRSBNcC6Ej2Fl8CQQblA2kD8BepCH4DUQHZDtAIqgXeDCwUVAWaAyQOUAP6BZ0EyQpUEGEDJAWCBggEQQKKAxYEKA8yDjAI2QwVDvsSxgeeF3sVxw5oCVIX1gaCFZIMvQeiBg==", "dtype": "i2" }, "yaxis": "y" }, { "marker": { "color": "#616161", "line": { "color": "white", "width": 0.3 }, "size": 4 }, "mode": "markers", "name": "Cluster 5", "type": "scatter", "x": { "bdata": "V1gAAOJ7AADhUgAATWAAAKlIAACKRAAALHoAAHdYAAAlPwAAxDcAAH9JAACAVAAAIXQAAAN1AADZXQAA6EoAAMFqAADJTQAAQUEAAHNHAAC7TQAArk8AAIpRAABIYQAAMiwAABQ3AADjPAAAZkoAAGY4AAB8RgAAUU4AAAhDAAATSwAA2VMAADc6AADXRAAAq3YAAItJAABEfAAAYT8AAJhJAABtRQAASTsAAChCAAB/QgAAoHcAAHNiAACHSAAAfEYAAKM5AAAuUQAAamUAAPM8AAAESQAAUFYAAGFhAAAyRwAANz0AAFZzAAB+ewAA2VoAAJ1RAAByOwAA/WwAANBDAACnZAAA+jsAAIQ/AAAZUwAAj0oAAEBAAACvQwAAw3MAAAk+AAB5ZQAAJUIAADFXAAC3QQAAymkAAPRqAADXNgAAnlgAACJNAAA/VwAAiU4AAOQ6AABhbgAAakUAAJaGAAC2UQAAUFwAAB9qAACrZwAABmQAAJlGAADqYQAAp0IAACBnAACdRAAAVEIAACR5AAB9UgAAW0EAAAd0AAA=", "dtype": "i4" }, "xaxis": "x", "y": { "bdata": "IhUfMEAY+SS3GKcRfQcwJoYQIwMaDiYFshIKEewQ+QupBWca9QfyBNQUcQQbBvwOEgxUCPYD0gr3CDgEYwewBDAHSxzwB7gQxDNdDpkFIQdbBVYF6AdqGBMUKRzfLGcHwwWDAyEX9AaPCv4O9w0JB5MCnxQZH+kBXAXGBAIBpQ44GB0ONghSAt0HGAVjGEYJHwnJAgMOoQiQDKADoRoQHOEchgA4C6wEXwdxGLAD7xELHXwHShrxCpES/ioFEpIT7xJhBWYORAsvQYoEUg8TLw==", "dtype": "i2" }, "yaxis": "y" }, { "fill": "tozerox", "fillcolor": "#0B4F91", "line": { "width": 0 }, "name": "C0", "showlegend": false, "type": "scatter", "x": { "bdata": "mwAPuY7sd78oVRt4SIJ+P9l5EElf+q8/N8XsPOMaxz/DQdfmCcXJP5WIcnyJ2cw/sRfah03BzT8DP7F+ja/PP2eXOZn2TNE/qMhqmIiY0T+0JRpj85jWP3VJjMhFOtc/AvcnsUP62D/HG2HlvabZP4m+jvUVXdo/MX+PGJzB2j/D0+fLXw3cP1mK2fwrGd8/0O64CoM+3z/8RTxVIdPfP40EknViDuA/9CnhL85C4D8=", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "AAECAwQFBgcICQoLDA0ODxAREhMUFQ==", "dtype": "i1" }, "yaxis": "y2" }, { "fill": "tozerox", "fillcolor": "#2E86DE", "line": { "width": 0 }, "name": "C1", "showlegend": false, "type": "scatter", "x": { "bdata": "20l5Jc1nzb8+ALOUfyTMv0UmqTNZg7w/au3Ze/mcwz+WlFOpLS3TPyiFqeT7G9g/I+/E3L5/2D8=", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "ICEiIyQlJg==", "dtype": "i1" }, "yaxis": "y2" }, { "fill": "tozerox", "fillcolor": "#4A7DB5", "line": { "width": 0 }, "name": "C2", "showlegend": false, "type": "scatter", "x": { "bdata": "wBiE0Agnub/F3GdXIYKyv0fFULQxBa+/9X2eMsASn7/9YHYqLV6bv8cqPqBfV5S/lwiB4jp5k79eoaxTvmKOv7J5RzMHin2/ZfGgC9spkz9tLDiy2TKVPxOXkS630ak/kBXzDmahsD8Qe8PrJn6yP/i1JySp4rg/xBlAe+4cvT8Be9/zRma9P+kQE3rEfb4/1Wylg/y3vj/L9lukGcK+P+BmjMG0h8A/4EUdyynAxD+j3HQ9URXFP377b4RHGsg/Btj8tTNOyD9/72lJdM7JP11cSD8q/8k/wEcxFGePyj/nxztTNkDLP9oVVYIKycw/aGvRFpAvzT+lOiFXa2TQP5UgHM/5uNA/wpATy9To0D/izacSsaLRP11RjPSt/tE/+uCvTI3v0z+ofY9SX/fTP+gD5E/LEtQ/FH6a9MA71D/DZE2qOZrUP9lunrEX6NQ/ujGlm/tX1T985bWfdOLVP0ZLZafI+9Y/fErf15wR1z99k9d9fe3XP0F7eAz5e9g/cxcmHgGM2D+tR3OtYV/ZP5wFdfLUYNk/o7LWPGJk2T903ASkHpXZPz9OgM3P6dk/+bAHg2MY2j+s+Ea70/faPyGPbMjucds/IEPubt6V2z9anFZZ9L3bP0Atpa0rz9s/U6MIAwIb3D9XgrDaeT3cPzOx1TU6sdw/zDuWi4HD3D/ubHiiJGPdP4srzxxQeN0/7ahsOLun3T/hrBuvT7TdP2cEIEwJE94//MdeERXu3j/vyX89fe7eP+8b3NT0od8/V/fGeKS43z+bpEtFG/ffP9rGYHim/N8/BpcxKDIW4D/se4ymbyPgP2zOa/voJ+A/G0iHcwQ94D+n16SYvlngPw==", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "MQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AHsAfAB9AH4AfwCAAA==", "dtype": "i2" }, "yaxis": "y2" }, { "fill": "tozerox", "fillcolor": "#1976D2", "line": { "width": 0 }, "name": "C3", "showlegend": false, "type": "scatter", "x": { "bdata": "hVMl6Dz/0r8d0yghnsOePyvYH/yT4tI/", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "iwCMAI0A", "dtype": "i2" }, "yaxis": "y2" }, { "fill": "tozerox", "fillcolor": "#5DA3E8", "line": { "width": 0 }, "name": "C4", "showlegend": false, "type": "scatter", "x": { "bdata": "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", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "mACZAJoAmwCcAJ0AngCfAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC6ALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDPANAA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AAABAQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AQ==", "dtype": "i2" }, "yaxis": "y2" }, { "fill": "tozerox", "fillcolor": "#616161", "line": { "width": 0 }, "name": "C5", "showlegend": false, "type": "scatter", "x": { "bdata": "qZXmHsvGq79hGyYkr8env79i/WQDenW/dgWLEHG+Sz+hJhzOo3iAP677Jnle/5M/H66vxYlfoj8poh+3gtixPyAwhmwXSrI/BDzGZbR8tz/znD3T0uO7P8cwHiSIpL4/48c4fkpswD/rl3r/Y1fBP0VOdZsxW8M/EjXFHNKRxD8Mm0mTFrHEP/mNCb5uc8Y/gPuDWuCWxj+VQUsTACjHP4ZRyV3fWcg/FJNfFssLyj/eH232YpLKPwuhVJfmAsw/CsDb6sBgzT8OOpcFuDXOP7l6PRzvQM8/g2NNZyBbzz9fj1s13CTQPwDZ2N7pvdA/SC5EGkpf0T8DIbURq7TRP3u+Dyay5dE/THfUFc1M0j8yXGm9JJbSP7irsBHk79I/2Vz/U1rx0j8f49B0cvfSP9O9ImxJE9M/3uyht+mK0z8emHCRh+7TP45oqTm/QNQ//xOiQvNA1D+yPYawsGXUP3bII+kgwtQ/jaDTK73Q1D9mLL+AEePUP5P3dybxgtU/rXfLCr2p1T++1C3I0P3VPzNKZQXqSdY/5u2/NRxW1j+AWAGlWG/WP8WP1+mko9Y/WKNxURYY1z9WBypZOyjXP5ghMBKBbtc/QNajo5N21z9Y9D1EqpXXPwWVW1p6odc/9MjID9e62D9+5bbNC+jYP7xGI3ElhNk/fQef/ZWU2T/g/dCItaHZP5OaUp/ME9o/H9/vjaxC2j/jUb1F7EzaP6epeqI5WNo/6/GhpF/i2j/wdekMWAXbP2KROTUtGts/fiMA6odI2z/YrgPos7HbP7M+5SQr7ds/NM5X31s83D96CmMIN5jcP0bGQERTpNw/ac59ZPWl3D8xXOdKLsTcP/v+5zgL4tw/3yd5N5sR3T8KNb3buCrdP5/oEblnUN0/cM060Opx3T/x2QYcy3fdPxPxzwqLg90/pUs8x7TE3T8homwy59DdPyK1yhUvM94/y+dLwNGi3j/rEsAeRNbePzx9ElhS1t4/yfUAE1Il3z8WZwv3wUffP1/6fjO8EuA/XJoccM0z4D8B693LnkXgP3/5B5OOWOA/PFFUfMRi4D9fyHNJ253gPxZmiYpLyOA/jH9ZuiTZ4D/vmCnpySbhPw==", "dtype": "f8" }, "xaxis": "x2", "y": { "bdata": "ggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAQ==", "dtype": "i2" }, "yaxis": "y2" }, { "marker": { "color": [ "#0B4F91", "#2E86DE", "#4A7DB5", "#1976D2", "#5DA3E8", "#616161" ] }, "showlegend": false, "type": "bar", "x": [ "C0", "C1", "C2", "C3", "C4", "C5" ], "xaxis": "x3", "y": { "bdata": "FgAHAFAAAwDgAGgA", "dtype": "i2" }, "yaxis": "y3" }, { "delta": { "reference": 7 }, "domain": { "x": [ 0.56, 1 ], "y": [ 0, 0.324 ] }, "gauge": { "axis": { "range": [ null, 10 ] }, "bar": { "color": "darkblue" }, "steps": [ { "color": "lightgray", "range": [ 0, 5 ] }, { "color": "gray", "range": [ 5, 7 ] }, { "color": "lightgreen", "range": [ 7, 10 ] } ], "threshold": { "line": { "color": "red", "width": 4 }, "thickness": 0.75, "value": 8 } }, "mode": "gauge+number+delta", "title": { "text": "Good
Quality Score" }, "type": "indicator", "value": 6.982978620317818 } ], "layout": { "annotations": [ { "font": { "size": 16 }, "showarrow": false, "text": "Cluster Distribution", "x": 0.22, "xanchor": "center", "xref": "paper", "y": 1, "yanchor": "bottom", "yref": "paper" }, { "font": { "size": 16 }, "showarrow": false, "text": "Silhouette Analysis", "x": 0.78, "xanchor": "center", "xref": "paper", "y": 1, "yanchor": "bottom", "yref": "paper" }, { "font": { "size": 16 }, "showarrow": false, "text": "Cluster Sizes", "x": 0.22, "xanchor": "center", "xref": "paper", "y": 0.324, "yanchor": "bottom", "yref": "paper" } ], "font": { "size": 9 }, "height": 700, "margin": { "b": 70, "l": 50, "r": 80, "t": 80 }, "plot_bgcolor": "white", "showlegend": true, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermap": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermap" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Clustering Dashboard" }, "width": 900, "xaxis": { "anchor": "y", "domain": [ 0, 0.44 ], "title": { "font": { "size": 10 }, "standoff": 6, "text": "Fresh" } }, "xaxis2": { "anchor": "y2", "domain": [ 0.56, 1 ], "title": { "font": { "size": 10 }, "standoff": 2, "text": "Silhouette Score" } }, "xaxis3": { "anchor": "y3", "domain": [ 0, 0.44 ], "title": { "font": { "size": 10 }, "text": "Cluster" } }, "yaxis": { "anchor": "x", "domain": [ 0.6040000000000001, 1 ], "title": { "font": { "size": 10 }, "text": "Milk" } }, "yaxis2": { "anchor": "x2", "domain": [ 0.6040000000000001, 1 ] }, "yaxis3": { "anchor": "x3", "domain": [ 0, 0.324 ], "title": { "font": { "size": 10 }, "text": "Count" } } } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = create_dashboard(df, labels, report, sil_samples)\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "md2e6a1b1c", "metadata": {}, "source": [ "## 14. Putting Segments to Work" ] }, { "cell_type": "code", "execution_count": 20, "id": "cd92a91bd5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Segment labels attached.\n", "Shape: (440, 10)\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
segment_idsegment_nameChannelRegionFreshMilkGrocery
04Moderately Low Fresh · HorecaRetailOther1266996567561
14Moderately Low Fresh · HorecaRetailOther705798109568
24Moderately Low Fresh · HorecaRetailOther635388087684
34Moderately Low Fresh · HorecaHorecaOther1326511964221
45Moderately High Fresh · HorecaRetailOther2261554107198
54Moderately Low Fresh · HorecaRetailOther941382595126
64Moderately Low Fresh · HorecaRetailOther1212631996975
74Moderately Low Fresh · HorecaRetailOther757949569426
\n", "
" ], "text/plain": [ " segment_id segment_name Channel Region Fresh Milk \\\n", "0 4 Moderately Low Fresh · Horeca Retail Other 12669 9656 \n", "1 4 Moderately Low Fresh · Horeca Retail Other 7057 9810 \n", "2 4 Moderately Low Fresh · Horeca Retail Other 6353 8808 \n", "3 4 Moderately Low Fresh · Horeca Horeca Other 13265 1196 \n", "4 5 Moderately High Fresh · Horeca Retail Other 22615 5410 \n", "5 4 Moderately Low Fresh · Horeca Retail Other 9413 8259 \n", "6 4 Moderately Low Fresh · Horeca Retail Other 12126 3199 \n", "7 4 Moderately Low Fresh · Horeca Retail Other 7579 4956 \n", "\n", " Grocery \n", "0 7561 \n", "1 9568 \n", "2 7684 \n", "3 4221 \n", "4 7198 \n", "5 5126 \n", "6 6975 \n", "7 9426 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df_segmented = df.copy()\n", "df_segmented[\"segment_id\"] = labels\n", "\n", "label_map = {p.cluster_id: p.suggested_label for p in profiles.cluster_profiles}\n", "df_segmented[\"segment_name\"] = df_segmented[\"segment_id\"].map(label_map)\n", "\n", "print(\"Segment labels attached.\")\n", "print(f\"Shape: {df_segmented.shape}\\n\")\n", "display(df_segmented[[\"segment_id\", \"segment_name\", \"Channel\", \"Region\"] + numerical_cols[:3]].head(8))" ] }, { "cell_type": "code", "execution_count": 21, "id": "cdcac5e1ab", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "════════════════════════════════════════════════════════════════════════════════\n", " SEGMENT MEANS — ANNUAL SPEND BY PRODUCT CATEGORY (monetary units)\n", "════════════════════════════════════════════════════════════════════════════════\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
segment_idsegment_nameFreshMilkGroceryFrozenDetergents_PaperDelicassen
00Moderately High Frozen · Very High Fresh50050.04447.05225.05896.0948.02404.0
33Very High Delicassen · Very High Frozen31979.032386.018605.034186.01949.023358.0
55Moderately High Fresh · Horeca21200.03886.05139.04120.01132.01690.0
11Very High Detergents_Paper · Very High Milk20031.038084.056126.02565.027645.02548.0
44Moderately Low Fresh · Horeca6072.03293.04123.02452.01224.0997.0
22High Detergents_Paper · Moderately High Milk4724.011837.018462.01547.08196.01639.0
\n", "
" ], "text/plain": [ " segment_id segment_name Fresh Milk \\\n", "0 0 Moderately High Frozen · Very High Fresh 50050.0 4447.0 \n", "3 3 Very High Delicassen · Very High Frozen 31979.0 32386.0 \n", "5 5 Moderately High Fresh · Horeca 21200.0 3886.0 \n", "1 1 Very High Detergents_Paper · Very High Milk 20031.0 38084.0 \n", "4 4 Moderately Low Fresh · Horeca 6072.0 3293.0 \n", "2 2 High Detergents_Paper · Moderately High Milk 4724.0 11837.0 \n", "\n", " Grocery Frozen Detergents_Paper Delicassen \n", "0 5225.0 5896.0 948.0 2404.0 \n", "3 18605.0 34186.0 1949.0 23358.0 \n", "5 5139.0 4120.0 1132.0 1690.0 \n", "1 56126.0 2565.0 27645.0 2548.0 \n", "4 4123.0 2452.0 1224.0 997.0 \n", "2 18462.0 1547.0 8196.0 1639.0 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "spend_cols = numerical_cols\n", "\n", "segment_means = (\n", " df_segmented.groupby([\"segment_id\", \"segment_name\"])[spend_cols]\n", " .mean()\n", " .round(0)\n", " .reset_index()\n", " .sort_values(\"Fresh\", ascending=False)\n", ")\n", "\n", "print(\"\\u2550\" * 80)\n", "print(\" SEGMENT MEANS \\u2014 ANNUAL SPEND BY PRODUCT CATEGORY (monetary units)\")\n", "print(\"\\u2550\" * 80)\n", "display(segment_means)" ] }, { "cell_type": "code", "execution_count": 22, "id": "cd4383b9e2", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABc8AAAPZCAYAAADHsdIGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3X9c1fX9///765wDB0FRQKJMEAFJS41MUtMAXSnZb1PSiiRqvs0frdncdO+3TBfLWq62FqatzMKFOLNZVurcSmcrxdSsofkjkKxMQwN/AeJ5ff/gw+vLOYCCHgHxdr1cuOh5PV4/Hs8XL16vcx7n+Xq+DNM0TQEAAAAAAAAAAIutuRMAAAAAAAAAAKCloXgOAAAAAAAAAIAHiucAAAAAAAAAAHigeA4AAAAAAAAAgAeK5wAAAAAAAAAAeKB4DgAAAAAAAACAB4rnAAAAAAAAAAB4oHgOAAAAAAAAAIAHiucAAAAAAAAAAHigeA4AOK3IyEgZhiHDMDRz5szzuq2kpCRrW2lpaed1W97w4YcfWvkahqHCwsLmTglAK7Nz507dfffduuSSS2S3293ONwsXLnQ7B9V0oZ1Pcf4VFha6HS8ffvhhc6fUoqWlpVn7KikpqUHL8L4AAIDWh+I5ALQCb7/9ttuHtc2bN7vFv/zyS7f4uHHjaq3jhhtusOLJyclNlTrOwmeffabJkycrLi5OwcHBcjqdioiI0A033KDf/e532rNnT5PnRKHuzCorKzV37lwlJCQoODhYPj4+Cg4OVrdu3ZScnKzp06dr69atzZ3mBetcj8GaXxTW/PH19VWnTp10++236+233/Z+4qdx/Phx3XLLLVq2bJkOHjwol8vVpNtvLcrKyhQUFOT2e73hhhuaO60LSnFxsX7961/r6quvVrt27eTr66uwsDBdddVVGjlypH73u9/p4MGDzZ0mPFRWVuqNN97QyJEjFRkZqYCAALVr1049evTQiBEj9MYbb+jYsWPntA2+MAAAtHaO5k4AAHDuqgvfpmlKktatW6c+ffpY8X//+99u83u+Li8vV15entv60PKcOHFCkydP1iuvvFIr9vXXX+vrr7/W+vXr9be//Y0ibAtz8uRJDR06tFZPz8OHD+vw4cPavXu3Vq1apYCAAMXFxTVLjqjbyZMn9d133+mdd97RO++8o5/+9Kd66aWXmmTbGzdu1O7du63Xqamp6t27tyQpODhY8fHxeuaZZ5oklwvZW2+9pR9//NFt2vr167V7927FxMQ0T1IXkMLCQg0aNEjffPON2/QDBw7owIEDys/P15tvvqnExESFhoY2U5bwtG3bNt1zzz3asWNHrdiOHTu0Y8cOvfXWW3ruuef02GOPNX2CAABcICieA0ArEBQUpJ49e+rzzz+XVFU8r/lBaN26dW7z79ixQwcOHNAll1wiSdqwYYPKy8utOMXzlufUqVMaOXKk3nvvPWtahw4dNGLECEVHR+vEiRPaunWr/vGPfzRjlhenI0eOqF27dqed5+WXX3YrnN90000aMGCAbDabioqK9N///tftCyw0r6ioKD3yyCOSpKKiIr322msqLS2VJP3lL3/RLbfcojvuuOOM62nIsXE6RUVFbq9fffVV2e126/VVV12lq6666qzXf7FYuHBhndNfe+01PfHEE02bzAXoV7/6lVU49/X11T333KPY2FgdP35ce/fuVV5ennbt2tXMWaKm7du3KzEx0e1Lo169eik5OVlBQUH6/vvv9eGHH+qzzz5rviQvIGVlZbLb7fLx8WnuVAAAzcEEALQKEydONCWZkszQ0FC3WGRkpCnJvOyyy6x53nzzTSuemZlpTff19TVPnDhhxbp06WLFfvOb35hbtmwxb7nlFjMwMNAMCAgwb7zxRvOzzz6rM6cdO3aY//M//2PGxMSYfn5+pr+/v3nFFVeYkydPNgsKCmrNn5iYaG1r7NixteK7du0yJ0yYYF5xxRVmmzZtzDZt2pg9e/Y0MzIyzB9//LHW/IWFhea4ceOs7TudTrNTp07m9ddfb/785z838/PzrXm///578xe/+IU5ePBgMyIiwmzbtq3p4+NjXnLJJeZNN91kZmdnmy6Xy239H3zwgZWvpFptqqysNBcuXGj+5Cc/MTt27Gg6HA4zNDTUvP32281//etfde6z+rz44otu2xowYID5ww8/1Jrv4MGD5gsvvGC9/s1vfmMt06VLlwbnf/ToUXPWrFnmNddcY7Zt29bK/eqrrzYffvhh8/3336+1/vp+aq732LFj5h/+8AdzwIABZvv27U0fHx/z0ksvNW+77TZzxYoVtdrz6quvuq3rxx9/NCdPnmxeeumlpr+/v5mUlGRu2LDBNE3TLCgoMEeOHGl26NDBbNu2rTls2DDz888/r3N/NvZY8vw7WLNmjZmQkGC2a9fObMjbqbvuustafsiQIXXO8+2339b7t/TWW2+Zt956q3nppZeaPj4+ZlBQkHnjjTe6/R3XdPLkSfPpp582Y2JiTF9fXzMqKsqcNWuWWV5e7rY/X331VWuZlrqvN2zYYCYnJ5vt2rWr85zT2GOwPjW3m5iY6Bb7xz/+4ba+1NTUevM93bGxceNG8/777ze7dOli+vr6mm3btjV79+5tTp8+3Txw4IA1X0FBwWnbU/237Pk7q6k5z6ctyb59+0ybzWbti9jYWOv/ERERtc7rpln7vHn48GHzscceMzt37mz6+vqasbGx5ty5c2st57nPd+zYYY4cOdIMCgoy/fz8zP79+5sffPCB2zKev2vPuOfxVe3EiRPmr3/9a3PYsGFm165dzcDAQNPhcJghISHmDTfcYP75z382T5482aht1ScoKMha5re//W2d83z22Wfmt99+e9r9sX37dnPEiBFmUFCQ6e/vbw4aNMj85z//Wef6Dh8+bD7xxBNm3759zcDAQNPX19fs0qWL+fDDD5u7du2qNf/YsWPd/n6/+eYbMz093bzkkktMp9Np9u7d21y6dGmd21q7dq2ZmJho+vv7m0FBQebIkSPN3bt311pnQ3heV7/66ivzhRdeMK+66irT6XSal19+ufn444+bR44csZaZNWuWNX9kZGStY3Lr1q1u69y6desZ8+jfv7/bMk8++WSdx/pHH31krlq1ynr9j3/8w3zwwQfNuLg4MywszPT19TXbtGljxsTEmA8++KC5bds2t+XPdO71PPds3rzZTEtLM7t27Wo6nU6zbdu2Zt++fc0//OEPbu89a3rrrbfM+Ph408/PzwwNDTUffPBBc//+/Wc8x53re9DNmzebN998s9mhQwdTkrl27VorbhiGuXv3brflKysrzY4dO1rz/OlPf6rntwMAuNBQPAeAVmLx4sVuH1iqCxlff/21Ne13v/ud6evra0oyH3vsMWvZYcOGWfMMHDjQbb01P7gnJCSYTqez1oej4OBgc//+/W7L5ebmmn5+fvV+oGrXrp3bBzbTPH2x58033zTbtGlT7/qio6PNvXv3WvN///33Zmho6Gk/1L344ovW/Hl5eWf8EPjggw+65XS64vOxY8fMwYMHn3Z9v/vd7xr8+73iiius5fz8/MxvvvmmQcudbfE8KSnptLnfc889tdZf30/1er/77jvzqquuOu28//M//+OWo2dx8Nprr621jJ+fn/n222+bISEhtWIhISFuRUnTbPyxZJrufwf9+/c37Xa72zJnctttt1nzxsbG1ioy1efUqVPmvffee9p9Nm7cuFrLjR49us55a+Yhnb543hL29XXXXWc6HI5ay9U85zRF8fzo0aNu67vpppvqXO50x8Zzzz3nVsT1/AkLCzM3b95smub5L56f7/NpS/Lkk09aOfr7+7sVwCSZa9asqbVMzWMqJCTE7N69e51tfumll9yWq7nPe/fubbZt27bWMr6+vuYXX3xhLXO2xfODBw+e8bi/8cYbzcrKygZvqz7VXwRJMlNSUszjx483aLma++Paa681AwMDa+Vot9trfQm4Y8cOMyIiot52BQQE1Hr/ULPQHRUVZV566aW1ljMMo9ZyK1asqPccM2DAgHrPCfXxvK7ecsstdbahf//+ZllZmWmaprl//37rvZmkWjn++te/tmJ9+vQ5Yw4ff/yx27Zuu+22BuVumu4dMer68fX1Nf/xj39Y85/pGKx57vnzn/9c6/xY8yc+Pr7WF3fz5s2rc96uXbu6vZ/wPMed63vQa665xvT393dbpqCgwOzdu7f1evr06W7Lr1692m0/HTx4sMH7HQDQsjFsCwC0EgkJCW6v161bpx49ergN2TJ06FC99957+uijj6zpp06d0n/+8x9rntMN2bJu3Tp16dJFY8aM0X//+1+98847kqRDhw5pwYIFmj59uiRp165deuCBB6yhYEJDQzV27FhVVlZqwYIFKi0t1ZEjRzRq1Cjt3LlTYWFhp23bV199pfvuu09lZWWSpN69e+vOO+9URUWFsrOz9c0332jPnj0aM2aMPvroI0nSm2++aT28LCgoSA8++KBCQkL07bffaseOHbXGfbfZbLrqqqsUHx+vsLAwdejQQWVlZdqyZYveeecdmaapV199VePHj9d111132nwl6bHHHtMHH3wgSXI6nbr33nsVFRWlLVu2aNmyZZKk//3f/1Xfvn01dOjQ067r22+/1Zdffmm9HjZsmDp16nTGHM7W9u3brSFGbDabHnjgAcXGxuqHH35QQUGB2/AjQ4cOVdu2bfXiiy/qq6++kiT17dtX99xzjzVPcHCwJOm+++7Tf//7X2t69a3/7777rvWQ2/nz5ysuLk7jx4+vM7ctW7bo4YcfVrt27fTnP/9ZlZWVKisr0+233y5/f3899thjOnz4sF577TVJVQ+5e+WVVzRt2jRJZ3csefrkk0/Url073XffferUqZM2bdp0xn0aFxdn/b3s3LlTERER6tOnj/r27at+/frpxhtvrPN3+tRTT+mNN96QVPW7GDVqlHr27Kldu3bpr3/9q06dOqWXXnpJ1157rfUg4KVLl2rx4sXWOqKiojR69GgVFRXpr3/96xlzrdYS9vXGjRvPeM5pzDF4tj7++GO315deemmd89V3bKxdu1ZTpkyxnkvRtWtXjR49WocOHdKrr76qiooKff/997rrrrv05ZdfKjg4WM8884w2bdqk3Nxca/3V45u3b9/+rNvSFOfTlqT6+JSkW2+9VQkJCYqJibHGkl+4cKF+8pOf1Lt8cXGxfvzxR6WnpyskJERZWVk6fvy4JGnOnDn66U9/Wudy27ZtU8eOHTV+/Hh9//33ys7OliRVVFTo+eef1/z588+pXYZhKCYmRv369VOnTp0UFBSkkydPaseOHfrb3/6myspKrVmzRm+++aZSUlLOaVtxcXHW73jJkiV677331L9/f/Xp00fXX3+9fvKTn6ht27anXcenn36qTp066ZFHHtGRI0f0yiuvqLy8XKdOndLDDz+sG2+8UYGBgTp16pTuuusua8iisLAw3XfffWrfvr1WrFihvLw8HTt2TCkpKdq1a1edY6x/9dVX8vf31+TJk+VyuTRv3jydOnVKpmnqD3/4g3XNPX78uNLT01VZWSlJ8vHxUXp6uoKCgrRo0aJaf/dn491339Udd9yhq6++Wu+//741PNcnn3yiZ555Rv/3f/+nsLAwjRw50jrXv/zyy27vC/72t79Z/3/wwQfPuM1//etfbq/T09MbnG/btm01ePBgXXXVVQoODlabNm1UXFysd999V9u3b1dFRYUeffRR5efnS6o6J+3Zs0fz5s2z1vHrX/9aQUFBkqSePXtKkj766CM9+uij1jlw0KBBuvHGG/Xjjz/qtdde0+HDh5WXl6dHHnnE2g/79u1zG4IwICBADz/8sGw2m1555RUVFBTU2QZvvAfdsmWLfHx8lJaWpujoaP33v/+Vj4+PJk2aZF1rFy5cqCeeeMIaSqvm7+m2225Tx44dG7zfAQAtXPPW7gEA3hQTE2P1ern33ntN0zTN8ePHm5LMtm3bmpWVlea0adOs3l6lpaXmpk2b3HrWvPvuu27rrNnrrW3btuZ3331nxa655horNmLECGv6z372M2u6zWZzu51/3bp1btvLzMy0YvX1lPz5z39uTe/Vq5dZXl5uxXbs2OG2vo8++sg0TdN89tlnrWmevZlNs6onqWdvedM0zb1795pLly41X3jhBXPOnDnmM888Y15++eXWumresl5fz+3i4mK33lVvvPGG2zZq9gqu2YO1Phs3bnTbzq9+9aszLlPtbHqeb9682ZrWo0ePWrd6V1ZWmoWFhW7TznT79JYtW9y2VbPHVnl5udmjRw8rFhMTY8U8e9bWPF48e1fn5ORYsfj4+DqPzbM5lkzT/e/A4XDUunX9TA4dOuR2HHn+2Gw2c8SIEW490k+dOuXWw/vJJ590W2f137Iks1u3btb0oUOHuv3N1uwN7tlL+3Q9z1vCvm7oOcc0z3wMnknN7UZFRZnPPPOM+cwzz5iPPvporR6zb731Vp3L1Xds3HHHHW49Hmv2SHz99dfd1r1o0SIrdrqe5WeKt4TzaXP7z3/+U+fv7X//93+taf7+/mZpaanbcp5/JzWHwvrjH//oFqu5bM19brPZ3IYXuvPOO61Yzd7DZ9vzvNr3339vLl++3Jw7d651zerZs6e1THp6eoO3VZ/169ebPj4+9Z6//P39zV/+8pdux5Ln/vDx8XG7A+Svf/2r2zpeeeUV0zRNc/ny5dY0X19ft2tNeXm5W4/0mndv1ex5LsltGLDHHnvMmh4cHGxNz8nJcVvm5ZdfdttXNdt8tj3Pf/rTn1qxiooKt97SnTt3tmI1j1VfX1/rvF3z2unr62sWFxefMYcJEya45bB9+/YG5V7t1KlT5oYNG8yFCxeaf/zjH81nnnnGnDJlits6i4qK6m1zXXf61By6bNiwYW7vK1auXGnFDMMwv/76a9M03e8akWQNF1fXNmue47zxHlSS+d5779Vqx7Fjx9yGMVq+fLlpmlVDpdUcsqWuYegAABcuep4DQCtyww03WL3pqnuJVf97/fXXy263KyEhQU899ZTV43z79u3W8jabTQMHDqx3/XfccYdbj8vY2Fht2bJFknT48GFres2e7H379lWPHj3ccuzatavVY6jmvPWp2Sv1888/l9PprHfe//znP7r++us1cOBAGYYh0zT10ksvKS8vT1deeaWuuOIK9e3bV4MHD3brbVRcXKyxY8fq3XffPW0u+/btO2O+GzZs0KlTp6zX9957r+6999568z0T8//11GoqPXr0UEhIiIqLi7V9+3bFxMTommuuUWxsrHr37q0bb7xRXbp0adQ6PduZmppq/d/X11ejR4/Wb37zG0nS7t27dfDgwTp7FN53333W/yMjI63/+/j4aOTIkdbr2NhYq4dfzWPzbI4lT7fccot69epV73J1CQoK0saNGzVz5kwtXrxYR44ccYu7XC4tW7ZMRUVF+uSTT2S32/Xll1+quLjYmufXv/61fv3rX9e5/l27dumHH35Qx44d9emnn1rTb775Zrf9+OCDD2rWrFkNyrkl7OuGnnO87auvvtLUqVPrjKWnp+vOO++sM1bfsVHz+L/55pvdeiTee++9euihh3Ty5Elr3pr73tua4nxan6+//tqtJ/3ZGjdunAIDA884X80HhbZv314333yzJGn06NH63e9+J6mq9/GSJUv00EMP1bkOu93uFrviiivc4ocPH67zobADBgxQ796961zOG8fuiRMnNGHCBL3++utyuVz1zteQa9aZDBw4UB999JFmzpyp1atXWz21qx0/fly///3vVVFRoeeee67Oddxwww1u55F77rlHaWlp1nG/adMmpaenux2fFRUVbst4qu/6efnll+uWW26xXte37z3vGqp5nY6MjNSgQYOsO8jOVs1rnY+Pj1JSUqxr3b59+6yHtw8YMEDXXnutPv30U1VUVOj111/X448/7tab+Y477mjQXTTn8p7hH//4hx5++OFaDyv2tG/fPoWHhzd4vTV/r6tWrZLNZqtzPtM09cknn2jkyJFu17LQ0FAlJydbr5OSkhQZGanCwsJa6/DGe9Crr77aOl/U5O/vr/T0dP3hD3+QVPUA6dtvv10ffPCBfvjhB0nSZZdd5pYrAODCR/EcAFqRhIQEvfrqq5KqihSffvqpdWtt9XAsAwcOlN1u16lTp7Ru3Tq34nnv3r1POxyAZ8G0ZtGl5of3mh9OL7nkklrrCQsLsz64NKSIcOjQoTPOU616aIHrrrtOzz77rGbMmKGjR49q8+bN1tAgktSxY0f97W9/U1JSkiTpoYceOmPhXJJ1G7C38j127JhOnDihNm3a1DtP586d3V7v2LGjweuvyfMDdX1t8fPz05IlS/Tggw+qqKhIX331lTUchlRV7H7qqaf085//vMHb9vw9ex4XnoW3w4cP11k8v/zyy63/1zz+LrnkEjkc///bmpr/r3lsns2x5Ck2NrbB66ipU6dOeumllzR37lxt2bJFGzZs0D//+U+tWLHCKkZt2rRJ69evV2JiYqNyrc63Y8eO+vHHH61pnsOL1DfcSF1awr5u6DnnfHI4HOrYsaP69u2r9PR03XXXXfXOW9+xcbpzot1uV0hIiPbv319r3vOhKc6n9dmzZ0+9X0o0xsiRI89YPC8rK9OSJUus13feead1/PTs2VNXXXWVNYzUwoUL6y2eh4WFyc/Pz3rt+WVDfcfh2R67DT1PT58+3e3Lgfo05JrVEPHx8Xr33Xd19OhRbdy4UR9//LHeffddt6FNsrKy9Mwzz7idE6o19Lg/3+eNmvu35rmyXbt2ta7DDflC6Ewacq2rnmfSpEnWsCyvvPJKreJ5Q4Zskep+z9C9e/czLvftt9/qzjvvtIYlOp3GHldn83s93bWselpdxXNvvAc93XV+4sSJeu655+RyufT+++/r22+/dTvXpKamWkO5AABaB4rnANCKeI57/uSTT1ofFKuL54GBgerdu7e2bNmidevWuY2lfbrxzqWqXlM1GYZR53zVY11K0oEDB2rFv//++zrnrU/Nea6++mrdf//99c4bHx9v/f+xxx7TuHHj9Mknn+i///2vdu3apZUrV1q9dNPS0lRYWKhjx45pxYoV1nKjR4/WM888o06dOslms+m6666zetY2hGebpk6dWucHuGp1FRpq6tSpk6644grrd7Vq1Sp99913uuyyy86YS83eXSdOnHCL7dq1q97lhgwZooKCAm3evFlbt27V7t279Z///Ef//ve/VVFRoV/84he6/fbbFR0dfcYcpNr75MCBAwoJCbFe1zwm6pq/mucxWO1M+7Cu9TbmWKrJ39+/Qduqj8PhUHx8vOLj4zVp0iS99dZbGjFihBXfvXu3EhMTa+2Dhx9+uFav15qqj7EOHTpYPdY9//6qC1UN0RL2dUPPOd6WmJjoNrZ/Q9V3bAQFBVkFIc/fyalTp9zuMGjIOfFcnO/zaUvx1ltvuRXfXnvtNbfxz2tav369du/erZiYmFqxsz0GG7qcZw/cmufpI0eO1Do3VqvZg3/w4MF66aWX1LVrV9ntdqWkpLgVXb2pbdu2GjJkiIYMGaL//d//1c9+9jM9//zzkqSTJ09q7969dV4XznTcd+jQQZL78dm2bVurl3Zd6vsysKH7vnqbUtW+9vwiu7593xgHDhxwO297rrNmDmPGjNHUqVP1ww8/aPv27XrhhRes63SnTp3O+HyUakOGDHF7vXDhwnrvlqnpnXfesQrnhmFo0aJFuu2229SuXTvl5+frqquuatD261LzHDh48GANHz683nkHDBggyX3f1PVesr7rmTfeg57uOt+1a1cNHz5cK1as0KlTp/SXv/xFf//73614WlpavcsCAC5MFM8BoBWJiorS5Zdfrm+++UZSVfFAquop3K9fP2u+hIQEbdmyRR999JFbL6wzFc8b6vrrr7eKzZs2bdL27dut22b//e9/uz3kqa6hGk63vu+++073339/rQ/NZWVl+tvf/qbExERJVT2o7Ha7wsLCrA/6UtVDoPr06SNJ2rt3r4qLi62HllUbNWqU1XNr+/bt+uyzzxrV/n79+lm9+yWpTZs2+sUvflFrvvz8fB06dKjeImVNjz76qCZOnGi1ddSoUXr77bdr3cL9ww8/KDc315q35ofPgwcP6quvvlJUVJSOHDmiF198sc5tlZWVqaCgQD169FDfvn3Vt29fSVU99oKCglRSUiKXy6WtW7daRZKabair15rn7zk7O1tPPvmkpKpb82s+4DImJqbOXufecDbHkjc8++yzuuyyy3TXXXe59WKVVOtBe9W/s+7du1vD50hVPf3qOo6Kioq0fft268uI+Ph4rVy5UlLVFy0//vijtc7qO1OaQlPv6zMdg83p+uuv1/LlyyVJK1eutIbYkaQ33njDGrqiet7zncv5PJ/W/FLMU1JSUpMNQ9WQXtk1vfbaa3riiSfOTzKn4Xm314YNG6zC4jPPPFPv/qpZeL711lutwv+BAwfOeagRT5MnT9bIkSOVkJBQqxBd3/nL07///W8VFhZaw7Dk5ua6HffV15max//Ro0fVp0+fWsVg0zT1r3/9S1FRUWfbJLdtVnvjjTesOxAKCwu1fv36c1q/VHWtq35vdfLkSbceyp07d3brie50OvXwww/rqaeekiS3uzQeeOCBBvdm7t+/v/r166cNGzZIkpYvX65nnnmmzrs+Pv74Yx09elQ33XST2zHVvn17jR492vpyp+Y12pPne5j63gNUnwP379+vRx55RAEBAW7zlJaW6v3331dcXJykqmvZm2++Kamq4P3hhx9ad7esXbu23i/rvP0etC6TJk2yOl089dRT1gOY+/fv7zZMDACgdaB4DgCtzA033GB9yKn+0B0fH+9WsEtISNCf/vSnWh/KBw0a5JUcJkyYoBdffFEVFRVyuVxKTEzU2LFjVVlZqQULFljztWvXTg8//PAZ1zd58mTNmzdP5eXlOnDggK6++mqlpKSoU6dOKi0t1eeff661a9fq6NGj1vii69at03333adBgwapR48e6tSpk06dOqVly5ZZ6/X19VWbNm3Uvn17dejQweql+LOf/UxbtmzR0aNHtXDhQlVUVDSq/SEhIUpLS9Mrr7wiSfrtb3+rTz75RP3795ePj4+Kior00UcfKT8/X7/5zW8atN/HjRunt99+W6tWrZJUNX5oTEyMRowYoejoaB0/flyfffaZVq9ere7du1vFc8/iwKBBg5SUlKRPPvnE7QNkTT/++KOuvPJKXXXVVbruuuvUqVMntWnTRuvXr1dJSYk1X80iSc0hPt59911NmzZNHTt2VMeOHZWWlqa4uDglJSVZvXlnz56tgoICxcbGasWKFW7DBzVmOJjGOptjyRu2bdumxx9/XO3atVNiYqJ69eqldu3a6euvv1ZOTo41n5+fn1WwtNlseuyxxzRjxgxJVUWYXbt2aciQIQoICNC3336rTz75RJs3b9YDDzygYcOGSZJ++tOfWsXzH3/8Uf369dOoUaNUVFSkRYsWea1NZ9LU+/pMx2Bzeuyxx6zCUWlpqa677jqNHj1ahw8fdjsnhoeH6+677z6vuZzv82lL8M0332jNmjXW6169eunKK6+sNd9//vMfff3115Kk119/Xb/97W+b7O6Gau3bt1e3bt2sHsaZmZnatm2bSkpKTlsEv+KKK/TFF19Yy3z//fcyDEPZ2dnW2Mve8s477+iFF17Q5ZdfrsTERHXr1k0+Pj76/PPPtXTpUmu+vn371vvlycmTJzVw4EClpqbqyJEj1vVRqrqWjBo1SlLVFwE177S65ZZbdPfdd6t79+6qrKzUzp079eGHH+q7777TBx98oK5du551u26//XaFhoZaPaInTJigvLw8BQUFadGiRW7F/bP1l7/8RQcPHlTv3r31/vvvW0MFSVXnak+PPPKInnnmGZ06dcoqyEqN7838yiuvaODAgdY1+5e//KX++te/Kjk5WR06dND+/fu1du1abd26Vc8995xuuukmtx7yP/74o26++WbdcMMN+vTTT916Vnuqee6VqvZjcnKyHA6Hbr/9dsXGxurxxx/X22+/LdM0tX37dvXs2VMjRoxQx44ddejQIW3dulX//ve/demll+qee+6RJN1///2aOXOmtR/uvPNOpaenW+2rj7ffg9Zl6NChio2N1c6dO91+Tw0dWgcAcIFp8keUAgDOq7lz55qS3H6mTZvmNs+BAwdqzRMTE1Pn+rp06WLN85vf/MYtNnbsWCuWmJjoFsvJyTGdTmet7VT/BAQEmO+9957bMomJiVZ87NixbrGlS5eabdq0qXd91T81t3+meadMmWLN/9RTT9U5T8+ePc1rr722zrw++OADt3kLCgqs2NGjR83BgwefMQfPfXo6R48eNdPS0s64zquvvtptueuvv77O+YYOHVpn/t99990Zt3HdddeZJ0+etLaxfPnyOue76qqrrHm++eYbs3v37qdd70MPPWS6XC5rmVdffbXO369pmuZvfvMba3qXLl3cYqc7Nht7LJnm6f8OGqJmPvX9GIZhZmVluS1XWVlpjhkz5ozLev69jB49us75br75ZrfXr7322gW1r0+3rYYcg6dTc7ue627ocqc7NubMmWPabLZ690FoaKi5adMmt2VO9zs5U7w5z6fN7cknn3TL7ZNPPqlzvqysLLf51qxZY5rm6Y/30533T7fPT7fO+fPn17lP4+LizNDQ0DqPr/p+J5dddpl500031XksFxQUuM37wQcfNGh/1jzG6/tp166duWHDBrflau6P/v37m8HBwbWWs9ls5t/+9je35bZv325GRESccZs18z/dueF0fyfLly837XZ7ne3p06dPo88JnsdHUlJSnbnHx8ebJ06cqHMdd911l9u8119/fYO27Wnz5s1mbGzsGffjc889Z5qmaVZUVJi9evWqcx7Pa5jnsVNzX9X8qfm7ff755+vc1zV/PP82XnzxxXrn69Gjh/X6wQcfdFvO2+9B6/KnP/3JbZ1t2rQxf/zxxwb/fgAAF466H3MNALhgeY57LtUejiU0NLTWw6O8NWRLtdGjR2vLli366U9/qujoaPn5+cnPz0+xsbGaOHGitm3bpptvvrnB67v77rv1+eef69FHH9WVV16pgIAA+fn5KSoqSoMHD9bs2bPdHqQ5aNAg/e53v9Mtt9yi6OhotWvXTg6HQ6GhofrJT36ihQsXas6cOdb8v/rVr5SVlaXY2Fj5+Pjo0ksv1U9/+lOtXbu21m3pDREQEKA1a9bo9ddf19ChQxUaGiofHx917NhRV199tdLS0vTWW2/pV7/6VaPW+eqrr+rTTz/VxIkTrQe8+vj4qHPnzho4cKCeeOIJ6zbnau+8847S0tIUEhIiPz8/9e3bV0uWLNH06dPr3E5QUJBeeOEFjRkzRldeeaWCg4Nlt9sVGBiovn376oknntA///lPt7Gvb7/9dr3wwgvq0aNHvcPQdOrUSZs2bdLvf/979evXT4GBgXI4HLrkkkt06623avny5Xr55ZfPe8/Pxh5L3vD0009r0aJFevDBB9WnTx9dfvnl8vX1tbZ733336aOPPtKECRPclrPb7XrjjTe0fPly3XHHHerUqZN8fHwUFBSknj176p577tFf//pX/elPf3JbLjs7W0899ZSio6Pl4+OjyMhIzZgxo9ZQPfUNseAtTbmvG3IMNqfHH39c//nPf3TvvfcqPDxcvr6+8vf3V69evfSrX/1Kn3/+ua699tomyeV8n0+bW82xza+88kq3YctqGjNmjNtdWY0d6sVbxo0bp7lz51rXn86dO+sXv/iF/v3vf9c79vLo0aO1ZMkSXX311fLx8VFISIjuueceffLJJ+rUqZNX81u1apX+/Oc/a8SIEerZs6dCQ0PlcDjUtm1b9erVS4899pi++OILXXfddfWu44orrtDGjRs1cuRIBQUFqU2bNho4cKBWrVqlkSNHus3bvXt3bdu2TU8++aT69etnXecuv/xy9evXT48//rj+/e9/1/l+p7Fuv/12rVmzRgkJCWrTpo06dOigO+64Qxs2bFCvXr3Oef0vv/yynn32WXXv3l2+vr7q1KmTfv7zn+uf//xnrSG8qk2ePNntdXVv68a65ppr9MUXXyg7O1t33XWXIiIi1KZNG7Vt21ZXXHGF7rzzTi1atMjqfe3j46N//etf1vsFp9Opnj176qWXXtLMmTNPu60333xTd911l4KDg+u9hk+ePFmbNm3SQw89pJiYGPn5+SkgIEDdunVTcnKy/vSnP2ndunVuy4wfP17Lli1T37595XQ61bFjR6Wmpurjjz92e/Cu57XM2+9B65KWlub2/vDuu++uNQwTAKB1MEyziQYeBAAAQJPwfPBdtRdeeMGtMPPNN994vdAGAFLVGPdr166VJI0dO7bZvpy40Hz77bfWUCj+/v7av3+/2rVr18xZNY/6rmVbt25V3759rWfL/PWvf9W9997b1Onpiiuu0M6dOyVJ//znP2uNzw8AaB0Y8xwAAKCVSU1NVXl5uYYOHaouXbro2LFjWrdunds4sXfffTeFcwBoIT788EMdPXrU7U6iBx544KItnEvSSy+9pOzsbI0cOVLR0dGy2+36/PPP9cILL1iF886dO+uuu+5qspy2bt2qgwcP6p133rEK5z169NDgwYObLAcAQNOieA4AANDKVFZWasWKFVqxYkWd8euuu05/+ctfmjgrAEB9PIuvISEhysjIaKZsWgbTNPXpp5/q008/rTMeFham5cuXN+nDih977DHrjgpJMgxDzz77bJM/bBgA0HQY8xwAAKCVGTt2rO68805FRETI39/fGsc/OTlZCxYs0EcffaSgoKDmThMA4CEoKEi33nqr1q5dq8suu6y502lWSUlJSktLU2xsrNq3by+73a6goCANGDBAmZmZys/PV58+fZolN39/f8XHx2v58uVKTk5ulhwAAE2DMc8BAAAAAAAAAPBAz3MAAAAAAAAAADxQPAcAAAAAAAAAwAPFcwAAAAAAAAAAPFA8BwAAAAAAAADAA8VzAAAAAAAAAAA8UDwHAAAAAAAAAMADxXMAAAAAAAAAADxQPAcAAAAAAAAAwAPFcwAAAAAAAAAAPFA8B9Ak0tLSZBiGkpKSmjsVAAAuKoWFhTIMQ4Zh6MMPP5QkzZw5U4ZhKDIy0povMjJShmFo5syZzZInAAAA0NJQPAcuEklJSdYHZ8+fv//9782dHgAAaKCa1/Srr77aLVZcXKw2bdpY8WnTpsnpdKpfv37q16+fAgMDmylrAABah4qKCmVlZSkhIUHBwcHy9fXV5ZdfrhtuuEGZmZk6evRoc6cIwIsczZ0AgKbl6+ura665xm1acHBwnfNWVFTI19e3KdICAABnYdu2bVq3bp0SEhIkSS+//LLKysrc5rnsssv0ySefNEd6AAC0Kj/++KNuvPFGffrpp5IkPz8/xcbG6sSJE9q4caPWr1+vkSNHqnv37rWWNU1TlZWV8vHxaeq0a+GzPtBw9DwHLjLVH6Br/rhcLquH2t/+9jddd9118vX11RtvvCFJ2rFjh0aNGqXQ0FA5nU716NFDL774ott633vvPQ0YMEAdOnRQmzZt1LVrV40aNUqHDx+ulcNf/vIXde3aVe3atdOtt96q/fv3N0nbAQBoTao/fP/5z3+WJJ06dUpz586t9aG8rmFbGuLjjz9W27ZtZRiG/ud//kemaXotdwAALkSTJk2yCucTJ05UcXGxvvjiC+3Zs0c//vijli5dqo4dO2rhwoXWtXflypW66qqr5OPjo48++kiStH79eg0dOlTt27e3PmPPmTNHp06dsrZlmqbmzp2ra665Rm3atFG7du103XXXaevWrdY877//vhITE9WuXTu1adNGN9xwgz744AMrXvM9wMsvv6yf/OQn8vPz069+9SvrGv/yyy9b82/bts2any/egSoUzwG4uf/++/X1118rOjpahmFo165d6t+/v5YuXSqXy6XY2Fh9+eWXmjBhgn77299Kkg4ePKi77rpLn3zyidq3b6/Y2FjrjUNJSYnb+jdu3KhHH31UPj4+Onr0qN599109/vjjzdFUAAAuaHFxcYqKitLf//537du3T2+//baKioo0cuTIc173li1bdPPNN+vYsWMaP3685s2bJ8MwvJA1AAAXppKSEuXm5kqSevfureeff17+/v5WvE2bNrr77rvVsWNHt+XuuOMOHTt2TF26dJEkffjhhxo8eLD+8Y9/yG63q0uXLtqxY4emTp2q8ePHW8s9+uijmjhxorZu3aqAgAB16dJFn332mQoLCyVJubm5uuWWW7Ru3TqFhITosssu0/r163XTTTe5FdCrVa+rW7duCg4O1r333itJWrBggTXPsmXLJEmxsbHq37+/F/YacOGjeA5cZPbu3VtrzPMff/zRit91113at2+ftm/frvvvv19PPvmkSkpK1LNnT3399df6/PPP9dxzz0mSnnrqKR05ckRFRUWqqKiQv7+/tm/frs8++0yHDh1SXl6eQkND3bZfXl6ujz/+WDt37tRdd90lSfrnP//ZZO0HAKC1sNlsmjhxoiorK/Xiiy9aPdAnT558Tuvdvn27hg4dqpKSEk2YMEFz586lcA4AuOjt3LlTlZWVkqSEhATZbFUltfHjx7t9vp42bZrbco8++qgKCwu1Z88e3XDDDfrNb36jyspKdenSRV999ZV27typn/3sZ5KkV155RV999ZUKCwuVlZUlSRoxYoS+/fZbffHFF9q3b5+uvfZaSdK0adNkmqbS09NVUFCgPXv2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HlFaWpokKSEhQf/973+VlpamunXr6txzz/VbG0oCfaN4Z5xxhp5++mndeuutatu2rRYuXKjNmzfrhRdeUK9evbRkyRK9+eabuuOOO3Tw4EHt379f+/bt04YNG1SnTh3nOFbE7UNlTf5VXo/Ho9zcXD311FOaPXu2AgIC1KFDB7Vs2VIul0uTJ09W9erVndui7rnnHs2cOVOSNGDAADVr1sxvbShp+beAPf/882rZsqWuvfZajR49WvXr19fUqVM1b948rV+/XoGBgZKkvXv36plnntG6deskSW3atPFb3VE2MD4XRuzOQ98oHrH7KGJ3YcRunGyMz4URu/PQN4pH7D6K2F0YsfvEkDz/B4KCgtSyZUtt375dX3/9tXN7z9dff62DBw+qZcuWSkxMdG6BqV27tjp37qwffvhB27dvV+vWrVW/fv1yMRjltyH/lo5nnnlGF1xwgR555BHFxsYqJydHU6dO1ezZs7Vjxw5dfPHF6tSpk6644gpJ0r/+9S/df//9Cg4O9lsbShJ9w1vB9eSys7Plcrk0Z84cTZ8+Xdddd52aNm2q8847T6effrpeffVVNWvWTOvWrVNMTIy+++471alTR/fdd59q1KjhHLPgLWVlTcEvu5J0+PBhBQQEqF69evr888/16KOP6oYbbtD+/fvVt29fVa5cWc8++6yWL18uKW8ttptuuslv9S9JBfu4mWn16tUaNGiQDh06pA0bNui1117T/PnztWLFCrVp00a9evXStGnTNH36dA0ZMkQHDx7UPffcowEDBvixFShLGJ+PInZ7o294I3Z7I3YfRexGaWN8PorY7Y2+4Y3Y7Y3YfRSx+58heX4CMjMztXDhQu3cudN574YbbpDb7dY777yjnJwcXXHFFUpPT9frr7+uUaNGqWbNmpo0aZIGDBigu+66S+eee6727NmjqlWrOscoy4PRH3/8Icm7DbNmzdLGjRu1du1aXX755Zo3b54++ugjXXTRRbr00kt1xx13SJJeeeUVud1uZWVlKSQkRJUrVy6zT+2lbxTNd0bEzp07VblyZT355JM655xztHr1amfbxx57TN9//71uvPFGXXPNNbrxxhs1YMAA56E3BY9X1uX/uy5cuFAdO3bUDTfcoDFjxmjYsGF68MEHNXv2bM2bN09nn3220tLS9H//93/q1q2b9u/fL0mKioqSy+Uq8+cjNzfXORf5/123bl0tXbpUZqY6deqocePGuv322zVp0iRJ0n//+1+dddZZWrlypW644QY1adJEVapU8WczcIpjfC6M2J2HvlE0YnfRiN15iN0oDYzPhRG789A3ikbsLhqxOw+xuwSclMVgyqlffvnFWrRoYYsWLXLee/nll61BgwZ2wQUX2Ouvv25mZs8884zFxsbaL7/8YmZmX3zxhVM2f/58GzRokKWnp5d+A0rQxo0bbdCgQTZgwAAbNGiQjR8/3szy1sm6/vrrbenSpTZ27Fjr1KmTvfPOO85+mzZtMpfLZV9++aW/qn5S0De85a+Xlu/pp5+2Fi1a2PXXX2/XXnutmZmtXr3awsPDnTWzzMw2b95sS5cutWeeecYyMjKKPV55sGzZMuvQoYN9/PHHlpSUZM2bN7eJEyeamdl7771n3bp1s2rVqtlnn31mZnnri5VHBw4csFtvvdUefvhhW716tZmZjRs3zi688EKv7Ro3bmzTpk0zM7OsrKxSryfKLsbno4jd3ugb3ojdf43YnYfYjZON8fkoYrc3+oY3YvdfI3bnIXb/MyTPj1P+IDJlyhQbOXKkvfzyy9a9e3e74oorLDk52R5//HEbPXq0bdu2zbZs2WLXXHON3XPPPc7+69evt06dOln//v3L9EMGsrOz7fbbb7cOHTrYtGnTbMeOHRYfH29169a1+++/37KysmzcuHFWvXp1e+WVV5z9EhMT7YsvvjAzc/4//5z6PuSkrKFvHLV79+5C773yyis2evRoS0tLs2XLlpnb7bZly5aZmdkVV1xhAwcOtJUrV9rQoUMLBeuy3jcyMjIsISHB64tKvptvvtnr4T3ffvut1alTx/kS9+mnn9oFF1xgy5cv99qvLJ+Tgg8lMTN78803rX379vbss8/aCy+8YA0aNLBPP/3UPB6PVatWzZYuXepsO2/ePJsyZcoxjwf4YnzOQ+wujL5xFLHbG7HbG7EbpY3xOQ+xuzD6xlHEbm/Ebm/E7pJH8vw45Q8u6enp1qtXLzvzzDPtjTfecMo3bNhgV155pT377LNmZvb22297PX02OTnZ60pwWZSdnW1PPvmkhYSE2NatW73K3n77bbvgggvsnXfesbfeesu6du1qn3zyiZmZzZo1y1q0aOE85TpfebmqSd/4+zMi9u/fb3369LGePXs6swfyz2d56B+//PKLnXXWWbZo0SLnKdX5QfiZZ56xgQMHem1/4YUXegXt8nAOzPLaUVRbnn76adu8ebP98MMP1rdvXxs2bJjz5PvnnnvOTjvttNKuKsoZxmdid3HoG8Tu4hC78xC74S+Mz8Tu4tA3iN3FIXbnIXafPCTPT0D+1ZYFCxZY3759LTk52cyO/lE++uijdsMNN9iePXv8VcWTbu3atXbDDTfY888/b2bmDExmZv3797cxY8aYmdmzzz5rHTp0sO7du9uAAQNs/fr1fqlvaamofeOfzIgo77dF5Qet//u//7OrrrrKfv31V6/yzz77zIYMGeLcErV48WK7+OKLLS0tzWu7sn6Vt2D9d+3aZePHj3f+Ps477zxr27atXXLJJZaQkOBst3fvXjMz69Gjh23atKnY4wHHo6KOzwURu4tWUfsGsbt4xO48xG74W0UdnwsidhetovYNYnfxiN15iN0nF8nzY3j99dedq7a+HWfIkCH24IMPWkpKivPewYMH7fDhw6Vax9KWmZlpr7zyig0YMMC51SkzM9PM8gJY69atnXOVkZFhP//8s7NvcVfByiL6xj+fEZE/IyBfWb4tqigFZ0b07NnTXnjhBTt06JDXNh9//LFFR0dbv379rEOHDs5tdeVBwb/1zMxMu/vuu+2WW26xgIAAGz16tJnlfdmPiIjw2mfkyJE2ffr0Uq8vyg/G58KI3XnoG8Tuv0LsJnbDPxifCyN256FvELv/CrGb2F0a3P5+YOmpLD09XR988IEkye3OO1W5ubmSpNtuu03vvvuu1qxZ42xfvXp1Va1atcw+ubqg4toQFBSkzp07q2HDhnr55Zed9yTpu+++U//+/eV2u+XxeFSlShWdeeaZko4+0besP8U6X0XuG/kqVaqkTp06afDgwXr33XclSTk5OZKkfv366fTTT9f777+v/v37a8iQIZowYYJ69OihJUuWaP78+Ro7dqzX8QICAkq9DSeTy+WSx+NRjRo1dM011+itt97Shg0bnPJDhw7J7XZrxYoVmjJlir788kv16tXLjzUuGfl9PP9vPScnR3fffbe2bNmiiRMnatasWYqPj9fXX3+tq666Sg0aNNDQoUN1//3367zzzlOVKlU0cuTIQscDjldFHp+J3cdWkftGPmL3sRG7id3wj4o8PhO7j60i9418xO5jI3YTu0tDhU+e33vvvXr44YclSXv37tVb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zC655BL75ptvLDMz01q1amUtWrTweuLu66+/bn/++aeZmdf7n376qb3//vulXveSlN+eTZs2mcfjcdY5eu6552zgwIHOdjt37rS6devaypUrzcxs2LBh1q1bt0LHKw9X9OgbRavIMyLyMTPiKN9b/x5//HGrUqWKde7c2bnCP3/+fOvYsaMtX77c2e7FF1+0O++808wK32II/BXG5zzE7sLoG0UjdhO7CyJ2wx8Yn/MQuwujbxSN2E3sLojYXTaUm+S57xWVlJQUO/vss61Vq1a2Zs0aM8tb92fq1Kl2ySWXWFZWlu3fv99uv/12a926tX399df+qPZJ9fbbb1unTp1s/fr1Zmb26KOPWp8+fczM7L333rMBAwbY9u3bzczs4MGD1rFjR+vSpYuZmR04cMB+/fVX/1S8hNE3CmNGRGHMjDiq4CyGPXv2mJnZqlWrbOTIkXbHHXc4Qfzrr7+2O+64w9q3b29Lly61AQMGWOfOnW316tXO/uVh/T2cPIzPhRG789A3CiN2F0bsPorYjdLC+FwYsTsPfaMwYndhxO6jiN1lR7lJnudbuHChff3115abm2v79u2zxx57zK6//nrLzMw0s7zgFBMTYwMGDLCzzz7bxo0b56wjVN78/PPPdu+99zpXL9esWWMdOnSwVatW2W+//WY33XST3X///WZmtnnzZrv//vutZcuWtmTJEucY5elWIPoGMyKOhZkR3tLT0+22226z7t272+TJk23t2rW2a9cuu/baa+2///2vs92hQ4fsueees9tvv93i4uL8WGOUZYzPRxG7vdE3iN3HQuz2RuxGaWJ8PorY7Y2+Qew+FmK3N2J32VBmk+e+V1Xef/9969y5sw0ZMsSuv/56u+++++zIkSO2evVqu/zyy+311183s7wn9JqZpaWl2bZt25z9y8NaQAsXLiy05lP+E5tXrVplZmaTJ092roKvXr3aWrZsaX369LGmTZvam2++aTfeeKO9++67pV73kkTfKBozIrwxM6J4mzdvtn79+tlzzz1nW7dutYsvvth69OhhZnlX/WNjY23t2rW2aNGiIseL8vI3g5LH+FwYsTsPfaNoxG5vxO7iEbtxsjA+F0bszkPfKBqx2xuxu3jE7rLDrTLI4/HI5XLJ5XJpz549Sk9P13PPPaenn35aCxYs0M8//6z3339fc+bMUefOnXXhhRfqmWee0YABA3TvvfcqJSVFNWrUUEREhDwej8xMAQEB/m7WP3L48GGtWbNGK1eu1OHDhyVJc+fO1aRJk+TxePTiiy8qOztb1113nbKzs/Xiiy+qc+fOWrZsmSZOnKiff/5Zp512mr755hs1btzYv435B+gbxWvWrJkuuugizZkzR5LUo0cP/fnnn1q9erXOPPNM1a1bVzNmzJAk7dmzRz169FBKSoqWLl2qmjVrKioqSh6Px48tKFn5/66vv/661q9fr1q1aumjjz7S1VdfrZdeeklZWVmqXbu2/v3vf6tWrVoaOnSounXrJrfbrTVr1qhdu3Z+bsE/9/7772v48OG67bbb9OSTT+qXX36RJO3du1dnn322unXrpjFjxqh27dp6/vnnJUkDBgxQkyZNNGzYMMXHx6tNmzbO8cxMksrN3wxKFuNzYcTuPPSN4hG7vRG7id0oXYzPhRG789A3ikfs9kbsJnaXC35L2/9DHo/HHn/8cWvXrp3t3bvXDh48aIsWLbLWrVvbww8/bE8++aT169fPfv/9dzMze+GFF2z69Ol+rvXJkX+197PPPrNRo0bZrbfeapdeeqn179/fvv/+e/vll1/sqquusldeecXM8h4sEBUV5dw6tHXrVrvqqqvsX//6l9etMGUVfSMPMyK8MTPiqN9++82uvPJK69Chg8XHx9szzzxjl112mbVp08YOHTpky5cvt+joaOvQoYMtXbrU2e/DDz90brf86aef/FV9lGGMz0cRu73RN/IQu70Ru48idsNfGJ+PInZ7o2/kIXZ7I3YfRewuP8pE8tx3/a/Vq1fbmDFj7NZbb3WeKuvxeGz48OH20UcfmZnZs88+axERETZu3Li/PF5ZVNyaV88++6ydeeaZNmXKFOe9tLQ0e+GFF6xv3762bds2O3TokH3xxRdOeXp6urPGVllD3yjaoUOHbNy4cXbTTTc568e99tpr1qZNG+vUqZNdffXVlpWVZdu2bbOePXs6T7Xevn27ffnll5adnW0rVqyw8847z3788Ud/NqVEFPx3/eOPPywtLc369u1r69ats5ycHOvUqZOdc8459tJLL5mZ2X//+1/r3Lmz9e/f36644grbt2+f8zeXm5tbptec++abbywiIsJuu+02r/dTUlLsoosuslGjRllaWpp17tzZ5s6d65TfcccdNnjwYNuyZYvXfmX5ywxO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SHp6uk2dOtWqV69eaGD+8MMPbdCgQVa1alWbN2+emZWfPzr6xl+ryDMi8jEz4qiC5yIlJcXuv/9+GzJkiHMl/Msvv7R///vfXg+vMTs65mzZssV5z+PxlMu/GZQMxufCiN156Bt/jdhN7C6I2I3SwvhcGLE7D33jrxG7id0FEbsrtlJNnvt2kKysLDPLu4p1xRVX2HvvveeUTZ061fr06WPbt2+3Q4cO2bfffmsvvvii8yRns7I/QGdnZ9uBAwec14cOHbJHHnnEVqxYYXv37rV9+/ZZr1697MEHHzQz7wH58OHDFhMTYyNGjCjtap8U9I3CmBFxbBV9ZoRvH//www9t79699tVXX9n555/vPL08KyvLZs+ebVdeeaWtXbu2yH3NyscMAJwcjM/eiN1H0TcKI3YfG7Gb2I3Swfjsjdh9FH2jMGL3sRG7id0wK9VV6PMXvt+wYYOuueYajR07Vm+++aaqVaum7OxsffbZZ862ffv21aeffqqZM2cqOztbZ599tm688UY1adJEHo+nzD+J948//lC3bt2chyjMnTtXF154obKzs7VixQr17NlToaGhuvrqq/Xtt9/qhx9+kMvlUm5ursxMVatW1fDhw3XGGWf4uSUlg77hLTc31+uBGQcPHtQ777yjV199Vddff71CQ0Pldrt13XXX6dFHH9Urr7yijz76SFWqVJFU/EMryqr8h20UbNcjjzyi/fv3680339TTTz+tQ4cOacGCBRo6dKg6duyoyy+/XNddd506d+6sBg0a6N577y10vLIsv4+//fbb+ve//6177rlHixcvVvv27XX55Zfr8OHD+umnn1S5cmV17txZtWrV0ssvv+y1b0H5TwQHfDE+H0Xs9kbf8Ebs9kbsLozYjdLC+HwUsdsbfcMbsdsbsbswYjck6aSOdJmZmXrooYe0YsUK5733339f11xzjXr06KHo6GjNnj1bTz75pKZNm6YXX3xRixYt0s6dO7Vs2TINHDhQvXr1Uq1atZz98wfosvok3nzh4eE6dOiQvvvuO0nSt99+q9WrV2v48OH65ptvVK9ePeXm5urCCy9UVFSUnn32WUl5f2hmpi1btujWW29VnTp1/NmMv42+UdiRI0eUmpoqKe/f+fDhw5oyZYo++ugjZWZm6sYbb1Tnzp21dOlSSUcDWs+ePTV//nz179/febJ3WT0HvszM6ynmR44ckZT3FPidO3fq6quvliT17t1bPXr00OLFi7Vjxw7Fx8dr6tSpuvDCC/XWW2/pscceU2BgoBO8y+KXvN27d2v+/Pn6888/JUnZ2dkaO3asnnjiCfXr10/BwcH68MMP9dNPP2nw4MHKzc3Vu+++K0mKiorS4MGDdcstt/izCSgjGJ+LR+ymb/gidhdG7D6K2I3SwvhcPGI3fcMXsbswYvdRxG4U6WROa3/11VfN5XLZqFGj7Pfffzczs0ceecS5rSE3N9e+/PJL69atmx04cMBeeuklu/7666158+Z25513Ord/lAfp6elOe44cOWJHjhyx8ePH29NPP22///67devWzXr37m0XXnihJSQkmNnRW6iWLFliN954o9fTeP/44w97//33S78hJYS+4W337t124YUX2jfffGNmeQ/YOPvss23ixIl277332tlnn21meeuMXXbZZfb999+bWd4tP/m3mb355pt27733+qP6J90PP/xgI0aMsBtvvNEWL15sZmaDBg2y++67z9nm+++/t2rVqtkDDzxg+/fv99o/Nze3zK5Dl7+W4Lfffuvc/mWWNz4MGDDA6TMbNmywW2+91R566CEzM3vppZdswIAB5fKBNTi5GJ+PInZ7o294I3YfG7Gb2I3Sw/h8FLHbG33DG7H72IjdxG4U7aReBnK73erQoYOCg4P1xhtvSMq7clWzZk0dPHhQbrdbderUUaVKlbRlyxbdcMMNeumll/TRRx9p2rRpqlq1arm4zWPnzp0aNGiQpk6dKkkKDAxUYGCg9u7dq02bNqlmzZqqUaOG6tWrp88//1wxMTGSpHvuuUdr165Vv3799OKLL+r00093jnn66aerd+/efmlPSaBveKvoMyLyMTPC2++//67+/fvr/fffV5s2bVSrVi2NHz9eGzZs0O+//6709HS5XC5lZWWpZcuWqlKlipYsWaK1a9fqsssu09VXX60LLrjA381AGcP4nIfYXRh9wxuxOw+x2xuxG/7A+JyH2F0YfcMbsTsPsdsbsRt/pcSS53/88Yd69+6tmTNnKiMjQ5LUvn177d+/XzVq1NAPP/ygXbt2qW3btkpKStLnn38uKW8Q8ng8Cg8Pl5R320v9+vXl8Xi8bhspy8444wzdc889eueddzR+/Hht27ZNkjR48GCtW7dOVatWVc+ePfXnn3/qkUce0csvv6xzzz1XGRkZatWqlbMmUlkNWvSNwg4ePOici5ycHOXk5OiSSy7RgQMHtHv3bq1fv14xMTG64YYbFBsbq/fff1+5ublq2rSpLrroIknSnj17JOV9IapWrZpefPFF3XnnnX5rU0lYuHChHn74Yb3xxhvavXu3JOnrr79W9+7dNXLkSI0bN0733Xef3n77bYWGhmrq1KlatmyZevbsqT/++EMvv/yyOnfu7HXMshi889WrV08NGjTQe++9p9TUVOXm5mrjxo368ssv1ahRIwUHB+vNN99Uenq6pLzbxJo1a6aVK1cqJCREQ4cOVaVKlfzcCpzKGJ+LR+ymb/gidheN2O2N2I2TjfG5eMRu+oYvYnfRiN3eiN34KyU2Cn733Xdavny5FixYoEmTJmnr1q1q1KiRhgwZopYtW8rMFB8fr5iYGLVo0UJTp07VlVdeqUsuuURDhgxR3bp1vSvmdpfpQdpXz5499eqrr2rTpk269dZblZycrJCQEDVs2FBpaWm64YYbdOuttyorK0uffPKJZsyYoRkzZqh69erOMcrq+aBveGNGRPEq+syI33//3Vk/Lzs7W5L07LPPKjExUe+9955atGih3r17a9WqVdq4caMef/xxrV27VmPGjFHfvn21fPly1atXTz/88IMzOwI4FsbnYyN20zfyEbuLR+wmdqN0MT4fG7GbvpGP2F08YjexGyemxEbCSy65REOHDlW9evUUFBSk2267Td9++60+//xzdenSRV26dNF3332nxMREPfjgg5oxY4b69eunNWvWaNSoUSVVjVNa69at9fzzz6tevXq6+eab9cMPP+jzzz/XkSNHVL16dfXo0UNTpkzR/Pnz1b59e+ehDWUdfcNbRZ8RkY+ZEYWtWrVK1157rXbs2KHKlSsrOztb06dPV1JSkubPn6/t27frqquuUkBAgN544w01bdpUc+fO1eWXX64bbrhBr7/+umrWrKnIyEhJZfvqP0oH4/NfI3bTNyRidz5id2HEbpQ2xue/Ruymb0jE7nzE7sKI3ThRJdrbJ0yYoHXr1umqq65S69attWTJEn366adau3atevfurRo1amj27Nk6fPiwmjdvriuvvFKhoaHKzc2tMFdq6tWrpxdeeEHnn3++VqxYoV27dumzzz4rtJ3H45HL5SrTA1JB9A1vFXlGRD5mRhR2xRVXqF27dnrxxRf1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C9uSJUvUpUsXVa1aVc2bN9c777xTmqcJAFBBnHfeeXrmmWckSTk5OZo1a5Z+/fVXdejQQYsWLZLH41F0dLR++eUXjR49Wg8//LAk6ZxzzlGdOnUkSaeddppzQTo4OFj79u1Thw4dNHv2bB08eFAtWrTQ9u3bNWnSpCITswsXLtQzzzyj8PBw1apVS5J0ww03aOHChcrIyFC1atU0fvx4r4RzvsGDB+vhhx9WcnKymjdvrqysLM2ePVtdu3Z14nS+nTt36uqrr5bL5VJGRoZWr16t2NhYSVJkZKSaNm3qbJvfngYNGui7777TyJEj9d1336lu3bpq2rSpfv/9d82fP/+f/wMU8Omnn2rTpk2qW7eumjdvrj///FNvvvmmevbsqczMzELb9+vXT9nZ2XK73frhhx/Ut29f7dq1S5L02Wef6aKLLtL777+vqlWrqnHjxvrmm280dOhQJ1lf0MSJE7VixQpFRUUxExAAUCIX2otS3LItH374oXr27KmaNWuqSpUqat68uebNmydJ2rp1qy699FJFRESoatWqqlq1qlq1aqWnn35aZuYc47333lPHjh1Vq1YtVa1aVU2aNNHQoUO1f/9+SdIvv/yiAQMG6PTTT1flypVVt25d9erVS1999ZVzjONpU/5SNPfcc4/Gjh2r0NBQnX766brtttu8JgkA5ZYBKJe6du1qkqxRo0aFyj755BOTZJKscuXKVrduXWvevLnNmTPHkpKSrEaNGibJatSoYS1atDCXy2WS7OKLLzYzs127dtkFF1zg/K9JkybO8R577DEzM3v88ced96Kjo61+/fomyapXr25JSUmF6lGpUiVr1qyZVa1a1STZaaedZikpKaV2vgAA5U9xsTAlJcWJP3369LGRI0eaJGvVqpUdOnTIzMyefvppk2RVq1a1tLQ0MzO79tprTZJ17drV63gPPfSQSbLw8HDbs2ePmZktWbLEJJnL5bJff/3Vqz6VKlWy9evXm5lZTk6Obdq0yanPXXfdZWZmP/30kwUGBnp93qeffupst3LlSjPLi8n5sfPll182M7MHH3zQ2e6tt94yM7M77rjDee/w4cNmZjZ79mznvYIWLVpkkqxp06aWm5vr1DP/M/9K/nmSZBdccIGde+65Th0l2aJFi8zMbMOGDZadne3s9+GHHzrbrFixolAdZ8yY4eyXf27uueceMzPr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lJWVpaysLOd1WlqapLxlYTwez99pJv6CeTxymeQq+jl0ZZLL8tpFnwHgT4xBAAAAAAD4399Knr/22muSpFdffVXjx4/X3Llz5XK5vLYx886oFiwvqbKCpk6dqsmTJxd6f+/evcrMzCx2P/x9B3Oy1CS7srItwN9VKTGVXQFK2btPWYFB/q4KgAosPT3d31UAAAAAAKDC+1vJ83zXXnutRo0a5bzeu3evM/t869atatiwoSSpYcOG2rJli1dZnz59vMrat29f7H75Cpb5mjBhgsaNG+e8TktLU0REhMLCwhQcHPxPmoliBB3JUPLWbGV4jvi7KiWmqruSQsPqqGalqv6uCoAKrEqVKv6uAgAAAAAAFd4JJc/T0tJ08OBB1a9fX5L05ptvKjQ0VCEhIRo6dKji4uL00EMPKTExUbt371bnzp0lySmbM2eOkpOTtXLlSs2YMcMpmzlzpgYPHqzU1FQlJCRo2bJlTtnYsWM1evRoBQYGatasWZoyZUqRdQsKClJQUOHZwm6321mXHSXL5XbLXJK5/nrbssJcee2izwDwJ8YgAAAAAAD874R+naempmrgwIFq3bq1zj77bMXFxemdd96Ry+XS448/ri+++ELNmjXTyJEjNXfuXAUG5uXmx48fr4yMDEVFRalXr16Ki4tTSEiIJGnEiBE688wzFR0drfbt22v8+PFq0aKFJKlbt26KiYlR69at1aJFC11yySXq3bt3CZ8CAAAAAABODZmZmRo4cKCio6PVtm1b9e7d27kje8+ePerdu7eaNWumVq1a6bPPPnP2O3z4sIYPH66oqChFR0dr8eLFTpnH49Ett9yiyMhIRUVF6fnnn/f6zClTpigyMlKRkZGaOHFiqbQTAICy4IRmnkdEROirr74qsiw8PFzLly8vsqx69epKSEgosiwgIEBxcXHFfuakSZM0adKkE6kmAAAAAABl1k033aRLL71ULpdLzz33nG666SYtX75c9957rzp06KBly5YpMTFRQ4YM0W+//abAwEBNmzZNQUFB2rRpk5KTk9WxY0d1795dtWvX1rx585SUlKSNGzcqNTVV7dq1U48ePdS8eXOtWrVK8fHx+v777xUYGKhOnTqpc+fO6tWrl79PAwAAfsd94QAAAAAAnCKqVKmiPn36yOXKWx+zQ4cO2rx5syRp4cKFGjNmjCSpffv2Cg8Pd2afJyQkOGVNmjRRly5dtHTpUqds1KhRCggIUEhIiGJiYrRgwQKnbOTIkapevbqCgoIUGxur+Pj4Um0zAACnqn/0wFAAAAAAAHDyTJ8+Xf3791dKSoo8Ho/CwsKcssaNG2vbtm2SpG3btqlRo0bHXbZu3TqnrGvXrl5lixYtKrIuWVlZysrKcl6npaVJylsWxuPx/NOmogjm8chlksv8XZOS47K8dtFnAPjT8Y5BJM8BAAAAADgFPfroo/r11181Y8YMZWRkOLPR85l5Z1QLlpdUWUFTp07V5MmTC72/d+9eZWZmHqMl+LsO5mSpSXZlZVuAv6tSYiq7ApSyd5+yAoP8XRUAFVh6evpxbUfyHAAAAACAU8y0adO0ePFirVixQtWqVVO1atUk5SWq82efb926VQ0bNpQkNWzYUFu2bPEq69Onj1dZ+/bti90vX8EyXxMmTNC4ceOc12lpaYqIiFBYWJiCg4NLsPXIF3QkQ8lbs5XhOeLvqpSYqu5KCg2ro5qVqvq7KgAqsCpVqhzXdiTPAQAAAAA4hTz55JOKj4/XihUrVKtWLef9oUOHKi4uTg899JASExO1e/dude7c2atszpw5Sk5O1sqVKzVjxgynbObMmRo8eLBSU1OVkJCgZcuWOWVjx47V6NGjFRgYqFmzZmnKlClF1isoKEhBQYVnC7vdbrndPFLtZHC53TKXZK6/3rasMFdeu+gzAPzpeMcgkucAAAAAAJwiduzYoTvvvFNNmzZV9+7dJeUlrdeuXavHH39cI0aMULNmzVS5cmXNnTtXgYF5P+vHjx+v2NhYRUVFye12Ky4uTiEhIZKkESNGKDExUdHR0c62LVq0kCR169ZNMTExat26tSRp2LBh6t27d2k3GwCAUxLJcwAAAAAAThENGjQodt3x8PBwLV++vMiy6tWrKyEhociygIAAxcXFFfuZkyZN0qRJk068sgAAlHPcIwMAAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPg4oeR5ZmamBg4cqOjoaLVt21a9e/fWli1bJEndunVT06ZN1bZtW7Vt21ZPPfWUs9/hw4c1fPhwRUVFKTo6WosXL3bKPB6PbrnlFkVGRioqKkrPP/+812dOmTJFkZGRioyM1MSJE/9BUwEAAAAAAAAAOD6BJ7rDTTfdpEsvvVQul0vPPfecbrrpJi1fvlySNH36dPXr16/QPtOmTVNQUJA2bdqk5ORkdezYUd27d1ft2rU1b948JSUlaePGjUpNTVW7du3Uo0cPNW/eXKtWrVJ8fLy+//57BQYGqlOnTurcubN69er1z1sOAAAAAAAAAEAxTmjmeZUqVdSnTx+5XC5JUocOHbR58+a/3C8hIUFjxoyRJDVp0kRdunTR0qVLnbJRo0YpICBAISEhiomJ0YIFC5yykSNHqnr16goKClJsbKzi4+NPqIEAAAAAAAAAAJyoE555XtD06dPVv39/5/X48eM1YcIEnXXWWZo6daqaNm0qSdq2bZsaNWrkbNe4cWNt27at2LJ169Y5ZV27dvUqW7RoUZF1ycrKUlZWlvM6LS1NUt6yMB6P5580E8Uwj0cuk1zm75qUHJfltYs+A8CfSnIMyszM1LBhw5SUlKRq1aqpbt26mjFjhho3bqw9e/bommuu0W+//aagoCDNmDFDnTt3lpS35Nr111+vxMREud1uPfbYYxo8eLBTv9tuu03vvfeeXC6Xxo0bp9GjRzufOWXKFM2ePVuSdOWVV+qRRx4psfYAAAAAAFBa/nby/NFHH9Wvv/6qGTNmSJLmzp2riIgImZni4uLUr18/JSUlOdvnz1aXJDPvbOvfLSto6tSpmjx5cqH39+7dq8zMzONsFU7EwZwsNcmurGwL8HdVSkxlV4BS9u5TVmCQv6sCoAJLT08v0eMVt+Tavffeqw4dOmjZsmVKTEzUkCFD9NtvvykwMJAl1wAAAAAAFd7fSp5PmzZNixcv1ooVK1StWjVJUkREhKS8ZPfYsWN11113KSUlRaGhoWrYsKG2bNmisLAwSdLWrVvVp08fSXLK2rdv75Q1bNjQqyxfwTJfEyZM0Lhx45zXaWlpioiIUFhYmIKDg/9OM/EXgo5kKHlrtjI8R/xdlRJT1V1JoWF1VLNSVX9XBUAFVqVKlRI9Vn7MlfKWXHv66aclSQsXLlRycrIkqX379goPD9dnn32mbt26KSEhQXPmzJHkveTayJEji11y7aGHHvJack2Ss+QayXMAAAAAQFlzwsnzJ598UvHx8VqxYoVq1aolScrJyVFKSorCw8MlSW+88YbCw8MVGhoqSRo6dKji4uI0Z84cJScna+XKlc6M9aFDh2rmzJkaPHiwUlNTlZCQoGXLljllY8eO1ejRoxUYGKhZs2ZpypQpRdYrKChIQUGFZwu73W653Se0tDuOk8vtlrkkc/31tmWFufLaRZ8B4E8ncwzKX3ItJSVFHo/HubAt/fWyaiy5BpRfHo9H5nLJXOXoi50kuVzyeDxyMabgJCNuAQBQPp1Q8nzHjh2688471bRpU3Xv3l1SXtL6448/Vt++fZWVlSW32606derorbfecvYbP368YmNjFRUVJbfbrbi4OIWEhEiSRowYocTEREVHRzvbtmjRQpLUrVs3xcTEqHXr1pKkYcOGqXfv3v+81QAAVEAFl1zLyMjwWhpNKrll1VhyDSh7PIcOKbVBAyk7299VKVmVKyvwzz/lLnChDjgZSnrJNQAAcGo4oeR5gwYNiv0RnD/jrCjVq1dXQkJCkWUBAQGKi4srdt9JkyZp0qRJJ1JNAADgw3fJtfxl1/bu3eu1rJrv0mksuQZUDLmpqcrZsUNWzi5cuapUUVhIiAJq1vR3VVDOleSSawAA4NTxtx8YCgAAyoaillyTji6r9tBDDykxMVG7d+9W586dvcpYcg2oGMztlstMOsbdImWRy4wxBaWCPgYAQPlE8hwAgHKsuCXX1q5dq8cff1wjRoxQs2bNVLlyZc2dO1eBgXlfDVhyDQAAAABQ0ZE8BwCgHDvWkmvh4eFavnx5kWUsuQYAAAAAqOi4twwAAAAAAAAAAB8kzwEAAAAAAAAA8EHyHAAAAAAAAAAAHyTPAQAAAAAAAADwQfIcAAAAAAAAAAAfJM8BAAAAAAAAAPBB8hwAAAAAAAAAAB8kzwEAAAAAAAAA8EHyHAAAAAAAAAAAHyTPAQAAAAAAAADwQfIcAAAAAAAAAAAfJM8BAAAAAAAAAPBB8hwAAAAAAAAAAB8kzwEAAAAAAAAA8EHyHAAAAAAAAAAAHyTPAQAAAAAAAADwQfIcAAAAAAAAAAAfJM8BAAAAAAAAAPBB8hwAAAAAAAAAAB8kzwEAAAAAAAAA8EHyHAAAAACAU8Stt96qxo0by+VyacOGDc773bp1U9OmTdW2bVu1bdtWTz31lFN2+PBhDR8+XFFRUYqOjtbixYudMo/Ho1tuuUWRkZGKiorS888/7/V5U6ZMUWRkpCIjIzVx4sST30AAAMqQQH9XAAAAAAAA5BkyZIjuvvtude7cuVDZ9OnT1a9fv0LvT5s2TUFBQdq0aZOSk5PVsWNHde/eXbVr19a8efOUlJSkjRs3KjU1Ve3atVOPHj3UvHlzrVq1SvHx8fr+++8VGBioTp06qXPnzurVq1dpNBUAgFMeM88BAAAAADhFdOnSRQ0aNDihfRISEjRmzBhJUpMmTdSlSxctXbrUKRs1apQCAgIUEhKimJgYLViwwCkbOXKkqlevrqCgIMXGxio+Pr5kGwQAQBnGzHMAAAAAAMqA8ePHa8KECTrrrLM0depUNW3aVJK0bds2NWrUyNmucePG2rZtW7Fl69atc8q6du3qVbZo0aJiPz8rK0tZWVnO67S0NEl5S8N4PJ4SaCF8mccjl0ku83dNSo7L8tpFnwHgT8c7BpE8BwAAAADgFDd37lxFRETIzBQXF6d+/fopKSnJKXe5XM5/m3lnWv9uma+pU6dq8uTJhd7fu3evMjMzj68hOCEHc7LUJLuysi3A31UpMZVdAUrZu09ZgUH+rgqACiw9Pf24tiN5DgAAAADAKS4iIkJSXrJ77Nixuuuuu5SSkqLQ0FA1bNhQW7ZsUVhYmCRp69at6tOnjyQ5Ze3bt3fKGjZs6FWWr2BZUSZMmKBx48Y5r9PS0hQREaGwsDAFBweXaHuRJ+hIhpK3ZivDc8TfVSkxVd2VFBpWRzUrVfV3VQBUYFWqVDmu7UieAwAAAABwCsvJyVFKSorCw8MlSW+88YbCw8MVGhoqSRo6dKji4uI0Z84cJScna+XKlZoxY4ZTNnPmTA0ePFipqalKSEjQsmXLnLKxY8dq9OjRCgwM1KxZszRlypRi6xEUFKSgoMKzhd1ut9xuHql2MrjcbplLMtdfb1tWmCuvXfQZAP50vGMQyXMAAAAAAE4RY8aM0dKlS7V792717NlTNWrU0Hfffae+ffsqKytLbrdbderU0VtvveXsM378eMXGxioqKkput1txcXEKCQmRJI0YMUKJiYmKjo52tm3RooUkqVu3boqJiVHr1q0lScOGDVPv3r1LucUAAJy6SJ4DAAAAAHCKiIuLU1xcXKH38x/yWZTq1asrISGhyLKAgIAij5dv0qRJmjRp0olXFACACoB7ZAAAAAAAAAAA8EHyHAAAAAAAAAAAHyTPAQAAAAAAAADwQfIcAAAAAAAAAAAfJM8BAAAAAAAAAPBB8hwAAAAAAAAAAB8kzwEAAAAAAAAA8EHyHAAAAAAAAAAAHyTPAQAAAAAAAADwQfIcAAAAAAAAAAAfJM8BAAAAAAAAAPBxQsnzzMxMDRw4UNHR0Wrbtq169+6tLVu2SJL27Nmj3r17q1mzZmrVqpU+++wzZ7/Dhw9r+PDhioqKUnR0tBYvXuyUeTwe3XLLLYqMjFRUVJSef/55r8+cMmWKIiMjFRkZqYkTJ/6DpgIAAAAAAAAAcHxOeOb5TTfdpF9++UXffvut+vXrp5tuukmSdO+996pDhw769ddfNXv2bF111VXKycmRJE2bNk1BQUHatGmTPvjgA40ePVr79++XJM2bN09JSUnauHGjvvrqKz3xxBP6+eefJUmrVq1SfHy8vv/+eyUlJen999/XBx98UFJtBwAAAAAAAACgSCeUPK9SpYr69Okjl8slSerQoYM2b94sSVq4cKHGjBkjSWrfvr3Cw8Od2ecJCQlOWZMmTdSlSxctXbrUKRs1apQCAgIUEhKimJgYLViwwCkbOXKkqlevrqCgIMXGxio+Pr4Emg0AAAAAAAAAQPEC/8nO06dPV//+/ZWSkiKPx6OwsDCnrHHjxtq2bZskadu2bWrUqNFxl61bt84p69q1q1fZokWLiqxLVlaWsrKynNdpaWmS8paF8Xg8/6SZKIZ5PHKZ5DJ/16TkuCyvXfQZAP7EGAQAAAAAgP/97eT5o48+ql9//VUzZsxQRkaGMxs9n5l3RrVgeUmVFTR16lRNnjy50Pt79+5VZmbmMVqCv+tgTpaaZFdWtgX4uyolprIrQCl79ykrMMjfVQFQgaWnp/u7CgAAAAAAVHh/K3k+bdo0LV68WCtWrFC1atVUrVo1SXmJ6vzZ51u3blXDhg0lSQ0bNtSWLVu8yvr06eNV1r59+2L3y1ewzNeECRM0btw453VaWpoiIiIUFham4ODgv9NM/IWgIxlK3pqtDM8Rf1elxFR1V1JoWB3VrFTV31UBUIFVqVLF31UAAAAAAKDCO+Hk+ZNPPqn4+HitWLFCtWrVct4fOnSo4uLi9NBDDykxMVG7d+9W586dvcrmzJmj5ORkrVy5UjNmzHDKZs6cqcGDBys1NVUJCQlatmyZUzZ27FiNHj1agYGBmjVrlqZMmVJkvYKCghQUVHi2sNvtltt9ws9FxXFwud0yl2Suv962rDBXXrvoMwD8iTEIAAAAAAD/O6Hk+Y4dO3TnnXeqadOm6t69u6S8pPXatWv1+OOPa8SIEWrWrJkqV66suXPnKjAw7/Djx49XbGysoqKi5Ha7FRcXp5CQEEnSiBEjlJiYqOjoaGfbFi1aSJK6deummJgYtW7dWpI0bNgw9e7du2RaDgAAAAAAAABAMU4oed6gQYNi1x0PDw/X8uXLiyyrXr26EhISiiwLCAhQXFxcsZ85adIkTZo06USqCQAAAAAAAADAP8J94QAAAAAAAAAA+CB5DgAAAAAAAACAD5LnAAAAAAAAAAD4IHkOAAAAAAAAAIAPkucAAAAAAAAAAPggeQ4AAAAAAAAAgA+S5wAAlGO33nqrGjduLJfLpQ0bNjjvd+vWTU2bNlXbtm3Vtm1bPfXUU07Z4cOHNXz4cEVFRSk6OlqLFy92yjwej2655RZFRkYqKipKzz//vNfnTZkyRZGRkYqMjNTEiRNPfgMBAAAAADhJAv1dAQAAcPIMGTJEd999tzp37lyobPr06erXr1+h96dNm6agoCBt2rRJycnJ6tixo7p3767atWtr3rx5SkpK0saNG5Wamqp27dqpR48eat68uVatWqX4+Hh9//33CgwMVKdOndS5c2f16tWrNJoKAAAAAECJYuY5AADlWJcuXdSgQYMT2ichIUFjxoyRJDVp0kRdunTR0qVLnbJRo0YpICBAISEhiomJ0YIFC5yykSNHqnr16goKClJsbKzi4+NLtkEAAAAAAJQSZp4DAFBBjR8/XhMmTNBZZ52lqVOnqmnTppKkbdu2qVGjRs52jRs31rZt24otW7dunVPWtWtXr7JFixYV+/lZWVnKyspyXqelpUnKWxrG4/GUQAsBHC+PxyNzuWQul7+rUrJcLnk8HrkYU3CSEbcAACifSJ4DAFABzZ07VxERETIzxcXFqV+/fkpKSnLKXQUSaGbmte/fLfM1depUTZ48udD7e/fuVWZm5vE1BECJ8Bw6pNQGDaTsbH9XpWRVrqzAP/+Uu8CFOuBkSE9P93cVAADASUDyHACACigiIkJSXrJ77Nixuuuuu5SSkqLQ0FA1bNhQW7ZsUVhYmCRp69at6tOnjyQ5Ze3bt3fKGjZs6FWWr2BZUSZMmKBx48Y5r9PS0hQREaGwsDAFBweXaHsBHFtuaqpyduyQlbMLV64qVRQWEqKAmjX9XRWUc1WqVPF3FQAAwElA8hwAgAomJydHKSkpCg8PlyS98cYbCg8PV2hoqCRp6NChiouL05w5c5ScnKyVK1dqxowZTtnMmTM1ePBgpaamKiEhQcuWLXPKxo4dq9GjRyswMFCzZs3SlClTiq1HUFCQgoKCCr3vdrvldvNYFqA0mdstl5n0F3eMlDUuM8YUlAr6GAAA5RPJcwAAyrExY8Zo6dKl2r17t3r27KkaNWrou+++U9++fZWVlSW32606derorbfecvYZP368YmNjFRUVJbfbrbi4OIWEhEiSRowYocTEREVHRzvbtmjRQpLUrVs3xcTEqHXr1pKkYcOGqXfv3qXcYgAAAAAASgbJcwAAyrG4uDjFxcUVej//IZ9FqV69uhISEoosCwgIKPJ4+SZNmqRJkyadeEUBAAAAADjFcG8ZAAAAAAAAAAA+SJ4DAAAAAAAAAOCD5DkAAAAAAAAAAD5IngMAAAAAAAAA4IPkOQAAAAAAAAAAPkieAwAAAAAAAADgg+Q5AAAAAAAAAAA+SJ4DAAAAAAAAAOCD5DkAAAAAAAAAAD5IngMAAAAAAAAA4IPkOQAAAAAAAAAAPkieAwAAAAAAAADgg+Q5AAAAAAAAAAA+SJ4DAAAAAAAAAOCD5DkAAAAAAAAAAD5IngMAAAAAAAAA4IPkOQAAAAAAAAAAPkieAwAAAAAAAADgg+Q5AAAAAAAAAAA+SJ4DAAAAAAAAAOCD5DkAAAAAAACA/9fencdFXa/9H3/PgKLZrYUa1XFBRcqTpnmiLMnUzDwu5YKUmWVqZblkdmwzTcvytmPdbZS22KIexdSiVS3LrbKwbPFYmYaimYqogCjrXL8/5sfgzEBKAePA6/l4+LgP85kZPt9vF5/33Nd8FwA+aJ4DAAAAAAAAAOCD5jkAAAAAAAAAAD5ongMAAAAAAAAA4IPmOQAAAAAAAAAAPmieAwAAAAAAAADgg+Y5AAAAAAAAAAA+aJ4DAAAAAAAAAOCD5jkAAAAAAAAAAD7K1DwfO3asIiMj5XA4tGnTJs/jnTt3VvPmzdWuXTu1a9dO//d//+cZO3LkiAYNGqSoqChFR0dr6dKlnjGXy6UxY8aoRYsWioqK0vPPP+/1+6ZNm6YWLVqoRYsWmjRp0p/dRgAAAAAAAAAAyiS0LE+Oi4vTPffco9jYWL+xZ555Rr179/Z7fObMmQoLC9PWrVuVkpKiSy65RF26dNHpp5+uefPmafPmzdqyZYsyMjLUvn17de3aVeeee67WrFmjBQsW6Pvvv1doaKg6duyo2NhYXXXVVX9+awEAAAAAAAAAOAFlOvK8U6dOatSoUZl+QWJiokaNGiVJatasmTp16qSkpCTP2MiRIxUSEqLw8HDFx8dr4cKFnrGhQ4eqTp06CgsL07Bhw7RgwYIy/W4AAAAAAAAAAP6Mcrvm+YQJE9SmTRtde+21+vXXXz2Pp6amqmnTpp6fIyMjlZqa+pfGSpKbm6vMzEyvf5L70jD8q5h/5nLJYapy/+wk2Lf84x//+AcAAKqn0i6Xum/fPvXo0UMtW7ZU69attW7dOs8Yl0sFAKBilOmyLaWZO3euGjduLDNTQkKCevfurc2bN3vGHQ6H53+bmddr/+yYr+nTp2vq1Kl+j6elpSknJ+fENgRlcrggV83yairPQgI9lXJT0xGi9LT9yg0NC/RUAFRjWVlZgZ4CAAAIkNIul3rfffepQ4cOWrZsmZKTkxUXF6dt27YpNDSUy6UCAFBByqV53rhxY0nuZvfo0aP1r3/9S+np6apfv76aNGmi7du3q2HDhpKkHTt2qGfPnpLkGYuJifGMNWnSxGusyLFjJbn//vs1fvx4z8+ZmZlq3LixGjZsqLp165bHZsJHWP5RpezI01FXfqCnUm5qO2uofsMGqlejdqCnAqAaq1WrVqCnAAAAAqRTp04lPr5o0SKlpKRIkmJiYhQREaF169apc+fOSkxM1GuvvSbJ+3KpQ4cOLfVyqVOmTPG6XKokz+VSaZ4DAOD2l5vnBQUFSk9PV0REhCRpyZIlioiIUP369SVJAwcOVEJCgl577TWlpKRo9erVmjVrlmds9uzZ6t+/vzIyMpSYmKhly5Z5xkaPHq077rhDoaGhmjNnjqZNm1bqPMLCwhQW5n+0sNPplNNZblenwTEcTqfMIZnj+M8NFuZwbxc1AyCQWIMAAMCx0tPT5XK5PAelSX/tkqgbNmzwjF1++eVeY4sXLy51Hrm5ucrNzfX87Hu5VJS/Yy+XWlUce7lUAAiUE12DytQ8HzVqlJKSkrRnzx5169ZNp556qr777jv16tVLubm5cjqdatCggd555x3PayZMmKBhw4YpKipKTqdTCQkJCg8PlyQNGTJEycnJio6O9jy3VatWkqTOnTsrPj5ebdq0kSRdd9116tGjR1mmCwAAAABAlXDsZU2l8rskKpdLPblxuVQAqBgnernUMjXPExISlJCQ4Pd40bfWJalTp44SExNLHAsJCSnx/YpMnjxZkydPLssUAQAAAACoUorO7E5LS/O6JKrvZU+5XGrVw+VSAaBinOjlUsvlmucAAAAAAKDiFF0SdcqUKUpOTtaePXs8NxXlcqlVF5dLBYCKcaJrEM1zAAAAAABOEiVdLnXr1q2aMWOGhgwZopYtW6pmzZqaO3euQkPd/y89l0sFAKBi0DwHAAAAAOAkUdrlUiMiIrRixYoSX8PlUgEAqBicIwMAAAAAAAAAgA+a5wAAAAAAAAAA+KB5DgAAAAAAAACAD5rnAAAAAAAAAAD4oHkOAAAAAAAAAIAPmucAAAAAAAAAAPigeQ4AAAAAAAAAgA+a5wAAAAAAAAAA+KB5DgAAAAAAAACAD5rnAAAAAAAAAAD4oHkOAAAAAAAAAIAPmucAAAAAAAAAAPigeQ4AAAAAAAAAgA+a5wAAAAAAAAAA+KB5DgAAAAAAAACAD5rnAABUYWPHjlVkZKQcDoc2bdrkeXzfvn3q0aOHWrZsqdatW2vdunWesSNHjmjQoEGKiopSdHS0li5d6hlzuVwaM2aMWrRooaioKD3//PNev2/atGlq0aKFWrRooUmTJlX8BgIAAAAAUEFongMAUIXFxcVp3bp1atq0qdfj9913nzp06KBffvlFr776qgYPHqyCggJJ0syZMxUWFqatW7dq+fLluuOOO3Tw4EFJ0rx587R582Zt2bJFX331lR5//HH99NNPkqQ1a9ZowYIF+v7777V582Z9+OGHWr58eeVuMAAAAAAA5YTmOQAAVVinTp3UqFEjv8cXLVqkUaNGSZJiYmIUERHhOfo8MTHRM9asWTN16tRJSUlJnrGRI0cqJCRE4eHhio+P18KFCz1jQ4cOVZ06dRQWFqZhw4ZpwYIFlbGZAAAAAACUu9BATwAAAFSu9PR0uVwuNWzY0PNYZGSkUlNTJUmpqaleR6ofb2zDhg2escsvv9xrbPHixaXOIzc3V7m5uZ6fMzMzJbkvDeNyuf7KJgIoI5fLJXM4ZA5HoKdSvhwOuVwuOVhTUMHILQAAqiaa5wAAVEMOnwaZmZU6Xl5jvqZPn66pU6f6PZ6WlqacnJw/fC2A8uXKzlZGo0ZSXl6gp1K+atZU6IEDch7zRR1QEbKysgI9BQAAUAFongMAUM3Ur19fkrtJXXT0+Y4dO9SkSRNJUpMmTbR9+3avsZ49e3qNxcTElPq6IseOleT+++/X+PHjPT9nZmaqcePGatiwoerWrVtOWwvgRBRmZKhg1y5ZFfviylGrlhqGhyukXr1ATwVVXK1atQI9BQAAUAFongMAUA0NHDhQCQkJmjJlipKTk7Vnzx7FxsZ6jb322mtKSUnR6tWrNWvWLM/Y7Nmz1b9/f2VkZCgxMVHLli3zjI0ePVp33HGHQkNDNWfOHE2bNq3UOYSFhSksLMzvcafTKaeT27IAlcmcTjnMpOOcMRJsHGasKagU1BgAAFUTzXMAAKqwUaNGKSkpSXv27FG3bt106qmnauvWrZoxY4aGDBmili1bqmbNmpo7d65CQ90fCyZMmKBhw4YpKipKTqdTCQkJCg8PlyQNGTJEycnJio6O9jy3VatWkqTOnTsrPj5ebdq0kSRdd9116tGjRwC2GgAAAACAv47mOQAAVVhCQoISEhL8Ho+IiNCKFStKfE2dOnWUmJhY4lhISEiJ71dk8uTJmjx58p+bLAAAAAAAJxHOLQMAAAAAAAAAwAfNcwAAAAAAAAAAfNA8BwAAAAAAAADAB81zAAAAAAAAAAB80DwHAAAAAAAAAMAHzXMAAAAAAAAAAHzQPAcAAAAAAAAAwAfNcwAAAAAAAAAAfNA8BwAAAAAAAADAB81zAAAAAAAAAAB80IFrbkIAAEexSURBVDwHAAAAAAAAAMAHzXMAAAAAAAAAAHzQPAcAAAAAAAAAwAfNcwAAAAAAAAAAfNA8BwAAAAAAAADAB81zAAAAAAAAAAB8lKl5PnbsWEVGRsrhcGjTpk2ex/ft26cePXqoZcuWat26tdatW+cZO3LkiAYNGqSoqChFR0dr6dKlnjGXy6UxY8aoRYsWioqK0vPPP+/1+6ZNm6YWLVqoRYsWmjRp0p/dRgAAAAAAAAAAyqRMzfO4uDitW7dOTZs29Xr8vvvuU4cOHfTLL7/o1Vdf1eDBg1VQUCBJmjlzpsLCwrR161YtX75cd9xxhw4ePChJmjdvnjZv3qwtW7boq6++0uOPP66ffvpJkrRmzRotWLBA33//vTZv3qwPP/xQy5cvL49tBgAAAAAAAADgD5Wped6pUyc1atTI7/FFixZp1KhRkqSYmBhFRER4jj5PTEz0jDVr1kydOnVSUlKSZ2zkyJEKCQlReHi44uPjtXDhQs/Y0KFDVadOHYWFhWnYsGFasGDBn99SAAAAAAAAAABOUOhffYP09HS5XC41bNjQ81hkZKRSU1MlSampqV5Hqh9vbMOGDZ6xyy+/3Gts8eLFpc4jNzdXubm5np8zMzMluS8N43K5/somohTmcslhksMCPZPy4zD3dlEzAAKJNQgAcDJxHc2TCqvQh/4iIQ45a9cM9CwAAMBJ7C83zyXJ4XB4/WxmpY6X15iv6dOna+rUqX6Pp6WlKScn5w9fiz/ncEGumuXVVJ6FBHoq5aamI0TpafuVGxoW6KkAqMaysrICPQUAAIoVmjInL5PlFgR6JuXGERaqug/3CPQ0AADASe4vN8/r168vyd2kLjr6fMeOHWrSpIkkqUmTJtq+fbvXWM+ePb3GYmJiSn1dkWPHSnL//fdr/Pjxnp8zMzPVuHFjNWzYUHXr1v2rm4kShOUfVcqOPB115Qd6KuWmtrOG6jdsoHo1agd6KgCqsVq1agV6CgAAeLHcAqkKNc+r4HH0AACgApTLkecDBw5UQkKCpkyZouTkZO3Zs0exsbFeY6+99ppSUlK0evVqzZo1yzM2e/Zs9e/fXxkZGUpMTNSyZcs8Y6NHj9Ydd9yh0NBQzZkzR9OmTSt1DmFhYQoL8z9a2Ol0yuks06XdcYIcTqfMIZnj+M8NFuZwbxc1AyCQWIMAAAAAAAi8MjXPR40apaSkJO3Zs0fdunXTqaeeqq1bt2rGjBkaMmSIWrZsqZo1a2ru3LkKDXW/9YQJEzRs2DBFRUXJ6XQqISFB4eHhkqQhQ4YoOTlZ0dHRnue2atVKktS5c2fFx8erTZs2kqTrrrtOPXpwWh0AAAAAAAAAoOKVqXmekJCghIQEv8cjIiK0YsWKEl9Tp04dJSYmljgWEhJS4vsVmTx5siZPnlyWKQIAAAAAAAAA8JdxXjgAAAAAAAAAAD5ongMAAAAAAAAA4IPmOQAAAAAAAAAAPmieAwAAAAAAAADgg+Y5AAAAAAAAAAA+aJ4DAAAAAAAAAOCD5jkAAAAAAAAAAD5ongMAAAAAAAAA4IPmOQAAAAAAAAAAPmieAwAAAAAAAADgg+Y5AAAAAAAAAAA+aJ4DAAAAAAAAAOCD5jkAAAAAAAAAAD5ongMAAAAAAAAA4IPmOQAAAAAAAAAAPmieAwAAAAAAAADgg+Y5AAAAAAAAAAA+aJ4DAAAAAAAAAOCD5jkAAAAAAAAAAD5ongMAAAAAECQiIyN17rnnql27dmrXrp0SExMlSfv27VOPHj3UsmVLtW7dWuvWrfO85siRIxo0aJCioqIUHR2tpUuXesZcLpfGjBmjFi1aKCoqSs8//3ylbxMAACer0EBPAAAAAAAAnLjFixerdevWXo/dd9996tChg5YtW6bk5GTFxcVp27ZtCg0N1cyZMxUWFqatW7cqJSVFl1xyibp06aLTTz9d8+bN0+bNm7VlyxZlZGSoffv26tq1q84999wAbR0AACcPjjwHAAAAACDILVq0SKNGjZIkxcTEKCIiwnP0eWJiomesWbNm6tSpk5KSkjxjI0eOVEhIiMLDwxUfH6+FCxcGZiMAADjJcOQ5AAAAAABBZPDgwXK5XLr44os1ffp0OZ1OuVwuNWzY0POcyMhIpaamSpJSU1PVtGnTEx7bsGFDib83NzdXubm5np8zMzMluS/94nK5ym8D4WEulxwmOSzQMyk/DnNvFzUDIJBOdA2ieQ4AAAAAQJBYs2aNmjRpovz8fD344IO66aabNHfuXDkcDq/nmXl3W48dL8vYsaZPn66pU6f6PZ6WlqacnJwybQdOzOGCXDXLq6k8Cwn0VMpNTUeI0tP2Kzc0LNBTAVCNZWVlndDzaJ4DAAAAABAkmjRpIkmqUaOGxo0bp+joaNWvX1+Su4lddPT5jh07PM9t0qSJtm/f7jXWs2dPr7GYmBi/1/m6//77NX78eM/PmZmZaty4sRo2bKi6detWwNYiLP+oUnbk6agrP9BTKTe1nTVUv2ED1atRO9BTAVCN1apV64SeR/McAAAAAIAgkJ2drfz8fJ122mmSpAULFuiCCy6QJA0cOFAJCQmaMmWKkpOTtWfPHsXGxnqNvfbaa0pJSdHq1as1a9Ysz9js2bPVv39/ZWRkKDExUcuWLSvx94eFhSkszP9oYafTKaeTW6pVBIfTKXNI5jj+c4OFOdzbRc0ACKQTXYNongMAAAAAEAT27t2rAQMGqLCwUGam5s2b64033pAkzZgxQ0OGDFHLli1Vs2ZNzZ07V6Gh7v+Xf8KECRo2bJiioqLkdDqVkJCg8PBwSdKQIUOUnJys6Ohoz3NbtWoVmA0EAOAkQ/McAAAAAIAg0Lx5c23cuLHEsYiICK1YsaLEsTp16igxMbHEsZCQECUkJJTbHAEAqEo4RwYAAAAAAAAAAB80zwEAAAAAAAAA8EHzHAAAAAAAAAAAHzTPAQCoxiIjI3XuueeqXbt2ateuned6qPv27VOPHj3UsmVLtW7dWuvWrfO85siRIxo0aJCioqIUHR2tpUuXesZcLpfGjBmjFi1aKCoqSs8//3ylbxMAAAAAAOWBG4YCAFDNLV68WK1bt/Z67L777lOHDh20bNkyJScnKy4uTtu2bVNoaKhmzpypsLAwbd26VSkpKbrkkkvUpUsXnX766Zo3b542b96sLVu2KCMjQ+3bt1fXrl117rnnBmjrAAAAAAD4czjyHAAA+Fm0aJFGjRolSYqJiVFERITn6PPExETPWLNmzdSpUyclJSV5xkaOHKmQkBCFh4crPj5eCxcuDMxGAAAAAADwF3DkOQAA1dzgwYPlcrl08cUXa/r06XI6nXK5XGrYsKHnOZGRkUpNTZUkpaamqmnTpic8tmHDhhJ/b25urnJzcz0/Z2ZmSnJf+sXlcpXfBgI4LpfLJXM4ZA5HoKdSvhwOuVwuOVhT/hJ3fUiqSuXhcG+Xyqk2yC0AAKommucAAFRja9asUZMmTZSfn68HH3xQN910k+bOnSuHTwPNzLx+Pna8LGPHmj59uqZOner3eFpamnJycsq0HQD+Gld2tjIaNZLy8gI9lfJVs6ZCDxyQ85gv6lB2rqP5OtLAIeVXoROXaziUk75fziM1yuXtsrKyyuV9AADAyYXmOQAA1ViTJk0kSTVq1NC4ceMUHR2t+vXrS3I3sYuOPt+xY4fnuU2aNNH27du9xnr27Ok1FhMT4/c6X/fff7/Gjx/v+TkzM1ONGzdWw4YNVbdu3QrYWgClKczIUMGuXbIq9sWVo1YtNQwPV0i9eoGeSlBzHc5V5n6TcqvQ0dVhTtWt30DOU8PK5e1q1apVLu8DAABOLjTPAQCoprKzs5Wfn6/TTjtNkrRgwQJdcMEFkqSBAwcqISFBU6ZMUXJysvbs2aPY2Fivsddee00pKSlavXq1Zs2a5RmbPXu2+vfvr4yMDCUmJmrZsmUl/v6wsDCFhfk3LZxOp5zOKnR0IxAEzOmUw0z6g7NFgpHDjDWlPDidcpikqlQeVr55Q40BAFA10Twvg+wclwoKAz2L8hcaItWpxYc9AKhu9u7dqwEDBqiwsFBmpubNm+uNN96QJM2YMUNDhgxRy5YtVbNmTc2dO1ehoe6PDRMmTNCwYcMUFRUlp9OphIQEhYeHS5KGDBmi5ORkRUdHe57bqlWrwGwgAAAAAAB/Ac3zMigolG57JlNH86rOIRe1azo0eyynxgNAddS8eXNt3LixxLGIiAitWLGixLE6deooMTGxxLGQkBAlJCSU2xwBAAAAAAgUmudldDTPlFOl7qNUdb4IAAAAAAAAAIDywrU6AAAAAAAAAADwQfMcAAAAAAAAAAAf5do8j4yM1Lnnnqt27dqpXbt2nuuh7tu3Tz169FDLli3VunVrrVu3zvOaI0eOaNCgQYqKilJ0dLSWLl3qGXO5XBozZoxatGihqKgoPf/88+U5XQAAAAAAAAAASlTu1zxfvHixWrdu7fXYfffdpw4dOmjZsmVKTk5WXFyctm3bptDQUM2cOVNhYWHaunWrUlJSdMkll6hLly46/fTTNW/ePG3evFlbtmxRRkaG2rdvr65du+rcc88t72kDAAAAAAAAAOBRKZdtWbRokUaNGiVJiomJUUREhOfo88TERM9Ys2bN1KlTJyUlJXnGRo4cqZCQEIWHhys+Pl4LFy6sjCkDAAAAAAAAAKqxcj/yfPDgwXK5XLr44os1ffp0OZ1OuVwuNWzY0POcyMhIpaamSpJSU1PVtGnTEx7bsGFDib83NzdXubm5np8zMzMluS/94nK5ymXbXC6XHDI5yuXdTg4OFe2jsr/WXC45THJYuU8rYBzm3q7yqhkA+DNYgwAAAAAACLxybZ6vWbNGTZo0UX5+vh588EHddNNNmjt3rhwO73azmXe39djxsowda/r06Zo6darf42lpacrJySnTdpQmO8elRnWPKK+gXN7upFAzVDqQnqPc7LKfhHC4IFfN8moqz0IqYGaBUdMRovS0/coNDQv0VABUY1lZWYGeAgAAAAAA1V65Ns+bNGkiSapRo4bGjRun6Oho1a9fX5K7iV109PmOHTs8z23SpIm2b9/uNdazZ0+vsZiYGL/X+br//vs1fvx4z8+ZmZlq3LixGjZsqLp165bL9mVku7QrM1M5eeXydieFWjWl8Pp1Va9O2ZvnYflHlbIjT0dd+RUws8Co7ayh+g0bqF6N2oGeCoBqrFatWoGeAgAAAAAA1V65Nc+zs7OVn5+v0047TZK0YMECXXDBBZKkgQMHKiEhQVOmTFFycrL27Nmj2NhYr7HXXntNKSkpWr16tWbNmuUZmz17tvr376+MjAwlJiZq2bJlJf7+sLAwhYX5Hy3sdDrldJbPpd2dTsnkUBW6SolMf34fOZxOmUOyKnQdG3O4t6u8agYA/gzWIAAAAAAAAq/cmud79+7VgAEDVFhYKDNT8+bN9cYbb0iSZsyYoSFDhqhly5aqWbOm5s6dq9BQ96+eMGGChg0bpqioKDmdTiUkJCg8PFySNGTIECUnJys6Otrz3FatWpXXlAEAAAAAAAAAKFG5Nc+bN2+ujRs3ljgWERGhFStWlDhWp04dJSYmljgWEhKihISE8poiAAAAAAAAAAAnhPPCAQAAAAAAAADwQfMcAAAAAAAAAAAfNM8BAAAAAAAAAPBB8xwAAAAAAAAAAB80zwEAAAAAAAAA8BEa6AkAVYXlH5ZcBYGeRvlzhspR49RAzwIAAAAAAACoVDTPgfLiKlDOR3FSwZFAz6T8hJ6iWlcuDvQsAAAAAAAAgEpH8xwoTwVHpMKjgZ4FAAAAAAAAgL+Ia54DAAAAAAAAAOCDI88BAAAAAACAIOLKzpYVVMH7rklyhIbKWadOoKcBSKJ5DgAAAAAAAAQVKyjQ77fdJjtatS4d66hdW2fNnh3oaQAeNM8BAAAAAMBJITvHpYLCQM+i/IWGSHVqceVclC87elSWkxPoaQBVGs1zAAAAAABwUigolG57JlNH8yzQUyk3tWs6NHts3UBPAwDwJ9A8BwAAAAAAJ42jeaacvEDPojxVnS8CAKC64ZwhAAAAAAAAAAB80DwHAAAAAAAAAMAHzXMAAAAAAAAAAHzQPAcAAAAAAAAAwAfNcwAAAAAAAAAAfNA8BwAAAAAAAADAB81zAAAAAAAAAAB8hAZ6AgCqHld2tqygINDTqBCO0FA569QJ9DQAAAAAAABQwWieAyh3VlCg32+7TXb0aKCnUq4ctWvrrNmzy/y6vKMml6sCJnQScDqlmrUdgZ4GgBN0uCBXBVb1FqRQh1OnhoYFehoAAKCCWf5hyVUFD9RyhspR49RAzwJACWieA6gQdvSoLCcn0NM4Kbhc0tIncpWfG+iZlK8aYVL/u2lWAcGkwFy67puFOlKYH+iplJtTQmpoYfvrAj0NAABQGVwFyvkoTio4EuiZlJ/QU1TrysWBngWqGNfRPKnQAj2N8hfikLN2zUr9lTTPAaAS5OdKBXmBngUASEcK83XUVXWa5wAAoJopOCIVVq2znIFyV2jKnLxMllt1ztRwhIWq7sM9Kv330jwHAAAAAAAAgCrEcgukKtQ8D9Rx9M4A/V4AAAAAAAAAAE5aNM8BAAAAAAAAAPBB8xwAAAAAAAAAAB80zwEAAAAAAAAA8EHzHAAAAAAAAAAAH6GBngAAoHpxHc2TCgN1n+wKFOKQs3bNQM8CAAAAAACUE5rnAIDKVWjKnLxMllsQ6JmUG0dYqOo+3CPQ0wAAlJO8oyaXK9CzqBhOp1SztiPQ0wAAoFyR3agoNM8BAJXOcgukKtQ8r4LH0QPVguUfllxVZy3ycIbKUePUQM8iqLlc0tIncpWfG+iZlK8aYVL/u8MCPQ0AAMod2Y2KQvMcAAAA1ZOrQDkfxUkFRwI9k/ITeopqXbk40LOoEvJzpYK8QM8CAACcKLIbFYHmOQAAqLKyc1wqKAz0LMpfaIhUpxb3fS8XBUekwqOBngUAAACAkxDNcwAAUGUVFEq3PZOpo3lV5+I6tWs6NHts3UBPAwAAAACqPJrnAACgSjuaZ8qpUqdvVp0vAgAAAADgZMb5vgAAAAAAAAAA+KB5DgAAAAAAAACAD5rnAAAAAAAAAAD4oHkOAAAAAAAAAIAPmucAAAAAAAAAAPigeQ4AAAAAAAAAgI+Tvnn+yy+/6NJLL1V0dLQuuugibd68OdBTAgAAf4DsBgAguJDdAACU7KRvnt9222269dZbtWXLFt1zzz0aPnx4oKcEAAD+ANkNAEBwIbsBACjZSd0837dvn7755hvdcMMNkqQBAwYoJSVF27dvD+zEAABAichuAACCC9kNAEDpQgM9gT+yc+dOnX322QoNdU/T4XCoSZMmSk1NVWRkpNdzc3NzlZub6/k5IyNDknTo0CG5XK5ymU9Gtks1XFkqcFm5vN/JoIbLoUOHTJZf9u9RMvKPKuxogQoLCypgZoERFuJQxqFDUo3c4z7Xl+VmKCc3TCosLP+JBUpImGodypAjrGwvK8zIUFaNGrKCqlMbkuSoUUOHDh1SiJVtDcjJNuVbrgqqztIhSTKTDh0KU618R5le5zqcqyzlyZxVpz4ccskOHZKzoIx/LKXIzMyUJFkZa+1kQHZXPLLbG9ntg+z2QnZ7I7uLkd3FyO6KR3Z7I7t9kN1eyG5vZHexQGX3Sd08l9zBfazSNmj69OmaOnWq3+NNmzatkHlVJUseDvQMTi6RGhXoKZxkIgM9gZPLkiWBnsHJZXqgJ3ASeb783zIrK0v16tUr/zeuYGR3xSO7vZHdviIDPYGTC9ntjewuRnZ7kN0Vj+z2Rnb7igz0BE4uZLc3srtYALLbYSfxV+P79u1Ty5YtlZ6ertDQUJmZzjrrLK1fv/6434C7XC4dOHBA9evX9/sgcLLLzMxU48aNtXPnTtWtWzfQ0wk49oc39oc39kcx9oW3YN4fZqasrCydffbZcjpP6ius+SG7g6/eKgL7wxv7wxv7oxj7wlsw7w+ym+wOduwPb+wPb+yPYuwLb8G8P040u0/qI8/POOMMXXDBBZo3b56GDh2qJUuWKDIy0i/AJSksLExhYd6H7Z922mmVM9EKUrdu3aArvIrE/vDG/vDG/ijGvvAWrPsjGI9ak8juYK23isL+8Mb+8Mb+KMa+8Bas+4PsDk7BWm8Vhf3hjf3hjf1RjH3hLVj3x4lk90ndPJek2bNna+jQoXrsscdUt25dvf7664GeEgAA+ANkNwAAwYXsBgCgZCd98/ycc87RF198EehpAACAE0R2AwAQXMhuAABKFlwXY6smwsLC9NBDD/mdDlddsT+8sT+8sT+KsS+8sT9Qmag3b+wPb+wPb+yPYuwLb+wPVCbqzRv7wxv7wxv7oxj7wlt12B8n9Q1DAQAAAAAAAAAIBI48BwAAAAAAAADAB81zAAAAAAAAAAB80DwHAAAAAAAAAMAHzXMAAAAAAAAAAHzQPAcAAAAAAAAAwAfNcwAAAAAAAAAAfNA8R6X64osv9NtvvwV6GkDQcLlcgZ7CSaGwsFCFhYWBngZQLZHdQNmQ3W5kNxA4ZDdQNmS3G9ldMprnFYw/QLeCggJJ0sqVK5WWlvaHz60u+6y6bGdZFO0TMwvwTE4eTqdT6enp2rFjR6CnEjC7d+/WG2+8oZCQEJmZUlJSSnwef1MoL9SSG9ntr7psZ1mQ3f7IbrIblY9aciO7/VWX7SwLstsf2U12/xGa5xXEzGRmcjrdu3jNmjX65JNPJFW/Qvv000/VpUsXSdKDDz6o77//Xu+8846kkvdF0T6rqqgNfy6Xy2uf/JHqGPDDhg1TYmKipOIPxNXJ2WefrZdeekmDBw/Weeedp+XLl5dYB0X1k5eXV9lTRBXB+lyM7PZGbfgju/8Y2U12o3KwPhcju71RG/7I7j9GdpPdpanaq2UAORwOORwOffbZZxo3bpymTp2ql156SQUFBXI6nZ7TIIoKcfPmzVq5cmWVPD2iTZs22rFjh/7zn/9Ikn799VcNHz5ckvuPzje4Nm/e7BmviqgNf06n07NPrr/+ej322GP67rvvPPvg2AXb4XBo06ZNgZpqhfENpQULFujpp5+WJA0ZMkSLFi2SJIWGhno997PPPtPLL79ceROtBGbmqfeiDy1/+9vflJSUpMcee0wjR46Uw+HwPFdyfxDMz8/XzTffrPXr1wdm4gh6rM/FyG5v1IY/spvsPhbZjUBhfS5GdnujNvyR3WT3scjuE0fzvJzk5OTolVde0caNGz2PzZ49WyNHjtTll1+utm3bau/evXr11VclSSEhIZLkKcRPPvlEYWFhnseD3bGB06BBA02ePFkTJ06UJE2ZMkX16tXTY489Jqn4W6vMzExJUnh4uO64445KnnHFoTb8HRtChYWFMjNNmjRJkydP1ujRo7V9+3bddddd+vrrryUV7wtJOnTokJ566qkqF+RF21hYWKicnBwtWLBATz31lObOnavIyEjFxMTo888/93quJKWnp+vyyy8PyJwrgsvlksPhUEhIiNLT07Vz505J0tNPP63LL79cX3/9tQoKCjzh7nA4dOjQIe3Zs0c1atTQXXfdpU6dOgVyExBEWJ+9kd3FqA1/ZLc/stuN7EZlYn32RnYXozb8kd3+yG43sruMDH9ZWlqaZWZm2meffWZmZvn5+WZmNnLkSHvuuefMzOzQoUP24osvWt++fW337t1mZpaYmGgPP/xwYCZdQVwul+d/Z2ZmWmpqqhUUFJiZWceOHe2ee+4xM7MVK1ZYrVq1LCMjw8zMFi5caJMnT/b8XFVQG/527dplr732mufnw4cPm5nZ9OnTLT093ZYuXWrnnXeePfnkk2ZWXFNJSUmWkpJS6fOtSEV/G4WFhVZQUGBPPvmkvfTSS5aXl2ePPvqo9erVy+bOnWu9e/e2u+++2z799FMzM7vnnnts1qxZAZx5xUtISLCIiAi77LLL7Pbbbzczs++++84iIyPtyy+/9Dxv3759NmXKFEtKSgrUVBGkWJ+Lkd3eqA1/ZHcxsrt0ZDcqGutzMbLbG7Xhj+wuRnaXjuw+MTTP/4KcnBwbN26cTZo0yTIyMiw7O9smTJhgc+bMMTOzW2+91V544QXLzs42M7N3333XoqKi7N///reZmX3//ff222+/BWz+5enY8DYze+qpp6xVq1Z2yy232I033mj5+fm2Zs0aa9iwoe3cudPMzK644grr0aOHmbnDLjc3t9LnXVGojT/Wrl07GzNmjLVt29bmzJlj27ZtsyZNmtiFF15oN954o23ZssXMzLKysiw9Pd3S0tLs0UcftaysLM97+NZcMPGde9F2LViwwIYOHWpTpkyxvXv32qWXXmoHDhyw/v37W82aNe3+++83M7OffvopqLf/WMduh8vlsjVr1ljfvn3t8ccft7S0NEtJSbG6devaRx99ZGZmt912mw0cONCefvppGzBggP3666929OjRQE0fQYj1uRjZ7Y3a+GNkN9ldhOxGZWN9LkZ2e6M2/hjZTXYXIbv/Gi7b8heEhYXpvPPO086dO/X11197Tu/5+uuvdfjwYZ133nlKTk72nAJz+umnKzY2Vj/88IN27typNm3a6Oyzzw7qGzHs3btXkvfpLHPmzNGWLVv05ZdfasCAAZo3b55Wrlypyy67TP/85z911113SZJeeeUVOZ1O5ebmKjw8XDVr1qwyN+6gNrwdez25vLw8ORwOvfbaa3rmmWd08803q3nz5rrwwgt1xhln6PXXX1fLli21YcMGxcfH67vvvlODBg30wAMP6NRTT/W857E1F2yK5r5o0SJdcsklGjFihEaNGqXrrrtODz30kF599VXNmzdPbdu2VWZmph599FF17txZBw8elCRFRUXJ4XAEfX0UFhZ6nTbncDh05plnKikpSWamBg0aKDIyUuPGjdPkyZMlSU888YT+/ve/a/Xq1RoxYoSaNWumWrVqBXIzEGRYn8nu0lAb3shub2S3G9mNQGB9JrtLQ214I7u9kd1uZHc5CEDDPmgdPXrUEhMTbdeuXV6PDxs2zMaPH2+HDx+2DRs22I033mhz5syx3Nxcu+uuu6xz587Wp08f69Chgz377LPWo0cPS0tLC9BWlI8tW7ZYv3797Oqrr7Z+/frZhAkTzMz9Ddbw4cMtKSnJRo8ebR07drT33nvP87qtW7eaw+GwL774IlBTrxDURsl8TycsOvrh008/tU6dOtm0adM841u2bLFGjRrZiBEjbMiQIdauXTt74YUXSn2/YLds2TLr0KGDffLJJ7Z582Y799xzbdKkSWZm9sEHH1jnzp3tlFNOsXXr1pmZ2cGDBwM424pz6NAhGzt2rD388MO2du1aMzMbP368XXrppV7Pi4yMtJkzZ5qZVamjZVDxWJ+Lkd3eqI2Skd2lI7vdyG5UNNbnYmS3N2qjZGR36chuN7L7r6F5XgY///yztWrVyhYvXux57OWXX7ZGjRrZxRdfbG+++aaZmT399NM2bNgw+/nnn83M7PPPP/eMzZ8/3/r16+d1GkwwycvLs3HjxlmHDh1s5syZtmvXLluwYIGdeeaZNnHiRMvNzbXx48dbnTp17JVXXvG8Ljk52T7//HMzM8//LVqQi64/FcyoDW+lnU44fPhwu+mmm8zMbO3atRYREeF1mtyvv/5qSUlJ9vTTT3udEhSs4V304a6kUwFvu+02e/TRRz0/f/vtt9agQQPPf/9Vq1bZxRdfbCtWrPB6XTD/vRQWFnr9/NZbb1lMTIw9++yz9sILL1ijRo1s1apV5nK57JRTTvG6ntq8efO8PvSV9H5ASVifye7SUBveyG43stsb2Y1AYH0mu0tDbXgju93Ibm9kd/mjeX6CihaRadOm2dChQ+3ll1+2Ll262LXXXmspKSk2Y8YMu+OOOyw1NdW2b99uN954o917772e13/zzTfWsWNH69Onj+e6UsEmLy/PnnzySQsPD7cdO3Z4jb377rt28cUX23vvvWfvvPOOXX755Z6bLMyZM8datWrluVFHkWBdmH1RG8X27Nnj99grr7xid9xxh2VmZtqyZcvM6XTasmXLzMzs2muvtb59+9rq1att4MCBfjURzIFl5v5w9/e//90WL17suWlN0TY9/fTT1rdvX6/nX3rppV6hXZX+Rkralqeeesp+/fVX++GHH6xXr1523XXXeW7e89xzz9n//M//VPZUUcWwPpPdpaE2ipHd3shuN7IbgcL6THaXhtooRnZ7I7vdyO6KQ/P8BBUVYFZWll111VV2zjnn2JIlSzzjmzZtsuuvv96effZZM3OH2nfffecZT0lJ8TqNKlh9+eWXNmLECHv++efNrPgu1mZmffr0sVGjRpmZ2bPPPmsdOnSwLl262NVXX23ffPNNQOZbGaiNP3864cGDB61nz57WrVs3z9EDRfsz2AOsaP6PPvqoDR482H755Rev8XXr1llcXJznlKilS5falVdeaZmZmV7PC/ZveY+d/+7du23ChAmeu7dfeOGF1q5dO+vevbslJiZ6nld0CmXXrl1t69atpb4fcDysz25ktz9qg+wuCdntRnYjkFif3chuf9QG2V0SstuN7K5YNM/LoKh4Fi5caL169fIUYtE3Wo899piNGDHC9u3bF6gpVricnBx75ZVX7Oqrr/Z8W5uTk2Nm7v3Spk0bz346evSo/fTTT57XlvYtWFVQXWvjr5xOWNWvKXbsh7tu3bp53eW9yCeffGLR0dHWu3dv69Chg+fIgKrg2L/1nJwcu+eee2zMmDEWEhJid9xxh5m5P+w3btzY6zVDhw61Z555ptLni6qruq7PxyK7S1Zda4PsLh3ZTXbj5FBd1+djkd0lq661QXaXjuwmuysDzfM/8Oabb3pOefL91iUuLs4eeughS09P9zx2+PBhO3LkSKXOsaL80bdMP//8s40ePdruuecer8fvv/9+e+CBB0p8fbCfBuSrOtdGkb96OmHREQFFqlqNmBXXxhtvvGH//Oc/7csvv/SMHT582FatWmWpqan27bffBmqK5c737yE/P9/Gjh1r8fHxtm/fPnv99dft9NNPtw0bNtiBAwfskksusbi4OHvggQesffv2NnLkSK+jAPjGG2VVnddnsvuPVefaKEJ2Hx/ZTXaj8lXn9Zns/mPVuTaKkN3HR3aT3RXNKZQqKytLy5cvlyQ5ne5dVVhYKEm688479f7772v9+vWe59epU0e1a9eWy+Wq/MmWo8LCQs/2FjEzz/+Ojo7WFVdcoZ9//lnffvutJGnevHlavXq1unfvLkl+rw8JCanYSVey6lobx6pRo4Y6duyo/v376/3335ckFRQUSJJ69+6tM844Qx9++KH69OmjuLg43X///eratavefvttzZ8/X6NHj/Z6v6pQI4sXL1ZCQoIkyeVyeWpjyJAhOvXUU7V27Vrl5+frxRdfVPPmzbV48WKdffbZatu2raTiGgpmRdv89ddf67bbbtNnn32mzz//XDNnzlTDhg114403qn///po0aZJOP/10LV26VEOGDJHD4dCcOXP0wgsv6H/+5388a47vWgIcT3Vdn8nu46uutXEsstsf2U12I/Cq6/pMdh9fda2NY5Hd/shusrvSBbJzfzK49957berUqWZmtm/fPq+7zM6ePdvGjh1rZiV/CzN58uQqc02xvLw869Onj3388cdmZrZ69Wq76667bOnSpZ7nHHv61+7du23KlCl2xRVXWK9evaxbt26e04GqCmrj+Did0NucOXOsT58+Xo8VfbO/Zs0aO//8861p06Z22WWX2YYNGwIxxQpx7H/Hw4cP28SJE23MmDGeaxB2797d6w7nn3zyiYWEhNj7779f4nvxrTeOh/XZjez2R20cH9ntjewmu1E5WJ/dyG5/1Mbxkd3eyG6yu7JV++b54sWL7cwzz7TDhw9bUlKSxcTE2Pjx483MbOPGjRYVFeX3mqpWYEV/gBMnTrT27dvb22+/bZdddplNmDDB2rZt6wmyY29SYmb20Ucf2VVXXeV1Ta2qtDBTG8U4nbDYX/lwN3PmTM8NWoqeE8w1U9J/xy1bttg555xj/fv3NzP3Nr7zzjsWHR1t33//vZmZJSQkWNeuXa1z585er60qawcqHusz2V0aaqMY2V2M7C5GdiNQWJ/J7tJQG8XI7mJkdzGyO/CqXfO8sLDQr1D69OljI0eONDP3HZgHDRpk119/vb399ts2bNgw+/HHH0t9v2AuOt/F4+jRoxYTE2NdunSx/fv3m5nZqlWrrEaNGnbo0CHPa4q2OS8vz2v7g3lhNqM2SlPSf1ffbXvrrbfsmmuusY0bN5qZ2dy5c+3SSy+1VatWVcYUK1V5fbgL9r+XY73++uv25JNP2ieffGJm7iMBWrZsaRkZGZ7n/Otf/7Lu3btbZGSkPfLII/bVV19Z7969LSsrK1DTRhBhfS5GdnujNkpGdnsju/2R3ahorM/FyG5v1EbJyG5vZLc/sjtwqlXz/Ng/pG3btllaWpqZmW3atMkaNmxoycnJZmaWlpZmzz77rDVp0sQiIiI8gVZVFmUz732xcuVKe/LJJ83MbMGCBVajRg2vGwf07dvX4uLizKzkhSeYv8ErQm1443TCYny4K+Y79507d9qVV15pAwcOtOXLl5vD4bAPPvjA9u3bZzfccIP961//8nr+gQMH7Pfff7fdu3fbP//5T88REsAfYX0uRnZ7oza8kd3FyO5iZDcCgfW5GNntjdrwRnYXI7uLkd0nn2rVPDdzL8K33HKLXXLJJdavXz+bNWuWmblPCbnsssu8nrtixQq76KKLbP78+YGYaoX75ptvbPz48XbDDTdYzZo1bffu3WZmdvnll3tOgTEz++2338zhcNimTZsCNdVKQW24cTphMT7cuRUWFtp///tf27Ztm5mZZWdnm5lZUlKSLViwwMzMHnnkEYuKirLPP//czNzXVzv//PM9dzp3uVyWm5tr8+fPt/PPP9+rToDjYX0uRnZ7ozbcyO5iZLcb2Y1AY30uRnZ7ozbcyO5iZLcb2X3yqtLN87179/o9dvPNN9vs2bPNzGzQoEHWrl0727Fjh+3fv9+io6M9BVlk+PDhVeIUmJdeeslefPFFz88bNmyw8847z1555RX74IMPrFOnTtavXz8zM/vqq6/s7LPP9rrJxBdffFHpc65I1IY/TicsGR/uzLKysuyVV17xXHdu+PDhlp6ebo888oi1adPGLrroIvvXv/7l+WCXkZFhBQUFduedd9p//vMfr/f65ZdfqkxtoGKwPhcju71RG/7I7pKR3WQ3KhfrczGy2xu14Y/sLhnZTXafzKps83zz5s02Y8YMS09Pt7Vr19onn3xiaWlpNmDAAPv000+tW7duFh8fbzt27PC85umnn7b69et7fl6/fr2ddtpp9umnnwZgC8pH0Z2Ft27dai6Xy3Odo+eee8769u3red5vv/1mZ555pq1evdrMzK677jq/mwqYVY1v9KgNf5xO6MaHu2K+Ry/MmDHDatWqZbGxsZ4PdfPnz7dLLrnEVqxY4Xneiy++aHfffbeZ+R8lARwP67Mb2e2P2vBHdruR3cXIbgQC67Mb2e2P2vBHdruR3cXI7uBQZZvnv//+u11zzTXWsmVL6969u23cuNFycnKsdevW1qpVK0+4mZm9+eabduDAATMzr8dXrVplH374YaXPvby8++671rFjR/vmm2/MzOyxxx6znj17mpnZBx98YFdffbXt3LnTzMwOHz5sl1xyiXXq1MnMzA4dOmS//PJLYCZewaiNklX30wn5cFfs2A9i+/btMzOzNWvW2NChQ+2uu+7yhPjXX39td911l8XExFhSUpJdffXVFhsba2vXrvW8PthPIUTlYn0mu0tDbZSM7Ca7i5DdCBTWZ7K7NNRGychusrsI2R08qkzz3PebuPT0dGvbtq21bt3a1q9fb2bui+ZPnz7dunfvbrm5uXbw4EEbN26ctWnTxr7++utATLtC/fTTT3bfffd5FuD169dbhw4dbM2aNbZt2za79dZbbeLEiWZm9uuvv9rEiRPtvPPOs7ffftvzHsH8bWYRasMfpxP648Odt6ysLLvzzjutS5cuNnXqVPvyyy9t9+7ddtNNN9kTTzzheV52drY999xzNm7cOEtISAjgjBGMWJ/9kd1u1IY/stsf2e2N7EZlYH32R3a7URv+yG5/ZLc3sjs4VJnmeZFFixbZ119/bYWFhbZ//3773//9Xxs+fLjl5OSYmfub3fj4eLv66qutbdu2Nn78eM9F+IPdokWL/K75VHTTiTVr1piZ2dSpUz3fgq9du9bOO+8869mzpzVv3tzeeustu+WWW+z999+v9LlXhupcG0U4nbAYH+5K9+uvv1rv3r3tueeesx07dtiVV15pXbt2NTP3t/7Dhg2zL7/80hYvXlziesG11VBW1Xl9Jrv/WHWujSJkdzGyu3RkNypbdV6fye4/Vp1rowjZXYzsLh3ZHTyCtnnue0rChx9+aLGxsRYXF2fDhw+3Bx54wPLz823t2rU2YMAAe/PNN83MLCUlxczMMjMzLTU11fP6YC+67OxsGz9+vN16662e4HnjjTfs/PPPt44dO9oNN9xgubm5lpqaat26dfNcS2rnzp32xRdfWF5enn388cd24YUX2n//+99AbspfRm2UjNMJS1adP9x98MEHdt1119nYsWPtiSee8Bzl8OWXX9rEiRNt06ZN1rt3b4uPj/eMpaSk2COPPGLNmjWzAQMGeGrGLLg/1KFysD57I7uLURslI7tLRnaT3ag8rM/eyO5i1EbJyO6Skd1kdzALyub5sac07d271zIzM61Xr162YcMGKygosI4dO9oFF1xgL730kpmZPfHEExYbG2t9+vSxa6+91vbv3+8ptmPvWhysiua/bt06GzlypI0dO9b++c9/Wp8+fez777+3n3/+2QYPHmyvvPKKmblvLBAVFeX59nPHjh02ePBgu+KKK7xOhQlG1EbpqvvphHy4K7Zt2za7/vrrrUOHDrZgwQJ7+umn7ZprrrHzzz/fsrOzbcWKFRYdHW0dOnSwpKQkz+s++ugjz4ebH3/8MVDTR5BiffZGdhejNkpHdpPdRchuBALrszeyuxi1UTqym+wuQnZXHUHZPDdz/0HOmDHD2rdvb2lpaXb48GFbvHixtWnTxh5++GF78sknrXfv3vb777+bmdkLL7xgzzzzTIBnXX5KC5dnn33WzjnnHJs2bZrnsczMTHvhhResV69elpqaatnZ2fb55597xrOysjynCVUF1b02inA6YTE+3BXbuHGjNW7c2O68806vx9PT0+2yyy6zkSNHWmZmpsXGxtrcuXM943fddZf179/ftm/f7vW6YP4wg8pX3ddnsrt01b02ipDdxcjuYmQ3Aqm6r89kd+mqe20UIbuLkd3FyO6qJSia577fuq1du9ZGjRplY8eOtfz8fDNzL9yDBg2ylStXmpk7zBo3bmzjx48/7vtVBUXbtGXLFhs1apQ98cQTXgvNt99+a7fccoutWrXK63XBvBiZURul4XRCf3y4K9azZ0+bNWuW32lwq1evttNPP9327dtnCxYssB49etjVV19tbdq0sdtvv93S09MDNGMEI9bn4yO73agNN7LbH9ldjOxGZWB9Pj6y243acCO7/ZHdxcjuquOkb54fu6gWne70/fff29///ne7/vrrPWO7du2yfv362SOPPGLffPONxcXF2ezZs+3XX3/1er9gDS3fcPn222/t7rvvtiNHjviNvf7663bzzTd73X3Y5XJ5TvuoKqiNknE6IR/uSlP0bfX7779vXbt29TvyZc+ePdalSxf77LPPzMzs4MGDtmbNGtu0aZPnOVVlX6BisT67kd3+qI2Skd1kd2nIblQW1mc3stsftVEyspvsLg3ZXfU4dZJzOp367bffNGzYMN1555168803de655+r2229XYWGhUlJSJEkRERGKi4vT+vXrNWzYMMXFxenWW29Vs2bNZGae93M4HIHalD+laO5Op/d/qho1amj+/PlyOp2esaLnXnXVVapbt66WLFmiw4cPS3Jvd1hYmNe+CHbVvTaOVdJ2dOzYUeedd56WL1+ujh076p133lGbNm101llnKTY2VkuXLtXOnTs1ePBgvfHGGzr11FMlSeHh4br11lv18ccf6x//+EdAtuevcLlcnr+JovqvV6+ePv30U+3fv1+hoaGSpN27dysnJ0eff/65Nm7cqNWrV+vBBx/U6NGjvd7PzPz+/oJVSEiIJKlnz55q1qyZ3n77be3Zs8czfuTIEaWkpOj000+XJJ122mm67LLLdN5558nMvPYt8Eeq+/pMdpeuutfGscjuYmR36chuVJbqvj6T3aWr7rVxLLK7GNldOrK7Cqq8Pv2Jeeutt+zjjz/2/PzOO+9Yx44dbeHChbZkyRJr1aqVvfTSS5aVlWVdu3a1l156yQ4fPux5/r59+7zeL5i/1Tz2m6ajR4/alClTLDMz08zcdyK+9tprPXdw9rVixQpbu3ZtpcyzslAbJ666nk5YZNeuXXbzzTfbsGHDbNGiRZaXl2fPPvusXXvttZ4jH/Lz823+/PnWq1cva9eunS1cuNDz+qqwH0rbhqLa+OGHH+yyyy7zujHNvffea3fddRfXU0OZsT4XI7u9URsnjuwmu8luVCbW52Jktzdq48SR3WQ32V09nFTN8+zsbIuPj7cHHnjAdu3aZWZmr776qq1cudKSk5Pt8ssvt9tuu83S0tLMzH0tqY4dO1pycrLfe1WlInziiSfs7bfftvj4eLvuuuts2bJllpuba61bt7atW7eaWfEfbFVYfEpCbXjjdMJifLgr9s0339jjjz/u+Xnp0qWWlJTk+fBfpGgbH3roIRs+fLg98cQT1qFDB7v++utt7969lTpnBD/W55KR3dSGL7K7GNldjOxGILA+l4zspjZ8kd3FyO5iZHf1c1I0z49ddObOnWvDhg2zxYsXm5lZfHy8tWrVyvr06WMfffSR53mbN282M7MJEybYzp07K3fCFcR38fjhhx/sjjvusFGjRtn+/futsLDQ5syZYzExMfbee+9Z79697eWXXw7QbCsHteGttID573//a2eeeaZXMBc9d8+ePXbnnXfaiBEjPNdXO977BQs+3Hl7+eWXLT4+3l5//XW78cYb7eKLL7auXbvamDFjPPunsLDQ83d18OBBa9++vdf11syCvy5QOVif3chuf9SGN7LbG9ntjexGZWJ9diO7/VEb3shub2S3N7K7+jkpmudm7mIaNWqU9e3b18455xzr27evHT582BYtWmQNGza0I0eOmJn7tKnBgwfbI488EuAZly/fBSQrK8umT59uderU8TtF7KOPPrJ+/fpZ7dq1bd68eWZWtf/oqnttFOF0wmJ8uCt27L5IT0+3iRMnWlxcnOeb8C+++MJuv/12mzZtmtfritac7du3ex5zuVzcmARlUt3XZ7K7dNW9NoqQ3cXI7mJkNwKpuq/PZHfpqnttFCG7i5Hdxcju6i0gV6B3uVxF11v3PPbII4/o4MGDeuutt/TUU08pOztbCxcu1MCBA3XJJZdowIABuvnmmxUbG6tGjRrpvvvu83u/YJOfn6+MjAxJ7hsKHDlyRNOmTdPKlSuVk5OjW265RbGxsUpKSpJUvL+6deum+fPnq0+fPlq+fLmk4L7pxrGojdIV3TDiySef1PLly7V582bdeuutWr58uWrXrq3//ve/qlu3rqTi/Vf0f6+88krFxsYGZuIVwOl06tChQxo9erSWLFmizz77TPPmzVN2drbi4uK0f/9+JSYmqlu3bsrIyNANN9ygJUuWSJIef/xxNWrUKMBb8NcV1XZRXXz88cdyuVy65pprlJqa6rkhSfv27XXRRRdp8+bN+uqrrzyvLbqJSdOmTSVJhYWFcjgc3JgEpWJ9diO7/VEbpSO7i5HdZDcqH+uzG9ntj9ooHdldjOwmu+FWqf+1zOeusfn5+ZLcd5r97bffdMMNN0iSevTooa5du2rp0qXatWuXFixYoOnTp+vSSy/VO++8o//93/9VaGioXxEHk71796pz586eO1PPnTtXl156qfLy8vTxxx+rW7duql+/vm644QZ9++23+uGHH+RwOFRYWCgzU+3atTVo0CD97W9/C/CWlA9qw5/53KF906ZNGjVqlH799VfFxsZqwYIF6t69uyZNmqSPPvpIkZGRWrVqlaTiD3V8uKu6H+6Kavvdd9/V7bffrnvvvVdLly5VTEyMBgwYoCNHjujHH39UzZo1FRsbq9NOO00vv/yy12uPVRTqgC/W52Jktzdqwx/ZXYzs9kd2o7KwPhcju71RG/7I7mJktz+yG1IlN8+Lvl3ZtGmTbrzxRo0ePVpvvfWWTjnlFOXl5WndunWe5/bq1UurVq3S7NmzlZeXp7Zt2+qWW25Rs2bN5HK5ZGZBvUBHREQoOztb3333nSTp22+/1dq1azVo0CBt3LhRZ511lgoLC3XppZcqKipKzz77rCT3H5qZafv27Ro7dqwaNGgQyM0oN9SGt6JvI4scPnxY7733nl5//XUNHz5c9evXl9Pp1M0336zHHntMr7zyilauXKlatWpJ8v8AEKz4cFdsz549mj9/vg4cOCBJysvL0+jRo/X444+rd+/eqlu3rj766CP9+OOP6t+/vwoLC/X+++9LkqKiotS/f3+NGTMmkJuAIMX6XIzs9kZteCO73cjuYmQ3AoX1uRjZ7Y3a8EZ2u5HdxchulKRCKzknJ0dTpkzRxx9/7Hnsww8/1I033qiuXbsqOjpar776qp588knNnDlTL774ohYvXqzffvtNy5YtU9++fXXVVVfptNNO87y+aIEOtm/2Dh8+rKNHj0qSCgoKVFBQoO7du+vQoUPas2ePvvnmG8XHx2vEiBEaNmyYPvzwQxUWFqp58+a67LLLJEn79u2T5F6ATjnlFL344ou6++67A7ZNfwW14Y/TCf3x4c69Xkjuo2Zatmyp8PBwz9jOnTv17LPPqlevXnruued09tlna9GiRYqKitJFF12ktWvXevbRFVdcoTZt2gRkGxBcWJ+Lkd3eqA1/ZLc/spvsRuVjfS5GdnujNvyR3f7IbrIbx1FuV08vweuvv24Oh8NGjhxpv//+u5mZPfLIIzZ+/Hgzc19w/4svvrDOnTvboUOH7KWXXrLhw4fbueeea3fffbfnhhTBbteuXdatWzebNGmS1+NDhw610aNH25EjR6x379528803e42PGzfO1q9fXyXuRuyL2vC2Z88eu/TSS23jxo1m5r47ddu2bW3SpEl23333Wdu2bc3MfZOOa665xr7//nszc998ouimNW+99Zbdd999gZh+uTl69Kg99NBDXjcc+eCDD+yCCy6wV1991f79739bnz597IknnrBt27ZZgwYN7M0337Rdu3bZ448/btdff73fDVqC+aY+u3fvth49etgHH3xgLpfLfv75Z/vXv/5lP/zwg23fvt26dOli3377redu7/fcc4+1a9fO1q9fb/v27bNFixZZXl5egLcCwYb12Y3s9kdteCO73chub2Q3AoH12Y3s9kdteCO73chub2Q3jqdCvw5yOp3q0KGD6tat67lpwJEjR1SvXj0dPnxYTqdTDRo0UI0aNbR9+3aNGDFCL730klauXKmZM2eqdu3aVeIaSX/7299077336r333tOECROUmpoqSerf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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_cols, n_rows = 3, (len(spend_cols) + 2) // 3\n", "\n", "fig, axes = plt.subplots(n_rows, n_cols, figsize=(15, 5 * n_rows))\n", "fig.suptitle(\"Wholesale Customer Segment Profiles \\u2014 Annual Spend by Category\",\n", " fontsize=14, fontweight=\"bold\")\n", "\n", "palette = [\"#2563EB\", \"#10B981\", \"#F59E0B\", \"#DC2626\", \"#8B5CF6\", \"#EC4899\"]\n", "segment_order = segment_means[\"segment_name\"].tolist()\n", "short_names = [name[:14] + \"..\" if len(name) > 14 else name for name in segment_order]\n", "\n", "for idx, (ax, col) in enumerate(zip(axes.flat, spend_cols)):\n", " values = segment_means.set_index(\"segment_name\")[col].reindex(segment_order)\n", " ax.bar(range(len(values)), values.values, color=palette[:len(values)], alpha=0.85,\n", " edgecolor=\"white\", linewidth=0.8)\n", " ax.set_xticks(range(len(values)))\n", " ax.set_xticklabels(short_names, rotation=30, ha=\"right\", fontsize=8)\n", " ax.set_title(col, fontweight=\"bold\", fontsize=10)\n", " ax.grid(axis=\"y\", alpha=0.3)\n", " ax.yaxis.set_tick_params(labelsize=8)\n", "\n", "for ax in axes.flat[len(spend_cols):]:\n", " ax.set_visible(False)\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "md885fb7e5", "metadata": {}, "source": [ "---\n", "\n", "## What You Built\n", "\n", "| You Wrote | BitBullet Handled |\n", "|-----------|-------------------|\n", "| Called `generate_feature_stats(df)` | Full audit — skewness, kurtosis, cardinality, nulls |\n", "| Mapped integer Channel/Region to strings | Correct categorical type detection by `detect_column_types` |\n", "| Called `auto_cluster(df)` | Algorithm selection, K search, fitting, evaluation |\n", "| Defined a `clusterer_factory` and local-peak rule | Silhouette scores across candidate K values |\n", "| Declared a `ClusterConfig` | Cao initialisation, Huang gamma, categorical distance weighting, resolved per-column metadata |\n", "| Called `evaluate_clustering(df[num], labels)` | Silhouette, Calinski-Harabász, Davies-Bouldin, quality score |\n", "| Called `profile_clusters(df, labels)` | Per-cluster statistics, suggested labels, feature importance |\n", "| Called `auto_decompose(df)` | FAMD selection for mixed data, explained variance |\n", "| Called `create_dashboard(...)` | Multi-panel visualisation assembly |\n", "\n", "### Key Takeaways\n", "\n", "1. **Algorithm selection matters.** The Channel and Region columns carry real discriminative information. Converting integers to strings ensures they are treated as categoricals, not as ordered numerical variables.\n", "\n", "2. **Gamma and categorical weights have different jobs.** Gamma controls the total scale of categorical distance relative to numerical distance; categorical weights allocate that categorical contribution across categorical columns.\n", "\n", "3. **Small datasets need compact K searches.** With 440 rows, K > 7 risks fitting noise. A global silhouette maximum can over-prefer K = 2 when a coarse binary split dominates. Looking for a post-2 local peak asks whether a richer segmentation improves separation despite the extra cluster.\n", "\n", "4. **Spending distributions are always right-skewed.** A handful of very large accounts inflate centroids. `auto_cluster` normalises internally; for manual configuration, consider log-transforming spend features before calling `find_optimal_k`.\n", "\n", "5. **Segments are only valuable when activated.** Attaching labels and computing per-segment spend means is the step that turns a mathematical result into a procurement or sales planning artefact.\n", "\n", "---\n", "\n", "**Continue the Academy:**\n", "- `04_Data_Transformations.ipynb` — deep dive into every transform in `bitbullet.transform`\n", "- `05_Model_Management.ipynb` — versioning, comparison, and model governance" ] } ], "metadata": { "kernelspec": { "display_name": "bitbullet", "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.13" } }, "nbformat": 4, "nbformat_minor": 5 }