{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Set up Preview SDK<a class=\"anchor\" id=\"setup\"></a>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Configures your AWS CLI to now understand our up and coming service Amazon Forecast\n",
    "!aws configure add-model --service-model file://../sdk/forecastquery-2018-06-26.normal.json --service-name forecastquery\n",
    "!aws configure add-model --service-model file://../sdk/forecast-2018-06-26.normal.json --service-name forecast"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: boto3 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (1.9.69)\n",
      "Requirement already satisfied: botocore<1.13.0,>=1.12.69 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from boto3) (1.12.69)\n",
      "Requirement already satisfied: s3transfer<0.2.0,>=0.1.10 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from boto3) (0.1.13)\n",
      "Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from boto3) (0.9.3)\n",
      "Requirement already satisfied: docutils>=0.10 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from botocore<1.13.0,>=1.12.69->boto3) (0.14)\n",
      "Requirement already satisfied: python-dateutil<3.0.0,>=2.1; python_version >= \"2.7\" in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from botocore<1.13.0,>=1.12.69->boto3) (2.7.3)\n",
      "Requirement already satisfied: urllib3<1.25,>=1.20; python_version >= \"3.4\" in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from botocore<1.13.0,>=1.12.69->boto3) (1.22)\n",
      "Requirement already satisfied: six>=1.5 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from python-dateutil<3.0.0,>=2.1; python_version >= \"2.7\"->botocore<1.13.0,>=1.12.69->boto3) (1.11.0)\n",
      "\u001b[33mYou are using pip version 10.0.1, however version 18.1 is available.\n",
      "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n",
      "Requirement already satisfied: pandas in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (0.22.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from pandas) (2018.4)\n",
      "Requirement already satisfied: python-dateutil>=2 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from pandas) (2.7.3)\n",
      "Requirement already satisfied: numpy>=1.9.0 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from pandas) (1.14.5)\n",
      "Requirement already satisfied: six>=1.5 in /home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages (from python-dateutil>=2->pandas) (1.11.0)\n",
      "\u001b[33mYou are using pip version 10.0.1, however version 18.1 is available.\n",
      "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "# Prerequisites : 1 time install only, remove the comments to execute the lines.\n",
    "!pip install boto3\n",
    "!pip install pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import boto3\n",
    "from time import sleep\n",
    "import subprocess"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "session = boto3.Session(region_name='us-west-2') #us-east-1 is also supported\n",
    "\n",
    "forecast = session.client(service_name='forecast')\n",
    "forecastquery = session.client(service_name='forecastquery')\n",
    "s3 = session.client('s3')\n",
    "accountId = boto3.client('sts').get_caller_identity().get('Account')\n",
    "\n",
    "bucketName = 'orch-sme-hackathon-012019'\n",
    "key=\"gravyforce/amzunlimited/amz_u_data_all_pre_2019_01_08.csv\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'orch-sme-hackathon-012019'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bucketName"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'gravyforce/amzunlimited/amz_u_data_all_pre_2019_01_08.csv'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "key"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# One time setup only, uncomment the following command to create the role to provide to Amazon Forecast. \n",
    "# Save the generated role for all future calls to use for importing or exporting data. \n",
    "\n",
    "cmd = 'python ../setup_forecast_permissions.py '+bucketName\n",
    "p = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n",
    "roleArn = 'arn:aws:iam::%s:role/amazonforecast'%accountId"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CreateDataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More details about `Domain` and dataset type can be found on the [documentation](https://docs.aws.amazon.com/forecast/latest/dg/howitworks-domains-ds-types.html) . For this example, we are using [CUSTOM](https://docs.aws.amazon.com/forecast/latest/dg/custom-domain.html) domain with 3 required attributes `timestamp`, `target_value` and `item_id`. Also for your project name, update it to reflect your name in a lowercase format."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATASET_FREQUENCY = \"1D\" \n",
    "TIMESTAMP_FORMAT = \"yyyy-MM-dd\"\n",
    "project = 'amz_u_streams_all' # Replace this with a unique name here, make sure the entire name is < 30 characters.\n",
    "datasetName= project+'_ds'\n",
    "datasetGroupName= project +'_gp'\n",
    "s3DataPath = \"s3://\"+bucketName+\"/\"+key"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'amz_u_streams_all_ds'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datasetName"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'s3://orch-sme-hackathon-012019/gravyforce/amzunlimited/amz_u_data_all_pre_2019_01_08.csv'"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s3DataPath"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Specify the schema of your dataset here. Make sure the order of columns matches the raw data files.\n",
    "schema ={\n",
    "   \"Attributes\":[\n",
    "      {\n",
    "         \"AttributeName\":\"timestamp\",\n",
    "         \"AttributeType\":\"timestamp\"\n",
    "      },\n",
    "      {\n",
    "         \"AttributeName\":\"item_id\",\n",
    "         \"AttributeType\":\"string\"\n",
    "      },\n",
    "      {\n",
    "         \"AttributeName\":\"target_value\",\n",
    "         \"AttributeType\":\"float\"\n",
    "      }\n",
    "   ]\n",
    "}\n",
    "\n",
    "response=forecast.create_dataset(\n",
    "                    Domain=\"CUSTOM\",\n",
    "                    DatasetType='TARGET_TIME_SERIES',\n",
    "                    DataFormat='CSV',\n",
    "                    DatasetName=datasetName,\n",
    "                    DataFrequency=DATASET_FREQUENCY, \n",
    "                    TimeStampFormat=TIMESTAMP_FORMAT,\n",
    "                    Schema = schema\n",
    "                   )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DatasetName': 'amz_u_streams_all_ds',\n",
       " 'DatasetType': 'TARGET_TIME_SERIES',\n",
       " 'DataFormat': 'CSV',\n",
       " 'Domain': 'CUSTOM',\n",
       " 'ScheduleExpression': 'none',\n",
       " 'DatasetArn': 'arn:aws:forecast:us-west-2:073138737237:ds/amz_u_streams_all_ds',\n",
       " 'Status': 'ACTIVE',\n",
       " 'ResponseMetadata': {'RequestId': 'ea6792b7-5be5-4b42-b3c7-d5d51a620787',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:26:59 GMT',\n",
       "   'x-amzn-requestid': 'ea6792b7-5be5-4b42-b3c7-d5d51a620787',\n",
       "   'content-length': '235',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.describe_dataset(DatasetName=datasetName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DatasetGroupName': 'amz_u_streams_all_gp',\n",
       " 'DatasetGroupArn': 'arn:aws:forecast:us-west-2:073138737237:dsgroup/amz_u_streams_all_gp',\n",
       " 'ResponseMetadata': {'RequestId': '5c8d2329-a1ee-4f84-a5bd-eebc8600b245',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:27:02 GMT',\n",
       "   'x-amzn-requestid': '5c8d2329-a1ee-4f84-a5bd-eebc8600b245',\n",
       "   'content-length': '132',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.create_dataset_group(DatasetGroupName=datasetGroupName,RoleArn=roleArn,DatasetNames=[datasetName])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you have an existing datasetgroup, you can update it"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DatasetGroupName': 'amz_u_streams_all_gp',\n",
       " 'DatasetGroupArn': 'arn:aws:forecast:us-west-2:073138737237:dsgroup/amz_u_streams_all_gp',\n",
       " 'Datasets': ['amz_u_streams_all_ds'],\n",
       " 'RoleArn': 'arn:aws:iam::073138737237:role/amazonforecast',\n",
       " 'ResponseMetadata': {'RequestId': '65f3da31-2582-411f-bd65-4d915b19781e',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:27:06 GMT',\n",
       "   'x-amzn-requestid': '65f3da31-2582-411f-bd65-4d915b19781e',\n",
       "   'content-length': '226',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.describe_dataset_group(DatasetGroupName=datasetGroupName)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Data Import Job\n",
    "Brings the data into Amazon Forecast system ready to forecast from raw data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "85df5931\n"
     ]
    }
   ],
   "source": [
    "ds_import_job_response=forecast.create_dataset_import_job(DatasetName=datasetName,Delimiter=',', DatasetGroupName =datasetGroupName ,S3Uri= s3DataPath)\n",
    "ds_versionId=ds_import_job_response['VersionId']\n",
    "print(ds_versionId)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "QUEUED\n",
      "0\n",
      "CREATING\n",
      "1\n",
      "CREATING\n",
      "2\n",
      "CREATING\n",
      "3\n",
      "CREATING\n",
      "4\n",
      "CREATING\n",
      "5\n",
      "CREATING\n",
      "6\n",
      "CREATING\n",
      "7\n",
      "CREATING\n",
      "8\n",
      "CREATING\n",
      "9\n",
      "CREATING\n",
      "10\n",
      "CREATING\n",
      "11\n",
      "CREATING\n",
      "12\n",
      "CREATING\n",
      "13\n",
      "CREATING\n",
      "14\n",
      "CREATING\n",
      "15\n",
      "CREATING\n",
      "16\n",
      "CREATING\n",
      "17\n",
      "CREATING\n",
      "18\n",
      "CREATING\n",
      "19\n",
      "CREATING\n",
      "20\n",
      "CREATING\n",
      "21\n",
      "CREATING\n",
      "22\n",
      "CREATING\n",
      "23\n",
      "CREATING\n",
      "24\n",
      "CREATING\n",
      "25\n",
      "CREATING\n",
      "26\n",
      "CREATING\n",
      "27\n",
      "CREATING\n",
      "28\n",
      "CREATING\n",
      "29\n",
      "CREATING\n",
      "30\n",
      "CREATING\n",
      "31\n",
      "CREATING\n",
      "32\n",
      "CREATING\n",
      "33\n",
      "CREATING\n",
      "34\n",
      "CREATING\n",
      "35\n",
      "CREATING\n",
      "36\n",
      "CREATING\n",
      "37\n",
      "CREATING\n",
      "38\n",
      "CREATING\n",
      "39\n",
      "CREATING\n",
      "40\n",
      "CREATING\n",
      "41\n",
      "CREATING\n",
      "42\n",
      "CREATING\n",
      "43\n",
      "CREATING\n",
      "44\n",
      "CREATING\n",
      "45\n",
      "CREATING\n",
      "46\n",
      "CREATING\n",
      "47\n",
      "CREATING\n",
      "48\n",
      "CREATING\n",
      "49\n",
      "CREATING\n",
      "50\n",
      "CREATING\n",
      "51\n",
      "CREATING\n",
      "52\n",
      "CREATING\n",
      "53\n",
      "CREATING\n",
      "54\n",
      "CREATING\n",
      "55\n",
      "CREATING\n",
      "56\n",
      "CREATING\n",
      "57\n",
      "CREATING\n",
      "58\n",
      "CREATING\n",
      "59\n",
      "CREATING\n",
      "60\n",
      "CREATING\n",
      "61\n",
      "CREATING\n",
      "62\n",
      "CREATING\n",
      "63\n",
      "CREATING\n",
      "64\n",
      "CREATING\n",
      "65\n",
      "CREATING\n",
      "66\n",
      "ACTIVE\n",
      "67\n",
      "total time 680\n"
     ]
    }
   ],
   "source": [
    "i = 0\n",
    "while True:\n",
    "    dataImportStatus = forecast.describe_dataset_import_job(DatasetName=datasetName,VersionId=ds_versionId)['Status']\n",
    "    print(dataImportStatus)\n",
    "    print(i)\n",
    "    i=i+1\n",
    "    if dataImportStatus != 'ACTIVE' and dataImportStatus != 'FAILED':\n",
    "        sleep(10)\n",
    "    else:\n",
    "        break\n",
    "print('total time {}'.format(i*10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DatasetArn': 'arn:aws:forecast:us-west-2:073138737237:ds/amz_u_streams_all_ds',\n",
       " 'DatasetName': 'amz_u_streams_all_ds',\n",
       " 'VersionId': '85df5931',\n",
       " 'Status': 'ACTIVE',\n",
       " 'FieldStatistics': {'date': {'Count': 2639706,\n",
       "   'CountDistinct': 454,\n",
       "   'CountNull': 0,\n",
       "   'Min': '2017-09-30T00:00:00Z',\n",
       "   'Max': '2019-01-07T00:00:00Z'},\n",
       "  'item': {'Count': 2639706, 'CountDistinct': 33935, 'CountNull': 0},\n",
       "  'target': {'Count': 2639706,\n",
       "   'CountDistinct': 18611,\n",
       "   'CountNull': 0,\n",
       "   'Min': '1.0',\n",
       "   'Max': '567271.0',\n",
       "   'Avg': 18470.742827042104,\n",
       "   'Stddev': 9813.451034100292}},\n",
       " 'ResponseMetadata': {'RequestId': '1ce7a920-9cab-4973-bd2e-125c5903f08a',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:45:24 GMT',\n",
       "   'x-amzn-requestid': '1ce7a920-9cab-4973-bd2e-125c5903f08a',\n",
       "   'content-length': '500',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.describe_dataset_import_job(DatasetName=datasetName,VersionId=ds_versionId)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Recipe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'RecipeNames': ['forecast_ARIMA',\n",
       "  'forecast_DEEP_AR',\n",
       "  'forecast_DEEP_AR_PLUS',\n",
       "  'forecast_ETS',\n",
       "  'forecast_MDN',\n",
       "  'forecast_MQRNN',\n",
       "  'forecast_NPTS',\n",
       "  'forecast_PROPHET',\n",
       "  'forecast_SQF'],\n",
       " 'ResponseMetadata': {'RequestId': '39f1c0ae-a9f8-4429-8421-797fa58013d6',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:45:29 GMT',\n",
       "   'x-amzn-requestid': '39f1c0ae-a9f8-4429-8421-797fa58013d6',\n",
       "   'content-length': '174',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recipesResponse=forecast.list_recipes()\n",
    "recipesResponse"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get details about each recipe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Recipe': {'Name': 'forecast_MQRNN',\n",
       "  'Train': [{'TrainingInfo': {'TrainedModelName': 'algorithm_MQRNN',\n",
       "     'AlgorithmName': 'MQRNN',\n",
       "     'TrainingParameters': {'epochs': '60',\n",
       "      'learning_rate': '3E-3',\n",
       "      'mini_batch_size': '32',\n",
       "      'quantiles': '[0.1,0.5,0.9]'}},\n",
       "    'BackTestWindowCount': 1,\n",
       "    'MetricsBuckets': []}]},\n",
       " 'ResponseMetadata': {'RequestId': 'e14c7d9e-a336-4eee-b1a0-e4a1947b89b9',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:45:33 GMT',\n",
       "   'x-amzn-requestid': 'e14c7d9e-a336-4eee-b1a0-e4a1947b89b9',\n",
       "   'content-length': '281',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.describe_recipe(RecipeName='forecast_MQRNN')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create Solution with customer forecast horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Forecast horizon is how long in future the forecast should be predicting. For weekly data, a value of 12 means 1 weeks. Our example is hourly data, we try forecast the next day, so we can set to 24."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "predictorName= project+'_mqrnn'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecastHorizon = 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "createPredictorResponse=forecast.create_predictor(RecipeName='forecast_MQRNN',DatasetGroupName= datasetGroupName ,PredictorName=predictorName, \n",
    "  ForecastHorizon = forecastHorizon)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "predictorVerionId=createPredictorResponse['VersionId']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'PredictorVersions': [{'PredictorName': 'amz_u_streams_all_mqrnn',\n",
       "   'VersionId': '20125000'}],\n",
       " 'ResponseMetadata': {'RequestId': '4035403e-fc63-4ebf-9483-9ff8b402cda4',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 07:45:57 GMT',\n",
       "   'x-amzn-requestid': '4035403e-fc63-4ebf-9483-9ff8b402cda4',\n",
       "   'content-length': '90',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.list_predictor_versions(PredictorName=predictorName)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check the status of solutions, when the status change from **CREATING** to **ACTIVE**, we can continue to next steps. Depending on data size, model selection and hyper parameters，it can take 10 mins to more than one hour to be **ACTIVE**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CREATING\n",
      "0\n",
      "CREATING\n",
      "10\n",
      "CREATING\n",
      "20\n",
      "CREATING\n",
      "30\n",
      "CREATING\n",
      "40\n",
      "CREATING\n",
      "50\n",
      "CREATING\n",
      "60\n",
      "CREATING\n",
      "70\n",
      "CREATING\n",
      "80\n",
      "CREATING\n",
      "90\n",
      "CREATING\n",
      "100\n",
      "CREATING\n",
      "110\n",
      "CREATING\n",
      "120\n",
      "CREATING\n",
      "130\n",
      "CREATING\n",
      "140\n",
      "CREATING\n",
      "150\n",
      "CREATING\n",
      "160\n",
      "CREATING\n",
      "170\n",
      "CREATING\n",
      "180\n",
      "CREATING\n",
      "190\n",
      "CREATING\n",
      "200\n",
      "CREATING\n",
      "210\n",
      "CREATING\n",
      "220\n",
      "CREATING\n",
      "230\n",
      "CREATING\n",
      "240\n",
      "CREATING\n",
      "250\n",
      "CREATING\n",
      "260\n",
      "CREATING\n",
      "270\n",
      "CREATING\n",
      "280\n",
      "CREATING\n",
      "290\n",
      "CREATING\n",
      "300\n",
      "CREATING\n",
      "310\n",
      "CREATING\n",
      "320\n",
      "CREATING\n",
      "330\n",
      "CREATING\n",
      "340\n",
      "CREATING\n",
      "350\n",
      "CREATING\n",
      "360\n",
      "CREATING\n",
      "370\n",
      "CREATING\n",
      "380\n",
      "CREATING\n",
      "390\n",
      "CREATING\n",
      "400\n",
      "CREATING\n",
      "410\n",
      "CREATING\n",
      "420\n",
      "CREATING\n",
      "430\n",
      "CREATING\n",
      "440\n",
      "CREATING\n",
      "450\n",
      "CREATING\n",
      "460\n",
      "CREATING\n",
      "470\n",
      "CREATING\n",
      "480\n",
      "CREATING\n",
      "490\n",
      "CREATING\n",
      "500\n",
      "CREATING\n",
      "510\n",
      "CREATING\n",
      "520\n",
      "CREATING\n",
      "530\n",
      "CREATING\n",
      "540\n",
      "CREATING\n",
      "550\n",
      "CREATING\n",
      "560\n",
      "CREATING\n",
      "570\n",
      "CREATING\n",
      "580\n",
      "CREATING\n",
      "590\n",
      "CREATING\n",
      "600\n",
      "CREATING\n",
      "610\n",
      "CREATING\n",
      "620\n",
      "CREATING\n",
      "630\n",
      "CREATING\n",
      "640\n",
      "CREATING\n",
      "650\n",
      "CREATING\n",
      "660\n",
      "CREATING\n",
      "670\n",
      "CREATING\n",
      "680\n",
      "CREATING\n",
      "690\n",
      "CREATING\n",
      "700\n",
      "CREATING\n",
      "710\n",
      "CREATING\n",
      "720\n",
      "CREATING\n",
      "730\n",
      "CREATING\n",
      "740\n",
      "CREATING\n",
      "750\n",
      "CREATING\n",
      "760\n",
      "CREATING\n",
      "770\n",
      "CREATING\n",
      "780\n",
      "CREATING\n",
      "790\n",
      "CREATING\n",
      "800\n",
      "CREATING\n",
      "810\n",
      "CREATING\n",
      "820\n",
      "CREATING\n",
      "830\n",
      "CREATING\n",
      "840\n",
      "CREATING\n",
      "850\n",
      "CREATING\n",
      "860\n",
      "CREATING\n",
      "870\n",
      "CREATING\n",
      "880\n",
      "CREATING\n",
      "890\n",
      "CREATING\n",
      "900\n",
      "CREATING\n",
      "910\n",
      "CREATING\n",
      "920\n",
      "CREATING\n",
      "930\n",
      "CREATING\n",
      "940\n",
      "CREATING\n",
      "950\n",
      "CREATING\n",
      "960\n",
      "CREATING\n",
      "970\n",
      "CREATING\n",
      "980\n",
      "CREATING\n",
      "990\n",
      "CREATING\n",
      "1000\n",
      "CREATING\n",
      "1010\n",
      "CREATING\n",
      "1020\n",
      "CREATING\n",
      "1030\n",
      "CREATING\n",
      "1040\n",
      "CREATING\n",
      "1050\n",
      "CREATING\n",
      "1060\n",
      "CREATING\n",
      "1070\n",
      "CREATING\n",
      "1080\n",
      "CREATING\n",
      "1090\n",
      "CREATING\n",
      "1100\n",
      "CREATING\n",
      "1110\n",
      "CREATING\n",
      "1120\n",
      "CREATING\n",
      "1130\n",
      "CREATING\n",
      "1140\n",
      "CREATING\n",
      "1150\n",
      "CREATING\n",
      "1160\n",
      "CREATING\n",
      "1170\n",
      "CREATING\n",
      "1180\n",
      "CREATING\n",
      "1190\n",
      "CREATING\n",
      "1200\n",
      "CREATING\n",
      "1210\n",
      "CREATING\n",
      "1220\n",
      "CREATING\n",
      "1230\n",
      "CREATING\n",
      "1240\n",
      "CREATING\n",
      "1250\n",
      "CREATING\n",
      "1260\n",
      "CREATING\n",
      "1270\n",
      "CREATING\n",
      "1280\n",
      "CREATING\n",
      "1290\n",
      "CREATING\n",
      "1300\n",
      "CREATING\n",
      "1310\n",
      "CREATING\n",
      "1320\n",
      "CREATING\n",
      "1330\n",
      "CREATING\n",
      "1340\n",
      "CREATING\n",
      "1350\n",
      "CREATING\n",
      "1360\n",
      "CREATING\n",
      "1370\n",
      "CREATING\n",
      "1380\n",
      "CREATING\n",
      "1390\n",
      "CREATING\n",
      "1400\n",
      "CREATING\n",
      "1410\n",
      "CREATING\n",
      "1420\n",
      "CREATING\n",
      "1430\n",
      "CREATING\n",
      "1440\n",
      "CREATING\n",
      "1450\n",
      "CREATING\n",
      "1460\n",
      "CREATING\n",
      "1470\n",
      "CREATING\n",
      "1480\n",
      "CREATING\n",
      "1490\n",
      "CREATING\n",
      "1500\n",
      "CREATING\n",
      "1510\n",
      "CREATING\n",
      "1520\n",
      "CREATING\n",
      "1530\n",
      "CREATING\n",
      "1540\n",
      "CREATING\n",
      "1550\n",
      "CREATING\n",
      "1560\n",
      "CREATING\n",
      "1570\n",
      "CREATING\n",
      "1580\n",
      "CREATING\n",
      "1590\n",
      "CREATING\n",
      "1600\n",
      "CREATING\n",
      "1610\n",
      "CREATING\n",
      "1620\n",
      "CREATING\n",
      "1630\n",
      "CREATING\n",
      "1640\n",
      "CREATING\n",
      "1650\n",
      "CREATING\n",
      "1660\n",
      "CREATING\n",
      "1670\n",
      "CREATING\n",
      "1680\n",
      "CREATING\n",
      "1690\n",
      "CREATING\n",
      "1700\n",
      "CREATING\n",
      "1710\n",
      "CREATING\n",
      "1720\n",
      "CREATING\n",
      "1730\n",
      "CREATING\n",
      "1740\n",
      "CREATING\n",
      "1750\n",
      "CREATING\n",
      "1760\n",
      "CREATING\n",
      "1770\n",
      "CREATING\n",
      "1780\n",
      "CREATING\n",
      "1790\n",
      "CREATING\n",
      "1800\n",
      "CREATING\n",
      "1810\n",
      "CREATING\n",
      "1820\n",
      "CREATING\n",
      "1830\n",
      "CREATING\n",
      "1840\n",
      "CREATING\n",
      "1850\n",
      "CREATING\n",
      "1860\n",
      "CREATING\n",
      "1870\n",
      "CREATING\n",
      "1880\n",
      "CREATING\n",
      "1890\n",
      "CREATING\n",
      "1900\n",
      "CREATING\n",
      "1910\n",
      "CREATING\n",
      "1920\n",
      "CREATING\n",
      "1930\n",
      "CREATING\n",
      "1940\n",
      "CREATING\n",
      "1950\n",
      "CREATING\n",
      "1960\n",
      "CREATING\n",
      "1970\n",
      "CREATING\n",
      "1980\n",
      "CREATING\n",
      "1990\n",
      "CREATING\n",
      "2000\n",
      "CREATING\n",
      "2010\n",
      "CREATING\n",
      "2020\n",
      "CREATING\n",
      "2030\n",
      "CREATING\n",
      "2040\n",
      "CREATING\n",
      "2050\n",
      "CREATING\n",
      "2060\n",
      "CREATING\n",
      "2070\n",
      "CREATING\n",
      "2080\n",
      "CREATING\n",
      "2090\n",
      "CREATING\n",
      "2100\n",
      "CREATING\n",
      "2110\n",
      "CREATING\n",
      "2120\n",
      "CREATING\n",
      "2130\n",
      "CREATING\n",
      "2140\n",
      "CREATING\n",
      "2150\n",
      "CREATING\n",
      "2160\n",
      "CREATING\n",
      "2170\n",
      "CREATING\n",
      "2180\n",
      "CREATING\n",
      "2190\n",
      "CREATING\n",
      "2200\n",
      "CREATING\n",
      "2210\n",
      "CREATING\n",
      "2220\n",
      "CREATING\n",
      "2230\n",
      "CREATING\n",
      "2240\n",
      "CREATING\n",
      "2250\n",
      "CREATING\n",
      "2260\n",
      "CREATING\n",
      "2270\n",
      "CREATING\n",
      "2280\n",
      "CREATING\n",
      "2290\n",
      "CREATING\n",
      "2300\n",
      "CREATING\n",
      "2310\n",
      "CREATING\n",
      "2320\n",
      "CREATING\n",
      "2330\n",
      "CREATING\n",
      "2340\n",
      "CREATING\n",
      "2350\n",
      "CREATING\n",
      "2360\n",
      "CREATING\n",
      "2370\n",
      "CREATING\n",
      "2380\n",
      "CREATING\n",
      "2390\n",
      "CREATING\n",
      "2400\n",
      "CREATING\n",
      "2410\n",
      "CREATING\n",
      "2420\n",
      "CREATING\n",
      "2430\n",
      "CREATING\n",
      "2440\n",
      "CREATING\n",
      "2450\n",
      "CREATING\n",
      "2460\n",
      "CREATING\n",
      "2470\n",
      "CREATING\n",
      "2480\n",
      "CREATING\n",
      "2490\n",
      "CREATING\n",
      "2500\n",
      "CREATING\n",
      "2510\n",
      "CREATING\n",
      "2520\n",
      "CREATING\n",
      "2530\n",
      "CREATING\n",
      "2540\n",
      "CREATING\n",
      "2550\n",
      "CREATING\n",
      "2560\n",
      "CREATING\n",
      "2570\n",
      "CREATING\n",
      "2580\n",
      "CREATING\n",
      "2590\n",
      "CREATING\n",
      "2600\n",
      "CREATING\n",
      "2610\n",
      "CREATING\n",
      "2620\n",
      "CREATING\n",
      "2630\n",
      "CREATING\n",
      "2640\n",
      "CREATING\n",
      "2650\n",
      "CREATING\n",
      "2660\n",
      "CREATING\n",
      "2670\n",
      "CREATING\n",
      "2680\n",
      "CREATING\n",
      "2690\n",
      "CREATING\n",
      "2700\n",
      "CREATING\n",
      "2710\n",
      "CREATING\n",
      "2720\n",
      "CREATING\n",
      "2730\n",
      "CREATING\n",
      "2740\n",
      "CREATING\n",
      "2750\n",
      "CREATING\n",
      "2760\n",
      "CREATING\n",
      "2770\n",
      "CREATING\n",
      "2780\n",
      "CREATING\n",
      "2790\n",
      "CREATING\n",
      "2800\n",
      "CREATING\n",
      "2810\n",
      "CREATING\n",
      "2820\n",
      "CREATING\n",
      "2830\n",
      "CREATING\n",
      "2840\n",
      "CREATING\n",
      "2850\n",
      "CREATING\n",
      "2860\n",
      "CREATING\n",
      "2870\n",
      "CREATING\n",
      "2880\n",
      "CREATING\n",
      "2890\n",
      "CREATING\n",
      "2900\n",
      "CREATING\n",
      "2910\n",
      "CREATING\n",
      "2920\n",
      "CREATING\n",
      "2930\n",
      "CREATING\n",
      "2940\n",
      "CREATING\n",
      "2950\n",
      "CREATING\n",
      "2960\n",
      "CREATING\n",
      "2970\n",
      "CREATING\n",
      "2980\n",
      "CREATING\n",
      "2990\n",
      "CREATING\n",
      "3000\n",
      "CREATING\n",
      "3010\n",
      "CREATING\n",
      "3020\n",
      "CREATING\n",
      "3030\n",
      "CREATING\n",
      "3040\n",
      "CREATING\n",
      "3050\n",
      "CREATING\n",
      "3060\n",
      "CREATING\n",
      "3070\n",
      "CREATING\n",
      "3080\n",
      "CREATING\n",
      "3090\n",
      "CREATING\n",
      "3100\n",
      "CREATING\n",
      "3110\n",
      "CREATING\n",
      "3120\n",
      "CREATING\n",
      "3130\n",
      "CREATING\n",
      "3140\n",
      "CREATING\n",
      "3150\n",
      "CREATING\n",
      "3160\n",
      "CREATING\n",
      "3170\n",
      "CREATING\n",
      "3180\n",
      "CREATING\n",
      "3190\n",
      "CREATING\n",
      "3200\n",
      "CREATING\n",
      "3210\n",
      "CREATING\n",
      "3220\n",
      "CREATING\n",
      "3230\n",
      "CREATING\n",
      "3240\n",
      "CREATING\n",
      "3250\n",
      "CREATING\n",
      "3260\n",
      "CREATING\n",
      "3270\n",
      "CREATING\n",
      "3280\n",
      "CREATING\n",
      "3290\n",
      "CREATING\n",
      "3300\n",
      "CREATING\n",
      "3310\n",
      "CREATING\n",
      "3320\n",
      "CREATING\n",
      "3330\n",
      "CREATING\n",
      "3340\n",
      "CREATING\n",
      "3350\n",
      "CREATING\n",
      "3360\n",
      "CREATING\n",
      "3370\n",
      "CREATING\n",
      "3380\n",
      "CREATING\n",
      "3390\n",
      "CREATING\n",
      "3400\n",
      "CREATING\n",
      "3410\n",
      "CREATING\n",
      "3420\n",
      "CREATING\n",
      "3430\n",
      "CREATING\n",
      "3440\n",
      "CREATING\n",
      "3450\n",
      "CREATING\n",
      "3460\n",
      "CREATING\n",
      "3470\n",
      "CREATING\n",
      "3480\n",
      "CREATING\n",
      "3490\n",
      "CREATING\n",
      "3500\n",
      "CREATING\n",
      "3510\n",
      "CREATING\n",
      "3520\n",
      "CREATING\n",
      "3530\n",
      "CREATING\n",
      "3540\n",
      "CREATING\n",
      "3550\n",
      "CREATING\n",
      "3560\n",
      "CREATING\n",
      "3570\n",
      "CREATING\n",
      "3580\n",
      "CREATING\n",
      "3590\n",
      "CREATING\n",
      "3600\n",
      "CREATING\n",
      "3610\n",
      "CREATING\n",
      "3620\n",
      "CREATING\n",
      "3630\n",
      "CREATING\n",
      "3640\n",
      "CREATING\n",
      "3650\n",
      "CREATING\n",
      "3660\n",
      "CREATING\n",
      "3670\n",
      "CREATING\n",
      "3680\n",
      "CREATING\n",
      "3690\n",
      "CREATING\n",
      "3700\n",
      "CREATING\n",
      "3710\n",
      "CREATING\n",
      "3720\n",
      "CREATING\n",
      "3730\n",
      "CREATING\n",
      "3740\n",
      "CREATING\n",
      "3750\n",
      "CREATING\n",
      "3760\n",
      "CREATING\n",
      "3770\n",
      "CREATING\n",
      "3780\n",
      "CREATING\n",
      "3790\n",
      "CREATING\n",
      "3800\n",
      "CREATING\n",
      "3810\n",
      "CREATING\n",
      "3820\n",
      "CREATING\n",
      "3830\n",
      "CREATING\n",
      "3840\n",
      "CREATING\n",
      "3850\n",
      "CREATING\n",
      "3860\n",
      "CREATING\n",
      "3870\n",
      "CREATING\n",
      "3880\n",
      "CREATING\n",
      "3890\n",
      "CREATING\n",
      "3900\n",
      "CREATING\n",
      "3910\n",
      "CREATING\n",
      "3920\n",
      "CREATING\n",
      "3930\n",
      "CREATING\n",
      "3940\n",
      "CREATING\n",
      "3950\n",
      "CREATING\n",
      "3960\n",
      "CREATING\n",
      "3970\n",
      "CREATING\n",
      "3980\n",
      "CREATING\n",
      "3990\n",
      "CREATING\n",
      "4000\n",
      "CREATING\n",
      "4010\n",
      "CREATING\n",
      "4020\n",
      "CREATING\n",
      "4030\n",
      "CREATING\n",
      "4040\n",
      "CREATING\n",
      "4050\n",
      "CREATING\n",
      "4060\n",
      "CREATING\n",
      "4070\n",
      "CREATING\n",
      "4080\n",
      "CREATING\n",
      "4090\n",
      "CREATING\n",
      "4100\n",
      "CREATING\n",
      "4110\n",
      "CREATING\n",
      "4120\n",
      "CREATING\n",
      "4130\n",
      "CREATING\n",
      "4140\n",
      "CREATING\n",
      "4150\n",
      "CREATING\n",
      "4160\n",
      "CREATING\n",
      "4170\n",
      "CREATING\n",
      "4180\n",
      "CREATING\n",
      "4190\n",
      "CREATING\n",
      "4200\n",
      "CREATING\n",
      "4210\n",
      "CREATING\n",
      "4220\n",
      "CREATING\n",
      "4230\n",
      "CREATING\n",
      "4240\n",
      "CREATING\n",
      "4250\n",
      "CREATING\n",
      "4260\n",
      "CREATING\n",
      "4270\n",
      "CREATING\n",
      "4280\n",
      "CREATING\n",
      "4290\n",
      "CREATING\n",
      "4300\n",
      "CREATING\n",
      "4310\n",
      "CREATING\n",
      "4320\n",
      "CREATING\n",
      "4330\n",
      "CREATING\n",
      "4340\n",
      "CREATING\n",
      "4350\n",
      "CREATING\n",
      "4360\n",
      "CREATING\n",
      "4370\n",
      "CREATING\n",
      "4380\n",
      "CREATING\n",
      "4390\n",
      "CREATING\n",
      "4400\n",
      "CREATING\n",
      "4410\n",
      "CREATING\n",
      "4420\n",
      "CREATING\n",
      "4430\n",
      "CREATING\n",
      "4440\n",
      "CREATING\n",
      "4450\n",
      "CREATING\n",
      "4460\n",
      "CREATING\n",
      "4470\n",
      "CREATING\n",
      "4480\n",
      "CREATING\n",
      "4490\n",
      "CREATING\n",
      "4500\n",
      "CREATING\n",
      "4510\n",
      "CREATING\n",
      "4520\n",
      "CREATING\n",
      "4530\n",
      "CREATING\n",
      "4540\n",
      "CREATING\n",
      "4550\n",
      "CREATING\n",
      "4560\n",
      "CREATING\n",
      "4570\n",
      "CREATING\n",
      "4580\n",
      "CREATING\n",
      "4590\n",
      "CREATING\n",
      "4600\n",
      "CREATING\n",
      "4610\n",
      "CREATING\n",
      "4620\n",
      "CREATING\n",
      "4630\n",
      "CREATING\n",
      "4640\n",
      "CREATING\n",
      "4650\n",
      "CREATING\n",
      "4660\n",
      "CREATING\n",
      "4670\n",
      "CREATING\n",
      "4680\n",
      "CREATING\n",
      "4690\n",
      "CREATING\n",
      "4700\n",
      "CREATING\n",
      "4710\n",
      "CREATING\n",
      "4720\n",
      "CREATING\n",
      "4730\n",
      "CREATING\n",
      "4740\n",
      "CREATING\n",
      "4750\n",
      "CREATING\n",
      "4760\n",
      "CREATING\n",
      "4770\n",
      "CREATING\n",
      "4780\n",
      "CREATING\n",
      "4790\n",
      "CREATING\n",
      "4800\n",
      "CREATING\n",
      "4810\n",
      "CREATING\n",
      "4820\n",
      "CREATING\n",
      "4830\n",
      "CREATING\n",
      "4840\n",
      "CREATING\n",
      "4850\n",
      "CREATING\n",
      "4860\n",
      "CREATING\n",
      "4870\n",
      "CREATING\n",
      "4880\n",
      "CREATING\n",
      "4890\n",
      "CREATING\n",
      "4900\n",
      "CREATING\n",
      "4910\n",
      "CREATING\n",
      "4920\n",
      "CREATING\n",
      "4930\n",
      "CREATING\n",
      "4940\n",
      "CREATING\n",
      "4950\n",
      "CREATING\n",
      "4960\n",
      "CREATING\n",
      "4970\n",
      "CREATING\n",
      "4980\n",
      "CREATING\n",
      "4990\n",
      "CREATING\n",
      "5000\n",
      "CREATING\n",
      "5010\n",
      "CREATING\n",
      "5020\n",
      "CREATING\n",
      "5030\n",
      "CREATING\n",
      "5040\n",
      "CREATING\n",
      "5050\n",
      "CREATING\n",
      "5060\n",
      "CREATING\n",
      "5070\n",
      "CREATING\n",
      "5080\n",
      "CREATING\n",
      "5090\n",
      "CREATING\n",
      "5100\n",
      "CREATING\n",
      "5110\n",
      "CREATING\n",
      "5120\n",
      "CREATING\n",
      "5130\n",
      "CREATING\n",
      "5140\n",
      "CREATING\n",
      "5150\n",
      "CREATING\n",
      "5160\n",
      "CREATING\n",
      "5170\n",
      "CREATING\n",
      "5180\n",
      "CREATING\n",
      "5190\n",
      "CREATING\n",
      "5200\n",
      "CREATING\n",
      "5210\n",
      "CREATING\n",
      "5220\n",
      "CREATING\n",
      "5230\n",
      "CREATING\n",
      "5240\n",
      "CREATING\n",
      "5250\n",
      "CREATING\n",
      "5260\n",
      "CREATING\n",
      "5270\n",
      "CREATING\n",
      "5280\n",
      "CREATING\n",
      "5290\n",
      "CREATING\n",
      "5300\n",
      "CREATING\n",
      "5310\n",
      "CREATING\n",
      "5320\n",
      "CREATING\n",
      "5330\n",
      "CREATING\n",
      "5340\n",
      "CREATING\n",
      "5350\n",
      "CREATING\n",
      "5360\n",
      "CREATING\n",
      "5370\n",
      "CREATING\n",
      "5380\n",
      "CREATING\n",
      "5390\n",
      "CREATING\n",
      "5400\n",
      "CREATING\n",
      "5410\n",
      "CREATING\n",
      "5420\n",
      "CREATING\n",
      "5430\n",
      "CREATING\n",
      "5440\n",
      "CREATING\n",
      "5450\n",
      "CREATING\n",
      "5460\n",
      "CREATING\n",
      "5470\n",
      "CREATING\n",
      "5480\n",
      "CREATING\n",
      "5490\n",
      "CREATING\n",
      "5500\n",
      "CREATING\n",
      "5510\n",
      "CREATING\n",
      "5520\n",
      "CREATING\n",
      "5530\n",
      "CREATING\n",
      "5540\n",
      "CREATING\n",
      "5550\n",
      "CREATING\n",
      "5560\n",
      "CREATING\n",
      "5570\n",
      "CREATING\n",
      "5580\n",
      "CREATING\n",
      "5590\n",
      "CREATING\n",
      "5600\n",
      "CREATING\n",
      "5610\n",
      "CREATING\n",
      "5620\n",
      "CREATING\n",
      "5630\n",
      "CREATING\n",
      "5640\n",
      "CREATING\n",
      "5650\n",
      "CREATING\n",
      "5660\n",
      "CREATING\n",
      "5670\n",
      "CREATING\n",
      "5680\n",
      "CREATING\n",
      "5690\n",
      "CREATING\n",
      "5700\n",
      "CREATING\n",
      "5710\n",
      "CREATING\n",
      "5720\n",
      "CREATING\n",
      "5730\n",
      "CREATING\n",
      "5740\n",
      "CREATING\n",
      "5750\n",
      "CREATING\n",
      "5760\n",
      "CREATING\n",
      "5770\n",
      "CREATING\n",
      "5780\n",
      "CREATING\n",
      "5790\n",
      "CREATING\n",
      "5800\n",
      "CREATING\n",
      "5810\n",
      "CREATING\n",
      "5820\n",
      "CREATING\n",
      "5830\n",
      "CREATING\n",
      "5840\n",
      "CREATING\n",
      "5850\n",
      "CREATING\n",
      "5860\n",
      "CREATING\n",
      "5870\n",
      "CREATING\n",
      "5880\n",
      "CREATING\n",
      "5890\n",
      "CREATING\n",
      "5900\n",
      "CREATING\n",
      "5910\n",
      "CREATING\n",
      "5920\n",
      "CREATING\n",
      "5930\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CREATING\n",
      "5940\n",
      "CREATING\n",
      "5950\n",
      "CREATING\n",
      "5960\n",
      "CREATING\n",
      "5970\n",
      "CREATING\n",
      "5980\n",
      "CREATING\n",
      "5990\n",
      "CREATING\n",
      "6000\n",
      "CREATING\n",
      "6010\n",
      "CREATING\n",
      "6020\n",
      "CREATING\n",
      "6030\n",
      "CREATING\n",
      "6040\n",
      "CREATING\n",
      "6050\n",
      "CREATING\n",
      "6060\n",
      "CREATING\n",
      "6070\n",
      "CREATING\n",
      "6080\n",
      "CREATING\n",
      "6090\n",
      "CREATING\n",
      "6100\n",
      "CREATING\n",
      "6110\n",
      "CREATING\n",
      "6120\n",
      "CREATING\n",
      "6130\n",
      "CREATING\n",
      "6140\n",
      "CREATING\n",
      "6150\n",
      "CREATING\n",
      "6160\n",
      "CREATING\n",
      "6170\n",
      "CREATING\n",
      "6180\n",
      "CREATING\n",
      "6190\n",
      "CREATING\n",
      "6200\n",
      "CREATING\n",
      "6210\n",
      "CREATING\n",
      "6220\n",
      "CREATING\n",
      "6230\n",
      "CREATING\n",
      "6240\n",
      "CREATING\n",
      "6250\n",
      "CREATING\n",
      "6260\n",
      "CREATING\n",
      "6270\n",
      "CREATING\n",
      "6280\n",
      "CREATING\n",
      "6290\n",
      "CREATING\n",
      "6300\n",
      "CREATING\n",
      "6310\n",
      "CREATING\n",
      "6320\n",
      "CREATING\n",
      "6330\n",
      "CREATING\n",
      "6340\n",
      "CREATING\n",
      "6350\n",
      "CREATING\n",
      "6360\n",
      "CREATING\n",
      "6370\n",
      "CREATING\n",
      "6380\n",
      "CREATING\n",
      "6390\n",
      "CREATING\n",
      "6400\n",
      "CREATING\n",
      "6410\n",
      "CREATING\n",
      "6420\n",
      "CREATING\n",
      "6430\n",
      "CREATING\n",
      "6440\n",
      "CREATING\n",
      "6450\n",
      "CREATING\n",
      "6460\n",
      "CREATING\n",
      "6470\n",
      "CREATING\n",
      "6480\n",
      "CREATING\n",
      "6490\n",
      "CREATING\n",
      "6500\n",
      "CREATING\n",
      "6510\n",
      "CREATING\n",
      "6520\n",
      "CREATING\n",
      "6530\n",
      "CREATING\n",
      "6540\n",
      "CREATING\n",
      "6550\n",
      "CREATING\n",
      "6560\n",
      "CREATING\n",
      "6570\n",
      "CREATING\n",
      "6580\n",
      "CREATING\n",
      "6590\n",
      "CREATING\n",
      "6600\n",
      "CREATING\n",
      "6610\n",
      "CREATING\n",
      "6620\n",
      "CREATING\n",
      "6630\n",
      "CREATING\n",
      "6640\n",
      "CREATING\n",
      "6650\n",
      "CREATING\n",
      "6660\n",
      "CREATING\n",
      "6670\n",
      "CREATING\n",
      "6680\n",
      "CREATING\n",
      "6690\n",
      "CREATING\n",
      "6700\n",
      "CREATING\n",
      "6710\n",
      "CREATING\n",
      "6720\n",
      "CREATING\n",
      "6730\n",
      "CREATING\n",
      "6740\n",
      "CREATING\n",
      "6750\n",
      "CREATING\n",
      "6760\n",
      "CREATING\n",
      "6770\n",
      "CREATING\n",
      "6780\n",
      "CREATING\n",
      "6790\n",
      "CREATING\n",
      "6800\n",
      "CREATING\n",
      "6810\n",
      "CREATING\n",
      "6820\n",
      "CREATING\n",
      "6830\n",
      "CREATING\n",
      "6840\n",
      "CREATING\n",
      "6850\n",
      "CREATING\n",
      "6860\n",
      "CREATING\n",
      "6870\n",
      "CREATING\n",
      "6880\n",
      "CREATING\n",
      "6890\n",
      "CREATING\n",
      "6900\n",
      "CREATING\n",
      "6910\n",
      "CREATING\n",
      "6920\n",
      "CREATING\n",
      "6930\n",
      "CREATING\n",
      "6940\n",
      "CREATING\n",
      "6950\n",
      "CREATING\n",
      "6960\n",
      "CREATING\n",
      "6970\n",
      "CREATING\n",
      "6980\n",
      "CREATING\n",
      "6990\n",
      "CREATING\n",
      "7000\n",
      "CREATING\n",
      "7010\n",
      "CREATING\n",
      "7020\n",
      "CREATING\n",
      "7030\n",
      "CREATING\n",
      "7040\n",
      "CREATING\n",
      "7050\n",
      "CREATING\n",
      "7060\n",
      "CREATING\n",
      "7070\n",
      "CREATING\n",
      "7080\n",
      "CREATING\n",
      "7090\n",
      "CREATING\n",
      "7100\n",
      "CREATING\n",
      "7110\n",
      "CREATING\n",
      "7120\n",
      "CREATING\n",
      "7130\n",
      "CREATING\n",
      "7140\n",
      "CREATING\n",
      "7150\n",
      "CREATING\n",
      "7160\n",
      "CREATING\n",
      "7170\n",
      "CREATING\n",
      "7180\n",
      "CREATING\n",
      "7190\n",
      "CREATING\n",
      "7200\n",
      "CREATING\n",
      "7210\n",
      "CREATING\n",
      "7220\n",
      "CREATING\n",
      "7230\n",
      "CREATING\n",
      "7240\n",
      "CREATING\n",
      "7250\n",
      "CREATING\n",
      "7260\n",
      "CREATING\n",
      "7270\n",
      "CREATING\n",
      "7280\n",
      "CREATING\n",
      "7290\n",
      "CREATING\n",
      "7300\n",
      "CREATING\n",
      "7310\n",
      "CREATING\n",
      "7320\n",
      "CREATING\n",
      "7330\n",
      "CREATING\n",
      "7340\n",
      "CREATING\n",
      "7350\n",
      "CREATING\n",
      "7360\n",
      "CREATING\n",
      "7370\n",
      "CREATING\n",
      "7380\n",
      "CREATING\n",
      "7390\n",
      "CREATING\n",
      "7400\n",
      "CREATING\n",
      "7410\n",
      "CREATING\n",
      "7420\n",
      "CREATING\n",
      "7430\n",
      "CREATING\n",
      "7440\n",
      "CREATING\n",
      "7450\n",
      "CREATING\n",
      "7460\n",
      "CREATING\n",
      "7470\n",
      "CREATING\n",
      "7480\n",
      "CREATING\n",
      "7490\n",
      "CREATING\n",
      "7500\n",
      "CREATING\n",
      "7510\n",
      "CREATING\n",
      "7520\n",
      "CREATING\n",
      "7530\n",
      "CREATING\n",
      "7540\n",
      "CREATING\n",
      "7550\n",
      "CREATING\n",
      "7560\n",
      "CREATING\n",
      "7570\n",
      "CREATING\n",
      "7580\n",
      "CREATING\n",
      "7590\n",
      "CREATING\n",
      "7600\n",
      "CREATING\n",
      "7610\n",
      "CREATING\n",
      "7620\n",
      "CREATING\n",
      "7630\n",
      "CREATING\n",
      "7640\n",
      "CREATING\n",
      "7650\n",
      "CREATING\n",
      "7660\n",
      "CREATING\n",
      "7670\n",
      "CREATING\n",
      "7680\n",
      "CREATING\n",
      "7690\n",
      "CREATING\n",
      "7700\n",
      "CREATING\n",
      "7710\n",
      "CREATING\n",
      "7720\n",
      "CREATING\n",
      "7730\n",
      "CREATING\n",
      "7740\n",
      "CREATING\n",
      "7750\n",
      "CREATING\n",
      "7760\n",
      "CREATING\n",
      "7770\n",
      "CREATING\n",
      "7780\n",
      "CREATING\n",
      "7790\n",
      "CREATING\n",
      "7800\n",
      "CREATING\n",
      "7810\n",
      "CREATING\n",
      "7820\n",
      "CREATING\n",
      "7830\n",
      "CREATING\n",
      "7840\n",
      "CREATING\n",
      "7850\n",
      "CREATING\n",
      "7860\n",
      "CREATING\n",
      "7870\n",
      "CREATING\n",
      "7880\n",
      "CREATING\n",
      "7890\n",
      "CREATING\n",
      "7900\n",
      "CREATING\n",
      "7910\n",
      "CREATING\n",
      "7920\n",
      "CREATING\n",
      "7930\n",
      "CREATING\n",
      "7940\n",
      "CREATING\n",
      "7950\n",
      "CREATING\n",
      "7960\n",
      "CREATING\n",
      "7970\n",
      "CREATING\n",
      "7980\n",
      "CREATING\n",
      "7990\n",
      "CREATING\n",
      "8000\n",
      "CREATING\n",
      "8010\n",
      "CREATING\n",
      "8020\n",
      "CREATING\n",
      "8030\n",
      "CREATING\n",
      "8040\n",
      "CREATING\n",
      "8050\n",
      "CREATING\n",
      "8060\n",
      "CREATING\n",
      "8070\n",
      "CREATING\n",
      "8080\n",
      "CREATING\n",
      "8090\n",
      "CREATING\n",
      "8100\n",
      "CREATING\n",
      "8110\n",
      "CREATING\n",
      "8120\n",
      "CREATING\n",
      "8130\n",
      "CREATING\n",
      "8140\n",
      "CREATING\n",
      "8150\n",
      "CREATING\n",
      "8160\n",
      "CREATING\n",
      "8170\n",
      "CREATING\n",
      "8180\n",
      "CREATING\n",
      "8190\n",
      "CREATING\n",
      "8200\n",
      "CREATING\n",
      "8210\n",
      "CREATING\n",
      "8220\n",
      "CREATING\n",
      "8230\n",
      "CREATING\n",
      "8240\n",
      "CREATING\n",
      "8250\n",
      "CREATING\n",
      "8260\n",
      "CREATING\n",
      "8270\n",
      "CREATING\n",
      "8280\n",
      "CREATING\n",
      "8290\n",
      "CREATING\n",
      "8300\n",
      "CREATING\n",
      "8310\n",
      "CREATING\n",
      "8320\n",
      "CREATING\n",
      "8330\n",
      "CREATING\n",
      "8340\n",
      "CREATING\n",
      "8350\n",
      "CREATING\n",
      "8360\n",
      "CREATING\n",
      "8370\n",
      "CREATING\n",
      "8380\n",
      "CREATING\n",
      "8390\n",
      "CREATING\n",
      "8400\n",
      "CREATING\n",
      "8410\n",
      "CREATING\n",
      "8420\n",
      "CREATING\n",
      "8430\n",
      "CREATING\n",
      "8440\n",
      "CREATING\n",
      "8450\n",
      "CREATING\n",
      "8460\n",
      "CREATING\n",
      "8470\n",
      "CREATING\n",
      "8480\n",
      "CREATING\n",
      "8490\n",
      "CREATING\n",
      "8500\n",
      "CREATING\n",
      "8510\n",
      "CREATING\n",
      "8520\n",
      "CREATING\n",
      "8530\n",
      "CREATING\n",
      "8540\n",
      "CREATING\n",
      "8550\n",
      "CREATING\n",
      "8560\n",
      "CREATING\n",
      "8570\n",
      "CREATING\n",
      "8580\n",
      "CREATING\n",
      "8590\n",
      "CREATING\n",
      "8600\n",
      "CREATING\n",
      "8610\n",
      "CREATING\n",
      "8620\n",
      "CREATING\n",
      "8630\n",
      "CREATING\n",
      "8640\n",
      "CREATING\n",
      "8650\n",
      "CREATING\n",
      "8660\n",
      "CREATING\n",
      "8670\n",
      "CREATING\n",
      "8680\n",
      "CREATING\n",
      "8690\n",
      "CREATING\n",
      "8700\n",
      "CREATING\n",
      "8710\n",
      "CREATING\n",
      "8720\n",
      "CREATING\n",
      "8730\n",
      "CREATING\n",
      "8740\n",
      "CREATING\n",
      "8750\n",
      "CREATING\n",
      "8760\n",
      "CREATING\n",
      "8770\n",
      "CREATING\n",
      "8780\n",
      "CREATING\n",
      "8790\n",
      "CREATING\n",
      "8800\n",
      "CREATING\n",
      "8810\n",
      "CREATING\n",
      "8820\n",
      "CREATING\n",
      "8830\n",
      "CREATING\n",
      "8840\n",
      "CREATING\n",
      "8850\n",
      "CREATING\n",
      "8860\n",
      "CREATING\n",
      "8870\n",
      "CREATING\n",
      "8880\n",
      "CREATING\n",
      "8890\n",
      "CREATING\n",
      "8900\n",
      "CREATING\n",
      "8910\n",
      "CREATING\n",
      "8920\n",
      "CREATING\n",
      "8930\n",
      "CREATING\n",
      "8940\n",
      "CREATING\n",
      "8950\n",
      "CREATING\n",
      "8960\n",
      "CREATING\n",
      "8970\n",
      "CREATING\n",
      "8980\n",
      "CREATING\n",
      "8990\n",
      "CREATING\n",
      "9000\n",
      "CREATING\n",
      "9010\n",
      "CREATING\n",
      "9020\n",
      "CREATING\n",
      "9030\n",
      "CREATING\n",
      "9040\n",
      "ACTIVE\n",
      "9050\n",
      "total time 9060\n"
     ]
    }
   ],
   "source": [
    "i = 0\n",
    "while True:\n",
    "    predictorStatus = forecast.describe_predictor(PredictorName=predictorName,VersionId=predictorVerionId)['Status']\n",
    "    print(predictorStatus)\n",
    "    print(i*10)\n",
    "    i=i+1\n",
    "    if predictorStatus != 'ACTIVE' and predictorStatus != 'FAILED':\n",
    "        sleep(10)\n",
    "    else:\n",
    "        break\n",
    "print('total time {}'.format(i*10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'PredictorName': 'amz_u_streams_all_mqrnn',\n",
       " 'VersionId': '20125000',\n",
       " 'Status': 'ACTIVE',\n",
       " 'CreationStartTime': '2019-01-11T07:45:49.954Z',\n",
       " 'CreationCompleteTime': '2019-01-11T10:18:11.847Z',\n",
       " 'LastModificationTime': '2019-01-11T10:18:11.847Z',\n",
       " 'PredictorArn': 'arn:aws:forecast:us-west-2:073138737237:predictor/amz_u_streams_all_mqrnn',\n",
       " 'RecipeName': 'forecast_MQRNN',\n",
       " 'DatasetGroup': 'amz_u_streams_all_gp',\n",
       " 'RecipeParameters': {},\n",
       " 'ResponseMetadata': {'RequestId': '5c9b9700-5d22-49a4-b53e-ccaf2ee8d5bc',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 13:53:01 GMT',\n",
       "   'x-amzn-requestid': '5c9b9700-5d22-49a4-b53e-ccaf2ee8d5bc',\n",
       "   'content-length': '412',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.describe_predictor(PredictorName=predictorName,VersionId=predictorVerionId)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get Error Metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'ModelMetrics': {'MQRNN': {'Metrics': {'p10': '0.18228662104273116',\n",
       "    'p50': '0.7496131507736232',\n",
       "    'p90': '0.928373597620061',\n",
       "    'rmse': '149883.462439347'},\n",
       "   'MetricsByBucket': []}},\n",
       " 'ResponseMetadata': {'RequestId': '6f88ac14-3acd-40f0-bf50-1575a1250e72',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 13:53:07 GMT',\n",
       "   'x-amzn-requestid': '6f88ac14-3acd-40f0-bf50-1575a1250e72',\n",
       "   'content-length': '168',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecastquery.get_accuracy_metrics(PredictorName=predictorName)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deploy Predictor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'amz_u_streams_all_mqrnn'"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictorName"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'PredictorName': 'amz_u_streams_all_mqrnn',\n",
       " 'VersionId': '20125000',\n",
       " 'PredictorArn': 'arn:aws:forecast:us-west-2:073138737237:predictor/amz_u_streams_all_mqrnn',\n",
       " 'ResponseMetadata': {'RequestId': '43ee78ba-eea0-478f-90e0-c3fef55bbd16',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 13:53:17 GMT',\n",
       "   'x-amzn-requestid': '43ee78ba-eea0-478f-90e0-c3fef55bbd16',\n",
       "   'content-length': '157',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "forecast.deploy_predictor(PredictorName=predictorName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'PredictorNames': ['amz_u_streams_all_mqrnn', 'amz_u_streams_bad_v3_mqrnn', 'amz_u_streams_v6_mqrnn_v9', 'forecastdemo_mattmel_mqrnn', 'meghan_erdman_mqrnn', 'rishisatsangi_forecastdemo_mqrnn', 'stefanduberg_forecastdemo_mqrnn', 'ttsang_forecastdemo_mqrnn', 'workshop_forecastdemo_relv_mqrnn'], 'ResponseMetadata': {'RequestId': '13f0a508-eed5-4db4-9596-162e15634b73', 'HTTPStatusCode': 200, 'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1', 'date': 'Fri, 11 Jan 2019 13:53:27 GMT', 'x-amzn-requestid': '13f0a508-eed5-4db4-9596-162e15634b73', 'content-length': '286', 'connection': 'keep-alive'}, 'RetryAttempts': 0}}\n"
     ]
    }
   ],
   "source": [
    "deployedPredictorsResponse=forecast.list_deployed_predictors()\n",
    "print(deployedPredictorsResponse)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Please note that the following cell can also take 10 minutes or more to be fully operational. There's no output here, but that is fine as long as the * is there."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n",
      "CREATING\n"
     ]
    }
   ],
   "source": [
    "while True:\n",
    "    deployedPredictorStatus = forecast.describe_deployed_predictor(PredictorName=predictorName)['Status']\n",
    "    print(deployedPredictorStatus)\n",
    "    if deployedPredictorStatus != 'ACTIVE' and deployedPredictorStatus != 'FAILED':\n",
    "        sleep(30)\n",
    "    else:\n",
    "        break\n",
    "print(deployedPredictorStatus)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get Forecast"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When the solution is deployed and forecast results are ready, you can view them. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecastResponse = forecastquery.get_forecast(\n",
    "    PredictorName=predictorName,\n",
    "    Interval=\"day\",\n",
    "    Filters={\"item_id\":17273}\n",
    ")\n",
    "print(forecastResponse)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Export Forecast"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### You can batch export forecast to s3 bucket. To do so an role with s3 put access is needed, but this has already been created."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecastInfoList= forecast.list_forecasts(PredictorName=predictorName)['ForecastInfoList']\n",
    "forecastId= forecastInfoList[0]['ForecastId']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputPath=\"s3://\"+bucketName+\"/output\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecastExportResponse = forecast.create_forecast_export_job(ForecastId=forecastId, OutputPath={\"S3Uri\": outputPath,\"RoleArn\":roleArn})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "forecastExportJobId = forecastExportResponse['ForecastExportJobId']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "while True:\n",
    "    forecastExportStatus = forecast.describe_forecast_export_job(ForecastExportJobId=forecastExportJobId)['Status']\n",
    "    print(forecastExportStatus)\n",
    "    if forecastExportStatus != 'ACTIVE' and forecastExportStatus != 'FAILED':\n",
    "        sleep(30)\n",
    "    else:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check s3 bucket for results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "s3.list_objects(Bucket=bucketName,Prefix=\"output\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cleanup\n",
    "\n",
    "While Forecast is in preview there are no charges for using it, but to future proof this work below are the instructions to cleanup your work space."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "ename": "ResourceNotFoundException",
     "evalue": "An error occurred (ResourceNotFoundException) when calling the DeleteDeployedPredictor operation: Deployed solution not found",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mResourceNotFoundException\u001b[0m                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-31-9393e3ee0e62>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# Delete Deployed Predictor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mforecast\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdelete_deployed_predictor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mPredictorName\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpredictorName\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/botocore/client.py\u001b[0m in \u001b[0;36m_api_call\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    318\u001b[0m                     \"%s() only accepts keyword arguments.\" % py_operation_name)\n\u001b[1;32m    319\u001b[0m             \u001b[0;31m# The \"self\" in this scope is referring to the BaseClient.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 320\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_api_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moperation_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    321\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    322\u001b[0m         \u001b[0m_api_call\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpy_operation_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/botocore/client.py\u001b[0m in \u001b[0;36m_make_api_call\u001b[0;34m(self, operation_name, api_params)\u001b[0m\n\u001b[1;32m    622\u001b[0m             \u001b[0merror_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparsed_response\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Error\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Code\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    623\u001b[0m             \u001b[0merror_class\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_code\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror_code\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 624\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0merror_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparsed_response\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperation_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    625\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    626\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mparsed_response\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mResourceNotFoundException\u001b[0m: An error occurred (ResourceNotFoundException) when calling the DeleteDeployedPredictor operation: Deployed solution not found"
     ]
    }
   ],
   "source": [
    "# Delete Deployed Predictor \n",
    "forecast.delete_deployed_predictor(PredictorName=predictorName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'PredictorName': 'amz_u_streams_mqrnn_v3',\n",
       " 'ResponseMetadata': {'RequestId': '3147b3d3-b0df-4a27-9936-efb9442b7ac4',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 01:03:49 GMT',\n",
       "   'x-amzn-requestid': '3147b3d3-b0df-4a27-9936-efb9442b7ac4',\n",
       "   'content-length': '42',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Delete the Predictor: \n",
    "forecast.delete_predictor(PredictorName=predictorName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'DatasetName': 'amz_u_streams_v2_ds',\n",
       " 'ResponseMetadata': {'RequestId': '060d7762-d0d6-45e7-bc38-42816ce0b2e4',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 01:43:57 GMT',\n",
       "   'x-amzn-requestid': '060d7762-d0d6-45e7-bc38-42816ce0b2e4',\n",
       "   'content-length': '37',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Delete Import\n",
    "forecast.delete_dataset_import(DatasetName=datasetName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'ResponseMetadata': {'RequestId': '1370ce61-26a3-4ddc-929f-528fa27ded4a',\n",
       "  'HTTPStatusCode': 200,\n",
       "  'HTTPHeaders': {'content-type': 'application/x-amz-json-1.1',\n",
       "   'date': 'Fri, 11 Jan 2019 01:44:02 GMT',\n",
       "   'x-amzn-requestid': '1370ce61-26a3-4ddc-929f-528fa27ded4a',\n",
       "   'content-length': '2',\n",
       "   'connection': 'keep-alive'},\n",
       "  'RetryAttempts': 0}}"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Delete Dataset Group\n",
    "forecast.delete_dataset_group(DatasetGroupName=datasetGroupName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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
}
