巴斯扩散模型-Bass Diffusion Model

1 巴斯模型概念

巴斯扩散模型针对创新产品、技术的采用和扩散,常被用作市场分析工具,对新产品、新技术需求进行预测。而新产品创新扩散是指新产品从创造研制到进入市场推广、最终使用的过程,表现为广大消费者从知晓、兴趣、评估、试用到最终采用新产品的行为。

巴斯扩散模型的许多变形也已被开发出来,用以满足某些特殊情形的精确需求。

2 创新扩散理论-Diffusion of Innovations Theory

巴斯模型的理论基础是新产品创新扩散理论。下面一张图很好地解释了创新扩散模型。

创新扩散模型

3 Bass模型详解

模型的核心思想是创新群体群体的购买决策独立于社会系统其他成员,而模仿群体购买新产品的时间受到社会系统的影响,并且这种影响随购买人数增加而增加,因为模仿群体的购买决策时间受到社会系统成员的影响。

Bass模型的基本形式:
d N ( t ) d t = p [ m − N ( t ) ] + q N ( t ) m [ m − N ( t ) ] \frac{dN(t)}{dt} = p[m - N(t)] + q\frac{N(t)}{m}[m - N(t)] dtdN(t)=p[mN(t)]+qmN(t)[mN(t)]
N ( t ) = m F ( t ) N(t) = mF(t) N(t)=mF(t)
其中,

  • N(t) 表示在时间t 时的累计采用者,n(t) 表示t 时刻采用者的数量
  • F(t) 表示在时间t 时的采用者数量占总的潜在采用者数量的概率,f(t) 表示在时间t 时的采用者数量占总的潜在采用者数量的概率密度函数
  • p表示外部影响系数,q表示内部影响系数
  • m表示最终采用者的总数,即市场潜力。

我们分别看柿子中的两个部分
p [ m − N ( t ) ] p[m - N(t)] p[mN(t)]
这一部分表示因为外部影响而购买新产品的采用人数,即这些采用者不受那些已经采用该种新产品的人的影响,成为创新采用者。
q N ( t ) m [ m − N ( t ) ] q\frac{N(t)}{m}[m - N(t)] qmN(t)[mN(t)]
这一部分表示那些受先前购买者影响而购买的采用人数。当t = 0时,
n ( 0 ) = p m n(0) = pm n(0)=pm
即假设在创新扩散开始时,有pm个采用者,也可以理解为新产品引入市场前的试销或赠送的样品

上面这一个微分方程解出来的结果为:
N ( t ) = m 1 − e − ( p + q ) t 1 + ( q p ) e − ( p + q ) t N(t) = m\cfrac{1 - e^{-(p+q)t}} {1 + (\cfrac{q}{p})e^{-(p+q)t}} N(t)=m1+(pq)e(p+q)t1e(p+q)t
n ( t ) = m p ( p + q ) 2 e − ( p + q ) t [ p + q e − ( p + q ) t ] 2 n(t) = m\cfrac{p(p +q)^2e^{-(p+q)t}} {[p + qe^{-(p+q)t}]^2} n(t)=m[p+qe(p+q)t]2p(p+q)2e(p+q)t

如果Bass模型的创新系数p与模仿系数q的参数值上分析,如果q>p,则采纳曲线由最高点,即此产品的扩散是成功的;如果q<=p,则增长曲线没有极值点,随时间呈指数衰减状态,说明此产品的市场扩散失败。
图像

3 巴斯模型的假设

  • 市场潜力随时间的推移保持不变
  • 一种创新的扩散独立于其他创新
  • 产品性能随时间推移保持不变
  • 社会系统的地域界限不随扩散过程而发生改变
  • 扩散只有两个阶段过程,采用和不采用
  • 一种创新的扩散不受市场营销策略的影响
  • 不存在供给约束
  • 采用者是无差异的、同质的;但是将消费者分为两类:创新消费者模仿消费者。新产品的潜在采用者会受到大众媒体影响(外部影响)的采用者称为创新者;会受到口头传播影响(内部影响)的采用者为模仿者

4 应用和局限

适用范围:

  • 耐用消费品的分析预测,既适用于新产品,也适用于已进入市场的产品。
  • 简洁明了,适用于初次评估。
  • 变形模型,可以使用与一些特殊情况。

局限:

  • 巴斯模型给出的是购买者数量,而不是企业的产品销售量,但是销售量可以根据顾客使用频率间接估计。
  • 虽然巴斯模型在理论上比较完善,但是只适用于已经在市场中存在一定时期的新产品的市场预测,而往往新产品上市的时候,器治疗和性能对顾客来讲相当陌生,企业无法对巴斯模型中的创新系数和模仿系数作出可靠的估计,此时就需要对巴斯扩散模型做出一定的补充。

4 代码

# 最小二乘法
from math import e  # 引入自然数e
import numpy as np  # 科学计算库
import matplotlib.pyplot as plt  # 绘图库
from scipy.optimize import leastsq  # 引入最小二乘法算法

# 样本数据(Xi,Yi),需要转换成数组(列表)形式
ti = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
yi = np.array([8, 11, 15, 19, 22, 23, 22, 19, 15, 11])


