Skip to content

Forecasting adoption of a new product

Author: Achyuthuni Sri Harsha


Forecasting new adoptions after a product introduction is an important marketing problem. I want to use a forecasting model developed by Frank Bass that has proven to be effective in forecasting the adoption of innovative and new technologies. I am going to use Nonlinear programming to estimate the parameters of the Bass forecasting model.

Bass Forecasting model

The model has three parameters that must be estimated.

parameter explanation
m the number of people estimated to eventually adopt the new product
q the coefficient of imitation
p the coefficient of innovation

The coefficient of imitation (q) is a parameter that measures the likelihood of adoption due to a potential adopter being influenced by someone who has already adopted the product. It measures the “word-of-mouth” effect influencing purchases. The coefficient of innovation (p) measures the likelihood of adoption, assuming no influence from someone who has already purchased (adopted) the product. It is the likelihood of someone adopting the product due to her or his own interest in the innovation.

If \(C_{t−1}\) is the number of people that adopted the product by time t-1, then the number of new adopters during time t is given by Bass forecasting model, and it is:

$$ F_t=(p+q[\frac{C_{t−1}}{m}])(m−C_{t−1}) $$ If \(c_{t} = C_t/m\), then

$$ c_{t} - c_{t-1} = (p+qc_{t-1})(1-c_{t-1})$$ Doing some maths, instead of one time period, we could consider \(\Delta t\) time period, we can write as:

\[ c_{t+ \Delta t} - c_{t} = (p+qc_{t})(1-c_{t}) \Delta t \]
\[ \frac{c_{t+ \Delta t} - c_{t}}{\Delta t} = (p+qc_{t})(1-c_{t}) \]
\[ \frac{d}{dt}c_{t} = (p+qc_{t})(1-c_{t}) \]

Solving we get

\[ c(t) = \frac{1-e^{-(p+q)t}}{1+\frac{q}{p}e^{-(p+q)t}} \]

As an example, consider the following revenues for a product.

import pandas as pd
data = pd.DataFrame({'week': [1,2,3,4,5,6,7,8,9,10,11,12], 'revenues': [0.1,3,5.2,7,5.25,4.9,3,2.4,1.9, 1.3, 0.8, 0.6]})
data['cum_sum'] = data['revenues'].cumsum()
week revenues cum_sum
0 1 0.10 0.10
1 2 3.00 3.10
2 3 5.20 8.30
3 4 7.00 15.30
4 5 5.25 20.55
5 6 4.90 25.45
6 7 3.00 28.45
7 8 2.40 30.85
8 9 1.90 32.75
9 10 1.30 34.05
10 11 0.80 34.85
11 12 0.60 35.45

Optimising for the ideal p, q and m values, we get

from scipy.optimize import curve_fit
def c_t(x, p, q, m):
    return (p+(q/m)*(x))*(m-x)
popt, pcov = curve_fit(c_t, data.cum_sum[0:11], data.revenues[1:12])
array([ 0.11467648,  0.37950562, 35.22906717])

The optimal p, d and q are:0.11467648,0.37950562, 35.22906717. We can use these to predict the future revenues of the product.


  1. Diffusion on networks, Network Analytics module, Kalyan Talluri, MSc Business analytics, Imperial College London, Class 2020-22
Back to top