MarketingDistillery.com is about web analytics, data science and marketing strategy

This article takes only 3 minutes to read

Modelling responses to market shocks

impulse response, http://www.michalkaszczyszyn.com/en/tutorials/free_impulse_responses.html

impulse response, http://www.michalkaszczyszyn.com/en/tutorials/free_impulse_responses.html

One of the frequently asked questions by marketers is what shall we expect from any market turbulences. This can be an increase in competitors’ spend on advertising, beginning of pricing war or any outlier of current market conditions. Let us address this issue on an example of a competitors high discount price using impulse response functions.

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:

we can see something like:

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:

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

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:

The most interesting is the second graph:

impulse response function

impulse response function


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.

Leave a Reply

You must be logged in to post a comment.