Spaces:
Sleeping
Sleeping
Amol Kaushik commited on
Commit ·
abb75e2
1
Parent(s): 552944f
a6 report
Browse files
A6/A6_Report.ipynb
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"id": "1d150f0d",
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"source": [
|
| 8 |
+
"# A6 Report – SVM Classification and Response Time Assessment\n",
|
| 9 |
+
"\n",
|
| 10 |
+
"This sprint focuses on:\n",
|
| 11 |
+
"1. SVM classification with GridSearchCV hyperparameter optimization\n",
|
| 12 |
+
"2. Benchmarking response times using all classification models from A4 to A6\n",
|
| 13 |
+
"3. Champion selection based on accuracy and speed trade-offs"
|
| 14 |
+
]
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"cell_type": "markdown",
|
| 18 |
+
"id": "e69eee4d",
|
| 19 |
+
"metadata": {},
|
| 20 |
+
"source": [
|
| 21 |
+
"## 1. SVM Classification"
|
| 22 |
+
]
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"cell_type": "code",
|
| 26 |
+
"execution_count": 18,
|
| 27 |
+
"id": "9c5bb6bc",
|
| 28 |
+
"metadata": {},
|
| 29 |
+
"outputs": [],
|
| 30 |
+
"source": [
|
| 31 |
+
"import os\n",
|
| 32 |
+
"import json\n",
|
| 33 |
+
"import numpy as np\n",
|
| 34 |
+
"import pandas as pd\n",
|
| 35 |
+
"import matplotlib.pyplot as plt\n",
|
| 36 |
+
"import warnings\n",
|
| 37 |
+
"from pathlib import Path\n",
|
| 38 |
+
"\n",
|
| 39 |
+
"warnings.filterwarnings('ignore')\n",
|
| 40 |
+
"\n",
|
| 41 |
+
"REPO_ROOT = os.path.abspath(os.path.join(os.getcwd(), '..'))\n",
|
| 42 |
+
"BENCHMARK_DIR = Path('benchmark_results')"
|
| 43 |
+
]
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"cell_type": "markdown",
|
| 47 |
+
"id": "0ede6584",
|
| 48 |
+
"metadata": {},
|
| 49 |
+
"source": [
|
| 50 |
+
"### Grid Search Configuration\n",
|
| 51 |
+
"\n",
|
| 52 |
+
"| Parameter | Values |\n",
|
| 53 |
+
"|-----------|--------|\n",
|
| 54 |
+
"| Kernel | rbf, poly, linear |\n",
|
| 55 |
+
"| C | 2^(-5), 2^(-1), 2^3, 2^7 |\n",
|
| 56 |
+
"| Gamma | 2^(-10), 2^(-6), 2^(-2), 2^2 |\n",
|
| 57 |
+
"| Degree (poly) | 2, 3 |\n",
|
| 58 |
+
"| Class weight | balanced |\n",
|
| 59 |
+
"\n",
|
| 60 |
+
"Cross-validation: 5 fold outer CV, 3 fold inner CV nested"
|
| 61 |
+
]
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"cell_type": "code",
|
| 65 |
+
"execution_count": 19,
|
| 66 |
+
"id": "2be04d57",
|
| 67 |
+
"metadata": {},
|
| 68 |
+
"outputs": [
|
| 69 |
+
{
|
| 70 |
+
"name": "stdout",
|
| 71 |
+
"output_type": "stream",
|
| 72 |
+
"text": [
|
| 73 |
+
"C values: [0.03125, 0.5, 8, 128]\n",
|
| 74 |
+
"Gamma values: ['0.00098', '0.01562', '0.25000', '4.00000']\n",
|
| 75 |
+
"Total grid combinations: 84\n"
|
| 76 |
+
]
|
| 77 |
+
}
|
| 78 |
+
],
|
| 79 |
+
"source": [
|
| 80 |
+
"C_range = [2**i for i in range(-5, 10, 4)]\n",
|
| 81 |
+
"gamma_range = [2**i for i in range(-10, 4, 4)]\n",
|
| 82 |
+
"\n",
|
| 83 |
+
"print(f\"C values: {C_range}\")\n",
|
| 84 |
+
"print(f\"Gamma values: {[f'{g:.5f}' for g in gamma_range]}\")\n",
|
| 85 |
+
"print(f\"Total grid combinations: {len(C_range) * len(gamma_range) * 3 + len(C_range) * len(gamma_range) * 2 + len(C_range)}\")"
|
| 86 |
+
]
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"cell_type": "markdown",
|
| 90 |
+
"id": "0f786730",
|
| 91 |
+
"metadata": {},
|
| 92 |
+
"source": [
|
| 93 |
+
"### Results\n",
|
| 94 |
+
"\n",
|
| 95 |
+
"| Model | CV F1 Mean | CV F1 Std | vs A5b |\n",
|
| 96 |
+
"|-------|------------|-----------|--------|\n",
|
| 97 |
+
"| SVM with nested CV | ~0.65 | ~0.05 | +0.2% |\n",
|
| 98 |
+
"| A5 Soft Voting | ~0.64 | ~0.04 | baseline |\n",
|
| 99 |
+
"\n",
|
| 100 |
+
"**Nadeau-Bengio corrected t-test**: Not statistically significant (p > 0.05)"
|
| 101 |
+
]
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"cell_type": "markdown",
|
| 105 |
+
"id": "79b15891",
|
| 106 |
+
"metadata": {},
|
| 107 |
+
"source": [
|
| 108 |
+
"## 2. Response Time Benchmarking\n",
|
| 109 |
+
"\n",
|
| 110 |
+
"### Hardware Specifications\n",
|
| 111 |
+
"\n",
|
| 112 |
+
"| Component | Specification |\n",
|
| 113 |
+
"|-----------|---------------|\n",
|
| 114 |
+
"| CPU | AMD Ryzen 5 5600U (6 cores, 12 threads) |\n",
|
| 115 |
+
"| RAM | 30 GiB |\n",
|
| 116 |
+
"| Storage | NVMe SSD |\n",
|
| 117 |
+
"| Python | 3.12.3 |\n",
|
| 118 |
+
"| scikit-learn | 1.8.0 |"
|
| 119 |
+
]
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"cell_type": "markdown",
|
| 123 |
+
"id": "69a5ab39",
|
| 124 |
+
"metadata": {},
|
| 125 |
+
"source": [
|
| 126 |
+
"### Models Benchmarked\n",
|
| 127 |
+
"\n",
|
| 128 |
+
"| Model | Type | Source |\n",
|
| 129 |
+
"|-------|------|--------|\n",
|
| 130 |
+
"| A4 Random Forest | RandomForestClassifier | A4/models/ |\n",
|
| 131 |
+
"| A5 Ensemble | VotingClassifier | A5/models/ |\n",
|
| 132 |
+
"| A5b Adaboost | AdaBoostEnsemble | A5b/models/ |\n",
|
| 133 |
+
"| A5b Bagging Trees | LGBMClassifier | A5b/models/ |\n",
|
| 134 |
+
"| A6 SVM | Pipeline (Scaler + SVC) | A6/models/ |"
|
| 135 |
+
]
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"cell_type": "code",
|
| 139 |
+
"execution_count": 20,
|
| 140 |
+
"id": "9a8d2dbf",
|
| 141 |
+
"metadata": {},
|
| 142 |
+
"outputs": [
|
| 143 |
+
{
|
| 144 |
+
"name": "stdout",
|
| 145 |
+
"output_type": "stream",
|
| 146 |
+
"text": [
|
| 147 |
+
"Benchmark config: 100 samples, 10 repeats\n"
|
| 148 |
+
]
|
| 149 |
+
}
|
| 150 |
+
],
|
| 151 |
+
"source": [
|
| 152 |
+
"with open(BENCHMARK_DIR / 'benchmark_20260310_090052.json', 'r') as f:\n",
|
| 153 |
+
" benchmark = json.load(f)\n",
|
| 154 |
+
"\n",
|
| 155 |
+
"with open(BENCHMARK_DIR / 'single_benchmark_20260310_090011.json', 'r') as f:\n",
|
| 156 |
+
" single_benchmark = json.load(f)\n",
|
| 157 |
+
"\n",
|
| 158 |
+
"print(f\"Benchmark config: {benchmark['num_samples']} samples, {benchmark['num_repeats']} repeats\")"
|
| 159 |
+
]
|
| 160 |
+
},
|
| 161 |
+
{
|
| 162 |
+
"cell_type": "code",
|
| 163 |
+
"execution_count": 21,
|
| 164 |
+
"id": "f1f00975",
|
| 165 |
+
"metadata": {},
|
| 166 |
+
"outputs": [
|
| 167 |
+
{
|
| 168 |
+
"name": "stdout",
|
| 169 |
+
"output_type": "stream",
|
| 170 |
+
"text": [
|
| 171 |
+
" Model Mean (ms) Std (ms) P95 (ms) Accuracy Size (MB)\n",
|
| 172 |
+
" A4 Random Forest 60.72 3.05 68.96 89% 16.4\n",
|
| 173 |
+
" A5 Ensemble 87.92 19.67 138.67 67% 26.7\n",
|
| 174 |
+
" A5b Adaboost 34.67 6.93 48.36 52% 0.7\n",
|
| 175 |
+
"A5b Bagging Trees 6.08 1.79 9.79 0% 6.5\n",
|
| 176 |
+
" A6 SVM 9.10 0.32 9.63 83% 0.7\n"
|
| 177 |
+
]
|
| 178 |
+
}
|
| 179 |
+
],
|
| 180 |
+
"source": [
|
| 181 |
+
"results = []\n",
|
| 182 |
+
"for name, data in benchmark['models'].items():\n",
|
| 183 |
+
" results.append({\n",
|
| 184 |
+
" 'Model': name,\n",
|
| 185 |
+
" 'Mean (ms)': f\"{data['inference_time_mean']*1000:.2f}\",\n",
|
| 186 |
+
" 'Std (ms)': f\"{data['inference_time_std']*1000:.2f}\",\n",
|
| 187 |
+
" 'P95 (ms)': f\"{data['inference_time_p95']*1000:.2f}\",\n",
|
| 188 |
+
" 'Accuracy': f\"{data['accuracy']*100:.0f}%\",\n",
|
| 189 |
+
" 'Size (MB)': f\"{data['model_size_bytes']/1e6:.1f}\"\n",
|
| 190 |
+
" })\n",
|
| 191 |
+
"\n",
|
| 192 |
+
"df = pd.DataFrame(results)\n",
|
| 193 |
+
"print(df.to_string(index=False))"
|
| 194 |
+
]
|
| 195 |
+
},
|
| 196 |
+
{
|
| 197 |
+
"cell_type": "code",
|
| 198 |
+
"execution_count": 22,
|
| 199 |
+
"id": "85581a9d",
|
| 200 |
+
"metadata": {},
|
| 201 |
+
"outputs": [
|
| 202 |
+
{
|
| 203 |
+
"data": {
|
| 204 |
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAmqtJREFUeJzt3QmcTfX/x/HPWMdO9n2JkH3LkpCUSoulXVEpElkqiRJKSWlRSpGlxV4UKkLRRqiIiOz7Etl37v/x/vY/93dnzIyZMXPvmPt69riZOfecc88958493/M5n+/nG+Hz+XwGAAAAAAAABFGaYL4YAAAAAAAAIASlAAAAAAAAEHQEpQAAAAAAABB0BKUAAAAAAAAQdASlAAAAAAAAEHQEpQAAAAAAABB0BKUAAAAAAAAQdASlAAAAAAAAEHQEpQAAAAAAABB0BKUAJLvDhw/bQw89ZAUKFLCIiAjr1q0be/085s2b5/aV/k0ptD2dO3e21KpEiRJ2//33J3rf9OvXL8m3CQCAcJXSz63aNm1jqCxevNjq1atnWbJkcduxdOlSN33mzJlWtWpVi4yMdNP3798fsm0E4oOgFIDzGjNmjDupLVmyJFF766WXXnLr6Nixo3388cd23333heVeV8BD+/F8j8QGRlJTME6PTz75JMZ5rrzySvd8xYoVg759AIBzvfvuu+57uXbt2uyeFGb58uV22223WfHixV2QonDhwnbttdfa22+/bRe7Ro0axatdlZIDW4l16tQpu/32223fvn32xhtvuPa1jvHevXvtjjvusEyZMtk777zjpitoBaRk6UK9AQBSv2+//dbq1Kljffv2tXDWoUMHa9Kkif/3DRs22HPPPWft27e3q666yj/90ksvdQ37Y8eOWYYMGSwcqeE8btw4u/fee6NM37hxo/3888/ueQBAyjB27FiXbbpo0SJbu3atlS5dOtSbBDN3vrz66qutWLFi9vDDD7uM9S1bttjChQttyJAh9thjj13U++mZZ55xmfiBmUNvvfWW9e7d28qXL++fXrlyZUtt1q1bZ5s2bbIRI0ZE2QfKkjp06JC98MILUdqcQEpGUApAstu9e7ddfvnlSba+s2fP2smTJy+6wETdunXdw6PMMwWlNC168EUutveXlG688UabNm2a/fPPP5YnTx7/dAWq8ufPb2XKlLF///03pNsIAPjv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qFGj3Dyvv/56rPPEdG6UDRs2nHPO89op+s6OLqbz3cCBA905R+c1T4MGDXzZsmWLMi1wey70nKdl06dP79u3b59/mtopOXPm9D344IP+aTpHd+rUyZdQ33zzjTtf6VG3bl3fU0895doHJ0+eTPQ5Pr5tifi287zz96OPPhplvnvuuSfB51a1HaJ/PrS8pt19993x+hyMHz/ezf/999/7pzVv3tzth8DPwcqVK91+Dbyc3rhxo5v24osvRlmn2pn6PESfHpOqVav68uXL59u7d69/2rJly9y+bNOmTYztpfO12YGUju57AC6I7t4F0h1F3XU6H92J1F2zcuXKubul3qNx48b+lPhAylgJrEul9pOykm6++Wb3c+A6dGdRmVDR09p1JyywcLhXXNzbXt3BUldD3eWLfifLu1umUU50B093wHQH13tN3bXU6/79998usya5qCuC7iB7dEdM26p9GTjqkfez994Ss79ioju+Skn3KHtIGU3qauB121R3DKXie90KRXdedWcxptpZsdFdSaW9T5gwwW2z/tVd+Jh89dVX7t/HH388ynQvO0/dR707kMqIUnHXwGGcY8oS02dUnxHdrQ7cXyocqvcaU5cGAAgnygZShoa6QYu+V++88073fe2dE0TnnypVqsSYSex9F2seZUzFVHw78Ps6obxs20DqVhVYX0jf7crQ0blGbQFRhou+55XZpXNdbNtzIec87SuNoqZ6XJ5vvvnGdXXUcx6d55X9u3379gS9d3XxU6aUMpaUbawMcZ3zlWUTU8mB853jE9KWiG87zzt/K+MnUHyyty+kvRr9c6Cuo9o+ZYGJ9z70vvX+lQ0f+DnQe/My2Tw6jsoQUxsx8D0rC0tZWtHbttEpC3vp0qWuy53aPx6VkdCx9PYVkNrQfQ9AoqlfvVKZA+kCPj4FqBW8Udp59OVjK8CpFORAaiyq0aYUZT3is47ojUptq3jb69WsiCvFXTWo1BBTarYesb2uGnzJQd0gozfOVcRU3QeiTwt8b4nZXzFRoyo61f5QNwi9hhpeaoAqlVwXK0rnF/2shl5CRmRSdwml26suxxVXXOG6Iiq1PyYagUZdM6OvX9ujxrye9+aL6X3oc+h9HgI/o+q6Ed/PKACEE12sK/ikgJRu6ATeFFFXfnXD080F7/zaqlWrONeneXSjJV26pLs80bp03oxu8+bN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aeLEiVajRg2bMmWKHT58+Jzn33jjDbv00kvPu54ePXrY0qVLbdmyZbZ+/XobOnToRbs/9D70+OCDDxK07OnTpxP8egSlUheCUgAAAAAAxNPIkSOtZ8+e1qBBAxeQCfTnn3/a559/bk8//XS892fGjBmtfv36tmnTJvf7zp077eqrr3aBrwoVKljnzp1d7SUZM2aMNWnSxO6++26rVKmS1axZ0wW0PP369bMyZcq4ZSdMmBDldT7++GOrXLmyezRr1sy2bdt2zjovv/xyq1evnq1cudJatGhh5cuXt+uuuy7G4FtcZs2aZdWrV3ev1bBhQ7c+mTdvnntPyjJTZtXUqVPd9t90001Wq1YtN78XnDt27JjdeeedbpuqVKnitkMeeeQRW716tVv+lltuSdB2IeUhKAUAAAAAQDwouKKRxps2beoCKwpQeU6dOmUPP/ywvf/++5Y2bdp4788DBw64YE2rVq3c7+r2N336dPv111/tjz/+cJlBkyZN8s+/ePFie+mll2z58uUumDRo0CA3/csvv7TJkye75ZYsWeKWC+zKp8ysr7/+2q1TgafArnZap9aj96csr5tvvtl1kVu1apVlyJDBPvzww1i3X4Ejr/uegky7d++2e+65xy2j12rfvr3ddtttrlujaJ1t2rRxmVUtW7a0jh072uDBg902LFy40IYPH+5+njlzpu3fv99tk7LJvCCbtktdBrX8tGnT+Nxe5AhKAQAAAAAQDwpCKaCioNONN95oGzZscEEW6d+/vwuyKLsoPl599VWXGZQ/f34rUqSIy44SZUUpE0vZQdWqVXMBJgVgPHXr1rWSJUv6f163bp37ee7cuXbHHXe4kew0wluHDh38y3z33Xd2/fXXuzpW8uijj9q3335rZ86c8a+nWLFi7mdlXylrSdsl+vnvv/+OV/c9ZVf98ssvLotLD2ndurVt377dn5lVqlQplz0lynhas2aNC2IpqKVgmWp2KRCl9699q23Va6RPn57PaCpEUAoAAAAAgPNQJpS6wCkDSAW+S5cu7YqTe9lS8+fPt7fffts9p+54Bw8edD/v2bMnxvUpc0mZRArKKPDkFe9+/fXXXbaRgjt6XgGb48eP+5eLjIz0/6zgWGx1mRSYik3056KvM76vkRgqEu9R9pQyw3777Td/YEuBvrZt27rglYJTCqb99NNPVrFiRfv333+T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OdDnQce+b9++dtNNN1muXLnsl19+cQHCDh062NatW938b731lk2bNs0mTZpkq1evtrFjx7oAGAAASDrl6hY0X+IG3vPT8loPAACIH/KLk9nhw4dt4sSJtmTJEtu5c6fLiOrdu7f/+X///dd195o+fboLNHmUNRWbn376yQ4cOGAffPCBpUv33yEsWbKkXX311f55FHTSet98803LnPl/d/70+sq4uf766/3TqlevbuvWrbMpU6ZY69at3TT9rICU1huOsmXLZnXr1rUXXnjBypcv77Kaxo8f77LelC11IRRMVKBJdafKli3rsrGOHj3q/1z06tXLXn75ZRf8uuuuu2zz5s1WpkwZq1+/vstcU6YUAABIWtkuibQSlXLbphX7zHc24dGpiDQRVrxSbrceAAAQP2RKJTNlt5QrV84FH+69916XveQLuA2nmkVnz551dYoU/FDXrTvuuMO2bNkS6zoLFCjgMnmmTp0aZV2BFFxSjaNPP/3UP03zfvjhh64LmboTBnrwwQejdBnTdj7wwAPnfX96jYMHD0Z5pBaqJaV9VrhwYcuYMaMLJN19990umHQhKlSoEGUdCnhVqlTJ/7uOTe7cuV1XTNHxWrp0qfsMdenSxb755psLen0AABCzatcWS1RASrRctSZF2bUAACQAQakgdN1TMEqUnaQMp/nz5/ufX79+vQtKqcaQspoURNq3b59de+21rpZQTOrUqeOyajTSW548eeyGG26wV1991Xbt2hUlG6dFixZRuvCp256678UUbNI2KjNn06ZN7qFsLG+746LaRqqf5D3UFTC1uPTSS92xUrabgoSLFi2yU6dOWalSpS5ovenTp4/yu7KfYpqmz4WXybZhwwaXtaUulgpa3nbbbRe0DQAA4FyFyuSyeq0SlxGt5bQ8AACIP4JSyUj1fxTIUHaNqKudipErUOVR4EGBDmXhqI6UAk7qJvb333+7IFJsXnzxRdcd8L333nOZN/pXGVkaJS4w+0l1i9Q1TxSgatiwYYzdzzRqnAqxq3ufMqb0swJe56OuZgq0eY+4MrwuVlmyZHFdHtXVUjW8br311qBvQ/bs2d1nZ8SIEa47qIqwK3gJAACSVtUmRf2BKXXJi4v3vObXcgAAIGEISiUjBZ/UzU4FyBWQ0kMjtymgoACOKNghl19+eZQAkQJCqiUUF3Xxuv32223w4MGu2LleRz97VKNKdaEUaFK3OtWJCixwHp2CWJpXXfz0c3yoW5sCJoGP1EIBqJkzZ7osJXWzVM0uBf68TDMF5DTSXiB1s9ND2VUqSK+fV65ceUHboWLoClT+9ddftmbNGps8ebLrwqmR+wAACBUNCNKnTx9Xf1IDgSjDWFm9gaUF9PNzzz3n2juap0mTJu7GW0qmbGV142vxRDVXI8oiFHz67+Ge936OMPe85tP8Wg4AACQMhc6TiYJRH330kb322mt23XXXRXmuefPmLsigUdauvPJKf1aV6kmJMmD++eefBBW0zpAhg2sMavQ9j+oWKYCi4JjqImmeuLp9qXuhugyqURXX6H/hQoFDBZ40Cp66Q7Zq1cplqHld7Xbs2HFO4LBatWr+n3/99Vc3gqGOo7pNXkjRdRVDVyNe9aZq1aplX3311QXXtgIA4EIMGjTI3WzTzSxlbWtQF7U71J1fNRBF5y9lg2seBa8UxFIbQzdsoo9wm9KoK54eh/Ydt78W7LADu4/ZyeOnLUNkOsuRL5MbZY+i5gAAXJgIX2yVsnFBPv/8c9fdSsWq1TgL1LNnT/v2229t8eLF/iDV2rVrbfjw4S7TSIEQ1ZpSlk30WkMyY8YMmzBhghuZ7bLLLnN3ITV639NPP+263t13333+eRU0USNQ26DtUeMxkIpo79+/322veIXKvYwnbZsycpRBFR9aXq/VuPckSxf5v1H/UqpZfZqFehMAACmQdz7TDYrUlAWclG666SY3WEdgWQLdwFFG1CeffOLaJ8rifuKJJ+zJJ590z2t/ahm1K9SOOR+OQ/JSGQm1VfPly8fNrhBg/4cexyD0wukYcE6LGZlSyUQNNKWoRw9IeQ023Tn8448/rHLlyi6jqnv37q6Ok/4QVfdJ3cZiCkh5Xf0yZ87sGnmq4aQudGXKlLEPPvggSkBK1H1P26ER2+LTJY+GNwAAiI969eq5G2rqWq6bZMuWLXODpqjbuaj7u+pfqh3iUbuodu3atmDBgngFpTwnz5x0j+jSRKSxdGn+15yNaR5PhEVY+rTpEzXvqTOnzGe+oM4rGdJmSNS8p8+etrO+s/GeV/sijS/mi8H0adL7uyaeb72JnffM2TN2xncmSebV50Gfi5Qyr/aB9kVsF+Nal//3OOaVtBFpLW2atMk6r4LJp86eSpJ5A/8+k2ve8/0tn29eHQPv+yWtLy3fEYn4PrnQ74jAYxD4PZQavyPi+qyGM4JSyUSZS7G54oorotRbUCBIQazAO41x0ehvagQmpDZSbM6XAeVlUAEAAARShrbu+qreorqXq8aUurm3bt3aPa+AlCgzKpB+956L7sSJE+7h8TK4B/802DJmyXjO/KUvKW2tK/33evLKj6/EejFbPGdxu7/K/f7f31jwhh09dTTGeQtmK2jtq7f3/z500VDbf3x/jPPmzZzXHq31qP/395e8b3uO7olx3pyROa1r7a7+30f+PtJ2HNoR47yZ02e2HvV6+H//+I+PbdP+TbFekPW+qrf/9/HLx9vafWstNn0b9nX/6mLwy/Vf2ra/tsVaE6tX/V7+C9Rpf02zZbuWxbreJ+s+aVkyZHE/f/3317Zk+5JY59V+0P6Q2etm24KtC2Kdt2PNjpYvSz738/yN823+pv+NZB3dQ9UessLZC7uff97ys81ZPyfWedtWaWslcpZwPy/etti+Xvt1rPPeXfFuuyz3Ze7nZTuX2Rerv4h13tvK32YV8lVwP/+5+0/7dNWnMc6n64Gr8l5l+fP99zeyZu8aG79ifKzrvaH0DXZF4Svczxv3b7QPl30Y67xNSjWxK4v+VyZk28Ft9sHvH8Q6b8PiDa1RiUbu591HdtuwJVF7VgSqW6SuXXfpf6VJ9Dcx5Jchsc5bs1BNa1bmv14JR04escEL/lf7Nroq+atY83LN/RfuA38cGOu85fOUtzsq3OH//cXvX4x13vN9R+gYqPyJBjYqkasE3xHRviPk0z8/tVX/rIp1H1/od0TgMQj8HkqN3xEnjvzv/Ib/ISgFAACABJs0aZKNHTvW1U9UTSmVHejWrZvrste2bdtE7dGBAwda//79z5l+5OgRO23nZnocTHfQdfvwHD5yONaMkENpDkWd9/BhO3b6WMzz+qLOe+jQIXdRHZPIM5Hnzns85nnTnkobdd6Dh9x7i8nZdGfPnTegdmj0O/SB8yqYF9u84s2roJRe/8iJI7EGpTSvd8Gp7pdxrVeDvBxJ/9/zB/aff96TGf/LGlApibjmVa1V+/+nzzvv3n8s/fH/stE0cnJc8+7du9cyn8wc73l3n9ntr/8a17x6fredf15djB+K/O+zpt4Se/fvjXO92sbd6f9b795D8Zg343/z/nPknzjn1T71PhP/HIv/vAdOxH2M9Rnw5lUAOM55D/xvXgWl4pr3YIaof/dxznue7wgdg+PHj7ufD6XlO8KT0O+TC/mOCDwGgd9DqfE74sRRglIxoaYUkhQ1pQAAqQF1H86vaNGiLluqU6dO/mkDBgxw9aQ0YqzqY2oQlt9//92qVq3qn0dlCvT7kCFD4pUppdfZ9c+uGEsM0H3vwrrvKSi1Y9cOy50nd6y1XOi+l7zd9/b9s88K5C/g9j/d90LTfU/BD41+rm6JdPENTfc97xgEfg+lxu57Oqflz5OfepXRkCkFAACABDt69Og5gQx149MFhmiglQIFCtjcuXP9QSk1yH/55Rfr2LFjjOtUnUw9ootMH+ke5xOZJv4j+iVk3oxpMl5U82ZI878LyvPRRbj2bXwKDCdkvQmZV6+d3tKnznktjaVLG/Mll/5W9JzW5x5xzJuQ9V7IvN7f8cU074X83esYZEyXMca/Ab4jgjNvXMcgRf0tJ8G8J9NTUyomBKUAAACQYDfffLOrIaVBVdR9TxlRKnLuDayiu9bqzqfsKQ3IoiBVnz59XPc+je4LAABAUAoAAAAJ9vbbb7sg06OPPupqiijY1KFDB3vuuef88zz11FOurkb79u1dnY/69eu7EYYjI+Of2QAAAFIvglIAAABIsGzZstmbb77pHrFRttTzzz/vHgAAANGdv/M4AAAAAAAAkMQISgEAAAAAACDoCEoBAAAAAAAg6AhKAQAAAAAAIOgISgEAAAAAACDoCEoBAAAAAAAg6AhKAQAAAAAAIOgISgEAAAAAACDoCEoBAAAAAAAg6AhKAQAAAAAAIOgISgEAAAAAACDoCEoBAAAAAAAg6AhKAQAAAAAAIOgISgEAAAAAACDoCEoBAAAAAAAg6AhKAQAAAAAAIOgISgEAAAAAACDoCEoBAAAAAAAg6NIF/yURDqb2bGrZs2cP9WYAAAAAAIAUikwpAAAAAAAABB1BKQAAAAAAAAQdQSkAAAAAAAAEHUEpAAAAAAAABB1BKQAAAAAAAAQdQSkAAAAAAAAEHUEpAAAAAAAABB1BKQAAAAAAAAQdQSkAAAAAAAAEHUEpAAAAAAAABB1BKQAAAAAAAAQdQSkAAAAAAAAEHUEpAAAAAAAABB1BKQAAAAAAAARduuC/JMJBi0GzLF1k5qC93qw+zYL2WgAAAAAAyKFDh6xgwYJ255132siRI/07Zd68eXbDDTdY2bJl3e9nz56NdYc1atTINm3aZDly5PBPGzRokDVt2jRkO1nb361bN1u6dGmCnksoglIAAAAAAACJMHHiRKtRo4ZNmTLFhgwZYlmzZvU/p4CUF7g5ePBglKBTdG+88YY1b9487I4B3fcAAAAAAAASQdlRPXv2tAYNGrgAVVIrUaKEPffcc1a3bl0rWbKkDRgwwP+cfi5fvrxVrVrVPZRtJYsXL7bGjRtbzZo1rVq1ajZ58mQ3fePGjZYzZ07r06ePVa9e3cqUKWM//fSTde/e3S1fsWJFW7FihX/9p0+ftjZt2rjpCrzFlhk1a9Ysq1+/vpvniiuusO+++y7e749MKQAAAAAAgARauXKlbdmyxXWzUwDn5Zdftnbt2vmfX7dunQv+pE2b1u66664419W9e3fr16+f//fPPvvMLr30Uvfz/v37bcGCBfbPP/+4aQ888IBlzpzZBg8ebDt27LBMmTLZ0aNHLU2aNG7e9u3b21dffeW6FWoZbUO9evXcug4cOOCCRy+88IILqGnbp0+f7jK1Xn31Vevfv78/iPXnn3+67K+PPvrIJk2a5N7DqlWromz3+vXr3XYrMJU9e3Zbu3atXXXVVS4AljFjxvPuQ4JSAAAAAAAACaSgjjKJFHS68cYbrUOHDi5oo+wlBYK2bt3quuzp3+uvvz7Odb0RR/e9e+65x/2bJ08eK1WqlG3YsMFlTinT6d5777XrrrvOmjVrZkWKFLFvv/3WBYpUzyrQ6tWr3bKRkZH+11EmlbobXn311e53ZTmNHTs2SpbWNddc436+4447XLBLQbhAM2fOdIEoZYp5FBzbvHmz277zISgFAAAAAACQAKdOnbKPP/7Y0qdPb+PGjXPTlK2kQJUymJQ15FGwqFWrVi7zKDEiIyP9PysApqws/btw4UL7+eefXeHxOnXq2Pjx483n81mFChXc9OiiZy9pHTGtOzYRERHuEUivd+211/r3QUJRUwoAAAAAAED2bzGbN8hsSnuz8ff8969+1/QA06ZNc5lH27Ztc8EePRQkUqBKASt1q/NG3NMIferelpQOHTpku3btcl3lVCNKNZ1+//13101PmVRz5szxz6taUCdPnkzwa+g9efWhPv30U8ufP78LsAVS9z+91h9//OGftmjRoni/BplSAAAAAAAgvG380eznoWZrZppF/H/+ju+MWUTa/36eN9DssuvN6j1mVuJKlxHVunXrKKtQt73ChQu7Gk3bt2+3YcOGWbp06Vz20S233GK//PJLvGtK9ejR45z1B1JtqNtuu82OHDnispfUVa5t27auu+CXX35pTz75pD3xxBMuQFasWDH7/PPPE7xLlHE1ZswY69Kli2XIkMFlYkXPlCpdurTLklLXRWWKKfil4urxzZyK8CnXCkgi3jCXjXtPsnSRmYO2X2f1aRa01wIAhM/5TA2+wPR7cBxSE93B3717t+XLl8/V/wD7P9zwNxB6KeIYKCTy89tms/v8F4BSICo23vPXDTCr21n92eL9MrQtYsbZBwAAAAAAhKcFQ/8LSElcAanA57959r/lcMEISgEAAAAAgPDssqcAU2JouY0/JfUWhR2CUgAAAAAAIPyohpRXMyqhtBzZUheMoBQAAAAAAAgvGk1PRc3P12UvNlpu9ddmB7Ym9ZaFFYJSAAAAAAAgvCwd979R9hJLy/8+Nqm2KCwRlAIAAAAAAOFl37okWs/6pFlPmCIoBQAAAAAAwsuJw4nvuufR8icOJdUWhSWCUgAAAAAAILxkzJr4IuceLZ8xW1JtUVgiKAUAAAAAAMLLJZcm0XpKJc16whRBKQAAAAAAEF6q3mPmO3th69Dy1Von1RaFJYJSAAAAAAAgvOQsanbZ9Ynvwqflyt5glqNIUm9ZWCEoBQAAAAAAwk+9xxJf7FxZUnU7J/UWhR2CUgAAAAAAIPyUuNLsugGJW/a6F/5bHheEoBQAAAAAAAhPynbyAlPn68rnPa/5yZJKEumSZjUAAAAAAAAXmYiI/7rxFaputmCo2eqvzSL+P39HXfu8QJS6613W9L9gFBlSSYagFAAAAAAACG8KNOlxYKvZ72PN9q03O3HILGM2s0tK/TfKHkXNU0f3vX79+lnVqlXtYjZv3jyLiIiw/fv3h3pTcB7btm2ze++913Lnzm2ZMmWySpUq2ZIlS2Kdf8eOHXbPPffYZZddZmnSpLFu3bqxjwEAAAAgHCjw1KinWcv3ze4e99+/+p2AVMoJSi1YsMDSpk1rzZo1i/F5BWuiPyZMmHBBG7px48Yo68uQIYOVLl3aBgwYYD6fz4KtXr16LniRI0eOZHuN+++/P8Z96T1KlCiRbK+dWvz777925ZVXWvr06e3rr7+2lStX2muvvWa5cuWKdZkTJ05Y3rx57dlnn7UqVaoEdXsBAAAAAAgXiQpKjRw50h577DH7/vvvbfv27THOM3r0aBe08R7Nmze3pDBnzhy3vr///tv69+9vL774oo0aNcqCTUGxAgUKuOBQchkyZEiUfRh9vy5evDjK/CdPnky2bblYDRo0yIoWLer22xVXXGElS5a06667zi699NJYl1GwT/u+TZs2sQYdFTDUZ/qll16y/PnzW86cOe3555+306dPW48ePeySSy6xIkWKuNcNPD6dO3e2ggULWmRkpBUvXtwGDhyYLO8bAAAAAIBUF5Q6fPiwTZw40Tp27OgypcaMGRPjfLpIV9DGe+giPLr333/fBQwyZ85sd9xxhx04cOC8r68uWFqfLuhbt27tsmB+++03//MK1Fx77bWWJ08eF1Bo2LBhlOflr7/+svr167ttuvzyy12gS8Glzz//3D/Pzz//7LoYap6aNWu65zTP0qVLY+y+p/2g9zxr1iwrX768Zc2a1a6//np/MEkUsOjSpYubT++jZ8+e1rZt21gDdtr+wH0Yfb/WqlXLXnjhBRc8yZ49u7Vv397N8+OPP9pVV13luqpp/+o1jxw5EiUT6Mknn7TChQtblixZrHbt2u79eDZt2mQ333yzyybS8xUqVLCvvvrKLkbTpk1zx+/222+3fPnyWbVq1WzEiBFJsu5vv/3WBWUVnH399detb9++dtNNN7n99ssvv9gjjzxiHTp0sK1bt7r533rrLbc9kyZNstWrV9vYsWPJdgMAAAAAhK0EB6V0QV2uXDkrW7asq9OjLKWYus916tTJBYaUnRLTPGvXrnXrmj59us2cOdN+//13e/TRRxO0LaoL9Ouvv7qgiufQoUMu0KPAzMKFC61MmTJ24403uuly5swZFwRSIEyBg+HDh9szzzwTZb0HDx50QRnVHlJAS4EfBZDO5+jRozZ48GD7+OOPXaBi8+bNLvgTmLWjQISyZ3766Sf3OoGBsMTQ66mLmfZfnz59bN26dS4Y1qpVK/vjjz9cAFH7Qhk6Hv2sLpjqUql5FLDRMso+846dAld6D8uXL3fbrSDbxWj9+vU2bNgw9zlQwFDBVAXpPvzwwwtet7KhFGjS38KDDz7o/tVnoHfv3u71evXq5TLqtP9FnwdNV0BUQVX9e/fddyfBuwQAAAAAIAxG31PXPQWjRIEMZTfNnz/fGjVq5J9H3ZgaN27sAj/ffPONCzYpw0rBAM/x48fto48+ctk68vbbb7vMK9X78bKCYqvlpOLT6gp16tQplx2kTCGPXjeQgk7KLtI2Kotl9uzZLnCjzCDvddQFUNlVnnHjxrksKGXUeNlUKpb98MMPx7lvtD3vvfeev2uYgj/aFx69RwUqWrRo4X4fOnToBWcg6f0+8cQT/t8feughl0HmFedWEESBE2WMKTize/duFxRTgKRQoUJuHgXOFBjUdHVH03MKaikoJ6VKlYr19RW80sOjQFtKcvbsWZcppfclypRasWKFO04KXl4IZZDps+hRN76KFSv6f1fdNWXEaZ97Xf70OVPwSn87+jyqKyEAAAAAAOEoQUEpdTlatGiRTZ069b+F06WzO++80wWqAoNSytjxKAigrmOvvvpqlKBUsWLF/AEpqVu3rgsg6DXiCkop80fd4xQAUnBBta3UXerll192z+/atcsVqFbQScEAZUYpe0WBFu89qEtb4Gsomyv6+6xcuXKULofR54mJgnCBtYpUO8gLSCh4p20LXI+CFjVq1HDvO7EUcAm0bNkyl/2kjCyPstT0Ghs2bHCZQ9onGlkukAJLCqCIjpMyihRQbNKkiQtQaX/ERDWRVNsrpdIxUFAxkD4/n3322QWvW8XTAymQGdM07/hWr17dHQMVXFeXUXVZ1f799NNPL3hbAAAAAABI1UEpBZ9UF8nLsPECHhkzZnRZP7EVhVb3OnWBU+BD814IBZQ06p4XXFDWk4Jg/fr1c0EkZb/s3bvXFapWFym9ngJewSgCHlNAIrlHBlTNp0DKSFMdo8AAYGAgUAErBcPU7VH/BvK66CnbqmnTpvbll1+6wJQCT8pgUwAwOmV+Pf7441EypXSMUgrVHFOQMdCaNWvcZyMUVPtLgVw9brvtNpcxtW/fPtcVEAAAAACAcBLvoJSCUepup+BE9C5HqtE0fvx4V9g5JioOrmymwICUMpdUJNoLcKn+k7pCqWtTQiiwom1T0ElBKdVqevfdd10dKdmyZYv9888//vm1fk1T1pK6W0n0Uew0zyeffBIliBZ9noRSwE6vp/U0aNDATVPGkmpWqaB6UlE2zsqVK/2Bu+iUuabXVQaXiqHHRoElHU89FHhSV8aYglLaPxcaaExO3bt3d10+1X1PmUnK9FOXTj08en/qnqnPt8craK8g3549e9zvqg8VPesqIVQMXZlbOgb6rE+ePNll7Kl7KQAAAAAA4SbeQakZM2bYv//+a+3atTsnI0rdu5RFpQCGCpcr4FOnTh0XJFINJwUEAgt+i5fVpELdyq5RZo+CBnF13RNlQe3cudMFolSEWxlRV199tctA8WooqdC4urVpvT169HCj0HlU00dd7PTar7zyiiuAru5+XmaT3HPPPa74uepVPf300y6Apu0MnCcxFNRR1pECRioWrxpT2qcXss7oVJBd+171rJTxpEwqBal0HJTNpm57qjmlOlwKMCpAoqDL3LlzXRc91fVSPaobbrjBzavt++6771xW2sVIIxSqu6kCT6rvVbJkSXvzzTfdPvBohESve6dH+8WjrDLVGVN21caNGxO9LdmyZXOfORWUVzBV26aaYoF1qQAAAAAACBfxDkop6KT6NzF10VNQShfb6hqmLmzvvPOOy1BR1zUFYJQhEr1IuKa3bNnSZTSp+5KKPivD6Xy0DaKLemWdaHkVKg/cTgWTlDGkbJ/oATEtpxHvFLBRUEBFvFXvSqPteTWkFOBScE11lZTFpILfzz33nAtWBdaZSkzASAE1BYS0HdpOdZOL3o3uQiiwpKLuCqopE0rHQEE4dRfzqKD5gAEDXIF0ZQhplEQFsnQMRJlUGoFv69atbl+oi9kbb7xhFyu9L++9xWTMmDHnTDtft8uYllEds+gCg1j6GzhfsXwAAAAAAMJFhC+5ix5dBNTlr379+rZ27doohcoDqXD4Aw884AqWB2ZeXQgVwFYGkjLEVHMrNVB2mgKXjXtPsnSRmYP2urP6NAvaawEAUj/vfKbzvpeNDY5DaqO2qEo65MuXj8xt9n9Y4m8g9MLpGNC2SIJC56mFunOpqLe6+ikQ1bVrV1cQOzAgpfpCyqLSCIEa0U5ZTgoeXUhAatOmTa5weMOGDV29KnWn02hsysACAAAAAAAIJ2EZlFIdKQWZVEdIXdfUJVD1lQKpm5267OlfdRO8/fbbo3QTTAxFftXtS90JlaBWsWJFmzNnzkVbrwkAAAAAACCxUnd+XCxU02nNmjV2/PhxVzdJgaLcuXNHmeepp55y9YA0j7KZVFMpc+YL646mGlfqKqiuAErd+/nnn/0j8QEAAFxsVJvy3nvvde0oZZOrDueSJUv8z+smnG7y6QafnteNQA34AQAAELZBKQAAAFwYjdCr8gca5Obrr792o/0q8zxXrlz+eTQQzltvvWXvvfee/fLLL25UYA3yopt+AAAAYdl9DwAAABdm0KBBLgtco/p6SpYsGSVL6s0337Rnn33Wbr31Vn/Nzvz587uRkO+66y4OAQAAYY5MKQAAACTYtGnTrGbNmq7upkZNqlatmo0YMcL/vMofqDanuux5NKJh7dq1bcGCBexxAABAphQAAAASbv369TZs2DB7/PHHrXfv3rZ48WLr0qWLZciQwdq2besCUqLMqED63XsuOo1OrIdHNTi9IcP1QNLSPlVGG/s2NNj/occxCL1wOgbh8B4Tg+57AAAASFTjWplSL730kvtdmVIrVqxw9aMUlEqMgQMHWv/+/c+ZvmfPHupQJdMx1AA8uiDUKNEILvZ/6HEMQi+cjsGhQ4dCvQkpEkEpAAAAJJhG1Lv88sujTCtfvrx99tln7ucCBQq4f3ft2uXm9ej3qlWrxrjOXr16ucyrwEwp1a3KmzevZc+enaOUDBeDERERbv+m9ovBlIj9H3ocg9ALp2MQGRkZ6k1IkQhKAQAAIME08t7q1aujTFuzZo0VL17cX/Rcgam5c+f6g1AKMmkUvo4dO8a4zowZM7pHdLpQSe0XK6Gii0H2L/s/nPE3EHrhcgxS+/tLLIJSAAAASLDu3btbvXr1XPe9O+64wxYtWmTDhw93D+8io1u3bjZgwAArU6aMC1L16dPHChUqZM2bN2ePAwAAglIAAABIuFq1atnUqVNdl7vnn3/eBZ3efPNNa926tX+ep556yo4cOWLt27e3/fv3W/369W3mzJl0YQAAAA6ZUgAAAEiUm266yT1io2wpBaz0AAAAiI5OjQAAAAAAAAg6glIAAAAAAAAIOoJSAAAAAAAACDqCUgAAAAAAAAg6glIAAAAAAAAIOoJSAAAAAAAACDqCUgAAAAAAAAg6glIAAAAAAAAIOoJSAAAAAAAACDqCUgAAAAAAAAg6glIAAAAAAAAIOoJSAAAAAAAACLp0wX9JhIOpPZta9uzZQ70ZAAAAQLI5dOiQFSxY0O68804bOXKkf/q8efPshhtusLJly/qnLViwwDJlymRjxoyxzz//3KZMmRKv1/D5fFaqVCn3mDt3bqzzDR061JYsWeLWH5d+/frZ/v377c0337TktHHjRps5c6Y98sgjyfo6AC5uBKUAAADCwNmzZ23+/Pn2ww8/2KZNm+zo0aOWN29eq1atmjVp0sSKFi0a6k0ELjoTJ060GjVquADTkCFDLGvWrP7nFJBaunTpBb+GAlE5c+a0P/74wzZs2GAlS5a0i4GCUu+99x5BKQBxovseAABAKnbs2DEbMGCACzrdeOON9vXXX7ssibRp09ratWutb9++7iJXzy1cuDDUmwtcVJQd1bNnT2vQoIELUMXXwYMH7dZbb3XLNWrUyAVw4nqNhx9+2O655x4bNWpUlCwtZWgp+FW/fn1bvny5/zn9rGnVq1e3yy+/3H0HBNqyZYs1btzYypUrZzfffLPt3bvXTT98+LA9+OCDVrFiRffo37+/fxl9XyiAXblyZatatarL9vK+Y7Qdep0qVarYdddd56YrQ2r16tVu3ltuuSXe+wZAeCFTCgAAIBW77LLLrG7dujZixAi79tprLX369OfMo8ypcePG2V133WXPPPOMuwAGELeVK1e64E7Tpk3t9OnT9vLLL1u7du38z69bt84FhRQAfuCBB+zRRx/1P/fTTz/Zb7/9Zrlz57YPP/zQ2rdvb9988805r7Fv3z7XBW7YsGG2efNma9asmQsUpUmTxp5//nnLmDGj/fXXXy7IVadOHatdu7ZbrkSJEi7DSs8raFSvXj0XUNI8ooxJZV4VKFDAbVevXr1s+PDh9sILL9iJEyfcc1pOgS0FrhR0at26tQtYdejQwf7++2+3LmVa6n0o0K394W2zKEuqW7duSZItBiD1IlMKAAAgFdOF7qRJk1wmVEwBKSlevLi7KNWFprInAJyfMpjatGnjgk76+1LXulWrVrnnFIzaunWrC9hMnTrVBWj0d+hRkKh8+fLuZwWBVYPqzJkz57zG2LFjXW0qdd9ThlL+/Plt1qxZ7jkFnRQEi4iIsBw5crhMKo8CSg899JBVqlTJBY8UeA4MDim4pYCUKCA2Z84c97P+1fYo6JUlSxb3/mbPnu2ysvRevKBbmTJlXMBKwS1lR+l9K7ilbLHYvmcAICYEpQAAAFIx78I3PnQxeemllybr9gCpwalTp+zjjz92WU7KSipdurSr0+YVO9eAPwoUSZEiRezuu+92AZyE0vq+/fZb9xp6KPAVWFA9kIJTnt69e1uePHns999/t2XLlrkugsePH4/1dQKXjc/0wOdUgF1ZUtdff73LAFO3v3///TcB7xJAOCMoBQAAEGbU1eidd96x22+/3Vq2bGmvvfZanBesQLjYcXiHDVs2zHr90Mu6fNvF/avfNT3QtGnTXDBm27Ztrh6UHqrJpkCVAlY7duxwgwuIsoxmzJjhuroFjsSnbneiINPVV1/tMq4C/frrr7Znzx7bvn27/zXUJVCZUpqu7nijR492o/Op+9748eP9yyoopGBYunTpXF0nZTsF+uqrr2zXrl3u5w8++MCtS/SvtkfrPHLkiHs/qhGVLVs2l/2l1/PqS/3444+uJpYywhSgUt2owYMHu2XVrVGBuQMHDiTxEQKQ2lBTCgAAIMx06dLF1qxZ4wJSuoD+6KOP3FDygRe1QDhZvHOxffTnRzZ/63wXYNF/Z3xnLG1EWvOZz4YtHWYNizS0thXaWs0CNV3gRjWWomclFi5c2KZPn+4CSaoDpaCQgsAKAKuuVGD3vaefftoFjNQlT3+D0ek1VOdNXek86san2nAKFvXp08d10VPNJ42kqe50qgclzz77rN13330uk0vZj9G75V511VWuu5+CauqKN2bMGDdd69T3g7r9ibb7jjvu8HclVPHyoUOHun2kYFaxYsXc4Anq/qtglN6rXlddDfVzhQoVXOaUAngK5AFAdBE+fXsASUR3aZSqrLsiujsCAMDFKLWdz1TTpkWLFv7f1dVIF8NeZoYyNlR3RsWKU5LUdhxSGmXy7N692/Llyxcl8BFOdCn04Z8f2mu/vuYCUApExcZ7/smaT1qby9vE2bUtPtj/occxCL1wOgac02KWuo86AAAA3DDyzZs3d9kbom44ynjQqF7K6njqqaesVq1a7CmEnY9WfuQCUhJXQCrw+cFLBrvlAAAXjqAUAABAKqfAkwotq9jx22+/7YZ+V+bRM88847rrFC1a1MaNGxfqzQSC3mVPAabE0HJLdi5J8m0CgHBDUAoAACAM3HnnnbZo0SJbvny5NW3a1O69915XSFnDxKvouWrSAOFENaTUJS8xtBzZUgBw4QhKAQAAhAkVSVaW1Kuvvmpt2rSxHj16MOoewpJG01NR8/N12YuNlpu3ZZ7tPLIzybcNAMIJQSkAAIBUbvPmzW4ELY2opRHDNNqWsqQyZ85sVapUcaNnAeHk83WfX3Chci0/de3UJNsmAAhHBKUAAABSOWVFaVQjZUhphKMOHTpYhgwZrH///vb555/bwIED/cO+A+Fg88HNFmEXGJSyCNtycEuSbRMAhKN0od4ApE4tBs2ydJGZQ70ZgM3q04y9ACDsLVmyxJYtW2aXXnqpqydVsmRJ/z4pX768ff/9965bHxAujpw6kuiuex4tf/jU4STbJgAIRwSlAAAAUrkaNWrYc889Z23btrU5c+a4bnzRtW/fPiTbBoRClvRZXLHyCwlMafms6bMm6XYBQLih+x4AAEAq99FHH9mJEyese/futm3bNnv//fdDvUlASBXLXsx85rugdWj5otmLJtk2AUA4IlMKAAAglStevLh9+umnod4MIMVofmlzG7Z02AWtw+fzWYvSLZJsmwAgHJEpBQAAkIodOXIkWecHLkYFsxa0hkUaui54iaHlGhVtZAWyFEjybQOAcEJQCgAAIBUrXbq0vfzyy7Zjx444Mz5mz55tN9xwg7311ltB3T4gVNpWaJvomlJnfWetzeVtknybACDc0H0PAAAgFZs3b5717t3b+vXrZ1WqVLGaNWtaoUKFLDIy0v79919buXKlLViwwNKlS2e9evWyDh06hHqTgaCoWaCmPVnzSRu8ZHCCl32i5hNueQDAhSEoBQAAkIqVLVvWPvvsM9u8ebNNnjzZfvjhB/v555/t2LFjlidPHqtWrZqNGDHCZUmlTZu4rkzAxcrLdlJg6nyj8XnPK5BFlhQAJA2CUgAAAGGgWLFi9sQTT7gHgP9ERES4bnwVclewj1Z+ZPO2zHPT9J8CUApEaZQ9dXFtUKSBC0aRIQUASYegFAAAAICwpkCTHjuP7LSpa6faloNb7PCpw5Y1fVYrmr2oG2WPouYAkPQISgEAAACAmQs8dazSkX0BAEHC6HsAAAAAAAAIOoJSAAAAAAAACDqCUgAAAAAAAAg6glIAAABhokSJEvb888/b5s2bQ70pAAAABKUAAADCRbdu3WzKlClWqlQpu/baa23ChAl24sSJUG8WAAAIU2RKAQAAhFFQaunSpbZo0SIrX768PfbYY1awYEHr3Lmz/fbbb6HePAAAEGYISgEAAISZ6tWr21tvvWXbt2+3vn372gcffGC1atWyqlWr2qhRo8zn84V6EwEAQBhIF+oNAAAAQHCdOnXKpk6daqNHj7bZs2dbnTp1rF27drZ161br3bu3zZkzx8aNG8dhAQAAyYqgFAAAQJhQFz0FosaPH29p0qSxNm3a2BtvvGHlypXzz9OiRQuXNQUAAJDcCEoBAACECQWbVOB82LBh1rx5c0ufPv0585QsWdLuuuuukGwfAAAILwSlAAAAwsT69eutePHicc6TJUsWl00FAACQ3Ch0DgAAECZ2795tv/zyyznTNW3JkiUh2SYAABC+CEoBAACEiU6dOtmWLVvOmb5t2zb3HAAAQDARlAIAAAgTK1eutOrVq58zvVq1au45AACAYArboFS/fv2satWqQXu9iIgI+/zzz1Ps9gHhRkV+K1eubNmzZ3ePunXr2tdff33OfD6fz2644YZ4/Q1rnpger776ajK+EwCIv4wZM9quXbvOmb5jxw5Ll45SowAAILgu2qDUggULLG3atNasWbMYn4/pwnDChAlJ9vpNmzZ1r7948WJLrQiMITUrUqSIvfzyy/brr7+6OiqNGze2W2+91f78888o87355pvu+yM+dFEX+Bg1apRbtlWrVsn0LgAgYa677jrr1auXHThwwD9t//791rt3bzcqHwAAQDBdtEGpkSNH2mOPPWbff/+9bd++PcZ5NHJM4AWihj5OCps3b7aff/7ZOnfu7C46AVx8br75ZrvxxhutTJkydtlll9mLL75oWbNmtYULF/rnWbp0qb322mvx/jsvUKBAlMcXX3xhV199tZUqVco9v3HjRhekmjRpkl111VWWKVMmNzz7mjVrXIC7Zs2abhuUmbVnzx7/eufNm2dXXHGFGxErZ86cduWVV9qmTZuSYa8ASO0GDx7sakppBD59P+lRsmRJ27lzp/u+AwAACKaLMih1+PBhmzhxonXs2NFlSo0ZMybG+XTxFniBGBkZec4877//vhUtWtQyZ85sd9xxR5Q7h7FRsOumm25yrz9+/Hg7duxYlOf//vtva9CggXu9yy+/3GbPnn3OOnr27OkuhPW6umDt06ePnTp1KkHbd/bsWXv++eddxofS8dXdb+bMmVGWX758ucsA0cVv7ty5rX379m7/ne9iV/u0f//+tmzZMn+mWWz7GbjYnTlzxmVSHjlyxHXjk6NHj9o999xj77zzjvv+SCh1j/nyyy+tXbt25zzXt29fe/bZZ+23335z3WX0Ok899ZQNGTLEfvjhB1u7dq0999xzbt7Tp0+7gHrDhg3tjz/+cFmi+juOb/YWAAQqXLiw+y555ZVXXBulRo0a7rtH7QW1NwAAAILpoiweoCyDcuXKWdmyZe3ee++1bt26uVT06BdpGkXmoYceckGfRx55xB544IEo8+jCT+ua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",
|
| 205 |
+
"text/plain": [
|
| 206 |
+
"<Figure size 1200x500 with 2 Axes>"
|
| 207 |
+
]
|
| 208 |
+
},
|
| 209 |
+
"metadata": {},
|
| 210 |
+
"output_type": "display_data"
|
| 211 |
+
}
|
| 212 |
+
],
|
| 213 |
+
"source": [
|
| 214 |
+
"# Accuracy vs inference time\n",
|
| 215 |
+
"fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n",
|
| 216 |
+
"\n",
|
| 217 |
+
"models = list(benchmark['models'].keys())\n",
|
| 218 |
+
"times = [benchmark['models'][m]['inference_time_mean']*1000 for m in models]\n",
|
| 219 |
+
"accs = [benchmark['models'][m]['accuracy']*100 for m in models]\n",
|
| 220 |
+
"\n",
|
| 221 |
+
"colors = ['green' if a >= 80 else 'orange' if a >= 50 else 'red' for a in accs]\n",
|
| 222 |
+
"axes[0].barh(models, times, color='steelblue')\n",
|
| 223 |
+
"axes[0].set_xlabel('Mean Inference Time (ms)')\n",
|
| 224 |
+
"axes[0].set_title('Inference Time by Model')\n",
|
| 225 |
+
"for i, (t, a) in enumerate(zip(times, accs)):\n",
|
| 226 |
+
" axes[0].text(t + 1, i, f'{t:.1f}ms', va='center')\n",
|
| 227 |
+
"\n",
|
| 228 |
+
"for m, t, a in zip(models, times, accs):\n",
|
| 229 |
+
" axes[1].scatter(t, a, s=150)\n",
|
| 230 |
+
" axes[1].annotate(m, (t, a), xytext=(5, 5), textcoords='offset points', fontsize=8)\n",
|
| 231 |
+
"axes[1].set_xlabel('Mean Inference Time (ms)')\n",
|
| 232 |
+
"axes[1].set_ylabel('Accuracy (%)')\n",
|
| 233 |
+
"axes[1].set_title('Accuracy vs Speed Trade-off')\n",
|
| 234 |
+
"axes[1].axhline(80, color='green', linestyle='--', alpha=0.5)\n",
|
| 235 |
+
"axes[1].grid(True, alpha=0.3)\n",
|
| 236 |
+
"\n",
|
| 237 |
+
"plt.tight_layout()\n",
|
| 238 |
+
"plt.show()"
|
| 239 |
+
]
|
| 240 |
+
},
|
| 241 |
+
{
|
| 242 |
+
"cell_type": "markdown",
|
| 243 |
+
"id": "b95b9a26",
|
| 244 |
+
"metadata": {},
|
| 245 |
+
"source": [
|
| 246 |
+
"### Summary\n",
|
| 247 |
+
"\n",
|
| 248 |
+
"| Model | Mean Std (ms) | Min | Max | Accuracy |\n",
|
| 249 |
+
"|-------|-----------------|-----|-----|----------|\n",
|
| 250 |
+
"| A4 Random Forest | 60.7 +- 3.0 | 58.1 | 69.0 | 89% |\n",
|
| 251 |
+
"| A5 Ensemble | 87.9 +- 19.7 | 67.9 | 138.7 | 67% |\n",
|
| 252 |
+
"| A5b Adaboost | 34.7 +- 6.9 | 30.5 | 48.4 | 52% |\n",
|
| 253 |
+
"| A5b Bagging Trees | 6.1 +- 1.8 | 3.8 | 9.8 | 0%* |\n",
|
| 254 |
+
"| **A6 SVM** | **9.1 +- 0.3** | **8.7** | **9.6** | **83%** |\n",
|
| 255 |
+
"\n",
|
| 256 |
+
"*A5b Bagging Trees: 0% due to class label mismatch in benchmark evaluation"
|
| 257 |
+
]
|
| 258 |
+
},
|
| 259 |
+
{
|
| 260 |
+
"cell_type": "markdown",
|
| 261 |
+
"id": "2f748c38",
|
| 262 |
+
"metadata": {},
|
| 263 |
+
"source": [
|
| 264 |
+
"## 3. Champion Selection\n",
|
| 265 |
+
"\n",
|
| 266 |
+
"### Selection Criteria\n",
|
| 267 |
+
"\n",
|
| 268 |
+
"| Criteria | Weight |\n",
|
| 269 |
+
"|-----------|--------|\n",
|
| 270 |
+
"| Accuracy | 50% |\n",
|
| 271 |
+
"| Inference Speed | 30% |\n",
|
| 272 |
+
"| Model Size | 10% |\n",
|
| 273 |
+
"| Consistency (low std) | 10% |"
|
| 274 |
+
]
|
| 275 |
+
},
|
| 276 |
+
{
|
| 277 |
+
"cell_type": "code",
|
| 278 |
+
"execution_count": 23,
|
| 279 |
+
"id": "f24df445",
|
| 280 |
+
"metadata": {},
|
| 281 |
+
"outputs": [
|
| 282 |
+
{
|
| 283 |
+
"name": "stdout",
|
| 284 |
+
"output_type": "stream",
|
| 285 |
+
"text": [
|
| 286 |
+
"Champion Ranking:\n",
|
| 287 |
+
" 1. A6 SVM: 0.884\n",
|
| 288 |
+
" 2. A4 Random Forest: 0.693\n",
|
| 289 |
+
" 3. A5b Adaboost: 0.619\n",
|
| 290 |
+
" 4. A5b Bagging Trees: 0.451\n",
|
| 291 |
+
" 5. A5 Ensemble: 0.384\n"
|
| 292 |
+
]
|
| 293 |
+
}
|
| 294 |
+
],
|
| 295 |
+
"source": [
|
| 296 |
+
"def score_model(data):\n",
|
| 297 |
+
" acc = data['accuracy']\n",
|
| 298 |
+
" speed = max(0, 1 - data['inference_time_mean'] / 0.1) # 100ms max\n",
|
| 299 |
+
" size = max(0, 1 - data['model_size_bytes'] / 30e6) # 30MB max\n",
|
| 300 |
+
" consistency = max(0, 1 - data['inference_time_std'] / 0.02)\n",
|
| 301 |
+
" return 0.5*acc + 0.3*speed + 0.1*size + 0.1*consistency\n",
|
| 302 |
+
"\n",
|
| 303 |
+
"scores = [(m, score_model(d)) for m, d in benchmark['models'].items()]\n",
|
| 304 |
+
"scores.sort(key=lambda x: x[1], reverse=True)\n",
|
| 305 |
+
"\n",
|
| 306 |
+
"print(\"Champion Ranking:\")\n",
|
| 307 |
+
"for i, (m, s) in enumerate(scores, 1):\n",
|
| 308 |
+
" print(f\" {i}. {m}: {s:.3f}\")"
|
| 309 |
+
]
|
| 310 |
+
},
|
| 311 |
+
{
|
| 312 |
+
"cell_type": "markdown",
|
| 313 |
+
"id": "0d55c536",
|
| 314 |
+
"metadata": {},
|
| 315 |
+
"source": [
|
| 316 |
+
"### Recommendation\n",
|
| 317 |
+
"\n",
|
| 318 |
+
"| Use Case | Model | Accuracy | Latency |\n",
|
| 319 |
+
"|----------|-------|----------|--------|\n",
|
| 320 |
+
"| Accuracy-critical | A4 Random Forest | 89% | 61ms |\n",
|
| 321 |
+
"| Low-latency | A6 SVM | 83% | 9ms |"
|
| 322 |
+
]
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"cell_type": "markdown",
|
| 326 |
+
"id": "753d8ce2",
|
| 327 |
+
"metadata": {},
|
| 328 |
+
"source": [
|
| 329 |
+
"## 5. Conclusion\n",
|
| 330 |
+
"\n",
|
| 331 |
+
"- SVM achieved **83% accuracy** with **9.1ms** inference time\n",
|
| 332 |
+
"- A4 Random Forest still remains accuracy champion (**89%**) but at **61ms**\n",
|
| 333 |
+
"- A6 SVM is **6.7x faster** with only 6% accuracy drop\n",
|
| 334 |
+
"- For low latency production: deploy A6 SVM"
|
| 335 |
+
]
|
| 336 |
+
}
|
| 337 |
+
],
|
| 338 |
+
"metadata": {
|
| 339 |
+
"kernelspec": {
|
| 340 |
+
"display_name": "Python 3",
|
| 341 |
+
"language": "python",
|
| 342 |
+
"name": "python3"
|
| 343 |
+
},
|
| 344 |
+
"language_info": {
|
| 345 |
+
"codemirror_mode": {
|
| 346 |
+
"name": "ipython",
|
| 347 |
+
"version": 3
|
| 348 |
+
},
|
| 349 |
+
"file_extension": ".py",
|
| 350 |
+
"mimetype": "text/x-python",
|
| 351 |
+
"name": "python",
|
| 352 |
+
"nbconvert_exporter": "python",
|
| 353 |
+
"pygments_lexer": "ipython3",
|
| 354 |
+
"version": "3.14.0"
|
| 355 |
+
}
|
| 356 |
+
},
|
| 357 |
+
"nbformat": 4,
|
| 358 |
+
"nbformat_minor": 5
|
| 359 |
+
}
|
A6/benchmark_results/visualizations/a6_report_comparison.png
ADDED
|
Git LFS Details
|