i have training data from 2015-2017 and testing data of 2018. i have multiple variables my data is multivariate time series data.i want to predict 2019 data by using test data of 2018.is it possible? i am confused about Long short term memory neural networks working what is actually it will do.does my problem come under multivariate multi step forecasting? or multivariate single step forecasting?
You should post your code, or no one here can see what you have tried so far. Anyway, I'll throw this out there for you, and hopefully it will clarify things.
from pandas_datareader import data as wb import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.pylab import rcParams from sklearn.preprocessing import MinMaxScaler start = '2019-02-20' end = '2020-02-20' tickers = ['AAPL'] thelen = len(tickers) price_data =  for ticker in tickers: prices = wb.DataReader(ticker, start = start, end = end, data_source='yahoo')[['Open','Adj Close']] price_data.append(prices.assign(ticker=ticker)[['ticker', 'Open', 'Adj Close']]) #names = np.reshape(price_data, (len(price_data), 1)) df = pd.concat(price_data) df.reset_index(inplace=True) for col in df.columns: print(col) #used for setting the output figure size rcParams['figure.figsize'] = 20,10 #to normalize the given input data scaler = MinMaxScaler(feature_range=(0, 1)) #to read input data set (place the file name inside ' ') as shown below df.head() df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d') #df.index = names['Date'] plt.figure(figsize=(16,8)) plt.plot(df['Adj Close'], label='Closing Price') ntrain = 80 df_train = df.head(int(len(df)*(ntrain/100))) ntest = -80 df_test = df.tail(int(len(df)*(ntest/100))) #importing the packages from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, Dropout, LSTM #dataframe creation seriesdata = df.sort_index(ascending=True, axis=0) new_seriesdata = pd.DataFrame(index=range(0,len(df)),columns=['Date','Adj Close']) length_of_data=len(seriesdata) for i in range(0,length_of_data): new_seriesdata['Date'][i] = seriesdata['Date'][i] new_seriesdata['Adj Close'][i] = seriesdata['Adj Close'][i] #setting the index again new_seriesdata.index = new_seriesdata.Date new_seriesdata.drop('Date', axis=1, inplace=True) #creating train and test sets this comprises the entire data’s present in the dataset myseriesdataset = new_seriesdata.values totrain = myseriesdataset[0:255,:] tovalid = myseriesdataset[255:,:] #converting dataset into x_train and y_train scalerdata = MinMaxScaler(feature_range=(0, 1)) scale_data = scalerdata.fit_transform(myseriesdataset) x_totrain, y_totrain = ,  length_of_totrain=len(totrain) for i in range(60,length_of_totrain): x_totrain.append(scale_data[i-60:i,0]) y_totrain.append(scale_data[i,0]) x_totrain, y_totrain = np.array(x_totrain), np.array(y_totrain) x_totrain = np.reshape(x_totrain, (x_totrain.shape,x_totrain.shape,1)) #LSTM neural network lstm_model = Sequential() lstm_model.add(LSTM(units=50, return_sequences=True, input_shape=(x_totrain.shape,1))) lstm_model.add(LSTM(units=50)) lstm_model.add(Dense(1)) lstm_model.compile(loss='mean_squared_error', optimizer='adadelta') lstm_model.fit(x_totrain, y_totrain, epochs=3, batch_size=1, verbose=2) #predicting next data stock price myinputs = new_seriesdata[len(new_seriesdata) - (len(tovalid)+1) - 60:].values myinputs = myinputs.reshape(-1,1) myinputs = scalerdata.transform(myinputs) tostore_test_result =  for i in range(60,myinputs.shape): tostore_test_result.append(myinputs[i-60:i,0]) tostore_test_result = np.array(tostore_test_result) tostore_test_result = np.reshape(tostore_test_result,(tostore_test_result.shape,tostore_test_result.shape,1)) myclosing_priceresult = lstm_model.predict(tostore_test_result) myclosing_priceresult = scalerdata.inverse_transform(myclosing_priceresult) Epoch 1/3 - 7s - loss: 0.0163 Epoch 2/3 - 6s - loss: 0.0058 Epoch 3/3 - 6s - loss: 0.0047 totrain = df_train tovalid = df_test #predicting next data stock price myinputs = new_seriesdata[len(new_seriesdata) - (len(tovalid)+1) - 60:].values # Printing the next day’s predicted stock price. print(len(tostore_test_result)); print(myclosing_priceresult); # next day's predicted closing price [[329.42258]]
So, on 2020-02-20, we are predicting what AAPL will close at, on 2020-02-21. The model said it would be 329.42 and the actual close was 313.05. Less than 5% difference. Not bad, but I would have expected a little better accuracy. Oh well, we illustrated the point, and that was the goal of this exercise.
See the link below for more info.
Iìll go through your questions one by one:
i have multiple variables my data is multivariate time series data ...
This means your task is a multivariate regression. You have more than one explanatory variable to explain your y.
i want to predict 2019 data by using test data of 2018.is it possible?
Yes it is. The quality of the prediction depends from your data and your model's architecture. What kind of RNN did you try to implement up to now?
i am confused about Long short term memory neural networks working what is actually it will do.does my problem come under multivariate multi step forecasting? or multivariate single step forecasting?
As you said above, it's a multivariate forecasting. Whether it's multistep or not depends on your choice: - Single step: you predict one step in the future; your model has one output node. - Multi step: you predict multiple steps in the future; your model has n output nodes, one for each step of the prediction.
This is completely up to your needs and your preferences. Could you provide more information about the kind of prediction you need to implement?