Forecasting adoption of a new product¶
Author: Achyuthuni Sri Harsha
Introduction¶
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:
Solving we get
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()
data
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])
popt
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.
References¶
- Diffusion on networks, Network Analytics module, Kalyan Talluri, MSc Business analytics, Imperial College London, Class 2020-22