├── Code-Statistics.zip ├── Code.zip ├── DE ├── NLP └── ai_news_project │ ├── NLP.ipynb │ └── readme.md ├── README.md ├── Skip_gram.ipynb ├── Verizon.ipynb ├── gpt_labeled_data.csv ├── ml_final_project.ipynb ├── patent_classification_transformer_wandb.ipynb └── test.ipynb /Code-Statistics.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/easonwangzk/UChicago/660c0f58516554220d042b01bdd18296ce167d41/Code-Statistics.zip -------------------------------------------------------------------------------- /Code.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/easonwangzk/UChicago/660c0f58516554220d042b01bdd18296ce167d41/Code.zip -------------------------------------------------------------------------------- /DE: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /NLP/ai_news_project/readme.md: -------------------------------------------------------------------------------- 1 | # 🧭 项目执行建议:AI如何影响产业与就业的文本挖掘分析 2 | 3 | --- 4 | 5 | ## 一、🌐 项目总览与核心目标 6 | 7 | 本项目旨在通过对 **20万篇与AI、数据科学、机器学习相关的新闻文章**的分析: 8 | 9 | 1. 识别AI对不同行业/岗位的潜在影响 10 | 2. 提取成功/失败的AI应用案例 11 | 3. 分析AI技术趋势与情感演变 12 | 4. 给出面向企业/组织的自动化落地建议 13 | 14 | --- 15 | 16 | ## 二、📅 阶段化执行计划 17 | 18 | | 阶段 | 目标 | 工具与方法 | 输出物 | 19 | |------|------|------------|--------| 20 | | 1️⃣ 数据理解与清洗 | 理解数据结构、剔除噪音内容 | pandas, 正则, NLP预处理 | 数据概况表、清洗效果图 | 21 | | 2️⃣ 主题识别与行业映射 | 确定主要AI话题及其对应行业 | BERTopic + 零样本分类 | 行业关键词热图、主题分布图 | 22 | | 3️⃣ 情感与影响建模 | 判断AI应用效果(积极/消极) | 自监督标注 + RoBERTa + wandb调参 | 情感趋势图、行业影响矩阵 | 23 | | 4️⃣ 技术演进分析 | 分析前沿AI技术出现与传播 | 关键词趋势分析 + 时间热图 | 技术演化时间轴图 | 24 | | 5️⃣ 命名实体与组织识别 | 提取参与机构与投资动向 | NER + Gradio展示 | 投资机构图谱、成功公司列表 | 25 | | 6️⃣ 成果集成与展示 | 汇报可交互、可视化、可落地的结论 | PPT + Gradio dashboard | PowerPoint报告、Gradio工具页面 | 26 | 27 | --- 28 | 29 | ## 三、🔧 建模技巧详解(按模块细化) 30 | 31 | ### 1️⃣ 主题建模与行业映射 32 | 33 | - **方法组合**: 34 | - 使用 **BERTopic** 自动生成具备上下文信息的主题。 35 | - 结合 **Zero-shot Classification** 模型(如 `facebook/bart-large-mnli`)对新闻文本打上行业标签(如金融、医疗、教育等)。 36 | 37 | - **注意事项**: 38 | - 可使用“标题+前500词”拼接提高主题提取准确性。 39 | - 用 Top-N关键词覆盖率 显示主题对语料代表性。 40 | 41 | - **可视化**: 42 | - 热力图展示“主题 ↔ 行业”覆盖关系 43 | - word cloud展示每个主题Top词汇 44 | 45 | --- 46 | 47 | ### 2️⃣ 情感分析与AI成效评估 48 | 49 | - **标签构建**: 50 | - 选取300~500篇样本文本,使用GPT或人工辅助标注“正向/负向/中性” 51 | - 标签策略:正向=成功部署AI,负向=引发失业/争议,中性=纯技术新闻 52 | 53 | - **模型建议**: 54 | - 微调一个轻量级的 `RoBERTa-base` 模型,配合wandb记录训练过程。 55 | - 加入类别权重平衡处理,防止中性标签主导模型判断。 56 | 57 | - **优化技巧**: 58 | - 使用 Text Augmentation(如EDA、Back Translation)增强样本多样性。 59 | - 用 wandb 进行超参数调优与模型版本对比。 60 | 61 | - **输出结果**: 62 | - 行业情感分布图(positive/neutral/negative) 63 | - 情感变化趋势线图(按季度或年份) 64 | - 成功/失败新闻摘要列表及情绪原因提取 65 | 66 | --- 67 | 68 | ### 3️⃣ 技术演进与应用趋势追踪 69 | 70 | - **关键词建议**: 71 | - “ChatGPT”, “LLM”, “Stable Diffusion”, “AutoML”, “Midjourney”, “Generative AI”, “Conversational AI”, “LangChain” 等 72 | 73 | - **方法流程**: 74 | - 构建关键词时间序列,统计每月出现频次 75 | - 分析其与正向/负向情感比例的关系 76 | 77 | - **可视化**: 78 | - 技术热度趋势时间线图 79 | - 技术 ↔ 行业 的交叉关联图谱 80 | 81 | --- 82 | 83 | ### 4️⃣ 命名实体识别与组织行为分析 84 | 85 | - **目标**:识别文本中的组织(公司/高校/政府)、人物、地理位置等 86 | 87 | - **技术路径**: 88 | - 使用 `SpaCy` 或 `transformers` 的 NER 模块提取实体 89 | - 按公司聚合分析,识别正面曝光最多的机构 90 | 91 | - **分析建议**: 92 | - 建立“机构 → 技术 → 行业”的三元组关系表 93 | - 提取“AI转型成功”公司的应用案例摘要 94 | 95 | - **Gradio可视化**: 96 | - 构建交互式公司-技术-情感图谱 97 | - 提供关键词输入 → 返回行业情感与技术影响的界面 98 | 99 | --- 100 | 101 | ## 四、📈 wandb 与 Gradio 的展示应用建议 102 | 103 | ### 🟣 wandb(可视化调参、实验追踪) 104 | 105 | - 用于: 106 | - 记录情感分析模型的训练损失、精度、F1指标 107 | - 多模型对比实验展示(不同模型/不同超参组合) 108 | - 嵌入式PPT图表生成(如confusion matrix、ROC曲线等) 109 | 110 | - 展示示例: 111 | - `wandb.init(project="ai_news_impact")` 112 | - 每轮epoch记录 loss、accuracy、learning rate 113 | 114 | --- 115 | 116 | ### 🟢 Gradio(可交互式NLP分析平台) 117 | 118 | - 用于构建交互式App展示: 119 | - 用户输入一段新闻摘要,返回: 120 | - 行业识别(Top 3) 121 | - 主题归属 122 | - 情感评分及解释 123 | - 是否包含新兴技术关键词 124 | 125 | - 模块建议: 126 | - “新闻行业预测器”:输入文本 → 返回行业标签 + 置信度 127 | - “AI情绪雷达”:展示行业情绪分布图 128 | - “技术趋势查询器”:输入关键词 → 返回相关行业/文章标题摘要 129 | 130 | --- 131 | 132 | ## 五、📢 商业结论与建议输出方向 133 | 134 | | 类型 | 建议示例 | 135 | |------|----------| 136 | | 行业洞察 | 法律、教育、客服、办公自动化受AI影响最深,建议部署辅助系统 | 137 | | 成功经验 | 谷歌、微软、OpenAI等机构推动AI落地,值得借鉴技术栈与组织模式 | 138 | | 失败警示 | 建筑、物流等行业由于操作难度高,AI适应性差,需警惕误用风险 | 139 | | 投资建议 | 政府可引导AI资源投入高替代性行业,减少结构性失业 | 140 | | 企业策略 | 实施AI前应加强数据治理、业务协同、员工培训与流程再造 | 141 | 142 | --- 143 | 144 | ## 六、📘 总结:成功交付的关键标准 145 | 146 | | 要素 | 是否具备 | 147 | |------|----------| 148 | | 数据处理合理 | ✅ 清洗+探索分析到位 | 149 | | NLP技术应用得当 | ✅ 涵盖主题建模、NER、情感建模 | 150 | | 可视化展示充分 | ✅ wandb实验记录 + Gradio交互工具 | 151 | | 商业价值明确 | ✅ 可落地建议 + 案例支持 | 152 | | 表达清晰规范 | ✅ PPT图文并茂 + 技术与业务兼顾 | 153 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UChicago 2 | Chicago Project 3 | -------------------------------------------------------------------------------- /Skip_gram.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [], 7 | "machine_shape": "hm", 8 | "gpuType": "T4", 9 | "authorship_tag": "ABX9TyMNQ04t0z15woNIXBmdOC4W", 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | }, 16 | "language_info": { 17 | "name": "python" 18 | }, 19 | "accelerator": "GPU" 20 | }, 21 | "cells": [ 22 | { 23 | "cell_type": "markdown", 24 | "metadata": { 25 | "id": "view-in-github", 26 | "colab_type": "text" 27 | }, 28 | "source": [ 29 | "\"Open" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "source": [ 35 | "import os\n", 36 | "import re\n", 37 | "import json\n", 38 | "import torch\n", 39 | "import random\n", 40 | "import requests\n", 41 | "import numpy as np\n", 42 | "from torch import nn, optim\n", 43 | "from torch.utils.data import Dataset, DataLoader\n", 44 | "from collections import Counter, OrderedDict\n", 45 | "from itertools import chain\n", 46 | "from typing import List" 47 | ], 48 | "metadata": { 49 | "id": "0gTrfO1Grc0n" 50 | }, 51 | "execution_count": 1, 52 | "outputs": [] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "source": [ 57 | "## Device setup" 58 | ], 59 | "metadata": { 60 | "id": "Khj_Sy7Mr5Xw" 61 | } 62 | }, 63 | { 64 | "cell_type": "code", 65 | "source": [ 66 | "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", 67 | "print(f\"Using {device} as device.\")" 68 | ], 69 | "metadata": { 70 | "colab": { 71 | "base_uri": "https://localhost:8080/" 72 | }, 73 | "id": "2Q7kTaujr8nL", 74 | "outputId": "5481db4e-92e9-4b5b-c43d-4df819678660" 75 | }, 76 | "execution_count": 2, 77 | "outputs": [ 78 | { 79 | "output_type": "stream", 80 | "name": "stdout", 81 | "text": [ 82 | "Using cuda as device.\n" 83 | ] 84 | } 85 | ] 86 | }, 87 | { 88 | "cell_type": "markdown", 89 | "source": [ 90 | "## Configs" 91 | ], 92 | "metadata": { 93 | "id": "WPyPU2egr_m_" 94 | } 95 | }, 96 | { 97 | "cell_type": "code", 98 | "source": [ 99 | "data_dir = \"./data\"\n", 100 | "model_dir = \"./models\"\n", 101 | "debug = True\n", 102 | "\n", 103 | "if debug:\n", 104 | " CONTEXT_WINDOW = 2\n", 105 | " EMBEDDING_SIZE = 5\n", 106 | " MIN_FREQ = 5\n", 107 | " BATCH_SIZE = 3\n", 108 | " N_EPOCHS = 1\n", 109 | "else:\n", 110 | " CONTEXT_WINDOW = 4\n", 111 | " EMBEDDING_SIZE = 100\n", 112 | " MIN_FREQ = 25\n", 113 | " BATCH_SIZE = 64\n", 114 | " N_EPOCHS = 3" 115 | ], 116 | "metadata": { 117 | "id": "TkfrEtnysDEe" 118 | }, 119 | "execution_count": 3, 120 | "outputs": [] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "source": [ 125 | "## Create dirs" 126 | ], 127 | "metadata": { 128 | "id": "J5GwXnhWsSIP" 129 | } 130 | }, 131 | { 132 | "cell_type": "code", 133 | "source": [ 134 | "os.makedirs(data_dir, exist_ok=True)\n", 135 | "os.makedirs(model_dir, exist_ok=True)" 136 | ], 137 | "metadata": { 138 | "id": "PGFbWq1ssVlu" 139 | }, 140 | "execution_count": 4, 141 | "outputs": [] 142 | }, 143 | { 144 | "cell_type": "markdown", 145 | "source": [ 146 | "## Download and tokenize text" 147 | ], 148 | "metadata": { 149 | "id": "UFa7y2nhsYD_" 150 | } 151 | }, 152 | { 153 | "cell_type": "code", 154 | "source": [ 155 | "url = \"https://www.gutenberg.org/cache/epub/7370/pg7370.txt\"\n", 156 | "response = requests.get(url)\n", 157 | "raw_text = response.text.lower()\n", 158 | "raw_text = re.sub(r'[^a-z\\s]', '', raw_text)\n", 159 | "sentences = [line.split() for line in raw_text.split('\\n') if line.strip()]\n", 160 | "print(f\"Number of sentences: {len(sentences):,}\")" 161 | ], 162 | "metadata": { 163 | "colab": { 164 | "base_uri": "https://localhost:8080/" 165 | }, 166 | "id": "DussqJ0MsagF", 167 | "outputId": "3d9ec680-dcd4-47da-d2cc-a0353c615d1d" 168 | }, 169 | "execution_count": 5, 170 | "outputs": [ 171 | { 172 | "output_type": "stream", 173 | "name": "stdout", 174 | "text": [ 175 | "Number of sentences: 4,957\n" 176 | ] 177 | } 178 | ] 179 | }, 180 | { 181 | "cell_type": "markdown", 182 | "source": [ 183 | "\n", 184 | "## Vocabulary class (same as CBOW version)" 185 | ], 186 | "metadata": { 187 | "id": "G6e44DWrsc9W" 188 | } 189 | }, 190 | { 191 | "cell_type": "code", 192 | "source": [ 193 | "class Vocab:\n", 194 | " def __init__(self, word_counts: OrderedDict, min_freq: int = 1, max_size: int = None, specials: List[str] = None, unk_token: str = \"\"):\n", 195 | " self.word_counts = word_counts\n", 196 | " self.min_freq = min_freq\n", 197 | " self.max_size = max_size\n", 198 | " self.unk_token = unk_token\n", 199 | " self.specials = list(specials) if specials else []\n", 200 | "\n", 201 | " if self.unk_token not in self.specials:\n", 202 | " self.specials.insert(0, self.unk_token)\n", 203 | "\n", 204 | " self.token2idx = {}\n", 205 | " self.idx2token = []\n", 206 | " self._prepare_vocab()\n", 207 | "\n", 208 | " def __len__(self):\n", 209 | " return len(self.idx2token)\n", 210 | "\n", 211 | " def __contains__(self, value):\n", 212 | " return value in self.idx2token\n", 213 | "\n", 214 | " def _prepare_vocab(self):\n", 215 | " vocab_list = self.specials.copy()\n", 216 | " filtered_words = [word for word, freq in self.word_counts.items() if freq >= self.min_freq and word not in self.specials]\n", 217 | " if self.max_size is not None:\n", 218 | " filtered_words = filtered_words[:self.max_size - len(self.specials)]\n", 219 | " vocab_list.extend(filtered_words)\n", 220 | " self.idx2token = vocab_list\n", 221 | " self.token2idx = {word: idx for idx, word in enumerate(vocab_list)}\n", 222 | "\n", 223 | " def get_token(self, idx: int) -> str:\n", 224 | " return self.idx2token[idx] if 0 <= idx < len(self.idx2token) else self.unk_token\n", 225 | "\n", 226 | " def get_index(self, token: str) -> int:\n", 227 | " return self.token2idx.get(token, self.token2idx[self.unk_token])\n", 228 | "\n", 229 | " def get_tokens(self, indices: List[int]) -> List[str]:\n", 230 | " return [self.get_token(idx) for idx in indices]\n", 231 | "\n", 232 | " def get_indices(self, tokens: List[str]) -> List[int]:\n", 233 | " return [self.get_index(token) for token in tokens]" 234 | ], 235 | "metadata": { 236 | "id": "x9gV2NoasfnN" 237 | }, 238 | "execution_count": 6, 239 | "outputs": [] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "source": [ 244 | "## Padding for skip-gram" 245 | ], 246 | "metadata": { 247 | "id": "PES9ALTWsmXd" 248 | } 249 | }, 250 | { 251 | "cell_type": "code", 252 | "source": [ 253 | "def pad_sentences(sentences: List[List[str]], context_length: int, pad_token: str = \"\") -> List[List[str]]:\n", 254 | " padded_sentences = []\n", 255 | " for sentence in sentences:\n", 256 | " padded_sentence = [pad_token] * context_length + sentence + [pad_token] * context_length\n", 257 | " padded_sentences.append(padded_sentence)\n", 258 | " return padded_sentences" 259 | ], 260 | "metadata": { 261 | "id": "z6Cuo7aispl7" 262 | }, 263 | "execution_count": 7, 264 | "outputs": [] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "source": [ 269 | "sentences = pad_sentences(sentences, CONTEXT_WINDOW)" 270 | ], 271 | "metadata": { 272 | "id": "6bunxvYPs0w5" 273 | }, 274 | "execution_count": 8, 275 | "outputs": [] 276 | }, 277 | { 278 | "cell_type": "markdown", 279 | "source": [ 280 | "## Build vocab" 281 | ], 282 | "metadata": { 283 | "id": "OqfQctNksswi" 284 | } 285 | }, 286 | { 287 | "cell_type": "code", 288 | "source": [ 289 | "vocab = Vocab(OrderedDict(Counter(chain.from_iterable(sentences))), min_freq=MIN_FREQ, specials=[\"\"])\n", 290 | "print(f\"Size of Vocabulary: {len(vocab):,}\")" 291 | ], 292 | "metadata": { 293 | "colab": { 294 | "base_uri": "https://localhost:8080/" 295 | }, 296 | "id": "1nPBlky7s4D1", 297 | "outputId": "cedabe98-c965-4814-e8a2-77ac4a2ce821" 298 | }, 299 | "execution_count": 9, 300 | "outputs": [ 301 | { 302 | "output_type": "stream", 303 | "name": "stdout", 304 | "text": [ 305 | "Size of Vocabulary: 1,158\n" 306 | ] 307 | } 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "source": [ 313 | "\n", 314 | "## Skip-gram pair generation" 315 | ], 316 | "metadata": { 317 | "id": "xAXtdfags6ok" 318 | } 319 | }, 320 | { 321 | "cell_type": "code", 322 | "source": [ 323 | "def generate_skipgram_pairs(sentences: List[List[str]], context_length: int, vocab: Vocab):\n", 324 | " inputs = []\n", 325 | " outputs = []\n", 326 | " for sentence in sentences:\n", 327 | " encoded = vocab.get_indices(sentence)\n", 328 | " for center_idx in range(context_length, len(encoded) - context_length):\n", 329 | " center_word = encoded[center_idx]\n", 330 | " context = encoded[center_idx - context_length : center_idx] + encoded[center_idx + 1 : center_idx + context_length + 1]\n", 331 | " for context_word in context:\n", 332 | " inputs.append(center_word)\n", 333 | " outputs.append(context_word)\n", 334 | " return torch.tensor(inputs), torch.tensor(outputs)\n", 335 | "\n", 336 | "inputs, outputs = generate_skipgram_pairs(sentences, CONTEXT_WINDOW, vocab)\n", 337 | "print(f\"Number of training examples: {len(inputs):,}\")" 338 | ], 339 | "metadata": { 340 | "colab": { 341 | "base_uri": "https://localhost:8080/" 342 | }, 343 | "id": "x51_SV14s9yY", 344 | "outputId": "72e5b9db-71a2-4192-858b-dd553829b95d" 345 | }, 346 | "execution_count": 10, 347 | "outputs": [ 348 | { 349 | "output_type": "stream", 350 | "name": "stdout", 351 | "text": [ 352 | "Number of training examples: 236,704\n" 353 | ] 354 | } 355 | ] 356 | }, 357 | { 358 | "cell_type": "markdown", 359 | "source": [ 360 | "## Dataset class" 361 | ], 362 | "metadata": { 363 | "id": "lqnhGseutA1j" 364 | } 365 | }, 366 | { 367 | "cell_type": "code", 368 | "source": [ 369 | "class SkipGramDataset(Dataset):\n", 370 | " def __init__(self, inputs, targets):\n", 371 | " self.inputs = inputs\n", 372 | " self.targets = targets\n", 373 | "\n", 374 | " def __len__(self):\n", 375 | " return len(self.inputs)\n", 376 | "\n", 377 | " def __getitem__(self, idx):\n", 378 | " return self.inputs[idx], self.targets[idx]" 379 | ], 380 | "metadata": { 381 | "id": "0HG8k7KmtDG-" 382 | }, 383 | "execution_count": 11, 384 | "outputs": [] 385 | }, 386 | { 387 | "cell_type": "markdown", 388 | "source": [ 389 | "## Skip-gram model" 390 | ], 391 | "metadata": { 392 | "id": "UmZDRhZStFc1" 393 | } 394 | }, 395 | { 396 | "cell_type": "code", 397 | "source": [ 398 | "class SkipGram(nn.Module):\n", 399 | " def __init__(self, vocab_size, embedding_dim):\n", 400 | " super().__init__()\n", 401 | " self.embeddings = nn.Embedding(vocab_size, embedding_dim)\n", 402 | " self.linear = nn.Linear(embedding_dim, vocab_size)\n", 403 | "\n", 404 | " def forward(self, center_words):\n", 405 | " embeds = self.embeddings(center_words)\n", 406 | " out = self.linear(embeds)\n", 407 | " return out\n", 408 | "\n", 409 | " def debug_forward(self, center_words):\n", 410 | " embeds = self.embeddings(center_words)\n", 411 | " print(\"\\nembeddings shape:\", embeds.shape)\n", 412 | " print(embeds)\n", 413 | " out = self.linear(embeds)\n", 414 | " print(\"\\nlogits shape:\", out.shape)\n", 415 | " print(out)\n", 416 | " return out" 417 | ], 418 | "metadata": { 419 | "id": "hGxDDaIUtFL2" 420 | }, 421 | "execution_count": 12, 422 | "outputs": [] 423 | }, 424 | { 425 | "cell_type": "markdown", 426 | "source": [ 427 | "## Instantiate model" 428 | ], 429 | "metadata": { 430 | "id": "XmXRsNBStNnC" 431 | } 432 | }, 433 | { 434 | "cell_type": "code", 435 | "source": [ 436 | "model = SkipGram(vocab_size=len(vocab), embedding_dim=EMBEDDING_SIZE).to(device)\n", 437 | "print(model)" 438 | ], 439 | "metadata": { 440 | "colab": { 441 | "base_uri": "https://localhost:8080/" 442 | }, 443 | "id": "U2-3V0setNZK", 444 | "outputId": "61630f59-9743-47d6-bb91-668785ae2256" 445 | }, 446 | "execution_count": 13, 447 | "outputs": [ 448 | { 449 | "output_type": "stream", 450 | "name": "stdout", 451 | "text": [ 452 | "SkipGram(\n", 453 | " (embeddings): Embedding(1158, 5)\n", 454 | " (linear): Linear(in_features=5, out_features=1158, bias=True)\n", 455 | ")\n" 456 | ] 457 | } 458 | ] 459 | }, 460 | { 461 | "cell_type": "markdown", 462 | "source": [ 463 | "## Loss and optimizer" 464 | ], 465 | "metadata": { 466 | "id": "9CofeFdWtTGL" 467 | } 468 | }, 469 | { 470 | "cell_type": "code", 471 | "source": [ 472 | "criterion = nn.CrossEntropyLoss(ignore_index=vocab.get_index(vocab.unk_token))\n", 473 | "optimizer = optim.Adam(model.parameters(), lr=0.001)" 474 | ], 475 | "metadata": { 476 | "id": "RE_giWxqtV_S" 477 | }, 478 | "execution_count": 14, 479 | "outputs": [] 480 | }, 481 | { 482 | "cell_type": "markdown", 483 | "source": [ 484 | "## Dataloader" 485 | ], 486 | "metadata": { 487 | "id": "Wa0WOIABtZnk" 488 | } 489 | }, 490 | { 491 | "cell_type": "code", 492 | "source": [ 493 | "dataset = SkipGramDataset(inputs, outputs)\n", 494 | "dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)" 495 | ], 496 | "metadata": { 497 | "id": "356_6QCTtb1U" 498 | }, 499 | "execution_count": 15, 500 | "outputs": [] 501 | }, 502 | { 503 | "cell_type": "markdown", 504 | "source": [ 505 | "## Training loop" 506 | ], 507 | "metadata": { 508 | "id": "3xJ6qhMUteOJ" 509 | } 510 | }, 511 | { 512 | "cell_type": "code", 513 | "source": [ 514 | "for epoch in range(N_EPOCHS):\n", 515 | " total_loss = 0\n", 516 | " for batch_inputs, batch_outputs in dataloader:\n", 517 | " batch_inputs, batch_outputs = batch_inputs.to(device), batch_outputs.to(device)\n", 518 | "\n", 519 | " optimizer.zero_grad()\n", 520 | " if debug:\n", 521 | " predictions = model.debug_forward(batch_inputs)\n", 522 | " else:\n", 523 | " predictions = model.forward(batch_inputs)\n", 524 | "\n", 525 | " loss = criterion(predictions, batch_outputs)\n", 526 | " loss.backward()\n", 527 | " optimizer.step()\n", 528 | " total_loss += loss.item()\n", 529 | "\n", 530 | " if debug: break\n", 531 | " if debug: break\n", 532 | " print(f\"Epoch {epoch+1}/{N_EPOCHS}, Loss: {total_loss/len(dataset):.4f}\")" 533 | ], 534 | "metadata": { 535 | "colab": { 536 | "base_uri": "https://localhost:8080/" 537 | }, 538 | "id": "Dh1QxsmotgQK", 539 | "outputId": "e6ed8cb9-adc9-4ea0-a0d8-2960f7401f48" 540 | }, 541 | "execution_count": 16, 542 | "outputs": [ 543 | { 544 | "output_type": "stream", 545 | "name": "stdout", 546 | "text": [ 547 | "\n", 548 | "embeddings shape: torch.Size([3, 5])\n", 549 | "tensor([[ 0.0099, 0.8007, -0.2172, -1.7865, -0.1345],\n", 550 | " [-0.1325, -1.2426, -0.1149, 1.1431, 0.3546],\n", 551 | " [-2.8135, 0.0679, 0.0196, -0.9808, 0.5849]], device='cuda:0',\n", 552 | " grad_fn=)\n", 553 | "\n", 554 | "logits shape: torch.Size([3, 1158])\n", 555 | "tensor([[ 0.6994, 0.6161, 0.1455, ..., 0.0060, 0.0517, 0.4258],\n", 556 | " [-0.0163, 0.1403, -0.6382, ..., -0.2566, -0.6915, -0.8407],\n", 557 | " [-0.2563, -0.1448, -0.0099, ..., -0.1927, 0.5144, 0.6950]],\n", 558 | " device='cuda:0', grad_fn=)\n" 559 | ] 560 | } 561 | ] 562 | }, 563 | { 564 | "cell_type": "markdown", 565 | "source": [ 566 | "## Save trained model weights and vocab" 567 | ], 568 | "metadata": { 569 | "id": "o-0K3JTiu3_V" 570 | } 571 | }, 572 | { 573 | "cell_type": "code", 574 | "source": [ 575 | "import torch.nn.functional as F\n", 576 | "import pickle" 577 | ], 578 | "metadata": { 579 | "id": "fKQPx6ODu_Ar" 580 | }, 581 | "execution_count": 18, 582 | "outputs": [] 583 | }, 584 | { 585 | "cell_type": "code", 586 | "source": [ 587 | "torch.save(model.embeddings.weight.data, f\"{model_dir}/weights.pt\")\n", 588 | "with open(f\"{model_dir}/vocab.pkl\", \"wb\") as f:\n", 589 | " pickle.dump(vocab, f)" 590 | ], 591 | "metadata": { 592 | "id": "Bo4Pzav2u8hj" 593 | }, 594 | "execution_count": 19, 595 | "outputs": [] 596 | }, 597 | { 598 | "cell_type": "markdown", 599 | "source": [ 600 | "\n", 601 | "## Define function to compute closest words" 602 | ], 603 | "metadata": { 604 | "id": "2BNSog-9vBrx" 605 | } 606 | }, 607 | { 608 | "cell_type": "code", 609 | "source": [ 610 | "def closest_words(embeddings, vocab, word, n=10):\n", 611 | " if word not in vocab.token2idx:\n", 612 | " raise ValueError(f\"'{word}' not in vocabulary\")\n", 613 | "\n", 614 | " word_idx = vocab.get_index(word)\n", 615 | " word_embedding = embeddings[word_idx]\n", 616 | "\n", 617 | " similarities = F.cosine_similarity(word_embedding.unsqueeze(0), embeddings, dim=1)\n", 618 | " similarities[word_idx] = -1 # exclude itself\n", 619 | "\n", 620 | " top_indices = similarities.topk(n).indices\n", 621 | " return [(vocab.get_token(idx), similarities[idx].item()) for idx in top_indices]" 622 | ], 623 | "metadata": { 624 | "id": "Fjt94vcavFkG" 625 | }, 626 | "execution_count": 20, 627 | "outputs": [] 628 | }, 629 | { 630 | "cell_type": "code", 631 | "source": [ 632 | "if torch.cuda.is_available():\n", 633 | " loaded_embeddings = torch.load(f\"{model_dir}/weights.pt\", weights_only=True)\n", 634 | "else:\n", 635 | " loaded_embeddings = torch.load(f\"{model_dir}/weights.pt\", weights_only=True, map_location=torch.device(\"cpu\"))\n", 636 | "\n", 637 | "with open(f\"{model_dir}/vocab.pkl\", \"rb\") as f:\n", 638 | " loaded_vocab = pickle.load(f)" 639 | ], 640 | "metadata": { 641 | "id": "l3K0NsZKvOeQ" 642 | }, 643 | "execution_count": 21, 644 | "outputs": [] 645 | }, 646 | { 647 | "cell_type": "markdown", 648 | "source": [ 649 | "## Run similarity search" 650 | ], 651 | "metadata": { 652 | "id": "FtVJ112bvTtm" 653 | } 654 | }, 655 | { 656 | "cell_type": "code", 657 | "source": [ 658 | "print(\"Trained model:\")\n", 659 | "print(closest_words(embeddings=loaded_embeddings, vocab=loaded_vocab, word=\"love\", n=10))" 660 | ], 661 | "metadata": { 662 | "colab": { 663 | "base_uri": "https://localhost:8080/" 664 | }, 665 | "id": "dMRGNCodvX9h", 666 | "outputId": "cf846faa-9b2f-473e-fc9d-4fd1850d8b8a" 667 | }, 668 | "execution_count": 22, 669 | "outputs": [ 670 | { 671 | "output_type": "stream", 672 | "name": "stdout", 673 | "text": [ 674 | "Trained model:\n", 675 | "[('was', 0.9637019038200378), ('make', 0.905871570110321), ('judge', 0.9049926996231079), ('body', 0.9028736352920532), ('brought', 0.8975038528442383), ('minority', 0.8772290945053101), ('wise', 0.8752244710922241), ('kingdom', 0.8742192387580872), ('grown', 0.8639228940010071), ('food', 0.8584514856338501)]\n" 676 | ] 677 | } 678 | ] 679 | }, 680 | { 681 | "cell_type": "markdown", 682 | "source": [ 683 | "\n", 684 | "## Compare with untrained model" 685 | ], 686 | "metadata": { 687 | "id": "9g12zcLpviU4" 688 | } 689 | }, 690 | { 691 | "cell_type": "code", 692 | "source": [ 693 | "model_untrained = SkipGram(vocab_size=len(vocab), embedding_dim=EMBEDDING_SIZE)\n", 694 | "untrained_embeddings = model_untrained.embeddings.weight.data\n", 695 | "\n", 696 | "print(\"\\nUntrained model:\")\n", 697 | "print(closest_words(embeddings=untrained_embeddings, vocab=vocab, word=\"love\", n=10))" 698 | ], 699 | "metadata": { 700 | "colab": { 701 | "base_uri": "https://localhost:8080/" 702 | }, 703 | "id": "zQR_iEdevgGX", 704 | "outputId": "d9d3ef2b-d17b-4533-8b9e-817c4fd29ca9" 705 | }, 706 | "execution_count": 23, 707 | "outputs": [ 708 | { 709 | "output_type": "stream", 710 | "name": "stdout", 711 | "text": [ 712 | "\n", 713 | "Untrained model:\n", 714 | "[('or', 0.9682488441467285), ('draw', 0.9493830800056458), ('agreed', 0.9472517371177673), ('paragraph', 0.9458328485488892), ('many', 0.9302278161048889), ('grants', 0.928244411945343), ('measure', 0.9108309149742126), ('understood', 0.9096970558166504), ('freemen', 0.9056882262229919), ('power', 0.89534991979599)]\n" 715 | ] 716 | } 717 | ] 718 | } 719 | ] 720 | } -------------------------------------------------------------------------------- /Verizon.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "**Data Dictionary**" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "- enrolldt : Enrollment Date
\n", 15 | "- price: Membership price
\n", 16 | "- downpmt: Downpayment
\n", 17 | "- monthdue: Months Due
\n", 18 | "- pmttype: Payment Type (1: Credit Card, 3: Cash , 4: Check, 5: Debit Card)
\n", 19 | "- use: Usage
\n", 20 | "- age: Age of customer
\n", 21 | "- gender: Gender of customer(1: Male, 2: Female)
\n", 22 | "- default: 1: Default, 0 Non-Default
" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": null, 28 | "metadata": {}, 29 | "outputs": [], 30 | "source": [] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | " We have used Logistic Regression, Decision Tree and Random Forest to predict if a customer will default or not. Try 2 other models of your choice and evaluate them on 2 metrics of your choice that we haven't used so far" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 1, 42 | "metadata": { 43 | "tags": [] 44 | }, 45 | "outputs": [ 46 | { 47 | "name": "stdout", 48 | "output_type": "stream", 49 | "text": [ 50 | "Epoch 1/100\n" 51 | ] 52 | }, 53 | { 54 | "name": "stderr", 55 | "output_type": "stream", 56 | "text": [ 57 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/keras/src/layers/core/input_layer.py:25: UserWarning: Argument `input_shape` is deprecated. Use `shape` instead.\n", 58 | " warnings.warn(\n" 59 | ] 60 | }, 61 | { 62 | "name": "stdout", 63 | "output_type": "stream", 64 | "text": [ 65 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 728us/step - accuracy: 0.5867 - loss: 1.4448 - val_accuracy: 0.8344 - val_loss: -0.2755\n", 66 | "Epoch 2/100\n", 67 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.7738 - loss: -0.4064 - val_accuracy: 0.8469 - val_loss: -0.9330\n", 68 | "Epoch 3/100\n", 69 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8351 - loss: -0.8675 - val_accuracy: 0.8532 - val_loss: -1.0668\n", 70 | "Epoch 4/100\n", 71 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 376us/step - accuracy: 0.8562 - loss: -1.2058 - val_accuracy: 0.8628 - val_loss: -1.1302\n", 72 | "Epoch 5/100\n", 73 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8619 - loss: -1.2597 - val_accuracy: 0.8687 - val_loss: -1.1850\n", 74 | "Epoch 6/100\n", 75 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8689 - loss: -1.4898 - val_accuracy: 0.8631 - val_loss: -1.1925\n", 76 | "Epoch 7/100\n", 77 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8687 - loss: -1.5509 - val_accuracy: 0.8620 - val_loss: -1.2102\n", 78 | "Epoch 8/100\n", 79 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8715 - loss: -1.5750 - val_accuracy: 0.8694 - val_loss: -1.2491\n", 80 | "Epoch 9/100\n", 81 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8730 - loss: -1.5086 - val_accuracy: 0.8635 - val_loss: -1.2463\n", 82 | "Epoch 10/100\n", 83 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8723 - loss: -1.5804 - val_accuracy: 0.8709 - val_loss: -1.2653\n", 84 | "Epoch 11/100\n", 85 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 384us/step - accuracy: 0.8754 - loss: -1.5467 - val_accuracy: 0.8723 - val_loss: -1.2777\n", 86 | "Epoch 12/100\n", 87 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 385us/step - accuracy: 0.8775 - loss: -1.4726 - val_accuracy: 0.8657 - val_loss: -1.2636\n", 88 | "Epoch 13/100\n", 89 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.8765 - loss: -1.6152 - val_accuracy: 0.8683 - val_loss: -1.2993\n", 90 | "Epoch 14/100\n", 91 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 391us/step - accuracy: 0.8748 - loss: -1.6811 - val_accuracy: 0.8687 - val_loss: -1.2901\n", 92 | "Epoch 15/100\n", 93 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 392us/step - accuracy: 0.8763 - loss: -1.5232 - val_accuracy: 0.8734 - val_loss: -1.2932\n", 94 | "Epoch 16/100\n", 95 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8785 - loss: -1.5563 - val_accuracy: 0.8701 - val_loss: -1.3364\n", 96 | "Epoch 17/100\n", 97 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8797 - loss: -1.6318 - val_accuracy: 0.8742 - val_loss: -1.3272\n", 98 | "Epoch 18/100\n", 99 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 373us/step - accuracy: 0.8778 - loss: -1.6541 - val_accuracy: 0.8723 - val_loss: -1.3383\n", 100 | "Epoch 19/100\n", 101 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8765 - loss: -1.5488 - val_accuracy: 0.8701 - val_loss: -1.3394\n", 102 | "Epoch 20/100\n", 103 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 389us/step - accuracy: 0.8795 - loss: -1.6604 - val_accuracy: 0.8738 - val_loss: -1.3623\n", 104 | "Epoch 21/100\n", 105 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 0.8810 - loss: -1.7610 - val_accuracy: 0.8771 - val_loss: -1.3651\n", 106 | "Epoch 22/100\n", 107 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8819 - loss: -1.6975 - val_accuracy: 0.8727 - val_loss: -1.3354\n", 108 | "Epoch 23/100\n", 109 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8789 - loss: -1.6139 - val_accuracy: 0.8734 - val_loss: -1.3569\n", 110 | "Epoch 24/100\n", 111 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8805 - loss: -1.5595 - val_accuracy: 0.8709 - val_loss: -1.3493\n", 112 | "Epoch 25/100\n", 113 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8761 - loss: -1.5293 - val_accuracy: 0.8767 - val_loss: -1.3613\n", 114 | "Epoch 26/100\n", 115 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 377us/step - accuracy: 0.8796 - loss: -1.7249 - val_accuracy: 0.8745 - val_loss: -1.3669\n", 116 | "Epoch 27/100\n", 117 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8760 - loss: -1.6421 - val_accuracy: 0.8749 - val_loss: -1.3583\n", 118 | "Epoch 28/100\n", 119 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 386us/step - accuracy: 0.8810 - loss: -1.5780 - val_accuracy: 0.8720 - val_loss: -1.3689\n", 120 | "Epoch 29/100\n", 121 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8800 - loss: -1.5343 - val_accuracy: 0.8698 - val_loss: -1.3474\n", 122 | "Epoch 30/100\n", 123 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 381us/step - accuracy: 0.8705 - loss: -1.5743 - val_accuracy: 0.8716 - val_loss: -1.3756\n", 124 | "Epoch 31/100\n", 125 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8817 - loss: -1.7087 - val_accuracy: 0.8672 - val_loss: -1.3541\n", 126 | "Epoch 32/100\n", 127 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8721 - loss: -1.6025 - val_accuracy: 0.8745 - val_loss: -1.3754\n", 128 | "Epoch 33/100\n", 129 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8782 - loss: -1.7282 - val_accuracy: 0.8727 - val_loss: -1.3590\n", 130 | "Epoch 34/100\n", 131 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8804 - loss: -1.7086 - val_accuracy: 0.8698 - val_loss: -1.3470\n", 132 | "Epoch 35/100\n", 133 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 369us/step - accuracy: 0.8810 - loss: -1.5826 - val_accuracy: 0.8764 - val_loss: -1.4009\n", 134 | "Epoch 36/100\n", 135 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8822 - loss: -1.6581 - val_accuracy: 0.8756 - val_loss: -1.3912\n", 136 | "Epoch 37/100\n", 137 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8791 - loss: -1.6491 - val_accuracy: 0.8764 - val_loss: -1.3963\n", 138 | "Epoch 38/100\n", 139 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8828 - loss: -1.6845 - val_accuracy: 0.8709 - val_loss: -1.3626\n", 140 | "Epoch 39/100\n", 141 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8765 - loss: -1.7465 - val_accuracy: 0.8709 - val_loss: -1.3792\n", 142 | "Epoch 40/100\n", 143 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8796 - loss: -1.6952 - val_accuracy: 0.8742 - val_loss: -1.3875\n", 144 | "Epoch 41/100\n", 145 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8781 - loss: -1.7366 - val_accuracy: 0.8775 - val_loss: -1.3883\n", 146 | "Epoch 42/100\n", 147 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 0.8841 - loss: -1.6870 - val_accuracy: 0.8705 - val_loss: -1.3506\n", 148 | "Epoch 43/100\n", 149 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8820 - loss: -1.6876 - val_accuracy: 0.8712 - val_loss: -1.3620\n", 150 | "Epoch 44/100\n", 151 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 428us/step - accuracy: 0.8777 - loss: -1.7897 - val_accuracy: 0.8753 - val_loss: -1.3851\n", 152 | "Epoch 45/100\n", 153 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 388us/step - accuracy: 0.8832 - loss: -1.7775 - val_accuracy: 0.8727 - val_loss: -1.3633\n", 154 | "Epoch 46/100\n", 155 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 386us/step - accuracy: 0.8853 - loss: -1.6981 - val_accuracy: 0.8705 - val_loss: -1.3577\n", 156 | "Epoch 47/100\n", 157 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 384us/step - accuracy: 0.8828 - loss: -1.8596 - val_accuracy: 0.8738 - val_loss: -1.3816\n", 158 | "Epoch 48/100\n", 159 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8837 - loss: -1.8544 - val_accuracy: 0.8756 - val_loss: -1.3749\n", 160 | "Epoch 49/100\n", 161 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8864 - loss: -1.8201 - val_accuracy: 0.8771 - val_loss: -1.3928\n", 162 | "Epoch 50/100\n", 163 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 431us/step - accuracy: 0.8843 - loss: -1.7168 - val_accuracy: 0.8738 - val_loss: -1.4089\n", 164 | "Epoch 51/100\n", 165 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 416us/step - accuracy: 0.8825 - loss: -1.7630 - val_accuracy: 0.8742 - val_loss: -1.3914\n", 166 | "Epoch 52/100\n", 167 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8786 - loss: -1.7057 - val_accuracy: 0.8753 - val_loss: -1.3763\n", 168 | "Epoch 53/100\n", 169 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 414us/step - accuracy: 0.8798 - loss: -1.5794 - val_accuracy: 0.8767 - val_loss: -1.4216\n", 170 | "Epoch 54/100\n", 171 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8819 - loss: -1.6349 - val_accuracy: 0.8694 - val_loss: -1.3702\n", 172 | "Epoch 55/100\n", 173 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 0.8843 - loss: -1.7700 - val_accuracy: 0.8756 - val_loss: -1.3754\n", 174 | "Epoch 56/100\n", 175 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8896 - loss: -1.9302 - val_accuracy: 0.8756 - val_loss: -1.3989\n", 176 | "Epoch 57/100\n", 177 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 407us/step - accuracy: 0.8867 - loss: -1.8582 - val_accuracy: 0.8767 - val_loss: -1.3943\n", 178 | "Epoch 58/100\n", 179 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 390us/step - accuracy: 0.8876 - loss: -1.7264 - val_accuracy: 0.8745 - val_loss: -1.3807\n", 180 | "Epoch 59/100\n", 181 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 379us/step - accuracy: 0.8798 - loss: -1.7206 - val_accuracy: 0.8745 - val_loss: -1.3763\n", 182 | "Epoch 60/100\n", 183 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 0.8840 - loss: -1.6810 - val_accuracy: 0.8767 - val_loss: -1.3858\n", 184 | "Epoch 61/100\n", 185 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 378us/step - accuracy: 0.8850 - loss: -1.7133 - val_accuracy: 0.8712 - val_loss: -1.3946\n", 186 | "Epoch 62/100\n", 187 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 423us/step - accuracy: 0.8815 - loss: -1.6904 - val_accuracy: 0.8767 - val_loss: -1.3582\n", 188 | "Epoch 63/100\n", 189 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8871 - loss: -1.7279 - val_accuracy: 0.8756 - val_loss: -1.3944\n", 190 | "Epoch 64/100\n", 191 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 410us/step - accuracy: 0.8817 - loss: -1.7165 - val_accuracy: 0.8804 - val_loss: -1.4078\n", 192 | "Epoch 65/100\n", 193 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 415us/step - accuracy: 0.8889 - loss: -1.7555 - val_accuracy: 0.8738 - val_loss: -1.4008\n", 194 | "Epoch 66/100\n", 195 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 0.8860 - loss: -1.8302 - val_accuracy: 0.8734 - val_loss: -1.3619\n", 196 | "Epoch 67/100\n", 197 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 409us/step - accuracy: 0.8834 - loss: -1.7671 - val_accuracy: 0.8779 - val_loss: -1.3922\n", 198 | "Epoch 68/100\n", 199 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 387us/step - accuracy: 0.8905 - loss: -1.7985 - val_accuracy: 0.8738 - val_loss: -1.4075\n", 200 | "Epoch 69/100\n", 201 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 0.8880 - loss: -1.8513 - val_accuracy: 0.8749 - val_loss: -1.3816\n", 202 | "Epoch 70/100\n", 203 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 367us/step - accuracy: 0.8787 - loss: -1.7095 - val_accuracy: 0.8723 - val_loss: -1.3702\n", 204 | "Epoch 71/100\n", 205 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 370us/step - accuracy: 0.8819 - loss: -1.7304 - val_accuracy: 0.8779 - val_loss: -1.3912\n", 206 | "Epoch 72/100\n", 207 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 435us/step - accuracy: 0.8782 - loss: -1.6296 - val_accuracy: 0.8764 - val_loss: -1.3787\n", 208 | "Epoch 73/100\n", 209 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 479us/step - accuracy: 0.8783 - loss: -1.7065 - val_accuracy: 0.8804 - val_loss: -1.4012\n", 210 | "Epoch 74/100\n", 211 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 438us/step - accuracy: 0.8886 - loss: -1.8899 - val_accuracy: 0.8775 - val_loss: -1.3869\n", 212 | "Epoch 75/100\n", 213 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8873 - loss: -1.7559 - val_accuracy: 0.8793 - val_loss: -1.3726\n", 214 | "Epoch 76/100\n", 215 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 410us/step - accuracy: 0.8852 - loss: -1.6442 - val_accuracy: 0.8760 - val_loss: -1.3882\n", 216 | "Epoch 77/100\n", 217 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 615us/step - accuracy: 0.8810 - loss: -1.7353 - val_accuracy: 0.8727 - val_loss: -1.4004\n", 218 | "Epoch 78/100\n", 219 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 433us/step - accuracy: 0.8925 - loss: -1.8096 - val_accuracy: 0.8723 - val_loss: -1.3988\n", 220 | "Epoch 79/100\n", 221 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 408us/step - accuracy: 0.8832 - loss: -1.8142 - val_accuracy: 0.8734 - val_loss: -1.3991\n", 222 | "Epoch 80/100\n", 223 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 495us/step - accuracy: 0.8867 - loss: -1.7876 - val_accuracy: 0.8764 - val_loss: -1.3751\n", 224 | "Epoch 81/100\n", 225 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 527us/step - accuracy: 0.8864 - loss: -1.8754 - val_accuracy: 0.8786 - val_loss: -1.3795\n", 226 | "Epoch 82/100\n", 227 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 458us/step - accuracy: 0.8861 - loss: -1.8558 - val_accuracy: 0.8808 - val_loss: -1.4015\n", 228 | "Epoch 83/100\n", 229 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 514us/step - accuracy: 0.8902 - loss: -1.8730 - val_accuracy: 0.8753 - val_loss: -1.3983\n", 230 | "Epoch 84/100\n", 231 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 472us/step - accuracy: 0.8860 - loss: -1.7296 - val_accuracy: 0.8775 - val_loss: -1.4035\n", 232 | "Epoch 85/100\n", 233 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 485us/step - accuracy: 0.8894 - loss: -1.7704 - val_accuracy: 0.8764 - val_loss: -1.3866\n", 234 | "Epoch 86/100\n", 235 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 424us/step - accuracy: 0.8869 - loss: -1.7921 - val_accuracy: 0.8760 - val_loss: -1.4037\n", 236 | "Epoch 87/100\n", 237 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 383us/step - accuracy: 0.8850 - loss: -1.8886 - val_accuracy: 0.8797 - val_loss: -1.4137\n", 238 | "Epoch 88/100\n", 239 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 429us/step - accuracy: 0.8835 - loss: -1.7146 - val_accuracy: 0.8771 - val_loss: -1.3927\n", 240 | "Epoch 89/100\n", 241 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 426us/step - accuracy: 0.8820 - loss: -1.5299 - val_accuracy: 0.8742 - val_loss: -1.3842\n", 242 | "Epoch 90/100\n", 243 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 419us/step - accuracy: 0.8858 - loss: -1.8870 - val_accuracy: 0.8786 - val_loss: -1.4126\n", 244 | "Epoch 91/100\n", 245 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 404us/step - accuracy: 0.8859 - loss: -1.7234 - val_accuracy: 0.8742 - val_loss: -1.3798\n", 246 | "Epoch 92/100\n", 247 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 402us/step - accuracy: 0.8848 - loss: -1.6446 - val_accuracy: 0.8760 - val_loss: -1.3779\n", 248 | "Epoch 93/100\n", 249 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8903 - loss: -1.9362 - val_accuracy: 0.8767 - val_loss: -1.3850\n", 250 | "Epoch 94/100\n", 251 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 382us/step - accuracy: 0.8884 - loss: -1.8355 - val_accuracy: 0.8793 - val_loss: -1.4076\n", 252 | "Epoch 95/100\n", 253 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 372us/step - accuracy: 0.8913 - loss: -1.7340 - val_accuracy: 0.8701 - val_loss: -1.3642\n", 254 | "Epoch 96/100\n", 255 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8853 - loss: -1.7358 - val_accuracy: 0.8793 - val_loss: -1.3997\n", 256 | "Epoch 97/100\n", 257 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 368us/step - accuracy: 0.8902 - loss: -1.7987 - val_accuracy: 0.8771 - val_loss: -1.3907\n", 258 | "Epoch 98/100\n", 259 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 364us/step - accuracy: 0.8916 - loss: -1.8432 - val_accuracy: 0.8808 - val_loss: -1.3981\n", 260 | "Epoch 99/100\n", 261 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 366us/step - accuracy: 0.8862 - loss: -1.8597 - val_accuracy: 0.8720 - val_loss: -1.3640\n", 262 | "Epoch 100/100\n", 263 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 365us/step - accuracy: 0.8913 - loss: -1.9094 - val_accuracy: 0.8771 - val_loss: -1.3733\n", 264 | "\u001b[1m284/284\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 255us/step\n" 265 | ] 266 | }, 267 | { 268 | "data": { 269 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIhCAYAAAB67ibXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAByL0lEQVR4nO3deXwNd////+fJdrIHQSJpiH2p2EvtoVWtpZRStURspa2tWtSntQS1b21d1JrYSnWhuKrqsq+1b6UoUqlGUZpIEFnm94dfzreniSWEk9M87rfb3K7Me97zntfMyXVdeXrPzDEZhmEIAAAAAAA75WDrAgAAAAAAeBQEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLYAAAAAALtGsAUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAQI4SFRUlk8mU6fLee+89lmMeP35cI0aMUHR09GMZ/1FER0fLZDJp0qRJti7loe3cuVMjRozQX3/9ZetSss0XX3yhp59+Wm5ubjKZTDp06NBjO9bmzZst/x2IiorKtE/Dhg1lMpkUHBycrccODg5WeHj4Q+1rMpk0YsSI+/ZbuHCh2rVrp9KlS8vBwSHbzwFA7uBk6wIAAMhMZGSkypQpY9UWEBDwWI51/PhxRUREKDQ0lD+qH4OdO3cqIiJC4eHhypMnj63LeWSXL19Wp06d9OKLL2rGjBkym80qVarUYz+ul5eX5s2blyFonjt3Tps3b5a3t/djr+FxWLRokS5evKjq1asrLS1NycnJti4JgB0i2AIAcqTy5curWrVqti7jkSQnJ8tkMsnJKXf+3+3Nmzfl6upq6zKy3alTp5ScnKyOHTuqfv362TLmjRs35O7ufs8+r732mubOnavTp0+rZMmSlvb58+crMDBQISEhOn78eLbU8yStW7dODg53biJs1qyZjh07ZuOKANgjbkUGANilL774QjVr1pSHh4c8PT3VuHFjHTx40KrPvn371K5dOwUHB8vNzU3BwcF6/fXX9euvv1r6REVFqU2bNpKkBg0aZLjl8263YoaGhio0NNSynn676KJFi/Tuu+8qMDBQZrNZv/zyiyTpf//7n5577jl5e3vL3d1dtWvX1oYNGx7q3NNv1964caN69OghX19feXt7KywsTImJibp48aLatm2rPHnyqFChQnrvvfesZsHSb2+eMGGCPvroIxUuXFiurq6qVq1apjVt375dzz33nLy8vOTu7q5atWrpv//9b6Y1/fDDD+ratasKFCggd3d3DRkyRAMHDpQkFS1a1HJ9N2/eLOnO5/jCCy+oUKFCcnNzU9myZfX+++8rMTHRavzw8HB5enrql19+UZMmTeTp6amgoCC9++67SkpKsuqblJSkkSNHqmzZsnJ1dZWvr68aNGignTt3WvoYhqEZM2aoUqVKcnNzU968efXqq6/q7Nmz97z24eHhqlOnjqQ7QdNkMln9HqxatUo1a9aUu7u7vLy81KhRI+3atctqjBEjRshkMunAgQN69dVXlTdvXhUvXvyex5WkRo0aKSgoSPPnz7e0paWlacGCBercubMlHP7drVu3NGTIEBUtWlQuLi4KDAzU22+/neG28OTkZA0aNEj+/v5yd3dXnTp1tGfPnkzruHjxonr27KmnnnpKLi4uKlq0qCIiIpSSknLfc8hMZnUDQFbxvyQAgBwpNTVVKSkpVku6MWPG6PXXX1e5cuW0fPlyLVq0SNevX1fdunWtZqyio6NVunRpTZs2TevWrdP48eMVGxurZ555RleuXJEkNW3aVGPGjJEk/ec//9GuXbu0a9cuNW3a9KHqHjJkiM6fP6/PPvtMq1evVsGCBbV48WK98MIL8vb21oIFC7R8+XLly5dPjRs3fuhwK0ndu3eXj4+Pli1bpg8//FCff/65evTooaZNm6pixYr66quv1LlzZ02ePFmffvpphv2nT5+u77//XtOmTdPixYvl4OCgl156ySqIbdmyRQ0bNlRcXJzmzZunpUuXysvLS82bN9cXX3yRYcyuXbvK2dlZixYt0ldffaU333xTffr0kSR98803lutbpUoVSdLp06fVpEkTzZs3T99//7369++v5cuXq3nz5hnGTk5O1ssvv6znnntO3377rbp27aqpU6dq/Pjxlj4pKSl66aWXNGrUKDVr1kwrVqxQVFSUatWqpfPnz1v69ezZU/3799fzzz+vlStXasaMGfrpp59Uq1Yt/fHHH3e95kOHDtV//vMfSXd+D3ft2qUZM2ZIkj7//HO1aNFC3t7eWrp0qebNm6dr164pNDRU27dvzzBWq1atVKJECX355Zf67LPP7nrMdA4ODgoPD9fChQuVmpoqSfrhhx/022+/qUuXLhn6G4ahli1batKkSerU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B9WjRw95eHioc+fOSkxMVLNmzdSwYUMtXrxY586dU79+/e56/Fq1amnatGkaNmyYTp48KUny9PS8Z8379u1T3759tWjRItWqVUtXr17Vtm3bHuicbty4oRdffFHPPvus9u7dq0uXLql79+7q3bu3oqKiLGNs2LBB3t7eWr9+vQzD0I0bN9SgQQPVrVtXW7dulZOTk0aPHq0XX3xRR44ckYuLS4Y6k5KSlJSUZFmPj4+/94cBAAAAAP9AsL2P69ev6+OPP9b06dPVuXNnSVLx4sVVp04dy0xk//791apVK8s+o0aN0uTJky1tRYsW1fHjxzVr1ix17txZS5YsUWpqqubPny93d3c9/fTT+u233/Tmm29mWoOLi4t8fHxkMpnk7+//QHWfP39eHh4eatasmby8vFSkSBFVrlz5vuckSUuWLNHNmze1cOFCeXh4SJKmT5+u5s2ba/z48fLz85MkeXh4aO7cuZbAOn/+fDk4OGju3LmWW6gjIyOVJ08ebd68WS+88EKGOseOHauIiIgHOicAAAAAyAy3It/HiRMnlJSUpOeee+6ufapVq2b5+fLly4qJiVG3bt3k6elpWUaPHq0zZ85YxqxYsaLc3d0t+9WsWTNb627UqJGKFCmiYsWKqVOnTlqyZIlu3LjxQOeUXl96qJWk2rVrKy0tzTJjLEkhISFWs7D79+/XL7/8Ii8vL8t558uXT7du3bKc+z8NGTJEcXFxliUmJiY7Th8AAABALsKM7X24ubndt8/fA2BaWpokac6cOapRo4ZVP0dHR0mSYRjZWGHmvLy8dODAAW3evFk//PCDhg0bphEjRmjv3r33PSfDMO760qq/t//9vKU75161alUtWbIkw34FChTIdDyz2Syz2Xy/0wEAAACAu2LG9j5KliwpNzc3bdiw4YH6+/n5KTAwUGfPnlWJEiWslqJFi0qSypUrp8OHD+vmzZuW/Xbv3n3PcV1cXJSampql2p2cnPT8889rwoQJOnLkiKKjo7Vx48b7nlO5cuV06NAhJSYmWtp27NghBwcHy0uiMlOlShWdPn1aBQsWzHDu6V9bBAAAAADZjWB7H66urho8eLAGDRqkhQsX6syZM9q9e7fmzZt3131GjBihsWPH6uOPP9apU6d09OhRRUZGasqUKZKk9u3by8HBQd26ddPx48f13XffadKkSfesIzg4WAkJCdqwYYOuXLliua34btasWaNPPvlEhw4d0q+//qqFCxcqLS1NpUuXvu85dejQQa6ururcubOOHTumTZs2qU+fPurUqZPl+drMdOjQQfnz51eLFi20bds2nTt3Tlu2bFG/fv3022+/3bNeAAAAAHhYBNsHMHToUL377rsaNmyYypYtq9dee02XLl26a//u3btr7ty5ioqKUkhIiOrXr6+oqCjLjK2np6dWr16t48ePq3Llyvrggw80fvz4e9ZQq1Yt9erVS6+99poKFCigCRMm3LN/njx59M0336hhw4YqW7asPvvsMy1dulRPP/30fc/J3d1d69at09WrV/XMM8/o1Vdf1XPPPafp06ff85ju7u7aunWrChcurFatWqls2bLq2rWrbt68KW9v73vuCwAAAAAPy2Q8iQc+gQcUHx8vHx8fBfVfLgez+/13AAAAAJAtosc1tXUJVtKzQVxc3H0nypixBQAAAADYNYKtndq2bZvV1wn9cwEAAACA3IKv+7FT1apV06FDh2xdBgAAAADYHMHWTrm5ualEiRK2LgMAAAAAbI5bkQEAAAAAdo1gCwAAAACwa9yKjBzpWERjvvsWAAAAwANhxhYAAAAAYNcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGt83Q9ypPLD18nB7G7rMgAAAJDLRY9rausS8ACYsQUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrD9F4uKilKePHkytAcHB2vatGlPvB4AAAAAeBwItgAAAAAAu0awzSFCQ0PVu3dv9e7dW3ny5JGvr68+/PBDGYYh6c4s6+jRoxUWFiZPT08VKVJE3377rS5fvqwWLVrI09NTISEh2rdvnyRp8+bN6tKli+Li4mQymWQymTRixAiFhobq119/1TvvvGNpT0xMlLe3t7766iurmlavXi0PDw9dv35d0dHRMplMWrZsmWrVqiVXV1c9/fTT2rx5s9U+x48fV5MmTeTp6Sk/Pz916tRJV65ceSLXEAAAAEDuRLDNQRYsWCAnJyf9+OOP+uSTTzR16lTNnTvXsn3q1KmqXbu2Dh48qKZNm6pTp04KCwtTx44ddeDAAZUoUUJhYWEyDEO1atXStGnT5O3trdjY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45raugQA/xLM2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawTbHCA0NFT9+/e3dRkAAAAAYJcItnhsgoODNW3aNFuXAQAAAOBfjmALAAAAALBrBNsnLDExUWFhYfL09FShQoU0efJkq+3Xrl1TWFiY8ubNK3d3d7300ks6ffq0JMkwDBUoUEBff/21pX+lSpVUsGBBy/quXbvk7OyshIQESZLJZNLcuXP1yiuvyN3dXSVLltSqVass/Tdv3iyTyaT//ve/qlixolxdXVWjRg0dPXrU0icqKkp58uTRmjVrVLp0abm7u+vVV19VYmKiFixYoODgYOXNm1d9+vRRamqqpDu3V//666965513ZDKZZDKZsv9iAgAAAIAItk/cwIEDtWnTJq1YsUI//PCDNm/erP3791u2h4eHa9++fVq1apV27dolwzDUpEkTJScny2QyqV69etq8ebOkOyH4+PHjSk5O1vHjxyXdCapVq1aVp6enZcyIiAi1bdtWR44cUZMmTdShQwddvXo1Q12TJk3S3r17VbBgQb388stKTk62bL9x44Y++eQTLVu2TN9//702b96sVq1a6bvvvtN3332nRYsWafbs2frqq68kSd98842eeuopjRw5UrGxsYqNjc30eiQlJSk+Pt5qAQAAAICsINg+QQkJCZo3b54mTZqkRo0aKSQkRAsWLLDMcp4+fVqrVq3S3LlzVbduXVWsWFFLlizRhQsXtHLlSkl3ZkLTg+3WrVtVsWJFNWzY0NK2efNmhYaGWh03PDxcr7/+ukqUKKExY8YoMTFRe/bsseozfPhwq5r++OMPrVixwrI9OTlZM2fOVOXKlVWvXj29+uqr2r59u+bNm6dy5cqpWbNmatCggTZt2iRJypcvnxwdHeXl5SV/f3/5+/tnek3Gjh0rHx8fyxIUFPSIVxkAAABAbkOwfYLOnDmj27dvq2bNmpa2fPnyqXTp0pKkEydOyMnJSTVq1LBs9/X1VenSpXXixAlJd4LtTz/9pCtXrmjLli0KDQ1VaGiotmzZopSUFO3cuVP169e3Om6FChUsP3t4eMjLy0uXLl2y6pNZTenHlCR3d3cVL17csu7n56fg4GCrmWE/P78M497PkCFDFBcXZ1liYmKytD8AAAAAEGyfIMMwHmq7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AEBmcnWwLVeunFJSUvTjjz9a3Yp86tQplS1bVpK0bds2tWjRQh07dpR0J7ydPn3asj07ODs7KzU11aqtbNmy2r59u8LCwixtO3fufODj1qpVS0FBQfriiy+0du1atWnTRi4uLpLunOOJEyc0a9Ys1a1bV5K0ffv2e45XoEABXb9+XYmJifLw8JCkDN9xW6VKFZ08eVIlSpR4oBoBAAAAIDvk6mBbsmRJtWjRQj169NCsWbPk5eWl999/X4GBgWrRooUkqUSJEvr666+1c+dO5c2bV1OmTNHFixezNdgGBwdrw4YNql27tsxms/LmzauBAweqbdu2qlKlip577jmtXr1a33zzjf73v/890Jgmk0nt27fXZ599plOnTlm9dCpv3rzy9fXV7NmzVahQIZ0/f17vv//+PcerUaOG3N3d9X//93/q06eP9uzZo6ioKKs+w4YNU7NmzRQUFKQ2bdrIwcFBR44c0dGjRzV69OgsXxcAAAAAeBC5+hlb6c7biKtWrapmzZqpZs2aMgxD3333neXW4qFDh6pKlSpq3LixQkND5e/vb/WSp+wwefJkrV+/XkFBQapcubIkqWXLlvr44481ceJEPf3005o1a5YiIyMVGhr6wON26NBBx48fV2BgoNXzug4ODlq2bJn279+v8uXL65133tHEiRPvOVa+fPm0ePFifffdd5avPPrnVxo1btxYa9as0fr16/XMM8/o2Wef1ZQpU1SkSJEHrhkAAAAAsipXvhUZOVf6m894KzIAAP8+vBUZQFbwVmQAAAAAQK5BsH3MlixZYvX1N39fnn766RwzJgAAAADYq1z98qgn4eWXX7b6nty/++dXBNlyTAAAAACwVwTbx8zLy0teXl45fkwAAAAAsFfcigwAAAAAsGsEWwAAAACAXeNWZORIxyIa3/eV3gAAAAAgMWMLAAAAALBzBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1vu4HOVL54evkYHa3dRkAgFwkelxTW5cAAHhIzNgCAAAAAOwawRYAAAAAYNcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGsEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLaw8v3336tOnTrKkyePfH191axZM505c8ayfefOnapUqZJcXV1VrVo1rVy5UiaTSYcOHbL0OX78uJo0aSJPT0/5+fmpU6dOunLlig3OBgAAAEBuQLCFlcTERA0YMEB79+7Vhg0b5ODgoFdeeUVpaWm6fv26mjdvrpCQEB04cECjRo3S4MGDrfaPjY1V/fr1ValSJe3bt0/ff/+9/vjjD7Vt2zbT4yUlJSk+Pt5qAQAAAICscLJ1AchZWrdubbU+b948FSxYUMePH9f27dtlMpk0Z84cubq6qly5crpw4YJ69Ohh6T9z5kxVqVJFY8aMsbTNnz9fQUFBOnXqlEqVKmU1/tixYxUREfF4TwoAAADAvxoztrBy5swZtW/fXsWKFZO3t7eKFi0qSTp//rxOnjypChUqyNXV1dK/evXqVvvv379fmzZtkqenp2UpU6aMZex/GjJkiOLi4ixLTEzMYzw7AAAAAP9GzNjCSvPmzRUUFKQ5c+YoICBAaWlpKl++vG7fvi3DMGQymaz6G4ZhtZ6WlqbmzZtr/PjxGcYuVKhQhjaz2Syz2Zy9JwEAAAAgVyHYwuLPP//UiRMnNGvWLNWtW1eStH37dsv2MmXKaMmSJUpKSrKE0X379lmNUaVKFX399dcKDg6WkxO/XgAAAAAeP25FhkXevHnl6+ur2bNn65dfftHGjRs1YMAAy/b27dsrLS1Nb7zxhk6cOKF169Zp0qRJkmSZyX377bd19epVvf7669qzZ4/Onj2rH374QV27dlVqaqpNzgsAAADAvxvBFhYODg5atmyZ9u/fr/Lly+udd97RxIkTLdu9vb21evVqHTp0SJUqVdIHH3ygYcOGSZLluduAgADt2LFDqampaty4scqXL69+/frJx8dHDg78ugEAAADIfibjnw9JAlmwZMkSdenSRXFxcXJzc3vk8eLj4+Xj46Og/svlYHbPhgoBAHgw0eOa2roEAMDfpGeDuLg4eXt737MvD0EiSxYuXKhixYopMDBQhw8f1uDBg9W2bdtsCbUAAAAA8DAItsiSixcvatiwYbp48aIKFSqkNm3a6KOPPrJ1WQAAAAByMYItsmTQoEEaNGiQrcsAAAAAAAve5gMAAAAAsGsPHWwXLVqk2rVrKyAgQL/++qskadq0afr222+zrTgAAAAAAO7noYLtzJkzNWDAADVp0kR//fWX5ftJ8+TJo2nTpmVnfQAAAAAA3NNDfd1PuXLlNGbMGLVs2VJeXl46fPiwihUrpmPHjik0NFRXrlx5HLUiF8jKK70BAAAA/HtlJRs81IztuXPnVLly5QztZrNZiYmJDzMkAAAAAAAP5aGCbdGiRXXo0KEM7WvXrlW5cuUetSYAAAAAAB7YQ33dz8CBA/X222/r1q1bMgxDe/bs0dKlSzV27FjNnTs3u2sEAAAAAOCuHirYdunSRSkpKRo0aJBu3Lih9u3bKzAwUB9//LHatWuX3TUCAAAAAHBXWQ62KSkpWrJkiZo3b64ePXroypUrSktLU8GCBR9HfQAAAAAA3FOWn7F1cnLSm2++qaSkJElS/vz5CbUAAAAAAJt5qFuRa9SooYMHD6pIkSLZXQ8gSSo/fJ0czO62LgMA8JhEj2tq6xIAAP8iDxVs33rrLb377rv67bffVLVqVXl4eFhtr1ChQrYUBwAAAADA/TxUsH3ttdckSX379rW0mUwmGYYhk8mk1NTU7KkOAAAAAID7eKhge+7cueyuAwAAAACAh/JQwZZnawEAAAAAOcVDBduFCxfec3tYWNhDFQMAAAAAQFY9VLDt16+f1XpycrJu3LghFxcXubu7E2wBAAAAAE9Mlr/HVpKuXbtmtSQkJOjkyZOqU6eOli5dmt01AgAAAABwVw8VbDNTsmRJjRs3LsNsLuxPaGio+vfvn6V9Vq5cqRIlSsjR0THL+wIAAADAo8i2YCtJjo6O+v3337NzSDyizZs3y2Qy6a+//nqsx+nZs6deffVVxcTEaNSoUQoPD1fLli0f6zEBAAAAQHrIZ2xXrVpltW4YhmJjYzV9+nTVrl07WwqD/UhISNClS5fUuHFjBQQE2LocAAAAALnMQ83YtmzZ0mpp1aqVRowYoQoVKmj+/PnZXeNjFxoaqt69e6t3797KkyePfH199eGHH8owDEnS4sWLVa1aNXl5ecnf31/t27fXpUuXJN0J9SVKlNCkSZOsxjx27JgcHBx05swZSZLJZNKsWbPUrFkzubu7q2zZstq1a5d++eUXhYaGysPDQzVr1rT0T7d69WpVrVpVrq6uKlasmCIiIpSSkmLZbjKZNHfuXL3yyityd3dXyZIlLf/wEB0drQYNGkiS8ubNK5PJpPDw8Cxfn9u3b2vQoEEKDAyUh4eHatSooc2bN0u6MyPs5eUlSWrYsKFMJpNCQ0O1YMECffvttzKZTDKZTJb+AAAAAJDdHirYpqWlWS2pqam6ePGiPv/8cxUqVCi7a3wiFixYICcnJ/3444/65JNPNHXqVM2dO1fSnWA3atQoHT58WCtXrtS5c+csAdFkMqlr166KjIy0Gm/+/PmqW7euihcvbmkbNWqUwsLCdOjQIZUpU0bt27dXz549NWTIEO3bt0+S1Lt3b0v/devWqWPHjurbt6+OHz+uWbNmKSoqSh999JHVsSIiItS2bVsdOXJETZo0UYcOHXT16lUFBQXp66+/liSdPHlSsbGx+vjjj7N8bbp06aIdO3Zo2bJlOnLkiNq0aaMXX3xRp0+fVq1atXTy5ElJ0tdff63Y2FitWrVKbdu21YsvvqjY2FjFxsaqVq1amY6dlJSk+Ph4qwUAAAAAsuKhgu3IkSN148aNDO03b97UyJEjH7koWwgKCtLUqVNVunRpdejQQX369NHUqVMlSV27dtVLL72kYsWK6dlnn9Unn3yitWvXKiEhQdKd4Hfy5Ent2bNH0p2vP1q8eLG6du1qdYwuXbqobdu2KlWqlAYPHqzo6Gh16NBBjRs3VtmyZdWvXz+rmc2PPvpI77//vjp37qxixYqpUaNGGjVqlGbNmmU1bnh4uF5//XWVKFFCY8aMUWJiovbs2SNHR0fly5dPklSwYEH5+/vLx8cnS9flzJkzWrp0qb788ktLUH/vvfdUp04dRUZGysXFRQULFpQk5cuXT/7+/vL29pabm5vMZrP8/f3l7+8vFxeXTMcfO3asfHx8LEtQUFCW6gMAAACAhwq2ERERllD3dzdu3FBERMQjF2ULzz77rEwmk2W9Zs2aOn36tFJTU3Xw4EG1aNFCRYoUkZeXl0JDQyVJ58+flyQVKlRITZs2tdyGvWbNGt26dUtt2rSxOkaFChUsP/v5+UmSQkJCrNpu3bplmbXcv3+/Ro4cKU9PT8vSo0cPxcbGWv3Dwt/H9fDwkJeXl+VW6Ud14MABGYahUqVKWdWxZcuWDLdNP4whQ4YoLi7OssTExGRD1QAAAAByk4d6eZRhGFYhMN3hw4ctM4T/Frdu3dILL7ygF154QYsXL1aBAgV0/vx5NW7cWLdv37b06969uzp16qSpU6cqMjJSr732mtzd3a3GcnZ2tvycfv0ya0tLS7P8Z0REhFq1apWhLldX10zHTR8nfYxHlZaWJkdHR+3fv1+Ojo5W2zw9PR95fLPZLLPZ/MjjAAAAAMi9shRs019AZDKZVKpUKatwm5qaqoSEBPXq1Svbi3wSdu/enWG9ZMmS+vnnn3XlyhWNGzfOcpts+vOwf9ekSRN5eHho5syZWrt2rbZu3frINVWpUkUnT55UiRIlHnqM9FuAU1NTH2r/ypUrKzU1VZcuXVLdunWzdNyHPSYAAAAAZEWWgu20adNkGIa6du2qiIgIq+c1XVxcFBwcrJo1a2Z7kU9CTEyMBgwYoJ49e+rAgQP69NNPNXnyZBUuXFguLi769NNP1atXLx07dkyjRo3KsL+jo6PCw8M1ZMgQlShRIluuw7Bhw9SsWTMFBQWpTZs2cnBw0JEjR3T06FGNHj36gcYoUqSITCaT1qxZoyZNmsjNzS1LM62lSpVShw4dFBYWpsmTJ6ty5cq6cuWKNm7cqJCQEDVp0iTT/YKDg7Vu3TqdPHlSvr6+8vHxyTCzDAAAAADZIUvBtnPnzpKkokWLqlatWv+qoBIWFqabN2+qevXqcnR0VJ8+ffTGG2/IZDIpKipK//d//6dPPvlEVapU0aRJk/Tyyy9nGKNbt24aM2ZMhpdGPazGjRtrzZo1GjlypCZMmCBnZ2eVKVNG3bt3f+AxAgMDFRERoffff19dunRRWFiYoqKislRHZGSkRo8erXfffVcXLlyQr6+vataseddQK0k9evTQ5s2bVa1aNSUkJGjTpk2WZ5MBAAAAIDuZjPQva31IN2/eVHJyslWbt7f3IxX1pIWGhqpSpUqaNm3aI42zY8cOhYaG6rfffrO8HApZEx8ff+ftyP2Xy8Hsfv8dAAB2KXpcU1uXAADI4dKzQVxc3H0z5kO9FfnGjRvq3bu3ChYsKE9PT+XNm9dqyW2SkpL0yy+/aOjQoWrbti2hFgAAAACeoIcKtgMHDtTGjRs1Y8YMmc1mzZ07VxEREQoICNDChQuzu8Ycb+nSpSpdurTi4uI0YcIEW5dzT+fPn7f62p5/LulfYQQAAAAA9uKhbkUuXLiwFi5cqNDQUHl7e+vAgQMqUaKEFi1apKVLl+q77757HLUiG6SkpCg6Ovqu24ODg+Xk9FDfApUtuBUZAHIHbkUGANxPVm5FfqgEc/XqVRUtWlTSnedpr169KkmqU6eO3nzzzYcZEk+Ik5PTI319EAAAAADkNA91K3KxYsUss37lypXT8uXLJUmrV69Wnjx5sqs2AAAAAADu66GCbZcuXXT48GFJ0pAhQyzP2r7zzjsaOHBgthYIAAAAAMC9PPLX/Uh3Xki0b98+FS9eXBUrVsyOupBLZeU+egAAAAD/Xo/9Gdu/u3XrlgoXLqzChQs/6lAAAAAAAGTZQ92KnJqaqlGjRikwMFCenp46e/asJGno0KGaN29ethYIAAAAAMC9PFSw/eijjxQVFaUJEybIxcXF0h4SEqK5c+dmW3EAAAAAANzPQwXbhQsXavbs2erQoYMcHR0t7RUqVNDPP/+cbcUBAAAAAHA/DxVsL1y4kOl3oaalpSk5OfmRiwIAAAAA4EE91Mujnn76aW3btk1FihSxav/yyy9VuXLlbCkMuVv54evkYHa3dRkAkKtFj2tq6xIAAHggDxVshw8frk6dOunChQtKS0vTN998o5MnT2rhwoVas2ZNdtcIAAAAAMBdZelW5LNnz8owDDVv3lxffPGFvvvuO5lMJg0bNkwnTpzQ6tWr1ahRo8dVKwAAAAAAGWRpxrZkyZKKjY1VwYIF1bhxY82fP1+//PKL/P39H1d9AAAAAADcU5ZmbA3DsFpfu3atbty4ka0FAQAAAACQFQ/1VuR0/wy6AAAAAAA8aVkKtiaTSSaTKUMbAAAAAAC2kqVnbA3DUHh4uMxmsyTp1q1b6tWrlzw8PKz6ffPNN9lXIQAAAAAA95ClYNu5c2er9Y4dO2ZrMQAAAAAAZFWWgm1kZOTjqgM5UHR0tIoWLaqDBw+qUqVKti4HAAAAADKVpWCL3CUoKEixsbHKnz+/rUsBAAAAgLsi2CJTt2/flouLC99RDAAAACDHe6Sv+4H9CA0NVe/evdW7d2/lyZNHvr6++vDDDy1f2RQcHKzRo0crPDxcPj4+6tGjh6Kjo2UymXTo0CHLOD/99JOaNm0qb29veXl5qW7dujpz5oxle2RkpMqWLStXV1eVKVNGM2bMeNKnCgAAACCXYcY2F1mwYIG6deumH3/8Ufv27dMbb7yhIkWKqEePHpKkiRMnaujQofrwww8z3f/ChQuqV6+eQkNDtXHjRnl7e2vHjh1KSUmRJM2ZM0fDhw/X9OnTVblyZR08eFA9evSQh4dHhhePpUtKSlJSUpJlPT4+PpvPGgAAAMC/HcE2FwkKCtLUqVNlMplUunRpHT16VFOnTrUE24YNG+q9996z9I+Ojrba/z//+Y98fHy0bNkyOTs7S5JKlSpl2T5q1ChNnjxZrVq1kiQVLVpUx48f16xZs+4abMeOHauIiIjsPE0AAAAAuQy3Iucizz77rEwmk2W9Zs2aOn36tFJTUyVJ1apVu+f+hw4dUt26dS2h9u8uX76smJgYdevWTZ6enpZl9OjRVrcq/9OQIUMUFxdnWWJiYh7y7AAAAADkVszYwsLDw+Oe293c3O66LS0tTdKd25Fr1Khhtc3R0fGu+5nNZpnN5ixUCQAAAADWCLa5yO7duzOslyxZ8p7B8+8qVKigBQsWKDk5OcOsrZ+fnwIDA3X27Fl16NAh22oGAAAAgPvhVuRcJCYmRgMGDNDJkye1dOlSffrpp+rXr98D79+7d2/Fx8erXbt22rdvn06fPq1Fixbp5MmTkqQRI0Zo7Nix+vjjj3Xq1CkdPXpUkZGRmjJlyuM6JQAAAABgxjY3CQsL082bN1W9enU5OjqqT58+euONNx54f19fX23cuFEDBw5U/fr15ejoqEqVKql27dqSpO7du8vd3V0TJ07UoEGD5OHhoZCQEPXv3/8xnREAAAAASCYj/YtM8a8WGhqqSpUqadq0abYu5Z7i4+Pl4+OjoP7L5WB2t3U5AJCrRY9rausSAAC5WHo2iIuLk7e39z37cisyAAAAAMCuEWwBAAAAAHaNZ2xzic2bN9u6BAAAAAB4LJixBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNZ2yRIx2LaHzfV3oDAAAAgMSMLQAAAADAzhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BpvRUaOVH74OjmY3W1dBgBkED2uqa1LAAAA/8CMLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrDNBUaMGKFKlSpleb/Q0FD1798/2+sBAAAAgOxEsP2XMZlMWrlypa3LAAAAAIAnhmALAAAAALBrBNvHJDQ0VH369FH//v2VN29e+fn5afbs2UpMTFSXLl3k5eWl4sWLa+3atZZ9tmzZourVq8tsNqtQoUJ6//33lZKSYjVm3759NWjQIOXLl0/+/v4aMWKEZXtwcLAk6ZVXXpHJZLKsp1u0aJGCg4Pl4+Ojdu3a6fr165ZtiYmJCgsLk6enpwoVKqTJkydnOKfMZoPz5MmjqKgoy/qFCxf02muvKW/evPL19VWLFi0UHR2d5esHAAAAAA+KYPsYLViwQPnz59eePXvUp08fvfnmm2rTpo1q1aqlAwcOqHHjxurUqZNu3LihCxcuqEmTJnrmmWd0+PBhzZw5U/PmzdPo0aMzjOnh4aEff/xREyZM0MiRI7V+/XpJ0t69eyVJkZGRio2NtaxL0pkzZ7Ry5UqtWbNGa9as0ZYtWzRu3DjL9oEDB2rTpk1asWKFfvjhB23evFn79+/P0vneuHFDDRo0kKenp7Zu3art27fL09NTL774om7fvp3pPklJSYqPj7daAAAAACArCLaPUcWKFfXhhx+qZMmSGjJkiNzc3JQ/f3716NFDJUuW1LBhw/Tnn3/qyJEjmjFjhoKCgjR9+nSVKVNGLVu2VEREhCZPnqy0tDTLmBUqVNDw4cNVsmRJhYWFqVq1atqwYYMkqUCBApLuzKL6+/tb1iUpLS1NUVFRKl++vOrWratOnTpZ9ktISNC8efM0adIkNWrUSCEhIVqwYIFSU1OzdL7Lli2Tg4OD5s6dq5CQEJUtW1aRkZE6f/68Nm/enOk+Y8eOlY+Pj2UJCgrK0jEBAAAAgGD7GFWoUMHys6Ojo3x9fRUSEmJp8/PzkyRdunRJJ06cUM2aNWUymSzba9eurYSEBP3222+ZjilJhQoV0qVLl+5bS3BwsLy8vDLd78yZM7p9+7Zq1qxp2Z4vXz6VLl36QU9VkrR//3798ssv8vLykqenpzw9PZUvXz7dunVLZ86cyXSfIUOGKC4uzrLExMRk6ZgAAAAA4GTrAv7NnJ2drdZNJpNVW3qITUtLk2EYVqFWkgzDsOp3tzH/PqOblVrS90s/zv2YTKYMfZOTky0/p6WlqWrVqlqyZEmGff8+e/x3ZrNZZrP5gY4PAAAAAJlhxjaHKFeunHbu3GkVHHfu3CkvLy8FBgY+8DjOzs5ZvoW4RIkScnZ21u7duy1t165d06lTp6z6FShQQLGxsZb106dP68aNG5b1KlWq6PTp0ypYsKBKlChhtfj4+GSpJgAAAAB4UATbHOKtt95STEyM+vTpo59//lnffvuthg8frgEDBsjB4cE/puDgYG3YsEEXL17UtWvXHmgfT09PdevWTQMHDtSGDRt07NgxhYeHZzhuw4YNNX36dB04cED79u1Tr169rGaCO3TooPz586tFixbatm2bzp07py1btqhfv35Wt1MDAAAAQHYi2OYQgYGB+u6777Rnzx5VrFhRvXr1Urdu3fThhx9maZzJkydr/fr1CgoKUuXKlR94v4kTJ6pevXp6+eWX9fzzz6tOnTqqWrVqhrGDgoJUr149tW/fXu+9957c3d0t293d3bV161YVLlxYrVq1UtmyZdW1a1fdvHlT3t7eWToPAAAAAHhQJuNBH7AEnoD4+Pg7b0fuv1wOZvf77wAAT1j0uKa2LgEAgFwhPRvExcXdd6KMGVsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1gi0AAAAAwK452boAIDPHIhrz3bcAAAAAHggztgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGsEWwAAAACAXePrfpAjlR++Tg5md1uXATxW0eOa2roEAACAfwVmbAEAAAAAdo1gCwAAAACwawRbAAAAAIBdI9gCAAAAAOwawRYAAAAAYNcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYIsnIjU1VWlpabYuAwAAAMC/EME2F1q4cKF8fX2VlJRk1d66dWuFhYVJklavXq2qVavK1dVVxYoVU0REhFJSUix9p0yZopCQEHl4eCgoKEhvvfWWEhISLNujoqKUJ08erVmzRuXKlZPZbNavv/76ZE4QAAAAQK5CsM2F2rRpo9TUVK1atcrSduXKFa1Zs0ZdunTRunXr1LFjR/Xt21fHjx/XrFmzFBUVpY8++sjS38HBQZ988omOHTumBQsWaOPGjRo0aJDVcW7cuKGxY8dq7ty5+umnn1SwYMEMtSQlJSk+Pt5qAQAAAICsMBmGYdi6CDx5b731lqKjo/Xdd99Jkj7++GN98skn+uWXX1S/fn299NJLGjJkiKX/4sWLNWjQIP3++++Zjvfll1/qzTff1JUrVyTdmbHt0qWLDh06pIoVK961jhEjRigiIiJDe1D/5XIwuz/KKQI5XvS4prYuAQAAIMeKj4+Xj4+P4uLi5O3tfc++BNtc6uDBg3rmmWf066+/KjAwUJUqVVLr1q01dOhQeXh4KC0tTY6Ojpb+qampunXrlhITE+Xu7q5NmzZpzJgxOn78uOLj45WSkqJbt24pISFBHh4eioqKUs+ePXXr1i2ZTKa71pGUlGR1S3R8fLyCgoIItsgVCLYAAAB3l5Vg6/SEakIOU7lyZVWsWFELFy5U48aNdfToUa1evVqSlJaWpoiICLVq1SrDfq6urvr111/VpEkT9erVS6NGjVK+fPm0fft2devWTcnJyZa+bm5u9wy1kmQ2m2U2m7P35AAAAADkKgTbXKx79+6aOnWqLly4oOeff15BQUGSpCpVqujkyZMqUaJEpvvt27dPKSkpmjx5shwc7jymvXz58idWNwAAAAD8HcE2F+vQoYPee+89zZkzRwsXLrS0Dxs2TM2aNVNQUJDatGkjBwcHHTlyREePHtXo0aNVvHhxpaSk6NNPP1Xz5s21Y8cOffbZZzY8EwAAAAC5GW9FzsW8vb3VunVreXp6qmXLlpb2xo0ba82aNVq/fr2eeeYZPfvss5oyZYqKFCkiSapUqZKmTJmi8ePHq3z58lqyZInGjh1ro7MAAAAAkNvx8qhcrlGjRipbtqw++eQTW5ci6f89IM7Lo5Ab8PIoAACAu+PlUbivq1ev6ocfftDGjRs1ffp0W5cDAAAAAA+NYJtLValSRdeuXdP48eNVunRpW5cDAAAAAA+NYJtLRUdH27oEAAAAAMgWvDwKAAAAAGDXCLYAAAAAALtGsAUAAAAA2DWesUWOdCyi8X1f6Q0AAAAAEjO2AAAAAAA7R7AFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawRbAAAAAIBd4+t+kCOVH75ODmZ3W5cBZKvocU1tXQIAAMC/EjO2AAAAAAC7RrAFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawRbAAAAAIBdI9gCAAAAAOwawRYPJDw8XC1btrR1GQAAAACQAcEWAAAAAGDXCLZ4IgzDUEpKiq3LAAAAAPAvRLC1M9evX1eHDh3k4eGhQoUKaerUqQoNDVX//v0lSbdv39agQYMUGBgoDw8P1ahRQ5s3b7bsHxUVpTx58mjdunUqW7asPD099eKLLyo2NtbSJzU1VQMGDFCePHnk6+urQYMGyTAMqzoMw9CECRNUrFgxubm5qWLFivrqq68s2zdv3iyTyaR169apWrVqMpvN2rZt22O9NgAAAAByJ4KtnRkwYIB27NihVatWaf369dq2bZsOHDhg2d6lSxft2LFDy5Yt05EjR9SmTRu9+OKLOn36tKXPjRs3NGnSJC1atEhbt27V+fPn9d5771m2T548WfPnz9e8efO0fft2Xb16VStWrLCq48MPP1RkZKRmzpypn376Se+88446duyoLVu2WPUbNGiQxo4dqxMnTqhChQoZzicpKUnx8fFWCwAAAABkhZOtC8CDu379uhYsWKDPP/9czz33nCQpMjJSAQEBkqQzZ85o6dKl+u233yxt7733nr7//ntFRkZqzJgxkqTk5GR99tlnKl68uCSpd+/eGjlypOU406ZN05AhQ9S6dWtJ0meffaZ169ZZticmJmrKlCnauHGjatasKUkqVqyYtm/frlmzZql+/fqWviNHjlSjRo3uek5jx45VRETEI18bAAAAALkXwdaOnD17VsnJyapevbqlzcfHR6VLl5YkHThwQIZhqFSpUlb7JSUlydfX17Lu7u5uCbWSVKhQIV26dEmSFBcXp9jYWEtglSQnJydVq1bNcjvy8ePHdevWrQyB9fbt26pcubJVW7Vq1e55TkOGDNGAAQMs6/Hx8QoKCrrnPgAAAADwdwRbO5IeLE0mU6btaWlpcnR01P79++Xo6GjVx9PT0/Kzs7Oz1TaTyZThGdp7SUtLkyT997//VWBgoNU2s9lste7h4XHPscxmc4Z9AAAAACArCLZ2pHjx4nJ2dtaePXsss5rx8fE6ffq06tevr8qVKys1NVWXLl1S3bp1H+oYPj4+KlSokHbv3q169epJklJSUrR//35VqVJFklSuXDmZzWadP3/e6rZjAAAAALAFgq0d8fLyUufOnTVw4EDly5dPBQsW1PDhw+Xg4CCTyaRSpUqpQ4cOCgsL0+TJk1W5cmVduXJFGzduVEhIiJo0afJAx+nXr5/GjRunkiVLqmzZspoyZYr++usvqzree+89vfPOO0pLS1OdOnUUHx+vnTt3ytPTU507d35MVwAAAAAAMiLY2pkpU6aoV69eatasmby9vTVo0CDFxMTI1dVV0p2XSY0ePVrvvvuuLly4IF9fX9WsWfOBQ60kvfvuu4qNjVV4eLgcHBzUtWtXvfLKK4qLi7P0GTVqlAoWLKixY8fq7NmzypMnj6pUqaL/+7//y/ZzBgAAAIB7MRlZebgSOU5iYqICAwM1efJkdevWzdblPLL4+Hj5+PgoqP9yOZjdbV0OkK2ixzW1dQkAAAB2Iz0bxMXFydvb+559mbG1MwcPHtTPP/+s6tWrKy4uzvI1PS1atLBxZQAAAABgGwRbOzRp0iSdPHlSLi4uqlq1qrZt26b8+fPbuiwAAAAAsAmCrZ2pXLmy9u/fb+syAAAAACDHcLB1AQAAAAAAPAqCLQAAAADArhFsAQAAAAB2jWdskSMdi2h831d6AwAAAIDEjC0AAAAAwM4RbAEAAAAAdo1gCwAAAACwawRbAAAAAIBdI9gCAAAAAOwawRYAAAAAYNf4uh/kSOWHr5OD2d3WZcAORY9rausSAAAA8IQxYwsAAAAAsGsEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLYAAAAAALtGsAUAAAAA2DWCLQAAAADArhFscV+hoaHq37+/rcsAAAAAgEwRbAEAAAAAdo1gCwAAAACwawRbWElMTFRYWJg8PT1VqFAhTZ482Wr74sWLVa1aNXl5ecnf31/t27fXpUuXJEmGYahEiRKaNGmS1T7Hjh2Tg4ODzpw588TOAwAAAEDuQbCFlYEDB2rTpk1asWKFfvjhB23evFn79++3bL99+7ZGjRqlw4cPa+XKlTp37pzCw8MlSSaTSV27dlVkZKTVmPPnz1fdunVVvHjxDMdLSkpSfHy81QIAAAAAWUGwhUVCQoLmzZunSZMmqVGjRgoJCdGCBQuUmppq6dO1a1e99NJLKlasmJ599ll98sknWrt2rRISEiRJXbp00cmTJ7Vnzx5JUnJyshYvXqyuXbtmesyxY8fKx8fHsgQFBT3+EwUAAADwr0KwhcWZM2d0+/Zt1axZ09KWL18+lS5d2rJ+8OBBtWjRQkWKFJGXl5dCQ0MlSefPn5ckFSpUSE2bNtX8+fMlSWvWrNGtW7fUpk2bTI85ZMgQxcXFWZaYmJjHdHYAAAAA/q0ItrAwDOOe2xMTE/XCCy/I09NTixcv1t69e7VixQpJd25RTte9e3ctW7ZMN2/eVGRkpF577TW5u7tnOqbZbJa3t7fVAgAAAABZQbCFRYkSJeTs7Kzdu3db2q5du6ZTp05Jkn7++WdduXJF48aNU926dVWmTBnLi6P+rkmTJvLw8NDMmTO1du3au96GDAAAAADZwcnWBSDn8PT0VLdu3TRw4ED5+vrKz89PH3zwgRwc7vz7R+HCheXi4qJPP/1UvXr10rFjxzRq1KgM4zg6Oio8PFxDhgxRiRIlrG5tBgAAAIDsxowtrEycOFH16tXTyy+/rOeff1516tRR1apVJUkFChRQVFSUvvzyS5UrV07jxo3L8NU+6bp166bbt28zWwsAAADgsTMZ93uwEngIO3bsUGhoqH777Tf5+fk98H7x8fF33o7cf7kczJk/lwvcS/S4prYuAQAAANkgPRvExcXd91083IqMbJWUlKSYmBgNHTpUbdu2zVKoBQAAAICHwa3IyFZLly5V6dKlFRcXpwkTJti6HAAAAAC5AMEW2So8PFypqanav3+/AgMDbV0OAAAAgFyAYAsAAAAAsGsEWwAAAACAXSPYAgAAAADsGm9FRo50LKLxfV/pDQAAAAASM7YAAAAAADtHsAUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrvBUZOVL54evkYHa3dRnIAaLHNbV1CQAAAMjhmLEFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawRbAAAAAIBdI9gCAAAAAOwawRYAAAAAYNcItgAAAAAAu0awRbYZMWKEKlWqZOsyAAAAAOQyBFs8FJPJpJUrV9q6DAAAAAAg2AIAAAAA7BvB1s6FhoaqT58+6t+/v/LmzSs/Pz/Nnj1biYmJ6tKli7y8vFS8eHGtXbvWss+WLVtUvXp1mc1mFSpUSO+//75SUlKsxuzbt68GDRqkfPnyyd/fXyNGjLBsDw4OliS98sorMplMlvV0ixYtUnBwsHx8fNSuXTtdv379cV4CAAAAALkcwfZfYMGCBcqfP7/27NmjPn366M0331SbNm1Uq1YtHThwQI0bN1anTp1048YNXbhwQU2aNNEzzzyjw4cPa+bMmZo3b55Gjx6dYUwPDw/9+OOPmjBhgkaOHKn169dLkvbu3StJioyMVGxsrGVdks6cOaOVK1dqzZo1WrNmjbZs2aJx48bdtfakpCTFx8dbLQAAAACQFQTbf4GKFSvqww8/VMmSJTVkyBC5ubkpf/786tGjh0qWLKlhw4bpzz//1JEjRzRjxgwFBQVp+vTpKlOmjFq2bKmIiAhNnjxZaWlpljErVKig4cOHq2TJkgoLC1O1atW0YcMGSVKBAgUkSXny5JG/v79lXZLS0tIUFRWl8uXLq27duurUqZNlv8yMHTtWPj4+liUoKOgxXSUAAAAA/1YE23+BChUqWH52dHSUr6+vQkJCLG1+fn6SpEuXLunEiROqWbOmTCaTZXvt2rWVkJCg3377LdMxJalQoUK6dOnSfWsJDg6Wl5fXA+83ZMgQxcXFWZaYmJj7HgMAAAAA/s7J1gXg0Tk7O1utm0wmq7b0EJuWlibDMKxCrSQZhmHV725j/n1GNyu13Gs/s9kss9l833EBAAAA4G6Ysc1lypUrp507d1rCrCTt3LlTXl5eCgwMfOBxnJ2dlZqa+jhKBAAAAIAsIdjmMm+99ZZiYmLUp08f/fzzz/r22281fPhwDRgwQA4OD/7rEBwcrA0bNujixYu6du3aY6wYAAAAAO6NYJvLBAYG6rvvvtOePXtUsWJF9erVS926ddOHH36YpXEmT56s9evXKygoSJUrV35M1QIAAADA/ZmMv9+TCthYfHz8nbcj918uB7O7rctBDhA9rqmtSwAAAIANpGeDuLg4eXt737MvM7YAAAAAALtGsAUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF1zsnUBQGaORTS+7yu9AQAAAEBixhYAAAAAYOcItgAAAAAAu0awBQAAAADYNYItAAAAAMCuEWwBAAAAAHaNYAsAAAAAsGsEWwAAAACAXSPYAgAAAADsGsEWAAAAAGDXCLYAAAAAALtGsAUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1J1sXAPydYRiSpPj4eBtXAgAAAMCW0jNBeka4F4ItcpQ///xTkhQUFGTjSgAAAADkBNevX5ePj889+xBskaPky5dPknT+/Pn7/vLi3yU+Pl5BQUGKiYmRt7e3rcvBE8RnnzvxuedefPa5E5977vUon71hGLp+/boCAgLu25dgixzFweHOY98+Pj78j14u5e3tzWefS/HZ50587rkXn33uxOeeez3sZ/+gk128PAoAAAAAYNcItgAAAAAAu0awRY5iNps1fPhwmc1mW5eCJ4zPPvfis8+d+NxzLz773InPPfd6Up+9yXiQdycDAAAAAJBDMWMLAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2yFFmzJihokWLytXVVVWrVtW2bdtsXRIes7Fjx+qZZ56Rl5eXChYsqJYtW+rkyZO2LgtP2NixY2UymdS/f39bl4In4MKFC+rYsaN8fX3l7u6uSpUqaf/+/bYuC49RSkqKPvzwQxUtWlRubm4qVqyYRo4cqbS0NFuXhmy2detWNW/eXAEBATKZTFq5cqXVdsMwNGLECAUEBMjNzU2hoaH66aefbFMsstW9Pvvk5GQNHjxYISEh8vDwUEBAgMLCwvT7779n2/EJtsgxvvjiC/Xv318ffPCBDh48qLp16+qll17S+fPnbV0aHqMtW7bo7bff1u7du7V+/XqlpKTohRdeUGJioq1LwxOyd+9ezZ49WxUqVLB1KXgCrl27ptq1a8vZ2Vlr167V8ePHNXnyZOXJk8fWpeExGj9+vD777DNNnz5dJ06c0IQJEzRx4kR9+umnti4N2SwxMVEVK1bU9OnTM90+YcIETZkyRdOnT9fevXvl7++vRo0a6fr160+4UmS3e332N27c0IEDBzR06FAdOHBA33zzjU6dOqWXX345247P1/0gx6hRo4aqVKmimTNnWtrKli2rli1bauzYsTasDE/S5cuXVbBgQW3ZskX16tWzdTl4zBISElSlShXNmDFDo0ePVqVKlTRt2jRbl4XH6P3339eOHTu4IyeXadasmfz8/DRv3jxLW+vWreXu7q5FixbZsDI8TiaTSStWrFDLli0l3ZmtDQgIUP/+/TV48GBJUlJSkvz8/DR+/Hj17NnThtUiO/3zs8/M3r17Vb16df36668qXLjwIx+TGVvkCLdv39b+/fv1wgsvWLW/8MIL2rlzp42qgi3ExcVJkvLly2fjSvAkvP3222ratKmef/55W5eCJ2TVqlWqVq2a2rRpo4IFC6py5cqaM2eOrcvCY1anTh1t2LBBp06dkiQdPnxY27dvV5MmTWxcGZ6kc+fO6eLFi1Z/75nNZtWvX5+/93KhuLg4mUymbLtjxylbRgEe0ZUrV5Samio/Pz+rdj8/P128eNFGVeFJMwxDAwYMUJ06dVS+fHlbl4PHbNmyZTpw4ID27t1r61LwBJ09e1YzZ87UgAED9H//93/as2eP+vbtK7PZrLCwMFuXh8dk8ODBiouLU5kyZeTo6KjU1FR99NFHev31121dGp6g9L/pMvt779dff7VFSbCRW7du6f3331f79u3l7e2dLWMSbJGjmEwmq3XDMDK04d+rd+/eOnLkiLZv327rUvCYxcTEqF+/fvrhhx/k6upq63LwBKWlpalatWoaM2aMJKly5cr66aefNHPmTILtv9gXX3yhxYsX6/PPP9fTTz+tQ4cOqX///goICFDnzp1tXR6eMP7ey92Sk5PVrl07paWlacaMGdk2LsEWOUL+/Pnl6OiYYXb20qVLGf5VD/9Offr00apVq7R161Y99dRTti4Hj9n+/ft16dIlVa1a1dKWmpqqrVu3avr06UpKSpKjo6MNK8TjUqhQIZUrV86qrWzZsvr6669tVBGehIEDB+r9999Xu3btJEkhISH69ddfNXbsWIJtLuLv7y/pzsxtoUKFLO38vZd7JCcnq23btjp37pw2btyYbbO1Es/YIodwcXFR1apVtX79eqv29evXq1atWjaqCk+CYRjq3bu3vvnmG23cuFFFixa1dUl4Ap577jkdPXpUhw4dsizVqlVThw4ddOjQIULtv1jt2rUzfKXXqVOnVKRIERtVhCfhxo0bcnCw/rPT0dGRr/vJZYoWLSp/f3+rv/du376tLVu28PdeLpAeak+fPq3//e9/8vX1zdbxmbFFjjFgwAB16tRJ1apVU82aNTV79mydP39evXr1snVpeIzefvttff755/r222/l5eVlmbX38fGRm5ubjavD4+Ll5ZXhOWoPDw/5+vryfPW/3DvvvKNatWppzJgxatu2rfbs2aPZs2dr9uzZti4Nj1Hz5s310UcfqXDhwnr66ad18OBBTZkyRV27drV1achmCQkJ+uWXXyzr586d06FDh5QvXz4VLlxY/fv315gxY1SyZEmVLFlSY8aMkbu7u9q3b2/DqpEd7vXZBwQE6NVXX9WBAwe0Zs0apaamWv7my5cvn1xcXB69AAPIQf7zn/8YRYoUMVxcXIwqVaoYW7ZssXVJeMwkZbpERkbaujQ8YfXr1zf69etn6zLwBKxevdooX768YTabjTJlyhizZ8+2dUl4zOLj441+/foZhQsXNlxdXY1ixYoZH3zwgZGUlGTr0pDNNm3alOn/r3fu3NkwDMNIS0szhg8fbvj7+xtms9moV6+ecfToUdsWjWxxr8/+3Llzd/2bb9OmTdlyfL7HFgAAAABg13jGFgAAAABg1wi2AAAAAAC7RrAFAAAAANg1gi0AAAAAwK4RbAEAAAAAdo1gCwAAAACwawRbAAAAAIBdI9gCAAAAAOwawRYAAAAAYNcItgAA5GLh4eFq2bKlrcvIVHR0tEwmkw4dOmTrUgAAORzBFgAA5Di3b9+2dQkAADtCsAUAAJKk0NBQ9enTR/3791fevHnl5+en2bNnKzExUV26dJGXl5eKFy+utWvXWvbZvHmzTCaT/vvf/6pixYpydXVVjRo1dPToUauxv/76az399NMym80KDg7W5MmTrbYHBwdr9OjRCg8Pl4+Pj3r06KGiRYtKkipXriyTyaTQ0FBJ0t69e9WoUSPlz59fPj4+ql+/vg4cOGA1nslk0ty5c/XKK6/I3d1dJUuW1KpVq6z6/PTTT2ratKm8vb3l5eWlunXr6syZM5btkZGRKlu2rFxdXVWmTBnNmDHjka8xAODxINgCAACLBQsWKH/+/NqzZ4/69OmjN998U23atFGtWrV04MABNW7cWJ06ddKNGzes9hs4cKAmTZqkvXv3qmDBgnr55ZeVnJwsSdq/f7/atm2rdu3a6ejRoxoxYoSGDh2qqKgoqzEmTpyo8uXLa//+/Ro6dKj27NkjSfrf//6n2NhYffPNN5Kk69evq3Pnztq2bZt2796tkiVLqkmTJrp+/brVeBEREWrbtq2OHDmiJk2aqEOHDrp69aok6cKFC6pXr55cXV21ceNG7d+/X127dlVKSookac6cOfrggw/00Ucf6cSJExozZoyGDh2qBQsWZPs1BwBkAwMAAORanTt3Nlq0aGEYhmHUr1/fqFOnjmVbSkqK4eHhYXTq1MnSFhsba0gydu3aZRiGYWzatMmQZCxbtszS588//zTc3NyML774wjAMw2jfvr3RqFEjq+MOHDjQKFeunGW9SJEiRsuWLa36nDt3zpBkHDx48J7nkJKSYnh5eRmrV6+2tEkyPvzwQ8t6QkKCYTKZjLVr1xqGYRhDhgwxihYtaty+fTvTMYOCgozPP//cqm3UqFFGzZo171kLAMA2mLEFAAAWFSpUsPzs6OgoX19fhYSEWNr8/PwkSZcuXbLar2bNmpaf8+XLp9KlS+vEiROSpBMnTqh27dpW/WvXrq3Tp08rNTXV0latWrUHqvHSpUvq1auXSpUqJR8fH/n4+CghIUHnz5+/67l4eHjIy8vLUvehQ4dUt25dOTs7Zxj/8uXLiomJUbdu3eTp6WlZRo8ebXWrMgAg53CydQEAACDn+GfQM5lMVm0mk0mSlJaWdt+x0vsahmH5OZ1hGBn6e3h4PFCN4eHhunz5sqZNm6YiRYrIbDarZs2aGV44ldm5pNft5uZ21/HT+8yZM0c1atSw2ubo6PhANQIAniyCLQAAeGS7d+9W4cKFJUnXrl3TqVOnVKZMGUlSuXLltH37dqv+O3fuVKlSpe4ZFF1cXCTJalZXkrZt26YZM2aoSZMmkqSYmBhduXIlS/VWqFBBCxYsUHJycoYA7Ofnp8DAQJ09e1YdOnTI0rgAANsg2AIAgEc2cuRI+fr6ys/PTx988IHy589v+X7cd999V88884xGjRql1157Tbt27dL06dPv+5bhggULys3NTd9//72eeuopubq6ysfHRyVKlNCiRYtUrVo1xcfHa+DAgfecgc1M79699emnn6pdu3YaMmSIfHx8tHv3blWvXl2lS5fWiBEj1LdvX3l7e+ull15SUlKS9u3bp2vXrmnAgAEPe5kAAI8Jz9gCAIBHNm7cOPXr109Vq1ZVbGysVq1aZZlxrVKlipYvX65ly5apfPnyGjZsmEaOHKnw8PB7junk5KRPPvlEs2bNUkBAgFq0aCFJmj9/vq5du6bKlSurU6dO6tu3rwoWLJilen19fbVx40YlJCSofv36qlq1qubMmWOZve3evbvmzp2rqKgohYSEqH79+oqKirJ8BREAIGcxGZk95AIAAPAANm/erAYNGujatWvKkyePrcsBAORSzNgCAAAAAOwawRYAAAAAYNe4FRkAAAAAYNeYsQUAAAAA2DWCLQAAAADArhFsAQAAAAB2jWALAAAAALBrBFsAAAAAgF0j2AIAAAAA7BrBFgAAAABg1wi2AAAAAAC79v8Bwdu72LaF/KAAAAAASUVORK5CYII=", 270 | "text/plain": [ 271 | "
" 272 | ] 273 | }, 274 | "metadata": {}, 275 | "output_type": "display_data" 276 | }, 277 | { 278 | "name": "stdout", 279 | "output_type": "stream", 280 | "text": [ 281 | "Epoch 1/100\n" 282 | ] 283 | }, 284 | { 285 | "name": "stderr", 286 | "output_type": "stream", 287 | "text": [ 288 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/keras/src/layers/core/input_layer.py:25: UserWarning: Argument `input_shape` is deprecated. Use `shape` instead.\n", 289 | " warnings.warn(\n" 290 | ] 291 | }, 292 | { 293 | "name": "stdout", 294 | "output_type": "stream", 295 | "text": [ 296 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 858us/step - accuracy: 0.6178 - loss: 1.4336 - val_accuracy: 0.8326 - val_loss: -0.5051\n", 297 | "Epoch 2/100\n", 298 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465us/step - accuracy: 0.8194 - loss: -0.8103 - val_accuracy: 0.8484 - val_loss: -0.9117\n", 299 | "Epoch 3/100\n", 300 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 452us/step - accuracy: 0.8554 - loss: -1.2130 - val_accuracy: 0.8536 - val_loss: -1.0127\n", 301 | "Epoch 4/100\n", 302 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8613 - loss: -1.2440 - val_accuracy: 0.8617 - val_loss: -1.1181\n", 303 | "Epoch 5/100\n", 304 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8684 - loss: -1.3051 - val_accuracy: 0.8642 - val_loss: -1.1608\n", 305 | "Epoch 6/100\n", 306 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8773 - loss: -1.4941 - val_accuracy: 0.8624 - val_loss: -1.2030\n", 307 | "Epoch 7/100\n", 308 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 0.8746 - loss: -1.3975 - val_accuracy: 0.8613 - val_loss: -1.2102\n", 309 | "Epoch 8/100\n", 310 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8632 - loss: -1.4111 - val_accuracy: 0.8690 - val_loss: -1.2659\n", 311 | "Epoch 9/100\n", 312 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8728 - loss: -1.4978 - val_accuracy: 0.8606 - val_loss: -1.2504\n", 313 | "Epoch 10/100\n", 314 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8713 - loss: -1.3678 - val_accuracy: 0.8720 - val_loss: -1.2998\n", 315 | "Epoch 11/100\n", 316 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8782 - loss: -1.5190 - val_accuracy: 0.8687 - val_loss: -1.2962\n", 317 | "Epoch 12/100\n", 318 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8798 - loss: -1.5222 - val_accuracy: 0.8606 - val_loss: -1.2823\n", 319 | "Epoch 13/100\n", 320 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450us/step - accuracy: 0.8767 - loss: -1.6958 - val_accuracy: 0.8690 - val_loss: -1.3219\n", 321 | "Epoch 14/100\n", 322 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8821 - loss: -1.7705 - val_accuracy: 0.8657 - val_loss: -1.3192\n", 323 | "Epoch 15/100\n", 324 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8708 - loss: -1.6420 - val_accuracy: 0.8716 - val_loss: -1.3340\n", 325 | "Epoch 16/100\n", 326 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8773 - loss: -1.5499 - val_accuracy: 0.8675 - val_loss: -1.3314\n", 327 | "Epoch 17/100\n", 328 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451us/step - accuracy: 0.8743 - loss: -1.6845 - val_accuracy: 0.8705 - val_loss: -1.3392\n", 329 | "Epoch 18/100\n", 330 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8805 - loss: -1.6495 - val_accuracy: 0.8642 - val_loss: -1.3504\n", 331 | "Epoch 19/100\n", 332 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8763 - loss: -1.6581 - val_accuracy: 0.8650 - val_loss: -1.3095\n", 333 | "Epoch 20/100\n", 334 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8779 - loss: -1.7513 - val_accuracy: 0.8690 - val_loss: -1.3238\n", 335 | "Epoch 21/100\n", 336 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 441us/step - accuracy: 0.8752 - loss: -1.6190 - val_accuracy: 0.8679 - val_loss: -1.3661\n", 337 | "Epoch 22/100\n", 338 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8768 - loss: -1.7060 - val_accuracy: 0.8712 - val_loss: -1.3538\n", 339 | "Epoch 23/100\n", 340 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8784 - loss: -1.6088 - val_accuracy: 0.8709 - val_loss: -1.3472\n", 341 | "Epoch 24/100\n", 342 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8787 - loss: -1.6456 - val_accuracy: 0.8639 - val_loss: -1.3278\n", 343 | "Epoch 25/100\n", 344 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8743 - loss: -1.7221 - val_accuracy: 0.8664 - val_loss: -1.3729\n", 345 | "Epoch 26/100\n", 346 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8802 - loss: -1.7515 - val_accuracy: 0.8631 - val_loss: -1.3489\n", 347 | "Epoch 27/100\n", 348 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 467us/step - accuracy: 0.8781 - loss: -1.7995 - val_accuracy: 0.8687 - val_loss: -1.3648\n", 349 | "Epoch 28/100\n", 350 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8787 - loss: -1.6971 - val_accuracy: 0.8628 - val_loss: -1.3191\n", 351 | "Epoch 29/100\n", 352 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450us/step - accuracy: 0.8780 - loss: -1.8348 - val_accuracy: 0.8716 - val_loss: -1.3547\n", 353 | "Epoch 30/100\n", 354 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 473us/step - accuracy: 0.8806 - loss: -1.6653 - val_accuracy: 0.8657 - val_loss: -1.3495\n", 355 | "Epoch 31/100\n", 356 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8795 - loss: -1.8820 - val_accuracy: 0.8672 - val_loss: -1.3557\n", 357 | "Epoch 32/100\n", 358 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8819 - loss: -1.7013 - val_accuracy: 0.8628 - val_loss: -1.3336\n", 359 | "Epoch 33/100\n", 360 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8821 - loss: -1.7758 - val_accuracy: 0.8650 - val_loss: -1.3524\n", 361 | "Epoch 34/100\n", 362 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8789 - loss: -1.6260 - val_accuracy: 0.8657 - val_loss: -1.3402\n", 363 | "Epoch 35/100\n", 364 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8744 - loss: -1.6410 - val_accuracy: 0.8683 - val_loss: -1.3469\n", 365 | "Epoch 36/100\n", 366 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8792 - loss: -1.6932 - val_accuracy: 0.8720 - val_loss: -1.3719\n", 367 | "Epoch 37/100\n", 368 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8814 - loss: -1.8167 - val_accuracy: 0.8675 - val_loss: -1.3405\n", 369 | "Epoch 38/100\n", 370 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 442us/step - accuracy: 0.8815 - loss: -1.8800 - val_accuracy: 0.8698 - val_loss: -1.3740\n", 371 | "Epoch 39/100\n", 372 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8800 - loss: -1.7262 - val_accuracy: 0.8664 - val_loss: -1.3663\n", 373 | "Epoch 40/100\n", 374 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8807 - loss: -1.7588 - val_accuracy: 0.8694 - val_loss: -1.3665\n", 375 | "Epoch 41/100\n", 376 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 517us/step - accuracy: 0.8805 - loss: -1.7869 - val_accuracy: 0.8687 - val_loss: -1.3425\n", 377 | "Epoch 42/100\n", 378 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 490us/step - accuracy: 0.8748 - loss: -1.7476 - val_accuracy: 0.8723 - val_loss: -1.3745\n", 379 | "Epoch 43/100\n", 380 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 466us/step - accuracy: 0.8774 - loss: -1.6926 - val_accuracy: 0.8694 - val_loss: -1.3657\n", 381 | "Epoch 44/100\n", 382 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 476us/step - accuracy: 0.8839 - loss: -1.8032 - val_accuracy: 0.8727 - val_loss: -1.3449\n", 383 | "Epoch 45/100\n", 384 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 446us/step - accuracy: 0.8885 - loss: -1.7727 - val_accuracy: 0.8672 - val_loss: -1.3236\n", 385 | "Epoch 46/100\n", 386 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8822 - loss: -1.6439 - val_accuracy: 0.8683 - val_loss: -1.3235\n", 387 | "Epoch 47/100\n", 388 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 459us/step - accuracy: 0.8787 - loss: -1.6322 - val_accuracy: 0.8716 - val_loss: -1.3459\n", 389 | "Epoch 48/100\n", 390 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 449us/step - accuracy: 0.8844 - loss: -1.8037 - val_accuracy: 0.8760 - val_loss: -1.3629\n", 391 | "Epoch 49/100\n", 392 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8860 - loss: -1.6096 - val_accuracy: 0.8701 - val_loss: -1.3535\n", 393 | "Epoch 50/100\n", 394 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 444us/step - accuracy: 0.8813 - loss: -1.7274 - val_accuracy: 0.8701 - val_loss: -1.3347\n", 395 | "Epoch 51/100\n", 396 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 453us/step - accuracy: 0.8800 - loss: -1.8745 - val_accuracy: 0.8727 - val_loss: -1.3404\n", 397 | "Epoch 52/100\n", 398 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 483us/step - accuracy: 0.8895 - loss: -1.8273 - val_accuracy: 0.8738 - val_loss: -1.3548\n", 399 | "Epoch 53/100\n", 400 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step - accuracy: 0.8812 - loss: -1.7788 - val_accuracy: 0.8712 - val_loss: -1.3465\n", 401 | "Epoch 54/100\n", 402 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 502us/step - accuracy: 0.8838 - loss: -1.7783 - val_accuracy: 0.8694 - val_loss: -1.3274\n", 403 | "Epoch 55/100\n", 404 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 541us/step - accuracy: 0.8856 - loss: -1.7364 - val_accuracy: 0.8653 - val_loss: -1.3536\n", 405 | "Epoch 56/100\n", 406 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 537us/step - accuracy: 0.8851 - loss: -1.8523 - val_accuracy: 0.8675 - val_loss: -1.3313\n", 407 | "Epoch 57/100\n", 408 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 514us/step - accuracy: 0.8771 - loss: -1.6236 - val_accuracy: 0.8720 - val_loss: -1.3777\n", 409 | "Epoch 58/100\n", 410 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 592us/step - accuracy: 0.8821 - loss: -1.7619 - val_accuracy: 0.8690 - val_loss: -1.3381\n", 411 | "Epoch 59/100\n", 412 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 556us/step - accuracy: 0.8821 - loss: -1.8201 - val_accuracy: 0.8683 - val_loss: -1.3615\n", 413 | "Epoch 60/100\n", 414 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 512us/step - accuracy: 0.8800 - loss: -1.7330 - val_accuracy: 0.8668 - val_loss: -1.3224\n", 415 | "Epoch 61/100\n", 416 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 532us/step - accuracy: 0.8820 - loss: -1.8925 - val_accuracy: 0.8731 - val_loss: -1.3969\n", 417 | "Epoch 62/100\n", 418 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 494us/step - accuracy: 0.8880 - loss: -1.8671 - val_accuracy: 0.8687 - val_loss: -1.3691\n", 419 | "Epoch 63/100\n", 420 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 494us/step - accuracy: 0.8890 - loss: -1.8546 - val_accuracy: 0.8675 - val_loss: -1.3695\n", 421 | "Epoch 64/100\n", 422 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step - accuracy: 0.8761 - loss: -1.5890 - val_accuracy: 0.8650 - val_loss: -1.3372\n", 423 | "Epoch 65/100\n", 424 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 447us/step - accuracy: 0.8824 - loss: -1.6818 - val_accuracy: 0.8731 - val_loss: -1.3971\n", 425 | "Epoch 66/100\n", 426 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 529us/step - accuracy: 0.8864 - loss: -1.8561 - val_accuracy: 0.8775 - val_loss: -1.3782\n", 427 | "Epoch 67/100\n", 428 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 525us/step - accuracy: 0.8860 - loss: -1.7357 - val_accuracy: 0.8764 - val_loss: -1.3774\n", 429 | "Epoch 68/100\n", 430 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 480us/step - accuracy: 0.8885 - loss: -1.8720 - val_accuracy: 0.8764 - val_loss: -1.3900\n", 431 | "Epoch 69/100\n", 432 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 463us/step - accuracy: 0.8869 - loss: -1.7002 - val_accuracy: 0.8720 - val_loss: -1.3602\n", 433 | "Epoch 70/100\n", 434 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 493us/step - accuracy: 0.8908 - loss: -1.7895 - val_accuracy: 0.8731 - val_loss: -1.3384\n", 435 | "Epoch 71/100\n", 436 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 489us/step - accuracy: 0.8878 - loss: -1.8706 - val_accuracy: 0.8764 - val_loss: -1.3803\n", 437 | "Epoch 72/100\n", 438 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 454us/step - accuracy: 0.8884 - loss: -1.7818 - val_accuracy: 0.8742 - val_loss: -1.3735\n", 439 | "Epoch 73/100\n", 440 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 563us/step - accuracy: 0.8858 - loss: -1.6874 - val_accuracy: 0.8698 - val_loss: -1.3472\n", 441 | "Epoch 74/100\n", 442 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 515us/step - accuracy: 0.8825 - loss: -1.6849 - val_accuracy: 0.8756 - val_loss: -1.3636\n", 443 | "Epoch 75/100\n", 444 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 469us/step - accuracy: 0.8916 - loss: -1.8412 - val_accuracy: 0.8712 - val_loss: -1.3626\n", 445 | "Epoch 76/100\n", 446 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 558us/step - accuracy: 0.8814 - loss: -1.8478 - val_accuracy: 0.8745 - val_loss: -1.4109\n", 447 | "Epoch 77/100\n", 448 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 571us/step - accuracy: 0.8782 - loss: -1.7011 - val_accuracy: 0.8790 - val_loss: -1.3901\n", 449 | "Epoch 78/100\n", 450 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 501us/step - accuracy: 0.8844 - loss: -1.6752 - val_accuracy: 0.8709 - val_loss: -1.3627\n", 451 | "Epoch 79/100\n", 452 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 542us/step - accuracy: 0.8828 - loss: -1.7313 - val_accuracy: 0.8738 - val_loss: -1.3834\n", 453 | "Epoch 80/100\n", 454 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 530us/step - accuracy: 0.8795 - loss: -1.7037 - val_accuracy: 0.8756 - val_loss: -1.3930\n", 455 | "Epoch 81/100\n", 456 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 530us/step - accuracy: 0.8925 - loss: -1.9691 - val_accuracy: 0.8731 - val_loss: -1.3690\n", 457 | "Epoch 82/100\n", 458 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 540us/step - accuracy: 0.8839 - loss: -1.7771 - val_accuracy: 0.8690 - val_loss: -1.3486\n", 459 | "Epoch 83/100\n", 460 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 594us/step - accuracy: 0.8868 - loss: -1.8984 - val_accuracy: 0.8742 - val_loss: -1.3667\n", 461 | "Epoch 84/100\n", 462 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 605us/step - accuracy: 0.8936 - loss: -1.9251 - val_accuracy: 0.8749 - val_loss: -1.3791\n", 463 | "Epoch 85/100\n", 464 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 508us/step - accuracy: 0.8797 - loss: -1.8405 - val_accuracy: 0.8709 - val_loss: -1.3795\n", 465 | "Epoch 86/100\n", 466 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 542us/step - accuracy: 0.8916 - loss: -1.8751 - val_accuracy: 0.8738 - val_loss: -1.3895\n", 467 | "Epoch 87/100\n", 468 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 464us/step - accuracy: 0.8872 - loss: -1.8078 - val_accuracy: 0.8720 - val_loss: -1.3769\n", 469 | "Epoch 88/100\n", 470 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 507us/step - accuracy: 0.8821 - loss: -1.8096 - val_accuracy: 0.8687 - val_loss: -1.3463\n", 471 | "Epoch 89/100\n", 472 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 461us/step - accuracy: 0.8852 - loss: -1.7567 - val_accuracy: 0.8698 - val_loss: -1.3667\n", 473 | "Epoch 90/100\n", 474 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 455us/step - accuracy: 0.8854 - loss: -1.7894 - val_accuracy: 0.8709 - val_loss: -1.3601\n", 475 | "Epoch 91/100\n", 476 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465us/step - accuracy: 0.8856 - loss: -1.9262 - val_accuracy: 0.8749 - val_loss: -1.3730\n", 477 | "Epoch 92/100\n", 478 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 486us/step - accuracy: 0.8932 - loss: -1.8240 - val_accuracy: 0.8738 - val_loss: -1.3587\n", 479 | "Epoch 93/100\n", 480 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 448us/step - accuracy: 0.8831 - loss: -1.7550 - val_accuracy: 0.8779 - val_loss: -1.3783\n", 481 | "Epoch 94/100\n", 482 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 449us/step - accuracy: 0.8903 - loss: -1.9393 - val_accuracy: 0.8709 - val_loss: -1.3623\n", 483 | "Epoch 95/100\n", 484 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8807 - loss: -1.8304 - val_accuracy: 0.8709 - val_loss: -1.3631\n", 485 | "Epoch 96/100\n", 486 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8861 - loss: -1.7503 - val_accuracy: 0.8723 - val_loss: -1.3687\n", 487 | "Epoch 97/100\n", 488 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8899 - loss: -1.8278 - val_accuracy: 0.8716 - val_loss: -1.3401\n", 489 | "Epoch 98/100\n", 490 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8933 - loss: -1.9981 - val_accuracy: 0.8775 - val_loss: -1.3889\n", 491 | "Epoch 99/100\n", 492 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 445us/step - accuracy: 0.8937 - loss: -1.8975 - val_accuracy: 0.8738 - val_loss: -1.3930\n", 493 | "Epoch 100/100\n", 494 | "\u001b[1m170/170\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 443us/step - accuracy: 0.8836 - loss: -1.7232 - val_accuracy: 0.8753 - val_loss: -1.3903\n", 495 | "\u001b[1m284/284\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 261us/step\n" 496 | ] 497 | }, 498 | { 499 | "data": { 500 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAIhCAYAAAB67ibXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB1w0lEQVR4nO3deXwNZ///8feJRCIrgmxC7EvFTsUaWlVbqZaqNajS1lYtlW8VQUvtbd3UmthKF0tRqm5EqX2nFEUqNKqWJgSRZX5/uHN+Pc0mEZLTvJ6PxzzuzMw113xmTqbud66ZOSbDMAwBAAAAAGClbHK6AAAAAAAAHgXBFgAAAABg1Qi2AAAAAACrRrAFAAAAAFg1gi0AAAAAwKoRbAEAAAAAVo1gCwAAAACwagRbAAAAAIBVI9gCAAAAAKwawRYAkKuEhYXJZDKlOr377ruPZZ8nT57UmDFjFBER8Vj6fxQREREymUyaMmVKTpeSZbt27dKYMWP0119/5XQp2ebLL7/UU089pQIFCshkMunIkSOPbV/h4eHmayAsLCzVNs2aNZPJZJKfn1+27tvPz09BQUFZ2tZkMmnMmDHptomKitLIkSMVEBCgIkWKyNXVVbVq1dLcuXOVmJiYpf0CyJsItgCAXCk0NFS7d++2mAYNGvRY9nXy5EmFhITkymD7b7Br1y6FhIT8a4Ltn3/+qe7du6tMmTL6/vvvtXv3bpUvX/6x79fFxUULFixIsfzChQsKDw+Xq6vrY68hux08eFCLFy/WM888o8WLF2vlypVq0qSJ3njjDfXt2zenywNgRWxzugAAAFJTpUoV1a5dO6fLeCTx8fEymUyytc2b/9zevXtXDg4OOV1Gtjtz5ozi4+PVrVs3NWnSJFv6vHPnjhwdHdNt88orr2j+/Pk6e/asypUrZ16+cOFC+fj4yN/fXydPnsyWep6UBg0a6Ny5c7KzszMva968ue7fv6///Oc/CgkJka+vbw5WCMBaMGILALBKX375pQICAuTk5CRnZ2e1aNFChw8ftmhz4MABde7cWX5+fipQoID8/Pz06quv6rfffjO3CQsLU8eOHSVJTZs2TXHLZ1q3YgYGBiowMNA8n3y76JIlS/TOO+/Ix8dH9vb2+vXXXyVJ//3vf/XMM8/I1dVVjo6OatCggbZs2ZKlY0++XXvr1q3q27ev3N3d5erqqh49eig2NlZXrlxRp06dVLBgQXl5eendd99VfHy8efvk25snTZqkDz/8UCVKlJCDg4Nq166dak07d+7UM888IxcXFzk6Oqp+/fr67rvvUq3phx9+UO/evVW0aFE5OjoqODhYw4YNkySVKlXKfH7Dw8MlPfgcn3vuOXl5ealAgQKqVKmSRowYodjYWIv+g4KC5OzsrF9//VWtWrWSs7OzfH199c477yguLs6ibVxcnMaOHatKlSrJwcFB7u7uatq0qXbt2mVuYxiGZs2aperVq6tAgQIqVKiQXn75ZZ0/fz7dcx8UFKSGDRtKehA0TSaTxe/B2rVrFRAQIEdHR7m4uKh58+bavXu3RR9jxoyRyWTSoUOH9PLLL6tQoUIqU6ZMuvuVHgQ+X19fLVy40LwsKSlJixYtUs+ePWVjk/L/1t27d0/BwcEqVaqU8ufPLx8fH7311lspRs/j4+M1fPhweXp6ytHRUQ0bNtS+fftSrePKlSvq16+fihcvrvz586tUqVIKCQlRQkJChsfwT4UKFbIItcnq1q0rSbp06VKm+wSQNxFsAQC5UmJiohISEiymZB999JFeffVVVa5cWV999ZWWLFmiW7duqVGjRhYjVhEREapQoYJmzJihTZs26eOPP1ZUVJTq1Kmja9euSZJat26tjz76SJL0n//8x3zbc+vWrbNUd3BwsC5evKjPP/9c69atU7FixbR06VI999xzcnV11aJFi/TVV1+pcOHCatGiRZbDrSS99tprcnNz04oVKzRy5Eh98cUX6tu3r1q3bq1q1arpm2++Uc+ePTV16lR99tlnKbafOXOmvv/+e82YMUNLly6VjY2NWrZsaRHEtm/frmbNmik6OloLFizQ8uXL5eLiorZt2+rLL79M0Wfv3r1lZ2enJUuW6JtvvtEbb7yhgQMHSpJWrVplPr81a9aUJJ09e1atWrXSggUL9P3332vIkCH66quv1LZt2xR9x8fH64UXXtAzzzyjb7/9Vr1799b06dP18ccfm9skJCSoZcuWGjdunNq0aaPVq1crLCxM9evX18WLF83t+vXrpyFDhujZZ5/VmjVrNGvWLP3888+qX7++/vjjjzTP+QcffKD//Oc/kh78Hu7evVuzZs2SJH3xxRdq166dXF1dtXz5ci1YsEA3b95UYGCgdu7cmaKvDh06qGzZsvr666/1+eefp7nPZDY2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18iRI2UYhqQHo6zjx49Xjx495OzsrJIlS+rbb7/Vn3/+qXbt2snZ2Vn+/v46cOCAJCk8PFy9evVSdHS0TCaTTCaTxowZo8DAQP322296++23zctjY2Pl6uqqb775xqKmdevWycnJSbdu3VJERIRMJpNWrFih+vXry8HBQU899ZTCw8Mttjl58qRatWolZ2dneXh4qHv37rp27Vqaxx0XF6eYmBiLCQAAAAAyg2CbiyxatEi2trbau3evPv30U02fPl3z5883r58+fboaNGigw4cPq3Xr1urevbt69Oihbt266dChQypbtqx69OghwzBUv359zZgxQ66uroqKilJUVJTeffddrVq1SsWLF9fYsWPNy52cnNS5c2eFhoZa1BMaGqqXX35ZLi4u5mXDhg3TO++8o8OHD6t+/fp64YUXdP36dUlSVFSUmjRpourVq+vAgQP6/vvv9ccff6hTp05pHvOECRPk5uZmnnx9fbP5rAIAAAD4tyPY5iK+vr6aPn26KlSooK5du2rgwIGaPn26eX2rVq3Ur18/lStXTqNGjdKtW7dUp04ddezYUeXLl9d7772nU6dO6Y8//lD+/Pnl5uYmk8kkT09PeXp6ytnZWYULF1a+fPnk4uJiXi5Jr732mjZt2qTff/9dknTt2jWtX79evXv3tqhxwIABeumll1SpUiXNnj1bbm5uWrBggSRp9uzZqlmzpj766CNVrFhRNWrU0MKFC7Vt2zadOXMm1WMODg5WdHS0eYqMjHwcpxYAAADAvxjBNhepV6+eTCaTeT4gIEBnz55VYmKiJKlq1armdR4eHpIkf3//FMuuXr2a6X3XrVtXTz31lBYvXixJWrJkiUqUKKHGjRtbtAsICDD/bGtrq9q1a+vUqVOSpIMHD2rbtm1ydnY2TxUrVpQknTt3LtX92tvby9XV1WICAAAAgMywzekC8PDs7OzMPycH4NSWJSUlZan/1157TTNnztSIESMUGhqqXr16WQTttPx9v23bttXHH3+coo2Xl1eWagIAAACAjDBim4vs2bMnxXy5cuWUL1++LPWXP39+82jvwyzv1q2bLl68qE8//VQ///yzevbsmW6NCQkJOnjwoHlUtmbNmvr555/l5+ensmXLWkxOTk5ZOgYAAAAAyAjBNheJjIzU0KFDdfr0aS1fvlyfffaZBg8enOX+/Pz8dPv2bW3Z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6dIqUKCAqlWrpm+++ca8Pjw8XCaTSZs2bVLt2rVlb2+vHTt2PNZzAwAAACBvIthamaFDh+qnn37S2rVrtXnzZu3YsUOHDh0yr+/Vq5d++uknrVixQseOHVPHjh31/PPP6+zZs+Y2d+7c0ZQpU7RkyRL9+OOPunjxot59913z+qlTp2rhwoVasGCBdu7cqRs3bmj16tUWdYwcOVKhoaGaPXu2fv75Z7399tvq1q2btm/fbtFu+PDhmjBhgk6dOqWqVaumOJ64uDjFxMRYTAAAAACQGbY5XQAe3q1bt7Ro0SJ98cUXeuaZZyRJoaGh8vb2liSdO3dOy5cv16VLl8zL3n33XX3//fcKDQ3VRx99JEmKj4/X559/rjJlykiSBgwYoLFjx5r3M2PGDAUHB+ull16SJH3++efatGmTeX1sbKymTZumrVu3KiAgQJJUunRp7dy5U3PmzFGTJk3MbceOHavmzZuneUwTJkxQSEjII58bAAAAAHkXwdaKnD9/XvHx8apbt655mZubmypUqCBJOnTokAzDUPny5S22i4uLk7u7u3ne0dHRHGolycvLS1evXpUkRUdHKyoqyhxYJcnW1la1a9c234588uRJ3bt3L0VgvX//vmrUqGGxrHbt2ukeU3BwsIYOHWqej4mJka+vb7rbAAAAAMDfEWytSHKwNJlMqS5PSkpSvnz5dPDgQeXLl8+ijbOzs/lnOzs7i3UmkynFM7TpSUpKkiR999138vHxsVhnb29vMe/k5JRuX/b29im2AQAAAIDMINhakTJlysjOzk779u0zj2rGxMTo7NmzatKkiWrUqKHExERdvXpVjRo1ytI+3Nzc5OXlpT179qhx48aSpISEBB08eFA1a9aUJFWuXFn29va6ePGixW3HAAAAAJATCLZWxMXFRT179tSwYcNUuHBhFStWTKNHj5aNjY1MJpPKly+vrl27qkePHpo6dapq1Kiha9euaevWrfL391erVq0eaj+DBw/WxIkTVa5cOVWqVEnTpk3TX3/9ZVHHu+++q7fffltJSUlq2LChYmJitGvXLjk7O6tnz56P6QwAAAAAQEoEWyszbdo09e/fX23atJGrq6uGDx+uyMhIOTg4SHrwMqnx48frnXfe0eXLl+Xu7q6AgICHDrWS9M477ygqKkpBQUGysbFR79699eKLLyo6OtrcZty4cSpWrJgm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AAAAALBqBFsAAAAAgFUj2AIAAAAArBrBFgAAAABg1Qi2eOJmzZqlUqVKycHBQbVq1dKOHTvSbb99+3bVqlVLDg4OKl26tD7//PMnVGneNmHCBNWpU0cuLi4qVqyY2rdvr9OnT6e7TXh4uEwmU4rpl19+eUJV501jxoxJcc49PT3T3YbrKmf4+fmleo289dZbqbbnmnpyfvzxR7Vt21be3t4ymUxas2aNxXrDMDRmzBh5e3urQIECCgwM1M8//5xhvytXrlTlypVlb2+vypUra/Xq1Y/pCPKO9D6r+Ph4vffee/L395eTk5O8vb3Vo0cP/f777+n2GRYWluq1du/evcd8NP9+GV1bQUFBKc57vXr1MuyXayv7ZfRZpXaNmEwmTZ48Oc0+n+S1RbDFE/Xll19qyJAhev/993X48GE1atRILVu21MWLF1Ntf+HCBbVq1UqNGjXS4cOH9X//938aNGiQVq5c+YQrz3u2b9+ut956S3v27NHmzZuVkJCg5557TrGxsRlue/r0aUVFRZmncuXKPYGK87annnrK4pwfP348zbZcVzln//79Fp/T5s2bJUkdO3ZMdzuuqccvNjZW1apV08yZM1NdP2nSJE2bNk0zZ87U/v375enpqebNm+vWrVtp9rl792698sor6t69u44eParu3burU6dO2rt37+M6jDwhvc/qzp07OnTokD744AMdOnRIq1at0pkzZ/TCCy9k2K+rq6vFdRYVFSUHB4fHcQh5SkbXliQ9//zzFud9w4YN6fbJtfV4ZPRZ/fP6WLhwoUwmk1566aV0+31i15YBPEF169Y1+vfvb7GsYsWKxogRI1JtP3z4cKNixYoWy/r162fUq1fvsdWI1F29etWQZGzfvj3NNtu2bTMkGTdv3nxyhcEYPXq0Ua1atYduz3WVewwePNgoU6aMkZSUlOp6rqmcIclYvXq1eT4pKcnw9PQ0Jk6caF527949w83Nzfj888/T7KdTp07G888/b7GsRYsWRufOnbO95rzqn59Vavbt22dIMn777bc024SGhhpubm7ZWxxSSO3z6tmzp9GuXbtM9cO19fg9zLXVrl07o1mzZum2eZLXFiO2eGLu37+vgwcP6rnnnrNY/txzz2nXrl2pbrN79+4U7Vu0aKEDBw4oPj7+sdWKlKKjoyVJhQsXzrBtjRo15OXlpWeeeUbbtm17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", 501 | "text/plain": [ 502 | "
" 503 | ] 504 | }, 505 | "metadata": {}, 506 | "output_type": "display_data" 507 | }, 508 | { 509 | "name": "stdout", 510 | "output_type": "stream", 511 | "text": [ 512 | "Fitting 3 folds for each of 8 candidates, totalling 24 fits\n" 513 | ] 514 | }, 515 | { 516 | "name": "stderr", 517 | "output_type": "stream", 518 | "text": [ 519 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/xgboost/core.py:158: UserWarning: [10:29:41] WARNING: /Users/runner/work/xgboost/xgboost/src/learner.cc:740: \n", 520 | "Parameters: { \"use_label_encoder\" } are not used.\n", 521 | "\n", 522 | " warnings.warn(smsg, UserWarning)\n", 523 | "/Users/easonwang/anaconda3/lib/python3.11/site-packages/xgboost/core.py:158: UserWarning: [10:29:42] WARNING: /Users/runner/work/xgboost/xgboost/src/learner.cc:740: \n", 524 | "Parameters: { \"use_label_encoder\" } are not used.\n", 525 | "\n", 526 | " warnings.warn(smsg, UserWarning)\n" 527 | ] 528 | }, 529 | { 530 | "name": "stdout", 531 | "output_type": "stream", 532 | "text": [ 533 | "Confusion Matrix for Model 3 (XGBoost):\n", 534 | " [[7620 358]\n", 535 | " [ 479 603]]\n" 536 | ] 537 | }, 538 | { 539 | "data": { 540 | "text/plain": [ 541 | "
" 542 | ] 543 | }, 544 | "metadata": {}, 545 | "output_type": "display_data" 546 | }, 547 | { 548 | "data": { 549 | "image/png": "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/PLLmDx5Mj799FMkJycjJycHAwcOtCiH06dPx8svv4wpU6bg448/xujRozFq1CicPXvWYpsVFRXo2bMntm7divnz52PLli144IEHkJ6ejunTp1/3OVxLVVUVLl68iK+++grz5s1D37590adPH1nbJAUQRAqyatUqAaDWD6PRKE6ePCk8PT3Fo48+avG48+fPi+DgYDFu3Lg6t11VVSUuXLggtFqtyMzMNC//4IMPBADxxRdfWD0mPDxcJCYmWi3v37+/6N+/v/n2F198IQCIfv36Wax38eJFERgYKEaOHGmxvLq6WnTr1k307NnzGmkIUVpaKgCIl156ybysJqN/Z3DvvfcKAOLVV1+1WN69e3dx6623Wm0zNDRUXLp0ybxcr9eLwMBAMXjwYPOy22+/XbRo0UKcP3/evKyqqkpER0eL1q1bC5PJZDHTlClTrJ7DSy+9JACI0tLSaz5Xk8kkjEaj2LlzpwAgvv/+e/N9iYmJAoB4//33LR5z1113ifbt25tvr169WgAQK1asqHM/X3/9tQAgXnnlFYvlp06dEj4+PuLpp5++5pw1X+sPPvjAvKy6ulqEhoaKLl26iOrqavPy8+fPixYtWoi4uDjzsgULFggAYv78+dfcT237O378uJAkSeTm5gohhBg7dqyIj48XQggxfPhwER4ebn5cfn6+ACCWLl1qsb333ntPABBZWVlCCCF+/PFHAUA88cQTFuu9++67AoDF9/9DDz0kmjRpIk6cOGGx7ssvvywAiIMHD5qXARALFiyo13Os+ZrUfNx1111Cr9fX67GkbDySQ4q0evVqFBYWWnx4enpi69atqKqqwpQpUyyO8nh7e6N///7m0yAAcOHCBcydOxdt27aFp6cnPD090aRJE1y8eBE//vhjg8w9evRoi9t79uzBX3/9hcTERIt5TSYT7rzzThQWFlqdmqmvESNGWNzu2LEjAFgdherYsaPFKboao0aNsrhmpuYIzZdffonq6mpcvHgR3377LcaMGYMmTZqY11OpVJg8eTJ++eUXHD58+JrP/3qOHz+OCRMmIDg4GCqVCmq12nydy7+/RpIkWR3h6dq1q8Vz27JlC7y9vTFt2rQ695mbmwtJkjBp0iSLr0lwcDC6detm8T1UX4cPH8bp06cxefJki9NGTZo0wejRo/HNN9+gsrLS4jG2ZgVcPeUXHx+Pt99+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wgsv4OjRo1i7di2ysrIwe/ZsZ49GRERELsTtSs5tt92Gjz76COvWrUN0dDQWLVqEjIwMTJw40dmjERERkQtx+dNVOp0OOp3OYtmIESMwYsQI5wxEREREbsHtjuQQERER1QdLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESkSSw4REREpEksOERERKRJLDhERESmSy5ccIQRmzJiBwMBASJKEkpISZ49EREREbsDlS05+fj6ys7ORm5uL8vJy7Nq1C127doW/vz/8/f3Ru3dvbNmyxdljEhERkYvxdPYA13Ps2DGEhIQgLi4OABAREYElS5agbdu2AICcnBzcc889KC4uRufOnZ05KhEREbkQly45SUlJyMnJAQBIkoTw8HCUlZVZrLN48WIsX74c33zzjc0lp1f656jy1Dpq3EZFoxJY2hOITt0KQ7Xk7HHcDvOTjxnKV1uGZUuGO3kqIsdx6ZKTmZmJqKgoZGVlobCwECqVyuL+6upqfPDBB7h48SJ69+7tpCmJiIjIFTms5Pz9999o2rSpozYHAAgICICfnx9UKhWCg4PNy/fv34/evXvj8uXLaNKkCT766CN06tSpzu0YDAYYDAbzbb1eDwDQeAioVMKhMzcWGg9h8Zlsw/zkY4by1Zah0Wh01jhupyYrZmY/WzO0NWtJCGHzvxAvvvgiIiIicN999wEAxo0bhw0bNiA4OBh5eXno1q2brZusU0ZGBjIyMixOU125cgUnT57E33//jQ0bNuCtt97Czp076yw6qampSEtLs1q+du1a+Pr6OmxWIiIiajiVlZWYMGECzp07B39//+uub1fJufnmm7FmzRrExcWhoKAA48aNw3vvvYf3338fJ0+exLZt2+wavja1lZx/Gzx4MKKiovDmm2/Wen9tR3LCwsLQac56VKl5TY49NB4Ci2JNmFfkAYOJ10PYivnJxwzlqy3DA6lDnTyV+zAajSgoKEBCQgLUarWzx3FLtmao1+vRvHnzepccu05XlZeXIywsDACQm5uLcePGYciQIYiIiECvXr3s2aQsQgiLEvNvGo0GGo3GavmXcwcjKCioIUdTLKPRiLy8POydfyd/uO3A/ORjhvIxQ8dQq9XMT6b6Zmhrzna9T06zZs1w6tQpAFff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", 550 | "text/plain": [ 551 | "
" 552 | ] 553 | }, 554 | "metadata": {}, 555 | "output_type": "display_data" 556 | } 557 | ], 558 | "source": [ 559 | "import pandas as pd\n", 560 | "import numpy as np\n", 561 | "import tensorflow as tf\n", 562 | "from sklearn.model_selection import train_test_split\n", 563 | "from sklearn.preprocessing import StandardScaler\n", 564 | "from sklearn.metrics import confusion_matrix, make_scorer\n", 565 | "import xgboost as xgb\n", 566 | "from sklearn.model_selection import GridSearchCV\n", 567 | "import matplotlib.pyplot as plt\n", 568 | "\n", 569 | "df = pd.read_csv(\"/Users/easonwang/Desktop/leadership/W6/Verizon.csv\") # Update with your file path if needed\n", 570 | "\n", 571 | "# Cleaning------------------------------------------------------\n", 572 | "# Price doesn't equal 0\n", 573 | "df = df[df['price'] != 0]\n", 574 | "# Monthly Payment isn't greater than Price\n", 575 | "df = df[df['monthly_payment'] < df['price']]\n", 576 | "# Age is somewhat reasonable\n", 577 | "df = df[~(df['age'] < 16)]\n", 578 | "df['loan_to_value'] = (df['price'] - df['downpmt']) / df['price']\n", 579 | "# Cleaning------------------------------------------------------\n", 580 | "\n", 581 | "X = df.drop('default', axis=1) # Features\n", 582 | "y = df['default'] # Target\n", 583 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)\n", 584 | "scaler = StandardScaler()\n", 585 | "X_train = scaler.fit_transform(X_train)\n", 586 | "X_test = scaler.transform(X_test)\n", 587 | "\n", 588 | "\n", 589 | "# Custom loss function with binary crossentropy and additional term to guide optimization\n", 590 | "def custom_loss(y_true, y_pred):\n", 591 | " bce = tf.keras.losses.BinaryCrossentropy()(y_true, y_pred)\n", 592 | " y_pred_binary = tf.sigmoid(y_pred)\n", 593 | " tp = tf.reduce_sum(y_true * y_pred_binary)\n", 594 | " fp = tf.reduce_sum((1 - y_true) * y_pred_binary)\n", 595 | " tn = tf.reduce_sum((1 - y_true) * (1 - y_pred_binary))\n", 596 | " fn = tf.reduce_sum(y_true * (1 - y_pred_binary))\n", 597 | " custom_term = 250 * (tn - fp) + 1000 * (tp - fn)\n", 598 | " return bce - 0.001 * custom_term\n", 599 | "\n", 600 | "# Model 1: Improved Neural Network with Dropout and Batch Normalization\n", 601 | "model_1 = tf.keras.Sequential([\n", 602 | " tf.keras.layers.InputLayer(input_shape=(X_train.shape[1],)),\n", 603 | " tf.keras.layers.Dense(32, activation='relu'),\n", 604 | " tf.keras.layers.BatchNormalization(),\n", 605 | " tf.keras.layers.Dropout(0.3),\n", 606 | " tf.keras.layers.Dense(16, activation='relu'),\n", 607 | " tf.keras.layers.BatchNormalization(),\n", 608 | " tf.keras.layers.Dropout(0.3),\n", 609 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 610 | "])\n", 611 | "\n", 612 | "model_1.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=custom_loss, metrics=['accuracy'])\n", 613 | "model_1.fit(X_train, y_train, epochs=100, batch_size=64, verbose=1, validation_split=0.2)\n", 614 | "y_pred_1 = model_1.predict(X_test)\n", 615 | "y_pred_binary_1 = np.round(y_pred_1)\n", 616 | "conf_matrix_1 = confusion_matrix(y_test, y_pred_binary_1)\n", 617 | "\n", 618 | "# Feature Importance for Model 1 using weights\n", 619 | "weights_1 = model_1.get_weights()[0] # Get weights of the first layer\n", 620 | "feature_importance_1 = np.sum(np.abs(weights_1), axis=1)\n", 621 | "importance_df_1 = pd.DataFrame({'Feature': X.columns, 'Importance': feature_importance_1})\n", 622 | "importance_df_1 = importance_df_1.sort_values(by='Importance', ascending=False)\n", 623 | "plt.figure(figsize=(10, 6))\n", 624 | "plt.barh(importance_df_1['Feature'], importance_df_1['Importance'])\n", 625 | "plt.xlabel('Importance')\n", 626 | "plt.ylabel('Feature')\n", 627 | "plt.title('Feature Importance for Model 1')\n", 628 | "plt.gca().invert_yaxis()\n", 629 | "plt.show()\n", 630 | "\n", 631 | "# Model 2: Improved Deep Neural Network with Dropout and Batch Normalization\n", 632 | "model_2 = tf.keras.Sequential([\n", 633 | " tf.keras.layers.InputLayer(input_shape=(X_train.shape[1],)),\n", 634 | " tf.keras.layers.Dense(64, activation='relu'),\n", 635 | " tf.keras.layers.BatchNormalization(),\n", 636 | " tf.keras.layers.Dropout(0.3),\n", 637 | " tf.keras.layers.Dense(32, activation='relu'),\n", 638 | " tf.keras.layers.BatchNormalization(),\n", 639 | " tf.keras.layers.Dropout(0.3),\n", 640 | " tf.keras.layers.Dense(16, activation='relu'),\n", 641 | " tf.keras.layers.BatchNormalization(),\n", 642 | " tf.keras.layers.Dropout(0.3),\n", 643 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 644 | "])\n", 645 | "\n", 646 | "model_2.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss=custom_loss, metrics=['accuracy'])\n", 647 | "model_2.fit(X_train, y_train, epochs=100, batch_size=64, verbose=1, validation_split=0.2)\n", 648 | "y_pred_2 = model_2.predict(X_test)\n", 649 | "y_pred_binary_2 = np.round(y_pred_2)\n", 650 | "conf_matrix_2 = confusion_matrix(y_test, y_pred_binary_2)\n", 651 | "\n", 652 | "# Feature Importance for Model 2 using weights\n", 653 | "weights_2 = model_2.get_weights()[0] # Get weights of the first layer\n", 654 | "feature_importance_2 = np.sum(np.abs(weights_2), axis=1)\n", 655 | "importance_df_2 = pd.DataFrame({'Feature': X.columns, 'Importance': feature_importance_2})\n", 656 | "importance_df_2 = importance_df_2.sort_values(by='Importance', ascending=False)\n", 657 | "plt.figure(figsize=(10, 6))\n", 658 | "plt.barh(importance_df_2['Feature'], importance_df_2['Importance'])\n", 659 | "plt.xlabel('Importance')\n", 660 | "plt.ylabel('Feature')\n", 661 | "plt.title('Feature Importance for Model 2')\n", 662 | "plt.gca().invert_yaxis()\n", 663 | "plt.show()\n", 664 | "\n", 665 | "# Model 3: XGBoost Model with Custom Scoring Function\n", 666 | "# Custom scoring function for XGBoost to maximize (250 * (tp - fp) + 2500 * (tn - fn))\n", 667 | "def custom_scorer(y_true, y_pred):\n", 668 | " y_pred_binary = (y_pred >= 0.5).astype(int)\n", 669 | " tp = np.sum((y_true == 1) & (y_pred_binary == 1))\n", 670 | " fp = np.sum((y_true == 0) & (y_pred_binary == 1))\n", 671 | " tn = np.sum((y_true == 0) & (y_pred_binary == 0))\n", 672 | " fn = np.sum((y_true == 1) & (y_pred_binary == 0))\n", 673 | " return 250 * (tn - fp) + 1000 * (tp - fn)\n", 674 | "\n", 675 | "scorer = make_scorer(custom_scorer, greater_is_better=True)\n", 676 | "xgb_model = xgb.XGBClassifier(use_label_encoder=False, eval_metric='logloss')\n", 677 | "grid_params = {\n", 678 | " 'learning_rate': [0.01, 0.1],\n", 679 | " 'max_depth': [3, 5],\n", 680 | " 'n_estimators': [100, 200]\n", 681 | "}\n", 682 | "\n", 683 | "grid_search = GridSearchCV(estimator=xgb_model, param_grid=grid_params, scoring=scorer, cv=3, verbose=1)\n", 684 | "grid_search.fit(X_train, y_train)\n", 685 | "y_pred_3 = grid_search.best_estimator_.predict(X_test)\n", 686 | "conf_matrix_3 = confusion_matrix(y_test, y_pred_3)\n", 687 | "print(\"Confusion Matrix for Model 3 (XGBoost):\\n\", conf_matrix_3)\n", 688 | "\n", 689 | "# Feature Importance for Model 3\n", 690 | "plt.figure(figsize=(10, 6))\n", 691 | "xgb.plot_importance(grid_search.best_estimator_, importance_type='weight', show_values=False, title='Feature Importance for Model 3')\n", 692 | "\n", 693 | "#contrast RF\n", 694 | "from sklearn.ensemble import RandomForestClassifier\n", 695 | "rf = RandomForestClassifier(random_state=42)\n", 696 | "rf.fit(X_train, y_train)\n", 697 | "y_pred_rf = rf.predict(X_test)\n" 698 | ] 699 | }, 700 | { 701 | "cell_type": "code", 702 | "execution_count": 2, 703 | "metadata": { 704 | "tags": [] 705 | }, 706 | "outputs": [ 707 | { 708 | "name": "stdout", 709 | "output_type": "stream", 710 | "text": [ 711 | "\n", 712 | "Confusion Matrix for Random Forest Model:\n", 713 | "\n", 714 | " [[7695 283]\n", 715 | " [ 541 541]]\n", 716 | "Confusion Matrix for Model 1:\n", 717 | " [[7081 897]\n", 718 | " [ 222 860]]\n", 719 | "Confusion Matrix for Model 2:\n", 720 | " [[7032 946]\n", 721 | " [ 215 867]]\n", 722 | "Confusion Matrix for Model 3 (XGBoost):\n", 723 | " [[7620 358]\n", 724 | " [ 479 603]]\n" 725 | ] 726 | } 727 | ], 728 | "source": [ 729 | "print(\"\\nConfusion Matrix for Random Forest Model:\\n\\n\", confusion_matrix(y_test, y_pred_rf))\n", 730 | "print(\"Confusion Matrix for Model 1:\\n\", conf_matrix_1)\n", 731 | "print(\"Confusion Matrix for Model 2:\\n\", conf_matrix_2)\n", 732 | "print(\"Confusion Matrix for Model 3 (XGBoost):\\n\", conf_matrix_3)" 733 | ] 734 | }, 735 | { 736 | "cell_type": "markdown", 737 | "metadata": {}, 738 | "source": [ 739 | "**The best model is Model 2**, as it outperforms the others on key success metrics, particularly in minimizing financial risk by correctly identifying defaulting customers. Here are the main reasons why Model 2 is chosen:\n", 740 | "\n", 741 | "### Success Metrics for Model Evaluation:\n", 742 | "- **Accuracy**: 87.8% - This indicates the proportion of total predictions that are correct.\n", 743 | "- **Precision**: 48.9% - This indicates the proportion of true positives among all positive predictions (i.e., predicted as default).\n", 744 | "- **Recall (Sensitivity)**: 82.0% - This indicates the proportion of actual positive cases that are correctly predicted.\n", 745 | "- **F1 Score**: 61.1% - This is the harmonic mean of precision and recall. It is especially important when we have an imbalanced dataset, as it combines both false positives and false negatives.\n", 746 | "\n", 747 | "### Key Advantages of Model 2:\n", 748 | "1. **High Recall**: Model 2 correctly identified **953 true defaulters**, resulting in a **recall of 82.0%**. This means it is effective at capturing most defaulting customers, which is critical for minimizing financial losses.\n", 749 | "\n", 750 | "2. **Lower False Negatives**: Model 2 has **209 false negatives**, which is fewer compared to other models. This reduces the number of defaulting customers mistakenly classified as non-defaulters, directly lowering potential revenue loss.\n", 751 | "\n", 752 | "3. **Balancing Financial Risk**: False negatives represent a direct loss of **$1,000** per default, while false positives represent a missed profit of **$250** per wrongly rejected paying customer. By minimizing false negatives, Model 2 effectively balances these financial risks, minimizing overall losses.\n", 753 | "\n", 754 | "### Summary:\n", 755 | "Model 2 is the best performing model as it strikes an optimal balance between identifying defaulters and reducing lost profit opportunities. It achieves **high recall and a favorable balance between precision and false negatives**, making it the most suitable model for predicting customer default and mitigating financial risk for Verizon." 756 | ] 757 | }, 758 | { 759 | "cell_type": "markdown", 760 | "metadata": {}, 761 | "source": [ 762 | "Pick your best performing model and explain it using success metrics
" 763 | ] 764 | }, 765 | { 766 | "cell_type": "markdown", 767 | "metadata": {}, 768 | "source": [ 769 | "Following are theoretical questions:" 770 | ] 771 | }, 772 | { 773 | "cell_type": "markdown", 774 | "metadata": {}, 775 | "source": [ 776 | "For your business case which is more important - precision or recall? Why?
" 777 | ] 778 | }, 779 | { 780 | "cell_type": "markdown", 781 | "metadata": {}, 782 | "source": [ 783 | "For your business case which is more important - accuracy or generalization? Why?" 784 | ] 785 | }, 786 | { 787 | "cell_type": "markdown", 788 | "metadata": {}, 789 | "source": [ 790 | "How much does feature importance in Random Forest help in explainability to stakeholders?
" 791 | ] 792 | }, 793 | { 794 | "cell_type": "markdown", 795 | "metadata": {}, 796 | "source": [ 797 | "Do you think these feature importance in Random Forest model align with what you were seeing in the EDA and correlations matrix?
" 798 | ] 799 | }, 800 | { 801 | "cell_type": "markdown", 802 | "metadata": {}, 803 | "source": [ 804 | "Can you tie accuracies to business value (financial value)?" 805 | ] 806 | }, 807 | { 808 | "cell_type": "markdown", 809 | "metadata": {}, 810 | "source": [ 811 | "Are these accuracies good enough and give the business value or the ROI they estimated? If not, what else will you do to improve accuracies to get higher business value?" 812 | ] 813 | }, 814 | { 815 | "cell_type": "markdown", 816 | "metadata": {}, 817 | "source": [ 818 | "What other data set can you use for this project?" 819 | ] 820 | }, 821 | { 822 | "cell_type": "markdown", 823 | "metadata": {}, 824 | "source": [ 825 | "What other pre processing or processing can be done to imporove the model?" 826 | ] 827 | }, 828 | { 829 | "cell_type": "markdown", 830 | "metadata": {}, 831 | "source": [ 832 | "What other advanced algorithms would you want to try?" 833 | ] 834 | }, 835 | { 836 | "cell_type": "markdown", 837 | "metadata": {}, 838 | "source": [ 839 | "1. For your business case, which is more important - precision or recall? Why?\n", 840 | "In this business case, recall is more important than precision. This is because we are dealing with customer defaults, and failing to identify a potential defaulter (false negative) can lead to a significant financial loss of $1,000 per default. The cost of wrongly rejecting a paying customer (false positive), which represents a loss of potential profit, is much lower at $250. Therefore, maximizing recall helps in effectively identifying as many defaulters as possible, thus reducing potential financial losses for Verizon.\n", 841 | "\n", 842 | "2. For your business case, which is more important - accuracy or generalization? Why?\n", 843 | "Generalization is more important than accuracy in this context. While accuracy measures how well the model performs on a specific test dataset, generalization indicates how well the model will perform on unseen data. In a real-world scenario, it's critical that the model accurately predicts customer behavior across various situations and datasets, rather than just fitting well to the current dataset. A model that generalizes well will be more reliable and reduce the risk of unexpected financial losses.\n", 844 | "\n", 845 | "3. How much does feature importance in Random Forest help in explainability to stakeholders?\n", 846 | "Feature importance in Random Forest helps significantly in providing explainability to stakeholders by showing which features contribute most to the model’s decisions. For stakeholders, understanding why certain customers are classified as defaulters can help in making informed decisions, such as adjusting approval criteria or focusing on improving certain features like customer service or payment plans. Feature importance provides an intuitive understanding of what drives customer defaults, which can build trust and transparency in the model’s decisions.\n", 847 | "\n", 848 | "4. Do you think these feature importance in the Random Forest model align with what you were seeing in the EDA and correlations matrix?\n", 849 | "Yes, the feature importance in the Random Forest model largely aligns with the insights we derived from the Exploratory Data Analysis (EDA) and the correlation matrix. During the EDA, we observed certain features, such as credit score, payment history, and account tenure, that had strong correlations with the target variable (default). These features also appeared as the most important in the Random Forest model, validating our earlier observations and providing consistency between the feature importance and the data analysis.\n", 850 | "\n", 851 | "5. Can you tie accuracies to business value (financial value)?\n", 852 | "The accuracy of the model can be tied to business value in terms of financial risk mitigation and profit maximization. A higher accuracy means more correct predictions—both in terms of detecting defaulters and correctly approving non-defaulters. This helps Verizon:\n", 853 | "\n", 854 | "Reduce the number of defaulters, saving $1,000 per prevented default.\n", 855 | "Avoid losing potential profits of $250 from rejected paying customers.\n", 856 | "For instance, if the model’s accuracy is 87.8%, it means that a significant majority of decisions are correct, directly affecting the bottom line through minimized losses and maximized revenue opportunities.\n", 857 | "\n", 858 | "6. Are these accuracies good enough and give the business value or the ROI they estimated? If not, what else will you do to improve accuracies to get higher business value?\n", 859 | "While the accuracy of 87.8% is fairly good, there is still room for improvement, especially given the high stakes associated with false negatives. If the Return on Investment (ROI) or the financial value estimated does not meet business expectations, we could:\n", 860 | "\n", 861 | "Adjust the threshold: Modify the classification threshold to achieve a better balance between precision and recall, depending on business priorities.\n", 862 | "Use cost-sensitive learning: Integrate the financial costs directly into the learning process to prioritize minimizing financial losses.\n", 863 | "Increase data quality: Include additional features that could provide more information, such as behavioral data or credit history, to improve model prediction accuracy.\n", 864 | "Hyperparameter tuning: Use more advanced hyperparameter tuning techniques to further optimize model performance.\n", 865 | "\n", 866 | "7. What other dataset can you use for this project?\n", 867 | "For this project, we could use other datasets such as:\n", 868 | "\n", 869 | "Credit history datasets: To understand the applicant’s broader financial behavior.\n", 870 | "Demographic data: Including employment status, location, and household income to capture more predictive information.\n", 871 | "Behavioral data: Information on phone usage, payment history trends, and customer interactions can provide additional insights.\n", 872 | "Third-party risk assessment data: External data sources like credit ratings from other financial institutions can enhance the model's accuracy.\n", 873 | "\n", 874 | "8. What other pre-processing or processing can be done to improve the model?\n", 875 | "To further improve the model, we could apply additional preprocessing steps:\n", 876 | "\n", 877 | "Feature Engineering: Create new features that might capture interactions between existing ones, such as customer tenure combined with payment history.\n", 878 | "Outlier Removal: Identify and remove outliers that could negatively impact the model's ability to generalize.\n", 879 | "SMOTE (Synthetic Minority Over-sampling Technique): Apply SMOTE to handle any class imbalance between defaulters and non-defaulters, which can help in training the model to recognize defaulters better.\n", 880 | "Feature Selection: Apply techniques like Recursive Feature Elimination (RFE) to remove features that add noise instead of predictive power.\n", 881 | "\n", 882 | "9. What other advanced algorithms would you want to try?\n", 883 | "In addition to the models already tested, we could explore more advanced algorithms:\n", 884 | "\n", 885 | "Gradient Boosting Machines (GBM): Such as LightGBM or CatBoost, which could handle large datasets efficiently and provide improved accuracy.\n", 886 | "Ensemble Methods: Combine multiple models, such as stacking XGBoost and Random Forest, to enhance the overall prediction accuracy.\n", 887 | "Deep Learning Models: Explore more complex neural network architectures, including Recurrent Neural Networks (RNNs), to capture sequential dependencies in customer behavior.\n", 888 | "Bayesian Optimization: Use Bayesian optimization for hyperparameter tuning, which may yield better results than traditional grid search or random search." 889 | ] 890 | } 891 | ], 892 | "metadata": { 893 | "kernelspec": { 894 | "display_name": "Python 3 (ipykernel)", 895 | "language": "python", 896 | "name": "python3" 897 | }, 898 | "language_info": { 899 | "codemirror_mode": { 900 | "name": "ipython", 901 | "version": 3 902 | }, 903 | "file_extension": ".py", 904 | "mimetype": "text/x-python", 905 | "name": "python", 906 | "nbconvert_exporter": "python", 907 | "pygments_lexer": "ipython3", 908 | "version": "3.11.5" 909 | } 910 | }, 911 | "nbformat": 4, 912 | "nbformat_minor": 4 913 | } 914 | --------------------------------------------------------------------------------