Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save gheesung/ed6ca83ec12c7fd63c1feae8030fc678 to your computer and use it in GitHub Desktop.
Save gheesung/ed6ca83ec12c7fd63c1feae8030fc678 to your computer and use it in GitHub Desktop.
NTU Project - Testing of Prediction Models-v2
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "NTU Project - Testing of Prediction Models-v2",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"machine_shape": "hm",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/gheesung/ed6ca83ec12c7fd63c1feae8030fc678/ntu-project-testing-of-prediction-models-v2.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_PxaJdiHBtF2",
"colab_type": "text"
},
"source": [
"# Ingredient Usage Forecasting\n",
"\n",
"This notebook forecasts the usage of the ingredients using 5 models.\n",
"\n",
"1. Linear Regression\n",
"2. Polynomial Regression\n",
"3. Random Forest\n",
"4. XGBoost\n",
"5. Neural Network\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "bXz2bbhYL3Vz",
"colab_type": "code",
"outputId": "de6ba46d-e9ea-4f60-988c-09acb19315a1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# get the authentication token to GCP\n",
"from google.colab import auth\n",
"auth.authenticate_user()\n",
"print('Authenticated')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Authenticated\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "hKxcVqbEcOcL",
"colab_type": "code",
"outputId": "cdca19e5-c811-4256-c946-5b775db88304",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"!gcloud config set project formosa-delights-186103"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Updated property [core/project].\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "P9IzS8eOheTd",
"colab_type": "code",
"outputId": "1e57a668-0047-4446-f14f-9ef5095f5ef1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# get the authentication token to Google drive\n",
"from google.colab import drive\n",
"drive.mount('/gdrive')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Mounted at /gdrive\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "G_I18VOhaaj7",
"colab_type": "text"
},
"source": [
"## Setup and Preprocessing"
]
},
{
"cell_type": "code",
"metadata": {
"id": "66-FyC0hPwjS",
"colab_type": "code",
"colab": {}
},
"source": [
"project_id = \"formosa-delights-186103\"\n",
"\n",
"from google.cloud import bigquery\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "SkwOY-6DSbWd",
"colab_type": "text"
},
"source": [
"### Create the Holiday dataset\n",
"* Create a holiday table\n",
"* Create a Singapore Event table\n",
"* Create a school holiday table\n",
"\n",
"Day of the week\n",
"1 -Sun, 2 - Mon, 7 - Sat"
]
},
{
"cell_type": "code",
"metadata": {
"id": "geCLHmX1kzMz",
"colab_type": "code",
"outputId": "1b7662b6-9008-415c-b737-d618730b7b0c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 492
}
},
"source": [
"from datetime import datetime, timedelta\n",
"!cd /content\n",
"!git clone https://github.com/gheesung/ntu-data-analytics.git\n",
"holiday_df = pd.read_csv(\"/content/ntu-data-analytics/data/specialdays.csv\")\n",
"holiday_df['holiday_dt'] = pd.to_datetime(holiday_df['holiday_dt'],infer_datetime_format=True)\n",
"holiday_df.set_index('holiday_dt', inplace=True, drop=False)\n",
"holiday_df.head(10)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Cloning into 'ntu-data-analytics'...\n",
"remote: Enumerating objects: 17, done.\u001b[K\n",
"remote: Counting objects: 5% (1/17)\u001b[K\rremote: Counting objects: 11% (2/17)\u001b[K\rremote: Counting objects: 17% (3/17)\u001b[K\rremote: Counting objects: 23% (4/17)\u001b[K\rremote: Counting objects: 29% (5/17)\u001b[K\rremote: Counting objects: 35% (6/17)\u001b[K\rremote: Counting objects: 41% (7/17)\u001b[K\rremote: Counting objects: 47% (8/17)\u001b[K\rremote: Counting objects: 52% (9/17)\u001b[K\rremote: Counting objects: 58% (10/17)\u001b[K\rremote: Counting objects: 64% (11/17)\u001b[K\rremote: Counting objects: 70% (12/17)\u001b[K\rremote: Counting objects: 76% (13/17)\u001b[K\rremote: Counting objects: 82% (14/17)\u001b[K\rremote: Counting objects: 88% (15/17)\u001b[K\rremote: Counting objects: 94% (16/17)\u001b[K\rremote: Counting objects: 100% (17/17)\u001b[K\rremote: Counting objects: 100% (17/17), done.\u001b[K\n",
"remote: Compressing objects: 9% (1/11)\u001b[K\rremote: Compressing objects: 18% (2/11)\u001b[K\rremote: Compressing objects: 27% (3/11)\u001b[K\rremote: Compressing objects: 36% (4/11)\u001b[K\rremote: Compressing objects: 45% (5/11)\u001b[K\rremote: Compressing objects: 54% (6/11)\u001b[K\rremote: Compressing objects: 63% (7/11)\u001b[K\rremote: Compressing objects: 72% (8/11)\u001b[K\rremote: Compressing objects: 81% (9/11)\u001b[K\rremote: Compressing objects: 90% (10/11)\u001b[K\rremote: Compressing objects: 100% (11/11)\u001b[K\rremote: Compressing objects: 100% (11/11), done.\u001b[K\n",
"remote: Total 17 (delta 2), reused 16 (delta 1), pack-reused 0\u001b[K\n",
"Unpacking objects: 5% (1/17) \rUnpacking objects: 11% (2/17) \rUnpacking objects: 17% (3/17) \rUnpacking objects: 23% (4/17) \rUnpacking objects: 29% (5/17) \rUnpacking objects: 35% (6/17) \rUnpacking objects: 41% (7/17) \rUnpacking objects: 47% (8/17) \rUnpacking objects: 52% (9/17) \rUnpacking objects: 58% (10/17) \rUnpacking objects: 64% (11/17) \rUnpacking objects: 70% (12/17) \rUnpacking objects: 76% (13/17) \rUnpacking objects: 82% (14/17) \rUnpacking objects: 88% (15/17) \rUnpacking objects: 94% (16/17) \rUnpacking objects: 100% (17/17) \rUnpacking objects: 100% (17/17), done.\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>holiday_dt</th>\n",
" <th>holiday_type</th>\n",
" <th>holiday_desc</th>\n",
" </tr>\n",
" <tr>\n",
" <th>holiday_dt</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-01-01</th>\n",
" <td>2017-01-01</td>\n",
" <td>8</td>\n",
" <td>New Year</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-02</th>\n",
" <td>2017-01-02</td>\n",
" <td>8</td>\n",
" <td>New Year</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-28</th>\n",
" <td>2017-01-28</td>\n",
" <td>8</td>\n",
" <td>CNY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-29</th>\n",
" <td>2017-01-29</td>\n",
" <td>8</td>\n",
" <td>CNY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-01-30</th>\n",
" <td>2017-01-30</td>\n",
" <td>8</td>\n",
" <td>CNY</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-11</th>\n",
" <td>2017-03-11</td>\n",
" <td>9</td>\n",
" <td>School holiday</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-12</th>\n",
" <td>2017-03-12</td>\n",
" <td>9</td>\n",
" <td>School holiday</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-13</th>\n",
" <td>2017-03-13</td>\n",
" <td>9</td>\n",
" <td>School holiday</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-14</th>\n",
" <td>2017-03-14</td>\n",
" <td>9</td>\n",
" <td>School holiday</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-03-15</th>\n",
" <td>2017-03-15</td>\n",
" <td>9</td>\n",
" <td>School holiday</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" holiday_dt holiday_type holiday_desc\n",
"holiday_dt \n",
"2017-01-01 2017-01-01 8 New Year\n",
"2017-01-02 2017-01-02 8 New Year\n",
"2017-01-28 2017-01-28 8 CNY\n",
"2017-01-29 2017-01-29 8 CNY\n",
"2017-01-30 2017-01-30 8 CNY\n",
"2017-03-11 2017-03-11 9 School holiday\n",
"2017-03-12 2017-03-12 9 School holiday\n",
"2017-03-13 2017-03-13 9 School holiday\n",
"2017-03-14 2017-03-14 9 School holiday\n",
"2017-03-15 2017-03-15 9 School holiday"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Lv-APw5UukNA",
"colab_type": "text"
},
"source": [
"### Fetch from big query all the data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PRLcbtY4YDP1",
"colab_type": "code",
"outputId": "1e01946e-b364-4174-f693-2a6aa0997162",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 580
}
},
"source": [
"# fetch 3 year data\n",
"# The day,month and day_of_week is CAST to string so that it is treated as nominal data.\n",
"client = bigquery.Client(project=project_id)\n",
"\n",
"\n",
"df = client.query('''\n",
"WITH ITEM_USAGE_CLEAN_RESULT AS (\n",
"(SELECT outlet_code, outlet_name,\n",
" item_id, SAFE_CAST(item_qty as INT64) as item_qty, \n",
" item_desc, item_type, month, year, order_dt,\n",
" CAST(Extract(DAY from CAST(order_dt as date)) as INT64) as day,\n",
" CAST(Extract(DAYOFWEEK from CAST(order_dt as date)) as INT64) as day_of_week\n",
" FROM `item_usage.item_usage_norm_*` \n",
" WHERE\n",
" _TABLE_SUFFIX BETWEEN '20170701' AND '20190831'\n",
" and item_id in ('C038','C039','C040','C041')\n",
" and outlet_code in ('OUTLET01', 'OUTLET02','OUTLET03',\n",
" 'OUTLET05','OUTLET06','OUTLET07','OUTLET08','OUTLET09',\n",
" 'OUTLET10','OUTLET11', 'OUTLET13','OUTLET14','OUTLET17',\n",
" 'OUTLET18','OUTLET19') \n",
") \n",
"\n",
"UNION ALL\n",
"\n",
"(SELECT outlet_code, outlet_name,\n",
" item_id, SAFE_CAST(item_qty as INT64) as item_qty, \n",
" item_desc, item_type, month, year, order_dt,\n",
" CAST(Extract(DAY from CAST(order_dt as date)) as INT64) as day,\n",
" CAST(Extract(DAYOFWEEK from CAST(order_dt as date)) as INT64) as day_of_week\n",
" FROM `item_usage.item_usage_*` \n",
" WHERE\n",
" _TABLE_SUFFIX BETWEEN '20190901' AND '20191231'\n",
" and item_id in ('C038','C039','C040','C041')\n",
" and outlet_code in ('OUTLET01', 'OUTLET02','OUTLET03',\n",
" 'OUTLET05','OUTLET06','OUTLET07','OUTLET08','OUTLET09',\n",
" 'OUTLET10','OUTLET11', 'OUTLET13','OUTLET14','OUTLET17',\n",
" 'OUTLET18','OUTLET19') \n",
")\n",
")\n",
"\n",
"SELECT outlet_code, SUBSTR(outlet_code,7,7) as outlet_code_num, outlet_name, item_id, item_qty, item_desc, item_type, month, year, order_dt, day, day_of_week \n",
"from ITEM_USAGE_CLEAN_RESULT ORDER BY order_dt\n",
"#where item_id = 'C038'\n",
"\n",
"''').to_dataframe()\n",
"df.set_index('order_dt', inplace=True, drop=False)\n",
"df_traintestset = df[:\"2019-08-31\"]\n",
"df_traintestset.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>outlet_code</th>\n",
" <th>outlet_code_num</th>\n",
" <th>outlet_name</th>\n",
" <th>item_id</th>\n",
" <th>item_qty</th>\n",
" <th>item_desc</th>\n",
" <th>item_type</th>\n",
" <th>month</th>\n",
" <th>year</th>\n",
" <th>order_dt</th>\n",
" <th>day</th>\n",
" <th>day_of_week</th>\n",
" </tr>\n",
" <tr>\n",
" <th>order_dt</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>卤肉</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C039</td>\n",
" <td>30</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C040</td>\n",
" <td>30</td>\n",
" <td>鸡刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C038</td>\n",
" <td>50</td>\n",
" <td>牛刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET02</td>\n",
" <td>02</td>\n",
" <td>莱佛士</td>\n",
" <td>C039</td>\n",
" <td>10</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET02</td>\n",
" <td>02</td>\n",
" <td>莱佛士</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>鸡刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET02</td>\n",
" <td>02</td>\n",
" <td>莱佛士</td>\n",
" <td>C041</td>\n",
" <td>10</td>\n",
" <td>卤肉</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET02</td>\n",
" <td>02</td>\n",
" <td>莱佛士</td>\n",
" <td>C038</td>\n",
" <td>30</td>\n",
" <td>牛刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET03</td>\n",
" <td>03</td>\n",
" <td>武吉士</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>鸡刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET03</td>\n",
" <td>03</td>\n",
" <td>武吉士</td>\n",
" <td>C041</td>\n",
" <td>10</td>\n",
" <td>卤肉</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" outlet_code outlet_code_num ... day day_of_week\n",
"order_dt ... \n",
"2017-07-01 OUTLET01 01 ... 1 7\n",
"2017-07-01 OUTLET01 01 ... 1 7\n",
"2017-07-01 OUTLET01 01 ... 1 7\n",
"2017-07-01 OUTLET01 01 ... 1 7\n",
"2017-07-01 OUTLET02 02 ... 1 7\n",
"2017-07-01 OUTLET02 02 ... 1 7\n",
"2017-07-01 OUTLET02 02 ... 1 7\n",
"2017-07-01 OUTLET02 02 ... 1 7\n",
"2017-07-01 OUTLET03 03 ... 1 7\n",
"2017-07-01 OUTLET03 03 ... 1 7\n",
"\n",
"[10 rows x 12 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gLkw5s_AaKQ0",
"colab_type": "text"
},
"source": [
"### Setup the Bigquery parameters for insertion into the table"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ukF6hnYiINKb",
"colab_type": "code",
"colab": {}
},
"source": [
"from google.cloud import bigquery\n",
"client = bigquery.Client(project=project_id)\n",
"dataset_id = \"item_usage\"\n",
"table_id = project_id+'.'+dataset_id+\".forecasted_item_usage\"\n",
"dataset = bigquery.Dataset(client.dataset(dataset_id))\n",
"dataset.location = \"US\"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "XCTWWCU9Mz8W",
"colab_type": "code",
"colab": {}
},
"source": [
"#outlet_code,outlet_name,item_id,item_qty,item_desc,item_type,month,year,order_dt,day,day_of_week,holiday_type,holiday_desc,predicted\n",
"schema = [\n",
" bigquery.SchemaField(\"outlet_code\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"outlet_name\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"item_id\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"item_qty\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"item_desc\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"item_type\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"month\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"year\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"order_dt\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"day\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"day_of_week\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"holiday_type\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"holiday_desc\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"predicted\", \"STRING\", mode=\"NULLABLE\")\n",
" ]"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "oTvCSAoaOiph",
"colab_type": "code",
"colab": {}
},
"source": [
"# function to insert the data to bigquery\n",
"def insert_into_bigquery(clientobj, source_file, table_id, schema_fld) :\n",
" print(source_file, table_id, schema_fld)\n",
" job_config = bigquery.LoadJobConfig()\n",
" job_config.write_disposition = bigquery.job.WriteDisposition.WRITE_TRUNCATE \n",
" job_config.create_disposition = bigquery.job.CreateDisposition.CREATE_IF_NEEDED \n",
" # In this example, the existing table contains only the 'full_name' column.\n",
" # 'REQUIRED' fields cannot be added to an existing schema, so the\n",
" # additional column must be 'NULLABLE'.\n",
" job_config.schema = schema_fld\n",
" job_config.source_format = bigquery.SourceFormat.CSV\n",
" job_config.skip_leading_rows = 1\n",
"\n",
" with open(source_file, \"rb\") as source_file1:\n",
" job = clientobj.load_table_from_file(\n",
" source_file1,\n",
" table_id,\n",
" location=\"US\", # Must match the destination dataset location.\n",
" job_config=job_config,\n",
" ) # API request\n",
" job.result() "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "KHhe5WzaaqNZ",
"colab_type": "text"
},
"source": [
"## Merge the holiday data and the Bigquery data\n",
"Panda dataframe merging\n",
"(https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "vLusjnxGYGE8",
"colab_type": "code",
"outputId": "b9fb231f-2713-44bd-8e2b-5df3d0897c4b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
}
},
"source": [
"df_cd = pd.merge(df_traintestset, holiday_df, how='left', left_index=True, right_index=True) \n",
"df_cd.holiday_type.fillna('0', inplace=True)\n",
"del df_cd['holiday_dt']\n",
"df_cd = df_cd.astype(str)\n",
"df_cd.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>outlet_code</th>\n",
" <th>outlet_code_num</th>\n",
" <th>outlet_name</th>\n",
" <th>item_id</th>\n",
" <th>item_qty</th>\n",
" <th>item_desc</th>\n",
" <th>item_type</th>\n",
" <th>month</th>\n",
" <th>year</th>\n",
" <th>order_dt</th>\n",
" <th>day</th>\n",
" <th>day_of_week</th>\n",
" <th>holiday_type</th>\n",
" <th>holiday_desc</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>卤肉</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C039</td>\n",
" <td>30</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C040</td>\n",
" <td>30</td>\n",
" <td>鸡刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET01</td>\n",
" <td>01</td>\n",
" <td>新达成</td>\n",
" <td>C038</td>\n",
" <td>50</td>\n",
" <td>牛刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>OUTLET02</td>\n",
" <td>02</td>\n",
" <td>莱佛士</td>\n",
" <td>C039</td>\n",
" <td>10</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" outlet_code outlet_code_num ... holiday_type holiday_desc\n",
"2017-07-01 OUTLET01 01 ... 0 nan\n",
"2017-07-01 OUTLET01 01 ... 0 nan\n",
"2017-07-01 OUTLET01 01 ... 0 nan\n",
"2017-07-01 OUTLET01 01 ... 0 nan\n",
"2017-07-01 OUTLET02 02 ... 0 nan\n",
"\n",
"[5 rows x 14 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Pf7g4WSTX_QT",
"colab_type": "code",
"outputId": "3331eff8-901c-453e-917b-9bc8cb666f54",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"import pandas as pd \n",
"import numpy as np \n",
"import matplotlib.pyplot as plt \n",
"import seaborn as seabornInstance \n",
"from sklearn.model_selection import train_test_split \n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn import metrics\n",
"from sklearn import preprocessing\n",
"from sklearn.metrics import mean_absolute_error \n",
"%matplotlib inline\n",
"\n",
"y= df_cd['item_qty'].astype(float)\n",
"\n",
"print(y.shape)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"(47396,)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rmlygS7vvIlM",
"colab_type": "text"
},
"source": [
"## 1-hot encode the features\n",
"* day_of_week\n",
"* item_id\n",
"* outlet_code\n",
"* holiday_type"
]
},
{
"cell_type": "code",
"metadata": {
"id": "issZtUgjUmKI",
"colab_type": "code",
"outputId": "b6d31a4a-245b-4fcd-cbfb-b20867a1d908",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"# Encode day of week\n",
"dfDummies = pd.get_dummies(df_cd['day_of_week'], prefix = 'day_of_week')\n",
"df_analyse = pd.concat([df_cd, dfDummies], axis=1) \n",
"dfDummies.head(5)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>day_of_week_1</th>\n",
" <th>day_of_week_2</th>\n",
" <th>day_of_week_3</th>\n",
" <th>day_of_week_4</th>\n",
" <th>day_of_week_5</th>\n",
" <th>day_of_week_6</th>\n",
" <th>day_of_week_7</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" day_of_week_1 day_of_week_2 ... day_of_week_6 day_of_week_7\n",
"2017-07-01 0 0 ... 0 1\n",
"2017-07-01 0 0 ... 0 1\n",
"2017-07-01 0 0 ... 0 1\n",
"2017-07-01 0 0 ... 0 1\n",
"2017-07-01 0 0 ... 0 1\n",
"\n",
"[5 rows x 7 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "5_6j6ANJZu_w",
"colab_type": "code",
"outputId": "4498a3fc-f3d2-41eb-9643-285b798da82e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"# Encode item id\n",
"dfDummies = pd.get_dummies(df_cd['item_id'], prefix = 'item_id') \n",
"df_analyse = pd.concat([df_analyse, dfDummies], axis=1) \n",
"dfDummies.head(5)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>item_id_C038</th>\n",
" <th>item_id_C039</th>\n",
" <th>item_id_C040</th>\n",
" <th>item_id_C041</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" item_id_C038 item_id_C039 item_id_C040 item_id_C041\n",
"2017-07-01 0 0 0 1\n",
"2017-07-01 0 1 0 0\n",
"2017-07-01 0 0 1 0\n",
"2017-07-01 1 0 0 0\n",
"2017-07-01 0 1 0 0"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "u-HMpiEqjiGi",
"colab_type": "code",
"outputId": "75cee3fe-20f1-4019-e548-1ba7154ed236",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 309
}
},
"source": [
"# Encode outlet code\n",
"\n",
"dfDummies = pd.get_dummies(df_cd['outlet_code'], prefix = 'outlet_code')\n",
"df_analyse = pd.concat([df_analyse, dfDummies], axis=1)\n",
"dfDummies.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>outlet_code_OUTLET01</th>\n",
" <th>outlet_code_OUTLET02</th>\n",
" <th>outlet_code_OUTLET03</th>\n",
" <th>outlet_code_OUTLET05</th>\n",
" <th>outlet_code_OUTLET06</th>\n",
" <th>outlet_code_OUTLET07</th>\n",
" <th>outlet_code_OUTLET08</th>\n",
" <th>outlet_code_OUTLET09</th>\n",
" <th>outlet_code_OUTLET10</th>\n",
" <th>outlet_code_OUTLET11</th>\n",
" <th>outlet_code_OUTLET13</th>\n",
" <th>outlet_code_OUTLET14</th>\n",
" <th>outlet_code_OUTLET17</th>\n",
" <th>outlet_code_OUTLET18</th>\n",
" <th>outlet_code_OUTLET19</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" outlet_code_OUTLET01 ... outlet_code_OUTLET19\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 0 ... 0\n",
"\n",
"[5 rows x 15 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "IDPrZjK6j2y1",
"colab_type": "code",
"outputId": "e7fcd3e2-97ed-4674-80d7-45cad84f2f98",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"# Encode holiday type\n",
"dfDummies = pd.get_dummies(df_cd['holiday_type'], prefix = 'holiday_type')\n",
"df_analyse = pd.concat([df_analyse, dfDummies], axis=1) \n",
"dfDummies.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>holiday_type_0</th>\n",
" <th>holiday_type_10.0</th>\n",
" <th>holiday_type_11.0</th>\n",
" <th>holiday_type_8.0</th>\n",
" <th>holiday_type_9.0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-01</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" holiday_type_0 ... holiday_type_9.0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"2017-07-01 1 ... 0\n",
"\n",
"[5 rows x 5 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "bm0zRiicsOGQ",
"colab_type": "code",
"colab": {}
},
"source": [
"#dfDummies = pd.get_dummies(df_cd['month'], prefix = 'month')\n",
"#df_analyse = pd.concat([df_analyse, dfDummies], axis=1) "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8s7zLIE60k6X",
"colab_type": "code",
"colab": {}
},
"source": [
"#dfDummies = pd.get_dummies(df_cd['day'], prefix = 'day')\n",
"#df_analyse = pd.concat([df_analyse, dfDummies], axis=1) "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "P8V9tenNZ3LK",
"colab_type": "code",
"outputId": "d82168f7-c0b4-4f2a-d42c-36c24eba085d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"#Pick only those features we are using in the predictions.\n",
"\n",
"df_b = df_analyse[[\n",
" 'outlet_code_OUTLET01','outlet_code_OUTLET02','outlet_code_OUTLET03','outlet_code_OUTLET05','outlet_code_OUTLET06',\n",
" 'outlet_code_OUTLET07','outlet_code_OUTLET08','outlet_code_OUTLET09','outlet_code_OUTLET10','outlet_code_OUTLET11',\n",
" 'outlet_code_OUTLET13','outlet_code_OUTLET14','outlet_code_OUTLET17','outlet_code_OUTLET18','outlet_code_OUTLET19',\n",
" 'day_of_week_1','day_of_week_2','day_of_week_3','day_of_week_4','day_of_week_5','day_of_week_6','day_of_week_7',\n",
" 'item_id_C038','item_id_C039','item_id_C040','item_id_C041',\n",
" 'holiday_type_0','holiday_type_8.0','holiday_type_9.0','holiday_type_10.0','holiday_type_11.0',\n",
"]].astype(float)\n",
"\n",
"X=df_b.values\n",
"print(X.shape, y.shape)\n",
"\n",
"# Split the training and test set to 80/20\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"(47396, 31) (47396,)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "n8V08DTKxYCy",
"colab_type": "text"
},
"source": [
"## The prediction Models\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZN7u6IaSavKp",
"colab_type": "text"
},
"source": [
"### Setup the parameters\n",
"\n",
"The purpose is to 1-hot encode data for processing by the machine learning algorithms."
]
},
{
"cell_type": "code",
"metadata": {
"id": "nmXRGr5Iti7z",
"colab_type": "code",
"colab": {}
},
"source": [
"#Pass in the outlet code, order date and item id, the function will return array of encoded value\n",
"outlet_dict={\n",
" 'OUTLET01':[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET02':[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET03':[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET05':[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET06':[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET07':[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0],\n",
" 'OUTLET08':[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0],\n",
" 'OUTLET09':[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],\n",
" 'OUTLET10':[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],\n",
" 'OUTLET11':[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],\n",
" 'OUTLET13':[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],\n",
" 'OUTLET14':[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],\n",
" 'OUTLET17':[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0],\n",
" 'OUTLET18':[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],\n",
" 'OUTLET19':[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]\n",
"}\n",
"\n",
"#python used 0 as monday wherelse bigquery used 0 as Sunday\n",
"day_of_week = {\n",
" 'Monday' : [0,1,0,0,0,0,0],\n",
" 'Tuesday' : [0,0,1,0,0,0,0],\n",
" 'Wednesday': [0,0,0,1,0,0,0],\n",
" 'Thursday' : [0,0,0,0,1,0,0],\n",
" 'Friday' : [0,0,0,0,0,1,0],\n",
" 'Saturday' : [0,0,0,0,0,0,1],\n",
" 'Sunday' : [1,0,0,0,0,0,0]\n",
" \n",
"}\n",
"\n",
"ingredient={\n",
" 'C038' :[1,0,0,0],\n",
" 'C039' :[0,1,0,0],\n",
" 'C040' :[0,0,1,0],\n",
" 'C041' :[0,0,0,1]\n",
"}\n",
"\n",
"holiday_type ={\n",
" '0': [1,0,0,0,0],\n",
" '8': [0,1,0,0,0],\n",
" '9': [0,0,1,0,0],\n",
" '10': [0,0,0,1,0],\n",
" '11': [0,0,0,0,1]\n",
"}\n",
"import datetime\n",
"from datetime import datetime, date\n",
"def formula_1hot(outlet,order_dt,ingredientidx):\n",
" #print(type(order_dt))\n",
" outletid=outlet_dict[outlet]\n",
" ingredientid=ingredient[ingredientidx]\n",
" \n",
" \n",
" year, month, day = (int(x) for x in order_dt.split('-')) \n",
" dayofweek = date(year, month, day)\n",
" dayofweek= dayofweek.strftime(\"%A\")\n",
" \n",
" datedict=day_of_week[dayofweek]\n",
" \n",
" \n",
" a=holiday_df.loc[order_dt]\n",
" a=a[\"holiday_type\"]\n",
" if a.size > 0 :\n",
" a=str(a[0])\n",
" else:\n",
" a=str(0)\n",
" holidayidx=holiday_type[a]\n",
" #print(outletid,ingredientid,datedict,holidayidx)\n",
" \n",
" mylist = outletid + datedict +ingredientid +holidayidx\n",
" \n",
" \n",
" return mylist\n",
" \n",
"\n",
"\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "DUEy3nz58xVU",
"colab_type": "code",
"colab": {}
},
"source": [
"# Prediction Schema that stores the forcasted results.\n",
"\n",
"pred_schema = [\n",
" bigquery.SchemaField(\"order_dt\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"outlet_code\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"item_id\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"predicted\", \"STRING\", mode=\"NULLABLE\"),\n",
" bigquery.SchemaField(\"holiday_type\", \"STRING\", mode=\"NULLABLE\")\n",
"] "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "s7punnTdIaR2",
"colab_type": "code",
"colab": {}
},
"source": [
"# This function predicts the next X days starting from 1 Sep 2019\n",
"\n",
"from datetime import timedelta\n",
"from datetime import datetime, date\n",
"import csv\n",
"from google.cloud import storage\n",
"\n",
"def pred_next_xdays(model,filename,days, poly=False) :\n",
" today = date.today()\n",
"\n",
" #fromdt = today.strftime(\"%Y-%m-%d\")\n",
" fromdt='2019-09-01'\n",
" \n",
" todaydt = today.strftime(\"%Y-%m-%d\")\n",
" #todt= (datetime.strptime(fromdt,'%Y-%m-%d') + timedelta(days=days)).strftime(\"%Y-%m-%d\")\n",
" todt= (datetime.strptime(todaydt,'%Y-%m-%d') + timedelta(days=days)).strftime(\"%Y-%m-%d\")\n",
"\n",
" dateval = fromdt\n",
" row=[]\n",
" while dateval <= todt:\n",
"\n",
" for outlet_id in outlet_dict:\n",
" for ingredient_id in ingredient:\n",
" coded_val=formula_1hot(outlet_id,dateval,ingredient_id)\n",
" if poly == True:\n",
" np_val = np.array(coded_val)\n",
" np_val = np_val.reshape(1,31)\n",
" np_val=polynomial_features.fit_transform(np_val)\n",
"\n",
" else:\n",
" np_val = np.array(coded_val)\n",
" np_val = np_val.reshape(1,31)\n",
"\n",
" predicted_val = model.predict(np_val)\n",
" \n",
" if(dateval in holiday_df.index):\n",
" holiday_ty = holiday_df[dateval].holiday_type.values[0]\n",
" else:\n",
" holiday_ty=0\n",
" \n",
" newrow=[dateval,outlet_id,ingredient_id,int(predicted_val[0]),holiday_ty]\n",
" \n",
" #print(newrow)\n",
"\n",
" row.append(newrow)\n",
" dateval= (datetime.strptime(dateval, '%Y-%m-%d') + timedelta(days=1)).strftime('%Y-%m-%d')\n",
"\n",
" pred_df = pd.DataFrame(row)\n",
" \n",
" pred_df.columns = ['order_dt', 'outlet_code', 'item_id','predicted','holiday_type']\n",
" \n",
" pred_df.to_csv('/gdrive/My Drive/Colab Notebooks/' + filename, sep=',', encoding='utf-8', index=False)\n",
" \n",
" #upload to cloud storage\n",
" client_gcs = storage.Client(project=project_id)\n",
"\n",
" bucket = client_gcs.get_bucket('formosa-delights')\n",
" blob = bucket.blob(filename)\n",
" fullpath = '/gdrive/My Drive/Colab Notebooks/'+filename\n",
" blob.upload_from_filename(fullpath)\n",
" \n",
"\n",
" # insert to bigquery\n",
" table_id=project_id+'.'+dataset_id+'.' + filename.rstrip('.csv')\n",
" #print(fullpath, table_id)\n",
" insert_into_bigquery(client,fullpath, table_id, pred_schema)\n",
" \n",
" return pred_df\n",
" "
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "FO493Qp5adUe",
"colab_type": "text"
},
"source": [
"### Linear Regression\n",
"This is using Linear Regression. The code is taken from this link\n",
"\n",
"(https://towardsdatascience.com/a-beginners-guide-to-linear-regression-in-python-with-scikit-learn-83a8f7ae2b4f)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ZGNhDgUeZppr",
"colab_type": "code",
"outputId": "61cc032b-f58c-4443-8d6f-653ac28eea4c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 85
}
},
"source": [
"regressor = LinearRegression() \n",
"regressor.fit(X_train, y_train)\n",
"y_pred = regressor.predict(X_test)\n",
"df_pred = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})\n",
"print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred)) \n",
"print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred)) \n",
"print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))\n",
"print('R2 Score:', metrics.r2_score(y_test, y_pred))\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Mean Absolute Error: 8.875862115143724\n",
"Mean Squared Error: 145.83791847571038\n",
"Root Mean Squared Error: 12.076337129929355\n",
"R2 Score: 0.6136373702544475\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "A-c6tsszpbcf",
"colab_type": "code",
"colab": {}
},
"source": [
"# add a new column \"predicted\"\n",
"df_cd['predicted'] = 0\n",
"df_cd=df_cd.reset_index(drop=True)\n",
"df_cd=df_cd.drop(columns=['outlet_code_num'])"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "TN5zFZoNmnLI",
"colab_type": "text"
},
"source": [
"#### Predict the result"
]
},
{
"cell_type": "code",
"metadata": {
"id": "f1vqGrKFKMLY",
"colab_type": "code",
"outputId": "5dab76e5-84f5-4f28-8917-a125414722b9",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
}
},
"source": [
"preddf=pred_next_xdays(regressor, 'regression_pred.csv',30)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/gdrive/My Drive/Colab Notebooks/regression_pred.csv formosa-delights-186103.item_usage.regression_pred [SchemaField('order_dt', 'STRING', 'NULLABLE', None, ()), SchemaField('outlet_code', 'STRING', 'NULLABLE', None, ()), SchemaField('item_id', 'STRING', 'NULLABLE', None, ()), SchemaField('predicted', 'STRING', 'NULLABLE', None, ()), SchemaField('holiday_type', 'STRING', 'NULLABLE', None, ())]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "enJHhBoR3um4",
"colab_type": "code",
"outputId": "efe7de09-0003-4f8d-adbe-39aa5b700301",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(y_test, y_pred)\n",
"ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)\n",
"ax.set_xlabel('Measured')\n",
"ax.set_ylabel('Predicted')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\njgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H0xv1n9d0_Cm",
"colab_type": "text"
},
"source": [
"### Polynomial Regression\n",
"\n",
"The code is adapted from [Towards Data Science - Polynomial Regression](https://towardsdatascience.com/polynomial-regression-bbe8b9d97491)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "M5smcwmU_Kzl",
"colab_type": "code",
"outputId": "f09bcec8-cfaa-4c02-fbe1-2f14d2ccae89",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 892
}
},
"source": [
"# polynomial regression\n",
"polynomial_features= PolynomialFeatures(degree=2)\n",
"x_poly = polynomial_features.fit_transform(X_train)\n",
"\n",
"polynomial_regressor = LinearRegression()\n",
"polynomial_regressor.fit(x_poly,y_train)\n",
"y_poly_pred = polynomial_regressor.predict(polynomial_features.fit_transform(X_test))\n",
"\n",
"\n",
"print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_poly_pred)) \n",
"print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_poly_pred)) \n",
"print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_poly_pred)))\n",
"print('R2 Score:', metrics.r2_score(y_test, y_poly_pred))\n",
"df_pred = pd.DataFrame({'Actual': y_test, 'Predicted': y_poly_pred})\n",
"df_pred.head(25)\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Mean Absolute Error: 6.704469936708861\n",
"Mean Squared Error: 93.03201214110298\n",
"Root Mean Squared Error: 9.645310370387413\n",
"R2 Score: 0.7535339695118916\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>Predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-04-07</th>\n",
" <td>50.0</td>\n",
" <td>23.796875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-03</th>\n",
" <td>40.0</td>\n",
" <td>47.187500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>30.0</td>\n",
" <td>29.734375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-24</th>\n",
" <td>30.0</td>\n",
" <td>30.125000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-12</th>\n",
" <td>0.0</td>\n",
" <td>14.015625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-19</th>\n",
" <td>0.0</td>\n",
" <td>5.609375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-11-17</th>\n",
" <td>10.0</td>\n",
" <td>12.109375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-13</th>\n",
" <td>30.0</td>\n",
" <td>25.859375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-15</th>\n",
" <td>10.0</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-24</th>\n",
" <td>10.0</td>\n",
" <td>19.437500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-25</th>\n",
" <td>10.0</td>\n",
" <td>7.906250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-17</th>\n",
" <td>30.0</td>\n",
" <td>25.296875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-04-30</th>\n",
" <td>10.0</td>\n",
" <td>4.765625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-05</th>\n",
" <td>20.0</td>\n",
" <td>22.640625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-28</th>\n",
" <td>0.0</td>\n",
" <td>8.218750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-01</th>\n",
" <td>0.0</td>\n",
" <td>3.828125</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-20</th>\n",
" <td>50.0</td>\n",
" <td>35.359375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-29</th>\n",
" <td>0.0</td>\n",
" <td>3.859375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-30</th>\n",
" <td>20.0</td>\n",
" <td>26.687500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-26</th>\n",
" <td>40.0</td>\n",
" <td>22.140625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>20.0</td>\n",
" <td>23.859375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-30</th>\n",
" <td>20.0</td>\n",
" <td>16.640625</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-09</th>\n",
" <td>0.0</td>\n",
" <td>0.437500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-09-15</th>\n",
" <td>10.0</td>\n",
" <td>7.484375</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-03-26</th>\n",
" <td>0.0</td>\n",
" <td>4.093750</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Actual Predicted\n",
"2019-04-07 50.0 23.796875\n",
"2017-07-03 40.0 47.187500\n",
"2017-08-28 30.0 29.734375\n",
"2018-10-24 30.0 30.125000\n",
"2019-05-12 0.0 14.015625\n",
"2018-12-19 0.0 5.609375\n",
"2017-11-17 10.0 12.109375\n",
"2017-08-13 30.0 25.859375\n",
"2017-08-15 10.0 3.000000\n",
"2018-06-24 10.0 19.437500\n",
"2017-08-25 10.0 7.906250\n",
"2019-06-17 30.0 25.296875\n",
"2019-04-30 10.0 4.765625\n",
"2018-10-05 20.0 22.640625\n",
"2019-08-28 0.0 8.218750\n",
"2018-04-01 0.0 3.828125\n",
"2018-12-20 50.0 35.359375\n",
"2019-06-29 0.0 3.859375\n",
"2019-05-30 20.0 26.687500\n",
"2018-06-26 40.0 22.140625\n",
"2017-08-28 20.0 23.859375\n",
"2018-01-30 20.0 16.640625\n",
"2018-10-09 0.0 0.437500\n",
"2018-09-15 10.0 7.484375\n",
"2019-03-26 0.0 4.093750"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CUuw_NYB_pHA",
"colab_type": "code",
"outputId": "f6a5012b-ee89-4442-cf66-40c5f5a5cf03",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(y_test, y_poly_pred)\n",
"ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)\n",
"ax.set_xlabel('Measured')\n",
"ax.set_ylabel('Predicted')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xt8VNXV+P/PyhAgBLkJaogGVHgE\nI5VLLD5i/alIvQCC3NTqA1gLCXgBRUr4iUBEShFBqnJJqBbUqoBaikCLFGx9HkQrBoREoKQqKAa5\nWIIBQkKyv3/MCUwyM8kkczlzWe/XK6/M7D2TWTmZnDVn73P2EmMMSimlVHVxdgeglFIqPGmCUEop\n5ZEmCKWUUh5pglBKKeWRJgillFIeaYJQSinlkSYIpZRSHmmCUEop5ZEmCKWUUh41sDsAf7Ru3dq0\nb9/e7jCUUiqifPbZZ0eMMW1qe1xEJ4j27duzdetWu8NQSqmIIiL7fHmcDjEppZTySBOEUkopjzRB\nKKWU8kgThFJKKY80QSillPIoaAlCRC4RkQ9E5AsRyReRcVZ7KxHZICJ7re8trXYRkRdEpEBEdohI\n92DFppRSqnbBPII4A0wwxlwJXAs8JCJXApnARmNMR2CjdR/gdqCj9TUaWBTE2JRSStUiaAnCGFNo\njMm1bv8I7AKSgQHAMuthy4CB1u0BwKvG6WOghYgkBSs+pZRSNQvJHISItAe6AZ8AFxpjCq2ug8CF\n1u1k4BuXp31rtVX/WaNFZKuIbD18+HDQYlZKqVgX9AQhIk2Bd4Dxxpjjrn3GGAOYuvw8Y0yOMSbN\nGJPWpk2tV4orpVTE2r59OydPnrTt9YOaIEQkHmdy+KMx5l2r+fvKoSPr+yGr/QBwicvTL7balFIq\nphQXFzNhwgR69OhBVlaWbXEE8ywmAV4Gdhlj5rl0rQZGWLdHAH92aR9unc10LVDkMhSllFIxYd26\ndVx11VXMmzePiooK5s6dy+eff25LLME8gugF/A9ws4hst77uAH4L9BGRvcAt1n2AdcCXQAGwBBgb\nxNiUUiqsHDx4kLvvvpu+ffuyb9+5tfTKy8sZPXo0FRUVIY8paKu5GmP+DxAv3b09PN4ADwUrHqWU\nCkcVFRUsWbKESZMmUVRU5NafkpLC1KlTiYsL/XXNEb3ct1JKRbL8/HzS09PZvHmzW19cXBzjxo3j\n6aefpmnTpjZEpwlCKaVCrqSkhJkzZzJ79mzKysrc+rt3705OTg49evSwIbpzNEEopVQIbdq0iYyM\nDPbu3evWl5iYyIwZM3jkkUdo0MD+3bP9ESilVIx46623uPfeez329e3blwULFtCuXbsQR+Wdruaq\nlFIh0q9fP1JSUqq0XXTRRaxYsYL33nsvrJIDaIJQSqmQadq0KQsXLjx7PyMjg127djF06FCcl46F\nFx1iUkqpACsrK8PhcHg8NbVv375kZmbSr18/evXqZUN0vtMjCKWUCqAtW7acPQvJm1mzZoV9cgBN\nEEopFRBFRUWMHTuWXr16kZeXR2ZmJoWFkb1akCYIpZTygzGGd955h86dO7No0SKci0I4E8a4ceNs\njs4/miCUUqqevvnmGwYMGMCQIUM8Hi00adLE44VwkUIThFJK1VF5eTnz58+nc+fOvPfee279HTp0\nYOPGjSxdupT4+HgbIgwMPYtJKaXqYNu2bYwePZqtW7e69TVo0IBJkybx5JNPkpCQYEN0gaUJQiml\nfHDixAmmTZvG/PnzKS8vd+u/7rrryMnJITU11YbogkMThFJK1eLTTz9l6NChVeo0VGrevDmzZ89m\n1KhRtizJHUyaIJRSqhZt27blhx9+cGsfNmwY8+fPJykpyYaogi+60p1SSgVBcnIys2bNOns/JSWF\nNWvWsHz58qhNDqBHEEop5ZOMjAzefPNNevbsSVZWlm1FfEJJE4RSSnGuiM/111/Prbfe6tbvcDj4\n+9//HhZ1GkIldn5TpZTy4oMPPiA9PZ29e/fSvn178vLySExMdHtcLCUH0DkIpVQMO3r0KA888AA3\n33zz2QpvX3/9NVlZWTZHFh40QSilYo4xhtdee41OnTqxdOlSt/633nqLkydPhj6wMKMJQikVUwoK\nCujTpw/Dhw/nyJEjbv1jxoxh586dNGnSxIbowktsDagppWJWaWkpzz33HDNmzKCkpMStPzU1lZyc\nHK677jobogtPmiCUUlHvo48+Ij09nby8PLe+Ro0aMXXqVJ544gkaNmxoQ3ThSxOEUipqFRUVMXny\nZBYvXny2ToOr3r17s3jxYjp06GBDdOFP5yCUUlHrq6++Iicnxy05nH/++SxbtowNGzZocqiBJgil\nVNTq2rUr48ePr9I2YsQIdu/ezfDhwxERmyKLDOLpsCtSpKWlGU9rsiulVKUTJ06QmppKfHw82dnZ\n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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-zwkMaIdmYl7",
"colab_type": "code",
"outputId": "3ed063e6-260b-4cc9-bf3d-c79e61c72772",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"pred_next_xdays(polynomial_regressor, 'polyregressor_pred.csv',30, True)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/gdrive/My Drive/Colab Notebooks/polyregressor_pred.csv formosa-delights-186103.item_usage.polyregressor_pred [SchemaField('order_dt', 'STRING', 'NULLABLE', None, ()), SchemaField('outlet_code', 'STRING', 'NULLABLE', None, ()), SchemaField('item_id', 'STRING', 'NULLABLE', None, ()), SchemaField('predicted', 'STRING', 'NULLABLE', None, ()), SchemaField('holiday_type', 'STRING', 'NULLABLE', None, ())]\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>order_dt</th>\n",
" <th>outlet_code</th>\n",
" <th>item_id</th>\n",
" <th>predicted</th>\n",
" <th>holiday_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C038</td>\n",
" <td>36</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C040</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C038</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C039</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C040</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C038</td>\n",
" <td>32</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C039</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C038</td>\n",
" <td>72</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C039</td>\n",
" <td>45</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C040</td>\n",
" <td>14</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C038</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C039</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C038</td>\n",
" <td>71</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C039</td>\n",
" <td>49</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C041</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C038</td>\n",
" <td>19</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C039</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C040</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C038</td>\n",
" <td>46</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C039</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5010</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C040</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5011</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C041</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5012</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C038</td>\n",
" <td>27</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5013</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C039</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5014</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C040</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5015</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C041</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5016</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C038</td>\n",
" <td>20</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5017</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C039</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5018</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C040</td>\n",
" <td>-1</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5019</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C041</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5020</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C038</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5021</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C039</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5022</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5023</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5024</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C038</td>\n",
" <td>30</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5025</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C039</td>\n",
" <td>18</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5026</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5027</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5028</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C038</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5029</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C039</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5030</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C040</td>\n",
" <td>-1</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5031</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C041</td>\n",
" <td>-2</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5032</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C038</td>\n",
" <td>62</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5033</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C039</td>\n",
" <td>23</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5034</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5035</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5036</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C038</td>\n",
" <td>41</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5037</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C039</td>\n",
" <td>18</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5038</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C040</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5039</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5040 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" order_dt outlet_code item_id predicted holiday_type\n",
"0 2019-09-01 OUTLET01 C038 36 0\n",
"1 2019-09-01 OUTLET01 C039 16 0\n",
"2 2019-09-01 OUTLET01 C040 6 0\n",
"3 2019-09-01 OUTLET01 C041 6 0\n",
"4 2019-09-01 OUTLET02 C038 25 0\n",
"5 2019-09-01 OUTLET02 C039 12 0\n",
"6 2019-09-01 OUTLET02 C040 5 0\n",
"7 2019-09-01 OUTLET02 C041 5 0\n",
"8 2019-09-01 OUTLET03 C038 32 0\n",
"9 2019-09-01 OUTLET03 C039 26 0\n",
"10 2019-09-01 OUTLET03 C040 9 0\n",
"11 2019-09-01 OUTLET03 C041 8 0\n",
"12 2019-09-01 OUTLET05 C038 72 0\n",
"13 2019-09-01 OUTLET05 C039 45 0\n",
"14 2019-09-01 OUTLET05 C040 14 0\n",
"15 2019-09-01 OUTLET05 C041 9 0\n",
"16 2019-09-01 OUTLET06 C038 40 0\n",
"17 2019-09-01 OUTLET06 C039 22 0\n",
"18 2019-09-01 OUTLET06 C040 4 0\n",
"19 2019-09-01 OUTLET06 C041 0 0\n",
"20 2019-09-01 OUTLET07 C038 71 0\n",
"21 2019-09-01 OUTLET07 C039 49 0\n",
"22 2019-09-01 OUTLET07 C040 10 0\n",
"23 2019-09-01 OUTLET07 C041 20 0\n",
"24 2019-09-01 OUTLET08 C038 19 0\n",
"25 2019-09-01 OUTLET08 C039 6 0\n",
"26 2019-09-01 OUTLET08 C040 2 0\n",
"27 2019-09-01 OUTLET08 C041 5 0\n",
"28 2019-09-01 OUTLET09 C038 46 0\n",
"29 2019-09-01 OUTLET09 C039 28 0\n",
"... ... ... ... ... ...\n",
"5010 2019-11-23 OUTLET09 C040 16 9\n",
"5011 2019-11-23 OUTLET09 C041 15 9\n",
"5012 2019-11-23 OUTLET10 C038 27 9\n",
"5013 2019-11-23 OUTLET10 C039 15 9\n",
"5014 2019-11-23 OUTLET10 C040 3 9\n",
"5015 2019-11-23 OUTLET10 C041 3 9\n",
"5016 2019-11-23 OUTLET11 C038 20 9\n",
"5017 2019-11-23 OUTLET11 C039 4 9\n",
"5018 2019-11-23 OUTLET11 C040 -1 9\n",
"5019 2019-11-23 OUTLET11 C041 4 9\n",
"5020 2019-11-23 OUTLET13 C038 31 9\n",
"5021 2019-11-23 OUTLET13 C039 8 9\n",
"5022 2019-11-23 OUTLET13 C040 0 9\n",
"5023 2019-11-23 OUTLET13 C041 5 9\n",
"5024 2019-11-23 OUTLET14 C038 30 9\n",
"5025 2019-11-23 OUTLET14 C039 18 9\n",
"5026 2019-11-23 OUTLET14 C040 4 9\n",
"5027 2019-11-23 OUTLET14 C041 6 9\n",
"5028 2019-11-23 OUTLET17 C038 6 9\n",
"5029 2019-11-23 OUTLET17 C039 3 9\n",
"5030 2019-11-23 OUTLET17 C040 -1 9\n",
"5031 2019-11-23 OUTLET17 C041 -2 9\n",
"5032 2019-11-23 OUTLET18 C038 62 9\n",
"5033 2019-11-23 OUTLET18 C039 23 9\n",
"5034 2019-11-23 OUTLET18 C040 9 9\n",
"5035 2019-11-23 OUTLET18 C041 8 9\n",
"5036 2019-11-23 OUTLET19 C038 41 9\n",
"5037 2019-11-23 OUTLET19 C039 18 9\n",
"5038 2019-11-23 OUTLET19 C040 7 9\n",
"5039 2019-11-23 OUTLET19 C041 9 9\n",
"\n",
"[5040 rows x 5 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 27
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VzVbx0yI1etS",
"colab_type": "text"
},
"source": [
"### Random Forest\n",
"\n",
"The code is adapted from [Towards Data Science - Random Forest Regression](https://towardsdatascience.com/random-forest-and-its-implementation-71824ced454f)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "WpnYakQTQRDI",
"colab_type": "code",
"outputId": "774e0cde-f73d-4f9d-cd70-e659d4c47f3b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 139
}
},
"source": [
"from sklearn.ensemble import RandomForestRegressor\n",
"from sklearn.metrics import mean_absolute_error \n",
"\n",
"randomforestregressor= RandomForestRegressor()\n",
"randomforestregressor.fit(X_train,y_train)\n",
"\n",
"# Get the mean absolute error on the validation data\n",
"y_pred = randomforestregressor.predict(X_test)\n",
"MAE = mean_absolute_error(y_test , y_pred)\n",
"\n",
"print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred)) \n",
"print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred)) \n",
"print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))\n",
"print('R2 Score:', metrics.r2_score(y_test, y_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
" \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Mean Absolute Error: 6.730560513175636\n",
"Mean Squared Error: 96.45255319323923\n",
"Root Mean Squared Error: 9.821026076395441\n",
"R2 Score: 0.7444720653797636\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ajWhUDGAH_jP",
"colab_type": "text"
},
"source": [
"#### Predict the result"
]
},
{
"cell_type": "code",
"metadata": {
"id": "myBlmDhIDjJj",
"colab_type": "code",
"outputId": "82d83d11-5bfd-4580-d236-f6e8733e2f4c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"pred_next_xdays(randomforestregressor, 'randomforest_pred.csv',30)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/gdrive/My Drive/Colab Notebooks/randomforest_pred.csv formosa-delights-186103.item_usage.randomforest_pred [SchemaField('order_dt', 'STRING', 'NULLABLE', None, ()), SchemaField('outlet_code', 'STRING', 'NULLABLE', None, ()), SchemaField('item_id', 'STRING', 'NULLABLE', None, ()), SchemaField('predicted', 'STRING', 'NULLABLE', None, ()), SchemaField('holiday_type', 'STRING', 'NULLABLE', None, ())]\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>order_dt</th>\n",
" <th>outlet_code</th>\n",
" <th>item_id</th>\n",
" <th>predicted</th>\n",
" <th>holiday_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C038</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C040</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C038</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C039</td>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C040</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C038</td>\n",
" <td>32</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C039</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C041</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C038</td>\n",
" <td>78</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C039</td>\n",
" <td>45</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C038</td>\n",
" <td>38</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C039</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C040</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C041</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C038</td>\n",
" <td>68</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C039</td>\n",
" <td>51</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C040</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C041</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C038</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C039</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C040</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C038</td>\n",
" <td>46</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C039</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5010</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5011</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5012</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C038</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5013</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C039</td>\n",
" <td>19</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5014</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5015</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5016</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C038</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5017</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C039</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5018</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5019</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C041</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5020</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C038</td>\n",
" <td>25</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5021</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C039</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5022</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5023</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5024</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C038</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5025</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5026</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C040</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5027</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C041</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5028</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C038</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5029</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C039</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5030</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5031</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5032</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C038</td>\n",
" <td>64</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5033</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C039</td>\n",
" <td>20</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5034</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C040</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5035</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C041</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5036</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C038</td>\n",
" <td>43</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5037</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5038</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5039</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5040 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" order_dt outlet_code item_id predicted holiday_type\n",
"0 2019-09-01 OUTLET01 C038 35 0\n",
"1 2019-09-01 OUTLET01 C039 16 0\n",
"2 2019-09-01 OUTLET01 C040 5 0\n",
"3 2019-09-01 OUTLET01 C041 9 0\n",
"4 2019-09-01 OUTLET02 C038 25 0\n",
"5 2019-09-01 OUTLET02 C039 13 0\n",
"6 2019-09-01 OUTLET02 C040 5 0\n",
"7 2019-09-01 OUTLET02 C041 5 0\n",
"8 2019-09-01 OUTLET03 C038 32 0\n",
"9 2019-09-01 OUTLET03 C039 26 0\n",
"10 2019-09-01 OUTLET03 C040 9 0\n",
"11 2019-09-01 OUTLET03 C041 7 0\n",
"12 2019-09-01 OUTLET05 C038 78 0\n",
"13 2019-09-01 OUTLET05 C039 45 0\n",
"14 2019-09-01 OUTLET05 C040 10 0\n",
"15 2019-09-01 OUTLET05 C041 5 0\n",
"16 2019-09-01 OUTLET06 C038 38 0\n",
"17 2019-09-01 OUTLET06 C039 20 0\n",
"18 2019-09-01 OUTLET06 C040 5 0\n",
"19 2019-09-01 OUTLET06 C041 3 0\n",
"20 2019-09-01 OUTLET07 C038 68 0\n",
"21 2019-09-01 OUTLET07 C039 51 0\n",
"22 2019-09-01 OUTLET07 C040 11 0\n",
"23 2019-09-01 OUTLET07 C041 21 0\n",
"24 2019-09-01 OUTLET08 C038 21 0\n",
"25 2019-09-01 OUTLET08 C039 8 0\n",
"26 2019-09-01 OUTLET08 C040 2 0\n",
"27 2019-09-01 OUTLET08 C041 5 0\n",
"28 2019-09-01 OUTLET09 C038 46 0\n",
"29 2019-09-01 OUTLET09 C039 25 0\n",
"... ... ... ... ... ...\n",
"5010 2019-11-23 OUTLET09 C040 10 9\n",
"5011 2019-11-23 OUTLET09 C041 8 9\n",
"5012 2019-11-23 OUTLET10 C038 26 9\n",
"5013 2019-11-23 OUTLET10 C039 19 9\n",
"5014 2019-11-23 OUTLET10 C040 4 9\n",
"5015 2019-11-23 OUTLET10 C041 5 9\n",
"5016 2019-11-23 OUTLET11 C038 16 9\n",
"5017 2019-11-23 OUTLET11 C039 3 9\n",
"5018 2019-11-23 OUTLET11 C040 0 9\n",
"5019 2019-11-23 OUTLET11 C041 7 9\n",
"5020 2019-11-23 OUTLET13 C038 25 9\n",
"5021 2019-11-23 OUTLET13 C039 6 9\n",
"5022 2019-11-23 OUTLET13 C040 0 9\n",
"5023 2019-11-23 OUTLET13 C041 6 9\n",
"5024 2019-11-23 OUTLET14 C038 31 9\n",
"5025 2019-11-23 OUTLET14 C039 16 9\n",
"5026 2019-11-23 OUTLET14 C040 6 9\n",
"5027 2019-11-23 OUTLET14 C041 3 9\n",
"5028 2019-11-23 OUTLET17 C038 4 9\n",
"5029 2019-11-23 OUTLET17 C039 1 9\n",
"5030 2019-11-23 OUTLET17 C040 0 9\n",
"5031 2019-11-23 OUTLET17 C041 0 9\n",
"5032 2019-11-23 OUTLET18 C038 64 9\n",
"5033 2019-11-23 OUTLET18 C039 20 9\n",
"5034 2019-11-23 OUTLET18 C040 8 9\n",
"5035 2019-11-23 OUTLET18 C041 7 9\n",
"5036 2019-11-23 OUTLET19 C038 43 9\n",
"5037 2019-11-23 OUTLET19 C039 16 9\n",
"5038 2019-11-23 OUTLET19 C040 4 9\n",
"5039 2019-11-23 OUTLET19 C041 8 9\n",
"\n",
"[5040 rows x 5 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 29
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Sw8k8GP5W160",
"colab_type": "code",
"outputId": "a3cacb1b-dbd8-4647-c354-20d582c590cd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(y_test, y_pred)\n",
"ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)\n",
"ax.set_xlabel('Measured')\n",
"ax.set_ylabel('Predicted')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "d3WuRg_6RjcF",
"colab_type": "code",
"outputId": "7fdb25c3-4fae-4265-e181-c36a4a5eb56e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 824
}
},
"source": [
"df_pred = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})\n",
"df1 = df_pred.head(25)\n",
"df1"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>Predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-04-07</th>\n",
" <td>50.0</td>\n",
" <td>23.912955</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-03</th>\n",
" <td>40.0</td>\n",
" <td>49.167422</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>30.0</td>\n",
" <td>32.585095</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-24</th>\n",
" <td>30.0</td>\n",
" <td>30.365002</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-12</th>\n",
" <td>0.0</td>\n",
" <td>14.565611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-19</th>\n",
" <td>0.0</td>\n",
" <td>4.852514</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-11-17</th>\n",
" <td>10.0</td>\n",
" <td>14.366667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-13</th>\n",
" <td>30.0</td>\n",
" <td>25.204376</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-15</th>\n",
" <td>10.0</td>\n",
" <td>4.308965</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-24</th>\n",
" <td>10.0</td>\n",
" <td>20.580106</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-25</th>\n",
" <td>10.0</td>\n",
" <td>6.802192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-17</th>\n",
" <td>30.0</td>\n",
" <td>27.176356</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-04-30</th>\n",
" <td>10.0</td>\n",
" <td>3.367833</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-05</th>\n",
" <td>20.0</td>\n",
" <td>25.264191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-28</th>\n",
" <td>0.0</td>\n",
" <td>6.918949</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-01</th>\n",
" <td>0.0</td>\n",
" <td>6.517201</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-20</th>\n",
" <td>50.0</td>\n",
" <td>37.227433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-29</th>\n",
" <td>0.0</td>\n",
" <td>3.451715</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-30</th>\n",
" <td>20.0</td>\n",
" <td>27.500000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-26</th>\n",
" <td>40.0</td>\n",
" <td>20.859067</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>20.0</td>\n",
" <td>24.341439</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-30</th>\n",
" <td>20.0</td>\n",
" <td>17.007555</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-09</th>\n",
" <td>0.0</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-09-15</th>\n",
" <td>10.0</td>\n",
" <td>15.257937</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-03-26</th>\n",
" <td>0.0</td>\n",
" <td>3.616105</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Actual Predicted\n",
"2019-04-07 50.0 23.912955\n",
"2017-07-03 40.0 49.167422\n",
"2017-08-28 30.0 32.585095\n",
"2018-10-24 30.0 30.365002\n",
"2019-05-12 0.0 14.565611\n",
"2018-12-19 0.0 4.852514\n",
"2017-11-17 10.0 14.366667\n",
"2017-08-13 30.0 25.204376\n",
"2017-08-15 10.0 4.308965\n",
"2018-06-24 10.0 20.580106\n",
"2017-08-25 10.0 6.802192\n",
"2019-06-17 30.0 27.176356\n",
"2019-04-30 10.0 3.367833\n",
"2018-10-05 20.0 25.264191\n",
"2019-08-28 0.0 6.918949\n",
"2018-04-01 0.0 6.517201\n",
"2018-12-20 50.0 37.227433\n",
"2019-06-29 0.0 3.451715\n",
"2019-05-30 20.0 27.500000\n",
"2018-06-26 40.0 20.859067\n",
"2017-08-28 20.0 24.341439\n",
"2018-01-30 20.0 17.007555\n",
"2018-10-09 0.0 0.000000\n",
"2018-09-15 10.0 15.257937\n",
"2019-03-26 0.0 3.616105"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LlkuroXfS156",
"colab_type": "text"
},
"source": [
"### XGBoost"
]
},
{
"cell_type": "code",
"metadata": {
"id": "TYj5DmpaSKGS",
"colab_type": "code",
"outputId": "784c8f88-c40f-4abd-e818-b687b64e421e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 173
}
},
"source": [
"from xgboost import XGBRegressor\n",
"\n",
"XGBModel = XGBRegressor(n_estimators=500, learning_rate=0.05)\n",
"XGBModel.fit(X_train,y_train , verbose=False)\n",
"\n",
"# Get the mean absolute error on the validation data :\n",
"y_pred = XGBModel.predict(X_test)\n",
"\n",
"y_train_pred5 = XGBModel.predict(X_train)\n",
"MAE = mean_absolute_error(y_train , y_train_pred5)\n",
"print('XGBoost training MAE = ',MAE)\n",
"\n",
"print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred)) \n",
"print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred)) \n",
"print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))\n",
"print('R2 Score:', metrics.r2_score(y_test, y_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/xgboost/core.py:587: FutureWarning: Series.base is deprecated and will be removed in a future version\n",
" if getattr(data, 'base', None) is not None and \\\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"[08:48:08] WARNING: /workspace/src/objective/regression_obj.cu:152: reg:linear is now deprecated in favor of reg:squarederror.\n",
"XGBoost training MAE = 6.7955854462420575\n",
"Mean Absolute Error: 6.735954869434804\n",
"Mean Squared Error: 94.02776011967829\n",
"Root Mean Squared Error: 9.696791228013435\n",
"R2 Score: 0.7508959737725993\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tqb7W8qlTOzE",
"colab_type": "text"
},
"source": [
"#### Predict the result"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xSWsnVwKTRml",
"colab_type": "code",
"outputId": "ed0c3158-8752-4b00-e2f7-e55aaea2a272",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"# Predict the result\n",
"pred_next_xdays(XGBModel, 'xgboost_pred.csv',30)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/gdrive/My Drive/Colab Notebooks/xgboost_pred.csv formosa-delights-186103.item_usage.xgboost_pred [SchemaField('order_dt', 'STRING', 'NULLABLE', None, ()), SchemaField('outlet_code', 'STRING', 'NULLABLE', None, ()), SchemaField('item_id', 'STRING', 'NULLABLE', None, ()), SchemaField('predicted', 'STRING', 'NULLABLE', None, ()), SchemaField('holiday_type', 'STRING', 'NULLABLE', None, ())]\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>order_dt</th>\n",
" <th>outlet_code</th>\n",
" <th>item_id</th>\n",
" <th>predicted</th>\n",
" <th>holiday_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C038</td>\n",
" <td>37</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C039</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C040</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C038</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C039</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C040</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C041</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C038</td>\n",
" <td>33</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C039</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C040</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C038</td>\n",
" <td>69</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C039</td>\n",
" <td>41</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C040</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C041</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C038</td>\n",
" <td>42</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C039</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C040</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C041</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C038</td>\n",
" <td>70</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C039</td>\n",
" <td>48</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C040</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C041</td>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C038</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C039</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C040</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C041</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C038</td>\n",
" <td>47</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C039</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5010</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C040</td>\n",
" <td>15</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5011</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C041</td>\n",
" <td>14</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5012</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C038</td>\n",
" <td>27</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5013</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5014</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5015</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C041</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5016</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C038</td>\n",
" <td>20</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5017</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C039</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5018</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5019</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5020</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C038</td>\n",
" <td>32</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5021</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C039</td>\n",
" <td>11</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5022</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C040</td>\n",
" <td>2</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5023</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C041</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5024</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C038</td>\n",
" <td>30</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5025</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C039</td>\n",
" <td>16</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5026</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C040</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5027</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C041</td>\n",
" <td>6</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5028</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C038</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5029</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C039</td>\n",
" <td>5</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5030</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C040</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5031</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5032</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C038</td>\n",
" <td>60</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5033</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C039</td>\n",
" <td>21</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5034</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C040</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5035</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5036</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C038</td>\n",
" <td>37</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5037</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C039</td>\n",
" <td>17</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5038</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C040</td>\n",
" <td>7</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5039</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C041</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5040 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" order_dt outlet_code item_id predicted holiday_type\n",
"0 2019-09-01 OUTLET01 C038 37 0\n",
"1 2019-09-01 OUTLET01 C039 17 0\n",
"2 2019-09-01 OUTLET01 C040 7 0\n",
"3 2019-09-01 OUTLET01 C041 6 0\n",
"4 2019-09-01 OUTLET02 C038 26 0\n",
"5 2019-09-01 OUTLET02 C039 12 0\n",
"6 2019-09-01 OUTLET02 C040 3 0\n",
"7 2019-09-01 OUTLET02 C041 3 0\n",
"8 2019-09-01 OUTLET03 C038 33 0\n",
"9 2019-09-01 OUTLET03 C039 22 0\n",
"10 2019-09-01 OUTLET03 C040 6 0\n",
"11 2019-09-01 OUTLET03 C041 6 0\n",
"12 2019-09-01 OUTLET05 C038 69 0\n",
"13 2019-09-01 OUTLET05 C039 41 0\n",
"14 2019-09-01 OUTLET05 C040 12 0\n",
"15 2019-09-01 OUTLET05 C041 7 0\n",
"16 2019-09-01 OUTLET06 C038 42 0\n",
"17 2019-09-01 OUTLET06 C039 23 0\n",
"18 2019-09-01 OUTLET06 C040 7 0\n",
"19 2019-09-01 OUTLET06 C041 4 0\n",
"20 2019-09-01 OUTLET07 C038 70 0\n",
"21 2019-09-01 OUTLET07 C039 48 0\n",
"22 2019-09-01 OUTLET07 C040 11 0\n",
"23 2019-09-01 OUTLET07 C041 20 0\n",
"24 2019-09-01 OUTLET08 C038 22 0\n",
"25 2019-09-01 OUTLET08 C039 8 0\n",
"26 2019-09-01 OUTLET08 C040 1 0\n",
"27 2019-09-01 OUTLET08 C041 3 0\n",
"28 2019-09-01 OUTLET09 C038 47 0\n",
"29 2019-09-01 OUTLET09 C039 28 0\n",
"... ... ... ... ... ...\n",
"5010 2019-11-23 OUTLET09 C040 15 9\n",
"5011 2019-11-23 OUTLET09 C041 14 9\n",
"5012 2019-11-23 OUTLET10 C038 27 9\n",
"5013 2019-11-23 OUTLET10 C039 16 9\n",
"5014 2019-11-23 OUTLET10 C040 4 9\n",
"5015 2019-11-23 OUTLET10 C041 5 9\n",
"5016 2019-11-23 OUTLET11 C038 20 9\n",
"5017 2019-11-23 OUTLET11 C039 5 9\n",
"5018 2019-11-23 OUTLET11 C040 0 9\n",
"5019 2019-11-23 OUTLET11 C041 6 9\n",
"5020 2019-11-23 OUTLET13 C038 32 9\n",
"5021 2019-11-23 OUTLET13 C039 11 9\n",
"5022 2019-11-23 OUTLET13 C040 2 9\n",
"5023 2019-11-23 OUTLET13 C041 7 9\n",
"5024 2019-11-23 OUTLET14 C038 30 9\n",
"5025 2019-11-23 OUTLET14 C039 16 9\n",
"5026 2019-11-23 OUTLET14 C040 4 9\n",
"5027 2019-11-23 OUTLET14 C041 6 9\n",
"5028 2019-11-23 OUTLET17 C038 7 9\n",
"5029 2019-11-23 OUTLET17 C039 5 9\n",
"5030 2019-11-23 OUTLET17 C040 1 9\n",
"5031 2019-11-23 OUTLET17 C041 0 9\n",
"5032 2019-11-23 OUTLET18 C038 60 9\n",
"5033 2019-11-23 OUTLET18 C039 21 9\n",
"5034 2019-11-23 OUTLET18 C040 8 9\n",
"5035 2019-11-23 OUTLET18 C041 8 9\n",
"5036 2019-11-23 OUTLET19 C038 37 9\n",
"5037 2019-11-23 OUTLET19 C039 17 9\n",
"5038 2019-11-23 OUTLET19 C040 7 9\n",
"5039 2019-11-23 OUTLET19 C041 8 9\n",
"\n",
"[5040 rows x 5 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "l98fjvJoZeo0",
"colab_type": "code",
"outputId": "846cd5e9-e9a1-4fec-a22d-cb4120157f68",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 824
}
},
"source": [
"df_pred = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})\n",
"df1 = df_pred.head(25)\n",
"df1"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>Predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-04-07</th>\n",
" <td>50.0</td>\n",
" <td>23.987719</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-03</th>\n",
" <td>40.0</td>\n",
" <td>48.325134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>30.0</td>\n",
" <td>29.984762</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-24</th>\n",
" <td>30.0</td>\n",
" <td>32.509281</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-12</th>\n",
" <td>0.0</td>\n",
" <td>13.614963</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-19</th>\n",
" <td>0.0</td>\n",
" <td>3.995248</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-11-17</th>\n",
" <td>10.0</td>\n",
" <td>10.459047</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-13</th>\n",
" <td>30.0</td>\n",
" <td>26.974371</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-15</th>\n",
" <td>10.0</td>\n",
" <td>4.465562</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-24</th>\n",
" <td>10.0</td>\n",
" <td>20.653194</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-25</th>\n",
" <td>10.0</td>\n",
" <td>9.477861</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-17</th>\n",
" <td>30.0</td>\n",
" <td>26.973803</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-04-30</th>\n",
" <td>10.0</td>\n",
" <td>3.478553</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-05</th>\n",
" <td>20.0</td>\n",
" <td>21.433132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-28</th>\n",
" <td>0.0</td>\n",
" <td>5.968414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-01</th>\n",
" <td>0.0</td>\n",
" <td>7.927432</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-20</th>\n",
" <td>50.0</td>\n",
" <td>31.096466</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-29</th>\n",
" <td>0.0</td>\n",
" <td>3.553644</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-30</th>\n",
" <td>20.0</td>\n",
" <td>26.400726</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-26</th>\n",
" <td>40.0</td>\n",
" <td>22.819540</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>20.0</td>\n",
" <td>21.982077</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-30</th>\n",
" <td>20.0</td>\n",
" <td>16.630430</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-09</th>\n",
" <td>0.0</td>\n",
" <td>-1.548566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-09-15</th>\n",
" <td>10.0</td>\n",
" <td>9.001460</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-03-26</th>\n",
" <td>0.0</td>\n",
" <td>1.221424</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Actual Predicted\n",
"2019-04-07 50.0 23.987719\n",
"2017-07-03 40.0 48.325134\n",
"2017-08-28 30.0 29.984762\n",
"2018-10-24 30.0 32.509281\n",
"2019-05-12 0.0 13.614963\n",
"2018-12-19 0.0 3.995248\n",
"2017-11-17 10.0 10.459047\n",
"2017-08-13 30.0 26.974371\n",
"2017-08-15 10.0 4.465562\n",
"2018-06-24 10.0 20.653194\n",
"2017-08-25 10.0 9.477861\n",
"2019-06-17 30.0 26.973803\n",
"2019-04-30 10.0 3.478553\n",
"2018-10-05 20.0 21.433132\n",
"2019-08-28 0.0 5.968414\n",
"2018-04-01 0.0 7.927432\n",
"2018-12-20 50.0 31.096466\n",
"2019-06-29 0.0 3.553644\n",
"2019-05-30 20.0 26.400726\n",
"2018-06-26 40.0 22.819540\n",
"2017-08-28 20.0 21.982077\n",
"2018-01-30 20.0 16.630430\n",
"2018-10-09 0.0 -1.548566\n",
"2018-09-15 10.0 9.001460\n",
"2019-03-26 0.0 1.221424"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Rw1k1pYTWc_a",
"colab_type": "code",
"outputId": "18faf8f0-3602-49d3-f7b4-ca4cb1ffa409",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(y_test, y_pred)\n",
"ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)\n",
"ax.set_xlabel('Measured')\n",
"ax.set_ylabel('Predicted')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0-BAPDuKs0s-",
"colab_type": "text"
},
"source": [
"### Neural Net"
]
},
{
"cell_type": "code",
"metadata": {
"id": "JkTDDjYcThgU",
"colab_type": "code",
"outputId": "8f49588f-6d2e-4459-ae1a-8b7389ff267d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"from keras.callbacks import ModelCheckpoint\n",
"#from keras.models import Sequential\n",
"from keras.optimizers import Adam,RMSprop\n",
"from sklearn.metrics import accuracy_score\n",
"from keras import Sequential\n",
"from keras.layers import Dense,Activation\n",
"from keras.layers import Flatten, Embedding, Conv1D, MaxPooling1D, Dropout, BatchNormalization\n",
"from keras.callbacks import EarlyStopping\n",
"from sklearn.preprocessing import StandardScaler"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Pg1QrXbOXEiG",
"colab_type": "code",
"colab": {}
},
"source": [
"def build_regressor():\n",
" regressor = Sequential()\n",
" regressor.add(Dense(units=500, activation='relu', input_dim=31))\n",
" regressor.add(Dropout(0.2))\n",
" regressor.add(Dense(units=500, activation='relu'))\n",
" regressor.add(Dropout(0.2))\n",
" regressor.add(Dense(units=500, activation='relu'))\n",
" regressor.add(Dropout(0.2))\n",
" regressor.add(Dense(units=1, activation='linear'))\n",
" \n",
" opt = Adam(lr=1e-3, decay=1e-3 / 200)\n",
" \n",
" regressor.compile(optimizer=opt, loss='mean_absolute_error', metrics=['mean_absolute_error'])\n",
" #regressor.compile(optimizer=opt, loss='mean_squared_error', metrics=['mean_absolute_error', 'mean_squared_error'])\n",
" \n",
" return regressor"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "mOuPT43zXMIz",
"colab_type": "code",
"outputId": "7475f8fe-5bf7-4bb1-b5cb-8a1d7aae6293",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 391
}
},
"source": [
"from keras.wrappers.scikit_learn import KerasRegressor\n",
"regressor = KerasRegressor(build_fn=build_regressor, batch_size=32,epochs=50)\n",
"model = build_regressor()\n",
"model.summary()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Model: \"sequential_4\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_13 (Dense) (None, 500) 16000 \n",
"_________________________________________________________________\n",
"dropout_10 (Dropout) (None, 500) 0 \n",
"_________________________________________________________________\n",
"dense_14 (Dense) (None, 500) 250500 \n",
"_________________________________________________________________\n",
"dropout_11 (Dropout) (None, 500) 0 \n",
"_________________________________________________________________\n",
"dense_15 (Dense) (None, 500) 250500 \n",
"_________________________________________________________________\n",
"dropout_12 (Dropout) (None, 500) 0 \n",
"_________________________________________________________________\n",
"dense_16 (Dense) (None, 1) 501 \n",
"=================================================================\n",
"Total params: 517,501\n",
"Trainable params: 517,501\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "8f8WohoBXPvb",
"colab_type": "code",
"outputId": "397dfafa-dd2b-48f5-8521-5c10148c77c7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 700
}
},
"source": [
"#X_train, X_test, y_train, y_test\n",
"\n",
"early_stop =EarlyStopping(monitor='val_loss', patience=10)\n",
"results=regressor.fit(X_train,y_train,validation_data=(X_test, y_test), callbacks=[early_stop])\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Train on 37916 samples, validate on 9480 samples\n",
"Epoch 1/50\n",
"37916/37916 [==============================] - 8s 199us/step - loss: 7.2461 - mean_absolute_error: 7.2461 - val_loss: 6.4793 - val_mean_absolute_error: 6.4793\n",
"Epoch 2/50\n",
"37916/37916 [==============================] - 7s 186us/step - loss: 6.6954 - mean_absolute_error: 6.6954 - val_loss: 6.4697 - val_mean_absolute_error: 6.4697\n",
"Epoch 3/50\n",
"37916/37916 [==============================] - 7s 184us/step - loss: 6.6533 - mean_absolute_error: 6.6533 - val_loss: 6.3430 - val_mean_absolute_error: 6.3430\n",
"Epoch 4/50\n",
"37916/37916 [==============================] - 7s 180us/step - loss: 6.6018 - mean_absolute_error: 6.6018 - val_loss: 6.3351 - val_mean_absolute_error: 6.3351\n",
"Epoch 5/50\n",
"37916/37916 [==============================] - 7s 184us/step - loss: 6.5463 - mean_absolute_error: 6.5463 - val_loss: 6.3211 - val_mean_absolute_error: 6.3211\n",
"Epoch 6/50\n",
"37916/37916 [==============================] - 7s 186us/step - loss: 6.5528 - mean_absolute_error: 6.5528 - val_loss: 6.3845 - val_mean_absolute_error: 6.3845\n",
"Epoch 7/50\n",
"37916/37916 [==============================] - 7s 183us/step - loss: 6.5186 - mean_absolute_error: 6.5186 - val_loss: 6.4302 - val_mean_absolute_error: 6.4302\n",
"Epoch 8/50\n",
"37916/37916 [==============================] - 7s 186us/step - loss: 6.4986 - mean_absolute_error: 6.4986 - val_loss: 6.5371 - val_mean_absolute_error: 6.5371\n",
"Epoch 9/50\n",
"37916/37916 [==============================] - 7s 187us/step - loss: 6.4654 - mean_absolute_error: 6.4654 - val_loss: 6.2738 - val_mean_absolute_error: 6.2738\n",
"Epoch 10/50\n",
"37916/37916 [==============================] - 7s 185us/step - loss: 6.4603 - mean_absolute_error: 6.4603 - val_loss: 6.2882 - val_mean_absolute_error: 6.2882\n",
"Epoch 11/50\n",
"37916/37916 [==============================] - 7s 185us/step - loss: 6.4223 - mean_absolute_error: 6.4223 - val_loss: 6.2746 - val_mean_absolute_error: 6.2746\n",
"Epoch 12/50\n",
"37916/37916 [==============================] - 7s 193us/step - loss: 6.4177 - mean_absolute_error: 6.4177 - val_loss: 6.3103 - val_mean_absolute_error: 6.3103\n",
"Epoch 13/50\n",
"37916/37916 [==============================] - 7s 185us/step - loss: 6.4202 - mean_absolute_error: 6.4202 - val_loss: 6.3688 - val_mean_absolute_error: 6.3688\n",
"Epoch 14/50\n",
"37916/37916 [==============================] - 7s 185us/step - loss: 6.3868 - mean_absolute_error: 6.3868 - val_loss: 6.2872 - val_mean_absolute_error: 6.2872\n",
"Epoch 15/50\n",
"37916/37916 [==============================] - 7s 191us/step - loss: 6.3676 - mean_absolute_error: 6.3676 - val_loss: 6.3051 - val_mean_absolute_error: 6.3051\n",
"Epoch 16/50\n",
"37916/37916 [==============================] - 7s 182us/step - loss: 6.3807 - mean_absolute_error: 6.3807 - val_loss: 6.2806 - val_mean_absolute_error: 6.2806\n",
"Epoch 17/50\n",
"37916/37916 [==============================] - 7s 182us/step - loss: 6.3875 - mean_absolute_error: 6.3875 - val_loss: 6.2797 - val_mean_absolute_error: 6.2797\n",
"Epoch 18/50\n",
"37916/37916 [==============================] - 7s 184us/step - loss: 6.3561 - mean_absolute_error: 6.3561 - val_loss: 6.4150 - val_mean_absolute_error: 6.4150\n",
"Epoch 19/50\n",
"37916/37916 [==============================] - 7s 190us/step - loss: 6.3477 - mean_absolute_error: 6.3477 - val_loss: 6.2976 - val_mean_absolute_error: 6.2976\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "KvndyJNZBE19",
"colab_type": "code",
"outputId": "fc35b159-3065-4859-c972-11c0c2397681",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 72
}
},
"source": [
"model.model.save('saved_model.h5')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/keras/engine/sequential.py:111: UserWarning: `Sequential.model` is deprecated. `Sequential` is a subclass of `Model`, you can just use your `Sequential` instance directly.\n",
" warnings.warn('`Sequential.model` is deprecated. '\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Zv0EOsEKh7D3",
"colab_type": "code",
"outputId": "ac807871-758b-441d-a414-cb18f530423e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"def plot_history(history):\n",
" hist = pd.DataFrame(history.history)\n",
" hist['epoch'] = history.epoch\n",
" \n",
" plt.figure()\n",
" plt.xlabel('Epoch')\n",
" plt.ylabel('Mean Abs Error [MPG]')\n",
" plt.plot(hist['epoch'], hist['mean_absolute_error'],\n",
" label='Train Error')\n",
" plt.plot(hist['epoch'], hist['val_mean_absolute_error'],\n",
" label = 'Val Error')\n",
" #plt.ylim([0,5])\n",
" plt.legend()\n",
"\n",
" #plt.figure()\n",
" #plt.xlabel('Epoch')\n",
" #plt.ylabel('Mean Square Error [$MPG^2$]')\n",
" #plt.plot(hist['epoch'], hist['mean_squared_error'],\n",
" # label='Train Error')\n",
" #plt.plot(hist['epoch'], hist['val_mean_squared_error'],\n",
" # label = 'Val Error')\n",
" \n",
" #plt.legend()\n",
" plt.show()\n",
"\n",
"\n",
"plot_history(results)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OmI79S_VJfee",
"colab_type": "code",
"outputId": "8ee394bf-5854-4966-eca9-4a6544f0b417",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 824
}
},
"source": [
"y_pred = regressor.predict(X_test)\n",
"df_pred = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})\n",
"df1 = df_pred.head(25)\n",
"df1"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>Predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-04-07</th>\n",
" <td>50.0</td>\n",
" <td>21.185818</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-07-03</th>\n",
" <td>40.0</td>\n",
" <td>47.219410</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>30.0</td>\n",
" <td>30.309542</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-24</th>\n",
" <td>30.0</td>\n",
" <td>30.318447</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-12</th>\n",
" <td>0.0</td>\n",
" <td>10.561611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-19</th>\n",
" <td>0.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-11-17</th>\n",
" <td>10.0</td>\n",
" <td>10.138051</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-13</th>\n",
" <td>30.0</td>\n",
" <td>27.689070</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-15</th>\n",
" <td>10.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-24</th>\n",
" <td>10.0</td>\n",
" <td>19.620787</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-25</th>\n",
" <td>10.0</td>\n",
" <td>9.969027</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-17</th>\n",
" <td>30.0</td>\n",
" <td>26.449509</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-04-30</th>\n",
" <td>10.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-05</th>\n",
" <td>20.0</td>\n",
" <td>22.565140</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-28</th>\n",
" <td>0.0</td>\n",
" <td>10.020723</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-04-01</th>\n",
" <td>0.0</td>\n",
" <td>9.946705</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-12-20</th>\n",
" <td>50.0</td>\n",
" <td>39.810631</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-06-29</th>\n",
" <td>0.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-05-30</th>\n",
" <td>20.0</td>\n",
" <td>30.811691</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-06-26</th>\n",
" <td>40.0</td>\n",
" <td>19.961226</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-08-28</th>\n",
" <td>20.0</td>\n",
" <td>21.939608</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-30</th>\n",
" <td>20.0</td>\n",
" <td>18.356581</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-10-09</th>\n",
" <td>0.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-09-15</th>\n",
" <td>10.0</td>\n",
" <td>14.508426</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-03-26</th>\n",
" <td>0.0</td>\n",
" <td>0.006997</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Actual Predicted\n",
"2019-04-07 50.0 21.185818\n",
"2017-07-03 40.0 47.219410\n",
"2017-08-28 30.0 30.309542\n",
"2018-10-24 30.0 30.318447\n",
"2019-05-12 0.0 10.561611\n",
"2018-12-19 0.0 0.006997\n",
"2017-11-17 10.0 10.138051\n",
"2017-08-13 30.0 27.689070\n",
"2017-08-15 10.0 0.006997\n",
"2018-06-24 10.0 19.620787\n",
"2017-08-25 10.0 9.969027\n",
"2019-06-17 30.0 26.449509\n",
"2019-04-30 10.0 0.006997\n",
"2018-10-05 20.0 22.565140\n",
"2019-08-28 0.0 10.020723\n",
"2018-04-01 0.0 9.946705\n",
"2018-12-20 50.0 39.810631\n",
"2019-06-29 0.0 0.006997\n",
"2019-05-30 20.0 30.811691\n",
"2018-06-26 40.0 19.961226\n",
"2017-08-28 20.0 21.939608\n",
"2018-01-30 20.0 18.356581\n",
"2018-10-09 0.0 0.006997\n",
"2018-09-15 10.0 14.508426\n",
"2019-03-26 0.0 0.006997"
]
},
"metadata": {
"tags": []
},
"execution_count": 46
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "UwT0Vrgb0yae",
"colab_type": "code",
"outputId": "6a04141d-ff60-411f-fa6d-5415ed4e7369",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 301
}
},
"source": [
"df_cd.head(5)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>outlet_code</th>\n",
" <th>outlet_name</th>\n",
" <th>item_id</th>\n",
" <th>item_qty</th>\n",
" <th>item_desc</th>\n",
" <th>item_type</th>\n",
" <th>month</th>\n",
" <th>year</th>\n",
" <th>order_dt</th>\n",
" <th>day</th>\n",
" <th>day_of_week</th>\n",
" <th>holiday_type</th>\n",
" <th>holiday_desc</th>\n",
" <th>predicted</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>OUTLET01</td>\n",
" <td>新达成</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>卤肉</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>OUTLET01</td>\n",
" <td>新达成</td>\n",
" <td>C039</td>\n",
" <td>30</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>OUTLET01</td>\n",
" <td>新达成</td>\n",
" <td>C040</td>\n",
" <td>30</td>\n",
" <td>鸡刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>OUTLET01</td>\n",
" <td>新达成</td>\n",
" <td>C038</td>\n",
" <td>50</td>\n",
" <td>牛刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" <td>36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>OUTLET02</td>\n",
" <td>莱佛士</td>\n",
" <td>C039</td>\n",
" <td>10</td>\n",
" <td>排刀</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>2017</td>\n",
" <td>2017-07-01</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>nan</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" outlet_code outlet_name item_id ... holiday_type holiday_desc predicted\n",
"0 OUTLET01 新达成 C041 ... 0 nan 6\n",
"1 OUTLET01 新达成 C039 ... 0 nan 16\n",
"2 OUTLET01 新达成 C040 ... 0 nan 6\n",
"3 OUTLET01 新达成 C038 ... 0 nan 36\n",
"4 OUTLET02 莱佛士 C039 ... 0 nan 12\n",
"\n",
"[5 rows x 14 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 73
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "PWodbRb4_knj",
"colab_type": "code",
"outputId": "8ea926ff-28ea-4ad1-c585-973d6900f7b8",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 85
}
},
"source": [
"y_pred = regressor.predict(X_test)\n",
"print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred)) \n",
"print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred)) \n",
"print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))\n",
"print('R2 Score:', metrics.r2_score(y_test, y_pred))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Mean Absolute Error: 6.297633879050565\n",
"Mean Squared Error: 107.49801179927341\n",
"Root Mean Squared Error: 10.368124796667592\n",
"R2 Score: 0.71520976872621\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "j19VERFQxYXK",
"colab_type": "code",
"outputId": "79645bfd-a387-4d42-815a-430b7dccc553",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"source": [
"# Predict the result\n",
"pred_next_xdays(regressor, 'nn_pred.csv',30)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"/gdrive/My Drive/Colab Notebooks/nn_pred.csv formosa-delights-186103.item_usage.nn_pred [SchemaField('order_dt', 'STRING', 'NULLABLE', None, ()), SchemaField('outlet_code', 'STRING', 'NULLABLE', None, ()), SchemaField('item_id', 'STRING', 'NULLABLE', None, ()), SchemaField('predicted', 'STRING', 'NULLABLE', None, ()), SchemaField('holiday_type', 'STRING', 'NULLABLE', None, ())]\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>order_dt</th>\n",
" <th>outlet_code</th>\n",
" <th>item_id</th>\n",
" <th>predicted</th>\n",
" <th>holiday_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C038</td>\n",
" <td>36</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C039</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET01</td>\n",
" <td>C041</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C038</td>\n",
" <td>27</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C039</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET02</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C038</td>\n",
" <td>31</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C039</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET03</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C038</td>\n",
" <td>70</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C039</td>\n",
" <td>46</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET05</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C038</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C039</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C040</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET06</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C038</td>\n",
" <td>67</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C039</td>\n",
" <td>50</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET07</td>\n",
" <td>C041</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C038</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C039</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET08</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C038</td>\n",
" <td>44</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2019-09-01</td>\n",
" <td>OUTLET09</td>\n",
" <td>C039</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5010</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5011</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET09</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5012</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C038</td>\n",
" <td>27</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5013</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C039</td>\n",
" <td>19</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5014</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5015</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET10</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5016</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C038</td>\n",
" <td>18</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5017</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C039</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5018</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5019</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET11</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5020</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C038</td>\n",
" <td>26</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5021</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C039</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5022</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5023</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET13</td>\n",
" <td>C041</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5024</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C038</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5025</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C039</td>\n",
" <td>21</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5026</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5027</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET14</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5028</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C038</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5029</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C039</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5030</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5031</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET17</td>\n",
" <td>C041</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5032</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C038</td>\n",
" <td>64</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5033</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C039</td>\n",
" <td>22</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5034</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C040</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5035</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET18</td>\n",
" <td>C041</td>\n",
" <td>9</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5036</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C038</td>\n",
" <td>44</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5037</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C039</td>\n",
" <td>19</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5038</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C040</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5039</th>\n",
" <td>2019-11-23</td>\n",
" <td>OUTLET19</td>\n",
" <td>C041</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5040 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" order_dt outlet_code item_id predicted holiday_type\n",
"0 2019-09-01 OUTLET01 C038 36 0\n",
"1 2019-09-01 OUTLET01 C039 17 0\n",
"2 2019-09-01 OUTLET01 C040 9 0\n",
"3 2019-09-01 OUTLET01 C041 10 0\n",
"4 2019-09-01 OUTLET02 C038 27 0\n",
"5 2019-09-01 OUTLET02 C039 10 0\n",
"6 2019-09-01 OUTLET02 C040 0 0\n",
"7 2019-09-01 OUTLET02 C041 9 0\n",
"8 2019-09-01 OUTLET03 C038 31 0\n",
"9 2019-09-01 OUTLET03 C039 25 0\n",
"10 2019-09-01 OUTLET03 C040 9 0\n",
"11 2019-09-01 OUTLET03 C041 9 0\n",
"12 2019-09-01 OUTLET05 C038 70 0\n",
"13 2019-09-01 OUTLET05 C039 46 0\n",
"14 2019-09-01 OUTLET05 C040 10 0\n",
"15 2019-09-01 OUTLET05 C041 9 0\n",
"16 2019-09-01 OUTLET06 C038 40 0\n",
"17 2019-09-01 OUTLET06 C039 21 0\n",
"18 2019-09-01 OUTLET06 C040 9 0\n",
"19 2019-09-01 OUTLET06 C041 0 0\n",
"20 2019-09-01 OUTLET07 C038 67 0\n",
"21 2019-09-01 OUTLET07 C039 50 0\n",
"22 2019-09-01 OUTLET07 C040 10 0\n",
"23 2019-09-01 OUTLET07 C041 18 0\n",
"24 2019-09-01 OUTLET08 C038 0 0\n",
"25 2019-09-01 OUTLET08 C039 0 0\n",
"26 2019-09-01 OUTLET08 C040 0 0\n",
"27 2019-09-01 OUTLET08 C041 0 0\n",
"28 2019-09-01 OUTLET09 C038 44 0\n",
"29 2019-09-01 OUTLET09 C039 26 0\n",
"... ... ... ... ... ...\n",
"5010 2019-11-23 OUTLET09 C040 10 9\n",
"5011 2019-11-23 OUTLET09 C041 9 9\n",
"5012 2019-11-23 OUTLET10 C038 27 9\n",
"5013 2019-11-23 OUTLET10 C039 19 9\n",
"5014 2019-11-23 OUTLET10 C040 0 9\n",
"5015 2019-11-23 OUTLET10 C041 0 9\n",
"5016 2019-11-23 OUTLET11 C038 18 9\n",
"5017 2019-11-23 OUTLET11 C039 0 9\n",
"5018 2019-11-23 OUTLET11 C040 0 9\n",
"5019 2019-11-23 OUTLET11 C041 9 9\n",
"5020 2019-11-23 OUTLET13 C038 26 9\n",
"5021 2019-11-23 OUTLET13 C039 10 9\n",
"5022 2019-11-23 OUTLET13 C040 0 9\n",
"5023 2019-11-23 OUTLET13 C041 10 9\n",
"5024 2019-11-23 OUTLET14 C038 31 9\n",
"5025 2019-11-23 OUTLET14 C039 21 9\n",
"5026 2019-11-23 OUTLET14 C040 0 9\n",
"5027 2019-11-23 OUTLET14 C041 0 9\n",
"5028 2019-11-23 OUTLET17 C038 0 9\n",
"5029 2019-11-23 OUTLET17 C039 0 9\n",
"5030 2019-11-23 OUTLET17 C040 0 9\n",
"5031 2019-11-23 OUTLET17 C041 0 9\n",
"5032 2019-11-23 OUTLET18 C038 64 9\n",
"5033 2019-11-23 OUTLET18 C039 22 9\n",
"5034 2019-11-23 OUTLET18 C040 10 9\n",
"5035 2019-11-23 OUTLET18 C041 9 9\n",
"5036 2019-11-23 OUTLET19 C038 44 9\n",
"5037 2019-11-23 OUTLET19 C039 19 9\n",
"5038 2019-11-23 OUTLET19 C040 0 9\n",
"5039 2019-11-23 OUTLET19 C041 10 9\n",
"\n",
"[5040 rows x 5 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 51
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "FwgAYi2aAj7q",
"colab_type": "code",
"outputId": "5ca0426c-2b5b-4d64-fff1-f417c2f6d19b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
}
},
"source": [
"fig, ax = plt.subplots()\n",
"ax.scatter(y_test, y_pred)\n",
"ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4)\n",
"ax.set_xlabel('Measured')\n",
"ax.set_ylabel('Predicted')\n",
"plt.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "U0dd9pkHdSq2",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment