On a stable market, where market penetration is high and there is little room for innovation (many retail/home electronics examples), one of the quickest way to generate more revenue is to launch a noticeable discount. Apart from the question of it’s net effect (profit minus advertisement cost minus cannibalisation of our baseline), it destabilizes market state for a short period of time. Usually after such promotion all returns to close surrounding of previous state. In this article we would like to address the opposite side of the coin – what might happen to our volumes when a competitor launches a discount.

For this purpose, let us assume that we can observe the meaningful proxy for competitors’ sales. A good one might be traffic to site with some assumptions around conversion rates. The traffic data are available with vendors like e.g. Experian or Equifax. Having such information, we can start building our predictive model.

Let us assume, that \(y_{t,1}\) stands for our sales at time \(t\) and \(y_{t,2}\) for our key competitor. I would recommend to use weekly data, so \(t\) means a single week. With little knowledge of exogenous market drivers, we can use time series models to analyze joint co-movements in our sales data by formulating a Vector Autoregressive (VAR) model:

\(\left[\begin{array}{c}y_{t,1}\\y_{t,2}\end{array}\right] = \lambda + \Lambda_{1}\left[\begin{array}{c}y_{t-1,1}\\y_{t-1,2}\end{array}\right] + \Lambda_{2}\left[\begin{array}{c}y_{t-2,1}\\y_{t-2,2}\end{array}\right] + \Sigma^{\frac{1}{2}}\varepsilon_{t}\)In this case, we describe current data with one ‘mean’ vector \(\lambda\) (mean in quotes, as it is not entirely the mean) and two free matrices \(\Lambda_{1}\) and \(\Lambda_{2}\) describing the contributions of two previous weeks to this weeks volumes.

In such system, let us assume that:

\(y_{-1}=\left[\begin{array}{c}0\\0\end{array}\right]\), \(y_{0}=\left[\begin{array}{c}0\\1\end{array}\right]\)

which means that we observe a unit shock in the time \(t=0\). Then we can iterate the system and simulate the future outcomes:

\(y_{1} = \Lambda_{1}y_{0} + \Lambda_{2}y_{-1}\)

\(y_{2} = \Lambda_{1}y_{1} + \Lambda_{2}y_{0}\)

And so on. We have intentionally dropped the \(\lambda\), as we are not interested in estimating the trend, but the deviations from it caused by the competitor’s jump. It is however recommended to use so called orthogonal response function – which alters the original approach by incorporating knowledge from the error terms and transforming the original equation, so that the information from error term gets into original variables:

\(y_{t} = \lambda^{*}+ \Lambda^{*}_{1}y_{t-1} + \Lambda^{*}_{2}y_{t-2}+\varepsilon_{t}\)

Note that in this representation, there is no \(\Sigma^{\frac{1}{2}}\) next to \(\varepsilon_{t}\). For more details, see the great book from Helmut Lutkepohl (2005) “New Introduction to Multiple Time Series Analysis”.

Let us get now on some empirical example and ‘get our hands dirty’. The sample data can be found here. We have put our weekly sales volumes in first column, named “us” and the competitor’s in the second. After loading:

1 |
y = read.table("sales", header=T, sep=";", dec=".") |

we can see something like:

1 2 3 4 5 6 7 8 |
> head(y) us competition 1 11.25550 11.97595 2 11.19423 11.77742 3 11.47211 11.60004 4 11.30701 11.99942 5 11.18641 11.93733 6 11.12457 11.92858 |

As usual, following the R theorem,

“For each problem there exists an R package that solves it.”

we can use an existing package to deal with VAR models quite well:

1 |
library('vars') |

now, let’s estimate the equations using OLS estimators:

1 |
var = VAR(y, p=2) |

The p=2 part is to tell the package how many lags we want to include. This time we know from the beginning we need two, but in general we might choose it from the data using the Schwartz information criterion.

And let’s plot the impulse response functions:

1 |
plot(irf(var)) |

The most interesting is the second graph:

We can see here how the competitor’s increase impacts our sales in the short run (upper graph) and how it might influence himself (bottom graph). We can see a short drop in our sales at the beginning, but the recovery timetakes about 3-4 weeks. The competitor’s gain is stronger than our loss (it will eat also other market players), however drops below zero afterwards (possible cannibalization effect), and also vanishes after few weeks.