I took the liberty of adding the intermittent-time-series tag to your question. You may want to browse through earlier questions carrying this tag.
As you note, the most common approach to modeling intermittent demands is crostons-method. An alternative is to fit a simple overall Poisson distribution, since your data don't exhibit any obvious dynamics.
A few earlier threads that may be interesting:
EDIT: Alex raises some very good points.
1) I wouldn't have considered the time series shown in the OP as intermittent. As far as sales for a single SKU/loc go, that's a pretty dense time series, and SES or moving average would work better than Croston's, would you agree?
There is no ironclad definition of what precisely an intermittent time series is. I agree that these here are not overly intermittent, compared to some other highly intermittent series you might encounter. However, there are still 32 zeros out of 103 observations.
I suspect that SES or MA would certainly be competitive, but I would not declare a priori that they would work better than Croston's method. (By "better", do you mean in terms of MSE, or MAE? This makes a difference, especially for count data.)
2) Why did you mention Poisson but not negative binomial?
Yes, the negbin is another possibility, and I do like it a lot, but the overdispersion is not blatant here. The mean is 1.36, the variance 1.51, and a formal test for overdispersion comes up insignificant:
foo <- structure(list(Week = structure(c(17054, 17061, 17068, 17075,
17082, 17089, 17096, 17103, 17110, 17117, 17124, 17131, 17138,
17145, 17152, 17159, 17166, 17173, 17180, 17187, 17201, 17208,
17215, 17222, 17229, 17236, 17243, 17250, 17257, 17264, 17271,
17278, 17285, 17292, 17299, 17306, 17313, 17320, 17327, 17334,
17341, 17348, 17355, 17362, 17369, 17376, 17383, 17390, 17397,
17404, 17411, 17418, 17425, 17432, 17439, 17446, 17453, 17460,
17467, 17474, 17481, 17488, 17495, 17502, 17509, 17516, 17523,
17530, 17537, 17544, 17551, 17558, 17565, 17572, 17579, 17586,
17593, 17600, 17607, 17614, 17621, 17628, 17635, 17642, 17649,
17656, 17663, 17670, 17677, 17684, 17691, 17698, 17705, 17712,
17719, 17726, 17733, 17740, 17747, 17754, 17761, 17768, 17775
), class = "Date"), Value = c(2L, 1L, 0L, 4L, 0L, 0L, 2L, 1L,
1L, 0L, 0L, 2L, 1L, 2L, 0L, 1L, 1L, 0L, 2L, 0L, 1L, 3L, 3L, 0L,
2L, 0L, 3L, 1L, 3L, 0L, 2L, 2L, 0L, 2L, 3L, 3L, 5L, 0L, 2L, 1L,
0L, 3L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 4L, 0L, 0L, 1L, 3L, 0L,
0L, 1L, 2L, 0L, 1L, 0L, 2L, 2L, 1L, 2L, 0L, 1L, 0L, 3L, 2L, 2L,
2L, 1L, 1L, 2L, 2L, 3L, 4L, 3L, 2L, 1L, 0L, 3L, 1L, 1L, 3L, 0L,
1L, 0L, 1L, 2L, 0L, 1L, 4L, 3L, 1L, 2L, 1L, 3L, 0L, 0L, 2L)), row.names = c(NA,
-103L), class = "data.frame")
with(foo,plot(Week,Value,type="o",pch=19))
hist(foo$Value,breaks=seq(-0.5,max(foo$Value)+0.5))
library(AER)
dispersiontest(glm(foo$Value~1,family="poisson"))
yields
Overdispersion test
data: glm(foo$Value ~ 1, family = "poisson")
z = 0.79877, p-value = 0.2122
alternative hypothesis: true dispersion is greater than 1
sample estimates:
dispersion
1.09792
And of course, if all we are interested in is an expectation point forecast, the best forecast would be the historical mean, no matter whether we model the series as Poisson or negbin distributed.