From 3e2ba790626da01c18150b5ab504a7f6ab7abd24 Mon Sep 17 00:00:00 2001 From: Allllen4a Date: Fri, 1 Nov 2024 17:49:40 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=8B=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=8C=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D0=B9=D0=B5=D1=80=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B3=D1=80=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab_4/lab4.1.ipynb | 2065 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 1775 insertions(+), 290 deletions(-) diff --git a/lab_4/lab4.1.ipynb b/lab_4/lab4.1.ipynb index aef60c3..2f1598d 100644 --- a/lab_4/lab4.1.ipynb +++ b/lab_4/lab4.1.ipynb @@ -53,7 +53,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Определение достижимого уровня качества модели для первой задачи" + "## Определение достижимого уровня качества модели для первой задачи " ] }, { @@ -72,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 221, + "execution_count": 160, "metadata": {}, "outputs": [ { @@ -134,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 161, "metadata": {}, "outputs": [ { @@ -845,7 +845,7 @@ }, { "cell_type": "code", - "execution_count": 223, + "execution_count": 162, "metadata": {}, "outputs": [], "source": [ @@ -934,7 +934,7 @@ }, { "cell_type": "code", - "execution_count": 263, + "execution_count": 163, "metadata": {}, "outputs": [ { @@ -958,53 +958,71 @@ " \n", " \n", " \n", - " numeric__Open\n", - " numeric__High\n", - " numeric__Low\n", - " numeric__Adj Close\n", - " numeric__Volume\n", + " Close\n", + " Open\n", + " Adj Close\n", + " High\n", + " Low\n", + " Volume\n", + " above_average_volume\n", + " volatility\n", " \n", " \n", " \n", " \n", - " 2484\n", - " -0.717267\n", - " -0.718936\n", - " -0.721563\n", - " -0.700283\n", - " -0.304340\n", + " 7159\n", + " 2.052122\n", + " 2.047553\n", + " 2.057055\n", + " 2.035800\n", + " 2.068394\n", + " -1.046507\n", + " -0.733850\n", + " 0.700004\n", " \n", " \n", - " 1576\n", - " -0.835490\n", - " -0.835755\n", - " -0.834432\n", - " -0.792049\n", - " 1.970579\n", + " 4505\n", + " -0.493609\n", + " -0.482248\n", + " -0.509368\n", + " -0.485819\n", + " -0.493841\n", + " 0.708938\n", + " 1.362677\n", + " 0.575000\n", " \n", " \n", - " 6595\n", - " 0.665106\n", - " 0.687359\n", - " 0.679824\n", - " 0.653502\n", - " -0.279264\n", + " 421\n", + " -0.867869\n", + " -0.867429\n", + " -0.818396\n", + " -0.868235\n", + " -0.866632\n", + " -0.450983\n", + " -0.733850\n", + " 0.031250\n", " \n", " \n", - " 7412\n", - " 2.358932\n", - " 2.375059\n", - " 2.374211\n", - " 2.413670\n", - " -0.380946\n", + " 1595\n", + " -0.819432\n", + " -0.817932\n", + " -0.778575\n", + " -0.818012\n", + " -0.819050\n", + " 0.558091\n", + " 1.362677\n", + " 0.148437\n", " \n", " \n", - " 7413\n", - " 2.400766\n", - " 2.441531\n", - " 2.359243\n", - " 2.384602\n", - " -0.515472\n", + " 3676\n", + " -0.373633\n", + " -0.364031\n", + " -0.412080\n", + " -0.367150\n", + " -0.368421\n", + " 1.153036\n", + " 1.362677\n", + " 0.420000\n", " \n", " \n", " ...\n", @@ -1013,83 +1031,101 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 5519\n", - " 0.186241\n", - " 0.192637\n", - " 0.195457\n", - " 0.119036\n", - " -0.336428\n", + " 5976\n", + " 0.890812\n", + " 0.897589\n", + " 0.761079\n", + " 0.896985\n", + " 0.899914\n", + " -0.027099\n", + " -0.733850\n", + " 1.020001\n", " \n", " \n", - " 4531\n", - " -0.474942\n", - " -0.473560\n", - " -0.483945\n", - " -0.505016\n", - " 0.416194\n", + " 1305\n", + " -0.808836\n", + " -0.812807\n", + " -0.769864\n", + " -0.809815\n", + " -0.811178\n", + " 1.139386\n", + " 1.362677\n", + " 0.164062\n", " \n", " \n", - " 535\n", - " -0.864464\n", - " -0.865282\n", - " -0.863666\n", - " -0.816533\n", - " -0.502725\n", + " 6085\n", + " 0.792446\n", + " 0.786081\n", + " 0.683373\n", + " 0.781419\n", + " 0.796750\n", + " -0.571535\n", + " -0.733850\n", + " 0.540001\n", " \n", " \n", - " 787\n", - " -0.856235\n", - " -0.857125\n", - " -0.855130\n", - " -0.809579\n", - " -0.282496\n", + " 5470\n", + " 0.216858\n", + " 0.226603\n", + " 0.129761\n", + " 0.218514\n", + " 0.222586\n", + " -0.303594\n", + " -0.733850\n", + " 0.584999\n", " \n", " \n", - " 7987\n", - " 1.826366\n", - " 1.814159\n", - " 1.806921\n", - " 1.972431\n", - " 0.243087\n", + " 5781\n", + " 0.681859\n", + " 0.655790\n", + " 0.560632\n", + " 0.672651\n", + " 0.666218\n", + " -0.556786\n", + " -0.733850\n", + " 1.200001\n", " \n", " \n", "\n", - "

6428 rows × 5 columns

\n", + "

6428 rows × 8 columns

