Time Series Forecasting On NSE Of India Using Facebook’s NeuralProphet

In this article, we have implemented time series forecasting over the National Stock Exchange India Nifty 50 index dataset using Facebook’s NeuralProphet library to show the seasonality and trends over time.

Predicting stock prices can be difficult as it involves various factors. Both the government and companies keep changing their policies and strategies which affect stocks massively to either rise or fall anytime. The stock market is the most unpredictable area as these factors are unforeseen and subject to change in future. Thus it is difficult to make models that can accurately predict stock prices. However, it is possible to predict the trends, seasonality and other parameters based on the previous historical data. With the advent of deep learning state of the art models, many systems are adapting it. 

NeuralProphet

Last week Facebook released its new open source time series modelling Python library NeuralProphet, a PyTorch based neural network forecasting tool. Neural Prophet is an up-gradation to Facebook’s previously launched Prophet library. It is also based on AR-Net. The NeuralProphet framework addresses some key points – customization, scalability and extensibility. It is built on top of statistical and neural network models for time series modelling, used in any kind of forecasting and anomaly detection. NeuralProphet was created in collaboration with researchers at Monash and Stanford University. It’s easy-to-use and enables researchers and engineers to build better time-based data models

Subscribe to our Newsletter

Join our editors every weekday evening as they steer you through the most significant news of the day, introduce you to fresh perspectives, and provide unexpected moments of joy
Your newsletter subscriptions are subject to AIM Privacy Policy and Terms and Conditions.

NeuralProphet consists of components like trends, multiple seasonality modelled using Fourier terms, auto-regression implemented using Auto-Regressive Feed-Forward Neural Network, special events, future regressors and lagged regressors. 




Dataset

Established in 1992, National Stock Market of India or NSE is the first dematerialized electronic stock exchange market located in Mumbai, India. NSE holds a record listing of 1952 stocks with a market capitalization of $2.7 trillion (as of 2018) and volume of $400 billion (as of June 2014). NSE brought about transparency to the Indian equity markets by allowing everyone eligible (as per requirements set by NSE) to trade instead of just a group of brokers. This changed the whole trading scenario in Indian Stock price information which was earlier only accessed by the registered members then became open to all clients even at a remote location. This took the form of electronic deposit accounts, and balances were maintained on time. 

The data is the price history and trading volumes of the 52 stocks in the index NIFTY 50 from NSE India. All dataset has day-day pricing and trading values present across CSV files. Each of these stocks contains a metadata file and macro-information within it. The data is collected from 1st January 2000 to 30th October 2020.

Dataset can be downloaded from here.

There are 15 parameters:

Date, Symbol(Name of the Stock), Series, Prev Close(Previous day Closing price), Open(the opening price of that day), High(the maximum price of the day), Low( the least price for that day), Close( closing price for the day), VWAP(the average price security traded for that day, based on both volume and price), Volume, Turnover, Trades, Deliverable Volume, %Deliverable.

Stock Price Forecasting Using NeuralProphet

Installation: The GitHub repository can be cloned and used otherwise using pip.

pip install neuralprophet 

or 

pip install neutralprophet[live] – This enables plot_live_live parameter in the train function to get live training and validation plots.

# importing libraries

 import pandas as pd
 import matplotlib.pyplot as plt
 %matplotlib inline
 from neuralprophet import NeuralProphet 

# reading dataset

For demonstration purposes, we will be showing the forecasting on Coal India stocks. Similarly, it can be done on other stocks as well.

 df = pd.read_csv("../input/nifty50-stock-market-data/COALINDIA.csv", parse_dates=["Date"])
 df.head() 

df.tail()

# pattern for neuralprophet 

This is same as Prophet where only two columns are expected ‘ds’ which is the timestamp and ‘y’ the dependent variable( for stocks it is VWAP or Volume Weighted Average Price) 

 df = df[["Date", "VWAP"]]
 df.rename(columns={"Date": "ds", "VWAP": "y"}, inplace=True) 

# defining the model and fitting it

The complete hyperparameter for the model list can be viewed from here. Here ‘D’ stands for calendar day frequency.

 model = NeuralProphet()
 metrics = model.fit(df, validate_each_epoch=True, freq="D") 

# making future predictions from the model.

 future = model.make_future_dataframe(df, periods=365, n_historic_predictions=len(df))
 forecast = model.predict(future) 
 INFO: nprophet - _lr_range_test: learning rate range test found optimal lr: 3.51E-01
 Epoch[40/40]: 100%|██████████| 40/40 [00:05<00:00,  6.81it/s, SmoothL1Loss=0.00905, MAE=18.9, RegLoss=0, MAE_val=51.6, SmoothL1Loss_val=0.0649] 

# plotting the prediction

 fig, ax = plt.subplots(figsize=(14, 10))
 model.plot(forecast, xlabel="Date", ylabel="VWAP", ax=ax)
 ax.xaxis.label.set_size(28)
 ax.yaxis.label.set_size(28)
 ax.tick_params(axis='both', which='major', labelsize=24)
 ax.set_title("Coal India Stocks", fontsize=28, fontweight="bold") 

# plotting the parameters

This shows the trend, trend rate, weekly seasonality and a yearly seasonality.

fig_param = model.plot_parameters()

# plotting loss

 fig, ax = plt.subplots(figsize=(14, 10))
 ax.plot(metrics["MAE"], '-b', linewidth=6, label="Training Loss")  
 ax.plot(metrics["MAE_val"], '-r', linewidth=2, label="Validation Loss")
 ax.legend(loc='center right', fontsize=16)
 ax.tick_params(axis='both', which='major', labelsize=20)
 ax.set_xlabel("Epoch", fontsize=28, fontweight="bold")
 ax.set_ylabel("Loss", fontsize=28, fontweight="bold")
 ax.set_title("Model Loss (MAE)", fontsize=28, fontweight="bold") 

The complete notebook can be accessed from here.

End Notes

In this article, we have implemented time series forecasting over the National Stock Exchange India Nifty 50 index dataset using Facebook’s NeuralProphet library to show the seasonality and trends over time.

Jayita Bhattacharyya
Machine learning and data science enthusiast. Eager to learn new technology advances. A self-taught techie who loves to do cool stuff using technology for fun and worthwhile.

Download our Mobile App

MachineHack

AI Hackathons, Coding & Learning

Host Hackathons & Recruit Great Data Talent!

AIM Research

Pioneering advanced AI market research

Request Customised Insights & Surveys for the AI Industry

CORPORATE TRAINING PROGRAMS ON GENERATIVE AI

Strengthen Critical AI Skills with Trusted Corporate AI Training

Our customized corporate training program on Generative AI provides a unique opportunity to empower, retain, and advance your talent.

AIM Leaders Council

World’s Biggest Community Exclusively For Senior Executives In Data Science And Analytics.

3 Ways to Join our Community

Telegram group

Discover special offers, top stories, upcoming events, and more.

Discord Server

Stay Connected with a larger ecosystem of data science and ML Professionals

Subscribe to our Daily newsletter

Get our daily awesome stories & videos in your inbox
MOST POPULAR