{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning for Telecom with RandomCutForest" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Machine Learning for Telecom with Random Cut Forest is a mode of unsupervised anomaly detection on timeseries data with Amazon Random Cut Forest algorithm. The notebook demonstrates the usage of Call Service Duration in a CDR (Call Detail Record) dataset for Anomaly detection.\n", "\n", "- _In this notebook, we will use the SageMaker RCF algorithm to train an RCF model on the Call Detail Record (CDR) dataset of Telecom data. We will use this model to predict anomalous events by emitting an \"anomaly score\" for each data point._\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%config IPCompleter.greedy=True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using S3 Select, enables applications to retrieve only a subset of data from an object by using simple SQL expressions. By using S3 Select to retrieve only the data, you can achieve drastic performance increases – in many cases you can get as much as a 400% improvement." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import urllib.request\n", "import boto3\n", "import pandas as pd\n", "from io import StringIO\n", "\n", "# Using S3 Select to retrieve data \n", "s3 = boto3.client('s3')\n", "bucket_name = '<%bucket_name%>' # <-- use your own bucket, here\n", "version = '%%VERSION%%'\n", "file_name = 'machine-learning-for-all/{}/data/cdr-stop/cdr_stop.csv'.format(version) \n", "\n", "sql_stmt = \"\"\"SELECT * FROM s3object\"\"\"\n", "\n", "# making the request\n", "req = s3.select_object_content(\n", " Bucket=bucket_name,\n", " Key=file_name,\n", " ExpressionType='SQL',\n", " Expression=sql_stmt,\n", " InputSerialization = {'CSV': {'FileHeaderInfo': 'Use'}},\n", " OutputSerialization = {'CSV': {}},\n", ")\n", "\n", "records = []\n", "\n", "# looping through the payload of the AWS EventStream and getting one or more Records and Stats\n", "for event in req['Payload']:\n", " if 'Records' in event:\n", " records.append(event['Records']['Payload'])\n", " elif 'Stats' in event:\n", " stats = event['Stats']['Details']\n", "\n", "\n", "# converting the byte strings to strings and then joining them together to form one large string\n", "file_str = ''.join(r.decode('utf-8') for r in records)\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "273928\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset = pd.read_csv(StringIO(file_str),header=None, usecols=[5,13], names=['Start_Time','Duration'])\n", "print(len(dataset))\n", "\n", "dataset.plot(title='Call Service Duration')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploration of Data" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "matplotlib.rcParams['figure.dpi'] = 100\n", "\n", "dataset.plot()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dataset[250:350].plot()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def convert_and_upload_training_data(\n", " ndarray, bucket, prefix, filename='data.pbr'):\n", " import boto3\n", " import os\n", " from sagemaker.amazon.common import numpy_to_record_serializer\n", "\n", " # convert Numpy array to Protobuf RecordIO format\n", " serializer = numpy_to_record_serializer()\n", " buffer = serializer(ndarray)\n", "\n", " # upload to S3\n", " s3_object = os.path.join(prefix, 'train', filename)\n", " boto3.Session().resource('s3').Bucket(bucket).Object(s3_object).upload_fileobj(buffer)\n", " s3_path = 's3://{}/{}'.format(bucket, s3_object)\n", " return s3_path\n", "\n", "bucket = bucket_name # <-- use your own bucket, here\n", "prefix = 'ml-telecom/sagemaker/randomcutforest'\n", "s3_train_data = convert_and_upload_training_data(\n", " dataset.Duration.as_matrix().reshape(-1,1),\n", " bucket,\n", " prefix)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hyperparameters" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:sagemaker:Creating training-job with name: randomcutforest-2018-09-27-19-54-35-890\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "..................\n", "\n", "\u001b[31mDocker entrypoint called with argument(s): train\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Reading default configuration from /opt/amazon/lib/python2.7/site-packages/algorithm/resources/default-conf.json: {u'_ftp_port': 8999, u'num_samples_per_tree': 256, u'_tuning_objective_metric': u'', u'_num_gpus': u'auto', u'_log_level': u'info', u'_kvstore': u'dist_async', u'force_dense': u'true', u'epochs': 1, u'num_trees': 100, u'eval_metrics': [u'accuracy', u'precision_recall_fscore'], u'_num_kv_servers': u'auto', u'mini_batch_size': 1000}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Reading provided configuration from /opt/ml/input/config/hyperparameters.json: {u'mini_batch_size': u'1000', u'feature_dim': u'1', u'num_samples_per_tree': u'512', u'num_trees': u'50'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Final configuration: {u'_ftp_port': 8999, u'num_samples_per_tree': u'512', u'_tuning_objective_metric': u'', u'_num_gpus': u'auto', u'_log_level': u'info', u'_kvstore': u'dist_async', u'force_dense': u'true', u'epochs': 1, u'feature_dim': u'1', u'num_trees': u'50', u'eval_metrics': [u'accuracy', u'precision_recall_fscore'], u'_num_kv_servers': u'auto', u'mini_batch_size': u'1000'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 WARNING 139997971146560] Loggers have already been setup.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Launching parameter server for role scheduler\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/a2c71872-73ed-4a41-992e-d62de8f656b8', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-19-54-35-890', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/6a1f7784-e718-46ce-899e-08cf4038c08f', 'PWD': '/'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] envs={'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/a2c71872-73ed-4a41-992e-d62de8f656b8', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_NUM_WORKER': '1', 'DMLC_PS_ROOT_PORT': '9000', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-19-54-35-890', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/6a1f7784-e718-46ce-899e-08cf4038c08f', 'DMLC_ROLE': 'scheduler', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Launching parameter server for role server\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/a2c71872-73ed-4a41-992e-d62de8f656b8', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-19-54-35-890', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/6a1f7784-e718-46ce-899e-08cf4038c08f', 'PWD': '/'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] envs={'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/a2c71872-73ed-4a41-992e-d62de8f656b8', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_NUM_WORKER': '1', 'DMLC_PS_ROOT_PORT': '9000', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-19-54-35-890', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/6a1f7784-e718-46ce-899e-08cf4038c08f', 'DMLC_ROLE': 'server', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Environment: {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/a2c71872-73ed-4a41-992e-d62de8f656b8', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_PS_ROOT_PORT': '9000', 'DMLC_NUM_WORKER': '1', 'SAGEMAKER_HTTP_PORT': '8080', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-19-54-35-890', 'HOME': '/root', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/6a1f7784-e718-46ce-899e-08cf4038c08f', 'DMLC_ROLE': 'worker', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Using default worker.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Loaded iterator creator application/x-recordio-protobuf for content type ('application/x-recordio-protobuf', '1.0')\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Verifying hyperparamemters...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Hyperparameters are correct.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Validating that feature_dim agrees with dimensions in training data...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] feature_dim is correct.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Validating memory limits...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Available memory in bytes: 15330705408\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Estimated sample size in bytes: 204800\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Estimated memory needed to build the forest in bytes: 1024000\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Memory limits validated.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Starting cluster sharing facilities...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139997971146560] Create Store: dist_async\u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:22] >>> starting FTP server on 0.0.0.0:8999, pid=1 <<<\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139996463884032] >>> starting FTP server on 0.0.0.0:8999, pid=1 <<<\u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:22] poller: \u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139996463884032] poller: \u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:22] masquerade (NAT) address: None\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139996463884032] masquerade (NAT) address: None\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139996463884032] passive ports: None\u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:22] passive ports: None\u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:22] use sendfile(2): False\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:22 INFO 139996463884032] use sendfile(2): False\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Cluster sharing facilities started.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Verifying all workers are accessible...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] All workers accessible.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Initializing Sampler...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Sampler correctly initialized.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"initialize.time\": {\"count\": 1, \"max\": 722.2280502319336, \"sum\": 722.2280502319336, \"min\": 722.2280502319336}}, \"EndTime\": 1538078243.292754, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078242.52449}\n", "\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"Max Batches Seen Between Resets\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Number of Batches Since Last Reset\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Number of Records Since Last Reset\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Total Batches Seen\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Total Records Seen\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Max Records Seen Between Resets\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Reset Count\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}}, \"EndTime\": 1538078243.292974, \"Dimensions\": {\"Host\": \"algo-1\", \"Meta\": \"init_train_data_iter\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078243.292928}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Sampling training data...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Sampling training data completed.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"epochs\": {\"count\": 1, \"max\": 1, \"sum\": 1.0, \"min\": 1}, \"update.time\": {\"count\": 1, \"max\": 604.6559810638428, \"sum\": 604.6559810638428, \"min\": 604.6559810638428}}, \"EndTime\": 1538078243.897949, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078243.292866}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Early stop condition met. Stopping training.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] #progress_metric: host=algo-1, completed 100 % epochs\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"Max Batches Seen Between Resets\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Number of Batches Since Last Reset\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Number of Records Since Last Reset\": {\"count\": 1, \"max\": 273928, \"sum\": 273928.0, \"min\": 273928}, \"Total Batches Seen\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Total Records Seen\": {\"count\": 1, \"max\": 273928, \"sum\": 273928.0, \"min\": 273928}, \"Max Records Seen Between Resets\": {\"count\": 1, \"max\": 273928, \"sum\": 273928.0, \"min\": 273928}, \"Reset Count\": {\"count\": 1, \"max\": 1, \"sum\": 1.0, \"min\": 1}}, \"EndTime\": 1538078243.898299, \"Dimensions\": {\"Host\": \"algo-1\", \"Meta\": \"training_data_iter\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\", \"epoch\": 0}, \"StartTime\": 1538078243.293255}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] #throughput_metric: host=algo-1, train throughput=452647.068532 records/second\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Master node: building Random Cut Forest...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Gathering samples...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Samples gathered\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Building Random Cut Forest...\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Random Cut Forest built.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"finalize.time\": {\"count\": 1, \"max\": 26.829004287719727, \"sum\": 26.829004287719727, \"min\": 26.829004287719727}, \"fit_model.time\": {\"count\": 1, \"max\": 26.216983795166016, \"sum\": 26.216983795166016, \"min\": 26.216983795166016}}, \"EndTime\": 1538078243.925422, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078243.898046}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Master node: Serializing the RandomCutForest model\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"serialize_model.time\": {\"count\": 1, \"max\": 38.28597068786621, \"sum\": 38.28597068786621, \"min\": 38.28597068786621}}, \"EndTime\": 1538078243.963824, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078243.92549}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139997971146560] Test data is not provided.\u001b[0m\n", "\u001b[31m[09/27/2018 19:57:23 INFO 139996463884032] >>> shutting down FTP server (0 active fds) <<<\u001b[0m\n", "\u001b[31m[I 18-09-27 19:57:23] >>> shutting down FTP server (0 active fds) <<<\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"totaltime\": {\"count\": 1, \"max\": 1709.510087966919, \"sum\": 1709.510087966919, \"min\": 1709.510087966919}, \"setuptime\": {\"count\": 1, \"max\": 188.6131763458252, \"sum\": 188.6131763458252, \"min\": 188.6131763458252}}, \"EndTime\": 1538078243.988847, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078243.963901}\n", "\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Billable seconds: 77\n" ] } ], "source": [ "import sagemaker\n", "from sagemaker import RandomCutForest\n", "from sagemaker import get_execution_role\n", "\n", "execution_role = get_execution_role()\n", "session = sagemaker.Session()\n", "\n", "# specify general training job information\n", "rcf = RandomCutForest(role=execution_role,\n", " train_instance_count=1,\n", " train_instance_type='ml.m4.xlarge',\n", " data_location='s3://{}/{}/'.format(bucket, prefix),\n", " output_path='s3://{}/{}/output'.format(bucket, prefix),\n", " num_samples_per_tree=512,\n", " num_trees=50)\n", "\n", "# automatically upload the training data to S3 and run the training job\n", "rcf.fit(rcf.record_set(dataset.Duration.as_matrix().reshape(-1,1)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inference" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:sagemaker:Creating model with name: randomcutforest-2018-09-27-19-57-47-577\n", "INFO:sagemaker:Creating endpoint with name randomcutforest-2018-09-27-19-54-35-890\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "---------------------------------------------------------------------------------------!" ] } ], "source": [ "rcf_inference = rcf.deploy(\n", " initial_instance_count=1,\n", " instance_type='ml.m4.xlarge',\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "rcf_inference.content_type = 'text/csv'\n", "rcf_inference.serializer = csv_serializer\n", "rcf_inference.accept = 'application/json'\n", "rcf_inference.deserializer = json_deserializer" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 78]\n", " [476]\n", " [190]\n", " [395]\n", " [440]\n", " [458]]\n" ] } ], "source": [ "dataset_numpy = dataset.Duration.as_matrix().reshape(-1,1)\n", "print(dataset_numpy[:6])\n", "results = rcf_inference.predict(dataset_numpy[:6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating anomaly Scores" ] }, { "cell_type": "code", "execution_count": 11, "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", "
Start_TimeDurationscore
007/15/2018780.831256
107/15/20184760.983720
207/15/20181900.839513
307/15/20183950.826109
407/15/20184400.866195
\n", "
" ], "text/plain": [ " Start_Time Duration score\n", "0 07/15/2018 78 0.831256\n", "1 07/15/2018 476 0.983720\n", "2 07/15/2018 190 0.839513\n", "3 07/15/2018 395 0.826109\n", "4 07/15/2018 440 0.866195" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = rcf_inference.predict(dataset_numpy)\n", "scores = [datum['score'] for datum in results['scores']]\n", "\n", "dataset['score'] = pd.Series(scores, index=dataset.index)\n", "dataset.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax1 = plt.subplots()\n", "ax2 = ax1.twinx()\n", "\n", "#\n", "# *Try this out* - change `start` and `end` to zoom in on the \n", "# anomaly found earlier in this notebook\n", "#\n", "start, end = 0, len(dataset)\n", "\n", "dataset_subset = dataset[start:end]\n", "\n", "ax1.plot(dataset_subset['Duration'], color='C0', alpha=0.8)\n", "ax2.plot(dataset_subset['score'], color='C1')\n", "\n", "ax1.grid(which='major', axis='both')\n", "\n", "ax1.set_ylabel('Call Duration', color='C0')\n", "ax2.set_ylabel('Anomaly Score', color='C1')\n", "\n", "ax1.tick_params('y', colors='C0')\n", "ax2.tick_params('y', colors='C1')\n", "\n", "ax1.set_ylim(0, 1000)\n", "ax2.set_ylim(min(scores), 1.4*max(scores))\n", "fig.set_figwidth(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- _Below we print and plot any data points with scores greater than 3 standard deviations from the mean score._\n" ] }, { "cell_type": "code", "execution_count": 13, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Start_TimeDurationscore
1407/15/20184961.183614
2507/15/201841.182566
7707/15/201831.188866
9107/15/201811.442088
12007/15/20184951.160644
12607/15/20185001.571325
14107/15/201821.267461
14607/15/20184991.412903
27307/15/20184991.412903
33307/15/20184961.183614
36307/15/20185001.571325
36807/15/20184971.213085
40207/15/20184971.213085
40607/15/20184951.160644
42407/15/20184981.291372
65307/15/201841.182566
68907/15/20184991.412903
75707/15/201811.442088
84107/15/20184981.291372
85007/15/20184951.160644
90207/15/201841.182566
92807/15/201851.177299
94207/15/201821.267461
94307/15/20185001.571325
95507/15/201861.166922
97007/15/20184971.213085
102907/15/201831.188866
112607/15/201851.177299
117307/15/20184951.160644
137607/14/20184981.291372
............
27291708/10/20185001.571325
27293308/10/20184971.213085
27293608/10/20184971.213085
27297208/10/20184981.291372
27298908/10/201821.267461
27304408/10/201851.177299
27312508/10/20185001.571325
27322308/10/20184991.412903
27329808/10/20184981.291372
27329908/10/20184961.183614
27332708/10/201841.182566
27332908/10/20184971.213085
27345408/10/201821.267461
27347008/10/20185001.571325
27354008/10/201841.182566
27355408/10/201831.188866
27355708/10/20184991.412903
27356408/10/201831.188866
27363008/10/201851.177299
27363708/10/201831.188866
27364908/10/201831.188866
27366008/10/20184961.183614
27367308/10/20184951.160644
27371108/10/20184981.291372
27372008/10/201851.177299
27375608/10/201861.166922
27381108/10/201821.267461
27386208/10/201811.442088
27386408/10/201841.182566
27388508/10/20185001.571325
\n", "

6685 rows Ɨ 3 columns

\n", "
" ], "text/plain": [ " Start_Time Duration score\n", "14 07/15/2018 496 1.183614\n", "25 07/15/2018 4 1.182566\n", "77 07/15/2018 3 1.188866\n", "91 07/15/2018 1 1.442088\n", "120 07/15/2018 495 1.160644\n", "126 07/15/2018 500 1.571325\n", "141 07/15/2018 2 1.267461\n", "146 07/15/2018 499 1.412903\n", "273 07/15/2018 499 1.412903\n", "333 07/15/2018 496 1.183614\n", "363 07/15/2018 500 1.571325\n", "368 07/15/2018 497 1.213085\n", "402 07/15/2018 497 1.213085\n", "406 07/15/2018 495 1.160644\n", "424 07/15/2018 498 1.291372\n", "653 07/15/2018 4 1.182566\n", "689 07/15/2018 499 1.412903\n", "757 07/15/2018 1 1.442088\n", "841 07/15/2018 498 1.291372\n", "850 07/15/2018 495 1.160644\n", "902 07/15/2018 4 1.182566\n", "928 07/15/2018 5 1.177299\n", "942 07/15/2018 2 1.267461\n", "943 07/15/2018 500 1.571325\n", "955 07/15/2018 6 1.166922\n", "970 07/15/2018 497 1.213085\n", "1029 07/15/2018 3 1.188866\n", "1126 07/15/2018 5 1.177299\n", "1173 07/15/2018 495 1.160644\n", "1376 07/14/2018 498 1.291372\n", "... ... ... ...\n", "272917 08/10/2018 500 1.571325\n", "272933 08/10/2018 497 1.213085\n", "272936 08/10/2018 497 1.213085\n", "272972 08/10/2018 498 1.291372\n", "272989 08/10/2018 2 1.267461\n", "273044 08/10/2018 5 1.177299\n", "273125 08/10/2018 500 1.571325\n", "273223 08/10/2018 499 1.412903\n", "273298 08/10/2018 498 1.291372\n", "273299 08/10/2018 496 1.183614\n", "273327 08/10/2018 4 1.182566\n", "273329 08/10/2018 497 1.213085\n", "273454 08/10/2018 2 1.267461\n", "273470 08/10/2018 500 1.571325\n", "273540 08/10/2018 4 1.182566\n", "273554 08/10/2018 3 1.188866\n", "273557 08/10/2018 499 1.412903\n", "273564 08/10/2018 3 1.188866\n", "273630 08/10/2018 5 1.177299\n", "273637 08/10/2018 3 1.188866\n", "273649 08/10/2018 3 1.188866\n", "273660 08/10/2018 496 1.183614\n", "273673 08/10/2018 495 1.160644\n", "273711 08/10/2018 498 1.291372\n", "273720 08/10/2018 5 1.177299\n", "273756 08/10/2018 6 1.166922\n", "273811 08/10/2018 2 1.267461\n", "273862 08/10/2018 1 1.442088\n", "273864 08/10/2018 4 1.182566\n", "273885 08/10/2018 500 1.571325\n", "\n", "[6685 rows x 3 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "score_mean = dataset['score'].mean()\n", "score_std = dataset['score'].std()\n", "score_cutoff = score_mean + 3*score_std\n", "\n", "anomalies = dataset_subset[dataset_subset['score'] > score_cutoff]\n", "anomalies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- _Note that algorithm managed to capture these events along with quite a few others. Below we add these anomalies to the score plot._" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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uRM3ctW9Q6cA0TF/N87wIuyE7+Yww48JXaoqIiIiIiIyTXe+ku4nlpit1/vtJOh1HGsJwdskemZpmZNSj6OIiIiIiMjc8hhw2YRh7wKezsX9jaAeRxERERERmSeMzclVmm9cLFoMnDhmyHJi0VXAXmKJNmLRG4FqYolPjP7+beAviUVvIXglx/nAVcCVxzLZY6nHUUREREREZHatAZ4b/QO4ZfTzP4x+rwTqsmPHEtuA9wAXAc8D/xv4q1y9wxHU4ygiIiIiIjK7YokNHHi4zaF+/9Qhhj0MnD1bSZou9TiKiIiIiIjIpBQ4ioiIiIiIyKQUOIqIiIiIiMikFDiKiIiIiMi8YMw8farqm4ACRxEREREREZmUAkcRERERERGZlAJHERERERERmZQCRxEREREREZmUAkcRERERERGZlAJHERERERERmZQCRxERERERmR+sXseRKwocRURERERkXlDYmDsKHEVEREREZF4YSXm5TsJxS4GjiIiIiIjMCwUjPblOwnFLgaOIiIiIiMwLRUMduU7CcUuBo4iIiIiIiExKgaOIiIiIiMwTCl9yRVteREREREREJqXAUURERERERCalwFFEREREREQmpcBRRERERETmBYPNdRKOWwocRURERERkXtgfPTXXSThuKXAUEREREZF5wRo310k4bilwFBERERERkUkpcBQRERERkXlC9zjmigJHERERERERmZQCRxEREREREZmUAkcRERERERGZlAJHERERERGZF0yuE3AcU+AoIiIiIiLzgyLHnFHgKCIiIiIiIpMK5ToBIiIiIiIiU2Hmc5djLHo1cANQCfweuJZYonWS8a8F/hyoA7qBO4EvEEsMz35iD6YeRxERERERkdkUi34EuBX4J+AsoBX4FbFo3WHG/2OgGfgKcCpwFfAR4MZjkdxDUY+jiIiIiIjMC3b+9jheB3yPWOLfRr9fSyz6boIexS8cYvzzgUeIJe4Y/R4nFv0J8LbZT+qhqcdRRERERETmBXcORS9XnBoqJhYtHfOXf8gRY9EwsBq4f8Iv9wNrDzP73wGriUXfNjqPE4D3AC0zkfajMYc2vYiIiIiIyOHVl/+/9u4+yKq6juP4+7s8yZMXRREtackcRaFQTNQMSAc1NkukSRtnsodJjdEZwybXHPU6am4zZiaGpjk6kQb2ZOKGD2VgBGKAJiiOZSwi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\n", "text/plain": [ "
" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ax2.plot(anomalies.index, anomalies.score, 'ko')\n", "fig" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We make use of a windowing technique called \"shingling\". This is especially useful when working with periodic data with known period. Treat a period of P datapoints as a single datapoint of feature length P and then run the RCF algorithm on these feature vectors. That is, if our original data consists of points x1,x2,…,xNāˆˆā„\n", "\n", "then we perform the transformation,\n", "\n", "```\n", "data = [[x_1], shingled_data = [[x_1, x_2, ..., x_{P}],\n", " [x_2], ---> [x_2, x_3, ..., x_{P+1}],\n", " ... ...\n", " [x_N]] [x_{N-P}, ..., x_{N}]]\n", "\n", "```" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 78. 476. 190. ... 294. 382. 119.]\n", " [476. 190. 395. ... 382. 119. 74.]\n", " [190. 395. 440. ... 119. 74. 175.]\n", " ...\n", " [129. 100. 275. ... 363. 83. 267.]\n", " [100. 275. 438. ... 83. 267. 437.]\n", " [275. 438. 386. ... 267. 437. 428.]]\n" ] } ], "source": [ "import numpy as np\n", "\n", "def shingle(data, shingle_size):\n", " num_data = len(data)\n", " shingled_data = np.zeros((num_data-shingle_size, shingle_size))\n", " \n", " for n in range(num_data - shingle_size):\n", " shingled_data[n] = data[n:(n+shingle_size)]\n", " return shingled_data\n", "\n", "shingle_size = 48\n", "prefix_shingled = 'sagemaker/randomcutforest_shingled'\n", "dataset_shingled = shingle(dataset.Duration, shingle_size)\n", "print(dataset_shingled)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:sagemaker:Creating training-job with name: randomcutforest-2018-09-27-20-06-01-801\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "...................\n", "\u001b[31mDocker entrypoint called with argument(s): train\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Reading default configuration from /opt/amazon/lib/python2.7/site-packages/algorithm/resources/default-conf.json: {u'_ftp_port': 8999, u'num_samples_per_tree': 256, u'_tuning_objective_metric': u'', u'_num_gpus': u'auto', u'_log_level': u'info', u'_kvstore': u'dist_async', u'force_dense': u'true', u'epochs': 1, u'num_trees': 100, u'eval_metrics': [u'accuracy', u'precision_recall_fscore'], u'_num_kv_servers': u'auto', u'mini_batch_size': 1000}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Reading provided configuration from /opt/ml/input/config/hyperparameters.json: {u'mini_batch_size': u'1000', u'feature_dim': u'48', u'num_samples_per_tree': u'512', u'num_trees': u'50'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Final configuration: {u'_ftp_port': 8999, u'num_samples_per_tree': u'512', u'_tuning_objective_metric': u'', u'_num_gpus': u'auto', u'_log_level': u'info', u'_kvstore': u'dist_async', u'force_dense': u'true', u'epochs': 1, u'feature_dim': u'48', u'num_trees': u'50', u'eval_metrics': [u'accuracy', u'precision_recall_fscore'], u'_num_kv_servers': u'auto', u'mini_batch_size': u'1000'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 WARNING 140505886754624] Loggers have already been setup.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Launching parameter server for role scheduler\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/7d724643-9af3-44c0-bb37-383b84f40d6d', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-20-06-01-801', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/cf3d4a2b-8f33-4890-b34d-007d4c43910f', 'PWD': '/'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] envs={'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/7d724643-9af3-44c0-bb37-383b84f40d6d', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_NUM_WORKER': '1', 'DMLC_PS_ROOT_PORT': '9000', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-20-06-01-801', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/cf3d4a2b-8f33-4890-b34d-007d4c43910f', 'DMLC_ROLE': 'scheduler', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Launching parameter server for role server\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/7d724643-9af3-44c0-bb37-383b84f40d6d', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-20-06-01-801', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/cf3d4a2b-8f33-4890-b34d-007d4c43910f', 'PWD': '/'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] envs={'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/7d724643-9af3-44c0-bb37-383b84f40d6d', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_NUM_WORKER': '1', 'DMLC_PS_ROOT_PORT': '9000', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'SAGEMAKER_HTTP_PORT': '8080', 'HOME': '/root', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-20-06-01-801', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/cf3d4a2b-8f33-4890-b34d-007d4c43910f', 'DMLC_ROLE': 'server', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Environment: {'ECS_CONTAINER_METADATA_URI': 'http://169.254.170.2/v3/7d724643-9af3-44c0-bb37-383b84f40d6d', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION': '2', 'DMLC_PS_ROOT_PORT': '9000', 'DMLC_NUM_WORKER': '1', 'SAGEMAKER_HTTP_PORT': '8080', 'PATH': '/opt/amazon/bin:/usr/local/nvidia/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/amazon/bin:/opt/amazon/bin', 'PYTHONUNBUFFERED': 'TRUE', 'CANONICAL_ENVROOT': '/opt/amazon', 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib64:/opt/amazon/lib', 'MXNET_KVSTORE_BIGARRAY_BOUND': '400000000', 'LANG': 'en_US.utf8', 'DMLC_INTERFACE': 'ethwe', 'SHLVL': '1', 'DMLC_PS_ROOT_URI': '10.32.0.4', 'AWS_REGION': 'us-west-2', 'NVIDIA_VISIBLE_DEVICES': 'all', 'TRAINING_JOB_NAME': 'randomcutforest-2018-09-27-20-06-01-801', 'HOME': '/root', 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION': 'cpp', 'ENVROOT': '/opt/amazon', 'SAGEMAKER_DATA_PATH': '/opt/ml', 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility', 'NVIDIA_REQUIRE_CUDA': 'cuda>=9.0', 'OMP_NUM_THREADS': '2', 'HOSTNAME': 'aws', 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI': '/v2/credentials/cf3d4a2b-8f33-4890-b34d-007d4c43910f', 'DMLC_ROLE': 'worker', 'PWD': '/', 'DMLC_NUM_SERVER': '1'}\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Using default worker.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Loaded iterator creator application/x-recordio-protobuf for content type ('application/x-recordio-protobuf', '1.0')\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Verifying hyperparamemters...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Hyperparameters are correct.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Validating that feature_dim agrees with dimensions in training data...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] feature_dim is correct.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Validating memory limits...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Available memory in bytes: 15277723648\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Estimated sample size in bytes: 19660800\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Estimated memory needed to build the forest in bytes: 49152000\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Memory limits validated.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Starting cluster sharing facilities...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140505886754624] Create Store: dist_async\u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:01] >>> starting FTP server on 0.0.0.0:8999, pid=1 <<<\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140504368912128] >>> starting FTP server on 0.0.0.0:8999, pid=1 <<<\u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:01] poller: \u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140504368912128] poller: \u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:01] masquerade (NAT) address: None\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140504368912128] masquerade (NAT) address: None\u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:01] passive ports: None\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140504368912128] passive ports: None\u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:01] use sendfile(2): False\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:01 INFO 140504368912128] use sendfile(2): False\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] Cluster sharing facilities started.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] Verifying all workers are accessible...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] All workers accessible.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] Initializing Sampler...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] Sampler correctly initialized.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"initialize.time\": {\"count\": 1, \"max\": 667.0160293579102, \"sum\": 667.0160293579102, \"min\": 667.0160293579102}}, \"EndTime\": 1538078942.265878, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078941.57098}\n", "\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"Max Batches Seen Between Resets\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Number of Batches Since Last Reset\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Number of Records Since Last Reset\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Total Batches Seen\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Total Records Seen\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Max Records Seen Between Resets\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}, \"Reset Count\": {\"count\": 1, \"max\": 0, \"sum\": 0.0, \"min\": 0}}, \"EndTime\": 1538078942.266145, \"Dimensions\": {\"Host\": \"algo-1\", \"Meta\": \"init_train_data_iter\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078942.266087}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:02 INFO 140505886754624] Sampling training data...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Sampling training data completed.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"epochs\": {\"count\": 1, \"max\": 1, \"sum\": 1.0, \"min\": 1}, \"update.time\": {\"count\": 1, \"max\": 791.8257713317871, \"sum\": 791.8257713317871, \"min\": 791.8257713317871}}, \"EndTime\": 1538078943.061331, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078942.266011}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Early stop condition met. Stopping training.\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] #progress_metric: host=algo-1, completed 100 % epochs\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"Max Batches Seen Between Resets\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Number of Batches Since Last Reset\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Number of Records Since Last Reset\": {\"count\": 1, \"max\": 273880, \"sum\": 273880.0, \"min\": 273880}, \"Total Batches Seen\": {\"count\": 1, \"max\": 274, \"sum\": 274.0, \"min\": 274}, \"Total Records Seen\": {\"count\": 1, \"max\": 273880, \"sum\": 273880.0, \"min\": 273880}, \"Max Records Seen Between Resets\": {\"count\": 1, \"max\": 273880, \"sum\": 273880.0, \"min\": 273880}, \"Reset Count\": {\"count\": 1, \"max\": 1, \"sum\": 1.0, \"min\": 1}}, \"EndTime\": 1538078943.061757, \"Dimensions\": {\"Host\": \"algo-1\", \"Meta\": \"training_data_iter\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\", \"epoch\": 0}, \"StartTime\": 1538078942.269456}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] #throughput_metric: host=algo-1, train throughput=345591.248641 records/second\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Master node: building Random Cut Forest...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Gathering samples...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Samples gathered\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Building Random Cut Forest...\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Random Cut Forest built.\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"finalize.time\": {\"count\": 1, \"max\": 135.69402694702148, \"sum\": 135.69402694702148, \"min\": 135.69402694702148}, \"fit_model.time\": {\"count\": 1, \"max\": 132.6889991760254, \"sum\": 132.6889991760254, \"min\": 132.6889991760254}}, \"EndTime\": 1538078943.197785, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078943.061467}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Master node: Serializing the RandomCutForest model\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"serialize_model.time\": {\"count\": 1, \"max\": 467.2350883483887, \"sum\": 467.2350883483887, \"min\": 467.2350883483887}}, \"EndTime\": 1538078943.665191, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078943.197897}\n", "\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140505886754624] Test data is not provided.\u001b[0m\n", "\u001b[31m[I 18-09-27 20:09:03] >>> shutting down FTP server (0 active fds) <<<\u001b[0m\n", "\u001b[31m[09/27/2018 20:09:03 INFO 140504368912128] >>> shutting down FTP server (0 active fds) <<<\u001b[0m\n", "\u001b[31m#metrics {\"Metrics\": {\"totaltime\": {\"count\": 1, \"max\": 2493.116855621338, \"sum\": 2493.116855621338, \"min\": 2493.116855621338}, \"setuptime\": {\"count\": 1, \"max\": 219.0089225769043, \"sum\": 219.0089225769043, \"min\": 219.0089225769043}}, \"EndTime\": 1538078943.789633, \"Dimensions\": {\"Host\": \"algo-1\", \"Operation\": \"training\", \"Algorithm\": \"RandomCutForest\"}, \"StartTime\": 1538078943.665269}\n", "\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Billable seconds: 81\n" ] } ], "source": [ "session = sagemaker.Session()\n", "\n", "# specify general training job information\n", "rcf = RandomCutForest(role=execution_role,\n", " train_instance_count=1,\n", " train_instance_type='ml.m4.xlarge',\n", " data_location='s3://{}/{}/'.format(bucket, prefix_shingled),\n", " output_path='s3://{}/{}/output'.format(bucket, prefix_shingled),\n", " num_samples_per_tree=512,\n", " num_trees=50)\n", "\n", "# automatically upload the training data to S3 and run the training job\n", "rcf.fit(rcf.record_set(dataset_shingled))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:sagemaker:Creating model with name: randomcutforest-2018-09-27-20-09-43-796\n", "INFO:sagemaker:Creating endpoint with name randomcutforest-2018-09-27-20-06-01-801\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "--------------------------------------------------------------!" ] } ], "source": [ "from sagemaker.predictor import csv_serializer, json_deserializer\n", "\n", "rcf_inference = rcf.deploy(\n", " initial_instance_count=1,\n", " instance_type='ml.m4.xlarge',\n", ")\n", "\n", "rcf_inference.content_type = 'text/csv'\n", "rcf_inference.serializer = csv_serializer\n", "rcf_inference.accept = 'appliation/json'\n", "rcf_inference.deserializer = json_deserializer" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 78. 476. 190. 395. 440. 458. 425. 88. 335. 169. 481. 148. 93. 291.\n", " 496. 173. 223. 490. 213. 34. 289. 57. 413. 205. 281. 4. 217. 368.\n", " 373. 202. 174. 365. 142. 172. 182. 390. 318. 147. 185. 200. 477. 73.\n", " 56. 43. 321. 294. 382. 119.]\n", " [476. 190. 395. 440. 458. 425. 88. 335. 169. 481. 148. 93. 291. 496.\n", " 173. 223. 490. 213. 34. 289. 57. 413. 205. 281. 4. 217. 368. 373.\n", " 202. 174. 365. 142. 172. 182. 390. 318. 147. 185. 200. 477. 73. 56.\n", " 43. 321. 294. 382. 119. 74.]\n", " [190. 395. 440. 458. 425. 88. 335. 169. 481. 148. 93. 291. 496. 173.\n", " 223. 490. 213. 34. 289. 57. 413. 205. 281. 4. 217. 368. 373. 202.\n", " 174. 365. 142. 172. 182. 390. 318. 147. 185. 200. 477. 73. 56. 43.\n", " 321. 294. 382. 119. 74. 175.]\n", " [395. 440. 458. 425. 88. 335. 169. 481. 148. 93. 291. 496. 173. 223.\n", " 490. 213. 34. 289. 57. 413. 205. 281. 4. 217. 368. 373. 202. 174.\n", " 365. 142. 172. 182. 390. 318. 147. 185. 200. 477. 73. 56. 43. 321.\n", " 294. 382. 119. 74. 175. 201.]\n", " [440. 458. 425. 88. 335. 169. 481. 148. 93. 291. 496. 173. 223. 490.\n", " 213. 34. 289. 57. 413. 205. 281. 4. 217. 368. 373. 202. 174. 365.\n", " 142. 172. 182. 390. 318. 147. 185. 200. 477. 73. 56. 43. 321. 294.\n", " 382. 119. 74. 175. 201. 235.]\n", " [458. 425. 88. 335. 169. 481. 148. 93. 291. 496. 173. 223. 490. 213.\n", " 34. 289. 57. 413. 205. 281. 4. 217. 368. 373. 202. 174. 365. 142.\n", " 172. 182. 390. 318. 147. 185. 200. 477. 73. 56. 43. 321. 294. 382.\n", " 119. 74. 175. 201. 235. 263.]]\n" ] } ], "source": [ "print(dataset_shingled[:6])\n", "results = rcf_inference.predict(dataset_shingled[:6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- _Using the above inference endpoint we compute the anomaly scores associated with the shingled data._" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.00060719 1.00394679 1.04098886 0.9927566 1.00240843 1.01815688\n", " 1.00722551 1.01700332 1.0085324 0.99662518 1.02051224 0.9910096\n", " 0.99360692 0.99443982 1.00546433 1.00857126 1.00487884 1.0226912\n", " 0.99221903 0.99107069 1.00535072 0.99004557 0.99211364 1.01037339\n", " 0.99785321 1.00718677 1.00546051 0.98998134 1.00889743 1.0002673\n", " 1.01940447 1.00786397 1.01048003 0.99808452 1.01838943 0.99741262\n", " 1.0036216 0.99072673 1.00090928 1.01858554 0.98993526 0.98995319\n", " 0.99818374 0.99318689 0.99701417 0.99843238 1.01194086 1.00061499\n", " 1.00823784 0.9996093 ]\n" ] } ], "source": [ "# Score the shingled datapoints\n", "# 18864 is the maximum allowed\n", "results = rcf_inference.predict(dataset_shingled[:18864])\n", "scores = np.array([datum['score'] for datum in results['scores']])\n", "\n", "# compute the shingled score distribution and cutoff and determine anomalous scores\n", "score_mean = scores.mean()\n", "score_std = scores.std()\n", "score_cutoff = score_mean + 3*score_std\n", "\n", "anomalies = scores[scores > score_cutoff]\n", "anomaly_indices = np.arange(len(scores))[scores > score_cutoff]\n", "\n", "print(anomalies)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- _We, Plot the scores from the shingled data on top of the original dataset and mark the score lying above the anomaly score threshold._" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA44AAAFfCAYAAAABCpI3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl8XFXd+PFP2qR7O5S20NBSp1CWshaLbLIIpcjjgMiigqCi+LggKA+KDqh4VXg68AgCIoJYFfy5ggroyFIqAgJFQWRry9qhdKULvaF7k+b3x52kk22SmU4yaefzfr3mlbnnnnvud3qatN+ce86pamxsRJIkSZKkjvQpdwCSJEmSpN7NxFGSJEmSlJeJoyRJkiQpLxNHSZIkSVJeJo6SJEmSpLxMHCVJkiRJeZk4SpIkSZLyMnGUJEmSJOVl4ihJkiRJysvEUZIkSZKUV3U5bx5Ppo8GLgEmA7XAqZlU4q6c81XAt4HPAsOBJ4EvZlKJF3PqDAduAD6YLboHuDCTSqzKqbM/cCNwCLASuAX4XiaVaOy+TydJkiRJ24dyjzgOBp4FLujg/NeAi7Pn3wMsAWbEk+mhOXV+DUwCTsy+JgG/bDoZT6aHATOARdk2LgS+mm1XkiRJktSJqsbG3jHoFk+mG8kZccyONi4CrsukEldly/oDS4GvZ1KJW+LJ9ERgNnBYJpV4MlvnMOAJYO9MKvFSPJn+AjAN2DmTSmzI1kkSJZBjHXWUJEmSpPzK+qhqJ8YDo4EHmgoyqcSGeDL9MHAE0eOmhwNhU9KYrTMrnkyH2TovZes83JQ0Zt1PlEzGgXmtb5xNUPs3Ha+b/xzL775q4ua14YLSfTxJkiRJ26idgWcae8soXA/ozYnj6OzXpa3KlwLvyqnzVjvXvpVz/Wgg004bTefaJI7ApURzKwGoqh7A5rVhl4KWJEmSVBEmA/8udxA9pTcnjk1aZ/FVrcray/I7q1OV51qIRiOvbToI//GrWmDu448/Tm1tbacB97RNmzbxyCOPcPTRR1NTU1PucNTD7P/KZv9XNvu/ctn3lc3+L6/FixdzxBFHQNsBru1ab04cl2S/jgYW55TvxJZOWkI0TNzaqFZ1Rrc6v1P2a7udnX2stfnR1qqrThoKsOuuuzJ27Nguht9zNm3axOzZs4nH4/7wqED2f2Wz/yub/V+57PvKZv+XV3V1b06huk+5V1XNZx5R0je1qSCeTPcDjgEezxY9AcTiyfQhOXUOBWKt6hydvbbJCUQL72S6K3hJkiRJ2l6Uex/HIcCEnKLx8WR6ErAyk0rMjyfT1wGXxZPpV4BXgMuAtURbcJBJJebEk+n7gFvjyfTnsm38BPhLJpV4KXv8a6L5ir+IJ9P/C+yRbee7rqgqSZIkSZ0r94jjwcAz2RdE8wqfAb6bPb4auA64CXgKGAOckEkl3slp42zgeaLVVx8AngM+3nQyk0qERKOWY7Nt3JS9z7VIkiRJkjpV1hHHTCrxd7YsVNPe+UYgyL46qrMSOKeT+zwPHF1MjJIkSZJU6co94ihJkiRJ6uVMHCVJkiRJeZk4SpIkSZLyMnGUJEmSJOVl4ihJkiRJysvEUZIkSZKUl4mjJEmSJCkvE0dJkiRJUl4mjpIkSZKkvEwcJUmSJEl5mThKkiRJkvKqLncAkiRJkrRdC2JHA5cAk4Fa4FSC8K4uXvte4GHgBYJwUrfF2AlHHCVJkiSpew0GngUuKOiqIBYDbgdmdkNMBXHEUZIkSZK6UxDeC9wbvY8VcuUtwK+BBuBDJY+rACaOkiRJklSgMyZWDyGIDcsp2kAQbijZDYLYp4DdgXOAb5as3SL5qKokSZIkFWj6KQPnAmHO69KSNR7E9gBSwNkEYX3J2t0KJo6SJEmSVKDz7l63NxDLeU0rScNBrC/R46nfJghfLkmbJeCjqpIkSZJUoDvn1K8mCOu6oemhwMHAQQSxG7NlfYAqglg9cAJB+LduuG9eJo6SJEmS1HvUAfu3KjsfOA44A5jX4xFh4ihJkiRJ3SuIDQEm5JSMJ4hNAlYShPMJYtOAMQThJwjCzcALra5/C1hPELYs70EmjpIkSZLUvQ4GHso5vjb79TbgXKAWGNfDMRXExFGSJEmSulMQ/h2oynP+3E6uD4CgdAEVzlVVJUmSJEl5mThKkiRJkvIycZQkSZIk5WXiKEmSJEnKy8RRkiRJkpSXiaMkSZIkKS8TR0mSJElSXiaOkiRJkqS8TBwlSZIkSXmZOEqSJEmS8jJxlCRJkiTlZeIoSZIkScrLxFGSJEmSlJeJoyRJkiQpLxNHSZIkSVJeJo6SJEmSpLxMHCVJkiRJeZk4SpIkSZLyMnGUJEmSJOVl4ihJkiRJysvEUZIkSZKUl4mjJEmSJCkvE0dJkiRJUl4mjpIkSZKkvEwcJUmSJEl5mThKkiRJkvIycZQkSZIk5VVd7gDyiSfT1UAAnA2MBhYDvwCuyKQSm7N1qoBvA58FhgNPAl/MpBIv5rQzHLgB+GC26B7gwkwqsapHPogkSZKkyhXEjgYuASYDtcCpBOFdeeofCVwF7A0MAt4AbiEIf9D9wbavt484fh34PHABMBH4GtEf+IU5db4GXJyt8x5gCTAjnkwPzanza2AScGL2NQn4ZXcHL0mSJEnAYOBZopylK9YANwJHE+VBVwBXEMQ+2z3hda5XjzgChwN3Z1KJdPY4E0+mzwIOhubRxouAKzOpxB+zZZ8ElgIfA26JJ9MTiZLFwzKpxJPZOv8NPBFPpvfKpBIv9egnkiRJklRZgvBe4N7ofawr9Z8BnskpyRDETgOOAn5S+gA719tHHP8BTIkn03sCxJPpA4Ejgb9mz48neoT1gaYLMqnEBuBh4Ihs0eFA2JQ0ZuvMAsKcOpIkSZLUOwWxg4hyl4fLFUJvH3G8CogBc+PJdAPQF/hGJpX4Tfb86OzXpa2uWwq8K6fOW+20/VbO9S3Ek+n+QP+m44ETDhuy7tVZ1NfXs2nTpqI+SHdqiqk3xqbuZ/9XNvu/stn/lcu+r2z2f3nV19cDcMbE6iEEsWE5pzYQhBtKerMgtgAYRZS3BQThT0vafgF6e+L4UeAcosdOXySam3hdPJlelEklbsup19jquqpWZa3Pt1cn16VEC+4AsOPUz7Pw1VnMnDmTkSNHFvgRes6MGTPKHYLKyP6vbPZ/ZbP/K5d9X9ns//JYvnw5ANNPGTi31anvEC3sWUpHAUOAw4AUQexVgvA3nVzTLXp74vh/QCqTSvw2e/x8PJl+F1FidxvRQjiwZcXVJjuxZRRyCbBzO22Pou1IZZNpwLVNBytn3FwLzJ0yZQpjxowp5nN0q02bNjFjxgymTp1KTU1NucNRD7P/K5v9X9ns/8pl31c2+7+8Fi5cCMB5d6/b+46PDMrNQUo72ggQhPOy754niO1MlJiaOLZjELC5VVkDW+ZmziNKDKeSnTwaT6b7AccQrcgK8AQQiyfTh2RSiX9m6xxK9Ajs4+3dNDtPsrnjq646aShAdXV1r/7mrKmp6dXxqXvZ/5XN/q9s9n/lsu8rm/1fHtXVUQp155z61QRhXQ/euoqc6XQ9rbcnjn8GvhFPpucTPap6ENHWGz8DyKQSjfFk+jrgsngy/QrwCnAZsJZoCw4yqcSceDJ9H3BrPJn+XLbdnwB/cUVVSZIkSd0uiA0BJuSUjCeITQJWEoTzCWLTgDEE4Sey9b8IzAeaHoc9Evgq8MOeC7ql3p44Xgh8D7iJ6PHTRcAtwHdz6lwNDMzWGQ48CZyQSSXeyalzNnADW1ZfvYeu76EiSZIkSVvjYOChnOOmaXG3AecCtcC4nPN9iKbPjQfqgdeAJFEuVBa9OnHMJn8XZV8d1WkketY3yFNnJdEiO5IkSZLUs4Lw70SPmnZ0/txWxz+kjKOL7ent+zhKkiRJksrMxFGSJEmSlJeJoyRJkiQpLxNHSZIkSVJeJo6SJEmSpLxMHCVJkiRJeZk4SpIkSZLyMnGUJEmSJOVl4ihJkiRJysvEUZIkSZKUl4mjJEmSJCkvE0dJkiRJUl4mjpIkSZKkvEwcJUmSJEl5mThKkiRJkvIycZQkSZIk5WXiKEmSJEnKy8RRkiRJkpSXiaMkSZIkKS8TR0mSJElSXiaOkiRJkqS8TBwlSZIkSXmZOEqSJEmS8jJxlCRJkiTlZeIoSZIkScrLxFGSJEmSlJeJoyRJkiQpLxNHSZIkSVJe1eUOQJIkSZK2a0HsaOASYDJQC5xKEN6Vp/5pwBeASUB/4EUgIAjv7/5g2+eIoyRJkiR1r8HAs8AFXax/NDAD+ABRsvkQ8GeC2EHdE17nHHGUJEmSpO4UhPcC90bvY12pf1GrkssIYqcAJwPPlDi6LjFxlCRJkqQCnTGxeghBbFhO0QaCcEO33CyI9QGGAiu7pf0u8FFVSZIkSSrQ9FMGzgXCnNel3Xi7rxA97vr7brxHXiaOkiRJklSg8+5etzcQy3lN65YbBbGzgAD4KEH4Vrfcowt8VFWSJEmSCnTnnPrVBGFdt94kiH0UmA58mCB8sMBrjwI+B+wOnEEQLiSIfRyYRxD+o9BQHHGUJEmSpN4mGmn8BfAxgjBd4LWnA/cD64CDiLb0gGie5GXFhOOIoyRJkiR1pyA2BJiQUzKeIDYJWEkQzieITQPGEISfyNY/C7gd+DIwiyA2OnvdOoIw7MIdvwl8niC8nSB2Zk7548DlxXwERxwlSZIkqXsdTLSNRtNWGtdm3383e1wLjMup/zmiQb4fAYtzXtd38X57AY+0U14H7FBI4E0ccZQkSZKk7hSEfweq8pw/t9Xx+7byjouJRjgzrcqPBF4vpkFHHCVJkiRp+3ILcD1B7FCgEdiFIHY28H3gpmIadMRRkiRJkrYnQXg1QSwGPAQMIHpsdQPwfYLwxmKaLDhxjCfTg4EkMAXYiVajlplUYrdiApEkSZIklUgQfoMgdiWwD1HONpsgXF1sc8WMOP4UOAb4JdGzs43F3lySJEmSVEJBrBpYD0wiCF8AnipFs8Ukjv8FJDKpxGOlCECSJEmSVCJBWE8QewPoW8pmi1kc521gZSmDkCRJkiSVzBXANILYjqVqsJgRx28B340n05/MpBJrSxWIJEmSJKkkvkS0Hcei7OjjmhZng/DdhTZYTOL4FWB3YGk8mc4Am3JPZlKJgoOQJEmSJJXMXaVusJjEseRBSJIkSZJKJAi/U+omC04cM6lEyYOQJEmSJJVYEJsMTCTaCWM2QfhMsU0VM+IIQDyZbhFEJpUoOghJkiRJUokEsZ2A3wLvA1YBVUCMIPYQcCZBuKzQJgtOHOPJdLtBxJPph4AzM6lEwUF0cr8xwFVE24AMBF4GzsukEk9nz1cB3wY+CwwHngS+mEklXsxpYzhwA/DBbNE9wIWZVGJVKWOVJEmSpF7gh8AwYF+CcA4AQWwf4DaivOisQhssZjuO5iAyqcSOmVRiOLBftuyGItrrUDbhe4xoAZ7/AvYhWpwnN+H7GnAxcAHwHmAJMCOeTA/NqfNrYBJwYvY1CfhlKWOVJEmSpF7iROALzUkjQBDOBr5IlFcVrJhHVU8Ejs+kEs1BZFKJ2fFk+ovAA8UEkcfXgTczqcSncsoyTW+yo40XAVdmUok/Zss+CSwFPgbcEk+mJ2ZjPiyTSjyZrfPfwBPxZHqvTCrxUoljliRJkqRy6kOr3S+yNlHc4GFRiWPJg8jjg8D98WT6DuAYYCFwUyaVuDV7fjwwmpyENZNKbIgn0w8DRwC3AIcDYVPSmK0zK55Mh9k6bRLHeDLdH+jfdDxwwmFD1r06i/r6ejZtau+jl1dTTL0xNnU/+7+y2f+Vzf6vXPZ9ZbP/y6u+vr7cIXTF34DrCWJnEYSLAAhiY4AfADOLabCYxPFvwPXxZPqsTCqxCJrnIRYdRB67AV8ArgX+FzgEuCGeTG/IpBK3EyWNEI0w5loKvCv7fjTwVjttv5VzfWuXEs2bBGDHqZ9n4auzmDlzJiNHjizqg/SEGTNmlDsElZH9X9ns/8pm/1cu+76y2f/lsXz58nKH0BUXAHcDGYLYm0QLmo4DngfOKabBYhLH5iDiyXRJgsijD/BUJpW4LHv8TDyZ3pcombw9p15jq+uqWpW1Pt9enVzTiJJVAFbOuLkWmDtlyhTGjBlTQPg9Y9OmTcyYMYOpU6dSU1NT7nDUw+z/ymb/Vzb7v3LZ95XN/i+vhQsXljuEzgXhm8C7CWJTgb2Jcp/ZBOGDxTZZzD6ObwLvjifTLYLIpBJFB5HHYmB2q7I5wOnZ90uyX0dn6zbZiS2jkEuAndtpexRtRyqB6HFXYEPTcdVVJw0FqK6u7tXfnDU1Nb06PnUv+7+y2f+Vzf6vXPZ9ZbP/y6O6uugdDXteEM4ASjI0XfSnzqQSJQsij8eAvVqV7Qm8kX0/jygxnAo8AxBPpvsRzYf8erbOE0TbhRySSSX+ma1zKBADHu/W6CVJkiSppwWxG4BXCcIbWpVfAEwgCC8qtMkuJY7xZPpLwE8yqcT67PsOZVKJUm7J8QPg8XgyfRnwe6I5jp/NvsikEo3xZPo64LJ4Mv0K8ApwGbCWaAsOMqnEnHgyfR9wazyZ/ly23Z8Af3FFVUmSJEnbodPZsod9rseBJNHOFAXp6ojj/wC/AtZn33ekkRLu5ZhJJf4VT6ZPJZpzeDnRCONFmVTiVznVrgYGAjcBw4EngRMyqcQ7OXXOzsbVtPrqPURzNSVJkiRpezMCCNsprwOKWu2zS4ljJpUY3977npBJJf4C/CXP+UYgyL46qrOS0i/cI0mSJEm90atEe9nf2Kr8v4DXi2mw4DmO8WT6cuD7mVRibavygcAlmVTiu8UEIkmSJEkqiWuBGwlio4i2UwSYAnyFIh5ThWi7i0J9GxjSTvkgcvY+lCRJkiSVQRD+jChJPA94KPs6B/gCQXhrMU0Ws6pqR/sfHgisLCYISZIkSVIJBeGPgR9nRx3XEYSrt6a5LieO8WT6baKEsRF4OZ5M5yaPfYlGIW/emmAkSZIkSSUUhMsIYscQxAYBswjCt4tpppARx4uIRht/RvRIau4qPRuBTCaVeKKYICRJkiRJWymIXQIMIQi/nT2uAu4FTsjWeIsgNoUgfLHQprucOGZSidsA4sn0PODxTCqxqdCbSZIkSVLFCWJHA5cAk4Fa4FSC8K489WuBa7L19wBuIAi7sqjNWcBVOcdnAEcDRwFzgNuJBgE/UuhHKHiOYyaVeLjpfXYl1ZpW5+sKbVOSJEmStmODgWeBnwN/6EL9/sAy4Ergfwq4z3jguZzjDwB/IAgfAyCIXQHcUUB7zYrZjmMQcDVRljqinSp9iwlEkiRJkrZLQXgv0SOjEMS6Uj8DfDlb/9MF3KkG2JBzfDhwfc7xImBkAe01K2Y7jv8DjgPOzwb1GaLhzkXAJ4oJQpIkSZK01V4lejQVgtg4YE/g4ZzzY4EVxTRcTOJ4MnB+JpW4E6gHHs2kElcAlwFnFxOEJEmSJG1LzphYPYQgNizn1b/cMQE/Bm4kiE0nGuF8giCcnXP+OOCZYhouJnHcEZiXfV+XPQb4B03ZrSRJkiRtx6afMnAu0U4TTa9LyxsREIS3ED3iuiPwCHB6qxq7EO2SUbCC5zgCrwNx4A1gNtFcx38SjUSuKiYISZIkSdqWnHf3ur3v+MigxTlFGzqs3JOCcDowvYNz5xfbbDGJ48+BA4melZ0GpOPJ9IXZti4uNhBJkiRJ2lbcOad+NUFYMTtKFLMdxw9y3j8UT6b3Bg4GXsukEs+WMjhJkiRJ2uYFsSHAhJyS8QSxScBKgnA+QWwaMIYg/ETONZOy74YAo7LHG1vNWewxBSWO8WS6BngA+FwmlXgZIJNKzAfmd0NskiRJkrQ9OBh4KOf42uzX24BzgVpgXKtrchexmQx8jGi6YLxbIuxEQYljJpXYFE+m9wMauykeSZIkSdq+BOHfgao8589tp6zj+mVQzKqqtwPnlToQSZIkSVIJBLFzCWKDStlkMYvj9AM+E0+mpwJPAWtyT2ZSCRfIkSRJkqTymQbcQBC7A5hOED6+tQ0WkzjuB/w7+37PVud8hFWSJEmSymsskCCaP/kQQWwe0e4YtxGES4ppsJhVVY8t5kaSJEmSpB4QhA3APcA9BLGdgHOIksjvEcTuI9rn8c8E4eauNlnMHEdJkiRJ0rYgCN8CHgOeADYD+wO/AF4jiL2vq80UPOIYT6YfIs8jqZlU4rhC25QkSZIklVAQ2xn4OPApYDfgLuAkgvBBgthA4Aqi7UDe1ZXmipnj+J9WxzXAJKK5j7cV0Z620rqNDXz/ub7c+sYsqqq2rNo7OjaAfn37MKhfXzY1bOa1ZVvWMTpmz1E8/PIyAHYfNZj5K9eyx05DGdivL0+/8XZzvbMOGceiVetYvaGe98R3ZMSQflyZntN8vqZvFZsaWv4e4cT9RnPsXjuxubGR8SMHc+ZPZjWfu/FjB3H1fS8xf+VaPnboONZubOCuZxYCMKR/NR8+eCyTdt2BL/82+ms2sF9f1m1s4IdnHcSKNRsI7pnNIeN3ZEndeuavWAvAhcdN4Id/e7VFDPvuMoz1mxp4bdkadtlhAItWrQfgE4e/izueWsC6TQ1t/hyDD+5LcM+LABy++wgWvr2OhavW0bC5kTMmj2Vp3XoefWV5m+vGjRjEp98bJ3XvXHYeNoAxOwzk+YUh76yvb1Pvv/YbzeB+1RwxYQSPvLyc2YvqeHDO0uY6/ar7MGnXHfjnvJUATH7XcOrWbWKPnYeycs0GZr2+ss39GxsbCcO2/Z/7eQD6VEHigFoOGT+Cq++by/nvm8Cjry7j+Ik7s/fooTz88jIeeXkZC95ex7ABNSwK13H4biN4/LUVLfoi1+eO2Y337bUT37//JeYuqePM94zj2QWrGLPDQE7YZzT3PLuQ+19cSmdGDunH8tUb2W/MMF5YWAfAqKH9WfbOhhb1PnlEnNsez7S5/ojdR7Bw1Tqm7rMzp0waw1X3zeUf7fTVKZN24fR3j2X44H6s39TADTNf4anM2+w5egjL39nIiCH9+NZJ+/Dhm59oc+3Amr4M6NeXD+w3ml89GW1d++GDo78Xj7zc9l5jhw9k6j478/PH2sYLcNQeI6lbv4njJ+7MNQ+8DMBH37Mrv/vXmwCM23EQ81euba5/yPgdOXG/0Tz9xtukn1vMsXuN4tz3jufxV95q9/sf4NSDxvCn7PcXRN+b++4yjP+8uYqZc94C4KBxO7BizUa+MnVPXl+2hutnvtKijY8cPJbfP7WgTfzH7jWKN1au5fXsz5WmnwX9q/uwob7tUy9D+lezekPL74kvHrs7tz3+Bp884l3UravnqTdWcsqkMdSt28SMOUs59aAxvLTkHe7+zyIg+nn0u3/NZ3M7v7rce/RQjtlrFDV9+/Dk6yuZNG4Hdh81mPtfXMpDc6PPOn7kYOYtX0OfKlq0Me20/fl/s97gnfX1fPeUfXlhUR3huk3c+sjrbW+UNbCmLyfuN7r5z/d7H9qP2MAavvSbaMutd4/bgX/PX9Vc/6Pv2ZUXFoa8uKiu3fbOOmQcDZs3c/Seo7j3hSXMXlTH4P7VLHtnPRN2Gsr5x+7OIy8v45Wlq5n1+grWZr8Xj5owgj8/15c/LH+at9fWc8DYGM8tCDuMG6J/G2448yBmzVvBtdm/e0Dzz8o9dx5KfMQgHpjd9nt3ysSdmDnnLcbtOIhPHP4uHpi9tPnnVVcdMWEE7x43nGP2HMW/33ibnz02j6V10ff6oeN35MlW7fXtU8Wh43fkuL134uWl7/DkvJXsPXoo++4So191H2pjA1i3qYHGRhjUr2/zvx8AE3YawpoN9SwO1zeXnbjfaP6VWcmK1Rtb3CdxQC3p5xZz4XETmDnnLeavXNv8d/aq0w/g6394rsuf8aLj9yD93GJeeWs1nzlqPDsNHcBry1bzu3+9SXXfKqadtj+X3NGyvcQBtTw4eykb6jdz4n6jue+FLVOQcn82/vH8I9hQv5n+feDZFVXc+uMt3/ufOWo8f352EUvrNvC1E/fiqD1GsThcx9zF7zBqaH8u/ePzAHz9xL3JrFjD7/71JhNrhzJn8TsA3Pzxydz1zMLme+81eigvLXmHwf378s3EPlyZnsNFx+9BbFBNm/i74kMHjWHO4jpeWvJOc9mwgdXUrYv+nL/3of2YWDuUH/3tVV5a+g77j4mxfPVGPnTQGL511wtt6uf65XmHMOv1FfzoodeaywbW9G3+9/7/nXcoi+vWcfsTb7Bq7UbeXLmuxfXjRw5m52H9m/+d/dwxu3HLw1t+BsRHDiazPPp5d9PZ7+aeZxe16COAK0/dj1mvr2C3kUM4OD6cj0//Z/Pnemb+29z/4hLWbGj7/w+AoQOqW/y/4eozDuBrdz5Hnyq49ZMHs37jZv6ZWdn8b2BH//Y3mXba/jwweym7xAZwyqQxzJy7lH/NW9n8c2nEkH5tvgfy6Vfdh42tfrYfMn5HPn7Yu7jxoVd5ack77DCohjMmj+X2J97gzPfsyuvL17T4t/iC4ybw0pJ3mDF7KdefOYmavn349/y3+emj89rc76vv34vv3/9Sm/JTJu3CZ47arctxV7Qg9mfg/cDLwK3A7QThlh+wQbiOIHYN8D9dbbKqsbE069nEk+kAGJJJJb5akgZ7kaqqqjHAgjfffJOxY8eWO5w2PnLz4yxetpJYLNbuDw9t36J/PEL7v0LZ/5XN/q9c9n1lq+T+/+FZBxEfObisMSxYsIBdd90VYGxjY+PCzuqXRRCbDvyUIGz72/AtdaqAcQThG11pspgRx478P+CfwHaXOPZ2aze2/9srSZIkaXuyvt7/93ZJEJ7XhTqNQJeSRiht4ng4sL7TWpIkSZKk0gpiX+p63fCGQpsvZnGcP7YqqgJqgYOB7xXaniRJkiR1xWtvrWHv0cPKHUZv1dX5io1A9yeOQOtZ95uBl4DLM6nEA0W0pxJp3NzAitefZ0PdCvoPG8GI3Q+gqk/fcoclSZIklcRry1aXO4TeKwjHd2fzBSeOmVTiU90RiLbO8tmP89R9P2X9qmXNZQN2GMW+p3+Z2gOPKWNkkiRJUmms2dB2VV31jGIeVa0CJgNxomHO14H/ZFJvRgyCAAAgAElEQVSJ0izPqoItfvZh5v52Wpvy9auW8fT0bzL5vCtMHiVJkqRKEsTGAh8ExgH9Wp4LLy60uYISx3gyfSwwnWiTyKa1fxuBefFk+tOZVOKRQgPQ1mloaGD2H/M/ovziH25g9P5H+tiqJEmSVAmC2BTgHmAesBfwAtHAXxXw72Ka7NPVivFkegLwFyADnAZMBPYBPgwsAP4aT6bdkbOHPfroo82Pp8b6w50fHsgpe7X8fcD6VW+x4rXCN+qVJEmStE2aBlxDEO5HtPPF6cCuwMPAHcU0WMiI40XArEwqMaVV+dx4Mv0n4EGilXwuLCYQFWfx4sXN77933ABO36eG0/epoeo7dS3qbahb0dOhSZIkSSqPicBZ2ff1wECCcDVB7HLgbuDHhTbY5RFH4H3Ade2dyM5vvA44ttAAtHVqa2ub348eXNVhvf7DRvREOJIkSZLKbw3QP/t+EbB7zrmRxTRYyIjjOOD5POdfIJr7qB501FFHMWCHUS1WU21twA47MWL3A1qUNW5uYMVrz7l1hyRJkrT9mQW8F5gNpIFrCGL7E005nFVMg4UkjkOAtXnOrwUGFROEite3b1/2Oe1L/Ptn3+qwzrgjTmpxvPjZh3nxD9e7dYckSZK0fbqYKH8DCLLvPwq8SjS9sGCFbsexTzyZHt3BuaKGPLX1ag88hr3PvJQ+VTcRLXLb0st//RnzH/8z+57+ZQCenv7NNnW6snVHR6OUhYxeOtIpSZIkdbMgfD3n/Vrg/K1tstDEcSZbtuHI1Zgtdy/Hcmrs+I+/KTGsGTwsbxMdbd3R0SjlLpOPZ9HTD3Zp9NKRTkmSJKmHBbEhtF7bJgjr2q/csUIWxxkP7Jb92vq1W85X9bDFzz7M3N9Oo7FhU6d1N63Z8nfkyHF9+e3pA6kdsuV3Ae1t3bH42Yd5evo328yjXL9qGa/P/E275U9P/yaLn324S208Pf2bvHzfz2nc3ND5h5UkSZKUXxAbTxBLE8TWACHwdva1Kvu1YF0eccykEm8UcwN1r4aGBl78w/VtyncZWkX6Y4P40b828tN/t59QPvqpwQAM7gcn/2Zdc3lucte4eUv7w/rDmfvV8Mc59Sxf23J0s39f2NAq72savYzeb4lx+ACo2wANOU3kPk7r6KMkSZK0VX6V/fppYCkleDK00EdV1cs8+uijbAiXAzBq0JaRw4UXDwXg1pMHdpg4Nhm/Q8uB5xfuuJbwzbnsvP9RsLmhOZH8+SkDOW1iDZ+e1MBh09c01x8ztIoFFw/lrrmbOPV3uQnoltHLpjbiO1Qx78tDeW5pAwfevIZcXZlnKUmSJKlTBwCTCcKXStWgieM2bvHixc3vj4mXpjvr169h3t/vYN7f76BvvwHN5adNrAHg0LEt5z+eOykq/9DeNcC6Fuc21K1ocdzUxgE7d7wgTkfzLCVJkiR1yb+AXQETR0Vqa2u3uo2q9pY7ymrYuL7T66v7dNxAvyHDqerT/lTaKuAbR/dj1oIGHnx9y3OuTSOVI/c4qNN7S5IkSWrjM8DNBLExwAtAy0cQg/C59i7Kp5DFcdQLLVu2rPNKRI+I7jmi4+7+xSkDeOmCwQzo4FcJNR1cOnJQFcH7+nfY7rO/upKNq1cxYIdRbc6dOrGa7x07gBkfH9zmXOtFdCRJkiR12Shgd+DnRKOP/wGeyflaMEcct2ENDQ184Qtf6LTekH4w78vRnMdYqo66DW3rfHJSPwBO2auaQTVV/NeEaj6fXs/KddE82q+9t1+7bV91fMdJI0QJ4L9/fjm7TTmL12f+psWOIUeO6/hR1A2rV+VtV5IkSdpmBLGjgUuAyUAtcCpBeFcn1xwDXAvsCywCriYIb+7iHX9GlCCeRU8ujhNPpp/p6s0yqcS7tyoiddmVV17JihXRHMI8T5vyzqVb9m7cZWgf6jZsbnF+n1FbErhG4GenDATgw/vWcP+r9Zz4q7Uk9mj/r8qnD2qbUE4a3Yeh/ap4dP6Wx0/ffCIdxZkT6PHjO/7r13/IDh1/IEmSJGnbMhh4lmgE8A+d1g5i44G/ArcC5wDvBW4iiC0jCDu/Ht4FfJAgfLXoiFvp6ohj/mxYPa6hoYHrr9+yxcV3j80/8les908ofFD6mc8NAaD2mndYsjr6fcOmtW33GM03t9LEUZIkSduNILwXuDd6H+vKFZ8H5hOEF2WP5xDEDga+SlcST/gbcCDQs4ljJpX4TqluqNJ49NFHWblyJQBfOrQf3zy6a4ljvpFJgGH9O6vR9fbHDqtqThyb5D6quvfILRMn9xnVh9nLtoyEhgteYdTEQ7YqFkmSJKm7nDGxeghBbFhO0QaCsJ1JYUU5HHigVdn9wHkEsRqCMP9+e/Bn4AcEsf2B52m7OM49hQbk4jjbqNxtOL7ewfzDYtx68sCtun7ZJUO6XDd3NdY7P9zyvkteeHyr4pAkSZK60/RTBs4FwpzXpSVsfjTR3MRcS4kG/kZ24fqbgbHA5cAdRE+QNr3+VExAXZ3j+DZdn+O4YzGBdDGOS4H/Ba7PpBIXZcv6A98nmvg5EJgJnJ9JJRbkXDcO+BFwHNFGg78GvppJJTZ2V6zdrRTbcBSiq7NpRwwq7ncRwwe2HOms2vr5u5IkSVK3Oe/udXvf8ZFBi3OKSjXa2KT1f4irOihvKwhLPkDY1QlsF3VepXvFk+n3AJ8FWu85ch1wMnAmsAK4BvhLPJmenEklGuLJdF8gDSwDjgRGALcR/cFf2EPhl9xRRx3F2LFjWbBgQeeVc+SbV9iRUYOKe3z1yHHV7DCg5R6NXbXTAUcWdU9JkiSpJ9w5p341Qdh2IY/SWEI06phrJ6CeKOfpcV2d43hbdweSTzyZHgL8Cvhv4Js55THgPODjmVTiwWzZOcCbwPFEzwGfAOwD7JpJJRZl63wF+EU8mf5GJpXors7uVn379uX666/n9NNPL+i6w8b25bjxfbnxn509Fr3FW5cMZWND4SOAP3j/AABGXP1O87YeHWmdmu5+zBkF30+SJEnbua1bjmNb8gTR4FiuE4CnujC/MRJt5/FVYCLRKOUc4P8IwkeLCWir9nGMJ9MDgZrcsm5KxH4EpDOpxIPxZPqbOeWTs/dvnjiaSSUWxZPpF4AjiBLHw4EXmpLGrPuB/tnrH2p9s+zjr82rzQyccNiQda/Oor6+nk2bup5wdbeTTz6Zyy+/nKrV13b5mukfjOYSLqgrLBHs17fld+ketcM4/PD3EO0nmt/wAbByHUwZ35drs8lkPrUHHUdV3xoaG31ctSua/pz886pM9n9ls/8rl31f2Sq5/xsaNpf9/+P19fWFXxTEhgATckrGE8QmASsJwvkEsWnAGILwE9nzNwMXEMSuJdqS43CiAbOzuni/c4i2/vgjcANRyn0EMJMgdi5B+OtCP0LBiWM8mR4MXAV8hOixz9Y63tW9CPFk+kzg3cB72jk9GtiYSSXeblW+lC1Du20mlmZSibfjyfRG2g7/NrkU+HbTwY5TP8/CV2cxc+ZMRo7sylzUnnPggQdS9UThjzDvNWLrHnt++bPQlaQR4PR9arj6sY08+InBHdZpeoS2T78B7HbKlwjDcKviq0R1ddvk4LlKxP6vbPZ/5bLvK1sl9v/rr6/ir38t2Q4TRVm+fHkxlx1MywGrppGf24BzgVpgXPPZIJxHEPsA8APgi8Ai4Etd3MMR4BvA1wjCH+SUXU8Quxj4FtGaLwUpZsTxauBY4HzgdqIPMgb4HJAsor0OxZPpXYHrgRMyqcT6Ai6touWk0fZ+HdO6Tq5pbOlMVs64uRaYO2XKFMaMGVNAGD0jfGYQsLbcYXToquMHcPVjXVuHaNI532CH4d22vtJ2qbGxkbq6OoYNG0ZVMZNYtU2z/yub/V+57PvKVsn9v9tuO/KB9+9Z1hgWLlxY+EVB+HfyPWgbhOe2U/Yw0QBaMXYj2pKjtXuIFhstWDGJ48nAJzKpxN/jyfTPgEczqcSr8WT6DeBsormIpTKZaBLo0/FkuqmsL3B0PJm+AHg/0C+eTA9vNeq4E9C0n8MS4NDcRuPJ9HCiR1xbL3ELQCaV2EDOqkhVV500FKC6upqampr2LimrvtX9oLGwxDF1fOePjPasKiafdwW1Bx5T7kC2WVVVVRX3j4e2sP8rm/1fuez7ylaJ/d+3T5+y/3+8unqrZvv1lDeBKUDr4dkp2XMFK+ZT7wjMy76vyx4D/AP4cTFB5DET2L9V2c+BuUSPy75JtJnlVOD3APFkuhbYD/hatv4TwDfiyXRtJpVoWi73BKLE8OkSx6sO/PCDw4GOV1ftPyRG7TiTRkmSJKkErgFuyM6jfJzoScsjiR6L/XIxDRaTOL4OxIE3gNlEcx3/STQSuaqYIDqSSSXeAV7ILYsn02uAFZlU4oXs8XTgmngyvQJYSbSn4/PAg9lLHsjG+ct4Mn0JUaL7feDWbXVF1W3RBQcVviWHJEmS1EJlDbAWLwh/TBBbAnyFKF+DaFXVjxKEdxfTZDGJ48+BA4GHieYCpuPJ9IXZti4uJoit9D9E+5n8HhhINEp5biaVaADI7uWYAG4CHgPWEU0G/WoZYu0WVV3YA7S3izWaw0uSJEklE4R/Av5UquaqtnYZ33gyPY5olaDXMqnEsyWJqpepqqoaAyx48803GTt2bLnDaWPVd8axQ+O2vwrpySPSnVdSG42NjYRhSCwWq7h5DrL/K539X7ns+8pWyf1/xO4juPQDE8saw4IFC9h1110BxjY2NhaxUk4PCmL9iNZ/abmlQhDOL7SprZ7ZmUkl5gMF31iSJEmS1A2C2B7Az4j2bszVtLNEwVsodjlxjCfTxwE3Aoe1nhsYT6ZjRJMuP59JJR4tNAhtne3hUVVJkiRJJfMLoul8JwGL6Xgbwi4rZMTxIjpYUCaTSoTxZPoWojmOJo6SJEmSVD6TgMkE4dxSNdin8yrNDgTuy3P+AaJ9FyVJkiRJ5TMbGFnKBgsZcdyZaM/EjtQDo7YuHFWywZvfYU2foeUOQ5IkSb2UE7S67OvA1QSxy4i2KmyZxwVhwVsaFDLiuBDYP8/5A4ien5WK8uF1d5Q7BEmSJGl78CBwGNFWhW8Bb2dfq7JfC1ZI4vhX4LvxZHpA6xPxZHog8B3gL8UEoa2zvSyOc+jGWeUOQZIkSdoeHJt9Hdfq1VRWsEIeVb0COA14OZ5M3wi8RDRaPBH4ItGSrlcWE4QEMHZz794GR5IkSeW1tXvQV4wgfLjjc7FJxTTZ5cQxk0osjSfTRwA/BqYR7QECUfJ4P3B+JpVYWkwQkiRJkqRuEsRiwNnAZ4gWPe2+fRwBMqnEG8AH4sn0cGACUfL4SiaVKOo5WUmSJElSNwlixwGfJnpy9A3gD8B5xTRVUOLYJJso/quYa1V628scR0mSJCmfcTsOKncIvV8QGwucS5QwDgZ+D9QApxOEs4tttpDFcdRLmThKkiSpEvSvKfgJy8oSxP5KtIfjPsCFwC4E4YWlaLqoEUf1LkMa15Q7BEmSJEnldwJwA/BjgvCVUjZs4ihJkiRJ24ejiB5RfYogNhf4JfC7UjTso6qSJEmStg3O0MovCJ8gCP8bqAVuAc4EFhLlfVMJYkOLbdrEUZIkSZK2J0G4liD8GUF4JLA/cA2QBN4iiN1TTJMmjpIkSZK0vQrClwjCrwFjgbOKbcY5jpIkSZK0vQvCBuCu7KtgjjhKkiRJkvIycZQkSZIk5WXiKEmSJEnKy8RRkiRJkpSXi+NIkiRJUncLYucDlxDtsfgicBFB+GgHdWuAS4FPAmOAl4CvE4T39UywbTniKEmSJEndKYh9FLgOuBI4CHgUuJcgNq6DK64APgdcCOwD3Az8iSB2UA9E2y5HHCVJkiSpe10MTCcIf5o9vogg9n7gC0Qji619HLiSIPxr9vjH2fpfAc7p9mjbYeIoSZIkSQU6Y2L1EILYsJyiDQThhjYVg1g/YDKQanXmAeCIDprvD6xvVbYOOLK4aLeeiaMkSZKkbcKajfXlDqHZ9FMGzm1V9B0gaKfqSKAvsLRV+VJgdAfN3w9cTBB7BHgNmAKckm2nLJzjKEmSJGmbsGrtpnKH0Oy8u9ftDcRyXtM6uaSx1XFVO2VNvgy8AswFNgI3Aj8HGoqNd2s54ihJkiRJBbpzTv1qgrCuC1WXEyV8rUcXd6LtKGQkCJcBHyKIDQBGAIuIHnWdV3TAW8kRR0mSJEnbhI6G53q1INwIPA1MbXVmKvB4J9euJwgXEg34nQ7c3R0hdoUjjpIkSZLUva4FfkkQewp4AvgsMI5omw0IYrcDCwnCS7PHhxLt3/if7NeAaNDv6h6Ou5mJoyRJkiR1pyD8HUFsBHA5UAu8AHyAIHwjW2McsDnnigFEeznuBqwG/gp8nCBc1XNBt2TiKEmSJEndLQhvAm7q4Nz7Wh0/DOzT7TEVwDmOkiRJkrYNjdvkLMftgomjJEmSJCkvE0dJkiRJUl4mjpIkSZKkvEwcJUmSJEl5mThKkiRJkvIycZQkSZIk5WXiKEmSJGmb4GYc5WPiKEmSJGmb4DaO5WPiKEmSJGmbUFVV7ggql4mjJEmSJCkvE0dJkiRJ2wQfVS0fE0dJkiRJUl4mjpIkSZK2CY2uq1o2Jo6SJEmSpLxMHCVJkiRJeZk4SpIkSZLyqi53APnEk+lLgdOAvYF1wOPA1zOpxEs5dfoD3wfOAgYCM4HzM6nEgpw644AfAcdl2/k18NVMKrGxhz6KJEmSJG2zevuI4zFECd9hwFSiRPeBeDI9OKfOdcCpwJnAkcAQ4C/xZLovQPZrGhicPX8mcDpwTQ99BkmSJEkl4HYc5dOrRxwzqcSJucfxZPpTwFvAZOCReDIdA84DPp5JJR7M1jkHeBM4HrgfOAHYB9g1k0osytb5CvCLeDL9jUwqUddTn0eSJEmStkW9OnFsRyz7dWX262SgBnigqUImlVgUT6ZfAI4gShwPB15oShqz7gf6Z69/qPVNso+/9m86HjjhsCHrXp1FfX09mzZtKuHHKY2acgdQQo3+GqlgTX9m/tlVJvu/stn/lcu+r2yV3P+bN28u+//H6+vry3r/ctlmEsd4Ml0FXAv8I5NKvJAtHg1szKQSb7eqvjR7rqnO0tyTmVTi7XgyvTGnTmuXAt9uOthx6udZ+OosZs6cyciRI7fyk5TeKeUOoITCMCx3CNusujoHzyuZ/V/Z7P/KZd9Xtkrs/1dfW8VfN71S1hiWL19e1vuXyzaTOAI3AgcQzVPsTBW02B20vV/HtK6TaxpRkgrAyhk31wJzp0yZwpgxY7oWbU96ptwBlE4sFuu8klpobGykrq6OYcOGUVVVVe5w1MPs/8pm/1cu+76yVXL/T9h9BB+YukdZY1i4cGFZ718u20TiGE+mfwh8EDg6d7VUYAnQL55MD2816rgT0QqsTXUObdXecKInPFuMRDbJpBIbgA1Nx1VXnTQUoLq6mpqa7enB0N6n0n74lVJVVZV/fhXM/q9s9n/lsu8rWyX2f58+fcr+//Hq6m0ihSq5Xr2qajyZroon0zcSbclxXCaVmNeqytPAJqIVV5uuqQX2Y0vi+ASwX7a8yQlEieHT3RW7JEmSJG0venu6/CPgY0TT+N6JJ9NNcxLDTCqxLpNKhPFkejpwTTyZXkG0aM73geeBB7N1HwBmA7+MJ9OXADtm69zqiqqSJEmS1LlePeIIfIFoJdW/A4tzXh/NqfM/wF3A74HHgLXAyZlUogEg+zUBrM+e/322/ld75BNIkiRJ0jauV484ZlKJTh/azqQS64ELs6+O6swHTiphaJIkSZJ62ObK24Gk1+jViaMkSZIkbReC2PnAJUAt8CJwEUH4aJ76FxE9gTkOWA7cCVxKEK7v/mDb6u2PqkqSJEnSti2IfRS4DrgSOAh4FLiXIDaug/pnAyngO8BE4Dyi6XrTeiLc9jjiKEmSJEnd62JgOkH40+zxRQSx9xONKF7aTv3DgccIwl9njzMEsd8Ah3R/qO1zxFGSJEmSCnTGxOohBLFhOa/+7VYMYv2AyUS7PeR6ADiig+b/AUwmiB2SbWM34ANAuhSxF8PEUZIkSZIKNP2UgXOBMOfV3sghwEigL7C0VflSYHTb6kAQ/hb4FvAPgtgm4DXgIYIwtfWRF8fEUZIkSdI2oZHes6zqeXev25to68CmV2fzD1sHX9VOWSSIvQ/4BnA+8G7gNOAkgti3io946zjHUZIkSdK2offkjdw5p341QVjXharLgQbaji7uRNtRyCbfA36ZMyfyeYLYYOAnBLErCcLNRQW9FRxxlCRJkqTuEoQbgaeBqa3OTAUe7+CqQUDr5LCBaJSy073uu4MjjpIkSZLUva4FfkkQewp4Avgs0f6MNwMQxG4HFhKETfMk/wxcTBB7BngSmEA0CnkPQdjQw7EDJo6SJEmS1L2C8HcEsRHA5UAt8ALwAYLwjWyNcbQcYbyC6MHcK4AxwDKiZPIbPRZzKyaOkiRJkrYNZXlIs0SC8Cbgpg7Ova/VcT3wneyrV3COoyRJkiQpLxNHSZIkSduGXrSqaqUxcZQkSZIk5WXiKEmSJEnKy8RRkiRJkpSXiaMkSZIkKS8TR0mSJElSXiaOkiRJkqS8TBwlSZIkbRPcjaN8TBwlSZIkbRMaG00dy8XEUZIkSZKUl4mjJEmSJCkvE0f1GqurBpc7BEmSJEntMHFUr3H28N+UOwRJkiT1YlVVVeUOoWKZOKrX2FzVt9whSJIkSWqHiaMkSZKkbYKrqpaPiaMkSZKkbYJ5Y/mYOEqSJEmS8jJxlCRJkiTlZeIoSZIkScrLxFGSJEmSlJeJo9qY2X9KuUOQJEmS1IuYOKqNFX1GlDsESZIkqQ0XVS0fE8cKVFc1rORtvtJ3j4KvWVUVK3kckiRJkkrPxLECNXTS7ZuL+Guxss/wgq+5JHZNwddIkiRJ6nkmjtuxYkcWi0kci7Gkb22P3EeSJEnS1jFx3I6dveNv+P6QS9qUV3XydPiLNfsWfK9Gqgq+BuDPA04q6jpJkiRJPae63AGoey3rM7JNWWdJ3nM1k7ornDZ+O/BjnLz+L6yo2rHH7ilJkiT1uCB2PnDJ/2/v/oOsKu87jr+/+5MfCxeV4I8k65KMP4iYKGgk1ICJg7bs5AdiAhmmaSY2MTp1SoxFnGnwdqx1G4ySYNSMseOUiNA2qcYQIkmtlBSkApoKxWoqywiuMIpeENhdFk7/eJ4LZ8+evXt39/44u/fzmnlm957ne879wvfec/a559znAGcDO4CFpDMbeol9DpgZ0/Mr0pnmYqWYi844VqBOq+ff6z5T0G22VZ8zoPUOVqWYf9oq/vy0fyhoPiIiIiIiiZFOzQOWAXcDlwIbgLWkU429rHEdboCZbZOB48A/Fz/ZeDrjOMz1dm7xvjG3sfL4AkYER1meuWVQz/FC7eWsHLWAOe3/OqD1D1eNGdTzi4iIiIgk3K3Ao6QzP/GPF5JOXQvcBNzRIzqdOdD9cWo+cAQNHKVYcn2fMW5ymm+nlvX7OX48+kbabWS/1xMRERERGaqun1TTQDoVno2yg3Smo0dgOlUHTAVaIj3rgOl5Pt0NwCrSmcMDybUQdKnqMPBU/edz9PZ9m9SNde71+kLt5fyhpv/3YxzYtDgiIiIiIv1z7hmjyp3CSY9+YeQrQCbUep45dMYD1cC+yPJ9wFl9PlE69Uncpao/6Su0mDRwHAYeGfUNvlx1fz/W6D6YvL/hVr7XsIilDYtOLls1cn6BshMRERERKYyPjG8odwon3fDU0QuBVKjd08cq0TM6FrMs9qmA7aQz/9XvJAtIA8fhwIw2m9Bt0Z6qD+W9eruNZEP9TI5WnfoE5/FRf5r3+nH3i3xi5Fd6LGtpWJz3NkVEREREkuxfdna9TzpzMNR6XqbqvI2b2CZ6dnECPc9CdpdOjQLmU+azjaCB47C0rXYKt4x7AIDXas7nBMbeqoHNepqPI1WjeyzbW/3BHsv+s/7TRctBRERERCSR0plOYCswK9IzC9jYx9pfBuqBnxYhs37R5DjDUMZSdFktAB02gi+d/jO6qOGpA+67kLkmzMnllZoLuLDrf/OKHehziIiIiIj0ZnR9dblTGKj7gBWkU1uATcA3gUbgYQDSqX8E9pLORL8neQPwJOnMOyXMNZbOOA5D0UFbp9Vzwgb3Jls0dilbay8bcA4iIiIiIoN17hk9r3QbEtKZ1cBCYAnwEjADmE06s9tHNOLu1xhaJ3U+cCXwaOkS7Z3OOEpedtZ+jH1VE1hw9PFypyIiIiIiMvSkMw8CD/bSd1XMsldJ0A0MKmrg2LR4zc3AX+FG8zuAha0tzRvKm1Xh9XW2L2OpAW33QPX4vGNP6GS2iIiIiMiwUTF/3TctXjMPWAbcDVwKbADWNi1e01jWxIpgT3X8jKpLxtzF9prJLB2zKLY/HztqLgLg1erze/Rtq50CwOvVE9lY90e8Xj2Rp0d8jiVj7uLm1EMDfk4RERERESmvSjrjeCvwaGtLc3Yq24VNi9dcC9xE7zfrHFJuG7OUacc28/ORc2P7X6ybwot1U/Le3u1jv8eNhx/ix6NvOrnsu2P/lg8e38u4E+9x16G/7ha/tGERV3f8lvX1Mzlmdfyln9lVRERERESGtooYODYtXlMHTAVaIl3rgOkx8fW4aW8BGDFxakP7rq288cYbdHV1FTXXgTjy7n7aDx1i24kzeNFmQ+d7BdnuFsazhe/C+xC+xUyGUXz8+C4Odgb++V3fEeAJpkP7MXq7Jc3rHeMYz7u8Zk0n15PBCQJoP3SI2hMdWGKugpdSUf0rWynrP23i6Ty/60Bxn0Typvd+Zavk+u9ubeXg6Lqy5tDW1lbW5y+Xihg4AuOBanqOZvbR80ac4M5A3pl9kLpyAe27tjJ9eo8xZsV6Fnfdr3N93ut99ORvL/drPRERKa9ny52AiAgw5c6+Y0roTGBvuZMolUoZOGZFZ42xmGR72nQAAAhPSURBVGUA9+DuteJW6mqnalRq0okjmT3FTG4QGoBXgAvx5weloqj+lU31r2yqf+VS7Sub6l9+ZwIvljuJUqqUgePbwHF6nl2cQMw1la0tzR1Ax6klzcAdm4uX3uCY2Vj/a1sQBAfLmoyUnOpf2VT/yqb6Vy7VvrKp/olQMWcasypiVtXWluZOYCswK9I1C9hY+oxERERERESGjko54wju0tMVTYvXbAE2Ad8EGoGHy5qViIiIiIhIwlXEGUeA1pbm1cBCYAnwEjADmN3a0ry7rIkVRgfwN3S7vFYqiOpf2VT/yqb6Vy7VvrKp/lJyFgRxc8OIiIiIiIiIOBVzxlFEREREREQGRgNHERERERERyUkDRxEREREREclJA0cRERERERHJSQPHYcDMbjazXWbWbmZbzezT5c5JemdmaTMLIu2tUL/5mDfN7KiZPWdmF0W2cZqZrTCzjG8rzGxcJOZiM1vvt7HXzJaYmUVi5prZ/5hZh/85p7j/+spjZjPM7Glfz8DMvhjpT0y988lF+ieP+j8Wsz94PhJTb2bLzextMztsZr8wsw9FYhr98xz2cT80s7pIzEx/jGg3s9fN7Fsx+ep4UiBmdoeZvWBmh8xsv5k9aWYXRGISU9t8cpH85Vn/52Le/6siMdr/S2Jo4DjEmdk8YBlwN3ApsAFYa2aNZU1M+rIDODvULg71LQJuBf4CuBx4C/iNmY0JxawELgH+2LdLgBXZTjMbC/wGeNNv4xbgNr/dbMyngNV+vU/4n/9kZlcU8N8pMBr4Pa6ecZJU73xykf7pq/4Av6b7/mB2pH8ZMAeYD1wJNAC/NLNqAP9zjX+uK33cXOD72Q2Y2UTgV7hjxKXA3wE/NLO5oRgdTwprJvAjYBowC3fv7HVmNjoUk6Ta5sxF+i2f+gM8Qvf3/42Rfu3/JTmCIFAbwg3YDDwUWbYTuKfcuan1WrM08FIvfQa0AbeHltUD7wE3+seTgAC4IhQzzS+7wD++ya9TH4pZDOzl1G14VgNrI8//a+CJcv8fDdfma/TFJNY7n1zUClt/v+wx4Mkc66SATmBeaNk5wHHgWv/4T/zjc0Ix84F2YKx//PfAzsi2HwY2hR7reFLc+n/AvwZmJK22+eSiVtj6+2XPActyrKP9v1qims44DmH+UpWpwLpI1zpgeukzkn44z18OssvMVpnZR/zyicBZhGoaBEEHsJ5TNf0UkAmCYHMo5nkgE4lZ79fNegb3h0BTKCb62nkGvXZKKUn1zicXKY6r/KVsr5rZI2Y2IdQ3Faile13eBLbTvf7b/fKsZ3B/+E0NxcTV/zIzq9XxpCRS/ucB/zNJtc0nFxmcaP2zFvjLg3eY2b2RM3za/0uiaOA4tI0HqoF9keX7cDsASabNwFeBa4Fv4Gq10czO4FTdctX0LGB/zHb3R2LitkEeMXrtlE6S6p1PLlJ4a4EFwGeB7+AuEXvWzOp9/1lAZxAE70bWi9auW918fGeuGP+4Bncs0fGkiPz3ze4DfhcEwXa/OEm1zScXGaBe6g/wOPAV4CrgLtxlyD8P9Wv/L4lSU+4EpCCCyGOLWSYJEQTB2tDDl81sE/B/wJ8B2Ukx+qppXH37irGY5XrtJEOS6q3XRAkFQbA69HC7mW0BdgPNdP8DMqrQr5G410vcNmRgHgA+jvvuYF+SVFvVvzBi6x8EwSOhh9vN7DVgi5lNCYJgWzYsZnva/0tZ6Izj0PY27vsH0U+DJtDzUyNJqCAIDgMvA+fhvowOuWv6FnBmzKY+EImJ2wZ5xOi1UzpJqnc+uUiRBUHQhhs4nucXvQXUmdlpkdBo7brVzcfX5orx2+gC3kHHk6Ixs+XA54HPBEGwJ9SVpNrmk4sMQI76x9kGHKP7+1/7f0kMDRyHsCAIOoGtuNm6wmYBG0ufkQyEvyRtEu6L6btwO/BZof463Oxs2ZpuAlJm9slQzBW470+EY2ZEpmy/BjfrWmsoJvrauQa9dkopSfXOJxcpMn/J+odx+wNw+/hjdK/L2cBkutd/sl+edQ3Q4dfPxsTVf0sQBMd0PCk8f3uDB4DrgM8GQbArEpKk2uaTi/RDHvWPcxHuQ4Hs+1/7f0mWcs/Ooza4BszDfdfh67jBx/3A+8C55c5Nrdea3YvbGU8ErgCeBg5mawbcjpvJbA7uoL0SdwAYE9rGWtwU/9N8+2/g6VB/CncQWOm3MQf3ZfrvhGKm4z6Rvh240P88Rmj2NrWC1LsBN336JbhLfr7tf29MWr3zyUWtcPX3fffiJq5own3PaSOwJ1L/h4A3gKtxt1L4N+AloNr3V+OuWvit77/axy8PbWMicBj3PatJuGNGJzA3FKPjSWFr/6B/P83EncnJtpFJrG1fuagVtv7AR4ElwGX+/T8bN9PttvD/Odr/qyWolT0BtQIUEW7GfaqU/QRyRrlzUstZr1V+Z9yJmy77Z8DHQv2Gu2VHG27K9fXA5Mg2Tgd+ihtwHvS/j4vEXAz8h99GG3AnfmruUMz1wCs+l53AdeX+/xluDTcYCGLaY0mrdz65qBWu/sBI3MyG+31NdvvlH45sYwSwHHfZ4RHch03RmEbgl77/HR9fH4mZifujtAN3huFbMfnqeFK42sfVPQC+lsTa5pOLWuHqj7uyYL3//+4A/gD8ADg9sh3t/9US07L3dxERERERERGJpe84ioiIiIiISE4aOIqIiIiIiEhOGjiKiIiIiIhITho4ioiIiIiISE4aOIqIiIiIiEhOGjiKiIiIiIhITho4ioiIiIiISE4aOIqIiIiIiEhOGjiKiIiIiIhITho4ioiIiIiISE4aOIqIiIiIiEhOGjiKiIiIiIhITv8PKncRxPKsAawAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax1 = plt.subplots()\n", "ax2 = ax1.twinx()\n", "\n", "#\n", "# *Try this out* - change `start` and `end` to zoom in on the \n", "# anomaly found earlier in this notebook\n", "#\n", "start, end = 0, len(dataset)\n", "dataset_subset = dataset[start:end]\n", "\n", "ax1.plot(dataset['Duration'], color='C0', alpha=0.8)\n", "ax2.plot(scores, color='C1')\n", "ax2.scatter(anomaly_indices, anomalies, color='k')\n", "\n", "ax1.grid(which='major', axis='both')\n", "ax1.set_ylabel('Call Duration', color='C0')\n", "ax2.set_ylabel('Anomaly Score', color='C1')\n", "ax1.tick_params('y', colors='C0')\n", "ax2.tick_params('y', colors='C1')\n", "ax1.set_ylim(0, 1000)\n", "ax2.set_ylim(min(scores), 1.4*max(scores))\n", "fig.set_figwidth(10)" ] } ], "metadata": { "kernelspec": { "display_name": "conda_python3", "language": "python", "name": "conda_python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }