The BASS Diffusion model

4 minute read


The Bass model (pdf) is a very useful tool for forecasting the adoption (first purchase) of an innovation (more generally, a new product) for which no closely competing alternatives exist in the marketplace. A key feature of the model is that it embeds a “contagion process” to characterize the spread of word-of -mouth between those who have adopted the innovation and those who have not yet adopted the innovation.

The Bass model

The Bass Model parameter representing the potential market, which is the ultimate number of purchasers of the product, is constant. It is denoted by m.


  • The portion (fraction) of the potential market that adopts at time t is f(t).
  • The portion (fraction) of the potential market that has adopted up to and including time t is F(t).
  • The Bass model coefficient (parameter) of innovation is p.
  • The Bass model coefficient (parameter) of imitation is q. This is also referred as the network effect parameter.

Then sales will be given by

, where peak sales are given by solving the differential equation above at

There are two special cases of the Bass diffusion model.

  1. The first special case occurs when q=0, when the model reduces to the Exponential distribution. This is the case when only an innovator exists without immitators.
  2. The second special case reduces to the logistic distribution, when p=0.

In general, the Bass model is a special case of the Gamma/shifted Gompertz distribution (G/SG); the acturies among us will be highly familiar with this one.

What’s in it?


  • The market potential remains constant.
  • The marketing strategies supporting the innovation do not influence the adoption process. This is relaxed in the generalized Bass model.
  • The customer decision process is binary (either adopt or not).
  • The value of q is fixed throughout the life cycle of the innovation. A time-varying imitation parameter could be introduced.
  • Uniform mixing, i.e., everyone can come into contact with everyone else.
  • Imitation always has a positive impact (i.e., the model allows only for interactions between innovators and noninnovators who favor the innovation).
  • Sales of the innovation are considered to be independent of the adoption or nonadoption of other innovations.
  • There is no repeat or replacement purchase of the innovation.

Parameters Estimation

Typical values of p and q (when time t is measured in years)

  • The average value of p has been found to be 0.03, and is often less than 0.01,
  • The average value of q has been found to be 0.38, with a typical range between 0.3 and 0.5.

In practice we estimate p and q via nonlinear regression and get estimate for the impact of marketing effort via “expert” opinion.


Let’s simulate a series of yearly sales to exhibit the model

t0 <- 1:10
sales <- `FILL IN` # This is your yearly sales
sales.cum <- cumsum(sales)

Now, to run the model we will use nls() using as starting values for the optimisation process the values mentioned above. We set the latest cumulative sales value as the m estimator and p, q are set as the research suggests.

m <- sales.cum[length(sales)]
p <- 0.03
q <- 0.38
bass.nls <- nls(sales ~ m * (((p + q)^2/p) * exp(-(p + q) * t0))/(1 + (q/p) *
    exp(-(p + q) * t0))^2, start = list(m,p,q))

Now, we have the model fitted and we can create the forecasts for our product sales

# create a grid sequence for point evaluation of the functions below <- seq(1,20,.1)
# get coefficients from the model
m.coef <- coef(bass.nls)[1]
p.coef <- coef(bass.nls)[2]
q.coef <- coef(bass.nls)[3]
# setting the starting value for m to the recorded total sales.
n.est <- exp(-(p.coef + q.coef) *
b.pdf <- m * ((p + q)^2/p) * n.est/(1 + (q/p) * n.est)^2
b0.pdf <- m * ((p + 0)^2/p) * n.est/(1 + (0/p) * n.est)^2 # no immitators <-,b.pdf, b0.pdf)
names( <- c("years","sales","sales_only_innovator")

ggplot(, aes(years)) +
  geom_line(aes(y = sales*10),colour='orange') +
  geom_line(aes(y = sales_only_innovator),colour='steelblue') +
  ggtitle('Sales evolution') +
  theme(axis.title.x = element_text(vjust = -2)) +
  theme(axis.text.x = element_text(angle = 60, hjust = 1)) +
  theme(axis.title.y = element_text(vjust = +2)) +
  theme(title = element_text(size = 12)) +
  theme(plot.title = element_text(size = 12)) +
  ylab("Sales") +
  xlab("Years past 2016")


Thus, we’ve shown that immitation has a positive impact on the product adoption (or that a product that has something to offer is most likely to be adopted :)).


In this post we explored a model that can give some ballpark estimates for evaluating alternative product innovations. While, assumptions are behind this we can still keep what we deem as valuable in our product design phase. One interesting extention of this model is adding milestones (in the form of cutoff points) where we should be preparing for further innovation in order to push the survival curve of the product family further down the time.

Leave a Comment