Neural Network unseen data performance
Did you split your „original“ data into Train/Dev/Test?
if not, try splitting your data into three parts. Train the model on your Train set, tune your hyperparameters on your Dev set and test your network on the Test set. The validation error doesn’t give an unbiased error, because the hyperparameters are tuned to it. That’s why you should always test your model on a given Test set. If the error is also low for the Test set I would guess you have another problem:
Without knowing too much about your approach and assuming you have no bugs, my guess is that the high error is because your Validation and Test set come from different distributions. I assume that maybe sales in 2015-2017 are quite different to those in 2018.
You should also take a look at Andrew Ng's explanation of this particular problem.