2
$\begingroup$

I've started studying different forecasting algorithms, using R. As an example, maybe not the best one (due to a lack of seasonality), I am using Facebook stocks.

Training set:

SYMBOL <- getSymbols("FB", from = "2015-01-01", to = "2019-12-31")
Stocks_FB_day <- get(SYMBOL[1])
Stocks_FB_day_Cl <- Cl(Stocks_FB_day)

Testing set:

SYMBOL <- getSymbols("FB", from = "2020-01-01", to = "2020-01-21")
Stocks_FB_day <- get(SYMBOL[1])

I have built different models, including ARIMA. I know this one is not the most suitable for daily stock data, however, I've decided to give it a try. Taking into account that there are approximately 252 observations per year, I've created decomposition plots, using stl() function and setting frequencies equal to 126 (half a year) and 252 (a full year). Both plots show that seasonal signals are not really essential. Here is one of them:

enter image description here

It can also be concluded from the ACF and PACF graphs (maybe I am wrong?):

enter image description here

These are my experiments with auto.arima function:

enter image description here

Every time I wrote "D = 1" (whether frequency was 252 or 126), forcing seasonal differencing, I got higher AIC values, however, more accurate predictions. I am not saying that getting flat / almost flat lines is not appropriate, nevertheless, sometimes you want to know more than just an overall direction of your future forecast if it is possible.

enter image description here

I assume I have done plenty of mistakes and it is highly possible that the entire approach is not appropriate at all.

The major question is:

"Does it make sense to force seasonal differencing (D = 1) when it gives better forecast values (I compare them with a hold-out set, calculating MAPE, for instance) even if it seems to be unnecessary, owing to the fact that seasonality is insignificant?"

$\endgroup$

1 Answer 1

4
$\begingroup$

As general advice, you can push back against what the data you have in front of you is telling you if you have reliable prior domain knowledge. In this case, that would be knowledge about the stock market in general, or knowledge about Facebook's business specifically, that you have previously acquired independently of the stock price series you are looking at.

But if the domain knowledge doesn't say it should be seasonal, and the data doesn't really look seasonal, and you randomly say "hey, what if I tried to force seasonality?" and you get better out of sample results, you should definitely be skeptical about whether you have truly improved your model in a way that will be useful in the future. It's of course possible that the domain knowledge is flawed, or that adding the seasonal differencing has fixed a real but unrelated problem with your model that you could better justify fixing directly.

I see lots of people on here who are learning about forecasting that seem to gravitate towards stock prices as a first project. Unfortunately, the nature of the domain is that, within the class of ARIMA models, stock prices are almost always best modeled as random walks, so not very interesting from a learning standpoint. This is a fundamental property of the domain and it is due to the way aggregate expectations of future prices influence investors to modify the future path of the price by buying or selling the asset. This feedback mechanism tends to attenuate any easily anticipated moves, so all you can easily observe is noise.

Stock prices do not typically have a strongly seasonal pattern for this reason. If it was possible to make reliable profits by buying in the low season and selling in the high season, everyone would do it. This would cause the price in the low season to increase, and the one in the high season to fall, eventually making this advantage disappear. The prior domain knowledge in this case says that stock prices are probably not seasonal in this way.

So, in this case I would be skeptical of adding in the seasonal differencing and I would investigate further why the level of your non-seasonal forecast seems to be much further off (I can't tell from the information you've posted so far).

$\endgroup$
1
  • $\begingroup$ @ Chris Haug, Thanks a lot for this great answer. Now, it does make lots of sense to me. With regard to why D = 1 somehow may work in this case, I've thought that maybe the last 2 years of the data might have slightly stronger seasonal patterns, in comparison to the data in the first few years. Nevertheless, these patterns are still hardly distinguishable, so I'm going to explore this further. $\endgroup$
    – User
    Commented Aug 16, 2020 at 15:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.