# 需要拟合的函数func :指定函数的形状,即n(t)的计算公式
def func(params, t):
    m, p, q = params
    fz = (p * (p + q) ** 2) * e ** (-(p + q) * t)  # 分子的计算
    fm = (p + q * e ** (-(p + q) * t)) ** 2  # 分母的计算
    nt = m * fz / fm  # nt值
    return nt


# 误差函数函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
# 一般第一个参数是需要求的参数组,另外两个是x,y
def error(params, t, y):
    return func(params, t) - y


# k,b的初始值,可以任意设定, 一般需要根据具体场景确定一个初始值
p0 = [100, 0.3, 0.3]

# 把error函数中除了p0以外的参数打包到args中(使用要求)
params = leastsq(error, p0, args=(ti, yi))
params = params[0]

# 读取结果
m, p, q = params
print('m=', m)
print('p=', p)
print('q=', q)

# 有了参数后,就是计算不同t情况下的拟合值
y_hat = []
for t in ti:
    y = func(params, t)
    y_hat.append(y)

# 接下来我们绘制实际曲线和拟合曲线
# 由于模拟数据实在太好,两条曲线几乎重合了
fig = plt.figure()
plt.plot(yi, color='r', label='true')
plt.plot(y_hat, color='b', label='predict')
plt.title('BASS model')
plt.legend()

图片

参考资料:
https://baike.baidu.com/item/%E5%B7%B4%E6%96%AF%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B/10258655?fr=aladdin
https://www.jianshu.com/p/269b8894d630?from=timeline
https://wenku.baidu.com/view/dcc6191155270722192ef7cf.html
https://zhuanlan.zhihu.com/p/28153851
https://www.jianshu.com/p/d3eb8d1a5e8c
https://www.jianshu.com/p/269b8894d630?from=timeline

  • 13
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Bass模型是一种经典的市场扩散模型,用于描述某种新产品在市场上的扩散过程。其数学形式为: $$ y(t) = p \cdot F(t) + q \cdot G(t) $$ 其中,$y(t)$ 表示在时刻 $t$ 时产品的市场占有率,$p$ 是初始市场占有率,$q$ 是最终市场占有率,$F(t)$ 是创新效应,$G(t)$ 是模仿效应。$F(t)$ 和 $G(t)$ 的形式分别为: $$ F(t) = \frac{m^2}{p+q} \cdot \frac{e^{-(p+q)m}}{(1+(q/p)e^{-qt})^2} \cdot (1-e^{-(p+q)t}) $$ $$ G(t) = \frac{m^2q}{p+q} \cdot \frac{e^{-(p+q)m}}{(1+(q/p)e^{-qt})^2} \cdot (e^{-(p+q)t}-1) $$ 其中,$m$ 是市场容量,$t$ 是时间。 现在我们想要用非线性最小二乘法对 Bass 模型中的参数 $p$、$q$ 和 $m$ 进行估计。具体步骤如下: 1. 导入必要的库和数据 ```python import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt t = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.array([0.0001, 0.0002, 0.0004, 0.0008, 0.0016, 0.0032, 0.0064, 0.0128, 0.0256, 0.0512]) ``` 2. 定义 Bass 模型函数 ```python def bass_model(t, p, q, m): f = (m**2 / (p + q)) * ((np.exp(-(p+q)*m)) / ((1 + (q/p)*np.exp(-q*t))**2)) * (1 - np.exp(-(p+q)*t)) g = (m**2 * q / (p + q)) * ((np.exp(-(p+q)*m)) / ((1 + (q/p)*np.exp(-q*t))**2)) * (np.exp(-(p+q)*t) - 1) return p*f + q*g ``` 3. 进行拟合 ```python popt, pcov = curve_fit(bass_model, t, y) print('p:', popt[0]) print('q:', popt[1]) print('m:', popt[2]) ``` 其中,popt是最优拟合参数,pcov是协方差矩阵。 4. 绘制拟合曲线 ```python plt.plot(t, y, 'bo', label='data') plt.plot(t, bass_model(t, *popt), 'r-', label='fit') plt.legend() plt.show() ``` 完整代码如下: ```python import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt t = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) y = np.array([0.0001, 0.0002, 0.0004, 0.0008, 0.0016, 0.0032, 0.0064, 0.0128, 0.0256, 0.0512]) def bass_model(t, p, q, m): f = (m**2 / (p + q)) * ((np.exp(-(p+q)*m)) / ((1 + (q/p)*np.exp(-q*t))**2)) * (1 - np.exp(-(p+q)*t)) g = (m**2 * q / (p + q)) * ((np.exp(-(p+q)*m)) / ((1 + (q/p)*np.exp(-q*t))**2)) * (np.exp(-(p+q)*t) - 1) return p*f + q*g popt, pcov = curve_fit(bass_model, t, y) print('p:', popt[0]) print('q:', popt[1]) print('m:', popt[2]) plt.plot(t, y, 'bo', label='data') plt.plot(t, bass_model(t, *popt), 'r-', label='fit') plt.legend() plt.show() ``` 运行代码,即可得到拟合图和参数估计结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值