Separating Base and Promotional Volume I am working on a project where I have to separate base and promotional volume from the sales data. I have sales data for the last 4 years at week level. How can I separate base and promotional volume from only this much data?
Is it possible to do by regression or any time series approach?
I'd appreciate any feedback.
Thanks.
 A: One possibility would be ARIMAX, where the promotional activity would be the additional regressors. Look at ?auto.arima in R.
Here is an example. We simulate an ARMA(1,1) process with a nonzero mean and promotions (18 weeks without promos, followed by 2 weeks with promotions, repeated over and over for 200 weeks) and put this into a ts data structure with a seasonality of 52, which is almost the number of weeks per year:
library(forecast)
hist.promos <- rep(c(rep(0,18),rep(1,2)),10)
set.seed(2)
sales.ts <- ts(10*arima.sim(model=list(ar=0.5,ma=0.3),
    n=length(hist.promos))+60+50*hist.promos,frequency=52)

We model this using auto.arima(), feeding the historical promotions in via the xreg parameter:
model <- auto.arima(sales.ts,xreg=hist.promos)
model

(Note that auto.arima() does not recover the true model: it believes there is seasonality in there, which we didn't put in. Such is life in statistics.)
Now we can forecast using the model, using forecast.Arima() (note the capital A in case you want to read the help page). Note that we need to provide the future regressor values (i.e., promotions) via xreg. We calculate a baseline forecast without and one forecast with future promotions:
fcast.without.promos <- forecast(model,h=20,xreg=rep(0,20))
fcast.with.promos <- forecast(model,h=20,xreg=c(rep(0,18),rep(1,2)))

We can compare the mean forecasts (point forecasts). The difference is, of course, exactly 46.3007: the estimated coefficient from the model.
fcast.with.promos
fcast.without.promos
fcast.with.promos$mean-fcast.without.promos$mean
plot(fcast.with.promos)


Finally a few meta questions: do the promotions align with the week definitions, or do they run, e.g., from Wednesday to Tuesday, while the week is defined as Sunday-Saturday? Think carefully about this. In addition, think about whether you have only one type of promotion or different ones (BOGO vs. straight price reduction, advertised on TV vs. on shelf tags etc.). Finally, depending on the products, you may want to also include regressors for calendar events like Christmas and so on if auto.arima() and friends do not capture these effects automatically.
