具有随机游动或高斯过程的缓慢的潜在趋势

时间:2018-10-24 19:29:15

标签: pymc pymc3 probabilistic-programming

我正在尝试将PyMC3模型与一些有关销售的数据进行拟合。这是一个简短说明:

  • N个销售人员每个星期售出一些小部件
  • 我们假设每个销售人员每周以不同的平均速率销售小部件,并将此beta_i称为销售人员i
  • 我们的观测数据假定为〜Poisson(beta_i)。

此处每周平均销售数据以直方图的形式绘制,顶部为对数正态拟合,以使您了解销售员每周小部件销售的分布情况。 enter image description here

在第一种情况下,我得到了一些我认为是合理的beta版本,尽管它们看上去并不是特别的对数正态: enter image description here

由于我们希望推断出所有销售人员共有的潜在趋势(类似于“经济”),因此我们尝试添加一些内容。我们的第一个尝试是“经济性”只是时间的线性函数,从截距值1开始并具有导数gamma> 0(gamma是sd=0.5的半正态)。然后,我们得到了数据〜Poisson(beta_i *(1 + gamma))。在这种情况下,贝塔系数变化不大,我们确实推断出有关“经济”的一些信息,尽管影响很小。 enter image description here

我希望将其替换为随机游走或高斯过程,以使“经济”在时间上可以平稳地变化,但具有任意形状。理想情况下,它将从0值开始,然后到达需要捕获所有销售人员共享的潜在趋势的位置,并再次使用数据〜Poisson(beta_i *(1 + gamma))。这是我们的模型。

with pm.Model() as model:

    # Salesperson base rate of selling widgets
    beta_ = pm.Lognormal("beta", mu=mu_hat, sd=sd_hat, shape=(1, n_salespeople))
    # mu_hat and sd_hat were estimated by fitting a log-normal to weekly sales data

    # Economy
    gamma_ = pm.GaussianRandomWalk("gamma", mu=0, sd=1e-6, shape=(n_weeks, 1))


    # Effects
    base_rate = beta_
    economy = 1 + gamma_

    # Observed
    lambda_ = base_rate * economy
    y = pm.Poisson("y", mu=lambda_, observed=observed_sales + 1e-7)

其中observed_sales是销售额的整数数组,形状为(n_weeks, n_salespeople)

首先,我不确定是否正确指定了此模型。没有“经济”,我会推断出一组合理的Beta(尽管它看上去并不像对数正常,如第二个屏幕截图所示)。然后,无论sd变得多么小,我们返回的随机游走都不会完全平滑;由于不确定的原因,我经常会收到一条有关“质量矩阵在对角线上包含零”的消息。最终,即使在开始时,如果我不向观察到的数据中添加一个小因素,我也将获得无限的概率...为什么?

所以,TL; DR:我对概率编程还很陌生,我很确定有什么问题,但是我不确定是什么。任何输入,非常感谢!

0 个答案:

没有答案