\n", "" ], "text/plain": [ - " numeric__Open numeric__High numeric__Low numeric__Adj Close \\\n", - "2484 -0.717267 -0.718936 -0.721563 -0.700283 \n", - "1576 -0.835490 -0.835755 -0.834432 -0.792049 \n", - "6595 0.665106 0.687359 0.679824 0.653502 \n", - "7412 2.358932 2.375059 2.374211 2.413670 \n", - "7413 2.400766 2.441531 2.359243 2.384602 \n", - "... ... ... ... ... \n", - "5519 0.186241 0.192637 0.195457 0.119036 \n", - "4531 -0.474942 -0.473560 -0.483945 -0.505016 \n", - "535 -0.864464 -0.865282 -0.863666 -0.816533 \n", - "787 -0.856235 -0.857125 -0.855130 -0.809579 \n", - "7987 1.826366 1.814159 1.806921 1.972431 \n", + " Close Open Adj Close High Low Volume \\\n", + "7159 2.052122 2.047553 2.057055 2.035800 2.068394 -1.046507 \n", + "4505 -0.493609 -0.482248 -0.509368 -0.485819 -0.493841 0.708938 \n", + "421 -0.867869 -0.867429 -0.818396 -0.868235 -0.866632 -0.450983 \n", + "1595 -0.819432 -0.817932 -0.778575 -0.818012 -0.819050 0.558091 \n", + "3676 -0.373633 -0.364031 -0.412080 -0.367150 -0.368421 1.153036 \n", + "... ... ... ... ... ... ... \n", + "5976 0.890812 0.897589 0.761079 0.896985 0.899914 -0.027099 \n", + "1305 -0.808836 -0.812807 -0.769864 -0.809815 -0.811178 1.139386 \n", + "6085 0.792446 0.786081 0.683373 0.781419 0.796750 -0.571535 \n", + "5470 0.216858 0.226603 0.129761 0.218514 0.222586 -0.303594 \n", + "5781 0.681859 0.655790 0.560632 0.672651 0.666218 -0.556786 \n", "\n", - " numeric__Volume \n", - "2484 -0.304340 \n", - "1576 1.970579 \n", - "6595 -0.279264 \n", - "7412 -0.380946 \n", - "7413 -0.515472 \n", - "... ... \n", - "5519 -0.336428 \n", - "4531 0.416194 \n", - "535 -0.502725 \n", - "787 -0.282496 \n", - "7987 0.243087 \n", + " above_average_volume volatility \n", + "7159 -0.733850 0.700004 \n", + "4505 1.362677 0.575000 \n", + "421 -0.733850 0.031250 \n", + "1595 1.362677 0.148437 \n", + "3676 1.362677 0.420000 \n", + "... ... ... \n", + "5976 -0.733850 1.020001 \n", + "1305 1.362677 0.164062 \n", + "6085 -0.733850 0.540001 \n", + "5470 -0.733850 0.584999 \n", + "5781 -0.733850 1.200001 \n", "\n", - "[6428 rows x 5 columns]" + "[6428 rows x 8 columns]" ] }, - "execution_count": 263, + "execution_count": 163, "metadata": {}, "output_type": "execute_result" } @@ -1129,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": 224, + "execution_count": 164, "metadata": {}, "outputs": [], "source": [ @@ -1172,7 +1208,7 @@ }, { "cell_type": "code", - "execution_count": 225, + "execution_count": 165, "metadata": {}, "outputs": [ { @@ -1252,18 +1288,45 @@ }, { "cell_type": "code", - "execution_count": 226, + "execution_count": 159, "metadata": {}, "outputs": [ { - "data": { - "image/png": "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OCxatAjnzp3DyZMnsWbNGnzyyScmjYeIiOifmM3MZqpGct/0RObz95s+TWm/efOmOGDAALFWrVqig4ODWK9ePXHo0KFiTk6OKIolN3mOHj1aVKvVooeHhzhu3DhxwIABFd70KYqi+ODBA3Hs2LFiQECAaG9vL4aGhoqrV6/Wt8+ePVv09/cXBUEQBw4cKIpiyY2qCxcuFBs0aCDa2dmJPj4+YlRUlLh3717953766ScxNDRUdHBwENu3by+uXr3a5Js+J0yYIHp7e4uurq7i//3f/4kLFiwQ3d3d9e0zZswQmzVrJi5dulQMDAwUHR0dxVdffVXMysoy2O6GDRvE5s2bi/b29qKnp6f43HPPiZs3bxZFkTd9EhFRCWZz+ZjNZCkEUazgTj0iIiIiIiIF4WV1REREREREYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR0RERERERABYHBEREREREQFgcURERERERASAxREREREREREAFkdEREREREQAWBwREREREREBYHGkKDNnzoQgCBaz7cuXL0MQBKxdu9YsYyIiIqLKlWb47du35R4KkexYHJHibd++HTNnzpR7GEREREQkMxZHJImpU6fiwYMHJn0mODgYDx48wOuvv26mUVXN9u3bMWvWLFnHQERERETys5V7AGQdbG1tYWtr2r9OgiDA0dHRTCMyj+LiYuh0Otjb28s9FCIiIiKSGGeOrNT+/fvx1FNPwdHREfXr18fnn39ebr///Oc/aNWqFZycnODl5YW+ffsiLS2tTL+kpCS8+OKL8PT0hIuLC5o2bYpPP/1U317ePUcJCQlo164dPDw84OrqigYNGuCdd97Rt1d0z9GuXbvQvn17uLi4wMPDAz169EBycrJBn9Lvu3DhAmJiYuDh4QF3d3cMGjQI9+/fr/LvKSYmBkuWLAFQUqyVLn8f30cffYSFCxeifv36cHBwwJkzZwAAZ8+exauvvgovLy84OjqidevW2Lp1a5nvyM7OxpgxYxAUFAQHBweEhobigw8+gE6nq/I4iYiIqtOVK1cQGhqKxo0bIyMjA88//zwaN26MM2fO4IUXXoCzszMee+wxzJ8/3+Bze/bsgSAI+Oabb/Dee++hdu3acHR0RKdOnXDhwgWZ9oao6jhzZIVOnjyJyMhI+Pj4YObMmSguLsaMGTPg5+dn0O+9997DtGnT0KdPH7zxxhu4desWFi9ejOeeew7Hjh2Dh4cHgJIi56WXXkJAQABGjx4Nf39/JCcnY9u2bRg9enS5Yzh9+jReeuklNG3aFLNnz4aDgwMuXLiAAwcOGB37b7/9hq5du6JevXqYOXMmHjx4gMWLF6Nt27Y4evQo6tata9C/T58+CAkJQVxcHI4ePYovvvgCvr6++OCDD6r0u3rzzTdx48YNJCQk4Msvvyy3z5o1a1BQUIBhw4bBwcEBXl5eOH36NNq2bYvHHnsMkydPhouLC7755hv07NkT33//PV555RUAwP3799GhQwdcv34db775JurUqYODBw9iypQpuHnzJhYuXFilcRIREVWXixcvomPHjvDy8kJCQgJq1aoFALh79y66dOmCXr16oU+fPvjuu+8wadIkNGnSBF27djXYxvvvvw+VSoXx48cjJycH8+fPR3R0NJKSkuTYJaKqE8nq9OzZU3R0dBSvXLmiX3fmzBnRxsZGLP2//PLly6KNjY343nvvGXz25MmToq2trX59cXGxGBISIgYHB4t379416KvT6fT/PGPGDPHv/zotWLBABCDeunWrwnGmpqaKAMQ1a9bo1zVv3lz09fUV79y5o1934sQJUaVSiQMGDCjzfYMHDzbY5iuvvCJ6e3tX+J3liY2NFcv7Uygdn1qtFjMzMw3aOnXqJDZp0kQsKCjQr9PpdOKzzz4rPv744/p1c+bMEV1cXMRz584ZfH7y5MmijY2NePXqVZPGSkREJLXSTL1165aYnJwsBgYGik899ZSYlZWl79OhQwcRgLh+/Xr9usLCQtHf31/s3bu3ft3u3btFAGKjRo3EwsJC/fpPP/1UBCCePHmyenaK6CHxsjoro9Vq8euvv6Jnz56oU6eOfn2jRo0QFRWl/3nz5s3Q6XTo06cPbt++rV/8/f3x+OOPY/fu3QCAY8eOITU1FWPGjNHPJJUy9uju0r4//vhjlS8fu3nzJo4fP46YmBh4eXnp1zdt2hSdO3fG9u3by3zmrbfeMvi5ffv2uHPnDnJzc6v0nVXRu3dv+Pj46H/OysrCrl270KdPH9y7d0//u7tz5w6ioqJw/vx5XL9+HQDw7bffon379vD09DT4PUdERECr1WLfvn2SjZOIiOhRnDp1Ch06dEDdunXx22+/wdPT06Dd1dUV/fv31/9sb2+Pp59+GpcuXSqzrUGDBhncn9u+fXsAKLcvkSVhcWRlbt26hQcPHuDxxx8v09agQQP9P58/fx6iKOLxxx+Hj4+PwZKcnIzMzEwAJVPrANC4cWOTxvF///d/aNu2Ld544w34+fmhb9+++Oabb4wWSleuXCkzzlKNGjXC7du3kZ+fb7D+7wUgAP2B/O7duyaN15iQkBCDny9cuABRFDFt2rQyv7sZM2YAgP73d/78ecTHx5fpFxERYdCPiIhIbt27d4ebmxt+/fVXqNXqMu21a9cuc2LU09Oz3MytjnwmMgfec6RQOp0OgiDgl19+gY2NTZl2V1fXR9q+k5MT9u3bh927d+Pnn39GfHw8vv76a3Ts2BE7duwo9zsfRkXbEUVRku0DJfvyd6UF3vjx4w1m4/4uNDRU37dz586YOHFiuf2eeOIJycZJRET0KHr37o1169Zhw4YNePPNN8u0m5K51ZHPRObA4sjK+Pj4wMnJCefPny/TlpKSov/n+vXrQxRFhISEGP0P9Pr16wMomWovne2oKpVKhU6dOqFTp0745JNPMG/ePLz77rvYvXt3udsKDg4uM85SZ8+eRa1ateDi4mLSGKrC2OWB5alXrx4AwM7OrtLfSf369ZGXl2fy746IiKi6ffjhh7C1tcXbb78NNzc3vPbaa3IPiaja8bI6K2NjY4OoqChs2bIFV69e1a9PTk7Gr7/+qv+5V69esLGxwaxZs8qcxRFFEXfu3AEAtGzZEiEhIVi4cCGys7PL9KtIVlZWmXXNmzcHABQWFpb7mYCAADRv3hzr1q0z+K5Tp05hx44dePHFFyv8vkdRWnD9c/8q4uvri+effx6ff/45bt68Wab91q1b+n/u06cPEhMTDX73pbKzs1FcXPxwgyYiIpKYIAhYsWIFXn31VQwcOLDc11MQWTvOHFmhWbNmIT4+Hu3bt8fbb7+N4uJiLF68GE8++ST++9//AiiZ0Zg7dy6mTJmCy5cvo2fPnnBzc0Nqaip++OEHDBs2DOPHj4dKpcKyZcvQvXt3NG/eHIMGDUJAQADOnj2L06dPl/sf/QAwe/Zs7Nu3D926dUNwcDAyMzOxdOlS1K5dG+3atatw7B9++CG6du2K8PBwDBkyRP8ob3d3d8ycOdMcvy60atUKADBq1ChERUXBxsYGffv2NfqZJUuWoF27dmjSpAmGDh2KevXqISMjA4mJibh27RpOnDgBAJgwYQK2bt2Kl156CTExMWjVqhXy8/Nx8uRJfPfdd7h8+bL+EalERERyU6lU+M9//oOePXuiT58+2L59Ozp27Cj3sIiqDYsjK9S0aVP8+uuvGDduHKZPn47atWtj1qxZuHnzpr44AoDJkyfjiSeewIIFCzBr1iwAQFBQECIjI/Hyyy/r+0VFRWH37t2YNWsWPv74Y+h0OtSvXx9Dhw6tcAwvv/wyLl++jNWrV+P27duoVasWOnTogFmzZsHd3b3Cz0VERCA+Ph4zZszA9OnTYWdnhw4dOuCDDz4o82AEqfTq1QsjR47Epk2b8J///AeiKFZaHIWFheHw4cOYNWsW1q5dizt37sDX1xctWrTA9OnT9f2cnZ2xd+9ezJs3D99++y3Wr18PtVqNJ554otLfBRERkRzs7Ozw3XffoWvXrujRowd+++03uYdEVG0EkXfGERERERER8Z4jIiIiIiIigJfVkRXLycnBgwcPjPbx9/evptEQERERkaXjZXVktWJiYrBu3TqjffivPxERERGVYnFEVuvMmTO4ceOG0T58/xARERERlWJxREREREREBD6QgYiIiIiICAAfyFAlOp0ON27cgJubGwRBkHs4RNVKFEXcu3cPgYGBUKmkPZ9SUFCAoqKiSvvZ29vD0dFR0u8mopqN2UxKxmw2HxZHVXDjxg0EBQXJPQwiWaWlpaF27dqSba+goAAhwa5Iz9RW2tff3x+pqalWeRAmoofDbCZiNpsDi6MqcHNzAwBcOVoXaldeiSiHV55oIvcQFKsYGuzHdv3fgVSKioqQnqnFhcNBULtV/HeVe0+H0NZpKCoqsroDMBE9PGaz/JjN8mE2mw+Loyoona5Xu6qM/otC5mMr2Mk9BOX63yNbzHXZiqubAFe3iretAy+XIaKymM3yYzbLiNlsNiyOiEhWOuigq6SdiIiIqo+Ss5mnWohIVhpRV+liin379qF79+4IDAyEIAjYsmWLQbsoipg+fToCAgLg5OSEiIgInD9/3qBPVlYWoqOjoVar4eHhgSFDhiAvL8+gz3//+1+0b98ejo6OCAoKwvz58x9q/4mIiCyNkrOZxRERyUoHEVojiw6mvYotPz8fzZo1w5IlS8ptnz9/PhYtWoTly5cjKSkJLi4uiIqKQkFBgb5PdHQ0Tp8+jYSEBGzbtg379u3DsGHD9O25ubmIjIxEcHAwjhw5gg8//BAzZ87EihUrHu6XQEREZEGUnM28rI6IZKWr5CBr6gG4a9eu6Nq1a7ltoihi4cKFmDp1Knr06AEAWL9+Pfz8/LBlyxb07dsXycnJiI+Px6FDh9C6dWsAwOLFi/Hiiy/io48+QmBgIDZs2ICioiKsXr0a9vb2ePLJJ3H8+HF88sknBgdqIiKimkjJ2cyZIyKSlUYUK12AkjNCf18KCwtN/q7U1FSkp6cjIiJCv87d3R1t2rRBYmIiACAxMREeHh76gy8AREREQKVSISkpSd/nueeeg729vb5PVFQUUlJScPfu3Yf6PRAREVkKJWcziyMikpWxafvSBQCCgoLg7u6uX+Li4kz+rvT0dACAn5+fwXo/Pz99W3p6Onx9fQ3abW1t4eXlZdCnvG38/TuIiIhqKiVnMy+rIyJZacWSxVg7UPKiO7VarV/v4OBg5pEREREpk5KzmTNHRCSrYgjQGFmK//cuBbVabbA8zAHY398fAJCRkWGwPiMjQ9/m7++PzMxMwzEWFyMrK8ugT3nb+Pt3EBER1VRKzmYWR0QkK51Y+SKVkJAQ+Pv7Y+fOnfp1ubm5SEpKQnh4OAAgPDwc2dnZOHLkiL7Prl27oNPp0KZNG32fffv2QaPR6PskJCSgQYMG8PT0lG7AREREMlByNrM4IiJZaSFUupgiLy8Px48fx/HjxwGU3Oh5/PhxXL16FYIgYMyYMZg7dy62bt2KkydPYsCAAQgMDETPnj0BAI0aNUKXLl0wdOhQ/Pnnnzhw4ABGjBiBvn37IjAwEADw2muvwd7eHkOGDMHp06fx9ddf49NPP8W4ceOk/NUQERHJQsnZzHuOiEhWGlEFjVjxeRqNiWenDh8+jBdeeEH/c+lBceDAgVi7di0mTpyI/Px8DBs2DNnZ2WjXrh3i4+Ph6Oio/8yGDRswYsQIdOrUCSqVCr1798aiRYv07e7u7tixYwdiY2PRqlUr1KpVC9OnT+djvImIyCooOZsFURQlnBizTrm5uXB3d8fdc/WgduNkmxyiApvLPQTFKhY12IMfkZOTY3DT5aMq/bvae+oxuBr5u8q7p0OHxtcl/34iqtmYzfJjNsuH2Ww+nDkiIllpoYLWyBW+2mocCxERESk7m1kcEZGsiiuZui/m3DYREVG1UnI2szgiIllpRRW0Rg7Axt6zQERERNJTcjazOCIiWekgQGdk6l4HKz4CExERWSAlZzOLIyKSVZFoAzvRxkh7NQ6GiIiIFJ3NLI6ISFYlZ6cqfl+CsTYiIiKSnpKzmcUREclKV8kTcax56p6IiMgSKTmbWRwRkaw0oi00RqbuNaL1np0iIiKyRErOZhZHRCQrrShAa+Qga6yNiIiIpKfkbGZxRESyqvxFc9Y7dU9ERGSJlJzNLI6ISFZKnronIiKyRErOZhZHRCQrHYxPz+uqbyhEREQEZWcziyMikpUOqkpeNFdxGxEREUlPydnM4oiIZKURbWBrdOreeq9rJiIiskRKzmYWR0QkK62oglY0ctOnkTYiIiKSnpKzmcUREcmq8ifiWO8BmIiIyBIpOZtZHBGRrHSiAJ2xmz6t+Ik4RERElkjJ2cziiIhkVSzaQiNWfCgqtt7LmomIiCySkrOZxRERyUoLAVoYeQu3kTYiIiKSnpKzmcUREclKJ6qgM3Jjp7E2IiIikp6Ss5nFERHJSiOqYGP0caHW/Ko5IiIiy6PkbGZxRESyUvLjQomIiCyRkrOZxRERyUqEAJ2Ra5dFK76umYiIyBIpOZtZHBGRrDQ6G6h0RqbuddY7dU9ERGSJlJzNLI6ISFZKftEcERGRJVJyNrM4IiJZKflFc0RERJZIydlsvWUfEdUIGtGm0sUUWq0W06ZNQ0hICJycnFC/fn3MmTMHovjXG+tEUcT06dMREBAAJycnRERE4Pz58wbbycrKQnR0NNRqNTw8PDBkyBDk5eVJss9ERESWTMnZzOKIiGRVenbK2GKKDz74AMuWLcNnn32G5ORkfPDBB5g/fz4WL16s7zN//nwsWrQIy5cvR1JSElxcXBAVFYWCggJ9n+joaJw+fRoJCQnYtm0b9u3bh2HDhkm230RERJZKydnMy+pqiJN/uODbpb44f9IZWRl2mLEqFc92zdG3iyKw/kN/xG/0Rl6uDcJa52PU+2l4rF5RmW0VFQoY3e0JXDrjhKU7UlC/8QMAQHqaPQa2CSvTf+FP59Co1X3z7ZyV6x5zG68Oz4SXT3HJ73zqY0g57iz3sCyGWMmL5kQTHxd68OBB9OjRA926dQMA1K1bF1999RX+/PPP/21PxMKFCzF16lT06NEDALB+/Xr4+flhy5Yt6Nu3L5KTkxEfH49Dhw6hdevWAIDFixfjxRdfxEcffYTAwMCH2VUisjLM5pqL2WyckrPZomaOYmJi0LNnT7mHYZEK7qtQ78kHGDHvWrnt3yzxxY+rfTDy/TR8uu0cHJ11eOe1+igqKFvZr5obCG9/TYXf9f7XF/DV8VP65fGmPPg+rA4v38WwGTew4RN/xEY9gUtnHPHexktw96749680GlGARlQZWUr+Hc7NzTVYCgsLy93es88+i507d+LcuXMAgBMnTmD//v3o2rUrACA1NRXp6emIiIjQf8bd3R1t2rRBYmIiACAxMREeHh76gy8AREREQKVSISkpySy/ByJLxWyuGLO5ZmI2V07J2WxRxRFV7KmO9xAzKR1t/3ZGqpQoAlu+8EG/0el4tksu6oUVYOKiK7iTYYeD8e4GfQ/tcsORvW4YOv16hd+l9tTCy7dYv9jaSb47itFr2G3Eb/TCjq+9cPW8IxZNqo3CBwKi+mXJPTSLofvf2SljCwAEBQXB3d1dv8TFxZW7vcmTJ6Nv375o2LAh7Ozs0KJFC4wZMwbR0dEAgPT0dACAn5+fwef8/Pz0benp6fD19TVot7W1hZeXl74PERGzuWZiNldOydlcY4qjU6dOoWvXrnB1dYWfnx9ef/113L59W9/+3XffoUmTJnBycoK3tzciIiKQn58PANizZw+efvppuLi4wMPDA23btsWVK1fk2hXJpV+1R1amHVq2/+uGNBe1Dg1b3EfyERf9uru3bLFwQhAmLr4CByexvE0BAGbEhKBPkycxrkcoEn9Vm3Xs1szWTofHm97H0d/d9OtEUcCx390Qxksh9HT/e9GcsQUA0tLSkJOTo1+mTJlS7va++eYbbNiwARs3bsTRo0exbt06fPTRR1i3bl117haRIjCbK8ZstkzM5qpRcjbXiOIoOzsbHTt2RIsWLXD48GHEx8cjIyMDffr0AQDcvHkT/fr1w+DBg5GcnIw9e/agV69eEEURxcXF6NmzJzp06ID//ve/SExMxLBhwyAIFd9IVlhYWGaa0JJlZZbcOubhYzgd7OGj0beJIvDRmDro9vodPNHsQbnbcXLWYtiM65i64jLmfHkJTz6dj1mDQ3gQfkhqLy1sbIHsW4a39t29bQtPn2KZRmV5NDqbShcAUKvVBouDg0O525swYYL+DFWTJk3w+uuvY+zYsfqzWf7+/gCAjIwMg89lZGTo2/z9/ZGZmWnQXlxcjKysLH0fIqVjNhvHbLZMzOaqUXI214gHMnz22Wdo0aIF5s2bp1+3evVqBAUF4dy5c8jLy0NxcTF69eqF4OBgAECTJk0AlDzyLycnBy+99BLq168PAGjUqJHR74uLi8OsWbPMtDfy+HFVLTzIU+H/RmZU2MfdW4veb97S/9yg+QPcybDDt8t8ER5l2SFENZcOlbxLAaY9Eef+/ftQqQzP+9jY2ED3v7d5h4SEwN/fHzt37kTz5s0BlFwznZSUhOHDhwMAwsPDkZ2djSNHjqBVq1YAgF27dkGn06FNmzYmjYfIWjGbHx2zmSyVkrO5RswcnThxArt374arq6t+adiwIQDg4sWLaNasGTp16oQmTZrgX//6F1auXIm7d+8CALy8vBATE4OoqCh0794dn376KW7evGn0+6ZMmWIwRZiWlmb2fXwUXr4lZzqybxlegJx9y07fdvyAG5KPuOClus3QNagZBj1bEkIjuj6BD0fXqXDbDVvcx83L5Z8FIONys2ygLQY8/nEmyrNWMe7eqhHnJaqFWMm0vWjiAbh79+5477338PPPP+Py5cv44Ycf8Mknn+CVV14BAAiCgDFjxmDu3LnYunUrTp48iQEDBiAwMFB/03mjRo3QpUsXDB06FH/++ScOHDiAESNGoG/fvnxSHdH/MJuNYzZbJmZz1Sg5m2vEvwV5eXno3r07PvjggzJtAQEBsLGxQUJCAg4ePIgdO3Zg8eLFePfdd5GUlISQkBCsWbMGo0aNQnx8PL7++mtMnToVCQkJeOaZZ8r9PgcHhwqnBS2Rf50iePlqcGy/q/7Rn/n3VDh7zBkvDSi59vvtOdcQM+mvF3bdSbfDO6/VxzvLL6Nhi4qvsb142glevnx6y8Mo1qhw/r/OaNHuHhL/d/OtIIho3i4PW9d6yzw6y1Gss4Ggq/hlcsVG2sqzePFiTJs2DW+//TYyMzMRGBiIN998E9OnT9f3mThxIvLz8zFs2DBkZ2ejXbt2iI+Ph6Ojo77Phg0bMGLECHTq1AkqlQq9e/fGokWLTN9BIivFbDaO2WyZmM1Vo+RsrhHFUcuWLfH999+jbt26sLUtf8iCIKBt27Zo27Ytpk+fjuDgYPzwww8YN24cAKBFixZo0aIFpkyZgvDwcGzcuLHCA7AlepCvwo3Uv0IhPc0eF085wc2jGL61Nej5xi189akfHgsphH+dIqybHwBvPw2e7VLyBB3f2hoAfx1IHV1KpjEDg4vgE1iyPuEbT9jaifqD+IFf3LFjkxfGfGTZZ+cs2eYVtTB+YRrOnXBGyjFnvDL0FhydddixyUvuoVmMyl4mZ+qL5tzc3LBw4UIsXLiwwj6CIGD27NmYPXt2hX28vLywceNGk76bSEmYzczmmorZXDklZ7PFFUc5OTk4fvy4wbphw4Zh5cqV6NevHyZOnAgvLy9cuHABmzZtwhdffIHDhw9j586diIyMhK+vL5KSknDr1i00atQIqampWLFiBV5++WUEBgYiJSUF58+fx4ABA+TZwYd07oQzJr4aqv/585mPAQA698nC+IVX0Sc2EwX3Vfh0YhDycm3w5FP5eG/DJdg7Vvzkm/JsXOiPjGt2sLEFgkIL8M7yy2j/UtlHlFLV7N3qCXdvLQZMSIenTzEunXbCu9EhyL7NZ7CW+vtTbypqJyJ5MZvLx2yumZjNlVNyNltccbRnzx60aNHCYN2QIUNw4MABTJo0CZGRkSgsLERwcDC6dOkClUoFtVqNffv2YeHChcjNzUVwcDA+/vhjdO3aFRkZGTh79izWrVuHO3fuICAgALGxsXjzzTdl2sOH0+zZPPx643iF7YIADJyYjoETq/acd/+gojLb69znLjr3ufsIo6TybF1TC1vX1JJ7GBarWKeCoKv49sdiI21EVD2YzeVjNtdczGbjlJzNgiiKpp2+UKDc3Fy4u7vj7rl6ULtZ778MliwqsLncQ1CsYlGDPfgROTk5UKule3Rs6d9V1C/DYOdiX2E/TX4Rfu26QvLvJ6KajdksP2azfJjN5mNxM0dEpCxSX9dMREREj0bJ2cziiIhkpRUFCGLFZ321VnwAJiIiskRKzmYWR0QkKyWfnSIiIrJESs5mFkdEJCslH4CJiIgskZKzmcUREclKW8kTcbRW/EQcIiIiS6TkbGZxRESyUvK7FIiIiCyRkrOZxRERyUrJU/dERESWSMnZzOKIiGSl5Kl7IiIiS6TkbGZxRESyEkUBopEzUMbaiIiISHpKzmYWR0QkK7GSqXtrPgATERFZIiVnc5WKo61bt1Z5gy+//PJDD4aIlEcLATBykNVa8U2fRI+C2UxE5qLkbK5ScdSzZ88qbUwQBGi12kcZDxEpjJKn7okeBbOZiMxFydlcpeJIp9OZexxEpFA6UYCg0CfiED0KZjMRmYuSs/mR7jkqKCiAo6OjVGMhIgXS6QQIOiMHYCNtRFQWs5mIHpWSs9nk5/BptVrMmTMHjz32GFxdXXHp0iUAwLRp07Bq1SrJB0hE1q106t7YQkTGMZuJSEpKzmaTi6P33nsPa9euxfz582Fvb69f37hxY3zxxReSDo6IrF/pi+aMLURkHLOZiKSk5Gw2uThav349VqxYgejoaNjY2OjXN2vWDGfPnpV0cERk/XS6kun5ihe5R0hk+ZjNRCQlJWezyfccXb9+HaGhoWXW63Q6aDQaSQZFRMqh5CfiEEmF2UxEUlJyNps8cxQWFobff/+9zPrvvvsOLVq0kGRQRKQcYhUWIjKO2UxEUlJyNps8czR9+nQMHDgQ169fh06nw+bNm5GSkoL169dj27Zt5hgjEVkxUSdANPLUG2NtRFSC2UxEUlJyNps8c9SjRw/89NNP+O233+Di4oLp06cjOTkZP/30Ezp37myOMRKRNavsaThWPHVPJBVmMxFJSsHZ/FDvOWrfvj0SEhKkHgsRKZAolizG2omocsxmIpKKkrP5oV8Ce/jwYSQnJwMouda5VatWkg2KiJRD1Kkg6iqexDbWRkSGmM1EJAUlZ7PJe3bt2jW0b98eTz/9NEaPHo3Ro0fjqaeeQrt27XDt2jVzjJGIrFjp2Slji6muX7+O/v37w9vbG05OTmjSpAkOHz78t+8UMX36dAQEBMDJyQkRERE4f/68wTaysrIQHR0NtVoNDw8PDBkyBHl5eY+6u0RmwWwmIikpOZtNLo7eeOMNaDQaJCcnIysrC1lZWUhOToZOp8Mbb7wh6eCISAEkfiTO3bt30bZtW9jZ2eGXX37BmTNn8PHHH8PT01PfZ/78+Vi0aBGWL1+OpKQkuLi4ICoqCgUFBfo+0dHROH36NBISErBt2zbs27cPw4YNe9S9JTILZjMRSUrB2SyIomm1n5OTEw4ePFjm0aBHjhxB+/btcf/+fUkHaAlyc3Ph7u6Ou+fqQe1mvdOIliwqsLncQ1CsYlGDPfgROTk5UKvVkm239O+qzorpUDk5VthP96AAV4fNrvL3T548GQcOHCj3scZAyZmpwMBA/Pvf/8b48eMBADk5OfDz88PatWvRt29fJCcnIywsDIcOHULr1q0BAPHx8XjxxRdx7do1BAYGPsQeE5kPs5nZLAdms3yYzebLZpOPJkFBQeW+UE6r1fI/GIjIZMaehvP3l9Dl5uYaLIWFheVub+vWrWjdujX+9a9/wdfXFy1atMDKlSv17ampqUhPT0dERIR+nbu7O9q0aYPExEQAQGJiIjw8PPQHXwCIiIiASqVCUlKSOX4NRI+E2UxEUlJyNptcHH344YcYOXKkwTWChw8fxujRo/HRRx9JNjAiUogqTt0HBQXB3d1dv8TFxZW7uUuXLmHZsmV4/PHH8euvv2L48OEYNWoU1q1bBwBIT08HAPj5+Rl8zs/PT9+Wnp4OX19fg3ZbW1t4eXnp+xBZEmYzEUlKwdlcpafVeXp6QhD+ep55fn4+2rRpA1vbko8XFxfD1tYWgwcPRs+ePSUbHBEpQGXvS/hfW1pamsHUvYODQ7nddTodWrdujXnz5gEAWrRogVOnTmH58uUYOHCgdOMmkhmzmYjMRsHZXKXiaOHChWYeBhEpVmU3dv6vTa1WV+m65oCAAISFhRmsa9SoEb7//nsAgL+/PwAgIyMDAQEB+j4ZGRlo3ry5vk9mZqbBNoqLi5GVlaX/PJHcmM1EZDYKzuYqFUeWVtERkRWp4tmpqmrbti1SUlIM1p07dw7BwcEAgJCQEPj7+2Pnzp36A25ubi6SkpIwfPhwAEB4eDiys7Nx5MgR/Xtidu3aBZ1OhzZt2pg0HiJzYTYTkdkoOJsf+iWwAFBQUICioiKDdVI+MYOIrJ+oK1mMtZti7NixePbZZzFv3jz06dMHf/75J1asWIEVK1YAAARBwJgxYzB37lw8/vjjCAkJwbRp0xAYGKi/9KhRo0bo0qULhg4diuXLl0Oj0WDEiBHo27cvb24ni8dsJqJHpeRsNrk4ys/Px6RJk/DNN9/gzp07Zdq1Wq0kAyMihZD47NRTTz2FH374AVOmTMHs2bMREhKChQsXIjo6Wt9n4sSJyM/Px7Bhw5CdnY127dohPj4ejo5/PbZ0w4YNGDFiBDp16gSVSoXevXtj0aJFJu8eUXVgNhORpBSczSYXRxMnTsTu3buxbNkyvP7661iyZAmuX7+Ozz//HO+//76kgyMi6yeIJYuxdlO99NJLeOmllyrepiBg9uzZmD17doV9vLy8sHHjRtO/nEgGzGYikpKSs9nk4uinn37C+vXr8fzzz2PQoEFo3749QkNDERwcjA0bNhhUgEREldIJJYuxdiIyitlMRJJScDab/J6jrKws1KtXD0DJNcxZWVkAgHbt2mHfvn3Sjo6IrF8V36VARBVjNhORpBSczSYXR/Xq1UNqaioAoGHDhvjmm28AlJy18vDwkHRwRKQACj4AE0mF2UxEklJwNptcHA0aNAgnTpwAAEyePBlLliyBo6Mjxo4diwkTJkg+QCKycqVT98YWIjKK2UxEklJwNpt8z9HYsWP1/xwREYGzZ8/iyJEjCA0NRdOmTSUdHBFZP3Pc9EmkNMxmIpKSkrP5kd5zBADBwcH6FzgREZmsim/hJqKqYzYT0SNRcDZXqTgy5fnho0aNeujBWLpXnmgCW8FO7mEo0rnlT8s9BMXSPSgAxvxotu0LqOTslNm+mahmYzaXYDbLh9ksH2az+VSpOFqwYEGVNiYIglUfgInIDCR+0RyRUjCbichsFJzNVSqOSp+AQ0QkOQVP3RM9CmYzEZmNgrP5ke85IiJ6FIKuZDHWTkRERNVHydnM4oiI5KXgs1NEREQWScHZzOKIiOSl4AMwERGRRVJwNrM4IiJZCToBgpGXyRlrIyIiIukpOZtZHBGRvBR8doqIiMgiKTibVQ/zod9//x39+/dHeHg4rl+/DgD48ssvsX//fkkHR0TWr/Qt3MYWIqocs5mIpKLkbDa5OPr+++8RFRUFJycnHDt2DIWFhQCAnJwczJs3T/IBEpGV0/31VJzyFljxE3GIpMJsJiJJKTibTS6O5s6di+XLl2PlypWws/vrjdRt27bF0aNHJR0cESmAWIWFiIxiNhORpBSczSbfc5SSkoLnnnuuzHp3d3dkZ2dLMSYiUhIFX9dMJBVmMxFJSsHZbPLMkb+/Py5cuFBm/f79+1GvXj1JBkVEyqHk65qJpMJsJiIpKTmbTS6Ohg4ditGjRyMpKQmCIODGjRvYsGEDxo8fj+HDh5tjjERkzRQ8dU8kFWYzEUlKwdls8mV1kydPhk6nQ6dOnXD//n0899xzcHBwwPjx4zFy5EhzjJGIrFhlZ6Cs+ewUkVSYzUQkJSVns8nFkSAIePfddzFhwgRcuHABeXl5CAsLg6urqznGR0TWToTxp95Y8QGYSCrMZiKSlIKz+aFfAmtvb4+wsDApx0JECqTks1NEUmM2E5EUlJzNJhdHL7zwAgRBqLB9165djzQgIlIYBT8Rh0gqzGYikpSCs9nk4qh58+YGP2s0Ghw/fhynTp3CwIEDpRoXESmE/oVyRtqJyDhmMxFJScnZbHJxtGDBgnLXz5w5E3l5eY88ICJSGAWfnSKSCrOZiCSl4Gw2+VHeFenfvz9Wr14t1eaISCHM+S6F999/H4IgYMyYMfp1BQUFiI2Nhbe3N1xdXdG7d29kZGQYfO7q1avo1q0bnJ2d4evriwkTJqC4uPjhB0IkE2YzET0MJWezZMVRYmIiHB0dpdocESmFrgrLQzh06BA+//xzNG3a1GD92LFj8dNPP+Hbb7/F3r17cePGDfTq1UvfrtVq0a1bNxQVFeHgwYNYt24d1q5di+nTpz/cQIhkxGwmooei4Gw2+bK6vw8UAERRxM2bN3H48GFMmzZNsoERkTKY44k4eXl5iI6OxsqVKzF37lz9+pycHKxatQobN25Ex44dAQBr1qxBo0aN8Mcff+CZZ57Bjh07cObMGfz222/w8/ND8+bNMWfOHEyaNAkzZ86Evb296QMiMjNmMxFJScnZbPLMkbu7u8Hi5eWF559/Htu3b8eMGTMkGxgRKUQV38Kdm5trsBQWFla4ydjYWHTr1g0REREG648cOQKNRmOwvmHDhqhTpw4SExMBlJxpb9KkCfz8/PR9oqKikJubi9OnT0uww0TSYzYTkaQUnM0mzRxptVoMGjQITZo0gaenp6QDISJlquoTcYKCggzWz5gxAzNnzizTf9OmTTh69CgOHTpUpi09PR329vbw8PAwWO/n54f09HR9n78ffEvbS9uILA2zmYikpuRsNqk4srGxQWRkJJKTk3kAJiJpVPGJOGlpaVCr1frVDg4OZbqmpaVh9OjRSEhI4H0WpBjMZiKSnIKz2eTL6ho3boxLly6ZYyxEpEBCFRYAUKvVBkt5B+AjR44gMzMTLVu2hK2tLWxtbbF3714sWrQItra28PPzQ1FREbKzsw0+l5GRAX9/fwCAv79/mSfklP5c2ofI0jCbiUhKSs5mk4ujuXPnYvz48di2bRtu3rxZ5lpDIiJTlE7dG1uqqlOnTjh58iSOHz+uX1q3bo3o6Gj9P9vZ2WHnzp36z6SkpODq1asIDw8HAISHh+PkyZPIzMzU90lISIBarUZYWJhk+00kJWYzEUlJydlc5cvqZs+ejX//+9948cUXAQAvv/wyBEHQt4uiCEEQoNVqJR0gEVk5CV805+bmhsaNGxusc3Fxgbe3t379kCFDMG7cOHh5eUGtVmPkyJEIDw/HM888AwCIjIxEWFgYXn/9dcyfPx/p6emYOnUqYmNjyz0jRiQnZjMRmYWCs7nKxdGsWbPw1ltvYffu3ZIOgIioOt+0vWDBAqhUKvTu3RuFhYWIiorC0qVL9e02NjbYtm0bhg8fjvDwcLi4uGDgwIGYPXt29Q2SqIqYzURkNgrN5ioXR6JY8hvq0KGD5IMgIuWq6hNxHtaePXsMfnZ0dMSSJUuwZMmSCj8THByM7du3P9oXE1UDZjMRmYOSs9mkp9X9faqeiEgK5njRHJGSMJuJSGpKzmaTiqMnnnii0oNwVlbWIw2IiBRGwuuaiZSI2UxEklNwNptUHM2aNQvu7u7mGgsRKZC5p+6JrB2zmYikpuRsNqk46tu3L3x9fc01FiJSIgWfnSKSArOZiCSn4GyucnHEa5qJyByUfF0z0aNiNhOROSg5m01+Wh0RkZQEnQhBV/HxxVgbkdIxm4nIHJSczVUujnQ6K764kIjko+Cpe6JHxWwmIrNQcDabdM8REZHUlDx1T0REZImUnM0sjohIVkp+Ig4REZElUnI2szgiInkpeOqeiIjIIik4m1kcEZGslDx1T0REZImUnM0sjohIXmIl0/NWfAAmIiKySArOZhZHRCQvUSxZjLUTERFR9VFwNrM4snLdY27j1eGZ8PIpxqUzTlg69TGkHHeWe1g1nvdP1+D98w2DdUV+jrg8q6n+Z8dL91Drx2twTM2HqAIKa7vg+qgGEO1VAIDApefgkHYfNvc00Dnb4n4jNW69EgSth3217ovclDx1T0TKxGw2D2azdJSczSo5vzwmJgaCIOCtt94q0xYbGwtBEBATE1P9A7MSHV6+i2EzbmDDJ/6IjXoCl8444r2Nl+DurZF7aFahMNAJFz9orl+uTmikb3O8dA+PLTqH/EbuuDo5DFcnP4ns532Bv73M/v4TatwcGorLs5rixpuhsLtViMAVF2TYE3kJ2soXIqo+zGbzYjabF7NZGkrOZlmLIwAICgrCpk2b8ODBA/26goICbNy4EXXq1Hno7YqiiOLiYimGWGP1GnYb8Ru9sONrL1w974hFk2qj8IGAqH5Zcg/NKogqAVp3e/2ic7XTt/l8exXZHf1wt0sgigKdofF3Ql5rb4h2f/3JZUf4o6CeK4q9HVBQ3w1ZUQFwTM0DtFb8fMzyiFVYiKhaMZvNh9lsXsxmiSg4m2Uvjlq2bImgoCBs3rxZv27z5s2oU6cOWrRooV9XWFiIUaNGwdfXF46OjmjXrh0OHTqkb9+zZw8EQcAvv/yCVq1awcHBAfv374dOp0NcXBxCQkLg5OSEZs2a4bvvvqvWfZSDrZ0Ojze9j6O/u+nXiaKAY7+7IazVfRlHZj3sMwtQb9Ix1J16Av6rLsI2qxAAYJOrgVNqPrRutgiafwb1JhxF7Y+T4XjhXoXbUuUXQ/3nHRTUcwVsZP+zrFalU/fGFiKqXsxm82A2mx+zWRpKzmaL+H968ODBWLNmjf7n1atXY9CgQQZ9Jk6ciO+//x7r1q3D0aNHERoaiqioKGRlGZ5pmTx5Mt5//30kJyejadOmiIuLw/r167F8+XKcPn0aY8eORf/+/bF3794Kx1NYWIjc3FyDpaZRe2lhYwtk3zK8rezubVt4+ij7rJ0UHoS4In1gPVwb2QCZ/YJhd6cQQR8lQyjQwu52yYHYe9t15LTzwfWRDVAY5IzaC8/CLqPAYDu1NqchdNRhhP77KGyzCnF9+ONy7I6sBJ1Y6UJE1Y/ZLD1ms3kxm6Wj5Gy2iOKof//+2L9/P65cuYIrV67gwIED6N+/v749Pz8fy5Ytw4cffoiuXbsiLCwMK1euhJOTE1atWmWwrdmzZ6Nz586oX78+XFxcMG/ePKxevRpRUVGoV68eYmJi0L9/f3z++ecVjicuLg7u7u76JSgoyGz7TjXT/cYeyGvlhaLazrj/pAeuj3gCqvtauB3J0j/BJbu9L3Kf9UFhHRfc6hMMjZ8j3A/eMthOVqQ/rrz7JK6NagCoBPivvWTVT4Apl4Kn7oksGbOZahpms4QUnM0W8bQ6Hx8fdOvWDWvXroUoiujWrRtq1aqlb7948SI0Gg3atm2rX2dnZ4enn34aycnJBttq3bq1/p8vXLiA+/fvo3PnzgZ9ioqKDC4L+KcpU6Zg3Lhx+p9zc3Nr3EE4N8sG2mLA4x9nojxrFePuLYv4v92q6JxtofFzhH1mAe43UAMAigKcDPoU+TvBNqvI8HOudtC52kHj54SiACfUm3Icjql5KKjnBqVQ8hNxiCwZs1l6zObqxWx+eErOZov5Sxw8eDBGjBgBAFiyZMlDb8fFxUX/z3l5eQCAn3/+GY899phBPwcHhwq34eDgYLS9JijWqHD+v85o0e4eEuPdAQCCIKJ5uzxsXest8+isj1Cghd2tAhS38Uaxtz2K3e1g/49pervMAuQ/6V7xRv53VkrQWPERpxyVTc9b89Q9kaVjNkuL2Vy9mM0PT8nZbDHFUZcuXVBUVARBEBAVFWXQVr9+fdjb2+PAgQMIDg4GAGg0Ghw6dAhjxoypcJthYWFwcHDA1atX0aFDB3MO3yJtXlEL4xem4dwJZ6Qcc8YrQ2/B0VmHHZu85B5ajVfru6vIb+oBjZcDbHOK4P3TdYgqAfee8gYEAVmRAfD+6ToKH3NGYZAz1H/chn36A9wcFgoAcEzNg+PlfDwIdYXW2RZ2twpRa+s1FPk4lNz4qSSVTc9b7/GXyOIxm6XHbDYfZrOEFJzNFlMc2djY6KfhbWxsDNpcXFwwfPhwTJgwAV5eXqhTpw7mz5+P+/fvY8iQIRVu083NDePHj8fYsWOh0+nQrl075OTk4MCBA1Cr1Rg4cKBZ90lue7d6wt1biwET0uHpU4xLp53wbnQIsm/bVf5hMso2uwgBqy5ClV8MrastHoS6IW1SGLRuJb/b7E7+EDQ6+Hx3FTb5xSis7YxroxtC4+MIANDZq+B6PAve265BKNRB626H/Cc9kNU10OCRokqg5Kl7IkvHbJYes9l8mM3SUXI2W0xxBABqtbrCtvfffx86nQ6vv/467t27h9atW+PXX3+Fp6en0W3OmTMHPj4+iIuLw6VLl+Dh4YGWLVvinXfekXr4FmnrmlrYuqZW5R3JJOlvhFba526XQNztElhuW9Fjzrg2tlG5bYqjFQGVkaOs1oqPwEQ1ALNZesxm82A2S0jB2SyIotIev2G63NxcuLu743n0gK3AMztyOLf8abmHoFi6BwW4NmY6cnJyjP5HkqlK/67aRsyCra1jhf2Kiwtw4LcZkn8/EdVszGb5MZvlw2w2H4uaOSIiBRJF449I5fkbIiKi6qXgbFbWBZREZHEEXeWLKeLi4vDUU0/Bzc0Nvr6+6NmzJ1JSUgz6FBQUIDY2Ft7e3nB1dUXv3r2RkZFh0Ofq1avo1q0bnJ2d4evriwkTJqC4mC9pJCIi66fkbGZxRESyEkSx0sUUe/fuRWxsLP744w8kJCRAo9EgMjIS+fn5+j5jx47FTz/9hG+//RZ79+7FjRs30KtXL327VqtFt27dUFRUhIMHD2LdunVYu3Ytpk+fLtl+ExERWSolZzMvqyMieen+txhrR8l10H9X0TtP4uPjDX5eu3YtfH19ceTIETz33HPIycnBqlWrsHHjRnTs2BEAsGbNGjRq1Ah//PEHnnnmGezYsQNnzpzBb7/9Bj8/PzRv3hxz5szBpEmTMHPmTNjb2z/KHhMREVk2BWczZ46ISFalL5oztgBAUFAQ3N3d9UtcXFyVtp+TkwMA8PIqeYfIkSNHoNFoEBERoe/TsGFD1KlTB4mJiQCAxMRENGnSBH5+fvo+UVFRyM3NxenTpyXZbyIiIkul5GzmzBERyauKN32mpaUZPBGnvDNT/6TT6TBmzBi0bdsWjRs3BgCkp6fD3t4eHh4eBn39/PyQnp6u7/P3g29pe2kbERGRVVNwNrM4IiJZVfVFc2q12uTHhcbGxuLUqVPYv3//I4yQiIhIWZSczbysjohkJWjFSpeHMWLECGzbtg27d+9G7dq19ev9/f1RVFSE7Oxsg/4ZGRnw9/fX9/nnE3JKfy7tQ0REZK2UnM0sjohIXqVT98YWkzYnYsSIEfjhhx+wa9cuhISEGLS3atUKdnZ22Llzp35dSkoKrl69ivDwcABAeHg4Tp48iczMTH2fhIQEqNVqhIWFPcLOEhER1QAKzmZeVkdE8hL/txhrN0FsbCw2btyIH3/8EW5ubvrrkN3d3eHk5AR3d3cMGTIE48aNg5eXF9RqNUaOHInw8HA888wzAIDIyEiEhYXh9ddfx/z585Geno6pU6ciNja2StdTExER1WgKzmYWR0QkK0Gng6Cr+HmhxtrKs2zZMgDA888/b7B+zZo1iImJAQAsWLAAKpUKvXv3RmFhIaKiorB06VJ9XxsbG2zbtg3Dhw9HeHg4XFxcMHDgQMyePduksRAREdVESs5mFkdEJC8Rxt+lYOLZKbEKU/2Ojo5YsmQJlixZUmGf4OBgbN++3bQvJyIisgYKzmYWR0Qkq8retG3qW7iJiIjo0Sg5m1kcEZG8dCIgGDk9pbPeAzAREZFFUnA2szgiInnpAAiVtBMREVH1UXA2szgiIlkpeeqeiIjIEik5m1kcEZG8dLpKpu6t+PQUERGRJVJwNrM4IiJ5VfYyOSs+O0VERGSRFJzNLI6ISF4Kvq6ZiIjIIik4m1kcEZGsBJ0OgpGpe1NfNEdERESPRsnZzOKIiOSlEwHByPS8FT8ulIiIyCIpOJtZHBGRvBR8XTMREZFFUnA2szgiInmJOuNPvRGtd+qeiIjIIik4m1kcEZG8dCIAZU7dExERWSQFZzOLIyKSl6gzfgbKis9OERERWSQFZzOLIyKSl7aSA7AVPxGHiIjIIik4m1kcEZG8FHzTJxERkUVScDazOCIieYmo5ABcbSMhIiIiQNHZzOKIiOSl1QKituJ2nZE2IiIikp6Cs5nFERHJS8FT90RERBZJwdnM4oiI5KXgAzAREZFFUnA2szgiIlmJWi1EI1P3ohVP3RMREVkiJWcziyMikpcoGn+ZnBWfnSIiIrJICs5mFkdEJC+xkrdwW/EBmIiIyCIpOJtZHBGRvLRaQDAyPW/saTlEREQkPQVnM4sjIpKVqNNBFCp+07Zo7A3dREREJDklZzOLIyKSl4Kn7omIiCySgrNZJfcAiEjhdGLli4mWLFmCunXrwtHREW3atMGff/5phoETERFZKTNkM1Az8pnFERHJStTqSh4ZWuFi2tT9119/jXHjxmHGjBk4evQomjVrhqioKGRmZpppD4iIiKyL1NkM1Jx8ZnFERPISdZUvJvjkk08wdOhQDBo0CGFhYVi+fDmcnZ2xevVqM+0AERGRlZE4m4Gak8+856gKxP9dV1kMjdHLL8l8dA8K5B6CYukKSn73opmuL9boiiAa+cMqhgYAkJuba7DewcEBDg4OBuuKiopw5MgRTJkyRb9OpVIhIiICiYmJEo6aiOTGbJYfs1k+NSmbgZqVzyyOquDevXsAgP3YLvNIFGzMj3KPQPHu3bsHd3d3ybZnb28Pf39/7E/fVmlfV1dXBAUFGaybMWMGZs6cabDu9u3b0Gq18PPzM1jv5+eHs2fPPvKYichyMJstALNZdjUhm4Galc8sjqogMDAQaWlpcHNzgyAIcg/HZLn/z96dh0VV9m8Av4dtQGBYlG0SESUXXFHTcC1F0cwl6zUNFdS0XHL7uWSLa0lapmnu5darqZmZS5Jk4oJGblga4q64ACoCIrLNPL8/eDk1AQPo4Bk49+e6znXJeZ4585wp5uZ7nrOkp8Pb2xsJCQnQaDRyD0dxKvrnL4TAgwcPoNVqTbpdW1tbXLlyBTk5OaUaw79/94o6MkVEysFspidR0T9/ZnP5YXFUChYWFqhevbrcw3hiGo2mQn4BVBYV+fM35VGpf7K1tYWtra3JtletWjVYWloiKSnJYH1SUhI8PT1N9j5EJD9mM5lCRf78K0o2AxUrn3lDBiKqNGxsbNC8eXPs27dPWqfX67Fv3z4EBgbKODIiIiLlqkj5zJkjIqpUJkyYgNDQULRo0QItW7bEwoUL8fDhQwwePFjuoRERESlWRclnFkcKoFarMX369EpxHmhFxM//6Xr99ddx584dTJs2DYmJiWjatCkiIiIKXQRKRCQnZoO8+Pk/fRUln1WivO4BSEREREREVIHwmiMiIiIiIiKwOCIiIiIiIgLA4oiIiIiIiAgAiyMiIiIiIiIALI6IiIiIiIgAsDiqcMLCwtC7d2+5h6E4YWFhUKlUePvttwu1jRo1CiqVCmFhYU9/YEREJDtmszyYzVQeWBwRlZK3tzc2bdqER48eSeuysrKwceNG1KhR47G3K4RAXl6eKYZIRESkKMxmMjUWR5XImTNn0K1bNzg4OMDDwwMDBw7E3bt3pfatW7eiUaNGsLOzQ9WqVREUFISHDx8CAKKiotCyZUvY29vD2dkZbdq0wbVr1+TaFbPUrFkzeHt7Y9u2bdK6bdu2oUaNGggICJDWZWdnY8yYMXB3d4etrS3atm2LY8eOSe1RUVFQqVTYs2cPmjdvDrVajcOHD0Ov1yM8PBy+vr6ws7NDkyZNsHXr1qe6j0REZFrM5vLFbCZTY3FUSaSmpqJjx44ICAjA8ePHERERgaSkJPTt2xcAcPv2bfTv3x9DhgxBXFwcoqKi0KdPH+nISO/evdGhQwf88ccfOHr0KIYPHw6VSiXzXpmfIUOGYM2aNdLPq1evxuDBgw36TJ48Gd9//z3WrVuHkydPws/PD8HBwUhJSTHo9+677+KTTz5BXFwcGjdujPDwcKxfvx7Lly/H2bNnMX78eAwYMAAHDhx4KvtGRESmxWx+OpjNZFKCKpTQ0FDRq1evQutnz54tunTpYrAuISFBABDx8fHixIkTAoC4evVqodfeu3dPABBRUVHlNewKr+BzT05OFmq1Wly9elVcvXpV2Nraijt37ohevXqJ0NBQkZGRIaytrcWGDRuk1+bk5AitVivmzZsnhBBi//79AoDYvn271CcrK0tUqVJFHDlyxOB9hw4dKvr37/90dpKIiB4Ls1kezGYqD1bylWVkSqdPn8b+/fvh4OBQqO3SpUvo0qULOnXqhEaNGiE4OBhdunTBa6+9BhcXF7i6uiIsLAzBwcHo3LkzgoKC0LdvX3h5ecmwJ+bNzc0N3bt3x9q1ayGEQPfu3VGtWjWp/dKlS8jNzUWbNm2kddbW1mjZsiXi4uIMttWiRQvp3xcvXkRmZiY6d+5s0CcnJ8fgtAAiIqo4mM1PB7OZTInFUSWRkZGBHj16YO7cuYXavLy8YGlpicjISBw5cgR79+7F4sWL8f777yMmJga+vr5Ys2YNxowZg4iICGzevBkffPABIiMj8fzzz8uwN+ZtyJAhGD16NABgyZIlj70de3t76d8ZGRkAgN27d+OZZ54x6KdWqx/7PYiISD7M5qeH2UymwmuOKolmzZrh7NmzqFmzJvz8/AyWgl90lUqFNm3aYObMmTh16hRsbGzwww8/SNsICAjA1KlTceTIETRs2BAbN26Ua3fMWteuXZGTk4Pc3FwEBwcbtNWuXRs2NjaIjo6W1uXm5uLYsWPw9/cvdpv+/v5Qq9W4fv16of9+3t7e5bYvRERUfpjNTw+zmUyFM0cVUFpaGmJjYw3WDR8+HKtWrUL//v0xefJkuLq64uLFi9i0aRO++uorHD9+HPv27UOXLl3g7u6OmJgY3LlzB/Xr18eVK1ewcuVK9OzZE1qtFvHx8bhw4QIGDRokzw6aOUtLS2ka3tLS0qDN3t4eI0aMwKRJk+Dq6ooaNWpg3rx5yMzMxNChQ4vdpqOjIyZOnIjx48dDr9ejbdu2SEtLQ3R0NDQaDUJDQ8t1n4iI6Mkwm+XFbCZTYXFUAUVFRRU613Xo0KGIjo7GlClT0KVLF2RnZ8PHxwddu3aFhYUFNBoNDh48iIULFyI9PR0+Pj6YP38+unXrhqSkJJw7dw7r1q3DvXv34OXlhVGjRuGtt96SaQ/Nn0ajKbbtk08+gV6vx8CBA/HgwQO0aNECP//8M1xcXIxuc/bs2XBzc0N4eDguX74MZ2dnNGvWDO+9956ph09ERCbGbJYfs5lMQSWEEHIPgoiIiIiISG685oiIiIiIiAgsjoiIiIiIiACwOCIiIiIiIgLA4oiIiIiIiAgAiyMiIiIiIiIALI6IiIiIiIgAsDgiIiIiIiICwOKITCQsLAy9e/eWfn7hhRcwbty4pz6OqKgoqFQqpKamFttHpVJh+/btpd7mjBkz0LRp0yca19WrV6FSqQo9PZ2IiKi8MJuNYzZTUVgcVWJhYWFQqVRQqVSwsbGBn58fZs2ahby8vHJ/723btmH27Nml6luaL00iIqLKgNlMZN6s5B4Ala+uXbtizZo1yM7Oxk8//YRRo0bB2toaU6dOLdQ3JycHNjY2JnlfV1dXk2yHiIiosmE2E5kvzhxVcmq1Gp6envDx8cGIESMQFBSEHTt2APh7uv3jjz+GVqtF3bp1AQAJCQno27cvnJ2d4erqil69euHq1avSNnU6HSZMmABnZ2dUrVoVkydPhhDC4H3/PXWfnZ2NKVOmwNvbG2q1Gn5+fvj6669x9epVvPjiiwAAFxcXqFQqhIWFAQD0ej3Cw8Ph6+sLOzs7NGnSBFu3bjV4n59++gl16tSBnZ0dXnzxRYNxltaUKVNQp04dVKlSBbVq1cKHH36I3NzcQv1WrFgBb29vVKlSBX379kVaWppB+1dffYX69evD1tYW9erVw9KlS8s8FiIiqvyYzSVjNpNcWBwpjJ2dHXJycqSf9+3bh/j4eERGRmLXrl3Izc1FcHAwHB0dcejQIURHR8PBwQFdu3aVXjd//nysXbsWq1evxuHDh5GSkoIffvjB6PsOGjQI3377LRYtWoS4uDisWLECDg4O8Pb2xvfffw8AiI+Px+3bt/HFF18AAMLDw7F+/XosX74cZ8+exfjx4zFgwAAcOHAAQH5Q9OnTBz169EBsbCzefPNNvPvuu2X+TBwdHbF27Vr89ddf+OKLL7Bq1SosWLDAoM/FixexZcsW7Ny5ExERETh16hRGjhwptW/YsAHTpk3Dxx9/jLi4OMyZMwcffvgh1q1bV+bxEBGRsjCbC2M2k2wEVVqhoaGiV69eQggh9Hq9iIyMFGq1WkycOFFq9/DwENnZ2dJrvvnmG1G3bl2h1+ulddnZ2cLOzk78/PPPQgghvLy8xLx586T23NxcUb16dem9hBCiQ4cOYuzYsUIIIeLj4wUAERkZWeQ49+/fLwCI+/fvS+uysrJElSpVxJEjRwz6Dh06VPTv318IIcTUqVOFv7+/QfuUKVMKbevfAIgffvih2PZPP/1UNG/eXPp5+vTpwtLSUty4cUNat2fPHmFhYSFu374thBCidu3aYuPGjQbbmT17tggMDBRCCHHlyhUBQJw6darY9yUiosqP2Vw0ZjOZC15zVMnt2rULDg4OyM3NhV6vxxtvvIEZM2ZI7Y0aNTI4l/n06dO4ePEiHB0dDbaTlZWFS5cuIS0tDbdv30arVq2kNisrK7Ro0aLQ9H2B2NhYWFpaokOHDqUe98WLF5GZmYnOnTsbrM/JyUFAQAAAIC4uzmAcABAYGFjq9yiwefNmLFq0CJcuXUJGRgby8vKg0WgM+tSoUQPPPPOMwfvo9XrEx8fD0dERly5dwtChQzFs2DCpT15eHpycnMo8HiIiqtyYzSVjNpNcWBxVci+++CKWLVsGGxsbaLVaWFkZ/ie3t7c3+DkjIwPNmzfHhg0bCm3Lzc3tscZgZ2dX5tdkZGQAAHbv3m3wxQfkn6ttKkePHkVISAhmzpyJ4OBgODk5YdOmTZg/f36Zx7pq1apCgWBpaWmysRIRUeXAbDaO2UxyYnFUydnb28PPz6/U/Zs1a4bNmzfD3d290BGaAl5eXoiJiUH79u0B5B+FOXHiBJo1a1Zk/0aNGkGv1+PAgQMICgoq1F5wdEyn00nr/P39oVarcf369WKPatWvX1+6gLXAb7/9VvJO/sORI0fg4+OD999/X1p37dq1Qv2uX7+OW7duQavVSu9jYWGBunXrwsPDA1qtFpcvX0ZISEiZ3p+IiJSH2Wwcs5nkxBsykIGQkBBUq1YNvXr1wqFDh3DlyhVERUVhzJgxuHHjBgBg7Nix+OSTT7B9+3acO3cOI0eONPochJo1ayI0NBRDhgzB9u3bpW1u2bIFAODj4wOVSoVdu3bhzp07yMjIgKOjIyZOnIjx48dj3bp1uHTpEk6ePInFixdLF1K+/fbbuHDhAiZNmoT4+Hhs3LgRa9euLdP+Pvvss7h+/To2bdqES5cuYdGiRUVewGpra4vQ0FCcPn0ahw4dwpgxY9C3b194enoCAGbOnInw8HAsWrQI58+fx59//ok1a9bg888/L9N4iIiI/o3ZzGymp0jui56o/Pzzos+ytN++fVsMGjRIVKtWTajValGrVi0xbNgwkZaWJoTIv8hz7NixQqPRCGdnZzFhwgQxaNCgYi/6FEKIR48eifHjxwsvLy9hY2Mj/Pz8xOrVq6X2WbNmCU9PT6FSqURoaKgQIv9C1YULF4q6desKa2tr4ebmJoKDg8WBAwek1+3cuVP4+fkJtVot2rVrJ1avXl3miz4nTZokqlatKhwcHMTrr78uFixYIJycnKT26dOniyZNmoilS5cKrVYrbG1txWuvvSZSUlIMtrthwwbRtGlTYWNjI1xcXET79u3Ftm3bhBC86JOIiPIxm4vGbCZzoRKimCv1iIiIiIiIFISn1REREREREYHFEREREREREQAWR0RERERERABYHBEREREREQFgcURERERERASAxREREREREREAFkdEREREREQAWBwREREREREBYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR1RGL7zwAl544QXZx9CwYUNZx0BERFTeVCoVZsyYIf28du1aqFQqXL16VbYxGRMVFQWVSoWtW7fKPZQyuXr1KlQqFdauXSv3UMgMsDgiIiIiIgBAZmYmZsyYgaioKLmHYnIbN27EwoUL5R4GmTkruQdAFcvevXvlHgIREZEiDRw4EP369YNarS6398jMzMTMmTMBQPYzRUxt48aNOHPmDMaNG2ew3sfHB48ePYK1tbU8AyOzwuKIysTGxkbuIRAREZktvV6PnJwc2NramnzblpaWsLS0NPl2lU6lUpXLfy+qmHhaXSU3Y8YMqFQqXLx4EWFhYXB2doaTkxMGDx6MzMxMqd+aNWvQsWNHuLu7Q61Ww9/fH8uWLSu0vX9ec5SUlAQrKyvpCNM/xcfHQ6VS4csvv5TWpaamYty4cfD29oZarYafnx/mzp0LvV7/WPt24sQJtG7dGnZ2dvD19cXy5csN2nNycjBt2jQ0b94cTk5OsLe3R7t27bB//36pjxACNWvWRK9evQptPysrC05OTnjrrbekddnZ2Zg+fTr8/PygVqvh7e2NyZMnIzs72+C1kZGRaNu2LZydneHg4IC6devivffee6z9JCIieURFRaFFixawtbVF7dq1sWLFCilXC6hUKowePRobNmxAgwYNoFarERERAQD47LPP0Lp1a1StWhV2dnZo3rx5kdfjZGdnY/z48XBzc4OjoyN69uyJGzduFOpX3DVHe/bsQbt27WBvbw9HR0d0794dZ8+eNegTFhYGBwcH3Lx5E71794aDgwPc3NwwceJE6HQ6APnX3ri5uQEAZs6cCZVKVei6p9LQ6XR477334OnpCXt7e/Ts2RMJCQmF+n333Xdo3rw57OzsUK1aNQwYMAA3b94s1O/XX3+V9s/Z2Rm9evVCXFycQZ8HDx5g3LhxqFmzJtRqNdzd3dG5c2ecPHkSQP7fL7t378a1a9ek/apZs6a03/++5qg0n1eBe/fuYeDAgdBoNHB2dkZoaChOnz7N65gqKM4cKUTfvn3h6+uL8PBwnDx5El999RXc3d0xd+5cAMCyZcvQoEED9OzZE1ZWVti5cydGjhwJvV6PUaNGFblNDw8PdOjQAVu2bMH06dMN2jZv3gxLS0v85z//AZA/Td+hQwfcvHkTb731FmrUqIEjR45g6tSpuH37dpnPAb5//z5eeukl9O3bF/3798eWLVswYsQI2NjYYMiQIQCA9PR0fPXVV+jfvz+GDRuGBw8e4Ouvv0ZwcDB+//13NG3aFCqVCgMGDMC8efOQkpICV1dX6T127tyJ9PR0DBgwAED+0cCePXvi8OHDGD58OOrXr48///wTCxYswPnz57F9+3YAwNmzZ/Hyyy+jcePGmDVrFtRqNS5evIjo6Ogy7SMREcnn1KlT6Nq1K7y8vDBz5kzodDrMmjVLKh7+6ddff8WWLVswevRoVKtWTfqj+4svvkDPnj0REhKCnJwcbNq0Cf/5z3+wa9cudO/eXXr9m2++if/+979444030Lp1a/z6668G7cZ88803CA0NRXBwMObOnYvMzEwsW7YMbdu2xalTp6SxAPlFS3BwMFq1aoXPPvsMv/zyC+bPn4/atWtjxIgRcHNzw7JlyzBixAi88sor6NOnDwCgcePGZfrsPv74Y6hUKkyZMgXJyclYuHAhgoKCEBsbCzs7OwD5hd7gwYPx3HPPITw8HElJSfjiiy8QHR2NU6dOwdnZGQDwyy+/oFu3bqhVqxZmzJiBR48eYfHixWjTpg1Onjwp7d/bb7+NrVu3YvTo0fD398e9e/dw+PBhxMXFoVmzZnj//feRlpaGGzduYMGCBQAABwcHo/tR0ucF5P9t0KNHD/z+++8YMWIE6tWrhx9//BGhoaFl+szIjAiq1KZPny4AiCFDhhisf+WVV0TVqlWlnzMzMwu9Njg4WNSqVctgXYcOHUSHDh2kn1esWCEAiD///NOgn7+/v+jYsaP08+zZs4W9vb04f/68Qb93331XWFpaiuvXr5d6nzp06CAAiPnz50vrsrOzRdOmTYW7u7vIyckRQgiRl5cnsrOzDV57//594eHhYfB5xMfHCwBi2bJlBn179uwpatasKfR6vRBCiG+++UZYWFiIQ4cOGfRbvny5ACCio6OFEEIsWLBAABB37twp9T4REZF56dGjh6hSpYq4efOmtO7ChQvCyspK/PPPJwDCwsJCnD17ttA2/p2tOTk5omHDhgb5GBsbKwCIkSNHGvR94403BAAxffp0ad2aNWsEAHHlyhUhhBAPHjwQzs7OYtiwYQavTUxMFE5OTgbrQ0NDBQAxa9Ysg74BAQGiefPm0s937twp9L6ltX//fgFAPPPMMyI9PV1av2XLFgFAfPHFF9Ln4O7uLho2bCgePXok9du1a5cAIKZNmyatK8j2e/fuSetOnz4tLCwsxKBBg6R1Tk5OYtSoUUbH1717d+Hj41No/ZUrVwQAsWbNGmldaT+v77//XgAQCxculNbpdDrRsWPHQtukioGn1SnE22+/bfBzu3btcO/ePaSnpwOAdCQHANLS0nD37l106NABly9fRlpaWrHb7dOnD6ysrLB582Zp3ZkzZ/DXX3/h9ddfl9Z99913aNeuHVxcXHD37l1pCQoKgk6nw8GDB8u0P1ZWVganu9nY2OCtt95CcnIyTpw4ASD/3OyCa6T0ej1SUlKQl5eHFi1aSNPsAFCnTh20atUKGzZskNalpKRgz549CAkJkU6f+O6771C/fn3Uq1fPYB86duwIANLpegVHu3788cfHPmWQiIjko9Pp8Msvv6B3797QarXSej8/P3Tr1q1Q/w4dOsDf37/Q+n9m6/3795GWloZ27doZZNBPP/0EABgzZozBa/9904CiREZGIjU1Ff379zfIJUtLS7Rq1crgNPICRf09cPny5RLfqywGDRoER0dH6efXXnsNXl5e0r4eP34cycnJGDlypMG1Pt27d0e9evWwe/duAMDt27cRGxuLsLAwgzM7GjdujM6dO0vbA/KzNyYmBrdu3TLpvpT0eUVERMDa2hrDhg2T1llYWBR71g2ZPxZHClGjRg2Dn11cXADkf1kDQHR0NIKCgqTzed3c3KRrZIwVR9WqVUOnTp2wZcsWad3mzZthZWUlTccDwIULFxAREQE3NzeDJSgoCACQnJxcpv3RarWwt7c3WFenTh0AMDgXe926dWjcuDFsbW1RtWpVuLm5Yffu3YX2adCgQYiOjsa1a9cA5BdCubm5GDhwoME+nD17ttA+FLxvwT68/vrraNOmDd588014eHigX79+2LJlCwslIqIKIjk5GY8ePYKfn1+htqLW+fr6FrmdXbt24fnnn4etrS1cXV2l09b+mUHXrl2DhYUFateubfDaunXrljjOCxcuAAA6duxYKJv2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jhw5Ap1Oh4SEhEbdJyIiahhms7KYzSQXFkfN0MGDB6td6zphwgQcOXIEc+bMQWxsLPR6PcLDwzFkyBA4OTlBp9Phq6++wooVK1BSUoLw8HC8/fbbePLJJ1FQUIALFy5gy5Yt+OmnnxAcHIykpCT87//+r0J7aP90Ol2NfUuXLoXZbMaYMWNw+/ZtREVF4fPPP0eLFi1q3ebixYvRqlUrpKSk4NKlS/D19UXPnj3xl7/8Re7hExGRzJjNymM2kxwkIYRQehBERERERERK4z1HREREREREYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR0RERERERABYHJFMEhMTMWzYMMvPjz32GKZPn97k4zh48CAkSUJRUVGN60iShI8//rje21ywYAG6d+/eoHFdvnwZkiThzJkzDdoOERFRfTGba8dspvthceTAEhMTIUkSJEmCm5sbIiIisGjRIlRWVjb6d+/cuROLFy+u17r1OWgSERE5AmYzkX1zUXoA1LiGDBmCTZs2Qa/XY+/evUhKSoKrqyvmzZtXbV2DwQA3NzdZvtfPz0+W7RARETkaZjOR/eLMkYPTaDQICgpCeHg4Jk2ahJiYGHzyyScAfpluf/PNNxESEoKOHTsCAPLy8jBixAj4+vrCz88PQ4cOxeXLly3bNJlMmDFjBnx9feHv74/Zs2dDCGH1vb+eutfr9ZgzZw5CQ0Oh0WgQERGBDRs24PLly3j88ccBAC1atIAkSUhMTAQAmM1mpKSkoG3btnB3d0e3bt2wfft2q+/Zu3cvOnToAHd3dzz++ONW46yvOXPmoEOHDvDw8EC7du3w2muvwWg0Vltv3bp1CA0NhYeHB0aMGIHi4mKr/n/84x/o3LkztFotOnXqhNWrV9s8FiIicnzM5roxm0kpLI5Uxt3dHQaDwfLz/v37kZWVhbS0NOzZswdGoxFxcXHw9vbGoUOHcOTIEXh5eWHIkCGWz7399tvYvHkzNm7ciMOHD6OwsBC7du2q9XvHjh2L//u//8PKlSuRmZmJdevWwcvLC6GhodixYwcAICsrCzdu3MA777wDAEhJScH777+PtWvX4vz580hOTsbo0aORnp4OoCoonn32WTz99NM4c+YM/vSnP2Hu3Lk2/068vb2xefNmfPfdd3jnnXewfv16LF++3Gqdixcv4sMPP8Tu3buxb98+nD59Gi+//LKlf+vWrXj99dfx5ptvIjMzE0uWLMFrr72GLVu22DweIiJSF2ZzdcxmUowgh5WQkCCGDh0qhBDCbDaLtLQ0odFoxMyZMy39gYGBQq/XWz7zz3/+U3Ts2FGYzWZLm16vF+7u7uLzzz8XQggRHBwsli1bZuk3Go2idevWlu8SQoiBAweKadOmCSGEyMrKEgBEWlrafcd54MABAUD8/PPPlraKigrh4eEhjh49arXuhAkTxMiRI4UQQsybN09ERkZa9c+ZM6fatn4NgNi1a1eN/W+99Zbo1auX5ef58+cLZ2dncfXqVUvbZ599JpycnMSNGzeEEEK0b99epKamWm1n8eLFIjo6WgghRE5OjgAgTp8+XeP3EhGR42M23x+zmewF7zlycHv27IGXlxeMRiPMZjP++Mc/YsGCBZb+Ll26WF3LfPbsWVy8eBHe3t5W26moqEB2djaKi4tx48YN9OnTx9Ln4uKCqKioatP3d505cwbOzs4YOHBgvcd98eJFlJeXY/DgwVbtBoMBPXr0AABkZmZajQMAoqOj6/0dd33wwQdYuXIlsrOzUVpaisrKSuh0Oqt1wsLC8NBDD1l9j9lsRlZWFry9vZGdnY0JEyZg4sSJlnUqKyvh4+Nj83iIiMixMZvrxmwmpbA4cnCPP/441qxZAzc3N4SEhMDFxfqv3NPT0+rn0tJS9OrVC1u3bq22rVatWj3QGNzd3W3+TGlpKQDg008/tTrwAVXXasslIyMDo0aNwsKFCxEXFwcfHx9s27YNb7/9ts1jXb9+fbVAcHZ2lm2sRETkGJjNtWM2k5JYHDk4T09PRERE1Hv9nj174oMPPkBAQEC1MzR3BQcH49ixYxgwYACAqrMwJ0+eRM+ePe+7fpcuXWA2m5Geno6YmJhq/XfPjplMJktbZGQkNBoNcnNzazyr1blzZ8sNrHd9/fXXde/kPY4ePYrw8HC88sorlrYrV65UWy83NxfXr19HSEiI5XucnJzQsWNHBAYGIiQkBJcuXcKoUaNs+n4iIlIfZnPtmM2kJD6QgayMGjUKLVu2xNChQ3Ho0CHk5OTg4MGDmDp1Kq5evQoAmDZtGpYuXYqPP/4YFy5cwMsvv1zrexDatGmDhIQEjB8/Hh9//LFlmx9++CEAIDw8HJIkYc+ePbh16xZKS0vh7e2NmTNnIjk5GVu2bEF2djZOnTqFd99913Ij5UsvvYQffvgBs2bNQlZWFlJTU7F582ab9vfhhx9Gbm4utm3bhuzsbKxcufK+N7BqtVokJCTg7NmzOHToEKZOnYoRI0YgKCgIALBw4UKkpKRg5cqV+P7773Hu3Dls2rQJf//7320aDxER0a8xm5nN1ISUvumJGs+9N33a0n/jxg0xduxY0bJlS6HRaES7du3ExIkTRXFxsRCi6ibPadOmCZ1OJ3x9fcWMGTPE2LFja7zpUwgh7ty5I5KTk0VwcLBwc3MTERERYuPGjZb+RYsWiaCgICFJkkhISBBCVN2oumLFCtGxY0fh6uoqWrVqJeLi4kR6errlc7t37xYRERFCo9GIRx99VGzcuNHmmz5nzZol/P39hZeXl3j++efF8uXLhY+Pj6V//vz5olu3bmL16tUiJCREaLVa8dxzz4nCwkKr7W7dulV0795duLm5iRYtWogBAwaInTt3CiF40ycREVVhNt8fs5nshSREDXfqERERERERqQgvqyMiIiIiIgKLIyIiIiIiIgAsjoiIiIiIiACwOCIiIiIiIgLA4oiIiIiIiAgAiyMiIiIiIiIALI6IiIiIiIgAsDgiIiIiIiICwOKIiIiIiIgIAIsjIiIiIiIiACyOiIiIiIiIAAD/HzQxcz3pB4uRAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[159], line 13\u001b[0m\n\u001b[0;32m 10\u001b[0m disp\u001b[38;5;241m.\u001b[39max_\u001b[38;5;241m.\u001b[39mset_title(key)\n\u001b[0;32m 12\u001b[0m plt\u001b[38;5;241m.\u001b[39msubplots_adjust(top\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m, bottom\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, hspace\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.4\u001b[39m, wspace\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.1\u001b[39m)\n\u001b[1;32m---> 13\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshow\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\pyplot.py:612\u001b[0m, in \u001b[0;36mshow\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 568\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 569\u001b[0m \u001b[38;5;124;03mDisplay all open figures.\u001b[39;00m\n\u001b[0;32m 570\u001b[0m \n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 609\u001b[0m \u001b[38;5;124;03mexplicitly there.\u001b[39;00m\n\u001b[0;32m 610\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 611\u001b[0m _warn_if_gui_out_of_main_thread()\n\u001b[1;32m--> 612\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_get_backend_mod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshow\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib_inline\\backend_inline.py:90\u001b[0m, in \u001b[0;36mshow\u001b[1;34m(close, block)\u001b[0m\n\u001b[0;32m 88\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 89\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m figure_manager \u001b[38;5;129;01min\u001b[39;00m Gcf\u001b[38;5;241m.\u001b[39mget_all_fig_managers():\n\u001b[1;32m---> 90\u001b[0m \u001b[43mdisplay\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 91\u001b[0m \u001b[43m \u001b[49m\u001b[43mfigure_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_fetch_figure_metadata\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfigure_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 94\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 95\u001b[0m show\u001b[38;5;241m.\u001b[39m_to_draw \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\IPython\\core\\display_functions.py:298\u001b[0m, in \u001b[0;36mdisplay\u001b[1;34m(include, exclude, metadata, transient, display_id, raw, clear, *objs, **kwargs)\u001b[0m\n\u001b[0;32m 296\u001b[0m publish_display_data(data\u001b[38;5;241m=\u001b[39mobj, metadata\u001b[38;5;241m=\u001b[39mmetadata, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 297\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 298\u001b[0m format_dict, md_dict \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mformat\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minclude\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 299\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m format_dict:\n\u001b[0;32m 300\u001b[0m \u001b[38;5;66;03m# nothing to display (e.g. _ipython_display_ took over)\u001b[39;00m\n\u001b[0;32m 301\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\IPython\\core\\formatters.py:182\u001b[0m, in \u001b[0;36mDisplayFormatter.format\u001b[1;34m(self, obj, include, exclude)\u001b[0m\n\u001b[0;32m 180\u001b[0m md \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 181\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 182\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mformatter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 183\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[0;32m 184\u001b[0m \u001b[38;5;66;03m# FIXME: log the exception\u001b[39;00m\n\u001b[0;32m 185\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\decorator.py:232\u001b[0m, in \u001b[0;36mdecorate..fun\u001b[1;34m(*args, **kw)\u001b[0m\n\u001b[0;32m 230\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[0;32m 231\u001b[0m args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[1;32m--> 232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcaller\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mextras\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\IPython\\core\\formatters.py:226\u001b[0m, in \u001b[0;36mcatch_format_error\u001b[1;34m(method, self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 224\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"show traceback on failed format call\"\"\"\u001b[39;00m\n\u001b[0;32m 225\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 226\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 227\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m:\n\u001b[0;32m 228\u001b[0m \u001b[38;5;66;03m# don't warn on NotImplementedErrors\u001b[39;00m\n\u001b[0;32m 229\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_return(\u001b[38;5;28;01mNone\u001b[39;00m, args[\u001b[38;5;241m0\u001b[39m])\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\IPython\\core\\formatters.py:343\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m 341\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[0;32m 342\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 343\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mprinter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 344\u001b[0m \u001b[38;5;66;03m# Finally look for special method names\u001b[39;00m\n\u001b[0;32m 345\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170\u001b[0m, in \u001b[0;36mprint_figure\u001b[1;34m(fig, fmt, bbox_inches, base64, **kwargs)\u001b[0m\n\u001b[0;32m 167\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend_bases\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m FigureCanvasBase\n\u001b[0;32m 168\u001b[0m FigureCanvasBase(fig)\n\u001b[1;32m--> 170\u001b[0m \u001b[43mfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcanvas\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprint_figure\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbytes_io\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 171\u001b[0m data \u001b[38;5;241m=\u001b[39m bytes_io\u001b[38;5;241m.\u001b[39mgetvalue()\n\u001b[0;32m 172\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fmt \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msvg\u001b[39m\u001b[38;5;124m'\u001b[39m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\backend_bases.py:2175\u001b[0m, in \u001b[0;36mFigureCanvasBase.print_figure\u001b[1;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[0;32m 2172\u001b[0m \u001b[38;5;66;03m# we do this instead of `self.figure.draw_without_rendering`\u001b[39;00m\n\u001b[0;32m 2173\u001b[0m \u001b[38;5;66;03m# so that we can inject the orientation\u001b[39;00m\n\u001b[0;32m 2174\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(renderer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_draw_disabled\u001b[39m\u001b[38;5;124m\"\u001b[39m, nullcontext)():\n\u001b[1;32m-> 2175\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2176\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m bbox_inches:\n\u001b[0;32m 2177\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m bbox_inches \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtight\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\artist.py:95\u001b[0m, in \u001b[0;36m_finalize_rasterization..draw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(draw)\n\u001b[0;32m 94\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdraw_wrapper\u001b[39m(artist, renderer, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m---> 95\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 96\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m renderer\u001b[38;5;241m.\u001b[39m_rasterizing:\n\u001b[0;32m 97\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstop_rasterizing()\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\figure.py:3162\u001b[0m, in \u001b[0;36mFigure.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3159\u001b[0m \u001b[38;5;66;03m# ValueError can occur when resizing a window.\u001b[39;00m\n\u001b[0;32m 3161\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpatch\u001b[38;5;241m.\u001b[39mdraw(renderer)\n\u001b[1;32m-> 3162\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3163\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3165\u001b[0m renderer\u001b[38;5;241m.\u001b[39mclose_group(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3166\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axes\\_base.py:3137\u001b[0m, in \u001b[0;36m_AxesBase.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 3134\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artists_rasterized:\n\u001b[0;32m 3135\u001b[0m _draw_rasterized(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfigure, artists_rasterized, renderer)\n\u001b[1;32m-> 3137\u001b[0m \u001b[43mmimage\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_draw_list_compositing_images\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 3138\u001b[0m \u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43martists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfigure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msuppressComposite\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3140\u001b[0m renderer\u001b[38;5;241m.\u001b[39mclose_group(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maxes\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 3141\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstale \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\image.py:132\u001b[0m, in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m 130\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m not_composite \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m has_images:\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m a \u001b[38;5;129;01min\u001b[39;00m artists:\n\u001b[1;32m--> 132\u001b[0m \u001b[43ma\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 133\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 134\u001b[0m \u001b[38;5;66;03m# Composite any adjacent images together\u001b[39;00m\n\u001b[0;32m 135\u001b[0m image_group \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\artist.py:72\u001b[0m, in \u001b[0;36mallow_rasterization..draw_wrapper\u001b[1;34m(artist, renderer)\u001b[0m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 70\u001b[0m renderer\u001b[38;5;241m.\u001b[39mstart_filter()\n\u001b[1;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mdraw\u001b[49m\u001b[43m(\u001b[49m\u001b[43martist\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrenderer\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 73\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 74\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m artist\u001b[38;5;241m.\u001b[39mget_agg_filter() \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:1423\u001b[0m, in \u001b[0;36mAxis.draw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m 1420\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 1421\u001b[0m renderer\u001b[38;5;241m.\u001b[39mopen_group(\u001b[38;5;18m__name__\u001b[39m, gid\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_gid())\n\u001b[1;32m-> 1423\u001b[0m ticks_to_draw \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_update_ticks\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1424\u001b[0m tlb1, tlb2 \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_ticklabel_bboxes(ticks_to_draw, renderer)\n\u001b[0;32m 1426\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m tick \u001b[38;5;129;01min\u001b[39;00m ticks_to_draw:\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:1302\u001b[0m, in \u001b[0;36mAxis._update_ticks\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1300\u001b[0m major_locs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_majorticklocs()\n\u001b[0;32m 1301\u001b[0m major_labels \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmajor\u001b[38;5;241m.\u001b[39mformatter\u001b[38;5;241m.\u001b[39mformat_ticks(major_locs)\n\u001b[1;32m-> 1302\u001b[0m major_ticks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_major_ticks\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mmajor_locs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1303\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m tick, loc, label \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(major_ticks, major_locs, major_labels):\n\u001b[0;32m 1304\u001b[0m tick\u001b[38;5;241m.\u001b[39mupdate_position(loc)\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:1670\u001b[0m, in \u001b[0;36mAxis.get_major_ticks\u001b[1;34m(self, numticks)\u001b[0m\n\u001b[0;32m 1666\u001b[0m numticks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_majorticklocs())\n\u001b[0;32m 1668\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmajorTicks) \u001b[38;5;241m<\u001b[39m numticks:\n\u001b[0;32m 1669\u001b[0m \u001b[38;5;66;03m# Update the new tick label properties from the old.\u001b[39;00m\n\u001b[1;32m-> 1670\u001b[0m tick \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_tick\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmajor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[0;32m 1671\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmajorTicks\u001b[38;5;241m.\u001b[39mappend(tick)\n\u001b[0;32m 1672\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_copy_tick_props(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmajorTicks[\u001b[38;5;241m0\u001b[39m], tick)\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:1598\u001b[0m, in \u001b[0;36mAxis._get_tick\u001b[1;34m(self, major)\u001b[0m\n\u001b[0;32m 1594\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m(\n\u001b[0;32m 1595\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe Axis subclass \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must define \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1596\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_tick_class or reimplement _get_tick()\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 1597\u001b[0m tick_kw \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_major_tick_kw \u001b[38;5;28;01mif\u001b[39;00m major \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_minor_tick_kw\n\u001b[1;32m-> 1598\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_tick_class\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maxes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmajor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmajor\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mtick_kw\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:456\u001b[0m, in \u001b[0;36mYTick.__init__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 455\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 456\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 457\u001b[0m \u001b[38;5;66;03m# x in axes coords, y in data coords\u001b[39;00m\n\u001b[0;32m 458\u001b[0m ax \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\axis.py:170\u001b[0m, in \u001b[0;36mTick.__init__\u001b[1;34m(self, axes, loc, size, width, color, tickdir, pad, labelsize, labelcolor, labelfontfamily, zorder, gridOn, tick1On, tick2On, label1On, label2On, major, labelrotation, grid_color, grid_linestyle, grid_linewidth, grid_alpha, **kwargs)\u001b[0m\n\u001b[0;32m 159\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtick2line \u001b[38;5;241m=\u001b[39m mlines\u001b[38;5;241m.\u001b[39mLine2D(\n\u001b[0;32m 160\u001b[0m [], [],\n\u001b[0;32m 161\u001b[0m color\u001b[38;5;241m=\u001b[39mcolor, linestyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnone\u001b[39m\u001b[38;5;124m\"\u001b[39m, zorder\u001b[38;5;241m=\u001b[39mzorder, visible\u001b[38;5;241m=\u001b[39mtick2On,\n\u001b[0;32m 162\u001b[0m markeredgecolor\u001b[38;5;241m=\u001b[39mcolor, markersize\u001b[38;5;241m=\u001b[39msize, markeredgewidth\u001b[38;5;241m=\u001b[39mwidth,\n\u001b[0;32m 163\u001b[0m )\n\u001b[0;32m 164\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgridline \u001b[38;5;241m=\u001b[39m mlines\u001b[38;5;241m.\u001b[39mLine2D(\n\u001b[0;32m 165\u001b[0m [], [],\n\u001b[0;32m 166\u001b[0m color\u001b[38;5;241m=\u001b[39mgrid_color, alpha\u001b[38;5;241m=\u001b[39mgrid_alpha, visible\u001b[38;5;241m=\u001b[39mgridOn,\n\u001b[0;32m 167\u001b[0m linestyle\u001b[38;5;241m=\u001b[39mgrid_linestyle, linewidth\u001b[38;5;241m=\u001b[39mgrid_linewidth, marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 168\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mgrid_kw,\n\u001b[0;32m 169\u001b[0m )\n\u001b[1;32m--> 170\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgridline\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_path\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39m_interpolation_steps \u001b[38;5;241m=\u001b[39m \\\n\u001b[0;32m 171\u001b[0m GRIDLINE_INTERPOLATION_STEPS\n\u001b[0;32m 172\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel1 \u001b[38;5;241m=\u001b[39m mtext\u001b[38;5;241m.\u001b[39mText(\n\u001b[0;32m 173\u001b[0m np\u001b[38;5;241m.\u001b[39mnan, np\u001b[38;5;241m.\u001b[39mnan,\n\u001b[0;32m 174\u001b[0m fontsize\u001b[38;5;241m=\u001b[39mlabelsize, color\u001b[38;5;241m=\u001b[39mlabelcolor, visible\u001b[38;5;241m=\u001b[39mlabel1On,\n\u001b[0;32m 175\u001b[0m fontfamily\u001b[38;5;241m=\u001b[39mlabelfontfamily, rotation\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_labelrotation[\u001b[38;5;241m1\u001b[39m])\n\u001b[0;32m 176\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlabel2 \u001b[38;5;241m=\u001b[39m mtext\u001b[38;5;241m.\u001b[39mText(\n\u001b[0;32m 177\u001b[0m np\u001b[38;5;241m.\u001b[39mnan, np\u001b[38;5;241m.\u001b[39mnan,\n\u001b[0;32m 178\u001b[0m fontsize\u001b[38;5;241m=\u001b[39mlabelsize, color\u001b[38;5;241m=\u001b[39mlabelcolor, visible\u001b[38;5;241m=\u001b[39mlabel2On,\n\u001b[0;32m 179\u001b[0m fontfamily\u001b[38;5;241m=\u001b[39mlabelfontfamily, rotation\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_labelrotation[\u001b[38;5;241m1\u001b[39m])\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\lines.py:1037\u001b[0m, in \u001b[0;36mLine2D.get_path\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1035\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return the `~matplotlib.path.Path` associated with this line.\"\"\"\u001b[39;00m\n\u001b[0;32m 1036\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_invalidy \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_invalidx:\n\u001b[1;32m-> 1037\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrecache\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1038\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_path\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\matplotlib\\lines.py:683\u001b[0m, in \u001b[0;36mLine2D.recache\u001b[1;34m(self, always)\u001b[0m\n\u001b[0;32m 680\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 681\u001b[0m y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y\n\u001b[1;32m--> 683\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_xy \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mcolumn_stack(\u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbroadcast_arrays\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m)\u001b[49m)\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mfloat\u001b[39m)\n\u001b[0;32m 684\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_x, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_y \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_xy\u001b[38;5;241m.\u001b[39mT \u001b[38;5;66;03m# views\u001b[39;00m\n\u001b[0;32m 686\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_subslice \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\a3012\\AIM-PIbd-31-Zhirnova-A-E\\aimenv\\Lib\\site-packages\\numpy\\lib\\_stride_tricks_impl.py:560\u001b[0m, in \u001b[0;36mbroadcast_arrays\u001b[1;34m(subok, *args)\u001b[0m\n\u001b[0;32m 556\u001b[0m args \u001b[38;5;241m=\u001b[39m [np\u001b[38;5;241m.\u001b[39marray(_m, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, subok\u001b[38;5;241m=\u001b[39msubok) \u001b[38;5;28;01mfor\u001b[39;00m _m \u001b[38;5;129;01min\u001b[39;00m args]\n\u001b[0;32m 558\u001b[0m shape \u001b[38;5;241m=\u001b[39m _broadcast_shape(\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m--> 560\u001b[0m result \u001b[38;5;241m=\u001b[39m [array \u001b[38;5;28;01mif\u001b[39;00m array\u001b[38;5;241m.\u001b[39mshape \u001b[38;5;241m==\u001b[39m shape\n\u001b[0;32m 561\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m _broadcast_to(array, shape, subok\u001b[38;5;241m=\u001b[39msubok, readonly\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m 562\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m array \u001b[38;5;129;01min\u001b[39;00m args]\n\u001b[0;32m 563\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mtuple\u001b[39m(result)\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] } ], "source": [ @@ -1302,145 +1365,145 @@ }, { "cell_type": "code", - "execution_count": 227, + "execution_count": 166, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_testPrecision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
logistic1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000logistic1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000ridge1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000decision_tree1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
knn1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000knn1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000naive_bayes1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000gradient_boosting1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000random_forest1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
mlp1.0000001.0000000.9942220.9946710.9979780.9981340.9971030.997329mlp1.0000001.0000000.9942220.9946710.9979780.9981340.9971030.997329
\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 227, + "execution_count": 166, "metadata": {}, "output_type": "execute_result" } @@ -1496,118 +1559,118 @@ }, { "cell_type": "code", - "execution_count": 228, + "execution_count": 167, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_testAccuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
logistic1.0000001.0000001.0000001.0000001.000000logistic1.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.000000ridge1.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.000000decision_tree1.0000001.0000001.0000001.0000001.000000
knn1.0000001.0000001.0000001.0000001.000000knn1.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.000000naive_bayes1.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.000000gradient_boosting1.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.000000random_forest1.0000001.0000001.0000001.0000001.000000
mlp0.9981340.9973291.0000000.9958950.995904mlp0.9981340.9973291.0000000.9958950.995904
\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 228, + "execution_count": 167, "metadata": {}, "output_type": "execute_result" } @@ -1653,7 +1716,7 @@ }, { "cell_type": "code", - "execution_count": 229, + "execution_count": 168, "metadata": {}, "outputs": [ { @@ -1681,7 +1744,7 @@ }, { "cell_type": "code", - "execution_count": 230, + "execution_count": 169, "metadata": {}, "outputs": [ { @@ -1737,7 +1800,7 @@ "Index: []" ] }, - "execution_count": 230, + "execution_count": 169, "metadata": {}, "output_type": "execute_result" } @@ -1769,7 +1832,7 @@ }, { "cell_type": "code", - "execution_count": 231, + "execution_count": 170, "metadata": {}, "outputs": [ { @@ -1933,7 +1996,7 @@ }, { "cell_type": "code", - "execution_count": 233, + "execution_count": 171, "metadata": {}, "outputs": [ { @@ -1953,7 +2016,7 @@ " 'model__n_estimators': 10}" ] }, - "execution_count": 233, + "execution_count": 171, "metadata": {}, "output_type": "execute_result" } @@ -1988,9 +2051,21 @@ }, { "cell_type": "code", - "execution_count": 258, + "execution_count": 172, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'numeric_features' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[172], line 10\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m metrics\n\u001b[0;32m 8\u001b[0m \u001b[38;5;66;03m# Определение трансформера (пример)\u001b[39;00m\n\u001b[0;32m 9\u001b[0m pipeline_end \u001b[38;5;241m=\u001b[39m ColumnTransformer([\n\u001b[1;32m---> 10\u001b[0m (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnumeric\u001b[39m\u001b[38;5;124m'\u001b[39m, StandardScaler(), \u001b[43mnumeric_features\u001b[49m), \u001b[38;5;66;03m# numeric_features - это список числовых признаков\u001b[39;00m\n\u001b[0;32m 11\u001b[0m \u001b[38;5;66;03m# Добавьте другие трансформеры, если требуется\u001b[39;00m\n\u001b[0;32m 12\u001b[0m ])\n\u001b[0;32m 14\u001b[0m \u001b[38;5;66;03m# Объявление модели\u001b[39;00m\n\u001b[0;32m 15\u001b[0m optimized_model \u001b[38;5;241m=\u001b[39m RandomForestClassifier(\n\u001b[0;32m 16\u001b[0m random_state\u001b[38;5;241m=\u001b[39mrandom_state,\n\u001b[0;32m 17\u001b[0m criterion\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgini\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 20\u001b[0m n_estimators\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m,\n\u001b[0;32m 21\u001b[0m )\n", + "\u001b[1;31mNameError\u001b[0m: name 'numeric_features' is not defined" + ] + } + ], "source": [ "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import StandardScaler\n", @@ -2051,7 +2126,7 @@ }, { "cell_type": "code", - "execution_count": 259, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2075,7 +2150,7 @@ }, { "cell_type": "code", - "execution_count": 260, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2190,7 +2265,7 @@ }, { "cell_type": "code", - "execution_count": 261, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2292,7 +2367,7 @@ }, { "cell_type": "code", - "execution_count": 262, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2333,7 +2408,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Определение достижимого уровня качества модели для второй задачи" + "## Определение достижимого уровня качества модели для второй задачи (добавляю конвейер для решения задачи регрессии)" ] }, { @@ -2352,7 +2427,7 @@ }, { "cell_type": "code", - "execution_count": 239, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2440,7 +2515,7 @@ }, { "cell_type": "code", - "execution_count": 240, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -3158,7 +3233,7 @@ }, { "cell_type": "code", - "execution_count": 241, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3247,7 +3322,7 @@ }, { "cell_type": "code", - "execution_count": 242, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -3478,7 +3553,7 @@ }, { "cell_type": "code", - "execution_count": 243, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -3521,7 +3596,7 @@ }, { "cell_type": "code", - "execution_count": 244, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -3608,7 +3683,7 @@ }, { "cell_type": "code", - "execution_count": 245, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -3655,7 +3730,7 @@ }, { "cell_type": "code", - "execution_count": 247, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -3853,7 +3928,7 @@ }, { "cell_type": "code", - "execution_count": 248, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4005,7 +4080,7 @@ }, { "cell_type": "code", - "execution_count": 249, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4033,7 +4108,7 @@ }, { "cell_type": "code", - "execution_count": 250, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4121,7 +4196,7 @@ }, { "cell_type": "code", - "execution_count": 251, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4285,7 +4360,7 @@ }, { "cell_type": "code", - "execution_count": 252, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4332,7 +4407,7 @@ }, { "cell_type": "code", - "execution_count": 264, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4374,7 +4449,7 @@ }, { "cell_type": "code", - "execution_count": 254, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -4398,7 +4473,7 @@ }, { "cell_type": "code", - "execution_count": 255, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4513,7 +4588,7 @@ }, { "cell_type": "code", - "execution_count": 256, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4615,7 +4690,7 @@ }, { "cell_type": "code", - "execution_count": 257, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -4651,6 +4726,1416 @@ "\n", "В зеленом квадрате значение 558 указывает на количество правильно классифицированных объектов, отнесенных к классу \"More\". Это также является показателем высокой точности модели в определении объектов данного класса." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Определение достижимого уровня качества модели для второй задачи (задача регрессии)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "__2. Прогнозирование цены закрытия акций:__\n", + "\n", + "\n", + "Описание: Оценить, какая будет цена закрытия акций Starbucks на следующий день или через несколько дней на основе исторических данных.\n", + "Целевая переменная: Цена закрытия (Close). (среднее значение)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Загрузка данных и создание целевой переменной" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Среднее значение поля 'Close': 30.058856538825285\n", + " Date Open High Low Close Adj Close Volume \\\n", + "0 1992-06-26 0.328125 0.347656 0.320313 0.335938 0.260703 224358400 \n", + "1 1992-06-29 0.339844 0.367188 0.332031 0.359375 0.278891 58732800 \n", + "2 1992-06-30 0.367188 0.371094 0.343750 0.347656 0.269797 34777600 \n", + "3 1992-07-01 0.351563 0.359375 0.339844 0.355469 0.275860 18316800 \n", + "4 1992-07-02 0.359375 0.359375 0.347656 0.355469 0.275860 13996800 \n", + "\n", + " above_average_close Close_Next_Day \n", + "0 0 0.359375 \n", + "1 0 0.347656 \n", + "2 0 0.355469 \n", + "3 0 0.355469 \n", + "4 0 0.355469 \n", + "Статистическое описание DataFrame:\n", + " Open High Low Close Adj Close \\\n", + "count 8035.000000 8035.000000 8035.000000 8035.000000 8035.000000 \n", + "mean 30.048051 30.345221 29.745172 30.052733 26.667480 \n", + "std 33.613031 33.904070 33.312079 33.613521 31.724640 \n", + "min 0.328125 0.347656 0.320313 0.335938 0.260703 \n", + "25% 4.391563 4.531250 4.304844 4.399219 3.413997 \n", + "50% 13.325000 13.485000 13.150000 13.330000 10.352452 \n", + "75% 55.250000 55.715000 54.829999 55.254999 47.461098 \n", + "max 126.080002 126.320000 124.809998 126.059998 118.010414 \n", + "\n", + " Volume above_average_close Close_Next_Day \n", + "count 8.035000e+03 8035.000000 8035.000000 \n", + "mean 1.470584e+07 0.347480 30.062556 \n", + "std 1.340058e+07 0.476199 33.616368 \n", + "min 1.504000e+06 0.000000 0.347656 \n", + "25% 7.818550e+06 0.000000 4.403125 \n", + "50% 1.170240e+07 0.000000 13.330000 \n", + "75% 1.778850e+07 1.000000 55.274999 \n", + "max 5.855088e+08 1.000000 126.059998 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn import set_config\n", + "\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "# Загрузка данных о ценах акций Starbucks из CSV файла\n", + "df = pd.read_csv(\".//static//csv//Starbucks Dataset.csv\")\n", + "\n", + "# Опция для настройки генерации случайных чисел (если это нужно для других частей кода)\n", + "random_state = 42\n", + "\n", + "# Вычисление среднего значения поля \"Close\"\n", + "average_close = df['Close'].mean()\n", + "print(f\"Среднее значение поля 'Close': {average_close}\")\n", + "\n", + "# Создание новой колонки, указывающей, выше или ниже среднего значение цена закрытия\n", + "df['above_average_close'] = (df['Close'] > average_close).astype(int)\n", + "\n", + "# Создание целевой переменной для прогнозирования (цена закрытия на следующий день)\n", + "df['Close_Next_Day'] = df['Close'].shift(-1)\n", + "\n", + "# Удаление последней строки, где нет значения для следующего дня\n", + "df.dropna(inplace=True)\n", + "\n", + "# Вывод DataFrame с новой колонкой\n", + "print(df.head())\n", + "\n", + "# Примерный анализ данных\n", + "print(\"Статистическое описание DataFrame:\")\n", + "print(df.describe())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи регрессии\n", + "\n", + "Целевой признак -- above_average_close" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'X_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateOpenHighLowCloseAdj CloseVolumeClose_Next_Day
55522014-07-1439.49000239.49000239.20999939.27999932.493519456200039.445000
34222006-01-2515.34000015.38000015.09500015.18000011.780375727660015.745000
62142017-02-2856.70999957.06000156.54999956.86999948.946602875070057.139999
35012006-05-1818.22500018.25000017.96500017.99000013.9610621336600018.165001
26882003-02-265.6575005.6825005.5200005.5500004.307055167384005.772500
...........................
52262013-03-2728.43000028.47500028.10500028.45500023.144903745700028.475000
53902013-11-1840.50999840.66999840.10500040.27000033.065239831640039.959999
8601995-11-201.3554691.3671881.3281251.3320311.033717309984001.343750
76032022-09-0285.47000185.76999782.55000382.94000279.6838071033680084.519997
72702021-05-10114.570000116.089996114.209999114.300003106.5773095759500113.550003
\n", + "

6428 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Date Open High Low Close Adj Close \\\n", + "5552 2014-07-14 39.490002 39.490002 39.209999 39.279999 32.493519 \n", + "3422 2006-01-25 15.340000 15.380000 15.095000 15.180000 11.780375 \n", + "6214 2017-02-28 56.709999 57.060001 56.549999 56.869999 48.946602 \n", + "3501 2006-05-18 18.225000 18.250000 17.965000 17.990000 13.961062 \n", + "2688 2003-02-26 5.657500 5.682500 5.520000 5.550000 4.307055 \n", + "... ... ... ... ... ... ... \n", + "5226 2013-03-27 28.430000 28.475000 28.105000 28.455000 23.144903 \n", + "5390 2013-11-18 40.509998 40.669998 40.105000 40.270000 33.065239 \n", + "860 1995-11-20 1.355469 1.367188 1.328125 1.332031 1.033717 \n", + "7603 2022-09-02 85.470001 85.769997 82.550003 82.940002 79.683807 \n", + "7270 2021-05-10 114.570000 116.089996 114.209999 114.300003 106.577309 \n", + "\n", + " Volume Close_Next_Day \n", + "5552 4562000 39.445000 \n", + "3422 7276600 15.745000 \n", + "6214 8750700 57.139999 \n", + "3501 13366000 18.165001 \n", + "2688 16738400 5.772500 \n", + "... ... ... \n", + "5226 7457000 28.475000 \n", + "5390 8316400 39.959999 \n", + "860 30998400 1.343750 \n", + "7603 10336800 84.519997 \n", + "7270 5759500 113.550003 \n", + "\n", + "[6428 rows x 8 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'y_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_close
55521
34220
62141
35010
26880
......
52260
53901
8600
76031
72701
\n", + "

6428 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_close\n", + "5552 1\n", + "3422 0\n", + "6214 1\n", + "3501 0\n", + "2688 0\n", + "... ...\n", + "5226 0\n", + "5390 1\n", + "860 0\n", + "7603 1\n", + "7270 1\n", + "\n", + "[6428 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'X_test'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
DateOpenHighLowCloseAdj CloseVolumeClose_Next_Day
66372018-10-3158.98000059.11999958.20999958.27000051.7544561156040058.630001
66322018-10-2458.57000059.27999957.95000158.06000151.5679401218970058.959999
73272021-07-30122.190002122.980003121.099998121.430000113.6760715712300120.370003
7301995-05-170.9375000.9414060.9023440.9101560.706323258112000.912109
15151998-06-253.2265633.3281253.2187503.2851562.549432346992003.382813
...........................
57772015-06-0451.86999952.18000051.57000051.72000143.400497623080052.189999
77192023-02-21105.500000105.949997104.709999104.779999101.7522435438000104.769997
16771999-02-172.9726563.0234382.9062502.9101562.258415177760002.933594
9211996-02-161.0312501.0546881.0156251.0312500.80029778096001.031250
3221993-10-050.8359380.8359380.8046880.8203130.63660091136000.812500
\n", + "

1607 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Date Open High Low Close Adj Close \\\n", + "6637 2018-10-31 58.980000 59.119999 58.209999 58.270000 51.754456 \n", + "6632 2018-10-24 58.570000 59.279999 57.950001 58.060001 51.567940 \n", + "7327 2021-07-30 122.190002 122.980003 121.099998 121.430000 113.676071 \n", + "730 1995-05-17 0.937500 0.941406 0.902344 0.910156 0.706323 \n", + "1515 1998-06-25 3.226563 3.328125 3.218750 3.285156 2.549432 \n", + "... ... ... ... ... ... ... \n", + "5777 2015-06-04 51.869999 52.180000 51.570000 51.720001 43.400497 \n", + "7719 2023-02-21 105.500000 105.949997 104.709999 104.779999 101.752243 \n", + "1677 1999-02-17 2.972656 3.023438 2.906250 2.910156 2.258415 \n", + "921 1996-02-16 1.031250 1.054688 1.015625 1.031250 0.800297 \n", + "322 1993-10-05 0.835938 0.835938 0.804688 0.820313 0.636600 \n", + "\n", + " Volume Close_Next_Day \n", + "6637 11560400 58.630001 \n", + "6632 12189700 58.959999 \n", + "7327 5712300 120.370003 \n", + "730 25811200 0.912109 \n", + "1515 34699200 3.382813 \n", + "... ... ... \n", + "5777 6230800 52.189999 \n", + "7719 5438000 104.769997 \n", + "1677 17776000 2.933594 \n", + "921 7809600 1.031250 \n", + "322 9113600 0.812500 \n", + "\n", + "[1607 rows x 8 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'y_test'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
above_average_close
66371
66321
73271
7300
15150
......
57771
77191
16770
9210
3220
\n", + "

1607 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " above_average_close\n", + "6637 1\n", + "6632 1\n", + "7327 1\n", + "730 0\n", + "1515 0\n", + "... ...\n", + "5777 1\n", + "7719 1\n", + "1677 0\n", + "921 0\n", + "322 0\n", + "\n", + "[1607 rows x 1 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from typing import Tuple\n", + "import pandas as pd\n", + "from pandas import DataFrame\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "def split_into_train_test(\n", + " df_input: DataFrame,\n", + " target_colname: str = \"above_average_close\",\n", + " frac_train: float = 0.8,\n", + " random_state: int = None,\n", + ") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n", + " \n", + " if not (0 < frac_train < 1):\n", + " raise ValueError(\"Fraction must be between 0 and 1.\")\n", + " \n", + " # Проверка наличия целевого признака\n", + " if target_colname not in df_input.columns:\n", + " raise ValueError(f\"{target_colname} is not a column in the DataFrame.\")\n", + " \n", + " # Разделяем данные на признаки и целевую переменную\n", + " X = df_input.drop(columns=[target_colname]) # Признаки\n", + " y = df_input[[target_colname]] # Целевая переменная\n", + "\n", + " # Разделяем данные на обучающую и тестовую выборки\n", + " X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y,\n", + " test_size=(1.0 - frac_train),\n", + " random_state=random_state\n", + " )\n", + " \n", + " return X_train, X_test, y_train, y_test\n", + "\n", + "# Применение функции для разделения данных\n", + "X_train, X_test, y_train, y_test = split_into_train_test(\n", + " df, \n", + " target_colname=\"above_average_close\", \n", + " frac_train=0.8, \n", + " random_state=42 # Убедитесь, что вы задали нужное значение random_state\n", + ")\n", + "\n", + "# Для отображения результатов\n", + "display(\"X_train\", X_train)\n", + "display(\"y_train\", y_train)\n", + "\n", + "display(\"X_test\", X_test)\n", + "display(\"y_test\", y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование конвейера для решения задачи регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import OneHotEncoder\n", + "from sklearn.ensemble import RandomForestRegressor # Пример регрессионной модели\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.pipeline import make_pipeline\n", + "\n", + "class StarbucksFeatures(BaseEstimator, TransformerMixin):\n", + " def __init__(self):\n", + " pass\n", + " \n", + " def fit(self, X, y=None):\n", + " return self\n", + "\n", + " def transform(self, X, y=None):\n", + " X[\"Length_to_Width_Ratio\"] = X[\"x\"] / X[\"y\"]\n", + " return X\n", + "\n", + " def get_feature_names_out(self, features_in):\n", + " return np.append(features_in, [\"Length_to_Width_Ratio\"], axis=0)\n", + "\n", + "# Указываем столбцы, которые нужно удалить и обрабатывать\n", + "columns_to_drop = [\"Date\"]\n", + "num_columns = [\"Close\", \"Open\", \"Adj Close\", \"High\", \"Low\", \"Volume\"]\n", + "cat_columns = [] \n", + "\n", + "# Определяем предобработку для численных данных\n", + "num_imputer = SimpleImputer(strategy=\"median\")\n", + "num_scaler = StandardScaler()\n", + "preprocessing_num = Pipeline(\n", + " [\n", + " (\"imputer\", num_imputer),\n", + " (\"scaler\", num_scaler),\n", + " ]\n", + ")\n", + "\n", + "# Определяем предобработку для категориальных данных\n", + "cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n", + "cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n", + "preprocessing_cat = Pipeline(\n", + " [\n", + " (\"imputer\", cat_imputer),\n", + " (\"encoder\", cat_encoder),\n", + " ]\n", + ")\n", + "\n", + "# Подготовка признаков с использованием ColumnTransformer\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num, num_columns),\n", + " (\"preprocessing_cat\", preprocessing_cat, cat_columns),\n", + " ],\n", + " remainder=\"passthrough\"\n", + ")\n", + "\n", + "# Удаление нежелательных столбцов\n", + "drop_columns = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"drop_columns\", \"drop\", columns_to_drop),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Постобработка признаков\n", + "features_postprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_cat\", preprocessing_cat, [\"Cabin_type\"]), \n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "# Создание окончательного конвейера\n", + "pipeline = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"drop_columns\", drop_columns),\n", + " (\"model\", RandomForestRegressor()) # Выбор модели для обучения\n", + " ]\n", + ")\n", + "\n", + "# Использование конвейера\n", + "def train_pipeline(X, y):\n", + " pipeline.fit(X, y)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Формирование набора моделей для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random Forest: Mean Score = 0.9746978079010529, Standard Deviation = 0.012793762025792637\n", + "Linear Regression: Mean Score = 0.9868838982543027, Standard Deviation = 0.0041016418339485\n", + "Gradient Boosting: Mean Score = 0.9790461912830413, Standard Deviation = 0.008537795226791314\n", + "Support Vector Regression: Mean Score = -0.10833533729231568, Standard Deviation = 0.29324311707552003\n" + ] + } + ], + "source": [ + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import GradientBoostingRegressor\n", + "from sklearn.svm import SVR\n", + "from sklearn.model_selection import cross_val_score\n", + "\n", + "def train_multiple_models(X, y, models):\n", + " results = {}\n", + " for model_name, model in models.items():\n", + " # Создаем конвейер для каждой модели\n", + " model_pipeline = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"drop_columns\", drop_columns),\n", + " (\"model\", model) # Используем текущую модель\n", + " ]\n", + " )\n", + " \n", + " # Обучаем модель и вычисляем кросс-валидацию\n", + " scores = cross_val_score(model_pipeline, X, y, cv=5) # 5-кратная кросс-валидация\n", + " results[model_name] = {\n", + " \"mean_score\": scores.mean(),\n", + " \"std_dev\": scores.std()\n", + " }\n", + " \n", + " return results\n", + "\n", + "models = {\n", + " \"Random Forest\": RandomForestRegressor(),\n", + " \"Linear Regression\": LinearRegression(),\n", + " \"Gradient Boosting\": GradientBoostingRegressor(),\n", + " \"Support Vector Regression\": SVR()\n", + "}\n", + "\n", + "results = train_multiple_models(X_train, y_train, models)\n", + "\n", + "# Вывод результатов\n", + "for model_name, scores in results.items():\n", + " print(f\"{model_name}: Mean Score = {scores['mean_score']}, Standard Deviation = {scores['std_dev']}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Лидирующие модели: Линейная регрессия проявила наилучшие результаты, за ней следует градиентный бустинг и Random Forest. Они продемонстрировали высокую эффективность в предсказании закрытия акций.\n", + "Проблемы SVR: Резкое отличие в результатах SVR выявляет необходимость более тщательной настройки или выбора других подходов к решению задачи, поскольку текущие параметры не обеспечили адекватного уровня прогноза." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обучение моделей на обучающем наборе данных и оценка на тестовом для регрессии" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: logistic\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: ridge\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: decision_tree\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: knn\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: naive_bayes\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: gradient_boosting\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: random_forest\n", + "MSE (train): 0.0\n", + "MSE (test): 0.0\n", + "MAE (train): 0.0\n", + "MAE (test): 0.0\n", + "R2 (train): 1.0\n", + "R2 (test): 1.0\n", + "STD (train): 0.0\n", + "STD (test): 0.0\n", + "----------------------------------------\n", + "Model: mlp\n", + "MSE (train): 0.0020224019912881146\n", + "MSE (test): 0.0018656716417910447\n", + "MAE (train): 0.0020224019912881146\n", + "MAE (test): 0.0018656716417910447\n", + "R2 (train): 0.9911106856018297\n", + "R2 (test): 0.9918005898000289\n", + "STD (train): 0.044925626111093304\n", + "STD (test): 0.04315311009783723\n", + "----------------------------------------\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "\n", + "# Проверка наличия необходимых переменных\n", + "if 'class_models' not in locals():\n", + " raise ValueError(\"class_models is not defined\")\n", + "if 'X_train' not in locals() or 'X_test' not in locals() or 'y_train' not in locals() or 'y_test' not in locals():\n", + " raise ValueError(\"Train/test data is not defined\")\n", + "\n", + "\n", + "y_train = np.ravel(y_train) \n", + "y_test = np.ravel(y_test) \n", + "\n", + "# Инициализация списка для хранения результатов\n", + "results = []\n", + "\n", + "# Проход по моделям и оценка их качества\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + " \n", + " # Извлечение модели из словаря\n", + " model = class_models[model_name][\"model\"]\n", + " \n", + " # Создание пайплайна\n", + " model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n", + " \n", + " # Обучение модели\n", + " model_pipeline.fit(X_train, y_train)\n", + "\n", + " # Предсказание для обучающей и тестовой выборки\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_predict = model_pipeline.predict(X_test)\n", + "\n", + " # Сохранение пайплайна и предсказаний\n", + " class_models[model_name][\"pipeline\"] = model_pipeline\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " # Вычисление метрик для регрессии\n", + " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n", + " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n", + " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n", + " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n", + "\n", + " # Дополнительные метрики\n", + " class_models[model_name][\"STD_train\"] = np.std(y_train - y_train_predict)\n", + " class_models[model_name][\"STD_test\"] = np.std(y_test - y_test_predict)\n", + "\n", + " # Вывод результатов для текущей модели\n", + " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n", + " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n", + " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n", + " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n", + " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n", + " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n", + " print(f\"STD (train): {class_models[model_name]['STD_train']}\")\n", + " print(f\"STD (test): {class_models[model_name]['STD_test']}\")\n", + " print(\"-\" * 40) # Разделитель для разных моделей" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Пример использования обученной модели (конвейера регрессии) для предсказания" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: RandomForest\n", + "MSE (train): 0.0001403391412570006\n", + "MSE (test): 0.0006576851275668948\n", + "MAE (train): 0.0005491599253266957\n", + "MAE (test): 0.0011761045426260113\n", + "R2 (train): 0.9993811021756365\n", + "R2 (test): 0.9971008099591692\n", + "----------------------------------------\n", + "Прогноз: Цена закроется ниже среднего значения завтрашнего дня.\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.ensemble import RandomForestRegressor # пример модели\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "# 1. Загрузка данных\n", + "data = pd.read_csv(\".//static//csv//Starbucks Dataset.csv\") \n", + "data['Date'] = pd.to_datetime(data['Date'])\n", + "data.set_index('Date', inplace=True)\n", + "\n", + "# 2. Подготовка данных для прогноза\n", + "data['Close_shifted'] = data['Close'].shift(-1) # Смещение на 1 день для предсказания\n", + "data.dropna(inplace=True) # Удаление NaN, возникших из-за смещения\n", + "\n", + "# Вычисляем среднее значение закрытия\n", + "average_close = data['Close'].mean()\n", + "data['above_average_close'] = (data['Close_shifted'] > average_close).astype(int) # 1, если выше среднего, иначе 0\n", + "\n", + "# Предикторы и целевая переменная\n", + "X = data[['Open', 'High', 'Low', 'Close', 'Volume']]\n", + "y = data['above_average_close']\n", + "\n", + "\n", + "# 3. Инициализация модели и пайплайна\n", + "class_models = {\n", + " \"RandomForest\": {\n", + " \"model\": RandomForestRegressor(n_estimators=100, random_state=42),\n", + " }\n", + "}\n", + "\n", + "pipeline_end = StandardScaler() \n", + "results = []\n", + "\n", + "# 4. Обучение модели и оценка\n", + "for model_name in class_models.keys():\n", + " print(f\"Model: {model_name}\")\n", + " \n", + " model = class_models[model_name][\"model\"]\n", + " model_pipeline = Pipeline([(\"scaler\", pipeline_end), (\"model\", model)])\n", + " \n", + " # Обучение модели\n", + " model_pipeline.fit(X_train, y_train)\n", + "\n", + " # Предсказание\n", + " y_train_predict = model_pipeline.predict(X_train)\n", + " y_test_predict = model_pipeline.predict(X_test)\n", + "\n", + " # Сохранение результатов\n", + " class_models[model_name][\"preds\"] = y_test_predict\n", + "\n", + " # Вычисление метрик\n", + " class_models[model_name][\"MSE_train\"] = metrics.mean_squared_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MSE_test\"] = metrics.mean_squared_error(y_test, y_test_predict)\n", + " class_models[model_name][\"MAE_train\"] = metrics.mean_absolute_error(y_train, y_train_predict)\n", + " class_models[model_name][\"MAE_test\"] = metrics.mean_absolute_error(y_test, y_test_predict)\n", + " class_models[model_name][\"R2_train\"] = metrics.r2_score(y_train, y_train_predict)\n", + " class_models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_predict)\n", + "\n", + " # Вывод результатов\n", + " print(f\"MSE (train): {class_models[model_name]['MSE_train']}\")\n", + " print(f\"MSE (test): {class_models[model_name]['MSE_test']}\")\n", + " print(f\"MAE (train): {class_models[model_name]['MAE_train']}\")\n", + " print(f\"MAE (test): {class_models[model_name]['MAE_test']}\")\n", + " print(f\"R2 (train): {class_models[model_name]['R2_train']}\")\n", + " print(f\"R2 (test): {class_models[model_name]['R2_test']}\")\n", + " print(\"-\" * 40)\n", + "\n", + "# Прогнозирование выше среднего для следующего дня\n", + "latest_data = X_test.iloc[-1:].copy()\n", + "predicted_above_average = model_pipeline.predict(latest_data)\n", + "predicted_above_average = 1 if predicted_above_average[0] > 0.5 else 0 # Преобразуем в бинарный выход\n", + "\n", + "if predicted_above_average == 1:\n", + " print(\"Прогноз: Цена закроется выше среднего значения завтрашнего дня.\")\n", + "else:\n", + " print(\"Прогноз: Цена закроется ниже среднего значения завтрашнего дня.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Подбор гиперпараметров методом поиска по сетке" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n", + "Лучшие параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE): 0.6848872116583115\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.ensemble import RandomForestRegressor # Используем регрессор\n", + "from sklearn.preprocessing import StandardScaler\n", + "\n", + "\n", + "# 1. Подготовка данных для прогноза\n", + "data['above_average_close'] = data['Close'].shift(-1) # Смещение на 1 день для предсказания\n", + "data.dropna(inplace=True) # Удаление NaN, возникших из-за смещения\n", + "\n", + "# Предикторы и целевая переменная\n", + "X = data[['Open', 'High', 'Low', 'Close', 'Volume']]\n", + "y = data['above_average_close'] # Целевая переменная для регрессии\n", + "\n", + "# Делим данные на обучающую и тестовую выборки\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "# 2. Создание и настройка модели случайного леса\n", + "model = RandomForestRegressor() # Изменяем на регрессор\n", + "\n", + "# Установка параметров для поиска по сетке\n", + "param_grid = {\n", + " 'n_estimators': [50, 100, 200], # Количество деревьев\n", + " 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n", + " 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n", + "}\n", + "\n", + "# 3. Подбор гиперпараметров с помощью Grid Search\n", + "grid_search = GridSearchCV(estimator=model, param_grid=param_grid,\n", + " scoring='neg_mean_squared_error', cv=5, n_jobs=-1, verbose=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "grid_search.fit(X_train, y_train)\n", + "\n", + "# 4. Результаты подбора гиперпараметров\n", + "print(\"Лучшие параметры:\", grid_search.best_params_)\n", + "print(\"Лучший результат (MSE):\", -grid_search.best_score_) # Меняем знак, так как берем отрицательное значение среднеквадратичной ошибки\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обучение модели с новыми гиперпараметрами и сравнение новых и старых данных" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n", + "Старые параметры: {'max_depth': 10, 'min_samples_split': 5, 'n_estimators': 200}\n", + "Лучший результат (MSE) на старых параметрах: 0.688662233031193\n", + "\n", + "Новые параметры: {'max_depth': 10, 'min_samples_split': 10, 'n_estimators': 200}\n", + "Лучший результат (MSE) на новых параметрах: 0.6794717145705662\n", + "Среднеквадратическая ошибка (MSE) на тестовых данных: 0.5876131198171756\n", + "Корень среднеквадратичной ошибки (RMSE) на тестовых данных: 0.7665592735184772\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAHWCAYAAABACtmGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABqPUlEQVR4nO3deVwWVf//8fcFyr4qgmvgvu+m4pLeuWCZuZRr5pqVmkuoqWXg8jU011LTtFKzzKXMSkvrRs19X3PLfQd3UFRQmN8f/rhuLwEvLgRBfD0fj+shc+bMmc+MA8OHc+aMyTAMQwAAAACAFNlldgAAAAAAkNWROAEAAACAFSROAAAAAGAFiRMAAAAAWEHiBAAAAABWkDgBAAAAgBUkTgAAAABgBYkTAAAAAFhB4gQAAAAAVpA4AQAAAIAVJE7AU+rYsWN65513VKRIETk5OcnDw0O1a9fWZ599ptu3b2d2eM+MNWvWyGQyyWQy6bvvvku2Tu3atWUymVSuXDmL8ri4OH322WeqXLmyPDw85OXlpbJly+rtt9/WoUOHzPXmzJlj3kdyn82bN2foMQIAAClHZgcAwHbLly9X69at5ejoqE6dOqlcuXKKi4vT+vXrNWjQIO3fv18zZ87M7DCfKU5OTpo/f746duxoUX7y5Elt3LhRTk5OSbZ57bXX9Mcff6h9+/bq0aOH7t69q0OHDmnZsmWqVauWSpUqZVF/5MiRKly4cJJ2ihUrlr4HAwAAkiBxAp4yJ06cULt27eTv769Vq1YpX7585nW9e/fW0aNHtXz58kyM8Nn08ssv69dff9Xly5fl4+NjLp8/f778/PxUvHhxXbt2zVy+bds2LVu2TKNHj9aHH35o0dbUqVN1/fr1JPt46aWXVK1atQw7BgAAkDKG6gFPmU8//VQ3b97U119/bZE0JSpWrJj69etnXjaZTHrvvff0/fffq2TJknJyclLVqlW1du1ai+1OnTqlXr16qWTJknJ2dlbu3LnVunVrnTx50qLew8PGXFxcVL58eX311VcW9bp06SI3N7ck8f34448ymUxas2aNRfmWLVvUpEkTeXp6ysXFRfXq1dOGDRss6gwfPlwmk0mXL1+2KN++fbtMJpPmzJljsf+AgACLemfOnJGzs7NMJlOS4/rjjz9Ut25dubq6yt3dXU2bNtX+/fuTxJ+S5s2by9HRUYsXL7Yonz9/vtq0aSN7e3uL8mPHjkm6P4zvYfb29sqdO3eq950aJ0+eTHGo38PnQpLq16+fbN0Hz7EkTZ8+XeXKlZOLi4tFvR9//NFqTOfOnVP37t2VP39+OTo6qnDhwurZs6fi4uKsDk98MJa9e/eqS5cu5mGrefPmVbdu3XTlyhWL/SVeP4cOHVKbNm3k4eGh3Llzq1+/frpz545F3cTvm5Qkxpd47latWiU7OzuFhIRY1Js/f75MJpOmT5/+yHNRv3591a9f36Js27Zt5mO1pn79+kmGgkrS+PHjk/0//uKLL1S2bFk5Ojoqf/786t27d5Jk/eFrwMfHR02bNtU///xjUS8zztWjrosHj/WXX35R06ZNzddY0aJFNWrUKMXHxydps1y5ctqxY4dq1aolZ2dnFS5cWDNmzLCoFxcXp5CQEFWtWlWenp5ydXVV3bp1tXr1aot6D36/LV261GLdnTt35O3tLZPJpPHjx1usO3funLp16yY/Pz85OjqqbNmy+uabb8zrHxwanNJn+PDhkmy73u/du6dRo0apaNGicnR0VEBAgD788EPFxsZa1AsICDDvx87OTnnz5lXbtm11+vTpR/6fAdkFPU7AU+a3335TkSJFVKtWrVRv8/fff2vhwoXq27evHB0d9cUXX6hJkybaunWr+Zetbdu2aePGjWrXrp0KFiyokydPavr06apfv74OHDggFxcXizYnTZokHx8fRUdH65tvvlGPHj0UEBCghg0b2nxMq1at0ksvvaSqVasqNDRUdnZ2mj17tl588UWtW7dO1atXt7nN5ISEhCT5hUGS5s2bp86dOysoKEhjx47VrVu3NH36dNWpU0e7du1KkoAlx8XFRc2bN9cPP/ygnj17SpL27Nmj/fv366uvvtLevXst6vv7+0uSvv/+e9WuXVs5clj/cRwVFZUkaTSZTDYlWe3bt9fLL78sSfr999/1ww8/pFi3VKlS+uijjyRJly9f1vvvv2+xfuHCherVq5fq16+vPn36yNXVVQcPHtQnn3xiNY7z58+revXqun79ut5++22VKlVK586d048//qhbt27phRde0Lx588z1R48eLUnmeCSZvwf++usvHT9+XF27dlXevHnNQ1X379+vzZs3J0k82rRpo4CAAIWFhWnz5s36/PPPde3aNX377bdW407Jiy++qF69eiksLEwtWrRQ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4kR5e3urVq1aatasmYKCglSlSpUk9QYMGKDt27ercuXK+r//+z9NnDhRQUFBNp2PRM7Ozho8eLBF78+DZs+erU6dOmnAgAEqWbKkWrRooW3btum5555L9XGl57kHgJRUqVJFixYt0oIFC1SuXDmFhIRo5MiRFq9YkO7/8StfvnwqV66cdu7cqaVLl5p7QSRp6tSpcnZ2lq+vr7755ht9//33Fr0iiUaNGqWPP/5YYWFhKl26tJo0aaLly5ercOHCaT4GOzs7LViwQDt27FC5cuX0/vvva9y4ccnWHTNmjMaMGaOKFStq/fr1+vXXX+Xj4yPp/miCVq1aqW3btqpRo4auXLli0fv0sJIlS2rIkCHJznLr4uKitWvX6rnnnlOrVq1UunRpde/eXXfu3LGpB6pBgwYqXry4XnjhBbVt21avvvqqhg8fblEnteceSI7JSM8n6IFn1Jw5c9S/f/9s8Xb5gIAA9e/fP8V3XWQ12encA0BWcPLkSRUuXFi7du1K8R14WU2XLl10/fp1LV26NLNDQTZGjxMAAAAAWEHiBAAAAABWMFQPAAAAAKygxwkAAAAArCBxAgAAAAArSJwAAAAAwAoSJwAAAACwgsQJAJDh7t69m9khAADwWEicAADp7ptvvtGLL76o5557Ti4uLnrzzTczOyQAAB5LjswOAACQcbp06aK5c+emuP7atWvy8vJK132+8847WrFihUaPHq1q1aopR44c8vX1Tdd9AADwpJE4AUA216RJE82ePduibOPGjXrttdfSfV/r1q3Tzz//rD179ihfvnzp3j4AAJmFoXoAkM05Ojoqb968Fp9cuXIlqffTTz+pbNmycnR0VEBAgCZMmJCkzpw5c2QymSw+lSpVMq9ftmyZypcvr7feekteXl7KlSuXunTpoqioKHOdhIQEjRw5UgULFpSjo6MqVaqkFStWmNefPHlSJpNJCxYsUK1ateTk5KRy5crp77//fuRxBgQEJInNZDKpRYsW5jorVqxQnTp15OXlpdy5c+uVV17RsWPHbNp3fHy8unfvrsKFC8vZ2VklS5bUZ599ZhFLly5dZDKZNHHiRIvyli1bymQyac6cOeayM2fOqE2bNubz1bx5c508eVKSNHz48GSPyWQyqX79+uZ9tWjRQiNGjFCePHnk4eGhd999V3FxceZ9xMbGqm/fvvL19ZWTk5Pq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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn import metrics\n", + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# 1. Настройка параметров для старых значений\n", + "old_param_grid = {\n", + " 'n_estimators': [50, 100, 200], # Количество деревьев\n", + " 'max_depth': [None, 10, 20, 30], # Максимальная глубина дерева\n", + " 'min_samples_split': [2, 5, 10] # Минимальное количество образцов для разбиения узла\n", + "}\n", + "\n", + "# Подбор гиперпараметров с помощью Grid Search для старых параметров\n", + "old_grid_search = GridSearchCV(estimator=RandomForestRegressor(), \n", + " param_grid=old_param_grid,\n", + " scoring='neg_mean_squared_error', cv=5, n_jobs=-1, verbose=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "old_grid_search.fit(X_train, y_train)\n", + "\n", + "# 2. Результаты подбора для старых параметров\n", + "old_best_params = old_grid_search.best_params_\n", + "old_best_mse = -old_grid_search.best_score_ # Меняем знак, так как берем отрицательное значение MSE\n", + "\n", + "# 3. Настройка параметров для новых значений\n", + "new_param_grid = {\n", + " 'n_estimators': [200],\n", + " 'max_depth': [10],\n", + " 'min_samples_split': [10]\n", + "}\n", + "\n", + "# Подбор гиперпараметров с помощью Grid Search для новых параметров\n", + "new_grid_search = GridSearchCV(estimator=RandomForestRegressor(), \n", + " param_grid=new_param_grid,\n", + " scoring='neg_mean_squared_error', cv=2)\n", + "\n", + "# Обучение модели на тренировочных данных\n", + "new_grid_search.fit(X_train, y_train)\n", + "\n", + "# 4. Результаты подбора для новых параметров\n", + "new_best_params = new_grid_search.best_params_\n", + "new_best_mse = -new_grid_search.best_score_ # Меняем знак, так как берем отрицательное значение MSE\n", + "\n", + "# 5. Обучение модели с лучшими параметрами для новых значений\n", + "model_best = RandomForestRegressor(**new_best_params)\n", + "model_best.fit(X_train, y_train)\n", + "\n", + "# Прогнозирование на тестовой выборке\n", + "y_pred = model_best.predict(X_test)\n", + "\n", + "# Оценка производительности модели\n", + "mse = metrics.mean_squared_error(y_test, y_pred)\n", + "rmse = np.sqrt(mse)\n", + "\n", + "# Вывод результатов\n", + "print(\"Старые параметры:\", old_best_params)\n", + "print(\"Лучший результат (MSE) на старых параметрах:\", old_best_mse)\n", + "print(\"\\nНовые параметры:\", new_best_params)\n", + "print(\"Лучший результат (MSE) на новых параметрах:\", new_best_mse)\n", + "print(\"Среднеквадратическая ошибка (MSE) на тестовых данных:\", mse)\n", + "print(\"Корень среднеквадратичной ошибки (RMSE) на тестовых данных:\", rmse)\n", + "\n", + "# Визуализация ошибок\n", + "plt.figure(figsize=(10, 5))\n", + "plt.bar(['Старые параметры', 'Новые параметры'], [old_best_mse, new_best_mse], color=['blue', 'orange'])\n", + "plt.xlabel('Подбор параметров')\n", + "plt.ylabel('Среднеквадратическая ошибка (MSE)')\n", + "plt.title('Сравнение MSE для старых и новых параметров')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Сравнив результаты с использованием старых и новых параметров, наблюдается, что новые параметры модели позволили добиться меньшей среднеквадратической ошибки, что указывает на более эффективное предсказание по сравнению со старыми настройками. Значение RMSE на тестовых данных также подтверждает улучшение качества модели, так как оно стало меньше и указывает на более точные прогнозы по сравнению с предыдущими настройками." + ] } ], "metadata": {