Skip to content

Instantly share code, notes, and snippets.

@mserranom
Last active May 2, 2018 16:51
Show Gist options
  • Select an option

  • Save mserranom/4b7c5cff941f3f6831daf4141ab397a7 to your computer and use it in GitHub Desktop.

Select an option

Save mserranom/4b7c5cff941f3f6831daf4141ab397a7 to your computer and use it in GitHub Desktop.
nyse.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NYSE & Blurr\n",
"\n",
"In this guide we will train a machine learning model that predicts closing price of a stock based on historical data. We will transform time-series stock data into features to train this model. \n",
"\n",
"## Prerequisites\n",
"\n",
"It's recommended to have a basic understanding of how Blurr works. Following [tutorials 1](http://productml-blurr.readthedocs.io/en/latest/Streaming%20DTC%20Tutorial/) and [2](http://productml-blurr.readthedocs.io/en/latest/Window%20DTC%20Tutorial/) should provide enough background context.\n",
"\n",
"\n",
"## Preparation\n",
"\n",
"Let's start by installing `Blurr` and other required dependencies:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"installing blurr, keras and tensorflow...\n",
"done.\n"
]
}
],
"source": [
"import sys\n",
"\n",
"print(\"installing blurr, keras and tensorflow...\")\n",
"!{sys.executable} -m pip install blurr-dev --quiet\n",
"!{sys.executable} -m pip install keras --quiet\n",
"!{sys.executable} -m pip install tensorflow --quiet\n",
"print(\"done.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The Dataset\n",
"\n",
"This walkthrough is based on [New York Stock Exchange Data](https://www.kaggle.com/dgawlik/nyse/data) made available for [Kaggle challenges](https://www.kaggle.com/dgawlik/nyse).\n",
"\n",
"Let's start by downloading and having a peek at the available data: "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2018-05-02 16:26:07-- http://demo.productml.com/data/prices-split-adjusted.json.zip\n",
"Resolving demo.productml.com (demo.productml.com)... 52.218.160.7\n",
"Connecting to demo.productml.com (demo.productml.com)|52.218.160.7|:80... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 22162139 (21M) [application/zip]\n",
"Saving to: ‘prices-split-adjusted.json.zip’\n",
"\n",
"prices-split-adjust 100%[===================>] 21.13M 314KB/s in 65s \n",
"\n",
"2018-05-02 16:27:13 (334 KB/s) - ‘prices-split-adjusted.json.zip’ saved [22162139/22162139]\n",
"\n",
"Archive: prices-split-adjusted.json.zip\n",
" inflating: ./prices-split-adjusted.json \n"
]
}
],
"source": [
"!wget http://demo.productml.com/data/prices-split-adjusted.json.zip\n",
"!unzip -o prices-split-adjusted.json.zip -d ."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>close</th>\n",
" <th>date</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>open</th>\n",
" <th>symbol</th>\n",
" <th>volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>125.839996</td>\n",
" <td>2016-01-05</td>\n",
" <td>126.250000</td>\n",
" <td>122.309998</td>\n",
" <td>123.430000</td>\n",
" <td>WLTW</td>\n",
" <td>2163600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>119.980003</td>\n",
" <td>2016-01-06</td>\n",
" <td>125.540001</td>\n",
" <td>119.940002</td>\n",
" <td>125.239998</td>\n",
" <td>WLTW</td>\n",
" <td>2386400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>114.949997</td>\n",
" <td>2016-01-07</td>\n",
" <td>119.739998</td>\n",
" <td>114.930000</td>\n",
" <td>116.379997</td>\n",
" <td>WLTW</td>\n",
" <td>2489500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>116.620003</td>\n",
" <td>2016-01-08</td>\n",
" <td>117.440002</td>\n",
" <td>113.500000</td>\n",
" <td>115.480003</td>\n",
" <td>WLTW</td>\n",
" <td>2006300</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>114.970001</td>\n",
" <td>2016-01-11</td>\n",
" <td>117.330002</td>\n",
" <td>114.089996</td>\n",
" <td>117.010002</td>\n",
" <td>WLTW</td>\n",
" <td>1408600</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" close date high low open symbol volume\n",
"0 125.839996 2016-01-05 126.250000 122.309998 123.430000 WLTW 2163600\n",
"1 119.980003 2016-01-06 125.540001 119.940002 125.239998 WLTW 2386400\n",
"2 114.949997 2016-01-07 119.739998 114.930000 116.379997 WLTW 2489500\n",
"3 116.620003 2016-01-08 117.440002 113.500000 115.480003 WLTW 2006300\n",
"4 114.970001 2016-01-11 117.330002 114.089996 117.010002 WLTW 1408600"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"stocks = pd.read_json(\"./prices-split-adjusted.json\", lines=True)\n",
"stocks.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This dataset contains data for each market day.\n",
"\n",
"Our **goal is to predict closing price** of a stock for any given day based on historical data. In order to do that, we need to transform our original data source into **features** that can be used for training.\n",
"\n",
"We'll calculate **moving averages** and other aggregate data for different **time windows**: one, three and seven days.\n",
"\n",
"## Blurr Templates\n",
"\n",
"We perform initial transformation of our data with [nyse-streaming-dtc.yml](./nyse-streaming-dtc.yml). Data is then aggregated by time using [nyse-window-dtc.yml](./nyse-window-dtc.yml)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Type: 'Blurr:Transform:Streaming'\r\n",
"Version: '2018-03-01'\r\n",
"Description: New York Store Exchange Transformations\r\n",
"Name: nyse\r\n",
"\r\n",
"Import:\r\n",
" - { Module: datetime, Identifiers: [ datetime ] }\r\n",
"\r\n",
"Identity: source.symbol\r\n",
"\r\n",
"Time: datetime.strptime(source.date, '%Y-%m-%d')\r\n",
"\r\n",
"Stores:\r\n",
" - Type: 'Blurr:Store:Memory'\r\n",
" Name: memory\r\n",
"\r\n",
"Aggregates:\r\n",
" - Type: 'Blurr:Aggregate:Block'\r\n",
" Name: stats\r\n",
" Store: memory\r\n",
" Split: True\r\n",
" When: source.symbol in ['AAPL', 'MSFT', 'GOOG', 'FB']\r\n",
" Fields:\r\n",
" - Name: close\r\n",
" Type: float\r\n",
" Value: source.close\r\n",
"\r\n",
" - Name: volatility\r\n",
" Type: float\r\n",
" Value: (float(source.high) / float(source.low)) - 1\r\n",
"\r\n",
" - Name: volume\r\n",
" Type: float\r\n",
" Value: source.volume"
]
}
],
"source": [
"!cat nyse-streaming-dtc.yml"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Streaming DTC**\n",
"\n",
"We're predicting values for tech companies only (Apple, Facebook, Microsoft, Google):\n",
"\n",
"```yaml\n",
"When: source.symbol in ['AAPL', 'MSFT', 'GOOG', 'FB']\n",
"```\n",
"\n",
"Each record in the original dataset represents a single day, which is the same we need to feed our window transformation. By setting `Split: True` we'll create a new aggregate for each single dataset record.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Type: Blurr:Transform:Window\r\n",
"Version: '2018-03-01'\r\n",
"Name: moving_averages\r\n",
"\r\n",
"SourceDTC: nyse\r\n",
"\r\n",
"Anchor:\r\n",
" Condition: nyse.stats.volatility < 0.04\r\n",
"\r\n",
"Aggregates:\r\n",
"\r\n",
"\r\n",
" - Type: Blurr:Aggregate:Window\r\n",
" Name: close\r\n",
" WindowType: count\r\n",
" WindowValue: 1\r\n",
" Source: nyse.stats\r\n",
" Fields:\r\n",
" - Name: value\r\n",
" Type: float\r\n",
" Value: anchor.close\r\n",
"\r\n",
" - Type: Blurr:Aggregate:Window\r\n",
" Name: last\r\n",
" WindowType: count\r\n",
" WindowValue: -1\r\n",
" Source: nyse.stats\r\n",
" Fields:\r\n",
" - Name: close\r\n",
" Type: float\r\n",
" Value: source.close[0]\r\n",
" - Name: volume\r\n",
" Type: float\r\n",
" Value: source.volume[0]\r\n",
" - Name: volatility\r\n",
" Type: float\r\n",
" Value: source.volatility[0]\r\n",
"\r\n",
" - Type: Blurr:Aggregate:Window\r\n",
" Name: last_3\r\n",
" WindowType: count\r\n",
" WindowValue: -3\r\n",
" Source: nyse.stats\r\n",
" Fields:\r\n",
" - Name: close_avg\r\n",
" Type: float\r\n",
" Value: sum(source.close) / len(source.close)\r\n",
" - Name: volume_avg\r\n",
" Type: float\r\n",
" Value: sum(source.volume) / len(source.volume)\r\n",
" - Name: volatility_avg\r\n",
" Type: float\r\n",
" Value: sum(source.volatility) / len(source.volatility)\r\n",
" - Name: max_volatility\r\n",
" Type: float\r\n",
" Value: max(source.volatility)\r\n",
" - Name: min_volatility\r\n",
" Type: float\r\n",
" Value: min(source.volatility)\r\n",
"\r\n",
" - Type: Blurr:Aggregate:Window\r\n",
" Name: last_7\r\n",
" WindowType: count\r\n",
" WindowValue: -7\r\n",
" Source: nyse.stats\r\n",
" Fields:\r\n",
" - Name: close_avg\r\n",
" Type: float\r\n",
" Value: sum(source.close) / len(source.close)\r\n",
" - Name: volume_avg\r\n",
" Type: float\r\n",
" Value: sum(source.volume) / len(source.volume)\r\n",
" - Name: volatility_avg\r\n",
" Type: float\r\n",
" Value: sum(source.volatility) / len(source.volatility)\r\n",
" - Name: max_volatility\r\n",
" Type: float\r\n",
" Value: max(source.volatility)\r\n",
" - Name: min_volatility\r\n",
" Type: float\r\n",
" Value: min(source.volatility)"
]
}
],
"source": [
"!cat 'nyse-window-dtc.yml'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Window DTC**\n",
"\n",
"We'll use a very rough criteria to remove outliers: our model will only work when closing price changes less than a 4%:\n",
"\n",
"```yaml\n",
"Anchor:\n",
" Condition: nyse.stats.volatility < 0.04\n",
"```\n",
"\n",
"We're using [moving averages](https://www.investopedia.com/terms/m/movingaverage.asp) to generate features based on historical data about a stock:\n",
"\n",
"```yaml\n",
"- Type: Blurr:Aggregate:Window\n",
" Name: last_7\n",
" WindowType: count\n",
" WindowValue: -7\n",
" Source: nyse.stats\n",
" Fields:\n",
" - Name: close_avg\n",
" Type: float\n",
" Value: sum(source.close) / len(source.close)\n",
"```\n",
"\n",
"\n",
"## Transforming Data\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running syntax validation on nyse-streaming-dtc.yml\n",
"Document is valid\n",
"Running syntax validation on nyse-window-dtc.yml\n",
"Document is valid\n"
]
}
],
"source": [
"from blurr_util import print_head, validate, transform\n",
"\n",
"validate('nyse-streaming-dtc.yml')\n",
"validate('nyse-window-dtc.yml')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's run our Streaming DTC for informational purposes only, so we can preview the result of the transformation:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"transform(log_files=[\"./prices-split-adjusted.json\"],\n",
" stream_dtc='./nyse-streaming-dtc.yml',\n",
" output_file=\"./nyse-streaming-dtc-out.log\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table><tr><th>_identity<th><th>_start_time<th><th>_end_time<th><th>close<th><th>volatility<th><th>volume<th></tr><tr><td>AAPL<td><td>2010-01-04T00:00:00<td><td>2010-01-04T00:00:00<td><td>30.5728568571<td><td>0.009982083954336085<td><td>123432400.0<td></tr><tr><td>AAPL<td><td>2010-01-05T00:00:00<td><td>2010-01-05T00:00:00<td><td>30.6257132857<td><td>0.010973036651542811<td><td>150476200.0<td></tr><tr><td>AAPL<td><td>2010-01-06T00:00:00<td><td>2010-01-06T00:00:00<td><td>30.1385707143<td><td>0.02125739461533116<td><td>138040000.0<td></tr><tr><td>AAPL<td><td>2010-01-07T00:00:00<td><td>2010-01-07T00:00:00<td><td>30.0828571428<td><td>0.014111461035875461<td><td>119282800.0<td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"print_head(\"./nyse-streaming-dtc-out.log\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"transform(log_files=[\"./prices-split-adjusted.json\"],\n",
" stream_dtc='./nyse-streaming-dtc.yml',\n",
" window_dtc='./nyse-window-dtc.yml',\n",
" output_file=\"./nyse-processed-data.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now preview the data that will be used to **train our model**"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>close._identity</th>\n",
" <th>close.value</th>\n",
" <th>last._identity</th>\n",
" <th>last.close</th>\n",
" <th>last.volatility</th>\n",
" <th>last.volume</th>\n",
" <th>last_3._identity</th>\n",
" <th>last_3.close_avg</th>\n",
" <th>last_3.max_volatility</th>\n",
" <th>last_3.min_volatility</th>\n",
" <th>last_3.volatility_avg</th>\n",
" <th>last_3.volume_avg</th>\n",
" <th>last_7._identity</th>\n",
" <th>last_7.close_avg</th>\n",
" <th>last_7.max_volatility</th>\n",
" <th>last_7.min_volatility</th>\n",
" <th>last_7.volatility_avg</th>\n",
" <th>last_7.volume_avg</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>AAPL</td>\n",
" <td>30.092857</td>\n",
" <td>AAPL</td>\n",
" <td>29.674286</td>\n",
" <td>0.016229</td>\n",
" <td>148614900.0</td>\n",
" <td>AAPL</td>\n",
" <td>29.990953</td>\n",
" <td>0.021828</td>\n",
" <td>0.014063</td>\n",
" <td>0.017373</td>\n",
" <td>1.253583e+08</td>\n",
" <td>AAPL</td>\n",
" <td>30.198979</td>\n",
" <td>0.021828</td>\n",
" <td>0.009982</td>\n",
" <td>0.015492</td>\n",
" <td>129615200.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>AAPL</td>\n",
" <td>29.918571</td>\n",
" <td>AAPL</td>\n",
" <td>30.092857</td>\n",
" <td>0.033464</td>\n",
" <td>151473000.0</td>\n",
" <td>AAPL</td>\n",
" <td>29.927619</td>\n",
" <td>0.033464</td>\n",
" <td>0.016229</td>\n",
" <td>0.023840</td>\n",
" <td>1.385484e+08</td>\n",
" <td>AAPL</td>\n",
" <td>30.130408</td>\n",
" <td>0.033464</td>\n",
" <td>0.010973</td>\n",
" <td>0.018847</td>\n",
" <td>133621000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>AAPL</td>\n",
" <td>29.418571</td>\n",
" <td>AAPL</td>\n",
" <td>29.918571</td>\n",
" <td>0.006889</td>\n",
" <td>108223500.0</td>\n",
" <td>AAPL</td>\n",
" <td>29.895238</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.018861</td>\n",
" <td>1.361038e+08</td>\n",
" <td>AAPL</td>\n",
" <td>30.029388</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.018263</td>\n",
" <td>127584900.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>AAPL</td>\n",
" <td>30.719999</td>\n",
" <td>AAPL</td>\n",
" <td>29.418571</td>\n",
" <td>0.027833</td>\n",
" <td>148516900.0</td>\n",
" <td>AAPL</td>\n",
" <td>29.810000</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.022729</td>\n",
" <td>1.360711e+08</td>\n",
" <td>AAPL</td>\n",
" <td>29.926531</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.019203</td>\n",
" <td>129081600.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>AAPL</td>\n",
" <td>30.247143</td>\n",
" <td>AAPL</td>\n",
" <td>30.719999</td>\n",
" <td>0.038361</td>\n",
" <td>182501900.0</td>\n",
" <td>AAPL</td>\n",
" <td>30.019047</td>\n",
" <td>0.038361</td>\n",
" <td>0.006889</td>\n",
" <td>0.024361</td>\n",
" <td>1.464141e+08</td>\n",
" <td>AAPL</td>\n",
" <td>30.017551</td>\n",
" <td>0.038361</td>\n",
" <td>0.006889</td>\n",
" <td>0.022667</td>\n",
" <td>138112900.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" close._identity close.value last._identity last.close last.volatility \\\n",
"0 AAPL 30.092857 AAPL 29.674286 0.016229 \n",
"1 AAPL 29.918571 AAPL 30.092857 0.033464 \n",
"2 AAPL 29.418571 AAPL 29.918571 0.006889 \n",
"3 AAPL 30.719999 AAPL 29.418571 0.027833 \n",
"4 AAPL 30.247143 AAPL 30.719999 0.038361 \n",
"\n",
" last.volume last_3._identity last_3.close_avg last_3.max_volatility \\\n",
"0 148614900.0 AAPL 29.990953 0.021828 \n",
"1 151473000.0 AAPL 29.927619 0.033464 \n",
"2 108223500.0 AAPL 29.895238 0.033464 \n",
"3 148516900.0 AAPL 29.810000 0.033464 \n",
"4 182501900.0 AAPL 30.019047 0.038361 \n",
"\n",
" last_3.min_volatility last_3.volatility_avg last_3.volume_avg \\\n",
"0 0.014063 0.017373 1.253583e+08 \n",
"1 0.016229 0.023840 1.385484e+08 \n",
"2 0.006889 0.018861 1.361038e+08 \n",
"3 0.006889 0.022729 1.360711e+08 \n",
"4 0.006889 0.024361 1.464141e+08 \n",
"\n",
" last_7._identity last_7.close_avg last_7.max_volatility \\\n",
"0 AAPL 30.198979 0.021828 \n",
"1 AAPL 30.130408 0.033464 \n",
"2 AAPL 30.029388 0.033464 \n",
"3 AAPL 29.926531 0.033464 \n",
"4 AAPL 30.017551 0.038361 \n",
"\n",
" last_7.min_volatility last_7.volatility_avg last_7.volume_avg \n",
"0 0.009982 0.015492 129615200.0 \n",
"1 0.010973 0.018847 133621000.0 \n",
"2 0.006889 0.018263 127584900.0 \n",
"3 0.006889 0.019203 129081600.0 \n",
"4 0.006889 0.022667 138112900.0 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"window_out = pd.read_csv(\"./nyse-processed-data.csv\")\n",
"window_out.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Modelling\n",
"\n",
"**Blurr** is about Data Preparation and Feature Engineering. Modeling is included here for illustration purpose, and the reader can use any modeling library or tool for such purpose.\n",
"\n",
"Let's start by importing the output of our Window DTC as the source dataset. We're dropping unnecessary `_identity` columns:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>last.close</th>\n",
" <th>last.volatility</th>\n",
" <th>last.volume</th>\n",
" <th>last_3.close_avg</th>\n",
" <th>last_3.max_volatility</th>\n",
" <th>last_3.min_volatility</th>\n",
" <th>last_3.volatility_avg</th>\n",
" <th>last_3.volume_avg</th>\n",
" <th>last_7.close_avg</th>\n",
" <th>last_7.max_volatility</th>\n",
" <th>last_7.min_volatility</th>\n",
" <th>last_7.volatility_avg</th>\n",
" <th>last_7.volume_avg</th>\n",
" <th>close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>29.674286</td>\n",
" <td>0.016229</td>\n",
" <td>148614900.0</td>\n",
" <td>29.990953</td>\n",
" <td>0.021828</td>\n",
" <td>0.014063</td>\n",
" <td>0.017373</td>\n",
" <td>1.253583e+08</td>\n",
" <td>30.198979</td>\n",
" <td>0.021828</td>\n",
" <td>0.009982</td>\n",
" <td>0.015492</td>\n",
" <td>129615200.0</td>\n",
" <td>30.092857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>30.092857</td>\n",
" <td>0.033464</td>\n",
" <td>151473000.0</td>\n",
" <td>29.927619</td>\n",
" <td>0.033464</td>\n",
" <td>0.016229</td>\n",
" <td>0.023840</td>\n",
" <td>1.385484e+08</td>\n",
" <td>30.130408</td>\n",
" <td>0.033464</td>\n",
" <td>0.010973</td>\n",
" <td>0.018847</td>\n",
" <td>133621000.0</td>\n",
" <td>29.918571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>29.918571</td>\n",
" <td>0.006889</td>\n",
" <td>108223500.0</td>\n",
" <td>29.895238</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.018861</td>\n",
" <td>1.361038e+08</td>\n",
" <td>30.029388</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.018263</td>\n",
" <td>127584900.0</td>\n",
" <td>29.418571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>29.418571</td>\n",
" <td>0.027833</td>\n",
" <td>148516900.0</td>\n",
" <td>29.810000</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.022729</td>\n",
" <td>1.360711e+08</td>\n",
" <td>29.926531</td>\n",
" <td>0.033464</td>\n",
" <td>0.006889</td>\n",
" <td>0.019203</td>\n",
" <td>129081600.0</td>\n",
" <td>30.719999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>30.719999</td>\n",
" <td>0.038361</td>\n",
" <td>182501900.0</td>\n",
" <td>30.019047</td>\n",
" <td>0.038361</td>\n",
" <td>0.006889</td>\n",
" <td>0.024361</td>\n",
" <td>1.464141e+08</td>\n",
" <td>30.017551</td>\n",
" <td>0.038361</td>\n",
" <td>0.006889</td>\n",
" <td>0.022667</td>\n",
" <td>138112900.0</td>\n",
" <td>30.247143</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" last.close last.volatility last.volume last_3.close_avg \\\n",
"0 29.674286 0.016229 148614900.0 29.990953 \n",
"1 30.092857 0.033464 151473000.0 29.927619 \n",
"2 29.918571 0.006889 108223500.0 29.895238 \n",
"3 29.418571 0.027833 148516900.0 29.810000 \n",
"4 30.719999 0.038361 182501900.0 30.019047 \n",
"\n",
" last_3.max_volatility last_3.min_volatility last_3.volatility_avg \\\n",
"0 0.021828 0.014063 0.017373 \n",
"1 0.033464 0.016229 0.023840 \n",
"2 0.033464 0.006889 0.018861 \n",
"3 0.033464 0.006889 0.022729 \n",
"4 0.038361 0.006889 0.024361 \n",
"\n",
" last_3.volume_avg last_7.close_avg last_7.max_volatility \\\n",
"0 1.253583e+08 30.198979 0.021828 \n",
"1 1.385484e+08 30.130408 0.033464 \n",
"2 1.361038e+08 30.029388 0.033464 \n",
"3 1.360711e+08 29.926531 0.033464 \n",
"4 1.464141e+08 30.017551 0.038361 \n",
"\n",
" last_7.min_volatility last_7.volatility_avg last_7.volume_avg close \n",
"0 0.009982 0.015492 129615200.0 30.092857 \n",
"1 0.010973 0.018847 133621000.0 29.918571 \n",
"2 0.006889 0.018263 127584900.0 29.418571 \n",
"3 0.006889 0.019203 129081600.0 30.719999 \n",
"4 0.006889 0.022667 138112900.0 30.247143 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"def import_dataset():\n",
" data = pd.read_csv(\"./nyse-processed-data.csv\")\n",
" data[\"close\"] = data[\"close.value\"] # Moving close to the last column\n",
" data.drop(['close.value'], 1, inplace=True) \n",
" data.drop(['close._identity'], 1, inplace=True) \n",
" data.drop(['last._identity'], 1, inplace=True) \n",
" data.drop(['last_3._identity'], 1, inplace=True) \n",
" data.drop(['last_7._identity'], 1, inplace=True) \n",
" return data\n",
"\n",
"dataset = import_dataset()\n",
"dataset.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each column represents a Feature, except the rightmost column which represents the Output we're trying to predic"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"#features=13\n"
]
}
],
"source": [
"feature_count = len(dataset.columns) - 1\n",
"print(\"#features=\" + str(feature_count))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We're splitting our dataset into Input Variables (`X`) and the Output Variable (`Y`) using pandas' [`iloc` function](http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.iloc.html):"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5978, 13)\n"
]
}
],
"source": [
"X = dataset.iloc[:, 0:feature_count].values\n",
"print(X.shape)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5978,)\n"
]
}
],
"source": [
"Y = dataset.iloc[:, feature_count].values\n",
"print(Y.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need to split between train and test datasets for training and evaluation of the model:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"X_train_raw, X_test_raw, Y_train_raw, Y_test_raw = train_test_split(X, Y, test_size = 0.2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we need to scale our data before training:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.6/site-packages/sklearn/preprocessing/data.py:321: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
" warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n",
"/opt/conda/lib/python3.6/site-packages/sklearn/preprocessing/data.py:356: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
" warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n",
"/opt/conda/lib/python3.6/site-packages/sklearn/preprocessing/data.py:356: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
" warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n"
]
}
],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"\n",
"scaler = MinMaxScaler()\n",
"X_train = scaler.fit_transform(X_train_raw)\n",
"X_test = scaler.transform(X_test_raw)\n",
"Y_train = scaler.fit_transform(Y_train_raw)\n",
"Y_test = scaler.transform(Y_test_raw)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It's now time to build and train our model:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"# Importing the Keras libraries and packages\n",
"\n",
"import keras\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 4303 samples, validate on 479 samples\n",
"Epoch 1/70\n",
"4303/4303 [==============================] - 0s 88us/step - loss: 0.1013 - acc: 2.3240e-04 - val_loss: 0.0889 - val_acc: 0.0000e+00\n",
"Epoch 2/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 0.0939 - acc: 2.3240e-04 - val_loss: 0.0803 - val_acc: 0.0000e+00\n",
"Epoch 3/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 0.0825 - acc: 2.3240e-04 - val_loss: 0.0678 - val_acc: 0.0000e+00\n",
"Epoch 4/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 0.0669 - acc: 2.3240e-04 - val_loss: 0.0535 - val_acc: 0.0000e+00\n",
"Epoch 5/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 0.0518 - acc: 2.3240e-04 - val_loss: 0.0443 - val_acc: 0.0000e+00\n",
"Epoch 6/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 0.0414 - acc: 2.3240e-04 - val_loss: 0.0338 - val_acc: 0.0000e+00\n",
"Epoch 7/70\n",
"4303/4303 [==============================] - 0s 17us/step - loss: 0.0287 - acc: 2.3240e-04 - val_loss: 0.0204 - val_acc: 0.0000e+00\n",
"Epoch 8/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 0.0154 - acc: 4.6479e-04 - val_loss: 0.0083 - val_acc: 0.0000e+00\n",
"Epoch 9/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 0.0049 - acc: 4.6479e-04 - val_loss: 0.0017 - val_acc: 0.0000e+00\n",
"Epoch 10/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 0.0010 - acc: 4.6479e-04 - val_loss: 7.4279e-04 - val_acc: 0.0000e+00\n",
"Epoch 11/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 7.9136e-04 - acc: 4.6479e-04 - val_loss: 8.5862e-04 - val_acc: 0.0000e+00\n",
"Epoch 12/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 8.6798e-04 - acc: 4.6479e-04 - val_loss: 7.8711e-04 - val_acc: 0.0000e+00\n",
"Epoch 13/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 7.2163e-04 - acc: 4.6479e-04 - val_loss: 6.3454e-04 - val_acc: 0.0000e+00\n",
"Epoch 14/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 5.7548e-04 - acc: 4.6479e-04 - val_loss: 5.5086e-04 - val_acc: 0.0000e+00\n",
"Epoch 15/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 5.2260e-04 - acc: 4.6479e-04 - val_loss: 5.2969e-04 - val_acc: 0.0000e+00\n",
"Epoch 16/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 5.0104e-04 - acc: 4.6479e-04 - val_loss: 4.9973e-04 - val_acc: 0.0000e+00\n",
"Epoch 17/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 4.7037e-04 - acc: 4.6479e-04 - val_loss: 4.6564e-04 - val_acc: 0.0000e+00\n",
"Epoch 18/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.4491e-04 - acc: 4.6479e-04 - val_loss: 4.4358e-04 - val_acc: 0.0000e+00\n",
"Epoch 19/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 4.2526e-04 - acc: 4.6479e-04 - val_loss: 4.2346e-04 - val_acc: 0.0000e+00\n",
"Epoch 20/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 4.0683e-04 - acc: 4.6479e-04 - val_loss: 4.0460e-04 - val_acc: 0.0000e+00\n",
"Epoch 21/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 3.8903e-04 - acc: 4.6479e-04 - val_loss: 3.8761e-04 - val_acc: 0.0000e+00\n",
"Epoch 22/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 3.7150e-04 - acc: 4.6479e-04 - val_loss: 3.6949e-04 - val_acc: 0.0000e+00\n",
"Epoch 23/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 3.5385e-04 - acc: 4.6479e-04 - val_loss: 3.5096e-04 - val_acc: 0.0000e+00\n",
"Epoch 24/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 3.3511e-04 - acc: 4.6479e-04 - val_loss: 3.3146e-04 - val_acc: 0.0000e+00\n",
"Epoch 25/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 3.1418e-04 - acc: 4.6479e-04 - val_loss: 3.0959e-04 - val_acc: 0.0000e+00\n",
"Epoch 26/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 2.9245e-04 - acc: 4.6479e-04 - val_loss: 2.8844e-04 - val_acc: 0.0000e+00\n",
"Epoch 27/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 2.6991e-04 - acc: 4.6479e-04 - val_loss: 2.6561e-04 - val_acc: 0.0000e+00\n",
"Epoch 28/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 2.4877e-04 - acc: 4.6479e-04 - val_loss: 2.4738e-04 - val_acc: 0.0000e+00\n",
"Epoch 29/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 2.2982e-04 - acc: 4.6479e-04 - val_loss: 2.2889e-04 - val_acc: 0.0000e+00\n",
"Epoch 30/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 2.1222e-04 - acc: 4.6479e-04 - val_loss: 2.1304e-04 - val_acc: 0.0000e+00\n",
"Epoch 31/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 1.9655e-04 - acc: 4.6479e-04 - val_loss: 1.9797e-04 - val_acc: 0.0000e+00\n",
"Epoch 32/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 1.8246e-04 - acc: 4.6479e-04 - val_loss: 1.8552e-04 - val_acc: 0.0000e+00\n",
"Epoch 33/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 1.6935e-04 - acc: 4.6479e-04 - val_loss: 1.7353e-04 - val_acc: 0.0000e+00\n",
"Epoch 34/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 1.5819e-04 - acc: 4.6479e-04 - val_loss: 1.6356e-04 - val_acc: 0.0000e+00\n",
"Epoch 35/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 1.4714e-04 - acc: 4.6479e-04 - val_loss: 1.5206e-04 - val_acc: 0.0000e+00\n",
"Epoch 36/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 1.3734e-04 - acc: 4.6479e-04 - val_loss: 1.4514e-04 - val_acc: 0.0000e+00\n",
"Epoch 37/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 1.2823e-04 - acc: 4.6479e-04 - val_loss: 1.3507e-04 - val_acc: 0.0000e+00\n",
"Epoch 38/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 1.1964e-04 - acc: 4.6479e-04 - val_loss: 1.2785e-04 - val_acc: 0.0000e+00\n",
"Epoch 39/70\n",
"4303/4303 [==============================] - 0s 6us/step - loss: 1.1129e-04 - acc: 4.6479e-04 - val_loss: 1.1993e-04 - val_acc: 0.0000e+00\n",
"Epoch 40/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 1.0401e-04 - acc: 4.6479e-04 - val_loss: 1.1278e-04 - val_acc: 0.0000e+00\n",
"Epoch 41/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 9.7596e-05 - acc: 4.6479e-04 - val_loss: 1.0628e-04 - val_acc: 0.0000e+00\n",
"Epoch 42/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 9.1281e-05 - acc: 4.6479e-04 - val_loss: 1.0266e-04 - val_acc: 0.0000e+00\n",
"Epoch 43/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 8.5867e-05 - acc: 4.6479e-04 - val_loss: 9.4637e-05 - val_acc: 0.0000e+00\n",
"Epoch 44/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 8.0901e-05 - acc: 4.6479e-04 - val_loss: 9.0048e-05 - val_acc: 0.0000e+00\n",
"Epoch 45/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 7.6543e-05 - acc: 4.6479e-04 - val_loss: 8.8481e-05 - val_acc: 0.0000e+00\n",
"Epoch 46/70\n",
"4303/4303 [==============================] - 0s 6us/step - loss: 7.2598e-05 - acc: 4.6479e-04 - val_loss: 8.1160e-05 - val_acc: 0.0000e+00\n",
"Epoch 47/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 6.8590e-05 - acc: 4.6479e-04 - val_loss: 7.7573e-05 - val_acc: 0.0000e+00\n",
"Epoch 48/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 6.5812e-05 - acc: 4.6479e-04 - val_loss: 7.6484e-05 - val_acc: 0.0000e+00\n",
"Epoch 49/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 6.2704e-05 - acc: 4.6479e-04 - val_loss: 7.0473e-05 - val_acc: 0.0000e+00\n",
"Epoch 50/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 5.9942e-05 - acc: 4.6479e-04 - val_loss: 6.9676e-05 - val_acc: 0.0000e+00\n",
"Epoch 51/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 5.8576e-05 - acc: 4.6479e-04 - val_loss: 6.5183e-05 - val_acc: 0.0000e+00\n",
"Epoch 52/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 5.6660e-05 - acc: 4.6479e-04 - val_loss: 6.3196e-05 - val_acc: 0.0000e+00\n",
"Epoch 53/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 5.5070e-05 - acc: 4.6479e-04 - val_loss: 6.6809e-05 - val_acc: 0.0000e+00\n",
"Epoch 54/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 5.3106e-05 - acc: 4.6479e-04 - val_loss: 5.9363e-05 - val_acc: 0.0000e+00\n",
"Epoch 55/70\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"4303/4303 [==============================] - 0s 7us/step - loss: 5.1329e-05 - acc: 4.6479e-04 - val_loss: 5.8611e-05 - val_acc: 0.0000e+00\n",
"Epoch 56/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.9965e-05 - acc: 4.6479e-04 - val_loss: 5.7405e-05 - val_acc: 0.0000e+00\n",
"Epoch 57/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 4.8528e-05 - acc: 4.6479e-04 - val_loss: 5.6071e-05 - val_acc: 0.0000e+00\n",
"Epoch 58/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 4.7505e-05 - acc: 4.6479e-04 - val_loss: 5.3840e-05 - val_acc: 0.0000e+00\n",
"Epoch 59/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.6505e-05 - acc: 4.6479e-04 - val_loss: 5.3323e-05 - val_acc: 0.0000e+00\n",
"Epoch 60/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.5437e-05 - acc: 4.6479e-04 - val_loss: 5.1991e-05 - val_acc: 0.0000e+00\n",
"Epoch 61/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 4.4684e-05 - acc: 4.6479e-04 - val_loss: 5.0997e-05 - val_acc: 0.0000e+00\n",
"Epoch 62/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 4.3866e-05 - acc: 4.6479e-04 - val_loss: 4.9680e-05 - val_acc: 0.0000e+00\n",
"Epoch 63/70\n",
"4303/4303 [==============================] - 0s 9us/step - loss: 4.2916e-05 - acc: 4.6479e-04 - val_loss: 4.8643e-05 - val_acc: 0.0000e+00\n",
"Epoch 64/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.2157e-05 - acc: 4.6479e-04 - val_loss: 4.8342e-05 - val_acc: 0.0000e+00\n",
"Epoch 65/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 4.1420e-05 - acc: 4.6479e-04 - val_loss: 4.6409e-05 - val_acc: 0.0000e+00\n",
"Epoch 66/70\n",
"4303/4303 [==============================] - 0s 7us/step - loss: 4.1111e-05 - acc: 4.6479e-04 - val_loss: 4.5707e-05 - val_acc: 0.0000e+00\n",
"Epoch 67/70\n",
"4303/4303 [==============================] - 0s 5us/step - loss: 4.0508e-05 - acc: 4.6479e-04 - val_loss: 4.4937e-05 - val_acc: 0.0000e+00\n",
"Epoch 68/70\n",
"4303/4303 [==============================] - 0s 6us/step - loss: 3.9723e-05 - acc: 4.6479e-04 - val_loss: 4.5177e-05 - val_acc: 0.0000e+00\n",
"Epoch 69/70\n",
"4303/4303 [==============================] - 0s 10us/step - loss: 3.9179e-05 - acc: 4.6479e-04 - val_loss: 4.4589e-05 - val_acc: 0.0000e+00\n",
"Epoch 70/70\n",
"4303/4303 [==============================] - 0s 8us/step - loss: 3.8605e-05 - acc: 4.6479e-04 - val_loss: 4.3353e-05 - val_acc: 0.0000e+00\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x7f9686209470>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Initializing Neural Network\n",
"\n",
"model = Sequential()\n",
"model.add(Dense(units = 36, kernel_initializer = 'uniform', activation = 'relu', input_dim = feature_count))\n",
"model.add(Dense(units = 36, kernel_initializer = 'uniform', activation = 'relu'))\n",
"model.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'linear'))\n",
"\n",
"# Compiling Neural Network\n",
"model.compile(loss='mse',optimizer='adam', metrics=['accuracy'])\n",
"\n",
"# Fitting our model \n",
"model.fit(X_train, Y_train, batch_size = 512, epochs = 70, validation_split=0.1, verbose=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can measure the quality of our model using [MSE](https://en.wikipedia.org/wiki/Mean_squared_error) and [RMSE](https://en.wikipedia.org/wiki/Root-mean-square_deviation):"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model Score: 0.00004 MSE (0.01 RMSE)\n"
]
}
],
"source": [
"import math\n",
"\n",
"score = model.evaluate(X_test, Y_test, verbose=0)\n",
"print('Model Score: %.5f MSE (%.2f RMSE)' % (score[0], math.sqrt(score[0])))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, let's plot prediction vs actual data.\n",
"\n",
"Prior to normalisation, we undo scaling and perform a sort for graph quality:"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEKCAYAAAAIO8L1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VOW9x/HPLzsJkJAQEBI2BVkKEjAqAi4VV2rBjSveVpHS0k2t9VbF2tbb3i5qrVZrtUVR6K3FWhSlvWqrorWiYgNSQdawhyWEQAIh++S5f5wTGiDAAJmcGfJ9v17zmnOe88zM78lJ5pfnPOc8x5xziIiIHCwu6ABERCQ6KUGIiEizlCBERKRZShAiItIsJQgREWmWEoSIiDRLCUJERJqlBCEiIs1SghARkWYlBB3AiejcubPr3bt30GGIiMSURYsW7XTOZR+tXkwniN69e1NQUBB0GCIiMcXMNoZTT4eYRESkWUoQIiLSLCUIERFpVkyPQTSnrq6OoqIiqqurgw7lpJGSkkJubi6JiYlBhyIireikSxBFRUV06NCB3r17Y2ZBhxPznHOUlpZSVFREnz59gg5HRFpRRA8xmdm3zexTM1tmZrPNLMXM+pjZQjNbY2Z/NLMkv26yv17ob+99PJ9ZXV1NVlaWkkMLMTOysrLUIxNpgyKWIMwsB7gNyHfODQbigYnAA8Ajzrl+wG5giv+SKcBu51xf4BG/3vF+9omELgfRz1OkbYr0IHUC0M7MEoBUYBtwETDH3z4LuMpfHu+v428fY/pmEhE5UEMD9XfcBevWRfyjIpYgnHNbgIeATXiJoRxYBJQ55+r9akVAjr+cA2z2X1vv18+KVHyRFB8fT15eHoMHD2bChAlUVlYe93u98847XHnllQDMmzeP+++//7B1y8rKeOKJJ/avb926leuuu+64P1tEos/u515l8CNfYs6DMZwgzKwTXq+gD9AdSAOuaKaqa3zJEbY1fd+pZlZgZgUlJSUtFW6LateuHUuWLGHZsmUkJSXxm9/85oDtzjkaGhqO+X3HjRvHtGnTDrv94ATRvXt35syZc9j6IhJ7ptyXSyF96TP5woh/ViQPMV0MrHfOlTjn6oCXgJFAhn/ICSAX2OovFwE9APzt6cCug9/UOTfdOZfvnMvPzj7qVCKBO++88ygsLGTDhg0MHDiQb3zjGwwfPpzNmzfzt7/9jXPPPZfhw4czYcIEKioqAHj99dcZMGAAo0eP5qWXXtr/XjNnzuSWW24BoLi4mKuvvpqhQ4cydOhQ3n//faZNm8batWvJy8vjzjvvZMOGDQwePBjwBu8nT57MkCFDGDZsGG+//fb+97zmmmu4/PLL6devH3fddVcr/4REJFxFq/Yxd30e/3X6nznznMifhBrJT9gEjDCzVKAKGAMUAG8D1wHPA5OAV/z68/z1D/zt851zh/Qgjsntt8OSJSf0FofIy4Nf/jKsqvX19bz22mtcfvnlAKxatYpnn32WJ554gp07d/LjH/+YN998k7S0NB544AEefvhh7rrrLr7yla8wf/58+vbty/XXX9/se992221ccMEFzJ07l1AoREVFBffffz/Lli1jid/mDRs27K//61//GoClS5eycuVKLr30UlavXg3AkiVL+Pjjj0lOTqZ///7ceuut9OjR43h/QiISIc/duQQYxZTvdm2Vz4vkGMRCvMHmxcBS/7OmA3cDd5hZId4Ywwz/JTOALL/8DuDwx1KiXFVVFXl5eeTn59OzZ0+mTPFO1OrVqxcjRowA4MMPP2T58uWMGjWKvLw8Zs2axcaNG1m5ciV9+vShX79+mBlf/OIXm/2M+fPn8/Wvfx3wxjzS09OPGNN7773HjTfeCMCAAQPo1avX/gQxZswY0tPTSUlJYdCgQWzcGNY8XiLSSkpK4HOfg2l/HsU5SYs5fdLIVvnciPZRnHP3AfcdVLwOOLuZutXAhBYNIMz/9Fta4xjEwdLS0vYvO+e45JJLmD179gF1lixZEpHTSo/UGUtOTt6/HB8fT319/WHrikjre/T+Kl5/LZkf832+Om4X8GSrfK7mYgrIiBEjWLBgAYWFhQBUVlayevVqBgwYwPr161m7di3AIQmk0ZgxY3jySe+XJBQKsWfPHjp06MDevXubrX/++efz3HPPAbB69Wo2bdpE//79W7pZItLCKstqeeKxei5w73Dvl7bT+fH/brXPVoIISHZ2NjNnzuSGG27gjDPOYMSIEaxcuZKUlBSmT5/O5z73OUaPHk2vXr2aff2jjz7K22+/zZAhQzjzzDP59NNPycrKYtSoUQwePJg777zzgPrf+MY3CIVCDBkyhOuvv56ZM2ce0HMQkej00BVvsbu+Az/4ThXMmAFdW2f8AcBOdBw4SPn5+e7gGwatWLGCgQMHBhTRyUs/V5HWt+/p2bT/yg0MS1/Lot2n0VJHn81skXMu/2j11IMQEYlG69fz8FdWAPCFycktlhyOhRKEiEgU+ujRD/gBPwLgmz/LDSQGJQgRkSjjdpdx/a9GAfDWW5CSEkwcShAiIlFm1tQFbGjoxV1f2MJFFwUXhxKEiEgUcZVV/M+8MxiYVMhPZ+Uc/QURpAQhIhJFCu6dy7raHtx5YzHx8cHGogQRIXPnzsXMWLly5RHrzZw5k61btx6xzpE0nQ5cRGLcnj088psUEq2Oqx8aFXQ0ShCRMnv2bEaPHs3zzz9/xHonmiBE5OQQCsGtw95jdvU1XHNBKRkZQUekBBERFRUVLFiwgBkzZhyQIB588EGGDBnC0KFDmTZtGnPmzKGgoIAvfOEL5OXlUVVVRe/evdm5cycABQUFXHjhhQB89NFHjBw5kmHDhjFy5EhWrVoVRNNEJEJ+9qXVPL5uLGNyV/HkS6cEHQ4Q4cn6ghbUbN8vv/wyl19+OaeffjqZmZksXryY4uJiXn75ZRYuXEhqaiq7du0iMzOTxx9/nIceeoj8/CNf1DhgwADeffddEhISePPNN/nud7/Liy++2IItE5Gg1L78Kj/73QWMT3uTuR8NxjoFHZHnpE4QQZk9eza33347ABMnTmT27Nk0NDQwefJkUlNTAcjMzDym9ywvL2fSpEmsWbMGM6Ourq7F4xaRANTWcveXS6kkjS8/nod16xx0RPud1AkiiNm+S0tLmT9/PsuWLcPMCIVCmBnXXnttWNN4JyQk7L8daXV19f7y73//+3z2s59l7ty5bNiwYf+hJxGJbcvvfY5nSq+hf/c9jL0pepIDaAyixc2ZM4ebbrqJjRs3smHDBjZv3kyfPn3IzMzkmWeeobKyEoBdu7y7qR48RXfv3r1ZtGgRwAGHkMrLy8nJ8c6JnjlzZiu1RkQiqbISxv9qDInxDfz5nY7ERdk3csTCMbP+ZrakyWOPmd1uZplm9oaZrfGfO/n1zcweM7NCM/vEzIZHKrZImj17NldfffUBZddeey1bt25l3Lhx5Ofnk5eXx0MPPQTAzTffzNe+9rX9g9T33Xcf3/rWtzjvvPOIb3IS9F133cU999zDqFGjCIVCrdomEYmM2d9ZRGFNT+4f9gL9+gUdzaFaZbpvM4sHtgDnAN8Edjnn7jezaUAn59zdZjYWuBUY69d71Dl3zpHeV9N9tx79XEVa1tYNtfQ+1TjbCpi/YzBJWR1a7bOjbbrvMcBa59xGYDwwyy+fBVzlL48Hfuc8HwIZZtatleITEWlVr17+GHUukd/csqxVk8OxaK0EMRFovHdmV+fcNgD/uYtfngNsbvKaIr9MROTksmABr63qQ25qKZ955MtBR3NYEU8QZpYEjAP+dLSqzZQdcvzLzKaaWYGZFZSUlDT7RrF8l7xopJ+nSMuq/d3zvMnFXDGhAxYXwJ2AwtQaPYgrgMXOuWJ/vbjx0JH/vMMvLwJ6NHldLnDIHBTOuenOuXznXH52dvYhH5aSkkJpaam+1FqIc47S0lJSgpqQXuQk9MriHuwhnauvTwo6lCNqjesgbuDfh5cA5gGTgPv951ealN9iZs/jDVKXNx6KOha5ubkUFRVxuN6FHLuUlBRyc4O5o5XIyaiw1Jto6YILAg7kKCKaIMwsFbgE+GqT4vuBF8xsCrAJmOCXv4p3BlMhUAlMPp7PTExMpE+fPscds4hIpH2yuwcZiRWkprYPOpQjimiCcM5VAlkHlZXindV0cF2HdwqsiMjJq6GBt/ecyZDsLUD/oKM5oii7bk9E5ORWv2Y9Oxo689n8iqBDOSolCBGRVlSyuRpHHKfkBHy7uDAoQYiItKLtRfUAnNI1+s+0VIIQEWlFxdu82Zq7nhK91z80UoIQEWlFH3zi3RNGh5hEROQAT73ek3N5nz79ov92PEoQIiKtxDnYuTeJC/g7ltou6HCOSglCRKSVVFVBXSiejLR6yIn+uUiVIEREWkl5ufec3j0NEhODDSYMShAiIq3ktZeqAOgWI3e6UYIQEWkFDZXVPPWdlXRlO1fe/ZmgwwmLEoSISCuY8cX5fFg9jK9evon4sZcFHU5YlCBERCLtV7/itbnVdE7YzX3zzgw6mrApQYiIRFJBAR/e9hxzuYYbb04gLjH6L5BrpAQhIhJJb77JRJ4nPt4x7Scdgo7mmChBiIhEUGXJPjbSm699zejSJehojo0ShIhIBG0v9ibly88POJDjENEEYWYZZjbHzFaa2QozO9fMMs3sDTNb4z938uuamT1mZoVm9omZDY9kbCIirWFdcRoQExdOHyLSPYhHgdedcwOAocAKYBrwlnOuH/CWvw5wBdDPf0wFnoxwbCIiEffq+oHEU89ZZwUdybGLWIIws47A+cAMAOdcrXOuDBgPzPKrzQKu8pfHA79zng+BDDOLkesNRUQOVb1yA0+svZSru35ARkbQ0Ry7SPYgTgVKgGfN7GMze9rM0oCuzrltAP5z47BNDrC5yeuL/LIDmNlUMysws4KSkpIIhi8icgJqa3njnO9RQwrX3xpjo9O+SCaIBGA48KRzbhiwj38fTmpOc7dXOuSefM656c65fOdcfnZ2dstEKiLS0lau5Cd7bqFflzLGfrt/0NEcl0gmiCKgyDm30F+fg5cwihsPHfnPO5rU79Hk9bnA1gjGJyISMcV/X8lihnPtuHpSU4OO5vhELEE457YDm82sMXWOAZYD84BJftkk4BV/eR5wk3820wigvPFQlIhILGlogFt+dToAN90Wg4MPvkjf8+5W4DkzSwLWAZPxktILZjYF2ARM8Ou+CowFCoFKv66ISMx59PslzFmTx7RTZjJwyM1Bh3PczLlDDvPHjPz8fFdQUBB0GCIi+239ZCe5QzPpaZtZ9/ci4s4bFXRIhzCzRc65o166pyupRURa0As/WoEjjlfuXxmVyeFYKEGIiLSQ5Qt2c9eL53BOyhKG3nlp0OGcMCUIEZEW8oOvFlNHEnfemwzW3Jn7sUUJQkSkBdRX1fHm8m5M6f4a135vYNDhtAglCBGRE+EczJnDM71+SLlL57KbugYdUYuJ9GmuIiInr7o6mDSJwtkf8cu4/yM5McTl9wwLOqoWox6EiMjx+OADGi65jMdmd2Zw/AqKUk9n9h/j6dAx9sceGqkHISJyrL73PWp/8iAT4l5iHlcy8hx4/nno0ePoL40l6kGIiByL8nI++cmfOSNtHfMaruSBB+C9906+5ADqQYiIhKesjNAjj/HUo5XcyXukJScz/RH48pdPijNam6UEISJyNJ98wqIL/4uv7f4pBZzF0Jyd/HZOe84ZEXRgkaUEISJyOBUVVEy9g5mzk7iHl9hn7Xnufx03/Gfnk7bX0JQShIhIc5Ys4cX/fJFbV/w32+jO2UOqmPWCMWBA0IG1HiUIEZGDffQRMy94lsnVT9IxuZoX/wBXX92uTfQamlKCEBE5SN0dd/PD2pkM6lvD+wUppKcHHVEwlCBERJoqLOTpBQPYQC/+71HabHKAMK6DMLNUM/u+mT3lr/czsyvDeXMz22BmS81siZkV+GWZZvaGma3xnzv55WZmj5lZoZl9YmbDT6RhIiLHw/3yUX7CvYwYXsMVVwQdTbDCuVDuWaAGONdfLwJ+fAyf8VnnXF6TuxdNA95yzvUD3vLXAa4A+vmPqcCTx/AZIiIn7h//4JVfb2YLuUz+anKbG3M4WDgJ4jTn3INAHYBzrgo4kR/beGCWvzwLuKpJ+e+c50Mgw8y6ncDniIgcm3ff5ZfcTq/ceiZPDjqY4IWTIGrNrB3gAMzsNLweRTgc8DczW2RmU/2yrs65bQD+cxe/PAfY3OS1RX6ZiEireGtBMn/nQr72zQQSE4OOJnjhDFLfB7wO9DCz54BRwM1hvv8o59xWM+sCvGFmK49Qt7leiTukkpdopgL07NkzzDBERI7u75tPA+Cb3ww4kChx1B6Ec+4N4Bq8pDAbyHfOvRPOmzvntvrPO4C5wNlAceOhI/95h1+9CGg63VUusLWZ95zunMt3zuVnZ2eHE4aISFg2V2SQm7CNDh2CjiQ6hHMW0/nAZ4C9wB5gkF92tNelmVmHxmXgUmAZMA+Y5FebBLziL88DbvLPZhoBlDceihIRaQ01dXGkxNUFHUbUCOcQ051NllPwegGLgIuO8rquwFzzTgNIAP7gnHvdzP4JvGBmU4BNwAS//qvAWKAQqAQ0RCQiraqmPp7keCWIRkdNEM65zzddN7MewINhvG4dMLSZ8lJgTDPlDtCRPxEJTE19PMlx9UGHETWO54ZBRcDglg5ERCRoNfUJJMcrQTQ6ag/CzH7Fv88migPygH9FMigRkSDUhOJJTlKCaBTOGERBk+V6YLZzbkGE4hERCUxNKJFOCRqDaBTOGMSso9URETkZ1NTHkZwQCjqMqHHYBGFmS2nmQjW8C9qcc+6MiEUlItLatm6lpi6O5MSGoCOJGkfqQYQ1Y6uIyElh4ULKGEH703WVXKPDJgjn3MbWDEREJDA7dvDK115jO1eTf0V10NFEjXCupB5hZv80swozqzWzkJntaY3gREQirr6ebfmfZ+KOR+mUvI9JU1OCjihqhHMW0+PAROBPQD5wE9A3kkGJiLSaxx/n6c2XUk07Zj7bQFpa0AFFj7BuOeqcKzSzeOdcCHjWzN6PcFwiIpG1cyf1V0/g8feG8hN7gFEjHdffcDzXDp+8wkkQlWaWBCwxsweBbYByrIjEtNqfPsSt701kOl/lsosb+P0f2vjt45oRTrq80a93C7APb0ruayMZlIhIRO3axZW/upTpfJUJE+C1v8bRuXPQQUWfcHoQw4FXnXN7gB9GOB4RkYh777Y/8kb917l5/C5++/vMNn/v6cMJpwcxDlhtZv9rZp8zs7DGLUREotUvXh1Ix/gKHpieSVJS0NFEr3DuKDcZ76ylPwH/Caw1s6cjHZiISKRsqUhn5Cnr6dIl6EiiW1hD9s65OuA14Hm8mwWNj2RQIiIR88EHlNZ1JLOrDoYcTTgXyl1uZjPx7vR2HfA00C3CcYmIRMaf/kQpWWSdrcu5jiacHsTNwMvA6c65Sc65V51zYU+YbmbxZvaxmf3FX+9jZgvNbI2Z/dE/hRYzS/bXC/3tvY+9OSIiR7b0/b2Uk0H/wYlBhxL1whmDmOice9k5V3Ocn/EtYEWT9QeAR5xz/YDdwBS/fAqw2znXF3jEryci0nLq65lZMJjEuHquvz7oYKJfRC8bNLNc4HN4h6UwMwMuAub4VWYBV/nL4/11/O1j/PoiIi0itH4Tvw9N5PN5m3XdQxgifV35L4G7gMYJ1rOAsiaHqIqAHH85B9gM4G8v9+sfwMymmlmBmRWUlJREMnYROcn8a9LD7KAr14zTbUXDEVaCMLN2Ztb/WN7YzK4EdjjnFjUtbqaqC2Pbvwucm+6cy3fO5WdnZx9LSCLSlpWX86OFlwHw2a/0CziY2BDOWUyfB5YAr/vreWY2L4z3HgWMM7MNeKfHXoTXo8hocrFdLrDVXy7Cm8YDf3s6sCvsloiIHEHxSwv4c8NYxo0qpXv3oKOJDeH0IP4bOBsoA3DOLQF6H+1Fzrl7nHO5zrneeNOFz3fOfQF4G+90WYBJwCv+8jx/HX/7fOdcc7c8FRE5ZrPnJNBAPD97RPd7CFc4CaLeOVfegp95N3CHmRXijTHM8MtnAFl++R3AtBb8TBFpw/bucfzg9ZEMTV7JoLM0GXW4wrmUcJmZ/ScQb2b9gNuAY7ofhHPuHeAdf3kdXo/k4DrVwIRjeV8RkXC8OWMjext6c9+N64ABQYcTM8LpQdwKfAaoAWYDe4DbIxmUiEhL+mB+FUnUMPYbvYMOJaYctQfhnKsE7gXuNbN4IM3/b19EJCZ8uLwDw1lMcm/1Ho5FOGcx/cHMOppZGvApsMrM7ox8aCIiJ66uDgo2ZjMiYRFkZAQdTkwJ5xDTIP9mQVcBrwI98e4yJyIS9f717GKqQsmMGN8V3Rno2ISTIBLNLBEvQbziT/2t009FJPo5x//8LIFU9nHhzy4LOpqYE06C+C2wAUgD3jWzXngD1SIiUW3r7+czb8MZ3JXzB7r26xh0ODEnnEHqx4DHmhRtNLPPRi4kEZGWsWrxPgBG339lwJHEpnAGqdPN7OHGCfLM7Bd4vQkRkai2ep33P3C/EYfM+ylhCOcQ0zPAXuA//Mce4NlIBiUicqLcnr384//KSaGK3FOTgg4nJoVzJfVpzrlrm6z/0MyWRCogEZGWMO8HBTwXuoHrzlhFXNwxTUYtvnB6EFVmNrpxxcxGAVWRC0lE5MS99553suVT83Xv6eMVTg/i68AsM0vHu2fDLrz7VIuIRK1XlvdjaOpqMrJODzqUmBXOWUxLgKFm1tFf1ymuIhLVQnsrWVPVg+/m/xVQgjheh00QZnbHYcoBcM49HKGYREROyKO3rQWGcOr5PYIOJaYdqQfRodWiEBFpAc7BF66rYfZLQzgrfhFf/OEZQYcU0w6bIJxzP2zNQERETkTlnnrGn7+bN/+VzVW8zMwXOpDcPjHosGJaOBfKzTKzjCbrnczsmTBel2JmH5nZv8zsUzP7oV/ex8wWmtkaM/ujmSX55cn+eqG/vffxN0tE2opQCB68s4ScrCre+lcWP89+kBdfSyX9mjFBhxbzwjnN9QznXFnjinNuNzAsjNfVABc554YCecDlZjYCeAB4xDnXD9gNTPHrTwF2O+f6Ao/49UREmrVhdS2z7lzGuV3XcvdD2ZxZv5C/XvsU39lwC3GXXxp0eCeFcBJEnJl1alwxs0zCO/vJOecq/NVE/+GAi4A5fvksvFliAcb76/jbx5hpbl4R+beyDWXcP/Zdzu60mj79k7j5ocGUlsKDZ/yeN9b04ZI5X4XU1KDDPGmEcx3EL4D3zWwO3hf8fwA/CefN/TvQLQL6Ar8G1gJlzrl6v0oRkOMv5wCbAZxz9WZWDmQBO8NrioicrPbtrOKpry/mu3OGUcX55Ccv5RdnzeaC8RkM+9Jw4rp9MegQT0rh9AR+Z2YFeP/5G3CNc255OG/unAsBef4YxlxgYHPV/OfmeguH3HfCzKYCUwF69uwZThgiEsPm/KGWm240qhpGMaL9Mp54KpFhE4cAQ4IO7aQXTg8CPyGElRQO8/oyM3sHGAFkmFmC34vIBbb61YqAHkCRmSUA6XhXbR/8XtOB6QD5+fm6cZHISco5ePVV+NLNDfRvWMFPb1rFxU9dT2KSjjy3lnDGII6LmWU3nv1kZu2Ai4EVwNvAdX61ScAr/vI8fx1/+3znnBKASBu0eTMMGhDiyiuhU10xz5z+AFc8+x9KDq0srB7EceqGN4dTPF4iesE59xczWw48b2Y/Bj4GZvj1ZwD/a2aFeD2HiRGMTUSi1OaV+7h0xB7WlWfyBLcwZVKIpIceh7iI/T8rhxGxBOGc+4RmTod1zq0Dzm6mvBqYEKl4RCT6Ff99JedclMHehva8ed6POO8XX4Kzzgo6rDYrkj0IEZFj8v2p2ylu6Mfff/5PRn8nrJMlJYLUZxORqDD//6p4evX5TOhTwOjvjAg6HEEJQkQC9sG8Ei7ouY4xV7bjVNbx28frj/4iaRVKECLS6pyDv/1vMbec8S6XjG/Hys1p/KD7Uyz81T9JHzsq6PDEpzEIEWlVZWUw9fwV/GnpQJJJ53M9l/LY7C7kjPxK0KHJQZQgRKRV3X/DEv60NI9vn/oyP5rZi/bn6SylaKUEISKt5u3/eY8HXh/NuR2W8fA/z4fMzKBDkiNQghCRVvGPP5fx+R/k0T1uO3/b2B866WY+0U6D1CISUa4+xBPX/53PXxVHMjUs+MNG2is5xAT1IEQkYhq2bGPEwHL+ufcCRndYwszvraX39dcGHZaESQlCRCLm0Svf4J97b2Ly6DU8/c5Q4uLzgg5JjoEShIhEzLPLz+bcrFXMeLc/uj9k7NEYhIhExMaVVSytHcC1Z25UcohRShAiEhFrfr8QgLPObxdwJHK8lCBEJCK2FFYBkDN2aMCRyPFSghCRiNi1LxmArC7xAUcixyuStxztYWZvm9kKM/vUzL7ll2ea2RtmtsZ/7uSXm5k9ZmaFZvaJmQ2PVGwiEnn1Ie85IVkJIlZFsgdRD/yXc24gMAL4ppkNAqYBbznn+gFv+esAVwD9/MdU4MkIxiYiERbyZ+2OT9SBilgVsT3nnNvmnFvsL+8FVgA5wHhgll9tFnCVvzwe+J3zfAhkmFm3SMUnIpEV8nsQ8UnqQcSqVkntZtYb7/7UC4Guzrlt4CURoItfLQfY3ORlRX6ZiMSg/QlCPYiYFfE9Z2btgReB251ze45UtZky18z7TTWzAjMrKCkpaakwRaSFhRq8P+m4eF0EEasimiDMLBEvOTznnHvJLy5uPHTkP+/wy4uAHk1engtsPfg9nXPTnXP5zrn87OzsyAUvIickFII4QrpILoZF8iwmA2YAK5xzDzfZNA+Y5C9PAl5pUn6TfzbTCKC88VCUiMSeUAjiCQUdhpyASM7FNAq4EVhqZkv8su8C9wMvmNkUYBMwwd/2KjAWKAQqgckRjE1EIizUYEoQMS5iCcI59x7NjysAjGmmvgO+Gal4RKR1qQcR+3R6gYhERKhBCSLWKUGISESEQka8NQQdhpwAJQgRiQiNQcQ+JQgRiYhQCPUgYpwShIhEhHoQsU8JQkQiItSgMYhYpwSob2VxAAARcElEQVQhIhHh9SCUIGKZEoSIRESoQWMQsU4JQkQiItQQR7xpDCKWKUGISERoDCL2KUGISEQoQcQ+JQgRaXErVsCHu/opQcS4SM7mKiJtQHExrFkDJSWwZAnMmF7Plu0JxJHOd3JnAQOCDlGOkxKEiByz8nL4+X/v49V5dXy8LuOAbZfxFrfxFtec8gF9H/h6QBFKS1CCEJGw7N0LK19azt9nrufBBaMoqcvgPN7lp7zG8OTldDklju79O9D1rJ7w5W9A7weDDllOkBKEiBygrg4++giWL/cfC3axYgVsrsgEBgGD6J+0jheumsWF3x4GZ9wN6eno3qInHyUIkTbMOdi4EdauqufT93bz3rsh3l3SkeI9qQCkWhUD3HouiFvFwNPrGDQ6k4Ffv5DT8k4lIeFbAUcvkRaxBGFmzwBXAjucc4P9skzgj0BvYAPwH8653f79qx/Fu+VoJXCzc25xpGITaavWL97NX/9cw8KP4li3vJp/FWVSXt8e76sgm55sZAxzGZv8FqNyNtKzbxJx542CW26BjIyjvb2cZCLZg5gJPA78rknZNOAt59z9ZjbNX78buALo5z/OAZ70n0XkONXUwItPFvOPF0soWJ7KhrIMdjZkAnAK2+hDERMzFzLs1HJO72/0HdaBHvldoedI6HUDxOks+LYukvekftfMeh9UPB640F+eBbyDlyDGA7/z70v9oZllmFk359y2SMUncrIqK4Mf/Vc5L/yhji3VXelICmcmLeW6nqsZeEYil51XyekD47G8oZAzMuhwJYq19hhE18YvfefcNjPr4pfnAJub1Cvyyw5JEGY2FZgK0LNnz8hGKxKFnIMtW2DzZli7FtaurmfHmj2UbKxkx/YQn2zJYndtOiPjPmT6hL9w2U/OJ77vKA0iyzGLlkHq5n5zXXMVnXPTgekA+fn5zdYROdksXAg//G4161bVsb00kfLqlCZbE8jE0YW9dGEHl7T7F186u4BLn5uE9R0RWMwS+1o7QRQ3Hjoys27ADr+8COjRpF4usLWVYxOJGs7Bp5/Cay9XM2dGOR9t6Eo7GhjLX7mUrfTLKOHUXg306RnitAGJJA8dAAMHQr/h0KEDMC7oJshJoLUTxDxgEnC///xKk/JbzOx5vMHpco0/SFtSWwvr1oRY8V4pb71Ww98+6MCaHRlACmeyjJ+mTmfKpUV0+dYNcOZlfhIQiaxInuY6G29AurOZFQH34SWGF8xsCrAJmOBXfxXvFNdCvNNcJ0cqLpEg1dTAunXw/vuw4tMGCv+5i+WfOjaUZVDnEoEupLKPUSzg2wl/4fJrUulz+3g49/tBhy5tUCTPYrrhMJvGNFPXAd+MVCwikVZd7Z09tHOn99hT7ti4qpptayrYvqmG9eugcHsaWyrScf4kysnU0pftDGYN12aXMmgg9BuZzbAL00keNBByLtapphKoaBmkFol6NTWwaBG89qrj44U1FK5xlJUbZRUJ1NQf/KdkQDsSSKArxfRkE2MSN9Cn8y5O7VLBmaeV0b8/xI84Cz77WcjMDKJJIkekBCFyJM6xuaCYV367nYeez2HjvmziCTGI1QxhFVmUkk45GfEVZGRAZpbRpauR1j2dXv1TyB6QRVzPXOjVC3J1zYHEFiUIkSZ27oSP3ynn4zdLWbywlsUrU1lT3RM4hf5xq3m63zNcPWYPmZ/p5n3pd8uH007zpqHQdQZyklGCkDalZk8N6z6poPDTGkq31rBnawU7N1dRtAUWburG8j09gHQgnV5sYHjqCr5y8UrG3ZxJ/+uGQPLdQTdBpNUoQUjscQ5Xuovy1cUULd/DhvWOkhJH1d4Q+8rr2LIjiYqyeir3OapqjKqaeHbXprGlvivbOIUGsg54O6OBbmzjM6nruXHg25w1Opm8MVlkjewPuZeqZyBtlhKEBM8579hOURFs2ULthq18ujKewq2prNueSmFxB3bsSaGsKoldNWmU1qdTSha1B33RN2rPXjrG76NdQh3tEutplxIio1MtgzptpWf2Ok7vWU3f3vVk5ySRfmoW6QO7k9CtO1gOMLp12y4SxZQgpGXU1kJlJezbBxUVsGsXlJUR2lVOWXENu0sb2L0bysocu3c2sLuknh07oHhvKjsq0ygOdWYHXShmJLs58Iye7PhScpJLyWhXQ9/OVZyTXkFW56106Z5A7qlJ9OiTQPdeiaR2TqXdKem079wBM11IJnKilCDEU1/v3XV+40bYtAl27PC+7CsrqS2vory0nr1lIfaUNVBSlkhReQe2VKSzo7oDu2rS2NPQngraU0kq+0hjD93ZzWfYS8cjfmynpAq6dNxH18x6BndxjMmpo0uvPfQfmsKAIYn0OdXo2DELDtNbEJHIUYJoC7Zvh5UrYfFiWL0atm71ruryH9W7q1hV0Z1tdGMtp1FIX7aQwxZy2ERPtpCz/+Kug6UnVZLVsYqOKXW0bxcio10D3VMdHTPiyMjcR6cuNXTKTiSjSyKduiTRKTuBjE5Gp06QnQ1JSe2B9q378xCRsChBxLp9+7xZ3VauhE2bqNu0jZ1ba6korWFvaS27S+opLYujlCxKyaIkKY/StM+zk2yKGzpTXNuJHdUdCRG//y1TUxrIzWkgJ8e4qFccfU41srKgY0fvkZUFubnQvTukpKQCqcG1X0QiRgkiWtTVecfwG4/jNy43ru/bBzt2UFVUyq7N+yjdUk3ptlp2rKtgfUNPljKEpYxjJQOoI+mwH9MxxZGV4X3h554CZ3aFbt1gyBDvS79nT8jJicNMUzyItHVKEIdTXw9VVd4kOzU13iBsTc2Bj9par07TL/ODvtjdvkqq99axuzyOyooGqiod1ZX+czVUVRvV1bCnIY3ddKKMDPaRRiWplJPu/+ffY38PoOow/63nnlLH0GFxjD0jnl69vMk+O3Twrt/KyvIemZmQnKxTNkUkPG0zQRQV4ea/Tem8BVSsL6Fyb4h9lUZllbGvKo7K2gQqQ0n7v6gbn6toRy1J1JC8/3knnangFGpIpoZkqkk54LmG5MMev29OfFwDacn1pKWE6JgWIisjRM9OjmFZkNUdMrs3kNU5bv+XfufO0Ls3dOiQGLmfl4i0SW0yQTz9rU/43kuXUMyNYb8mKSFEu6QQyYkNJCU6kpMcSYmQ1SlEdgcjuV0cKalxJKfFk5yaQEo7IzkZkpMhNRU6dYK0NEhJgXbt/v3cuNyhQ2OdOMwOf4hIRKS1tMkE0X382VxSE8+ZFzWQ3imO1FTvy/twz+3aQUJCPDQZyBUROdm1yQQx9qbOjL0p6ChERKJbVJ2qYmaXm9kqMys0s2lBxyMi0pZFTYIws3jg18AVwCDgBjMbFGxUIiJtV9QkCOBsoNA5t845Vws8D4wPOCYRkTYrmhJEDrC5yXqRXyYiIgGIpgTR3BVc7pBKZlPNrMDMCkpKSlohLBGRtimaEkQR0KPJei6w9eBKzrnpzrl851x+dnZ2qwUnItLWRFOC+CfQz8z6mHel2ERgXsAxiYi0WVFzHYRzrt7MbgH+indF2jPOuU8DDktEpM0y5w45zB8zzKwE2HicL+8M7GzBcIKktkQntSU6qS3Qyzl31GP0MZ0gToSZFTjn8oOOoyWoLdFJbYlOakv4omkMQkREoogShIiINKstJ4jpQQfQgtSW6KS2RCe1JUxtdgxCRESOrC33IERE5AjaZIKItWnFzayHmb1tZivM7FMz+5Zfnmlmb5jZGv+5k19uZvaY375PzGx4sC04kJnFm9nHZvYXf72PmS302/FH/0JJzCzZXy/0t/cOMu6DmVmGmc0xs5X+vjk3hvfJt/3frWVmNtvMUmJpv5jZM2a2w8yWNSk75n1hZpP8+mvMbFKUtOPn/u/YJ2Y218wymmy7x2/HKjO7rEl5y3zHOefa1APvIry1wKlAEvAvYFDQcR0l5m7AcH+5A7Aab0r0B4Fpfvk04AF/eSzwGt78ViOAhUG34aD23AH8AfiLv/4CMNFf/g3wdX/5G8Bv/OWJwB+Djv2gdswCvuwvJwEZsbhP8CbFXA+0a7I/bo6l/QKcDwwHljUpO6Z9AWQC6/znTv5ypyhox6VAgr/8QJN2DPK/v5KBPv73WuOtL1vkOy7wX84AfpHOBf7aZP0e4J6g4zrGNrwCXAKsArr5Zd2AVf7yb4EbmtTfXy/oB94cW28BFwF/8f9Idzb5A9i/f/Cuqj/XX07w61nQbfDj6eh/qdpB5bG4TxpnUs70f85/AS6Ltf0C9D7oi/WY9gVwA/DbJuUH1AuqHQdtuxp4zl8+4Lurcb+05HdcWzzEFNPTivvd+WHAQqCrc24bgP/cxa8WzW38JXAX0OCvZwFlzrl6f71prPvb4W8v9+tHg1OBEuBZ/3DZ02aWRgzuE+fcFuAhYBOwDe/nvIjY3C9NHeu+iNp91MSX8Ho/0ArtaIsJIqxpxaORmbUHXgRud87tOVLVZsoCb6OZXQnscM4talrcTFUXxragJeAdCnjSOTcM2Id3GONworYt/rH58XiHKboDaXh3djxYLOyXcBwu/qhul5ndC9QDzzUWNVOtRdvRFhNEWNOKRxszS8RLDs85517yi4vNrJu/vRuwwy+P1jaOAsaZ2Qa8OwZehNejyDCzxokjm8a6vx3+9nRgV2sGfARFQJFzbqG/PgcvYcTaPgG4GFjvnCtxztUBLwEjic390tSx7ouo3Uf+gPmVwBecf9yIVmhHW0wQMTetuJkZMANY4Zx7uMmmeUDjmRaT8MYmGstv8s/WGAGUN3a1g+Scu8c5l+uc6433c5/vnPsC8DZwnV/t4HY0tu86v35U/EfnnNsObDaz/n7RGGA5MbZPfJuAEWaW6v+uNbYl5vbLQY51X/wVuNTMOvm9qkv9skCZ2eXA3cA451xlk03zgIn+WWV9gH7AR7Tkd1zQA0tBPPDOYliNN9J/b9DxhBHvaLwu4ifAEv8xFu+471vAGv85069vwK/99i0F8oNuQzNtupB/n8V0qv+LXQj8CUj2y1P89UJ/+6lBx31QG/KAAn+/vIx35ktM7hPgh8BKYBnwv3hnxsTMfgFm442f1OH9Bz3lePYF3jH+Qv8xOUraUYg3ptD4t/+bJvXv9duxCriiSXmLfMfpSmoREWlWWzzEJCIiYVCCEBGRZilBiIhIs5QgRESkWUoQIiLSLCUIkSbM7GdmdqGZXXVCs2Ae/+ffbGaPt/bnijRHCULkQOfgzXN1AfCPgGMRCVTC0auInPzM7Od4M5j2AT4ATgPGmNkcoAz4Gt48OMudcxPN7Gy8aULaAVV4F1WtMrObgavwplweDPwCb8rlG4EaYKxzbpeZvYN30dPZeDPDfsk599FBMWXjTbPd0y+63Tm3IDI/AZFDKUGIAM65O83sT3hf5HcA7zjnRgGY2Vagj3OupsnNWlYC5zvn6s3sYuCnwLX+tsF4M+6m4F0Fe7dzbpiZPQLchJdYANKccyPN7HzgGf91TT0KPOKce8/MeuJN+zCw5Vsv0jwlCJF/G4b3X/0AvLmIGn0CPGdmL+NNqQHeBHWzzKwf3jQoiU3qv+2c2wvsNbNy4M9++VLgjCb1ZgM45941s45N7xTmuxgY5E2PBEBHM+vgv7dIxClBSJtnZnnATLxZL3cCqV6xLcG7+crn8O70NQ74vpl9BvgfvERwtX+PjneavGVNk+WGJusNHPg3d/A8Nwevx+HdmKfqeNolcqI0SC1tnnNuiXMuj3/fynU+cJlfVgP0cM69jXejowygPV4PYov/Fjcf50dfD2Bmo/FmFC0/aPvfgFsaV/xEJtJqlCBE2D8gvNs51wAMcM41HmKKB35vZkuBj/HGBMrw7nf8MzNb4Nc5HrvN7H28gegpzWy/Dcj3b1a/HG+gXKTVaDZXkQD4ZzF9xzlXEHQsIoejHoSIiDRLPQgREWmWehAiItIsJQgREWmWEoSIiDRLCUJERJqlBCEiIs1SghARkWb9P6ZenI8bBthHAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt2\n",
"\n",
"prediction_sorted = scaler.inverse_transform(model.predict(X_test))\n",
"prediction_sorted.sort(axis=0)\n",
"\n",
"Y_test_sorted = scaler.inverse_transform(Y_test.copy().reshape(-1, 1))\n",
"Y_test_sorted.sort(axis=0)\n",
"\n",
"plt2.plot(prediction_sorted, color='red', label='Prediction')\n",
"plt2.plot(Y_test_sorted, color='blue', label='Actual')\n",
"plt2.xlabel('#sample')\n",
"plt2.ylabel('close value')\n",
"plt2.legend(loc='best')\n",
"plt2.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment