# Does shuffling data for time series forecasting help?

So I am trying time series forecasting using LSTM's. The aim is to predict $$Y$$ given $$X$$ using regression.

I had already converted the input data into a sliding window format such that if my input data was of the form:

X = [x0, x1, x2,.....]
Y = [y0, y1, y2,.....]


Then I converted it into:

Xnew = [(x0, x1, x2), (x1, x2, x3), (x2, x3, x4),...]
Y    = [         y2,           y3,           y4,...]


Still, upon training my data I find a very high validation_loss.

Since validation_split takes only the fraction of the data from the end, I thought maybe I should try and randomize the data before training it. However, in that way, will time series have any meaning?

I found a similar question, but I had apparently already tried what was suggested: Is it valid to shuffle time-series data for a prediction task?

• Is your model linear regression or an LSTM? You mention both in the first paragraph. – zachdj May 19 '20 at 13:15
• It's an LSTM. Sorry I made a mistake. I edited it – Zoro101 May 19 '20 at 13:17

Shuffling data would not seem to make sense here, since your model has "memory". You're not predicting $$y_i$$ from only $$x_i$$, but also $$x_{i-1}$$ and $$x_{i-2}$$. If you shuffle the data and perform prediction, you are implying that $$x_1, x_2, x_3$$ should give the same value as $$x_2, x_1, x_3$$ or $$x_9, x_5, x_3$$, or any series of values that merely ends in $$x_3$$ (since the target value is always $$y_3$$, regardless of the other $$x$$). If your target value actually does depend on preceding variables, shuffling the data breaks that relationship. If it does not depend on preceding values, it's arguably not a time-series model, since the ordering of observations is irrelevant.

• Yeah, that seems to make sense. So what do you suggest could be done to reduce the validation loss? – Zoro101 May 19 '20 at 13:31

In RNN sequence is utmost important. So strict no for shuffling as it will break the sequence.

Though I think, it will be good if we can shuffle different batch series, such that if a particular series used in batch i, next time that series can be the part of some different batch say j.

If you're worried that your estimate of loss is inaccurate, you can obtain a more stable estimate of validation_loss by using time-series cross-validation.