Stock Market Prediction System using Machine Learning Algorithm
Create New

Stock Market Prediction System using Machine Learning Algorithm

Project period

02/02/2020 - 03/02/2020

Views

63

0



Stock Market Prediction System using Machine Learning Algorithm
Stock Market Prediction System using Machine Learning Algorithm

The economy of a country is directly connected to the stock market. A country’s growth can also be determined through the stock market. Generally, the best prediction of the stock market will always help and guide investors to gain maximum profits. The prediction of the stock market can be made successful by carefully gathering and analyzing the previous stock market data history, which is previous year data. A large volume of stock market price data changes every minute. As we know very well that there are a lot of risks in the present stock market system where loss or gain is unexpected. Predicting stock is not usually an easy task, it's a close way of analyzing the behavior of stock market data series. Stock market prediction plays a vital role in determining the future value of company value.

Machine learning is considered as one of the branches in Artificial Intelligence to work automatically or to predict information or to give instructions to a system to perform an action. The aim of Machine Learning is to explain the structure of the data and fit that data into models that can be utilized by the researchers. This project work involves the analysis of various machine algorithms that are applied to stock market prediction. Applying Machine learning is a well-organized way to handle such situations. By applying Machine learning, one will be able to predict a market value close to the real value, which results in increased accuracy. Introducing Machine learning in the stock market prediction system has attracted many investors and researchers because of its accurate estimation.

Why: Problem statement

When the company’s growth in the share market is at peak the demand for jobs would be high and there will be a money flow between people and thus forming a chain forming dependency one over the other.This project helps the user to predict the stock price in future and also helps the user to decide in which company it would be feasible to invest.

How: Solution description

Data collection:

The three years' stock data has been collected using different internet sources. The factors considered are open, close, low, high and volume. 

The aim is to build a predictive model and find out the stock value for the future year using LSTM.

Long Short Term Memory networks called “LSTMs” are a unique type of RNN, the ability to learn long-term dependencies. They work tremendously well on an enormous kind of problems and are now widely used.LSTMs are explicitly designed to avoid the long-term dependency problem. Saving and remembering information for a prolonged period of time is practically their default behaviour, not something they struggle with.

By employing machine learning algorithms, we classified the value of the stock market.

The proposed system uses three algorithms namely:

K-Nearest Neighbour

K- nearest neighbours is defined as a simple algorithm that stores all available cases and classifies new cases supported by a similarity measure (e.g., distance functions). KNN has been widely used in statistical predictions or estimation and also in pattern recognition. KNN is used as a non-parametric technique.

Decision Tree Algorithm

Decision Tree algorithm is from the family of supervised learning algorithms. Decision tree builds classification or regression models in the form of a tree structure. Unlike other supervised learning algorithms, the decision tree algorithm can be used for solving regression and classification problems too. The goal of using a Decision Tree is to create a training model that can be used to predict the class or value of target variables by learning simple decision rules inferred from prior data(training data). The topmost decision node which corresponds to the simplest predictor called the root node. Both categorical and numerical data can be handled by Decision trees.

Random Forest

Random forest is from the family of supervised learning algorithms which is utilized for both classifications including regression analysis. It is mainly used for classification problems. As we know, a forest is made up of trees and more trees means a more robust forest. Similarly, a random forest algorithm creates decision trees on data samples then gets the prediction from each of them and eventually selects the simplest solution by means of voting. 

We deployed a predicted Machine learning model on the web through Flask.

How is it different from competition

The existing stock market price prediction uses decision tree to predict the high trend and low trend . Stock market is dynamic in nature and it is prone to change according to situations like political uncertainty, money flow, Natural Calamity, Job Market. etc.Since decision trees alone cannot predict these many factors it is impossible to predict the correct trend.

But the user interface has not been done. In the proposed system, we have used three algorithms. We also used the LSTM model to predict the value of the stock market. We deployed a Machine learning model on the web through Flask.

Who are your customers

Stock market investors and business people

Project Phases and Schedule

Phase 1:User data collection

Phase 2: Stock selection

Phase 3: Stock analysis

Phase 3: Stock recommendation


 

Resources Required

Anaconda tool - Python 3.7

