{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "hi2CmTEDvGij"
},
"source": [
"# Purpose of Notebook\n",
"\n",
"The purpose of this notebook is to offer an example answer to the guided project for the Sequential Models for Deep Learning course. Since the choice of model predictors is up to the student, results can differ. Use this solution as a guide for how to structure your own answer."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "e65739c8"
},
"source": [
"# Time-Series Forecasting on the S&P 500"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "18150cb2"
},
"source": [
"**Context**: We are working as traders on the S&P 500 futures desk. We have been tasked with building a model to better forecast how this index will move based on its behavior over the past several years. The better our forecast performs, the more effectively and lucratively our desk will be able to trade these futures."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2e64de5f"
},
"source": [
"## Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9091a3ff"
},
"source": [
"The dataset we will be working with is from [Yahoo Finance via Kaggle](https://www.kaggle.com/datasets/arashnic/time-series-forecasting-with-yahoo-stock-price), and it contains S&P 500 Index prices from 2015 through 2020.\n",
"\n",
"Before we get into the data, let's set some random seed values to improve the reproducibility of the models we will build later on."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "e101a4be"
},
"outputs": [],
"source": [
"# Imports\n",
"import tensorflow as tf\n",
"import numpy as np\n",
"import random\n",
"\n",
"# Seed code\n",
"np.random.seed(1)\n",
"random.seed(1)\n",
"tf.random.set_seed(1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "240f8d2d"
},
"source": [
"## Data Wrangling and Exploration"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "395dc3c2"
},
"source": [
"First, we will load in the data and inspect it to determine what steps will be required for cleaning and preprocessing."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "f55e074c",
"outputId": "f2091de4-28f5-4d49-c8c8-8420aee93d51"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Date
\n",
"
High
\n",
"
Low
\n",
"
Open
\n",
"
Close
\n",
"
Volume
\n",
"
Adj Close
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2015-11-23
\n",
"
2095.610107
\n",
"
2081.389893
\n",
"
2089.409912
\n",
"
2086.590088
\n",
"
3.587980e+09
\n",
"
2086.590088
\n",
"
\n",
"
\n",
"
1
\n",
"
2015-11-24
\n",
"
2094.120117
\n",
"
2070.290039
\n",
"
2084.419922
\n",
"
2089.139893
\n",
"
3.884930e+09
\n",
"
2089.139893
\n",
"
\n",
"
\n",
"
2
\n",
"
2015-11-25
\n",
"
2093.000000
\n",
"
2086.300049
\n",
"
2089.300049
\n",
"
2088.870117
\n",
"
2.852940e+09
\n",
"
2088.870117
\n",
"
\n",
"
\n",
"
3
\n",
"
2015-11-26
\n",
"
2093.000000
\n",
"
2086.300049
\n",
"
2089.300049
\n",
"
2088.870117
\n",
"
2.852940e+09
\n",
"
2088.870117
\n",
"
\n",
"
\n",
"
4
\n",
"
2015-11-27
\n",
"
2093.290039
\n",
"
2084.129883
\n",
"
2088.820068
\n",
"
2090.110107
\n",
"
1.466840e+09
\n",
"
2090.110107
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
],
"text/plain": [
" Date High Low Open Close \\\n",
"0 2015-11-23 2095.610107 2081.389893 2089.409912 2086.590088 \n",
"1 2015-11-24 2094.120117 2070.290039 2084.419922 2089.139893 \n",
"2 2015-11-25 2093.000000 2086.300049 2089.300049 2088.870117 \n",
"3 2015-11-26 2093.000000 2086.300049 2089.300049 2088.870117 \n",
"4 2015-11-27 2093.290039 2084.129883 2088.820068 2090.110107 \n",
"\n",
" Volume Adj Close \n",
"0 3.587980e+09 2086.590088 \n",
"1 3.884930e+09 2089.139893 \n",
"2 2.852940e+09 2088.870117 \n",
"3 2.852940e+09 2088.870117 \n",
"4 1.466840e+09 2090.110107 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Import\n",
"import pandas as pd\n",
"\n",
"# Load and inspect the data\n",
"stock_data = pd.read_csv(\"yahoo_stock.csv\")\n",
"stock_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "192e4514"
},
"source": [
"We can see that the data contains seven columns: `Date`, `High`, `Low`, `Open`, `Close`, `Volume`, and `Adj Close`.\n",
"\n",
"We will want to set the index of the DataFrame to the `Date` column to prepare for time series forecasting, and decide what other column(s) to use for the forecast itself. For now, we are going to use only the `Adj Close` column, which is the closing price of the S&P 500 index, [adjusted for dividends](https://www.investopedia.com/articles/investing/091015/how-dividends-affect-stock-prices.asp). Based on this decision, we modify the DataFrame to drop the other columns.\n",
"\n",
"We should also ensure that the data is sorted by its `Date` column."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 238
},
"id": "d4e04bd1",
"outputId": "d9068a8e-5a59-4934-ba1b-f036db02772e"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Adj Close
\n",
"
\n",
"
\n",
"
Date
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
2015-11-23
\n",
"
2086.590088
\n",
"
\n",
"
\n",
"
2015-11-24
\n",
"
2089.139893
\n",
"
\n",
"
\n",
"
2015-11-25
\n",
"
2088.870117
\n",
"
\n",
"
\n",
"
2015-11-26
\n",
"
2088.870117
\n",
"
\n",
"
\n",
"
2015-11-27
\n",
"
2090.110107
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"\n",
" \n",
"
\n",
"
\n",
" "
],
"text/plain": [
" Adj Close\n",
"Date \n",
"2015-11-23 2086.590088\n",
"2015-11-24 2089.139893\n",
"2015-11-25 2088.870117\n",
"2015-11-26 2088.870117\n",
"2015-11-27 2090.110107"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Select relevant columns, sort data, and set index\n",
"stock_data = stock_data[[\"Date\", \"Adj Close\"]]\n",
"stock_data = stock_data.sort_values(\"Date\")\n",
"stock_data = stock_data.set_index(\"Date\")\n",
"\n",
"# Inspect the data\n",
"stock_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c0d02adc"
},
"source": [
"We should also double-check that we don't have any missing or erroneous values in our dataset, and consider forward-filling or interpolating if necessary."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ff57c079",
"outputId": "199f8938-e72b-4d2a-f8fc-ddeab6256faa"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Info: \n",
"\n",
"Index: 1825 entries, 2015-11-23 to 2020-11-20\n",
"Data columns (total 1 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Adj Close 1825 non-null float64\n",
"dtypes: float64(1)\n",
"memory usage: 28.5+ KB\n",
"\n",
"Describe: \n",
" Adj Close\n",
"count 1825.000000\n",
"mean 2647.856284\n",
"std 407.301177\n",
"min 1829.079956\n",
"25% 2328.949951\n",
"50% 2683.340088\n",
"75% 2917.520020\n",
"max 3626.909912\n",
"\n",
"Skew: \n",
" Adj Close 0.081869\n",
"dtype: float64\n"
]
}
],
"source": [
"# Check for missing or erroneous values\n",
"print(\"Info: \")\n",
"stock_data.info()\n",
"print(\"\\nDescribe: \\n\", stock_data.describe())\n",
"print(\"\\nSkew: \\n\", stock_data.skew())"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0f794226"
},
"source": [
"Great! No missing values, and everything seems to be within a reasonable range. The low skew value for `Adj Close` indicates we don't have any outliers to be concerned about.\n",
"\n",
"Before we begin preparing the data for modeling by scaling the variable to be forecasted (`Adj Close`) and splitting the dataset for training, validation, and testing, let's quickly visualize the data."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 274
},
"id": "062d8991",
"outputId": "e5244674-9c69-49b3-9064-e6687ec13ba7"
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Adjusted Close')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"