{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# STK player bot detector with SageMaker Linear Regression - Logistic Regression¶\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Install packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting mysql-connector-python\n", " Downloading mysql_connector_python-8.0.21-cp36-cp36m-manylinux1_x86_64.whl (15.8 MB)\n", "Requirement already satisfied: protobuf>=3.0.0 in /home/ec2-user/anaconda3/envs/pytorch_latest_p36/lib/python3.6/site-packages (from mysql-connector-python) (3.13.0)\n", "Requirement already satisfied: six>=1.9 in /home/ec2-user/anaconda3/envs/pytorch_latest_p36/lib/python3.6/site-packages (from protobuf>=3.0.0->mysql-connector-python) (1.14.0)\n", "Requirement already satisfied: setuptools in /home/ec2-user/anaconda3/envs/pytorch_latest_p36/lib/python3.6/site-packages (from protobuf>=3.0.0->mysql-connector-python) (45.2.0.post20200210)\n", "Installing collected packages: mysql-connector-python\n", "Successfully installed mysql-connector-python-8.0.21\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "bash: line 2: /home/ec2-user/SageMaker/amazon-aurora-call-to-amazon-sagemaker-sample/stk-sample/env-build/sagemaker/env: No such file or directory\n", "WARNING: You are using pip version 20.0.2; however, version 20.2.3 is available.\n", "You should consider upgrading via the '/home/ec2-user/anaconda3/envs/pytorch_latest_p36/bin/python -m pip install --upgrade pip' command.\n" ] } ], "source": [ "%%bash \n", "home=`pwd`\n", ". $home/env\n", "pip3 install mysql-connector-python" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "arn:aws:iam::163538056407:role/service-role/AmazonSageMaker-ExecutionRole-20200913T212219\n" ] } ], "source": [ "import sagemaker\n", "execution_role = sagemaker.get_execution_role()\n", "print(execution_role)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get training and test data from Aurora DB" ] }, { "cell_type": "code", "execution_count": 306, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 6.55 ms, sys: 41 µs, total: 6.59 ms\n", "Wall time: 5.97 ms\n" ] } ], "source": [ "%%time\n", "\n", "import json\n", "import boto3\n", "import csv\n", "import mysql.connector\n", "import sys\n", "import os\n", "import configparser\n", "\n", "config = configparser.ConfigParser()\n", "\n", "config.read('rds.ini')\n", "\n", "ENDPOINT=config['default']['ENDPOINT']\n", "USR=config['default']['USR']\n", "PASWD=config['default']['PASWD']\n", "REGION=config['default']['REGION']\n", "DBNAME=config['default']['DBNAME']\n", "\n", "client = boto3.client('rds')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Getting the right size of the grouping" ] }, { "cell_type": "code", "execution_count": 307, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "actions_size=169275\n", "modulo_size=1692.75\n", "CPU times: user 20.2 ms, sys: 0 ns, total: 20.2 ms\n", "Wall time: 119 ms\n" ] } ], "source": [ "%%time\n", "import pandas as pd\n", "\n", "group_size=100\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " cur.execute(\"\"\"SELECT count(id) from actions where class is not null\"\"\")\n", " actions_size_list=cur.fetchall()\n", " actions_size_df=pd.DataFrame(actions_size_list)\n", " actions_size=actions_size_df[0].values[0]\n", " print(\"actions_size=\"+str(actions_size))\n", " modulo_size=actions_size/group_size\n", " print(\"modulo_size=\"+str(modulo_size))\n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))" ] }, { "cell_type": "code", "execution_count": 308, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 507 ms, sys: 57.3 ms, total: 564 ms\n", "Wall time: 695 ms\n" ] } ], "source": [ "%%time\n", "import pandas as pd\n", "\n", "modulo_size=100\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " \n", " cur.execute(\"\"\"SELECT id,m_ticks,m_action,m_value,m_value_l,m_value_r,class FROM actions WHERE class=1 order by id\"\"\")\n", " bot_action_list=cur.fetchall()\n", " cur.execute(\"\"\"SELECT id,m_ticks,m_action,m_value,m_value_l,m_value_r,class FROM actions WHERE class=0 order by id\"\"\")\n", " player_action_list=cur.fetchall() \n", " cur.execute(\"\"\"\n", " SELECT FLOOR(id/100) sessionid,id,m_ticks,m_kart_id,m_action,m_value,m_value_l,m_value_r,class\n", " FROM actions \n", " WHERE class IS NOT NULL\n", " ORDER BY id,m_kart_id \n", " \"\"\")\n", " action_list=cur.fetchall() \n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Investigate and process the data" ] }, { "cell_type": "code", "execution_count": 309, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "bot_actions = pd.DataFrame(bot_action_list)\n", "player_actions = pd.DataFrame(player_action_list)" ] }, { "cell_type": "code", "execution_count": 310, "metadata": {}, "outputs": [], "source": [ "bot_actions.rename(columns={0:'id',\n", " 1:'m_ticks',\n", " 2:'m_action',\n", " 3:'m_value',\n", " 4:'m_value_l',\n", " 5:'m_value_r',\n", " 6:'class'\n", " }, \n", " inplace=True)" ] }, { "cell_type": "code", "execution_count": 311, "metadata": {}, "outputs": [], "source": [ "player_actions.rename(columns={0:'id',\n", " 1:'m_ticks',\n", " 2:'m_action',\n", " 3:'m_value',\n", " 4:'m_value_l',\n", " 5:'m_value_r',\n", " 6:'class'\n", " }, \n", " inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Let's look for interesting data patterns" ] }, { "cell_type": "code", "execution_count": 312, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Corralation between ticks in bots and humans" ] }, { "cell_type": "code", "execution_count": 317, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bot_actions[31600:32000].plot(kind='scatter',x='id',y='m_ticks',color='red')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 316, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "player_actions[31600:32000].plot(kind='scatter',x='id',y='m_ticks',color='blue')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Correlation between action values in bots and humans" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that `m_ticks` are random for humans and consistent for bots.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Correlation between action values in bots and humans" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEGCAYAAABPdROvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO19e5TdVX3vZ2fOnJmTmQQCjC4E4kBtu4BWSTLkamu9qyIPYyvYW1ymr1wSC9SOILf0EqAW28halbQ3GrWdqGDwthMiate9+OgI6rVNVYZAeE7EDBAFZXnGyitUkpDs+8f+bc8+e/bz99u/15n9WWuvc84+v8d+f/f3uQmlFBEREREREWmxqOwCRERERETUG5GQRERERERkQiQkERERERGZEAlJREREREQmREISEREREZEJjbILUAZOOOEEOjo6WnYxIiIiImqDe++99yeU0hHVfwuSkIyOjmL37t1lFyMiIiKiNiCEfF/3XxRtRURERERkQiQkERERERGZEAlJREREREQmREISEREREZEJkZBERERERGTCgrTaCo65OWDPHvZ9xQpgZITl7d8PjI6y3/w6Oa+o8n3jG8CPfwy85S3A6acX9+60SNtWebex7fni/8D8ccGxdy8wPQ2sXj2/P3TvkJ+tG1/Dw8CBA+5lND1TLOtrXgM0m+z5Tz6prpfuXWKZTO3iUw+xDU84wdwvch3Ecjz7LPt+7LHAKaewuv3gB8DPftaZL6Y+MdVFV17xmbyetvqKbXPoEDA7y+rz4ousDrz8Dz3Umeu8XXz6LA0opQsurVq1igbD5CSl/f2UAiw1m5SOj1PaalF6zDHsc3KSJTmvCExOUrpoUad8ACtflZG2rfJuY9vzxf/7+ynt6+seF/z68XF9f+jeIT+72VSPr1aLPZN/t5WRP0f1TFVZxTrJ9dK1l1gmU7vo7lHVQy5Xo6HvF/naZnN+OUzp3HP1fSLPfV1byGXgz+T15M/R1VdsG/GdttRodN7hUk4DAOymmjW19EW9jBSMkLTblA4O2jtzcHB+Z7Za7P480W5TOjCgLtPMTL7vTot2O11bpb0vVLlU/8up1aJ01y59f+jeMTNjfrZqfKUto0tZTe8wtZftftM94jtmZtzL41oHn8T7RDX3VW1hK69Lm/q0Z9o+s8BESKKOJAv27wf6+uzX9fUBi6Sm7u9n9+eJ/fsBQtT/TU/n++602L+fiR5EuLRV2vuylmvPHuCee9in/L+MRYuAr35V/d/0tP4d09PmZ6vGl3g/bwPV83Xo79eXVcaiRfPb2edd/H7TPWI9bGOXX7tjB/Cbv+lWBh/wPlHNfVVbpJlr8tj1aU8XqMqZ5XHBnrQQMToKHDliv+7IEeDo0e68w4c7ctq8MDrK9h8qrF6d77vTYnSUyX9FuLRV2vuylOtnPwMuugg491zgwgvZbxOOHgXOO0/93+rV+jqsXj0/X4RqfIn38zZQPV+Hw4f1ZZVx9Oj8dvZ5F7/fdI9YD9vYPXyY6QQ2bGDfQ4P3iWruq9oizVyTx65Pe7pAVc4s0LEqvZwK05EsXTpfhi3mFYE660h82yrvNhafPzjI+lps1/7+zv9ZdSRyHcR8rs9QjS8ubrHpSOTnqJ6pKmsaHYlYJlcdia0eKh2JWPbpaabTUIl1uI5Enhe6dN55+j5JqyPhz+T19NGRNBruIqxGY74ILgcdCWH/LyyMjY3RoLG2otVWeFTdauuZZ4B3vhN47rnOf0uXArffDixbFq225HcVbbU1Nwe8+tXdXGJ/P/CFLwCvfGWnDl/6EjAxwcRUR48CH/wg8NrXRqstBQgh91JKx5T/RUISEZECqoWq1QK+//1iNwkReuzYwcRb/f1MVHTzzcDatZ38ZpMtyFu2ACtXlmcyXhOYCEnUkUREpMHICFuYWi3GibRa7HeNF4pCMDfHjBPm5vJ/19q1jLDfdRf7XLuWvXfDBrYBeO459nnVVfkt8jt2sA3HOecwbmHbtvDvqACiQ2JERFqsXcvEBz2w2ywEMifAOYQ8MTLS3S/c+kkWee3fH77/RKLFcfnl7POyy8K+q2REjiQiIgtGRoCzz45ExAYVJ7BhQzGciYi8rftE7N8PNBR79SuvLL7eOSMSkoiIiPyRt5+PK4oUSepMdpvN4uudMyIhiYiIyB9FcgI2qHQneWBkBPjIR+bnv/xyOfXOEZGQRERE5I+qGScUJZK87DJmXjwwACxZUn69c0I0/42IKAKuvhG9jh4xhfVGD9TbZP4brbZCowcGTERgcGslgCmZWy323cdqqVfGlWxFtVDQ4/WOoq2Q4Dbj557LPnfsKLtEEWVDtFbiZqD8u6vVUhxX9UWRfjMlIldCQggZJIRME0IeIIQ8Qgj5qyT/VELI3YSQfYSQnYSQZpI/kPyeTf4fFZ51bZL/KCHkfCH/giRvlhCyMc/6GFEV88aI/JBmUXCNaGt6Z17jaoEscqVhAW0A8uZIDgJ4M6X0dQDOAnABIeT1AD4EYAul9BcBPAMg4fuxAcAzlNLXANiSXAdCyBkA3gXgTAAXAPh7QkgfIaQPwMcBvBXAGQDWJtcWj6qYN0bkg7SLgmtEWx3yGlcLaJErBQtsY5krIUmCRh5IfvYniQJ4M4DPJfm3Argo+X5h8hvJ/+cQQkiSfxul9CCl9AkAswBWJ2mWUvo4pfQQgNuSa4tHlcwbI8Iiy6IwMsJiOamwZYtdbp7HuFpgi1wpCL0ByMI9FsB55q4jSTiH+wG0AdwJ4DEAz1JKX04ueQrAScn3kwA8CQDJ/88BOF7Ml+7R5avKcSkhZDchZPdcHg1aNfPGiHBwWRRMk3XlSmb6KWJ4mOXbkMe4itxz/gi5AZC5x23b3AlDQZxn7oSEUnqEUnoWgJPBOAhVDHNug6w6zo+myFeV4xOU0jFK6dhIXot7UY5OEcVieBh46aXuPHFRsE3W0VHmhCbiyBH3RSX0uIrcc/4ItQFQcY+XX86CQNoIQ4GcZ2FWW5TSZwH8PwCvB3AsIYSbHp8M4EfJ96cAnAIAyf/HAPipmC/do8svDzH2Um9hxw5g1arOUbatVvei4DJZsywqnNMBwo2ryD0z5C3yCbEB2LNHfYzyCy/YCUORnKfuxKsQCcAIgGOT7y0A/wbgtwDcDuBdSf4EgPck3/8UwETy/V0APpt8PxPAAwAGAJwK4HEAfWB+MI8nec3kmjNt5Qp6QmJE76LdZifSiafLDQxQOjPTuUZ1Et/SpSxf9bzpafbpAn4i3jHH5HPio295egl5t20ITE7OP91QTrqxRql6/LZaqfsbhhMS8yYkrwWwB8CDAB4G8JdJ/mkApsGU5rcDGEjyB5Pfs8n/pwnPuh5Mv/IogLcK+WsAfC/573qXckVCEuEEFyIReLLm/tyFAhORLLpt0xBsVRlVyVbugMdPl0ZIqpoiIYlwguuCk8dZ8T6cTkQ3bNxGqLZ1IRBpOR9VGYeGKN240X+sBeI8IyGJhCQiLVyJRGgxUeRI0sGl3UK0rQuByPIe070liSRNhCSGSImIMMFVYRrayCKrQnyheq27KJhHRjqxzzg2bPBrWxdrqCzKblP/V9CgJ0b/jYioMtIEayzjSNuqYG6OmcWKx9u2WmwTwNvP5RoT7rmHmXo/91wnb+lSttk4+2y/srjUpyLBOk3RfyNH0utYqDvTXoHv7nOhe627cHJZzWJd/XBCmFlXkPtQIRKSXkaMp7TwUEWv9aI3MzZxpIoQHDrk7pDpQyAWiJNyFG31KkKw1RH1Q9X6vapith07gHXrGCcBsPJt3+5XtgqJnYpAFG0tRFRxZ9rrqIIYsUpe6yox2yWXAHv3Fl8WGW95C9AQzvU7dMhfBFgTsVMRiISkVxHjKRWLKokRqyJOUW1mDh4EVqwoX8waN1pBEQlJr6JKO9NeRxUV3FXYLevOYjl4sPz2iRutoIiEpJdRlZ1pryPubtXgm5mBgfn/ld0+caMVFA37JRG1BndgisgPcXerx9q1wFlnMXHWwYOd/Cq0z9q1TFeygBTmeSFyJBERWWHa3VZBAV82Tj8d+MhHGGeyZEm1dv9VEAGqULNxEwlJREQIqMSIVVLAl4kdO4CrruqYAG/ZEsWsJtRw3EQ/koiIPFA1f46yUFY71NXHo8LjJvqRREQUjaiAZyijHWq4o/85ajpuIiGJiMgKlTw7KuAZim6HKppi+6Cm4yYSkoiILNDtfqN5KUPR7VDTHf3PUdNxE3UkCxV1lSFXCa4hy+vczqHKX1Q7VFjH4IUKjpuoI4noRp1lyFWC6yFKoc1LizINDTlOijKzddnR18G0tqpmyRpEjmShoVd2bFVAGW1ZVDTduo8T3Y6+qtGIbagAhxI5kogO6i5DrhKKlmebFMmhd9l1HyeqHX1dFfE1kCDkSkgIIacQQr5BCNlLCHmEEHJlkv8BQsgPCSH3J2mNcM+1hJBZQsijhJDzhfwLkrxZQshGIf9UQsjdhJB9hJCdhBBp9Ed0oaZWIZVFkfHMdIv7tm3hF5peHCdFEsdQhL0uxI9SmlsCcCKAlcn3JQC+B+AMAB8AcLXi+jMAPABgAMCpAB4D0JekxwCcBqCZXHNGcs9nAbwr+T4B4E9s5Vq1ahVd0JicpLTVonTpUvY5OVl2iRYu2m1Kp6fZp8u1rRalQCcNDs7Pa7XcnmdDr42TdpvSZrO7rZrNMG0lgrfbMcdkb7fpafYcscxLl7J8G3zGlgMA7KaaNTVXjoRS+jSl9L7k+wsA9gI4yXDLhQBuo5QepJQ+AWAWwOokzVJKH6eUHgJwG4ALCSEEwJsBfC65/1YAF+VTmx5CjApcDfiKLFSitOuvz2+XXcdxYuMEZJ1waB1xaA4iLWdYsDisMB0JIWQUwAoAdydZ44SQBwkhtxBCliV5JwF4UrjtqSRPl388gGcppS9L+ar3X0oI2U0I2T1XNbawDNTMKqTnkHbBkRf3yy7LVwRVp3FiWzz37wcWL+7Oa7XCirZCi8/S6OFKEIcVQkgIIcMAPg/gfZTS5wH8A4BfAHAWgKcB/B2/VHE7TZE/P5PST1BKxyilYyN1mBQRvY0sC464uNfUgS04XBZPl929i27DdE0euiVfzrAEQ4ncCQkhpB+MiPwTpfQLAEAp/TGl9Ail9CiAT4KJrgDGUZwi3H4ygB8Z8n8C4FhCSEPKj4ioNkIuOHUUQYWGq0+Piei6iINs1+RF2H04wzIMJXTKkxAJjGP4DIAPS/knCt+vAtOLAMCZ6Fa2Pw6maG8k309FR9l+ZnLP7ehWtr/HVq4Fr2yPqAZ6TZldJlSGCDqjA5US2uX+rO8oEjmMLRiU7XmfkPjrAP4QwEOEkPuTvOsArCWEnAUmhtoP4DIAoJQ+Qgj5LIAZAC8D+FNK6REAIISMA5hKCMstlNJHkuddA+A2QsgHAewBcHPOdYqICIN4Ql84cE5gwwbGiRw+rOcEVKeGco5GdMDkHA2/1uUa0zuKRMFjK3q2R0RE2DE3B+zZw76vWFFdopfWA9w1blqdvf0zInq2R0RE+EFUKO/YAZx0EnD++SydfHIlvasBpLcyc9FtlGXYUIPYYJEjKRsViKETUQDq1M9iPKqDB4EjR5ioSESv7sRd+qnIvqxQbLDIkVQVNYihExEAdepn2Yz2pZfmExEAWLSoPnG3fDAywgjE/v16DqAo35qQ/iA5czWRkJSFusTQiciGuvWzyoxWhaNH6x13S7ewVonoh/IHKaBOkZCUhbpHV41wQ936WeWD0N/PEkezmU43UBVZv25hrRrRD+EPUlCdIiHJG7rJ04vRVSO6MTcHPPNMvfpZpVC+9Vbghz8EpqZYeuopfzl9VXb6poW1akTfV7mvWmuKqpPOwaSXU2EOiaoooKKjUhUc0sp2nOoFiG3Iv09MdPq+v59Fma2T46HruHC5zseRL2+Youm6lrPoOePyPl3E4YBtD4NDYumLehmpEEKi6sD+/k5nDw5SumkTpTMz5S3kIcNdL1SIbcgJxpIl3f3Ow71PTZXb36HhOn6yhEIPDd3CyvuFbwB0RL/MOaMjKDZiEWjDGglJGYRENXlUqUxOpCq7xKrDZwLr0tKlbOOQdRGqCgfpGy6kSmNNXljHx7v7ZWIi3YJdRJlVY8eFUAcYN5GQlEFIfBaZMiZVlXaJVYbvBNalEAdQVYmD9B0/VRDjiuAL68yMe7+UNWdsBKwgAmciJFHZnhdkRdngoN6ssgyFXlT222GzeFG1oYwlS8IcQFV3i6KqRSjmviAHDrj3S1lzxqYwd1HKRz+SGkOcPD/4AbB9OyMoMspYwOM5Fnb4TuD+fnY9b8+JCeBrXwtzAFXdLYr4PaIjXxXMgW3EQSxjyDnjU3cXAmYi1EVYzOlYlV5OpYaRb7c7svIqsPlVkblXEWmseESRidyuWcQ7VdMziOVKM36qJKbjZRkepnRggOlITGXMOmfS1D3t2IlWWz1GSOTBFxfweiDNBDYtFFn6vWp6hrSoIlGcmGBEZMmSjsI9jzJmqXuasRNQrxMJSdmEpEq7rwh/+EzgvBdJV7+NKm9Sqmbooeqzvr7u36HKWHTdC+JIoo4kb1RNSRrhD1G2b5Nt563LsAUMrIoHuQlVM/RQ9dmRI/Ovy1rGMiIdFKQLjYQkb1RNSRqRHuIivXw58MEPViv0TahNS95K8KoZeoyOdh9WpcN116UvIx8773wn8PLL3UYZede9CIs5HavSy6lQ0VYV5cEqVF0cUgZkJbrKL0gWVU5OMg93/n+zWZwoM4TYpEgxbFXGXLvd3Wc6P6C05VSNHR7poOy6ewBRtFUiqrb7UqEO4pCiIbfJtm1qPyBx1885AvH8jkWL2NnZRSArN1Q0R1PUuR427N8PLF7cnTc4CAwMdObsLbekL6dKKtFsAsuWlV/3QIiEpAhUzRlLRNThzIeqTW68Ue98yEWVugWjKDFm1k1LCDFsHTclKgJMCDujPsScrZpOKAdEQlIUqrL7khF1OPOhIwjXXWd2KB0eZicKqv4rClk2LXlwNOvXA1/9arU3JjoCfPrpYeZsGVKJop09dTKvEAnAKQC+AWAvgEcAXJnkHwfgTgD7ks9lST4BsBXALIAHAawUnrUuuX4fgHVC/ioADyX3bEVyDr0pleqQWDXURYdTJExtonMo5boFfh//XhdT73abyew3bnT3VZF1HLrYY0ND9WiLvHU2RemEctJzoSw/EgAncmIAYAmA7wE4A8BNADYm+RsBfCj5vgbAVxKC8noAd9MO4Xk8+VyWfOfEZxrAG5J7vgLgrbZy5UJIqqI45PApT684uoWErU1siviBAebdXrVxoYJsINDfz4il7/kXtkClZWxQ6tD+JviWP8eNYWmEZN7LgP8D4FwAjwI4kXaIzaPJ920A1grXP5r8vxbANiF/W5J3IoDvCvld1+lScEJSNYfDNOWp+4TLA65torOWChE2Pm+028yCyGfRNy1WfOwNDc1/ZlGRcuWD46rc/iakKX+ODo+VICQARgH8AMBSAM9K/z2TfH4RwBuF/K8BGANwNYC/EPLfn+SNAbhLyP8NAF/UvP9SALsB7F6+fHnmRv05qiYaqlp5FgJ05p116IfpafWiPzSkX3xsixUXkxVdf3HhHRxkptd5vL+ITVfaeVwSR1KIsp0QMgzg8wDeRyl93nSpIo+myJ+fSeknKKVjlNKxkZBKrqopq6tWnrrCR1mpUqZmDRtfBLintcqL++hRvZLdppQfGQHOO69YBfPcHFPsc0X/Sy/NL2OI9i/KKi3tPC7L3UBHYUIlAP0ApgD8DyGvd0RbVeMAqlaeOiKtSMSmN6mSjkA+IliMLWVzovRxuixKZHrxxfO5qtA6miL7NOu7cmh3lKhsJwA+A+DDUv5mdCvbb0q+vw3dyvbpJP84AE+AKdqXJd+PS/67J7mWK9vX2MqVm44kTYjnPCZZVJ6nx8wMU5SHWCzK7gdTGHSVKG7nTru3te7eMjcqMzNqwtFohG3/ogMulj1+JAQjJADeCOCS5PsIgFMdrqdgprz3J2kNgOPB9B/7kk9OFAiAjwN4DMykd0x41nowE99ZXoYkfwzAw8k9H0NZ5r++RCFvRWBUnvtjcnI+EVEtFrxtVWeOyCirH0w72ulpFi49zYLoupgWWe/t29WE5PLLw5ajDC6zQvM4CCEBcAOAOwB8L/n9KgD/7np/lVLpfiRVEXtEdGAyXRX7xsVfpAqT37TgT0yY66iDqxK9aGspHUcyM2O/N+0GsCJcghUBx2IoQnJ/wjHsEfIedL2/SilXQuLScVU7jyFC70w3MGAWCcmLaZZFtIjd88yMug78VEAdxHo1GkxHwg+BEtunDGstSikdH+9+5/i4/Z4QurAqIzBBD0VIuL7ivuRzKBISCa4dFzmS6sHkVMihIzZ8I5BlEc1jF69aXFV1GB42b2J0BFR1LG1Z/iOUsr7avt2dE+nlOZhD/UIRkqsTa6nHAfwxgG8DeK/r/VVKuelIfDqubizyQoCLN7uJI5maSsdp5rGo+XAktneZCKiJy6nyAt2rUgHOLaUdiwaYCEkDjqCU/i0h5FwAzwP4ZQB/SSm90/X+nge3+xYPyOF23yob7rVrWXjx/ftZsL8DB5gtfNWCOi4kiH0yOjq/L7iN/oYNbGq+9BKz0wdY/ooV6YIe+o4dF+ieeeBApw79/ax8Nj8Dld+I+Mzp6fnvAoChIeaPUrVjE4DejMi7Ywfr12YTOHiQtb2IPOunozC9nDJxJDr5aNpdZd3DOCxEmKy20nCaRXIk/JlplMy6UCoqjsTVnLhM9JJUQNXf/f1B64dAoq0XwLiR5wG8BOAIgOdd769SSk1IbIu+78DsdTntQkUaZWwei1roZ7bb6sjHqneNj7PPJUu6dSlVQ10U5zboRHVTU4VYbRH2vz8IIRcBWE0pvS4Ia1QgxsbG6O7du/1umptjIRFE9r3VYmc+iGz73JxeNCLjnntYqIXnnuvkDQ8DX/86OwchojqYm2MHHQFMhJWHqMZn7FTxmTx/eBhYtWq+qGtiArjssvDvXSgw1d91fcoAQsi9lNIx5Z86CuOSAHwny/1lpVQcSR7KOZ3ytqq7t4WKMs9hryNUDo+iFVyaHXIoEXBdORCX+ucsqkMIjoQQ8jvCz0VgHuX/lVL6hmx0rnjkypH4Yts24PLLu/MC7yQqgzruKOfmgOXL5598WEYfZW2/otp/717gda/rPrseYGegA+yUyUOHmBLe5QTHUHNPVEb7vL9s+NQ/xz42cSQ+0X9/W0jng+lMLsxevJogr6iaK1cCS5Z051UtSmwI1PEsb4D1Q1/f/PxFi4rtI1P7uUQqLqr9d+xgYi1Vmx08yBI/hnfDBrfoyiEiWquOAXZ9f1ng/bpnj3v9yzrSW8eq9HLKxWory/N6XeFe5zq22/4HP+VRBl37uYg8imp/nah2eJiJteT/XEXDIcpfN7+Ros5W8QCynEdCCPkoIWSrLhVA66qF0BS/rPMDikSdz0gZGQFuuYWVl6PZLLaPdO23Z4/bLruo9le9Z3gY+NjHOoYKIlz9GkLMkTr5jcjc00svMfJR4TXCxSHRU5kQ4Q2bI1zdUadJrALvn7yttnTQtR/g5shoan+VTD2tnF31niNHgDVrup05XR0hRWSdIyMjwJYtwJVXsjZ7+eXKLcY/h8qZtNUCbr8dWLasmmuEjlXp5VRY9N+6WojkgV5y/ioDqvbzEfmo7ud5oq9HVusolzAzZcwJVV2rijSivALaFYEcEkcA/C2ALwP4Ok+u91cpFUJIosf6fETC6g+xzVTt50Og5Wep9BmimXNaWbypn8sYA3XU0fn0a0FrTShC8lUAGwDsBfBfAdwC4EOu91cp5U5I6jhwI6oHn2jSvouzztdDTiEV0mVtruqmaOdw6dcC1xoTIfEx/z2eUnozgMOU0m9SSteDHXEbIaPOyuWIasBmriqa/KYxADEFYhQRSpdVpvltXXV0Lv1akbXGh5Bw76KnCSFvI4SsAHByDmWqP+o6cCOqA9MCEcInZGQE+MhH5uf39+djHVTmgtfLlpFVWWt0rIqcAPwWgGMA/AqAbwC4F8DbXe+vUipURxKVyxFpkPU8EVdx18QEUz6Lpx3moccoWtyrqkOv6ugKWmsQStnuem3VU7TaiqgFVAuEi7zfVxdR1DgtanNVtC6mCvO8ZKstn1hb+wA8AWAngC9QSp8Jzh4VhFSxtiJ6A3WL9yVHHQbMcZdCxoQT2woI0255t38BUXC7UIf4XYHaPFj0XwCrAfwvsON2vwjgDyzX3wKgDeBhIe8DAH4I4P4krRH+uxbALIBHAZwv5F+Q5M0C2CjknwrgbgD7wAhc06UehXEkEfkizeFMLuFEyt5dilCV2bSzz2qhxM8937y5897+fhaig5dhYqJabSQitIWWzZS56taZAbkzhBBtdd0EnADgMwCOWK57E4CVCkJyteLaMwA8AGAgIRCPAehL0mMATgPQTK45I7nnswDelXyfAPAnLuWPhKQHkEZ8Y5v0VfP9MZXZ56ROHr7dhvHx7vtMSdSpVAkhF3fbeCjLrNh1sxOY0JkIibPVFiFkKSFkHSHkKwC+BeDphEPRglL6rwB+6viKCwHcRik9SCl9Aoz7WJ2kWUrp45TSQwBuA3AhIYQAeDOAzyX33wrgItf6RNQYaUxJbVZDVYwO62PpxM2BgY6F0uAg+71oEYvIa7Lu2ruXxcRyxQsvVKONZISy0HIZD2VYTPlY7BVoKedj/vsAgLMA/DWl9JcopddQSu9N+d5xQsiDhJBbCCHLkryTADwpXPNUkqfLPx7As5TSl6V8JQghlxJCdhNCds9VYeC7hP6OUCPNBLFN+iImnW+f68p8333di8l739v9GwDuvZftQQG2CNoW/enpVFWqpH/U2rVMJ3LXXewzjc7CZTwUbVbsu9kpkND5EJLTKKVXUUq/rfqTEPJRx+f8A4BfACNKTwP4O/4IxbU0Rb4SlNJPUErHKKVjI2UrWet6NkdVkGaC2CZ93pMuTZ+ryrxlC3DVVd2Lycc+Nn9xefLJDkfCYVr0V2uEC8PD7L5mk32XUVX/qKxRul3HQwii5QrfzU6RhE4n8/JNAO7T5I9C0JHo/gNTtF8r/DcF4LhUSwcAACAASURBVA1JmhLyr00SAfATAI0kv+s6UypVR1IHBV0dkNaU1CRfzss8NWufcwU4P6ZWlsurwppMTfm/U9aRbNgwP87XxMTC8Y+qmi9Y2nEUyIAEoZXtygc5EhIAJwrfrwLTiwDAmehWtj8OpmhvJN9PRUfZfmZyz+3oVra/x6WshcTa0nVcXeP+VBF5Oc6FfmaWPpcVvnwhNxGSwcHuQ698FkKRaOmwkJz9fBTbveSLo0BphATADjDx1WEwHcYGAP8bwEMAHgTwfyXCcj2YhdajAN4q5K8B8L3kv+uF/NMATIMp5m8HMOBS1lwJic3So1c4kl5dOPJA2j6fmWEWV/J9MlcwPt4dtbfZ7Iy7IvqpatZuJuTRHgvEAbIoQrIn1LPyTrkREtcFo2ossy/qtHBUBb59Pjk5n4iInAxfTGZmmBhLPg44xOakYtFnMyOPcVun+mdEEEICYAzAPwO4L+EmHgLwoPD/f3d9VtkpN0IyPT1/UA0OqkUYdd3R9+rEydofrosuX/xNoiHdWSFyW/OFcWhIT3DSlt110a2LqFbH3WUdt3WpfwCEIiSPAnh7oqt4NU+u91cp5UZIZmbUk9/FGawuqMLECU2EQ50K6HK/eO3gIKWbNnVEVfz+TZvUCvWBgW6RlUlX4rpIqsrus1mow8bCxt1lgar+XEfVYwhFSHa5Xlv1VChH0mr11u4kr52dK9Iu+j6e4D71ybro6pTlNu90nfXW0JB7u+jKPjXlt1kIIarNi0M3tXmoBX9yUq+j6iGYCImPH8kNhJBPEULWEkJ+hyeP+3sfOnv6KtrZp8GOHcxDelEybFqtYs92SOt9bvLhyOqI6HO/6loVGg1g3bpu+/9Pfxo4/fTONSo/h8FB4AtfcPNnmJsD3v/+7uCGvOyAn09NVl+KPP2qTG1+9Cgrc1pwB9OzzmJ9xnHoUPU8/vOGjsLICcA/AtgNFork00m6xfX+KqVCrLbqqEj3DVDnGsPJ5z0mpBGr2TiGNByJTZ+RlSMBWCwrLvpScVHT05SuX999z/i4WztOTs5Xzstl5+N4eJj188SE27N9kTeHG0oEKD5P9Kc55hhWfvkdPagnQSDR1kOu11Y9lepHUlW4BKhzNSTI8h4T0iz6Pud3uBB/32i8qvt1i7hKaS7Xj79Ldd66q3OaaWHdtKlzrerQKxe4jv88dRfye0IYJZjaPiuBqgFCEZJPIom6W/eUmpDUkUC4wGWBDmFIEEIx68vxub4zrakr58p8xka7zRZssR4TE8wRUF6kxIXORgRcFkWTZ7yoM0jbV64bBVfLtFBot9N5+7uUl7fdwEA9JRGOCEVI9gI4BGa9Nc/8t04pFSHpZd8Jl117CEMC03t8F+I055BkneS6RVi0pvIpu1wP2+JtC4+ShSOR2yUPMWLotkyDtGPBpe1VZt1ZULGNayhC8mpVcr2/SsmbkOgmSIiBE3KwpH2WywIQgpvQPUM2fw0tQvG91qf8IXbrYtnEhU7Wkeje7yt6Mr3DVFdbHaem5ouPeNwvld9MKJ2bL9KMhVBt74oKblyDEJJeSt6ERLUb4axslo5WxVFydWqTrwnlC2HaqYXY2cvPUMWO6u+ndNeuTn2nplhS6Qrynmhye6eV6/sQUVH0JddP1X5p4l65XBNC99Pfr++nKhim+BAVl7YP8b4Qm7YcEAlJVkLiYm0TYndu2+GYdrQhBl6oBch2n/jdJDI491y1fX5IvYcJOsW6ipCkUfpziygVp2uqn6leLlyPD9IufHyz1Wya26lM8U2azUiW8tY8WkAkJFkJCaXduxGduZ+KhdfBV95tWjyLGHh5TSAXIi3X2cVhLivHoiqXylGQlymN0p9bRMn12L49XX+GFh26QjX+hoYo3bq1kgsipbT4Xb/P+yJHUo+U2WpLtWM0sfC6Z5kWUJWy26SoDj3wVHL7vEx2Zc9gU1q82G59E6I9dIujrAMYGmLlcYGLWM+FI/Eps47rCbkomXSIRSyIpk2O7r+id/2+70trep0jIiGRUhA/EllhaWPhTc8YHp6/YPpwJHJ5sg48OR5UmrpxuE6gXbvsRISniQlzfUMsEq4cSRqRpqxzUdXDRSHuUmYd1xN6wXSph25c5sXt+nLCVeFIRH+VPJ1BPREJSR6EhNLOBFCJWoaH3SYrfwbfnZo8iW2TMoS8WeVpbOOWbPVzmUCTk+6EhN8vcog2M9o0cZVU7Z2HgljXbyalu+5eV64njwXTVI88dDqmseXKCRfVl+L7THM8DYErSM8UCUlehIRDJ6by3Um4sLN5DhqdItnGLbk8Vzdh2231eRquhEy3EMnisrSB9FTtXZSC2JULtS3CVbCOUiGrTsfEebpypSH70kUEbJvjvty0yzsD1TESkrwJCaVsgGRZcMtWsJl0Nlz/Ezq6qyl0hStHkmVHWnWE1IvlabWVFll1Ou32fN1af385/e/yvlDX+Fwb0EzeREh8ov9GmLByJbBkSXdeXlFk84AuSurAAHDrrdmiuwIsOvDZZ3eiBIuRfF980e9ZW7aw55jazKU9efTWqkZpVUX45VF4fceL3P4usEXlzdp+uvr51IsQ9e+RERaVWoygnGeUapf+cLnGp9y256WNlp0GOgrTyykXjiTrDqjsHbRKN5LF09i2k7WZP/f3U3rZZfMVxaLuKQtHUkHPYSV0Yqm8x0tR7ZdFp+MiBqqKGNL1Gp9y254X2DINUbRVACGhNLssuixZNn8vH5T8e9bFwSS711kY7dzZ8WL3Yd1lBaaoqC56EQ4N3aKS53gp0tw8rU6nKPGeK4qKDuH6PN0cS7k5jISkKEJCqftgTWPhkgcCDzYvBaqLQtxl4skKzPHxzrtUprM62byLw19axXuafnXdleYRjcC0SBfpAGuLZ+e6MJcVUiftNaHeyevNjVkybBJLIyQAbgHQBvCwkHccgDsB7Es+lyX5BMBWALNg0YVXCvesS67fB2CdkL8KLArxbHIvcSlX7ueRcNh2klkHdYgBmXVRkMuwaVP3s0wKVFeHNVM9TUYCPiIGoNvKTrdLVp1DYuvHNP09Ockm/9AQ+wzNHfrcWxZH51p22zyoGwcaGoEODyuTkLwJwEqJkNwEYGPyfSOADyXf1wD4SkJQXg/gbtohPI8nn8uS75z4TAN4Q3LPVwC81aVchRASk3gnxKAOSYzSlkcuw8SE2oxX5RQXKoSGTdfCCdn27d11MlnZqeolt5Grc6KqfQcH5wehlO/RWSP5IMRYK0OsFqrsHBWNXVUYAtW/VNEWgFGJkDwK4MTk+4kAHk2+bwOwVr4OwFoA24T8bUneiQC+K+R3XWdKmQlJlh1QXl7XWXZYqkUhTR1VBAOg9Ior1BxAVq95XTlUSbbbn55We3yrwq/oCKEqZLrcjyoOjd+vW4CnptT3uIZi4ch7Ac1TDBuy7CEMYcoKLBkCgdYLEyEpw/z3lZTSpwEg+XxFkn8SgCeF655K8kz5Tyny84VsErltGzOB3Lu3YwppMsszmXTawM0t9+wJZyo8Nwe85jXAvfd2zHsBs9knoK+jXDeAtdHatcDgYHf+Sy+xYZ3FRFNlLjk+zj6HhzvXvfBCt/nj6Cjw8svdzzp8mH261OvwYeDIkfl5Yj/OzQE33qgu94sv6s0xv/ENU43dYRprIUyf05gUuyLLPJExMsJMxgcGmIm+zzizmUCr4Nu2eZuhi3NkaCgfU2gdhQmVMJ8jeVb6/5nk80sA3ijkfw1MB/LnAP5CyH8/gD8DcDaAu4T83wBwh6EclwLYDWD38uXLvSjxz6Hb/XL5I1dk2UwY04gFQsa/Uj1T5ETSimxM4i3OmbgefGTqAxcjhXbbfnStjhNT1Wv9+u68ZpOJm5pNfT+6iN1U5qqNxvzrGg2zOMzWx6owL6EUz3nt2EOJz9LGrkqzk/dt26KMAALo3BBFW4FEWypxiCqJxCREXCzVgM7qba6bJC4h2jl0E31qikXpldul2TRPTBUxsCm8dXXTRWlWKd7lfpCtwFQbA55M+o40hgA6sVajYRaH2drBZHYdQiya10KYlUhlqa+veM33XUUYAbTb2c6qF1A1QrIZ3cr2m5Lvb0O3sn06yT8OwBNgivZlyffjkv/uSa7lyvY1LmVKTUhUClrTLjPUTk03oH128j7P9J0MKpNYVcyuJUuYzoDvjAYGOqa58oIkmvC6cHkcuue4Elx597p5s5qzcVlYxOfx99vKoyMkMkG29bluga+S7qEIZKmvb/1835W3DssUgqhOynYAOwA8DeAwmA5jA4DjE7HVvuSTEwUC4OMAHgMz6R0TnrMezMR3FsAlQv4YgIeTez6GPM1/XZW6ee0qQk9Y0zNDiBR0VlGcIHDRXKulFtXJySUcuq5ONl8E0/2AORaYSz/YOC35WltbAGbFu6lvbf+pjjXWwbYQVkFJnXXu+MyFKnEktvWqbhxJFVMqQqKaNAMDLKmcfUJPojzMLW1esVnL7yMisiWXYH5Zd3guOg1ZH5aHTFvcSeqIiomQ2NpBpzcxOYfqOE/bZqQKIWiyzh2fueD7rrzMqHVj2Vc8KiASkhCERDVpBgc7u11x15vXJMpjh5f3rlF8vquOSbeDctE7ue7wXBdGeRJu3+7O4Zje5XrPzIy/T4mtHWTOo91WG0i4EAWVEreKIq8QupasBiF5lU33THkT0t+fzmAjQSQkIQgJpW4hPao4iXzQbrN4V1u3skUs5CA36Zhk4wGdLsFWHp94R6ZT9VSnVgL+Z8yE2FSksbjRtYOqPNPTavEdP0bYNJ5F7kl8Xi85AFaJu3JFux3GqVVAJCShCIkLkSh7EmVZ+CcnKV20qLvsfX3Zw3Twcql2+9xDXCUOTFsXmw7C1oczM4zzuOGG+eX12RSE3FRk4WrE9tTpkFQmx62W2YrP9Ly09a6CXkVEXTeGOaxDJkISzyPxgct5AiEdqXyRxnmKY24OuOQS4OjR7vwjR5jz3EsvAevWpXeaUrXd0BAwMdE540R2cEvj8MYdQkdH3c9w6OsDvvxldu+OHcCqVcCVVwJ/8zfznSh9HD+3bWNOh2nvF5GmLeR7dOP3ySeBRYqlYMsWYMWK+eP54EHm7Kl73oED6c4C0Y3fMs+NSXNOUJHl1b2r6HVIR2F6OeXKkVDqr0DLc7fp+szpabfjbrmSV5Thiz4KJk5AZrXTOtnp2sFFBKHjjFotVj65jGk5EpveoYydt26MqLgOMRqyLoKszSTbNh5cxq/rsbumZ+fRZjbRahFiMNu7RDGtjyOmBoiirUCEhFJ3IuE6mNNGhlXJubNG8XU5r31qqvN+PsH4Itxs6uuh04+Yzqf3aQdXb39Zz2VLzSZrF1+rGp3VzKZN5j7Pm8D4ePPL4j6V1ZzNAMJUBtv49Tl21/TsPNpMhSLFYC7varcpveYa8xnxHoiEJCQhobRj9SIewpT2Ob4DLw+5NIdKRyIvqrt2uREceWdqu8e3rKqFTU4ufiYuSXWmiQ2qd3ErP1X+1BRzfgw06bVlkrlIDttiadqo+Fo0uY5fF98hl2eH4kxsdSxSP+pi4m3iiFMgEhIpZSYkrtZbeQw80z0hbNJFq63Nm7stcsbH3YiIXA8Xs19VvXVtODnpT8x0beea0kxAVX/o2kLFJYXczbqK/bIYKdieQanf+PU5dtf27LzBN5eu5c3KeZr6w7RhikftVoSQ2GTflPrFhArFkWS1dDK9Txe3ynXhdeEE5Hrr2tD0LFv8sbQcCaA+08TUXrr+cA2zAzCCE2IRDLVTt21UXMyUfcdvnp7loSCOVVsgT/n6LJynrm2mp/XjPHIkFSAk7TZbTFQBCbnNvW+sKnEwuIpQVPfISm+fUBcusO3m+/rME0hW/K1fr18gTAuCrhwDA24RBeTJNz7Oyu66sMtETbXo6RYIX0I2MOC248/CBeige6Yp39VvIU9jlDRceZbNl06E6RPIMwuxU5V9ZkY9njKa8EdCEoKQ8AGqE9E0Gh0xkPyfy6TdtMl9l8IJxTXXsGv5wGy12OQVF0aV2C0NTIsgP+PdNiFtu3UOlfjH5Lvge8a8/F6VvoVzNyrHRFHswhX9GzfaFwhf0drERHdZVYTKVWQlGyKYAj+m2TH7HsYVmnNO+2xxXvtaNvGNpY8eJw/xm1xfFUfSbPofjCYhEpKshCSLSMRlx+GzS7ERtDTvd4XODDS0ebPpGFyxHHnHHdMtFCprIlVyUfZzgsXbdHCws6DZrNJ4rDcdUeWOlbt2uXMLacWtW7eq2yDj4pUrdPPahZiY5qGpvUJzJCqin5OILxISKXkTEtUuYmjIbkbqGiBN93x5EqYlaEND4RSOos7Ehbvw0ReZdDHy7tyHOLleqxMbqTgg13NpdO2hOtbYdm6IaxoYoPTcc7vzZCKk2wX77phNC6pLuHtX5MHB6AwfVCJFuSyqvnG1tgu1ETIRjBw2W5GQSCkIR2JbTExyUpfn80EhDoC0Vkd5Kxx1xEIlMhocNBObgYH5bTE8nN4e3uaz4aJLcrEm8tlAuOgfsliYuSTd+PTZzerG7eLF4ThFsf3zCIKqOzfH13LS1RhDfHdWwmgj+oGJbyQkUkqlIxkf7+6wDRvMi8mmTX7Pd7H7dtml9vWl15GkGXi6hYeHkLe1jUudVL4tLsTRtmOzmXCb2kbXXz4bCBHyYqkiVlwMZjofxZS4MYTNedR1NxtiQbUhJzHNz2ETo2YpU556IFs5XDdJHoiEREpBOBI+2XWLiSwecRlQU1PqM83F3ZFssSWL17jTm+8gSrvrc/VI1g12lQ6C6wlMIVtcTGM3bZp/Hz8FUke0fULEi0YSWc660Fn6qbzGZ2aYPsIlnI2cdu1ytyp0GbN5L/KUFuMbIp+b4+Odb7NSLOIsdrkcExO5GNxEQiKlIDoS0YrItJj4DCjfnY7P+eomqN4r76xN4hhfsd/SpZ020ykrbR70LnJsHbFQEWw+4QYG/J320u48+dgwWfqJz5b9FXxCvVx8MXuny2bFp055GD7I5cibWPH3uBBOF71gUWVWlUvnpxSV7RUgJC4Dw1VRa+vQMhywdPJ40aPdRAx9dQiNhnqRX7y4Y+tu0xFs3pyuTtxPx2VHL7dlyF2mTaSnGl8qYn/FFfZ6cKKrE8fJ5tNpDCTyFOHkTaxUUIkyXfs+FBflu0HR6Xz4XM7IxUVCIqVMfiQ+g1knWrF1qM8AyjLJxIXApqewESvVxNPtmHXxvFqtTh1MC22jYbf51y28XKS2aVN3+bgfkK6vdJyXj/+KCJ3FkKyot3GfKtEgwOpmC8zo2u6ynm56Ol1U3izIW98gwkVfZdqwhdjgyabfKkdluU1MoYgiR1IRQkKp32CemVGft53xlLLM5eKQJwvnOlwUua7E0Ic4qQa9bgctJhMxURFZeYJu3MgWaVvQS5tHvQtsIghZnGjzIxkcZHHRdFyG+CwXK7CBAfY8WywsX9+JOsFVVGubA1k87HUbO5Gg6PxHdPMlYwh5SmkkJHLKHLSR0o6zl2pHOjmpZzEJKX/C6XZMXElvIwAui0YW81XR8kenzxAnubxb1p2RYtspqkR0Ln4dLu1hIwryZFe9T4wlJlpe6UK8+FrHAeyZqnD8Nq6VGzEUxTXkBVfjERtH4ivyE4l0o6EeH+KYl7l9Xh6VFEQ8WyYDIiGRUmZCIpsCj493/nOZsGV7+9pkuKp4VJxb8dld6XZVpknCE7egselbuPUWLzO/VhTXuNabl1snutFtEFxC4NjGhDzZdWXVxXNzIXAbNtjvAeaLHjdsYITdZPzAiVydzjVXQbfZcD13JY0eLQv3Lo/BHBX9lSQkAPYDeAjA/byAAI4DcCeAfcnnsiSfANgKYBbAgwBWCs9Zl1y/D8A6l3dnIiS6gGicM1HtCKpGSHyNB7iIaWiILSamwJIqK6PhYUY8Nm7siHVciIk8iVULmW23PDDALMB0IgOdvkd3ne6AJ9NEdeHO+DNM4g0u+lLpS1Tt2Wp163hcjwDQlU+VPzzsfqhYXaATS9lEyGkXcZNuwzU1GswsfGYmN+OEKhOSE6S8mwBsTL5vBPCh5PsaAF9JCMrrAdyd5B8H4PHkc1nyfZnt3ZkIyfbt6o7kohibTN8lbEQanYfvPaZQHTZrIT5BXGznZRt9zt00Gm4LlmwGqzr8yXWhFt9vmmQ2Rzvfidpuz19o+/rM+hu5rKIoSxd3S1VvHkxz+3a1iLC/Pz2BGRxkzw1lhl4kXIiC7xxMa61lIvI2MZcqXXxxLpZ0dSIkjwI4Mfl+IoBHk+/bAKyVrwOwFsA2Ib/rOl3KjSPRLWiNhrtYSPQtcN1NpDVLVXEP8jNMi7RszaPaQfuy7C67fa474cpkH9EA52BMIUp0HI5IvHwWmnZbHTTRFluLl3XnTn10Yk6IuF+O3P4mfx2AEXpZVKsj8rr+z1GckgvyDLmSth10/h98nGza5OeEmjFkvApVJSRPALgPwL0ALk3ynpWueSb5/CKANwr5XwMwBuBqAH8h5L8fwNWa910KYDeA3cuXL8/WojodiW4xdd0dqHaunIPRLVwhJrHpGaZFWj4FURV40jech+mcEg4T5+N7/K7qmXIofhMBdYFJ32GKrTU8zBYQnV5GvF9FrFQmzbxfuPm0qn9dCIlsrZbFSqlIgpM30csiVtq8eX47i1aeXJnuSlACE/OqEpJXJZ+vAPAAgDcZCMmXFIRkFYA/VxCSP7O9O1erLdNAsk0c3ZkO/NwR1Q7KlZ02vdv2DJlwqoiNSgGchiMxcQy83XW7c36mxA036AmKq07ElRiZ2tXE4cjKaZ1Rgc4XR6XTkjchjYY6BL4YC0u3AVAd3iYSEZW1og9hKCqEiIw04idfgufLrYqbCVWQU9Vc5pymaaMWWLxYSULSVQjgAwl3UX3RlggTlyDnu0wcHSExiXtsOyxx0Pmc3GdSLvP/Zbm+6phRWUdy8cXui7QMk1m13F6cmPDruY7EVSdiI3YmcaCqv0V9h045rdqR6urn4rDoYrbqI5IcHlaL9tIstGWJwnzfrXJODMVFyXND1/+7dunrMjVF6dvfbh6ngVA5QgJgCMAS4fu3AFwAYLOkbL8p+f42Sdk+neQfl4jIliXpCQDH2d4fhJD4hJHwCZQn70D7+szOULIHuRigTefQp3q3znlPtXDzs1J0ixD/T7SNN4lSXAa/L9fAyzIwwCaor7WNKenqYdMZcE7L10tdTs2m28FXIqdjOsrZ5Lgp+9Rweb28efA9TdEl3ldecLXK0o0L36MMVFDpRHSBSnVOryIhGhig9Jxz2P05hZKpIiE5LRFnPQDgEQDXJ/nHJ2KrfcnncUk+AfBxAI+BmQyPCc9aD2YWPAvgEpf3ZyYkrrsa3tEqMYFJVs9NbQcHzeEZdAu5j25DrpePA55JTGBqI5Vy1zT4221zKBBb8EKxveSFgv/Wie/kxP09TOFvdOIibvZtIjQqEZhOJi7rMkQFvEg0XLhSlahWbi+XSAO2XbDP5kYHVw7IRewo1k1uHxunmnbH327rN2iuIlld+Psc455VjpCUnTITEtsCys1U00443SCXF1tTOVytrXzqKO+OTByJbtet06XoQt6bwnL09bnpYcRow7KoyeRprmu7mRnzYqgjwmLf6fqU+9iIASynpsw6C7l95braYkW5cNeuXJuJs3BpF9X4V40HGwfko4PxIeyudTVB5zfCuXab06uJEIU8C0ZCJCRSyo0j4RPWRTwhesPb3qULt2CaADrvZ1eWV/VslZJVdDrs62O7Yn7SoSqMg4/PgUm04LP4q05ddE1cPCYu+DoiK4Yk0Tldigu4asMgtll/f0cf4aIbMnE1sijJJJ5UbTRc9UimTYqNUxPHk+5ES1cRsY8exLQhE8e3rq4hdERAR2SqMvcWy29yYAwhdtMgEhIpBdWRuIZO95lw8jtMuypdOBNZ+a2Tj/vUUTc4bZ7qrVbnfp9JbnIMVBEk3YFYfX3uvhG6xdlFds5jZfF28xFp6oJ88rbR+RnwxDlFH8OBVouNCVerP934FkWTJmW0i2GI6X/XaNq+llku5RLD5picSF0XcJFAcU7EZrji0hc+64snIiGRUi5WW76WP2niM+kGh8i1+IiNfOvoWk7VIqc678JGoNIotHftYqEisoQDATr6BhPx1BEdU3uo+tBkjSaeI7Fxo/65/HwWX8MBlWhQN850+g0+xsT4ZD6KfQ6byNhVt+LLkdjKJT/b5kSaRtdjEhObRHzDw2o9Wg7GC5GQSCkYIRGhm8BDQ2xnoRLzmBRjKvbVNjhCW8O4sOy26Lx8Qvj4tYhQ7dzk/1TBJV0W0UWL9JwK9yjWlVPXP9u3qzcUIlcmt4Mr4XExgGi3zQRHNT43bnRbRHX9rdN98XKp6uzrXOsiTlSNm1AOkqr/0oZEUT1769b5HKyrf4trDLmMiIRESrkQEkr1JpMTE/NNdG0RdX2tMkJYw6iex63HdGI1Vy/btAdAUWo+U9s0mbKkJUvMlk66HeTOnepyiMpzESZOVnXWto57EQ0KfKMJ2ERSInSLvUrUmGYMmkxzVe1teq5Jv+gDnfgqK0fCn21zOnXZdGXxqHdEJCRSCqJsd9256JTW8uARgznqdp48fIjLgNbtBl3rp4oNZVP08+vkXX6rlY0rUrWfvDj4ihZtyUXkI05e0Z+Cf1cpaOXFT1W/ZpMRJJ1IQ0VIXKzXTHoin9MeVYuWiVvy9RzXzS+VabzrApvWg960YRDFeWlPKNVtxNLoYHyV/p6IhERKmQiJ78BULXC6wcOtV3TWLTpLDt31O3e6e96L0HnYi9Y1uoWbW27pFmDVu03lMb1HPh0uFEcyMMDEPa5KaJ1J89atausafiojl3+bzreR36XbMKiU5gDjhGxhY8R6uy6Eqj5LwxX7zCd+7dCQmyNkCI7BtkHp7+/0p+8CPj2t5h5F3UgBIitXREIipUxH7fp2rM8CZ3JY474FRqSwDQAAEf9JREFUqoVNdb3uoCGTmIhDR0h27vSvl+xpL5fJtpC02/YFkPeBzXdHd1a8aiL7nLGh05dMTdlFf43GfMKr4g7abbVTpmuUgRDmuy5otzsitizGFC7X2u5Lo8NwkSjo3p+G2zERXhdz6QIRCYmUUhOStMo1vnibZNd9fXrLJp33Nl9wVP4HrrGcVBNQJdoSJwvfhf/2b9snmMnT3tVi6LLLzO/g+gGXHbeP/kAO1e5rwcUXVdf3yWWVCbDtrHSTnNx1QQxl7eMiZvFZKG2EcHiYcYAiZ+C78dNtani+rf3SEGF57oobr9Ai64yIhERKhXIk4iJgCnfBB6o8+U3HqrZa6p1zs6neuaqIw+LF871hJyb0YdRdQpKoFibdomGzMmu3GSdkekezad75c4uvd77T75AgUTxoOsNE1T/cuiyLyI2f7qi6X8dRmiyieAhybuBxww3pTjYU38FDq/BTKG16Dpe209XLtR1VXHBW7sjlVM+03AKf51NT88dZaCOaDIiEREqZdCQidyGbo8pIs4jIAySNEll3Lodux845g8lJu+ObbxItT1w4ElGsI+4QZbFUX19nYpsmeKNBKSHZyi86ecqLkc5pUiSGJu9oW+Jckfx8n1AY8o56YKBz8h7PU21kTM9S9Ql/nqm9VM/zDSwqRlHQtalNLyfD5sPiOo+zKMR1HFHZQS4TREIipdSEhHc0X5DFBViFNERA9rnQiZlsyXQwky65HAzlswDLbaPaHaradHCQKTBVHuqmxaOoJC9SJt2E2I88Bpurrsbl/Ta4LoIuVltpuSubOEm1EdAtlHLE27Ex9TsXL/ZbaE0ciW4e66zgdGbJacO/VETpHgmJlFIREtMkSqsg1KUbb+xM6nbb/8zmLCnru/r7Kf3Hf1Qf+sXrI4tA3vve4uoXIsmLnM4MWEdIXQIwyguTHO/LFa46GpcdbloTa99YaoBed+czn0zSAhV0Zs0m8bIuyY6SNmJg078W4CdiQyQkUkpFSEyTaPFipugz7UJ8ncQAJiII7R+RJl1xhZ1T4bszzgm5iEp8HBrzTnyH61Ie3SKnWnD4Tj+LrqTVSudUp7MKcq2T6nlp6qDboevGNg9W6Xp9ljqp6sjbWRX7ynUeu4ioXY4WUHG1OYaKNyESEikF50h4Unki83unptLt9u+4I5y4yTc1GkwU88lPpn+GbhFJsyilDbxoS3/0Rx1Fp6pM/L024qhb6AYG9H4eok+EHOrFdfepk7ubymMKCmiCuDPWiegWLdJbIsnl1h3kFGLMZAmrrhNZqiIXqMTIw8NsTImxtHRBOX0MA7I6WGZAJCRSSq0jcTn8yCRr9omBJC5iRYq25Hen0c+YFuq0QS77+xln5HLtu9+tbjOVsyTQbQFl4iBtegTTQqcyLBB1KSqRn08sMle5e7Opf6euTiYHUtXCunixuzWYTvS2caNfKCBdsukxdTCJmlShkHQbED625DBJurYx9UnJupJISKSUG0ciLjiqgRvaIqqOie/qfcPuE+LOma1f3zF3FSf8+LiZMIrKTZXzn4seYf169bPFWFguXEBa81l5YZmc7ObkdNyBCi67X1djENmSTbxfRxhMJs5iW/JIwyaHVJ8QMDoxpWrB55sjmzOsyiSfJzkKhQ+HWaD1ViQkUgquI3EZuFlk5L2YbLs012e84Q3q/0RjBdegjvIpdK67P9Eiy1RWVy7AVXzhYnpscpY0wVVmPzXl3oc65bfNIKDZnO+nIra7qLA2HSrnEgJGtArjHLmOoIn95KJfs1nrtVodkSPX2YltFjmSaqXcORJxAvAzGaqgNK9S0oUe7+tz4zwWL2bWbbpFbPv27v5zaX8xcCalfjLrLAuYuCD6EjDVmNy8uUM8VW25ZEk6Cy2VFZGPEUlfHyMIYvmnppgOzoUYqXRUctulOVOeP+OGG/TjQiaCurbNI5mOTog6kpoREkrTO5a1Wmov4l5Kvk5/XD+g2lFv3cr0IbbFxUTYVbGqbBsBVYRjMbiiDNdnmkQqMvfhemIhh05carJCk5XZ8mI8NaXWfZj8GnzS29/OiF0aXyde/jvuoPTyy1n9RM7Nxt2Iscmmpii95hp2r21uNpudI6yvuaZYAxhTfxWISEiklMmzXSc/90mqUOt1S4ODlP71X1P6jnekWxB41FTVgsQnadrJ2tdn5h6WLlWf467acZvESy5cjm/kA58TC3kZfMeiaofLTVzFvuTRA+Tdb1W562bTjbtZtChdtIOsjqRpU6PB6iXqZEowAe55QgLgAgCPApgFsNF2febzSEKwte9+N9uVhbCKKiNx34asfiCmszvExONluRIt2btcVo6aTpXz0Q+oCKFL+BxK9VGDfZXyJu6AOzOqTph04SzEszdMbSeGrIkpn8SJHydozSZLV1zB+ocfM/3JT3b6zNcK0ICeJiQA+gA8BuA0AE0ADwA4w3RPkPNI+ERSxYByHRitFiMmWSdgaO5mYGD+ju1Xf7X7N3eWTONoKSfT2R08cQ7GZ/fNgxPqYj/p5M2u+gHRUY0TVL5wu3hVmxThPhPfJHLlBN/Hz0QezyL3xse+bAHH9Qi2SM0xFZvE01gz+p70OiF5A4Ap4fe1AK413RM0+q8uubLBWa2XuEVLSJktl+uLkV1VO/QQHAlgPvNbTC6nALq2uWmnZuJIVP+pYpTZrGl0Y8k3rIf4vOlpvxP7sug6eEw01ZiI1onVTiktvUyEZBHqj5MAPCn8firJ6wIh5FJCyG5CyO65ubl0b9q/H2g23a5dvBgYGLBf198PrFwJ/PCHwM6dbvdwDA4C27cDv/7rwKc/DbRaLC8rBgeBAweA008H1q1jdZbr3d/PrrnlFvZdzN+0CZiYcK/L4cPAihXAzTeb69BsAtddx64ZGlJfs3ix/X39/awvAWBkBDj7bPbJMTLSKcvSpezz5ptZvmoMNBos6d6hguo5w8NsLKQBr8dllwHf/z5w113sc+1a8z1iPfv63N/X1zf/ej4m+DOHh9kYuPpqv2cXDUJY2YeGgEW9sCRaYBubaaCjMHVJAC4G8Cnh9x8C+KjpnkI4EtHpbulSJiJQcSkqB7JWy7zT5w5YOjPGmZnusydUZ8TzpDvAynWHzv9XWTdxxzH50K2LL9bvmnkdVFyWLPaRd98TE26cjeuOzJVb8VWQu7RpkfDxtXGts9x2fFzLc4AQJrLUmd7mmfr62LvFMZWVy240mFn6HXekt0rj6fzz86l3DhyJMrNOCUWKtiidL1fn8kc++GRbd9m00kWRqiMIOgKig/hu1UlsExMdRzrb8btZ7NdVhMbHMc+lrUz+H76xq2wwhcP3eUcFIrpay2Qa377lFzcJW7cyhbDYb9wZkG8gsur+Gg02X3bt6ohouWmz6Yx1ea5wgmdbnOU24OFcFi/uhOdZupSVyyb6Hh9nz5iZYWbOPoYmYhJ1JBnHmYmQEPZ/fUEIaQD4HoBzAPwQwD0Afo9S+ojunrGxMbp79+70L52bY6zh6CgTD/Dfw8OMtef5rvf7vi9LuffsYd9XrOh+lss7QpXDB2nfqeujUGVXPS/NO8poUxt8xnde7crfNTwMPPkk8OyzwPPPAz/7WUcU/OMfs+8vvsj+P/ZY4JRT2PXA/DHuWw5xrgDst+o9p5yin/di+wDd3/nzAPbMoSFgdhZYvZqJlVXPOXSIXfOa13TqLd5/330dUeWxx3baIEA/EULupZSOKf+rOyEBAELIGgAfBrPguoVSeqPp+syEJCIiImKBwURIGqrMuoFS+mUAXy67HBERERELEQvARCEiIiIiIk9EQhIRERERkQmRkEREREREZEIkJBERERERmdATVlu+IITMAfh+2eUw4AQAPym7EAHQK/UAeqcuvVIPoHfqUpd6vJpSqrQdXpCEpOoghOzWmdnVCb1SD6B36tIr9QB6py69UI8o2oqIiIiIyIRISCIiIiIiMiESkmriE2UXIBB6pR5A79SlV+oB9E5dal+PqCOJiIiIiMiEyJFERERERGRCJCQREREREZkQCUmOIIRcSQh5mBDyCCHkfUneZkLIdwkhDxJC/pkQcqx0z3JCyAFCyNVC3gWEkEcJIbOEkI1C/qmEkLsJIfsIITsJIY7HN+ZbD0LIawkh306uf4gQMpjkr0p+zxJCthJCSJJ/HCHkzqQedxJCluVRD9+6EEL6CSG3JmXeSwi5VnhOFftkU1KH+wkhXyWEvCrJJ0l7zyb/rxSesy4p6z5CyDohX9lXFajL7yf5DxJCvkUIeZ3wnNr0iXDP2YSQI4SQ3xXySu8Tb+gOKokp84FbvwLgYQCLwaIs3wXgFwGcB6CRXPMhAB+S7vs8gNsBXJ387gPwGIDTADQBPADgjOS/zwJ4V/J9AsCflF2P5JoHAbwu+X08gL7k+zTYQWQEwFcAvDXJvwnAxuT7RrlNSqzL7wG4Lfm+GMB+AKMV7pOlwjVXAJhIvq9J2psAeD2Au5P84wA8nnwuS74vM/VVBerya0IZ3yrUpVZ9IpT562CRy3+3Kn2SJkWOJD+cDuA7lNL/pJS+DOCbAN5BKf1q8hsAvgPgZH4DIeQisIEjHsq1GsAspfRxSukhALcBuDDZjbwZwOeS624FcFEF6nEegAcppQ8AAKX0PyilRwghJ4JNqm9TNis+I5T3wqT8edYjTV0ogCHCDk9rATgE4HlUt0+eF64ZSsoPsPb9DGX4DoBjk/44H8CdlNKfUkqfAXAngAssfVVqXSil30rKCnT3Vd36BADeC7ZxbAt5VegTb0RCkh8eBvAmQsjxhJDFYLvCU6Rr1oPtLEAIGQJwDYC/kq45CcCTwu+nkrzjATwrLIA8PzS86gHglwBQQsgUIeQ+Qsj/FOrxlKIeAPBKSunTAJB8viKHegD+dfkcgBcBPA3gBwD+llL6U1S4TwghNxJCngTw+wD+MrleV15Tvq6vQsO3LiI2oNNXteoTQshJAN4BxiGJqEKfeCMSkpxAKd0LJia5E8C/gLHafDCDEHJ98vufkqy/ArCFUnpAepRKDkoN+UGRoh4NAG8EmzRvBPAOQsg5RZXXhBR1WQ3gCIBXATgVwJ8RQk5DhfuEUno9pfQUsDqMJ7f4lrewvkpRFwAAIeQ3wQjJNTxLU+aq9smHAVxDKT0iPar0PkmDSEhyBKX0ZkrpSkrpmwD8FMA+gCnTAPwWgN9P2FQA+C8AbiKE7AfwPgDXEULGwXYe4q75ZAA/AgvydmwidhHzy67HUwC+SSn9CaX0P8HkvyuT/JOFx4rl/XHCuiP5FFn9MuvyewD+hVJ6mFLaBvDvAMZQ4T4RMAngvyXfdeU15ev6Kjg86wJCyGsBfArAhZTS/0iy69YnYwBuS+b77wL4+0S0XYk+8UYZipmFkgC8IvlcDuC7YMqzCwDMABgx3PcBdJTtDTC9yanoKBHPTP67Hd1KxPeUXY/kv/vQrXR8W/LfPWDKXq4sXJPkb0a3sv2mKvQJ2G7300l5h5JrXlvhPvlF4f/3Avhc8v1t6Fa2Tyf5xwF4Irl3WfL9OFNfVaAuywHMAvg16Rm16hPpvu3oVraX3ifedS+7AL2cAPxbsvg8AOCcJG8WTAZ6f5ImFPd9AAkhSX6vAfA9MKuU64X808AsOWaTyTJQhXoA+AMwg4GHIRAFsF3Yw0k9PoZOZIXjAXwNbAf3NT5xyq4LgOGkXR9J7vnzivfJ55P2fRDAHQBOSvIJgI8nZX0IwJjwnPVJWWcBXGLrqwrU5VMAnhH6ancd+0S6bzsSQlKVPvFNMURKREREREQmRB1JREREREQmREISEREREZEJkZBERERERGRCJCQREREREZkQCUlERERERCZEQhIRUSIIId/S5G8XI8JGRFQZkZBERJQISumvlV2GiIisaNgviYiIyAuEkAOU0uEkSu1HwSLVPgF1bKWIiEoiciQREdXAOwD8MoBfBfDHYOduRETUApGQRERUA28CsINSeoRS+iOwA48iImqBSEgiIqqDGK8oopaIhCQiohr4VwDvIoT0JaH0f7PsAkVEuCIq2yMiqoF/BlO0PwQWwfab5RYnIsIdMfpvREREREQmRNFWREREREQmREISEREREZEJkZBERERERGRCJCQREREREZkQCUlERERERCZEQhIRERERkQmRkEREREREZML/BzdUEzdQLEDNAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bot_actions[600:1800].plot(kind='scatter',x='id',y='m_value',color='red')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "player_actions[1600:2800].plot(kind='scatter',x='id',y='m_value',color='blue')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "bot_actions[1600:2000].plot(kind='scatter',x='id',y='m_value_r',color='red')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "player_actions[1600:2000].plot(kind='scatter',x='id',y='m_value_r',color='blue')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alright, enough with the graphs, lets build a data structure for a model training. We will focus on `m_ticks`, `m_value` as bots value distribution differ than human action value." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Build few models - full data, m_ticks, and m_value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ticks data - (ticks,action,value,value_l,value_r) - prepare the data " ] }, { "cell_type": "code", "execution_count": 318, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['sessionid', 'id', 'm_ticks', 'm_kart_id', 'm_action', 'm_value',\n", " 'm_value_l', 'm_value_r', 'class'],\n", " dtype='object')\n", "sessionid 169275\n", "id 169275\n", "m_ticks 169275\n", "m_kart_id 169275\n", "m_action 169275\n", "m_value 169275\n", "m_value_l 169275\n", "m_value_r 169275\n", "class 169275\n", "dtype: int64\n" ] } ], "source": [ "ticks_actions = pd.DataFrame(action_list)\n", "ticks_actions.rename(columns={0:'sessionid',\n", " 1:'id',\n", " 2:'m_ticks',\n", " 3:'m_kart_id',\n", " 4:'m_action',\n", " 5:'m_value',\n", " 6:'m_value_l',\n", " 7:'m_value_r',\n", " 8:'class'\n", " }, \n", " inplace=True)\n", "print(ticks_actions.columns)\n", "print(ticks_actions.count())" ] }, { "cell_type": "code", "execution_count": 319, "metadata": {}, "outputs": [], "source": [ "ticks_actions=ticks_actions.drop('id',axis=1)\n", "ticks_actions=ticks_actions.drop('m_action',axis=1)\n", "ticks_actions=ticks_actions.drop('m_value',axis=1)\n", "ticks_actions=ticks_actions.drop('m_value_l',axis=1)\n", "ticks_actions=ticks_actions.drop('m_value_r',axis=1)" ] }, { "cell_type": "code", "execution_count": 320, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "class\n", "0 92887\n", "1 76388\n", "dtype: int64\n" ] } ], "source": [ "ticks_actions.head()\n", "print(ticks_actions.groupby('class',axis=0).size())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Populate a dictionary with series of `m_ticks` with the same `session_id`, `m_kart_id` and `class`. the output number should indicate the same size of the data in Aurora." ] }, { "cell_type": "code", "execution_count": 321, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "169275\n" ] } ], "source": [ "player_session_dict = {}\n", "i=0\n", "\n", "for index, row in ticks_actions.iterrows():\n", " i=i+1\n", " play_action_val=row['m_ticks']\n", " play_action_key=row['sessionid'],row['m_kart_id'],row['class']\n", " if(player_session_dict.get(play_action_key)):\n", " session_list=player_session_dict[play_action_key]\n", " session_list.append(play_action_val)\n", " player_session_dict[play_action_key]=session_list \n", " else:\n", " session_list=[]\n", " session_list.append(play_action_val)\n", " player_session_dict[play_action_key]=session_list\n", "print(i)" ] }, { "cell_type": "code", "execution_count": 324, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of 0 keys in full session 7539\n", "number of 1 keys in full session 5263\n", "the size of the sessions_array is 12802\n" ] } ], "source": [ "import numpy as np\n", "session_len=10\n", "#a line in the array includes m_ticks plus the classification \n", "size_of_arr_line=session_len*1+1\n", "sessions_array = np.zeros((12803,size_of_arr_line), dtype=float, order='C')\n", "k=0\n", "j=0\n", "i=0\n", "sum_of_actions=0\n", "for key in player_session_dict:\n", " raw_session=player_session_dict[key]\n", " #break the session into equal parts session_len actions long\n", " sessions_list=[raw_session[i:i + session_len] for i in range(0, len(raw_session), session_len)] \n", " #every session has session_len action set\n", " for session in sessions_list:\n", " #including only the full sessions with excatly 25 actions\n", " if(len(session)==session_len):\n", " k=k+1\n", " if(key[2]==0):\n", " j=j+1\n", " else:\n", " i=i+1\n", " new_row=[]\n", " for action in session:\n", " new_row.append(action)\n", " #add class field to the last column \n", " new_row.append(key[2])\n", " sessions_array[k]=np.asarray(new_row)\n", " \n", "print('number of 0 keys in full session {}'.format(j))\n", "print('number of 1 keys in full session {}'.format(i))\n", "print('the size of the sessions_array is {}'.format(k))" ] }, { "cell_type": "code", "execution_count": 325, "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", "
012345678910
00.00.00.00.00.00.00.00.00.00.00.0
121768.021794.021830.021891.021936.021980.022101.022141.022295.022313.00.0
222357.022406.022449.022482.022574.022583.022662.022716.022781.022795.00.0
323053.023074.023446.023465.023650.023666.023723.023862.023864.023885.00.0
423896.023914.023922.023956.023999.024037.024105.024130.024156.024195.00.0
....................................
1279883700.083731.083762.083793.083824.083855.083886.083917.083948.083979.01.0
1279984010.084041.084072.084103.084134.084165.084196.084227.084258.084289.01.0
1280084320.084351.084382.084382.084413.084413.084444.084444.084475.084475.01.0
1280184506.084537.084568.084599.084630.084661.084692.084723.084754.084785.01.0
1280282553.082584.082615.082615.082646.082646.082677.082708.082739.082770.01.0
\n", "

12803 rows × 11 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "1 21768.0 21794.0 21830.0 21891.0 21936.0 21980.0 22101.0 22141.0 \n", "2 22357.0 22406.0 22449.0 22482.0 22574.0 22583.0 22662.0 22716.0 \n", "3 23053.0 23074.0 23446.0 23465.0 23650.0 23666.0 23723.0 23862.0 \n", "4 23896.0 23914.0 23922.0 23956.0 23999.0 24037.0 24105.0 24130.0 \n", "... ... ... ... ... ... ... ... ... \n", "12798 83700.0 83731.0 83762.0 83793.0 83824.0 83855.0 83886.0 83917.0 \n", "12799 84010.0 84041.0 84072.0 84103.0 84134.0 84165.0 84196.0 84227.0 \n", "12800 84320.0 84351.0 84382.0 84382.0 84413.0 84413.0 84444.0 84444.0 \n", "12801 84506.0 84537.0 84568.0 84599.0 84630.0 84661.0 84692.0 84723.0 \n", "12802 82553.0 82584.0 82615.0 82615.0 82646.0 82646.0 82677.0 82708.0 \n", "\n", " 8 9 10 \n", "0 0.0 0.0 0.0 \n", "1 22295.0 22313.0 0.0 \n", "2 22781.0 22795.0 0.0 \n", "3 23864.0 23885.0 0.0 \n", "4 24156.0 24195.0 0.0 \n", "... ... ... ... \n", "12798 83948.0 83979.0 1.0 \n", "12799 84258.0 84289.0 1.0 \n", "12800 84475.0 84475.0 1.0 \n", "12801 84754.0 84785.0 1.0 \n", "12802 82739.0 82770.0 1.0 \n", "\n", "[12803 rows x 11 columns]" ] }, "execution_count": 325, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.DataFrame(sessions_array) \n", "df" ] }, { "cell_type": "code", "execution_count": 340, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "0.0 7540\n", "1.0 5263\n", "dtype: int64\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678910
00.00.00.00.00.00.00.00.00.00.00.0
121768.021794.021830.021891.021936.021980.022101.022141.022295.022313.00.0
222357.022406.022449.022482.022574.022583.022662.022716.022781.022795.00.0
323053.023074.023446.023465.023650.023666.023723.023862.023864.023885.00.0
423896.023914.023922.023956.023999.024037.024105.024130.024156.024195.00.0
....................................
99523297.023298.023299.023300.023326.023327.023329.023330.023331.023332.00.0
99623249.023251.023252.023253.023255.023256.023256.023257.023258.023260.00.0
99723261.023262.023263.023284.023285.023286.023287.023299.023300.023301.00.0
99823302.023303.023304.023306.023316.023317.023318.023320.023321.023322.00.0
99923329.023330.023331.023333.023334.023336.023337.023339.023340.023341.00.0
\n", "

