The mathematics of marketing; Coles "Little Shop"
How the giving away of "free" toys can drive an increase in consumer spend.

There was a clamour of excitement in the kitchen at my client's office this morning; the weekly grocery delivery had arrived. The reason for the buzz; the four packets that contained mini-replicas of grocery items that were part of the Coles "Little Shop" promotion.
Anyone with kids in Australia will be familiar with this promotion - for every $30 spent on your shop, you receive (at random) a plastic miniature of a popular brand. There are thirty to collect in all - from toothpaste to dog food and bananas to Tim-Tams. But how much would you need to spend to secure the complete set (and keep the kids happy)?
This is a variation on the Coupon Collector's problem - or for those like me who grew up in England, the Panini Football Sticker Album problem. Applying a stochastic approach over 100,000 trials, I determined that the mean number of $30 spends that you would require to achieve success without assistance would be 120. That's a whopping $3,600 - even if you managed to limit your shop to exactly $30 each time.
Of course, as with football stickers, an informal swaps market - #gotgotneed - will speed you towards completion. Indeed, Coles will be running in-store swap days on Saturday August 11th - it may be wise to reschedule your visit to a less busy time unless, of course, you are chasing that elusive jar of Nutella.
For those interested in recreating my analysis, the following code in R will simulate 100,000 trials and report summary statistics of the results, along with a histogram plot of the number of $30 purchases required to hit the complete set through purchasing alone:
## Coles Little Shop Simulation
## Function simcollect(n) simulates the coupon collector's problem.
## With 30 to collect in all, how many $30 spends are required to get a
## full set of miniature grocery items?
simcollect <-function(n) {
coupons <- 1:n # set of coupons
collect <- numeric(n)
nums <-0
while (sum(collect)<n)
{
i <- sample(coupons,1)
collect[i] <- 1
nums <- nums + 1
}
nums
}
## Simulate over 100,000 trials and summarise results
trials <-100000
simlist <- replicate(trials,simcollect(30))
summary(simlist)
hist(simlist)