Download:
Project Code Code copy
/* Your file Name : Stock_final.ipynb */
/* Your coding Language : python */
/* Your code snippet start here */
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np # linear algebra\n",
    "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset_train = pd.read_csv(\"trainset.csv\" , index_col=0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "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>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</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",
       "      <td>02-01-2013</td>\n",
       "      <td>357.385559</td>\n",
       "      <td>361.151062</td>\n",
       "      <td>355.959839</td>\n",
       "      <td>359.288177</td>\n",
       "      <td>359.288177</td>\n",
       "      <td>5115500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>03-01-2013</td>\n",
       "      <td>360.122742</td>\n",
       "      <td>363.600128</td>\n",
       "      <td>358.031342</td>\n",
       "      <td>359.496826</td>\n",
       "      <td>359.496826</td>\n",
       "      <td>4666500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>04-01-2013</td>\n",
       "      <td>362.313507</td>\n",
       "      <td>368.339294</td>\n",
       "      <td>361.488861</td>\n",
       "      <td>366.600616</td>\n",
       "      <td>366.600616</td>\n",
       "      <td>5562800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>07-01-2013</td>\n",
       "      <td>365.348755</td>\n",
       "      <td>367.301056</td>\n",
       "      <td>362.929504</td>\n",
       "      <td>365.001007</td>\n",
       "      <td>365.001007</td>\n",
       "      <td>3332900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>08-01-2013</td>\n",
       "      <td>365.393463</td>\n",
       "      <td>365.771027</td>\n",
       "      <td>359.874359</td>\n",
       "      <td>364.280701</td>\n",
       "      <td>364.280701</td>\n",
       "      <td>3373900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>09-01-2015</td>\n",
       "      <td>501.997498</td>\n",
       "      <td>502.156616</td>\n",
       "      <td>492.082062</td>\n",
       "      <td>493.454498</td>\n",
       "      <td>493.454498</td>\n",
       "      <td>2069400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12-01-2015</td>\n",
       "      <td>492.231232</td>\n",
       "      <td>493.261566</td>\n",
       "      <td>484.891632</td>\n",
       "      <td>489.854309</td>\n",
       "      <td>489.854309</td>\n",
       "      <td>2322400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13-01-2015</td>\n",
       "      <td>496.109894</td>\n",
       "      <td>500.227234</td>\n",
       "      <td>489.695190</td>\n",
       "      <td>493.464447</td>\n",
       "      <td>493.464447</td>\n",
       "      <td>2370500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14-01-2015</td>\n",
       "      <td>491.942810</td>\n",
       "      <td>500.475861</td>\n",
       "      <td>490.301849</td>\n",
       "      <td>498.128784</td>\n",
       "      <td>498.128784</td>\n",
       "      <td>2235700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15-01-2015</td>\n",
       "      <td>502.803040</td>\n",
       "      <td>502.912445</td>\n",
       "      <td>495.035797</td>\n",
       "      <td>499.043732</td>\n",
       "      <td>499.043732</td>\n",
       "      <td>2715800</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>514 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Open        High         Low       Close   Adj Close  \\\n",
       "Date                                                                     \n",
       "02-01-2013  357.385559  361.151062  355.959839  359.288177  359.288177   \n",
       "03-01-2013  360.122742  363.600128  358.031342  359.496826  359.496826   \n",
       "04-01-2013  362.313507  368.339294  361.488861  366.600616  366.600616   \n",
       "07-01-2013  365.348755  367.301056  362.929504  365.001007  365.001007   \n",
       "08-01-2013  365.393463  365.771027  359.874359  364.280701  364.280701   \n",
       "...                ...         ...         ...         ...         ...   \n",
       "09-01-2015  501.997498  502.156616  492.082062  493.454498  493.454498   \n",
       "12-01-2015  492.231232  493.261566  484.891632  489.854309  489.854309   \n",
       "13-01-2015  496.109894  500.227234  489.695190  493.464447  493.464447   \n",
       "14-01-2015  491.942810  500.475861  490.301849  498.128784  498.128784   \n",
       "15-01-2015  502.803040  502.912445  495.035797  499.043732  499.043732   \n",
       "\n",
       "             Volume  \n",
       "Date                 \n",
       "02-01-2013  5115500  \n",
       "03-01-2013  4666500  \n",
       "04-01-2013  5562800  \n",
       "07-01-2013  3332900  \n",
       "08-01-2013  3373900  \n",
       "...             ...  \n",
       "09-01-2015  2069400  \n",
       "12-01-2015  2322400  \n",
       "13-01-2015  2370500  \n",
       "14-01-2015  2235700  \n",
       "15-01-2015  2715800  \n",
       "\n",
       "[514 rows x 6 columns]"
      ]
     },
     "execution_count": 225,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_train.head(514)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 355.959839],\n",
       "       [ 358.031342],\n",
       "       [ 361.488861],\n",
       "       ...,\n",
       "       [1048.050049],\n",
       "       [1044.77002 ],\n",
       "       [1044.900024]])"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Shows only the second column\n",
    "#To show only the third colum, use[:,2:3]\n",
    "trainset = dataset_train.iloc[:,2:3].values\n",
    "trainset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Minmax scalar - feature_range: tuple (min, max), default=(0, 1) \n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "sc = MinMaxScaler(feature_range = (0,1))\n",
    "training_scaled = sc.fit_transform(trainset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.01454946],\n",
       "       [0.01743441],\n",
       "       [0.02224964],\n",
       "       ...,\n",
       "       [0.97841338],\n",
       "       [0.97384533],\n",
       "       [0.97402638]])"
      ]
     },
     "execution_count": 228,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "training_scaled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = []\n",
    "y_train = []\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Takes only specific values between 60 to 514. Append means adding the next value to the list.\n",
    "#Sending the train data into numpy array. Adding values in the array to be done using append.\n",
    "\n",
    "for i in range(60,515):\n",
    "    x_train.append(training_scaled[i-60:i, 0])\n",
    "    y_train.append(training_scaled[i,0])\n",
    "x_train,y_train = np.array(x_train),np.array(y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [],
   "source": [
    "#LSTM networks are well-suited to classifying, processing and making predictions based on time series data, \n",
    "#since there can be lags of unknown duration between important events in a time series.\n",
    "#Refer this link for LSTM : https://en.wikipedia.org/wiki/Long_short-term_memory\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from keras.layers import Dropout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [],
   "source": [
    "regressor = Sequential()\n",
    "regressor.add(LSTM(units = 50,return_sequences = True,input_shape = (x_train.shape[1],1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Dropout is a regularization method where input and recurrent connections to LSTM units are probabilistically\n",
    "#excluded from activation and weight updates while training a network. This has the effect of reducing \n",
    "#overfitting and improving model performance.\n",
    "#the production of an analysis that corresponds too closely or exactly to a particular set of data, \n",
    "#and may therefore fail to fit additional data or predict future observations reliably\n",
    "regressor.add(Dropout(0.2))\n",
    "regressor.add(LSTM(units = 50,return_sequences = True))\n",
    "regressor.add(Dropout(0.2))\n",
    "regressor.add(LSTM(units = 50,return_sequences = True))\n",
    "regressor.add(Dropout(0.2))\n",
    "regressor.add(LSTM(units = 50))\n",
    "regressor.add(Dropout(0.2))\n",
    "regressor.add(Dense(units = 1))\n",
    "regressor.compile(optimizer = 'adam',loss = 'mean_squared_error')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/1\n",
      "455/455 [==============================] - 4s 8ms/step - loss: 0.0150\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.callbacks.History at 0x11f29b917c8>"
      ]
     },
     "execution_count": 235,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Batch size - Splitting the whole data into 32 batches\n",
    "#Epochs - No. of times the 32 batches of data run\n",
    "regressor.fit(x_train,y_train,epochs = 10,batch_size = 32)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Training the data has been completed - Only 60 to 514 values got trained"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#to calculate accuracy in LSTM. Subtract the loss of the final epoch from 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Loading the testing dataset\n",
    "dataset_test =pd.read_csv(\"testset.csv\", index_col=0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "02-01-2013    357.385559\n",
       "03-01-2013    360.122742\n",
       "04-01-2013    362.313507\n",
       "07-01-2013    365.348755\n",
       "08-01-2013    365.393463\n",
       "                 ...    \n",
       "12-11-2013    500.594116\n",
       "13-11-2013    500.122192\n",
       "14-11-2013    513.619385\n",
       "15-11-2013    514.091309\n",
       "18-11-2013    514.528503\n",
       "Name: Open, Length: 223, dtype: float64"
      ]
     },
     "execution_count": 247,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#This is the values of original stock price\n",
    "real_stock_price = dataset_test.iloc[:,1:2].values\n",
    "dataset_total = pd.concat((dataset_train['Open'],dataset_test['Open']),axis = 0)\n",
    "dataset_total.head(223)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 955.48999 ,  966.700012,  980.      ,  980.      ,  973.719971,\n",
       "        987.450012,  992.      ,  992.099976,  990.289978,  991.77002 ,\n",
       "        986.      ,  989.440002,  989.52002 ,  970.      ,  968.369995,\n",
       "        980.      , 1009.190002, 1014.      , 1015.219971, 1017.210022,\n",
       "       1021.76001 , 1022.109985, 1028.98999 , 1027.27002 , 1030.52002 ,\n",
       "       1033.98999 , 1026.459961, 1023.419983, 1022.590027, 1019.210022,\n",
       "       1022.52002 , 1034.01001 , 1020.26001 , 1023.309998, 1035.      ,\n",
       "       1035.869995, 1040.      , 1055.089966, 1042.680054, 1022.369995,\n",
       "       1015.799988, 1012.659973,  995.940002, 1001.5     , 1020.429993,\n",
       "       1037.48999 , 1035.5     , 1039.630005, 1046.119995, 1045.      ,\n",
       "       1054.609985, 1066.079956, 1075.199951, 1071.780029, 1064.949951,\n",
       "       1061.109985, 1058.069946, 1057.390015, 1051.599976, 1046.719971,\n",
       "       1048.339966, 1064.310059, 1088.      , 1094.      , 1102.22998 ,\n",
       "       1109.400024, 1097.099976, 1106.300049, 1102.410034, 1132.51001 ,\n",
       "       1126.219971, 1131.410034, 1131.829956, 1137.48999 , 1159.849976,\n",
       "       1177.329956, 1172.530029, 1175.079956, 1176.47998 , 1167.829956,\n",
       "       1170.569946, 1162.609985, 1122.      , 1090.599976, 1027.180054,\n",
       "       1081.540039, 1055.410034, 1017.25    , 1048.      , 1045.      ,\n",
       "       1048.949951, 1079.069946, 1088.410034, 1090.569946, 1106.469971,\n",
       "       1116.189941, 1112.640015, 1127.800049, 1141.23999 , 1123.030029,\n",
       "       1107.869995, 1053.079956, 1075.140015, 1099.219971, 1089.189941,\n",
       "       1115.319946, 1136.      , 1163.849976, 1170.      , 1145.209961,\n",
       "       1149.959961, 1154.140015, 1120.01001 , 1099.      , 1092.73999 ,\n",
       "       1081.880005, 1047.030029, 1046.      , 1063.      ,  998.      ,\n",
       "       1011.630005, 1022.820007, 1013.909973,  993.409973, 1041.329956,\n",
       "       1020.      , 1016.799988, 1026.439941, 1027.98999 , 1025.040039,\n",
       "       1040.880005, 1037.      , 1051.369995, 1077.430054, 1069.400024,\n",
       "       1082.      , 1077.859985, 1052.      , 1025.52002 , 1029.51001 ,\n",
       "       1046.      , 1030.01001 , 1013.659973, 1028.099976, 1019.      ,\n",
       "       1016.900024, 1049.22998 , 1058.540039, 1058.099976, 1086.030029,\n",
       "       1093.599976, 1100.      , 1090.      , 1077.310059, 1079.890015,\n",
       "       1061.859985, 1074.060059, 1083.560059, 1065.130005, 1079.      ,\n",
       "       1079.02002 , 1064.890015, 1063.030029, 1067.560059, 1099.349976,\n",
       "       1122.329956, 1140.98999 , 1142.170044, 1131.319946, 1118.180054,\n",
       "       1118.599976, 1131.069946, 1141.119995, 1143.849976, 1148.859985,\n",
       "       1143.650024, 1158.5     , 1175.310059, 1174.849976, 1159.140015,\n",
       "       1143.599976, 1128.      , 1121.339966, 1102.089966, 1120.      ])"
      ]
     },
     "execution_count": 238,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs = dataset_total[len(dataset_total) - len(dataset_test)-60:].values\n",
    "inputs\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 955.48999 ],\n",
       "       [ 966.700012],\n",
       "       [ 980.      ],\n",
       "       [ 980.      ],\n",
       "       [ 973.719971],\n",
       "       [ 987.450012],\n",
       "       [ 992.      ],\n",
       "       [ 992.099976],\n",
       "       [ 990.289978],\n",
       "       [ 991.77002 ],\n",
       "       [ 986.      ],\n",
       "       [ 989.440002],\n",
       "       [ 989.52002 ],\n",
       "       [ 970.      ],\n",
       "       [ 968.369995],\n",
       "       [ 980.      ],\n",
       "       [1009.190002],\n",
       "       [1014.      ],\n",
       "       [1015.219971],\n",
       "       [1017.210022],\n",
       "       [1021.76001 ],\n",
       "       [1022.109985],\n",
       "       [1028.98999 ],\n",
       "       [1027.27002 ],\n",
       "       [1030.52002 ],\n",
       "       [1033.98999 ],\n",
       "       [1026.459961],\n",
       "       [1023.419983],\n",
       "       [1022.590027],\n",
       "       [1019.210022],\n",
       "       [1022.52002 ],\n",
       "       [1034.01001 ],\n",
       "       [1020.26001 ],\n",
       "       [1023.309998],\n",
       "       [1035.      ],\n",
       "       [1035.869995],\n",
       "       [1040.      ],\n",
       "       [1055.089966],\n",
       "       [1042.680054],\n",
       "       [1022.369995],\n",
       "       [1015.799988],\n",
       "       [1012.659973],\n",
       "       [ 995.940002],\n",
       "       [1001.5     ],\n",
       "       [1020.429993],\n",
       "       [1037.48999 ],\n",
       "       [1035.5     ],\n",
       "       [1039.630005],\n",
       "       [1046.119995],\n",
       "       [1045.      ],\n",
       "       [1054.609985],\n",
       "       [1066.079956],\n",
       "       [1075.199951],\n",
       "       [1071.780029],\n",
       "       [1064.949951],\n",
       "       [1061.109985],\n",
       "       [1058.069946],\n",
       "       [1057.390015],\n",
       "       [1051.599976],\n",
       "       [1046.719971],\n",
       "       [1048.339966],\n",
       "       [1064.310059],\n",
       "       [1088.      ],\n",
       "       [1094.      ],\n",
       "       [1102.22998 ],\n",
       "       [1109.400024],\n",
       "       [1097.099976],\n",
       "       [1106.300049],\n",
       "       [1102.410034],\n",
       "       [1132.51001 ],\n",
       "       [1126.219971],\n",
       "       [1131.410034],\n",
       "       [1131.829956],\n",
       "       [1137.48999 ],\n",
       "       [1159.849976],\n",
       "       [1177.329956],\n",
       "       [1172.530029],\n",
       "       [1175.079956],\n",
       "       [1176.47998 ],\n",
       "       [1167.829956],\n",
       "       [1170.569946],\n",
       "       [1162.609985],\n",
       "       [1122.      ],\n",
       "       [1090.599976],\n",
       "       [1027.180054],\n",
       "       [1081.540039],\n",
       "       [1055.410034],\n",
       "       [1017.25    ],\n",
       "       [1048.      ],\n",
       "       [1045.      ],\n",
       "       [1048.949951],\n",
       "       [1079.069946],\n",
       "       [1088.410034],\n",
       "       [1090.569946],\n",
       "       [1106.469971],\n",
       "       [1116.189941],\n",
       "       [1112.640015],\n",
       "       [1127.800049],\n",
       "       [1141.23999 ],\n",
       "       [1123.030029],\n",
       "       [1107.869995],\n",
       "       [1053.079956],\n",
       "       [1075.140015],\n",
       "       [1099.219971],\n",
       "       [1089.189941],\n",
       "       [1115.319946],\n",
       "       [1136.      ],\n",
       "       [1163.849976],\n",
       "       [1170.      ],\n",
       "       [1145.209961],\n",
       "       [1149.959961],\n",
       "       [1154.140015],\n",
       "       [1120.01001 ],\n",
       "       [1099.      ],\n",
       "       [1092.73999 ],\n",
       "       [1081.880005],\n",
       "       [1047.030029],\n",
       "       [1046.      ],\n",
       "       [1063.      ],\n",
       "       [ 998.      ],\n",
       "       [1011.630005],\n",
       "       [1022.820007],\n",
       "       [1013.909973],\n",
       "       [ 993.409973],\n",
       "       [1041.329956],\n",
       "       [1020.      ],\n",
       "       [1016.799988],\n",
       "       [1026.439941],\n",
       "       [1027.98999 ],\n",
       "       [1025.040039],\n",
       "       [1040.880005],\n",
       "       [1037.      ],\n",
       "       [1051.369995],\n",
       "       [1077.430054],\n",
       "       [1069.400024],\n",
       "       [1082.      ],\n",
       "       [1077.859985],\n",
       "       [1052.      ],\n",
       "       [1025.52002 ],\n",
       "       [1029.51001 ],\n",
       "       [1046.      ],\n",
       "       [1030.01001 ],\n",
       "       [1013.659973],\n",
       "       [1028.099976],\n",
       "       [1019.      ],\n",
       "       [1016.900024],\n",
       "       [1049.22998 ],\n",
       "       [1058.540039],\n",
       "       [1058.099976],\n",
       "       [1086.030029],\n",
       "       [1093.599976],\n",
       "       [1100.      ],\n",
       "       [1090.      ],\n",
       "       [1077.310059],\n",
       "       [1079.890015],\n",
       "       [1061.859985],\n",
       "       [1074.060059],\n",
       "       [1083.560059],\n",
       "       [1065.130005],\n",
       "       [1079.      ],\n",
       "       [1079.02002 ],\n",
       "       [1064.890015],\n",
       "       [1063.030029],\n",
       "       [1067.560059],\n",
       "       [1099.349976],\n",
       "       [1122.329956],\n",
       "       [1140.98999 ],\n",
       "       [1142.170044],\n",
       "       [1131.319946],\n",
       "       [1118.180054],\n",
       "       [1118.599976],\n",
       "       [1131.069946],\n",
       "       [1141.119995],\n",
       "       [1143.849976],\n",
       "       [1148.859985],\n",
       "       [1143.650024],\n",
       "       [1158.5     ],\n",
       "       [1175.310059],\n",
       "       [1174.849976],\n",
       "       [1159.140015],\n",
       "       [1143.599976],\n",
       "       [1128.      ],\n",
       "       [1121.339966],\n",
       "       [1102.089966],\n",
       "       [1120.      ]])"
      ]
     },
     "execution_count": 239,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs = inputs.reshape(-1,1)\n",
    "inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(185, 1)"
      ]
     },
     "execution_count": 240,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs = sc.transform(inputs)\n",
    "inputs.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Same thing has to be done for test dataset.\n",
    "x_test = []\n",
    "for i in range(60,185):\n",
    "    x_test.append(inputs[i-60:i,0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(125, 60)"
      ]
     },
     "execution_count": 242,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test = np.array(x_test)\n",
    "x_test.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(125, 60, 1)"
      ]
     },
     "execution_count": 243,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test = np.reshape(x_test, (x_test.shape[0],x_test.shape[1],1))\n",
    "x_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[670.1006 ],\n",
       "       [670.63074],\n",
       "       [671.1359 ],\n",
       "       [671.6135 ],\n",
       "       [672.0735 ],\n",
       "       [672.5332 ],\n",
       "       [673.0125 ],\n",
       "       [673.5291 ],\n",
       "       [674.09375],\n",
       "       [674.7105 ],\n",
       "       [675.3818 ],\n",
       "       [676.1102 ],\n",
       "       [676.897  ],\n",
       "       [677.7405 ],\n",
       "       [678.637  ],\n",
       "       [679.58325],\n",
       "       [680.58093],\n",
       "       [681.63403],\n",
       "       [682.7461 ],\n",
       "       [683.9158 ],\n",
       "       [685.13556],\n",
       "       [686.392  ],\n",
       "       [687.66705],\n",
       "       [688.9334 ],\n",
       "       [690.1503 ],\n",
       "       [691.2592 ],\n",
       "       [692.19916],\n",
       "       [692.9229 ],\n",
       "       [693.3922 ],\n",
       "       [693.5839 ],\n",
       "       [693.4951 ],\n",
       "       [693.14105],\n",
       "       [692.5567 ],\n",
       "       [691.7949 ],\n",
       "       [690.91626],\n",
       "       [689.9837 ],\n",
       "       [689.0588 ],\n",
       "       [688.19434],\n",
       "       [687.4329 ],\n",
       "       [686.809  ],\n",
       "       [686.3443 ],\n",
       "       [686.04236],\n",
       "       [685.8823 ],\n",
       "       [685.82556],\n",
       "       [685.8318 ],\n",
       "       [685.86884],\n",
       "       [685.91766],\n",
       "       [685.97546],\n",
       "       [686.0566 ],\n",
       "       [686.18726],\n",
       "       [686.3927 ],\n",
       "       [686.688  ],\n",
       "       [687.0782 ],\n",
       "       [687.55536],\n",
       "       [688.09467],\n",
       "       [688.65826],\n",
       "       [689.2029 ],\n",
       "       [689.68115],\n",
       "       [690.04614],\n",
       "       [690.2617 ],\n",
       "       [690.29785],\n",
       "       [690.1288 ],\n",
       "       [689.74133],\n",
       "       [689.13715],\n",
       "       [688.32697],\n",
       "       [687.3344 ],\n",
       "       [686.1951 ],\n",
       "       [684.9484 ],\n",
       "       [683.6328 ],\n",
       "       [682.287  ],\n",
       "       [680.9442 ],\n",
       "       [679.63684],\n",
       "       [678.3924 ],\n",
       "       [677.2352 ],\n",
       "       [676.191  ],\n",
       "       [675.2834 ],\n",
       "       [674.53296],\n",
       "       [673.9533 ],\n",
       "       [673.54407],\n",
       "       [673.2855 ],\n",
       "       [673.14374],\n",
       "       [673.08185],\n",
       "       [673.06647],\n",
       "       [673.0656 ],\n",
       "       [673.0513 ],\n",
       "       [673.0036 ],\n",
       "       [672.905  ],\n",
       "       [672.7557 ],\n",
       "       [672.56793],\n",
       "       [672.36163],\n",
       "       [672.1669 ],\n",
       "       [672.0173 ],\n",
       "       [671.9459 ],\n",
       "       [671.979  ],\n",
       "       [672.12854],\n",
       "       [672.3917 ],\n",
       "       [672.75323],\n",
       "       [673.19   ],\n",
       "       [673.67847],\n",
       "       [674.1966 ],\n",
       "       [674.7255 ],\n",
       "       [675.2504 ],\n",
       "       [675.7597 ],\n",
       "       [676.2391 ],\n",
       "       [676.67816],\n",
       "       [677.07623],\n",
       "       [677.4451 ],\n",
       "       [677.81116],\n",
       "       [678.2069 ],\n",
       "       [678.6617 ],\n",
       "       [679.19226],\n",
       "       [679.79956],\n",
       "       [680.4765 ],\n",
       "       [681.2145 ],\n",
       "       [682.00397],\n",
       "       [682.83636],\n",
       "       [683.7041 ],\n",
       "       [684.6002 ],\n",
       "       [685.521  ],\n",
       "       [686.4666 ],\n",
       "       [687.43835],\n",
       "       [688.4251 ],\n",
       "       [689.40857],\n",
       "       [690.3627 ],\n",
       "       [691.25586]], dtype=float32)"
      ]
     },
     "execution_count": 244,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Predicted values\n",
    "predicted_price = regressor.predict(x_test)\n",
    "predicted_price = sc.inverse_transform(predicted_price)\n",
    "predicted_price\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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26OqNG/enA8++CDux08ECRtQdscnbCrU/4StuiH8sar+p8iL0kR2draGWiQ45xJn6tSpFaK83RVV3HcnIhNUNbu47UvKWTwP1C7hsXPOuV1ExGChqvckMyHOOefSVyyd8pxzzu3iPFg455yLKmqwEJFqxayrn5jkOOecS0ex5CzeFZHt0ymJyJ7AZ4lLknPOuXQTS7B4D3hLRDJEpDnwKXBrIhPlnHOxCh+i/PTTT2fjxo1l3tcXX3zBCSecAMDIkSMZNGhQxG3XrFnDM888U+pj3H333duH+yi8vkmTJtvfy8iRI4t9fbR0JUrUYKGqz2M5ifeA/wFXqOqoRCfMOediET5EedWqVXnuued2eF5Vyc/PL/V+TzrpJAYOHBjx+bIGi5Jcf/31TJo0ibfeeouLLrqoSLpzc3OjpitRIgYLEbkhtADVgWbAJKBbsM4559LKYYcdxsyZM5k7dy5t2rRhwIABdO7cmQULFjBq1Ci6d+9O586dOf3007cPA/LJJ5+w3377ceihh/LuuwWDaQ8dOpSrr74agKVLl3LKKafQoUMHOnTowLfffsvAgQOZNWsWHTt25KabbgIiD4l+//3307p1a4466ih+//33qO+jTZs2VK5cmRUrVnDBBRdwww03cMQRR3DLLbdETRfAa6+9RteuXenYsSOXX345eXl55f5sS+qUV7gD3ogI651zLtUjlJObm8vHH39M7969Afj999956aWXeOaZZ1ixYgX33Xcfo0ePplatWjz00EP85z//4eabb+bSSy9l7NixtGzZkjPPPLPYfV9zzTX89a9/ZcSIEeTl5bFhwwYGDRrElClTmBS86UhDoteqVYvhw4fz008/kZubS+fOnenSpeQ55b7//nsqVapEVlYWANOnT2f06NFkZGQwdOjQEtM1depU3njjDcaNG0eVKlUYMGAAr7/+Oueff35sH2QE3inPOVehhYYoB8tZXHzxxfzxxx/svffe28d9Gj9+PL/99huHHHIIAFu3bqV79+5MmzaNFi1a0KpVKwDOPffcYidDGjt2LK+88gpgdSR16tRh9erVO2wTaUj09evXc8opp1CzZk3AirciefTRR3nttdeoXbs2b7zxxvaRa08//fRiR7ctLl2vvvoqEyZM4MADD9z++TRs2DCWj7JEUeezEJHPgNNVdU3wuB4wXFWPKetBReRa4FJAgOdV9bGgOe4bQHNgLjYk+mqxT+tx4DhgI3CBqk4s67Gdc4mRohHKt9dZFBY+oZCqcvTRRzNs2LAdtpk0aVKxQ4mXRaQh0R977LGYj3H99dfz97//vcj60kyOpKr079+fBx+M70DhsbSGygoFiiAhq4EyhykRaYsFiq5AB+AEEWkFDATGqGorYEzwGOBYoFWwXAY8W9ZjO+d2Td26dWPcuHHbp0PduHEj06dPZ7/99mPOnDnMmjULoEgwCenZsyfPPmunnry8PNatW0ft2rVZv3799m0iDYneo0cPRowYwaZNm1i/fj3/+9//4va+iktXz549efvtt1m2bBlgw6PPmzev3MeKJVjkicheoQcisjc2rWpZtQHGq+pGVc0FvgROAfoALwfbvAycHNzvA7yiZjxQN+jr4ZxzMcnKymLo0KGcffbZtG/fnm7dujFt2jSqV6/O4MGDOf744zn00EPZe++9i339448/zueff067du3o0qULv/76K5mZmRxyyCG0bduWm266iV69enHOOefQvXt32rVrx2mnncb69evp3LkzZ555Jh07dqRv374cdthhcXtfxaVr//3357777qNXr160b9+eo48+msWLF5f7WBGHKN++gUhvYDB2UgfoAVymqp+W6YAibYD3ge7AJiwXkQOcp6p1w7Zbrar1ROQDYJCqfhOsHwPcoqo5hfZ7GZbzYK+99uoSj0jqnCuZD1FeccVziHIAVPUTEekMhGYIub48c3Kr6lQReQjru7EBmAzklvCS4gr7ikQ4VR2MBTWys7PLk/NxzjlXSKwDCR4MHB4s5Z5WSlVfVNXOqtoDWAXMAJaGipeC22XB5guxPh4hTYE/ypsG55xzsYtlIMFBwLXAb8FyrYiUq5pdRBoGt3sBpwLDgJFA/2CT/lhRFcH688V0A9aqavkL4JxzzsUsajEU1mS1o6rmA4jIy8BPlG98qHdEJBPYBlwVNJEdBLwpIhcD84HTg20/CtIwE2s6e2E5juucizNVjVvzU5cc0eqqixNLsACoixUXAdQp9VEKUdUizQFUdSXQs5j1ClxV3mM65+KvevXqrFy5kszMTA8YFYSqsnLlSqpXr16q18USLB4EfhKRz7HK5h7AP0qfROfczqZp06YsXLiQ5cuXpzoprhSqV69O06ZNS/WaWFpDDRORL4ADsWBxi6ouKVMKnXM7lSpV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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Comparing real price and predicted price\n",
    "plt.plot(real_stock_price,color = 'red', label = 'Real Price')\n",
    "plt.plot(predicted_price, color = 'blue', label = 'Predicted Price')\n",
    "plt.title('Infosys Stock Price Prediction')\n",
    "plt.xlabel('Month')\n",
    "plt.ylabel('Stock Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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p8R0U+Fnn31GgwYNCsyrXr06GRkZey2rqkW2OFJV3n33XVq1alXKo0y9kuosHgJOVtVDgfOAv8Rrp6r6iqp2VtWeQDawCFgjIo0Bgse1weKZwGERqzcFVsUrLc65fcNBBx3E008/zWOPPcbu3bvp27cvI0eOZMsW6wd15cqVrF27lo0bN1K3bl1q1KjB/PnzmT59etzT0qNHD/7973+zdOlSgD3FUH379uWZZ54h1N3e7Nmz477vRCkpWOSq6nyAoDvyWvHaaaiISUQOB84FxgATgSHBIkOAUM3PROCyoFVUd2Cj11c454rSqVMnOnTowNixY+nTpw+//vWv6dGjB+3ateP8889n8+bN9OvXj9zcXNq3b88999xD9+7d456Ohg0bMmLECM4991w6dOjAhRdeCMA999zD7t27ad++PW3btuWee+6J+74TRSI6lC34hkgm8ETErFsjX6vqE3utFOtORf4D1Ad2A7eq6pSgDuNt4HBgOTBYVbPF8nJ/B/oB24ArVLXEGwW7du2qoRYJzrnEmTdvXoUob3d7K+q7E5FZqtq1qOVLquB+iYK5icKvy0xVTy5i3npsNL7C8xX4bTz265xzrmyKDRaqen8yE+Kccy59xXJTnnPOuf2cBwvnnHNRRQ0WIlKtiHn1EpMc55xz6SiWnMV7IrJnOKXgHohJiUuSc865dBNLsJgAvCMiGSLSDPgEuDORiXLOuVhFdlE+ePBgtm3bVuZtTZs2jQEDBgAwceJEHnnkkWKXzcnJ4bnnniv1Pu6777493X0Unt+kSZM9xzJx4sQi14+WrkSJGixU9SUsJzEB+AC4TlU/TXTCnHMuFpFdlFetWpUXXnihwPuqSn5+fqm3O3DgQO64445i3y9rsCjJLbfcwpw5c3jnnXe48sor90p3bm5u1HQlSrHBQkRuDU1AdazLjTlA92Cec86llZNPPpnFixezbNkyWrduzfXXX0/nzp1ZsWIFn376KT169KBz584MHjx4TzcgH3/8MccccwwnnXQS770X7kx71KhR3HDDDQCsWbOGc845hw4dOtChQwe++uor7rjjDpYsWULHjh0ZNmwYUHyX6A899BCtWrWiV69eLFiwIOpxtG7dmsqVK7Nu3Touv/xybr31Vk499VRuv/32qOkCeP311znuuOPo2LEj1157LXl5eeX+bEu6Ka/wDXjji5nv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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Comparing real price and predicted price\n",
    "plt.plot(real_stock_price,color = 'red', label = 'Real Price')\n",
    "plt.plot(predicted_price*0.8, color = 'blue', label = 'Predicted Price')\n",
    "plt.title('Infosys Stock Price Prediction')\n",
    "plt.xlabel('Month')\n",
    "plt.ylabel('Stock Price')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " * Serving Flask app \"__main__\" (lazy loading)\n",
      " * Environment: production\n",
      "   WARNING: This is a development server. Do not use it in a production deployment.\n",
      "   Use a production WSGI server instead.\n",
      " * Debug mode: off\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)\n",
      "127.0.0.1 - - [03/Mar/2020 12:05:27] \"\u001b[32mGET / HTTP/1.1\u001b[0m\" 302 -\n",
      "127.0.0.1 - - [03/Mar/2020 13:54:09] \"\u001b[32mGET / HTTP/1.1\u001b[0m\" 302 -\n"
     ]
    }
   ],
   "source": [
    "from flask import Flask,redirect\n",
    "app = Flask(__name__)\n",
    "@app.route('/')\n",
    "def home():\n",
    "    return redirect('https://predictionsystem1234.000webhostapp.com/index.php')\n",
    "\n",
    "if __name__==\"__main__\":\n",
    "    app.run()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
View on Github
Stock Market Prediction

Comments

Leave a Comment

Post a Comment