1000 rows × 11 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "1 21768.0 21794.0 21830.0 21891.0 21936.0 21980.0 22101.0 22141.0 \n", "2 22357.0 22406.0 22449.0 22482.0 22574.0 22583.0 22662.0 22716.0 \n", "3 23053.0 23074.0 23446.0 23465.0 23650.0 23666.0 23723.0 23862.0 \n", "4 23896.0 23914.0 23922.0 23956.0 23999.0 24037.0 24105.0 24130.0 \n", ".. ... ... ... ... ... ... ... ... \n", "995 23297.0 23298.0 23299.0 23300.0 23326.0 23327.0 23329.0 23330.0 \n", "996 23249.0 23251.0 23252.0 23253.0 23255.0 23256.0 23256.0 23257.0 \n", "997 23261.0 23262.0 23263.0 23284.0 23285.0 23286.0 23287.0 23299.0 \n", "998 23302.0 23303.0 23304.0 23306.0 23316.0 23317.0 23318.0 23320.0 \n", "999 23329.0 23330.0 23331.0 23333.0 23334.0 23336.0 23337.0 23339.0 \n", "\n", " 8 9 10 \n", "0 0.0 0.0 0.0 \n", "1 22295.0 22313.0 0.0 \n", "2 22781.0 22795.0 0.0 \n", "3 23864.0 23885.0 0.0 \n", "4 24156.0 24195.0 0.0 \n", ".. ... ... ... \n", "995 23331.0 23332.0 0.0 \n", "996 23258.0 23260.0 0.0 \n", "997 23300.0 23301.0 0.0 \n", "998 23321.0 23322.0 0.0 \n", "999 23340.0 23341.0 0.0 \n", "\n", "[1000 rows x 11 columns]" ] }, "execution_count": 340, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(df.groupby(session_len,axis=0).size())\n", "df.head(1000)" ] }, { "cell_type": "code", "execution_count": 327, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "feature_columns=RangeIndex(start=0, stop=10, step=1)\n", "label_column=10\n", "[23053. 23074. 23446. 23465. 23650. 23666. 23723. 23862. 23864. 23885.]\n" ] }, { "data": { "text/plain": [ "0.0" ] }, "execution_count": 327, "metadata": {}, "output_type": "execute_result" } ], "source": [ "feature_columns = df.columns[:-1]\n", "label_column = df.columns[-1]\n", "\n", "print('feature_columns={}'.format(feature_columns))\n", "print('label_column={}'.format(label_column))\n", "\n", "features = df[feature_columns].values.astype('float32')\n", "labels = (df[label_column].values).astype('float32')\n", "print(features[3])\n", "labels[3]" ] }, { "cell_type": "code", "execution_count": 328, "metadata": {}, "outputs": [], "source": [ "import io\n", "import sagemaker.amazon.common as smac\n", "\n", "buf = io.BytesIO()\n", "smac.write_numpy_to_dense_tensor(buf, features, labels)\n", "buf.seek(0);" ] }, { "cell_type": "code", "execution_count": 329, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Uploaded training data location: s3://stk-events/bot-detect-ticks-model/train/recordio-pb-data\n", "Training artifacts will be uploaded to: s3://stk-events/bot-detect-ticks-model/output\n" ] } ], "source": [ "import boto3\n", "import os\n", "import sagemaker\n", "\n", "session = sagemaker.Session()\n", "bucket = 'stk-events'\n", "\n", "prefix = 'bot-detect-ticks-model'\n", "key = 'recordio-pb-data'\n", "\n", "boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)\n", "\n", "s3_train_data = 's3://{}/{}/train/{}'.format(bucket, prefix, key)\n", "print('Uploaded training data location: {}'.format(s3_train_data))\n", "\n", "output_location = 's3://{}/{}/output'.format(bucket, prefix)\n", "print('Training artifacts will be uploaded to: {}'.format(output_location))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sagemaker.amazon.amazon_estimator import get_image_uri\n", "\n", "container = get_image_uri(boto3.Session().region_name, 'linear-learner')\n", "\n", "from sagemaker import get_execution_role\n", "\n", "linear = sagemaker.estimator.Estimator(container,\n", " get_execution_role(), \n", " train_instance_count=1, \n", " train_instance_type='ml.c4.xlarge',\n", " output_path=output_location,\n", " sagemaker_session=session)\n", "linear.set_hyperparameters(feature_dim=features.shape[1],\n", " predictor_type='binary_classifier',\n", " mini_batch_size=200)\n", "\n", "linear.fit({'train': s3_train_data},wait=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#delete old endpoint\n", "sagemaker.Session().delete_endpoint(\"arn:aws:sagemaker:us-west-2:163538056407:endpoint/stk-bot-detect-ticks\")" ] }, { "cell_type": "code", "execution_count": 331, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Parameter image will be renamed to image_uri in SageMaker Python SDK v2.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "---------------!Endpoint name: stk-bot-detect-ticks\n" ] } ], "source": [ "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "\n", "linear_predictor = linear.deploy(initial_instance_count=1,\n", " endpoint_name='stk-bot-detect-ticks',\n", " instance_type='ml.c4.large')\n", "# Specify input and output formats.\n", "linear_predictor.content_type = 'text/csv'\n", "linear_predictor.serializer = csv_serializer\n", "linear_predictor.deserializer = json_deserializer\n", "print('Endpoint name: {}'.format(linear_predictor.endpoint))" ] }, { "cell_type": "code", "execution_count": 332, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 19.8 ms, sys: 0 ns, total: 19.8 ms\n", "Wall time: 88.5 ms\n" ] }, { "data": { "text/plain": [ "'84351,83390,84010,83111,84537,83700,84320,83359,84847,83979'" ] }, "execution_count": 332, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "import pandas as pd\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " cur.execute(\"\"\"\n", " select group_concat(concat(m_ticks)) as sample\n", " from (\n", " select concat(id,\"-\",m_kart_id) id, m_ticks\n", " from (\n", " select id,m_kart_id,m_ticks\n", " from (\n", " select id,m_kart_id,m_ticks\n", " from actions order by id desc limit 70) t1 order by m_kart_id limit 10) t2) t3; \n", " \"\"\")\n", " sample_list=cur.fetchall() \n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))\n", "sample=''.join(sample_list[0])\n", "sample" ] }, { "cell_type": "code", "execution_count": 339, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(14102, 14155, 14250, 14287, 14445, 14475, 14476, 14498, 14555, 14586) predict {'predictions': [{'score': 0.23823519051074982, 'predicted_label': 0}]}\n", "(10261, 10261, 10261, 10261, 10261, 10261, 10261, 10261, 10292, 10292) predict {'predictions': [{'score': 0.20649145543575287, 'predicted_label': 0}]}\n", "CPU times: user 30.2 ms, sys: 4.5 ms, total: 34.7 ms\n", "Wall time: 152 ms\n" ] } ], "source": [ "%%time\n", "import pandas as pd\n", "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "linear_predictor.content_type = 'text/csv'\n", "linear_predictor.serializer = csv_serializer\n", "linear_predictor.accept = 'application/json'\n", "linear_predictor.deserializer = json_deserializer\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " cur.execute(\"\"\"\n", " select ticks_1,ticks_2,ticks_3,ticks_4,ticks_5,ticks_6,ticks_7,ticks_8,ticks_9,ticks_10 from ticks_session_sample;\n", " \"\"\")\n", " sample_list=cur.fetchall() \n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))\n", "\n", "for sample in sample_list:\n", " results=linear_predictor.predict(sample)\n", " print('{} predict {}'.format(sample,results))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Full data - (ticks,action,value,value_l,value_r) - prepare the data " ] }, { "cell_type": "code", "execution_count": 180, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['sessionid', 'id', 'm_ticks', 'm_kart_id', 'm_action', 'm_value',\n", " 'm_value_l', 'm_value_r', 'class'],\n", " dtype='object')\n", "sessionid 76203\n", "id 76203\n", "m_ticks 76203\n", "m_kart_id 76203\n", "m_action 76203\n", "m_value 76203\n", "m_value_l 76203\n", "m_value_r 76203\n", "class 76203\n", "dtype: int64\n" ] } ], "source": [ "actions = pd.DataFrame(action_list)\n", "actions.rename(columns={0:'sessionid',\n", " 1:'id',\n", " 2:'m_ticks',\n", " 3:'m_kart_id',\n", " 4:'m_action',\n", " 5:'m_value',\n", " 6:'m_value_l',\n", " 7:'m_value_r',\n", " 8:'class'\n", " }, \n", " inplace=True)\n", "print(actions.columns)\n", "print(actions.count())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We used `id` for sorting the session actions but now we dont need it anymore." ] }, { "cell_type": "code", "execution_count": 181, "metadata": {}, "outputs": [], "source": [ "full_actions=actions.drop('id',axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Checking the amount of data we lose in aggreagtion. The session length is 25 so we are going loose all the session that are smaller than 25" ] }, { "cell_type": "code", "execution_count": 185, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sessionid\n", "0 99\n", "1 100\n", "2 100\n", "3 100\n", "4 100\n", " ... \n", "1083 100\n", "1084 100\n", "1085 100\n", "1086 100\n", "1087 87\n", "Length: 769, dtype: int64\n", "76193\n" ] }, { "data": { "text/plain": [ "sessionid 76203\n", "m_ticks 76203\n", "m_kart_id 76203\n", "m_action 76203\n", "m_value 76203\n", "m_value_l 76203\n", "m_value_r 76203\n", "class 76203\n", "dtype: int64" ] }, "execution_count": 185, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(full_actions.groupby(['sessionid'],axis=0).size())\n", "sum=0\n", "for i in full_actions.groupby(['sessionid'],axis=0).size():\n", " #print(i,end='####')\n", " if(i>session_len):\n", " sum=sum+i\n", "print(sum)\n", "full_actions.count()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Checking the size of sessions. Session is an ordered set of actions grouped by the sessiondid, the player kart id and the classification. \n", "\n", "Classification is set as 1 in case of human, and 0 as bot.\n", "\n", "The `sum` is the number of remaining data after aggregating on both the kartid and class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Construct a dictonary based on `sessionid` and action classification `class`" ] }, { "cell_type": "code", "execution_count": 186, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "76203\n" ] } ], "source": [ "player_session_dict = {}\n", "i=0\n", "\n", "for index, row in full_actions.iterrows():\n", " i=i+1\n", " play_action_val=row['m_ticks'],row['m_action'],row['m_value'],row['m_value_l'],row['m_value_r']\n", " play_action_key=row['sessionid'],row['m_kart_id'],row['class']\n", " if(player_session_dict.get(play_action_key)):\n", " session_list=player_session_dict[play_action_key]\n", " session_list.append(play_action_val)\n", " player_session_dict[play_action_key]=session_list \n", " else:\n", " session_list=[]\n", " session_list.append(play_action_val)\n", " player_session_dict[play_action_key]=session_list\n", "print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the session length (number of actions in a session)" ] }, { "cell_type": "code", "execution_count": 187, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "number of actions pulled from aurora=76203\n", "number of actions after initial aggregations=67939\n" ] }, { "data": { "text/plain": [ "3814" ] }, "execution_count": 187, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum=0\n", "for key in player_session_dict.keys():\n", " if (len(player_session_dict[key])>=session_len):\n", " #print(len(player_session_dict[key]),end = '###')\n", " sum=sum+len(player_session_dict[key])\n", "print()\n", "print('number of actions pulled from aurora={}'.format(i))\n", "print('number of actions after initial aggregations={}'.format(sum))\n", "len(player_session_dict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Transpose the dataframe to a new column strucutre that concatenates series of consecutive actions in a fixed size of 25" ] }, { "cell_type": "code", "execution_count": 189, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5898\n" ] } ], "source": [ "import numpy as np\n", "\n", "#a line in the array is five set of actions plus the classification \n", "size_of_arr_line=session_len*5+1\n", "sessions_array = np.zeros((5898,size_of_arr_line), dtype=float, order='C')\n", "\n", "i=0\n", "sum_of_actions=0\n", "for key in player_session_dict:\n", " raw_session=player_session_dict[key]\n", " #break the session into equal parts 25 actions long\n", " sessions_list=[raw_session[i:i + session_len] for i in range(0, len(raw_session), session_len)] \n", " #every session has 25 action set\n", " for session in sessions_list:\n", " #including only the full sessions with excatly 25 actions\n", " if(len(session)==session_len):\n", " new_row=[]\n", " for action in session:\n", " new_row.append(action[0])\n", " new_row.append(action[1])\n", " new_row.append(action[2])\n", " new_row.append(action[3])\n", " new_row.append(action[4])\n", " #add class field to the last column \n", " new_row.append(key[2])\n", " sessions_array[i]=np.asarray(new_row)\n", " i=i+1 \n", "print(i)" ] }, { "cell_type": "code", "execution_count": 190, "metadata": {}, "outputs": [], "source": [ "df=pd.DataFrame(sessions_array) " ] }, { "cell_type": "code", "execution_count": 191, "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", "
0123456789...41424344454647484950
021768.00.032768.00.00.021794.00.00.032768.00.0...0.032768.00.00.022313.00.00.032768.00.00.0
122357.00.032768.00.00.022406.00.00.032768.00.0...7.032768.00.00.022795.07.00.00.00.00.0
223053.00.032768.00.00.023074.00.00.032768.00.0...4.00.00.0-32768.023885.01.00.00.0-32768.00.0
323896.04.032768.00.00.023914.04.00.00.00.0...0.032768.00.00.024195.00.00.032768.00.00.0
421777.01.032768.00.00.021801.01.00.00.0-32768.0...1.032768.00.00.022163.01.00.00.0-32768.00.0
\n", "

5 rows × 51 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... \\\n", "0 21768.0 0.0 32768.0 0.0 0.0 21794.0 0.0 0.0 32768.0 0.0 ... \n", "1 22357.0 0.0 32768.0 0.0 0.0 22406.0 0.0 0.0 32768.0 0.0 ... \n", "2 23053.0 0.0 32768.0 0.0 0.0 23074.0 0.0 0.0 32768.0 0.0 ... \n", "3 23896.0 4.0 32768.0 0.0 0.0 23914.0 4.0 0.0 0.0 0.0 ... \n", "4 21777.0 1.0 32768.0 0.0 0.0 21801.0 1.0 0.0 0.0 -32768.0 ... \n", "\n", " 41 42 43 44 45 46 47 48 49 50 \n", "0 0.0 32768.0 0.0 0.0 22313.0 0.0 0.0 32768.0 0.0 0.0 \n", "1 7.0 32768.0 0.0 0.0 22795.0 7.0 0.0 0.0 0.0 0.0 \n", "2 4.0 0.0 0.0 -32768.0 23885.0 1.0 0.0 0.0 -32768.0 0.0 \n", "3 0.0 32768.0 0.0 0.0 24195.0 0.0 0.0 32768.0 0.0 0.0 \n", "4 1.0 32768.0 0.0 0.0 22163.0 1.0 0.0 0.0 -32768.0 0.0 \n", "\n", "[5 rows x 51 columns]" ] }, "execution_count": 191, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 192, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "0.0 17\n", "2.0 1\n", "5.0 1\n", "15.0 1\n", "64.0 1\n", " ..\n", "75795.0 1\n", "95893.0 1\n", "96643.0 1\n", "96906.0 1\n", "97667.0 1\n", "Length: 5140, dtype: int64\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...41424344454647484950
021768.00.032768.00.00.021794.00.00.032768.00.0...0.032768.00.00.022313.00.00.032768.00.00.0
\n", "

1 rows × 51 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... 41 \\\n", "0 21768.0 0.0 32768.0 0.0 0.0 21794.0 0.0 0.0 32768.0 0.0 ... 0.0 \n", "\n", " 42 43 44 45 46 47 48 49 50 \n", "0 32768.0 0.0 0.0 22313.0 0.0 0.0 32768.0 0.0 0.0 \n", "\n", "[1 rows x 51 columns]" ] }, "execution_count": 192, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(df.groupby(session_len,axis=0).size())\n", "df.head(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check if we did not loose data we need to multiple the number by 25" ] }, { "cell_type": "code", "execution_count": 194, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "class\n", "0 65618\n", "1 10585\n", "dtype: int64" ] }, "execution_count": 194, "metadata": {}, "output_type": "execute_result" } ], "source": [ "full_actions.groupby(['class'],axis=0).size()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check how much data was lost during transformation." ] }, { "cell_type": "code", "execution_count": 700, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.03143830233167409\n", "0.03237606464293514\n" ] } ], "source": [ "print(120/3817)\n", "print(1186/36632)" ] }, { "cell_type": "code", "execution_count": 195, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RangeIndex(start=0, stop=51, step=1)\n", "feature_columns=RangeIndex(start=0, stop=50, step=1)\n", "label_column=50\n" ] } ], "source": [ "print(df.columns)\n", "feature_columns = df.columns[:-1]\n", "label_column = df.columns[-1]\n", "\n", "print('feature_columns={}'.format(feature_columns))\n", "print('label_column={}'.format(label_column))\n", "\n", "features = df[feature_columns].values.astype('float32')\n", "labels = (df[label_column].values).astype('float32')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare Data and Upload to S3" ] }, { "cell_type": "code", "execution_count": 196, "metadata": {}, "outputs": [], "source": [ "import io\n", "import sagemaker.amazon.common as smac\n", "\n", "buf = io.BytesIO()\n", "smac.write_numpy_to_dense_tensor(buf, features, labels)\n", "buf.seek(0);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we upload the data to S3 using boto3." ] }, { "cell_type": "code", "execution_count": 197, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Uploaded training data location: s3://stk-events/anticheat-model/train/recordio-pb-data\n", "Training artifacts will be uploaded to: s3://stk-events/anticheat-model/output\n" ] } ], "source": [ "import boto3\n", "import os\n", "import sagemaker\n", "\n", "session = sagemaker.Session()\n", "bucket = 'stk-events'\n", "\n", "prefix = 'anticheat-model'\n", "key = 'recordio-pb-data'\n", "\n", "boto3.resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'train', key)).upload_fileobj(buf)\n", "\n", "s3_train_data = 's3://{}/{}/train/{}'.format(bucket, prefix, key)\n", "print('Uploaded training data location: {}'.format(s3_train_data))\n", "\n", "output_location = 's3://{}/{}/output'.format(bucket, prefix)\n", "print('Training artifacts will be uploaded to: {}'.format(output_location))" ] }, { "cell_type": "code", "execution_count": 198, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "'get_image_uri' method will be deprecated in favor of 'ImageURIProvider' class in SageMaker Python SDK v2.\n", "Parameter image_name will be renamed to image_uri in SageMaker Python SDK v2.\n", "'s3_input' class will be renamed to 'TrainingInput' in SageMaker Python SDK v2.\n" ] } ], "source": [ "from sagemaker.amazon.amazon_estimator import get_image_uri\n", "\n", "container = get_image_uri(boto3.Session().region_name, 'linear-learner')\n", "\n", "from sagemaker import get_execution_role\n", "\n", "linear = sagemaker.estimator.Estimator(container,\n", " get_execution_role(), \n", " train_instance_count=1, \n", " train_instance_type='ml.c4.xlarge',\n", " output_path=output_location,\n", " sagemaker_session=session)\n", "linear.set_hyperparameters(feature_dim=features.shape[1],\n", " predictor_type='binary_classifier',\n", " mini_batch_size=200)\n", "\n", "linear.fit({'train': s3_train_data},wait=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Host Linear Classifier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we deploy the estimator to and endpoint.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#sagemaker.Session().delete_endpoint(linear.endpoint)\n", "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "#delete old endpoint\n", "sagemaker.Session().delete_endpoint(linear.endpoint)\n", "\n", "linear_predictor = linear.deploy(initial_instance_count=1,\n", " endpoint_name=\"stk-bot-detector\",\n", " instance_type='ml.m4.xlarge')\n", "# Specify input and output formats.\n", "linear_predictor.content_type = 'text/csv'\n", "linear_predictor.serializer = csv_serializer\n", "linear_predictor.deserializer = json_deserializer\n", "print('Endpoint name: {}'.format(linear_predictor.endpoint))" ] }, { "cell_type": "code", "execution_count": 664, "metadata": {}, "outputs": [], "source": [ "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "linear_predictor.content_type = 'text/csv'\n", "linear_predictor.serializer = csv_serializer\n", "linear_predictor.accept = 'application/json'\n", "linear_predictor.deserializer = json_deserializer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calling the endpoint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "prepare the parameters for the model endpoint call.\n", "\n", "This SQL will return a game session actions (25 actions) that we trained the model with" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```sql\n", "select concat(id,\"-\",m_kart_id) id, m_ticks,m_action,m_value,m_value_l,m_value_r \n", "from (\n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r \n", " from actions order by m_kart_id,id limit 25) t;\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is an example result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "mysql> select * from tmp\n", " -> ;\n", "+-------+---------+----------+---------+-----------+-----------+\n", "| id | ticks | action | value | value_l | value_r |\n", "+-------+---------+----------+---------+-----------+-----------+\n", "| 0 | 31 | 1 | 4479 | 0 | 0 |\n", "| 1 | 32 | 2 | 32768 | 0 | -4479 |\n", "| 2 | 62 | 1 | 5423 | 0 | -4479 |\n", "| 3 | 93 | 1 | 6317 | 0 | -5423 |\n", "| 4 | 124 | 1 | 5064 | 0 | -6317 |\n", "| 5 | 155 | 1 | 5729 | 0 | -5064 |\n", "| 6 | 186 | 1 | 6469 | 0 | -5729 |\n", "| 7 | 217 | 1 | 6714 | 0 | -6469 |\n", "| 8 | 248 | 0 | 32768 | 0 | -6714 |\n", "| 9. | 279 | 1 | 7953 | 32768 | -6714 |\n", "| 10 | 310 | 1 | 14415 | 32768 | -7953 |\n", "| 11 | 341 | 0 | 3698 | 32768 | -14415 |\n", "| 12 | 372 | 0 | 5492 | 3698 | -14415 |\n", "| 13 | 403 | 0 | 20817 | 5492 | -14415 |\n", "| 14 | 434 | 0 | 26290 | 20817 | -14415 |\n", "| 15. | 465 | 0 | 24373 | 26290 | -14415 |\n", "| 16. | 496 | 0 | 11402 | 24373 | -14415 |\n", "| 17. | 527 | 0 | 10370 | 11402 | -14415 |\n", "| 18. | 558 | 0 | 12071 | 10370 | -14415 |\n", "| 19. | 589 | 0 | 15223 | 12071 | -14415 |\n", "| 20. | 620 | 0 | 17070 | 15223 | -14415 |\n", "| 21. | 651 | 0 | 19485 | 17070 | -14415 |\n", "| 22. | 682 | 0 | 16294 | 19485 | -14415 |\n", "| 23. | 713 | 0 | 12267 | 16294 | -14415 |\n", "| 24. | 744 | 0 | 10856 | 12267 | -14415 |\n", "+-------+---------+----------+---------+-----------+-----------+\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to concatenate the 25 results into a single line to send it to the model endpoint." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "+---------+----------+---------+-----------+-----------+ +---------+---------+--------+----------+----------+\n", "| ticks_0 | action_0 | value_0 | value_l_0 | value_r_0 |..... |ticks_24 |action_24|value_24|value_l_24|value_r_24|\n", "+---------+----------+---------+-----------+-----------+ +---------+---------+--------+----------+----------+\n", " 31 1 4479 0 0 744 0 10856 12267 -14415\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```sql\n", "select group_concat(concat(m_ticks,',',m_action,',',m_value,',',m_value_l,',',m_value_r)) as col \n", "from (select concat(id,\"-\",m_kart_id) id, m_ticks,m_action,m_value,m_value_l,m_value_r \n", " from ( \n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r \n", " from actions order by m_kart_id,id limit 25) \n", " t) \n", "t1;\n", "```" ] }, { "cell_type": "code", "execution_count": 665, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 19.4 ms, sys: 0 ns, total: 19.4 ms\n", "Wall time: 98.7 ms\n" ] } ], "source": [ "%%time\n", "import pandas as pd\n", "\n", "modulo_size=224\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " cur.execute(\"\"\"\n", " select group_concat(concat(m_ticks,',',m_action,',',m_value,',',m_value_l,',',m_value_r)) as sample\n", " from (\n", " select concat(id,\"-\",m_kart_id) id, m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from (\n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from (\n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from actions order by id desc limit 70) t1 order by m_kart_id limit 25) t2) t3; \n", " \"\"\")\n", " sample_list=cur.fetchall() \n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))\n", "sample=''.join(sample_list[0])" ] }, { "cell_type": "code", "execution_count": 666, "metadata": {}, "outputs": [], "source": [ "sample=''.join(sample_list[0])" ] }, { "cell_type": "code", "execution_count": 667, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'80447,0,0,32768,0,78329,1,0,0,-32768,76364,1,32768,0,0,78647,1,0,0,-32768,76891,0,0,32768,0,79382,1,32768,0,0,77409,4,0,32768,0,79825,1,0,0,-32768,77971,1,32768,0,0,80669,3,0,0,0,78484,1,32768,0,0,76713,1,32768,0,0,79121,1,0,0,-32768,77126,0,32768,0,0,79600,1,32768,0,0,77585,0,32768,0,0,80430,0,32768,0,0,78299,1,32768,0,0,76239,1,0,0,-32768,78622,1,32768,0,0,76875,0,32768,0,0,79270,1,0,0,-32768,77261,0,32768,0,0,79774,1,32768,0,0,77882,1,0,0,-32768'" ] }, "execution_count": 667, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample" ] }, { "cell_type": "code", "execution_count": 668, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'predictions': [{'score': 0.0001962552487384528, 'predicted_label': 0}]}\n" ] } ], "source": [ "results = linear_predictor.predict(sample)\n", "print(results)" ] }, { "cell_type": "code", "execution_count": 671, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 19.1 ms, sys: 0 ns, total: 19.1 ms\n", "Wall time: 63.7 ms\n" ] }, { "data": { "text/plain": [ "'62,1,846,0,-672,589,0,32768,32768,-32768,899,0,30620,19736,-1848,279,0,765,0,-102,651,7,32768,32768,-5391,31,1,672,0,0,837,0,3445,11325,-1848,217,1,69,0,-287,1085,0,32768,18005,-3301,434,0,32768,32768,-20774,775,0,11325,11227,-9552,155,1,456,0,-282,31,2,32768,0,-672,527,1,32768,32768,-29192,1023,1,3301,16818,-1848,372,1,9534,32768,-102,713,1,9552,32768,-19031,93,1,209,0,-846,930,0,32768,30620,-1848,310,0,508,765,-102,868,0,19736,3445,-1848,248,1,102,0,-69,806,1,1848,11325,-9552,186,1,287,0,-456,682,1,19031,32768,-5391'" ] }, "execution_count": 671, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "import pandas as pd\n", "\n", "modulo_size=224\n", "\n", "try:\n", " conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=PASWD, port=3306, database=DBNAME)\n", " cur = conn.cursor()\n", " cur.execute(\"\"\"\n", " select group_concat(concat(m_ticks,',',m_action,',',m_value,',',m_value_l,',',m_value_r)) as sample\n", " from (\n", " select concat(id,\"-\",m_kart_id) id, m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from (\n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from (\n", " select id,m_kart_id,m_ticks,m_action,m_value,m_value_l,m_value_r\n", " from actions where class=1 order by id limit 70) t1 order by m_kart_id limit 25) t2) t3; \n", " \"\"\")\n", " sample_list=cur.fetchall() \n", "except Exception as e:\n", " print(\"Database connection failed due to {}\".format(e))\n", "sample=''.join(sample_list[0])\n", "sample" ] }, { "cell_type": "code", "execution_count": 672, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'predictions': [{'score': 0.15919774770736694, 'predicted_label': 0}]}\n" ] } ], "source": [ "results = linear_predictor.predict(sample)\n", "print(results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Clean up\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will leave the prediction endpoint running at the end of this notebook so we can handle incoming event streams. However, don't forget to delete the prediction endpoint when you're done. You can do that at the Amazon SageMaker console in the Endpoints page. Or you can run linear_predictor.delete_endpoint()" ] } ], "metadata": { "kernelspec": { "display_name": "conda_pytorch_latest_p36", "language": "python", "name": "conda_pytorch_latest_p36" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.10" } }, "nbformat": 4, "nbformat_minor": 4 }