{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "StockPredict.ipynb", "provenance": [], "collapsed_sections": [], "authorship_tag": "ABX9TyMKnACQEocTcnzAAwaRmHXf", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "code", "metadata": { "id": "RHp7zzpufTnP" }, "source": [ "import pandas_datareader as pdr\n", "import pandas as pd\n", "import numpy as np\n", "from sklearn.preprocessing import MinMaxScaler\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense\n", "from tensorflow.keras.layers import LSTM\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt\n", "import math\n", "from sklearn.metrics import mean_squared_error" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ZsnAd3qlEtkY" }, "source": [ "key = '43210fb49481145203f782ffa978dcaeb618e051'\n", "df = pdr.get_data_tiingo('AAPL', api_key=key)\n", "df.to_csv('AAPL.csv')\n", "df = pd.read_csv('AAPL.csv')\n", "df1 = df.reset_index()['adjClose']" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "yECzGspzGiRo" }, "source": [ "scaler=MinMaxScaler(feature_range=(0,1))\n", "df1=scaler.fit_transform(np.array(df1).reshape(-1,1))" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "bUrPjTmxGtxj", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "7e30c1c4-6e25-4edb-b7c7-08bfc48203ba" }, "source": [ "print(df1)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[[0.00148542]\n", " [0.00393385]\n", " [0.00514872]\n", " ...\n", " [0.96662347]\n", " [0.97190609]\n", " [0.97366696]]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "VIfcKwThG1gt" }, "source": [ "training_size=int(len(df1)*0.67)\n", "test_size=len(df1)-training_size\n", "train_data,test_data=df1[0:training_size,:],df1[training_size:len(df1),:1]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "MnWJly9NG-Qw" }, "source": [ "import numpy\n", "def create_dataset(dataset, time_step=1):\n", "\tdataX, dataY = [], []\n", "\tfor i in range(len(dataset)-time_step-1):\n", "\t\ta = dataset[i:(i+time_step), 0] \n", "\t\tdataX.append(a)\n", "\t\tdataY.append(dataset[i + time_step, 0])\n", "\treturn numpy.array(dataX), numpy.array(dataY)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "KAiOCq57HDuN" }, "source": [ "time_step = 100\n", "X_train, y_train = create_dataset(train_data, time_step)\n", "X_test, ytest = create_dataset(test_data, time_step)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "XeGppUwIILWA" }, "source": [ "X_train =X_train.reshape(X_train.shape[0],X_train.shape[1] , 1)\n", "X_test = X_test.reshape(X_test.shape[0],X_test.shape[1] , 1)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "A6x5gBKBIUGZ" }, "source": [ "model=Sequential()\n", "model.add(LSTM(50,return_sequences=True,input_shape=(100,1)))\n", "model.add(LSTM(50,return_sequences=True))\n", "model.add(LSTM(50))\n", "model.add(Dense(1))\n", "model.compile(loss='mean_squared_error',optimizer='adam')" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "JNJPs65JIt92", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "3efd4aa2-5244-407d-cce2-5b5cfe27681f" }, "source": [ "model.summary()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "lstm (LSTM) (None, 100, 50) 10400 \n", "_________________________________________________________________\n", "lstm_1 (LSTM) (None, 100, 50) 20200 \n", "_________________________________________________________________\n", "lstm_2 (LSTM) (None, 50) 20200 \n", "_________________________________________________________________\n", "dense (Dense) (None, 1) 51 \n", "=================================================================\n", "Total params: 50,851\n", "Trainable params: 50,851\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "dK-eika7JAdp", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "d8b3e68a-f217-4f7f-c840-7783c12aef4e" }, "source": [ "model.fit(X_train,y_train,validation_data=(X_test,ytest),epochs=100,batch_size=64,verbose=1)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Epoch 1/100\n", "12/12 [==============================] - 9s 285ms/step - loss: 0.0063 - val_loss: 0.1562\n", "Epoch 2/100\n", "12/12 [==============================] - 2s 187ms/step - loss: 0.0016 - val_loss: 0.0493\n", "Epoch 3/100\n", "12/12 [==============================] - 2s 185ms/step - loss: 7.5204e-04 - val_loss: 0.0142\n", "Epoch 4/100\n", "12/12 [==============================] - 2s 182ms/step - loss: 3.2980e-04 - val_loss: 0.0025\n", "Epoch 5/100\n", "12/12 [==============================] - 2s 195ms/step - loss: 3.0766e-04 - val_loss: 0.0025\n", "Epoch 6/100\n", "12/12 [==============================] - 2s 185ms/step - loss: 2.7404e-04 - val_loss: 0.0030\n", "Epoch 7/100\n", "12/12 [==============================] - 2s 194ms/step - loss: 2.5578e-04 - val_loss: 0.0023\n", "Epoch 8/100\n", "12/12 [==============================] - 2s 186ms/step - loss: 2.4396e-04 - val_loss: 0.0035\n", "Epoch 9/100\n", "12/12 [==============================] - 2s 183ms/step - loss: 2.2680e-04 - val_loss: 0.0039\n", "Epoch 10/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 2.1704e-04 - val_loss: 0.0058\n", "Epoch 11/100\n", "12/12 [==============================] - 2s 201ms/step - loss: 2.1044e-04 - val_loss: 0.0042\n", "Epoch 12/100\n", "12/12 [==============================] - 2s 193ms/step - loss: 1.9316e-04 - val_loss: 0.0042\n", "Epoch 13/100\n", "12/12 [==============================] - 2s 184ms/step - loss: 1.8505e-04 - val_loss: 0.0059\n", "Epoch 14/100\n", "12/12 [==============================] - 2s 186ms/step - loss: 1.7364e-04 - val_loss: 0.0046\n", "Epoch 15/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 1.6726e-04 - val_loss: 0.0040\n", "Epoch 16/100\n", "12/12 [==============================] - 2s 198ms/step - loss: 1.6129e-04 - val_loss: 0.0027\n", "Epoch 17/100\n", "12/12 [==============================] - 2s 195ms/step - loss: 1.5586e-04 - val_loss: 0.0031\n", "Epoch 18/100\n", "12/12 [==============================] - 2s 198ms/step - loss: 1.5318e-04 - val_loss: 0.0022\n", "Epoch 19/100\n", "12/12 [==============================] - 2s 204ms/step - loss: 1.7568e-04 - val_loss: 0.0029\n", "Epoch 20/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.6896e-04 - val_loss: 0.0028\n", "Epoch 21/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.4737e-04 - val_loss: 0.0022\n", "Epoch 22/100\n", "12/12 [==============================] - 2s 186ms/step - loss: 1.4090e-04 - val_loss: 0.0021\n", "Epoch 23/100\n", "12/12 [==============================] - 2s 200ms/step - loss: 1.4175e-04 - val_loss: 0.0033\n", "Epoch 24/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 1.3395e-04 - val_loss: 0.0028\n", "Epoch 25/100\n", "12/12 [==============================] - 2s 187ms/step - loss: 1.4086e-04 - val_loss: 0.0028\n", "Epoch 26/100\n", "12/12 [==============================] - 2s 204ms/step - loss: 1.3343e-04 - val_loss: 0.0044\n", "Epoch 27/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.3890e-04 - val_loss: 0.0086\n", "Epoch 28/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 1.3575e-04 - val_loss: 0.0054\n", "Epoch 29/100\n", "12/12 [==============================] - 2s 207ms/step - loss: 1.2835e-04 - val_loss: 0.0048\n", "Epoch 30/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 1.2525e-04 - val_loss: 0.0054\n", "Epoch 31/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 1.2597e-04 - val_loss: 0.0098\n", "Epoch 32/100\n", "12/12 [==============================] - 2s 200ms/step - loss: 1.2983e-04 - val_loss: 0.0093\n", "Epoch 33/100\n", "12/12 [==============================] - 2s 210ms/step - loss: 1.2832e-04 - val_loss: 0.0038\n", "Epoch 34/100\n", "12/12 [==============================] - 2s 206ms/step - loss: 1.2357e-04 - val_loss: 0.0133\n", "Epoch 35/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 1.2827e-04 - val_loss: 0.0072\n", "Epoch 36/100\n", "12/12 [==============================] - 2s 189ms/step - loss: 1.1870e-04 - val_loss: 0.0068\n", "Epoch 37/100\n", "12/12 [==============================] - 2s 201ms/step - loss: 1.1568e-04 - val_loss: 0.0073\n", "Epoch 38/100\n", "12/12 [==============================] - 2s 200ms/step - loss: 1.3279e-04 - val_loss: 0.0068\n", "Epoch 39/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 1.2043e-04 - val_loss: 0.0043\n", "Epoch 40/100\n", "12/12 [==============================] - 2s 193ms/step - loss: 1.1275e-04 - val_loss: 0.0064\n", "Epoch 41/100\n", "12/12 [==============================] - 2s 195ms/step - loss: 1.1446e-04 - val_loss: 0.0068\n", "Epoch 42/100\n", "12/12 [==============================] - 2s 187ms/step - loss: 1.1253e-04 - val_loss: 0.0071\n", "Epoch 43/100\n", "12/12 [==============================] - 2s 198ms/step - loss: 1.0861e-04 - val_loss: 0.0036\n", "Epoch 44/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 1.1184e-04 - val_loss: 0.0067\n", "Epoch 45/100\n", "12/12 [==============================] - 2s 207ms/step - loss: 1.0702e-04 - val_loss: 0.0078\n", "Epoch 46/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 1.1542e-04 - val_loss: 0.0042\n", "Epoch 47/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 1.0734e-04 - val_loss: 0.0032\n", "Epoch 48/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.0835e-04 - val_loss: 0.0044\n", "Epoch 49/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.1088e-04 - val_loss: 0.0046\n", "Epoch 50/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 1.0231e-04 - val_loss: 0.0033\n", "Epoch 51/100\n", "12/12 [==============================] - 2s 190ms/step - loss: 1.0493e-04 - val_loss: 0.0033\n", "Epoch 52/100\n", "12/12 [==============================] - 2s 191ms/step - loss: 1.0977e-04 - val_loss: 0.0018\n", "Epoch 53/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 1.0476e-04 - val_loss: 0.0022\n", "Epoch 54/100\n", "12/12 [==============================] - 2s 191ms/step - loss: 1.0281e-04 - val_loss: 0.0020\n", "Epoch 55/100\n", "12/12 [==============================] - 2s 193ms/step - loss: 9.6955e-05 - val_loss: 0.0022\n", "Epoch 56/100\n", "12/12 [==============================] - 2s 201ms/step - loss: 1.0400e-04 - val_loss: 0.0021\n", "Epoch 57/100\n", "12/12 [==============================] - 2s 192ms/step - loss: 1.0321e-04 - val_loss: 0.0019\n", "Epoch 58/100\n", "12/12 [==============================] - 2s 190ms/step - loss: 9.4004e-05 - val_loss: 0.0018\n", "Epoch 59/100\n", "12/12 [==============================] - 2s 192ms/step - loss: 9.6459e-05 - val_loss: 0.0018\n", "Epoch 60/100\n", "12/12 [==============================] - 2s 192ms/step - loss: 9.2638e-05 - val_loss: 0.0018\n", "Epoch 61/100\n", "12/12 [==============================] - 2s 192ms/step - loss: 9.3041e-05 - val_loss: 0.0020\n", "Epoch 62/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 9.0625e-05 - val_loss: 0.0018\n", "Epoch 63/100\n", "12/12 [==============================] - 2s 189ms/step - loss: 9.3909e-05 - val_loss: 0.0023\n", "Epoch 64/100\n", "12/12 [==============================] - 2s 193ms/step - loss: 8.9436e-05 - val_loss: 0.0017\n", "Epoch 65/100\n", "12/12 [==============================] - 2s 204ms/step - loss: 8.9547e-05 - val_loss: 0.0017\n", "Epoch 66/100\n", "12/12 [==============================] - 2s 189ms/step - loss: 8.9017e-05 - val_loss: 0.0027\n", "Epoch 67/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 9.2652e-05 - val_loss: 0.0030\n", "Epoch 68/100\n", "12/12 [==============================] - 2s 198ms/step - loss: 1.0096e-04 - val_loss: 0.0028\n", "Epoch 69/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 9.1219e-05 - val_loss: 0.0016\n", "Epoch 70/100\n", "12/12 [==============================] - 2s 205ms/step - loss: 8.5552e-05 - val_loss: 0.0017\n", "Epoch 71/100\n", "12/12 [==============================] - 2s 193ms/step - loss: 8.5987e-05 - val_loss: 0.0051\n", "Epoch 72/100\n", "12/12 [==============================] - 2s 190ms/step - loss: 1.0786e-04 - val_loss: 0.0026\n", "Epoch 73/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 8.7348e-05 - val_loss: 0.0019\n", "Epoch 74/100\n", "12/12 [==============================] - 2s 191ms/step - loss: 8.0757e-05 - val_loss: 0.0020\n", "Epoch 75/100\n", "12/12 [==============================] - 2s 195ms/step - loss: 8.3034e-05 - val_loss: 0.0017\n", "Epoch 76/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 8.2316e-05 - val_loss: 0.0042\n", "Epoch 77/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 8.0791e-05 - val_loss: 0.0022\n", "Epoch 78/100\n", "12/12 [==============================] - 2s 201ms/step - loss: 8.3808e-05 - val_loss: 0.0017\n", "Epoch 79/100\n", "12/12 [==============================] - 2s 191ms/step - loss: 8.1456e-05 - val_loss: 0.0019\n", "Epoch 80/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 7.9663e-05 - val_loss: 0.0019\n", "Epoch 81/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 8.0628e-05 - val_loss: 0.0026\n", "Epoch 82/100\n", "12/12 [==============================] - 2s 199ms/step - loss: 7.7418e-05 - val_loss: 0.0028\n", "Epoch 83/100\n", "12/12 [==============================] - 2s 202ms/step - loss: 7.5575e-05 - val_loss: 0.0051\n", "Epoch 84/100\n", "12/12 [==============================] - 2s 200ms/step - loss: 8.5731e-05 - val_loss: 0.0020\n", "Epoch 85/100\n", "12/12 [==============================] - 2s 194ms/step - loss: 1.0206e-04 - val_loss: 0.0015\n", "Epoch 86/100\n", "12/12 [==============================] - 2s 196ms/step - loss: 7.9265e-05 - val_loss: 0.0045\n", "Epoch 87/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 8.0333e-05 - val_loss: 0.0072\n", "Epoch 88/100\n", "12/12 [==============================] - 2s 187ms/step - loss: 8.6542e-05 - val_loss: 0.0037\n", "Epoch 89/100\n", "12/12 [==============================] - 2s 205ms/step - loss: 7.6483e-05 - val_loss: 0.0040\n", "Epoch 90/100\n", "12/12 [==============================] - 2s 198ms/step - loss: 7.2100e-05 - val_loss: 0.0061\n", "Epoch 91/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 6.9616e-05 - val_loss: 0.0051\n", "Epoch 92/100\n", "12/12 [==============================] - 2s 194ms/step - loss: 8.1184e-05 - val_loss: 0.0071\n", "Epoch 93/100\n", "12/12 [==============================] - 2s 187ms/step - loss: 7.8110e-05 - val_loss: 0.0044\n", "Epoch 94/100\n", "12/12 [==============================] - 2s 195ms/step - loss: 9.5490e-05 - val_loss: 0.0031\n", "Epoch 95/100\n", "12/12 [==============================] - 2s 194ms/step - loss: 8.2525e-05 - val_loss: 0.0014\n", "Epoch 96/100\n", "12/12 [==============================] - 2s 197ms/step - loss: 7.1823e-05 - val_loss: 0.0018\n", "Epoch 97/100\n", "12/12 [==============================] - 2s 206ms/step - loss: 8.5870e-05 - val_loss: 0.0023\n", "Epoch 98/100\n", "12/12 [==============================] - 2s 206ms/step - loss: 6.8921e-05 - val_loss: 0.0014\n", "Epoch 99/100\n", "12/12 [==============================] - 2s 200ms/step - loss: 9.5190e-05 - val_loss: 0.0015\n", "Epoch 100/100\n", "12/12 [==============================] - 2s 188ms/step - loss: 9.2531e-05 - val_loss: 0.0012\n" ], "name": "stdout" }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 11 } ] }, { "cell_type": "code", "metadata": { "id": "eo0aTb4IJGpa" }, "source": [ "train_predict=model.predict(X_train)\n", "test_predict=model.predict(X_test)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "M_TY-WWpJKG2" }, "source": [ "train_predict=scaler.inverse_transform(train_predict)\n", "test_predict=scaler.inverse_transform(test_predict)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "OYeqpID3JNvD", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "07ce6cf4-712a-42a2-eb4b-b51fd0a39599" }, "source": [ "math.sqrt(mean_squared_error(y_train,train_predict))" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "44.1638198226284" ] }, "metadata": { "tags": [] }, "execution_count": 14 } ] }, { "cell_type": "code", "metadata": { "id": "Bo5TCylcJZxf", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "d86de9f5-1321-4ce3-ec70-d18f1ebbe8c1" }, "source": [ "math.sqrt(mean_squared_error(ytest,test_predict))" ], "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "119.18831658437351" ] }, "metadata": { "tags": [] }, "execution_count": 15 } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 269 }, "id": "-V_0uf9kLPDM", "outputId": "e8bb2b60-268e-4469-f25b-672a32ffcc91" }, "source": [ "look_back=100\n", "trainPredictPlot = numpy.empty_like(df1)\n", "trainPredictPlot[:, :] = np.nan\n", "trainPredictPlot[look_back:len(train_predict)+look_back, :] = train_predict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(df1)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(train_predict)+(look_back*2)+1:len(df1)-1, :] = test_predict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(df1))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "z4vyXjvxPeeV", "outputId": "026ca9f0-82ee-4448-a2d7-c639c611b140" }, "source": [ "accuracy = model.evaluate(X_test,ytest)\n", "print(accuracy)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "10/10 [==============================] - 0s 34ms/step - loss: 0.0012\n", "0.0012427340261638165\n" ], "name": "stdout" } ] } ] }