Help requested - Mixture model posterior predictive plot

I am quite new to Pymc3 and currently trying to estimate the density of the below sales data distribution as a two-component mixture (two Mv Normals):


Everything runs fine and the model converges well after checking BFMI/GR stats.

When I sample from the posterior distribution and attempt to plot I, however, I end up with a very strange distribution. Is this something I am doing incorrectly, or is this because I have done a poor job of specifying my priors?


# Model
N_SAMPLES = 2000

observed_sales = df.sales

with pm.Model() as model:
    lam1 = pm.Exponential('lam1', lam=1)
    lam2 = pm.Exponential('lam2', lam=1)
    pois1 = pm.Poisson.dist(mu=lam1)
    pois2 = pm.Poisson.dist(mu=lam2)
    w = pm.Dirichlet('w', a=np.array([1, 1]))
    like = pm.Mixture('like', w=w, comp_dists=[pois1, pois2], observed=observed_sales)

    sales_demand_trace = pm.sample(N_SAMPLES, tune=2000, random_seed=SEED, cores=1)
    prior = pm.sample_prior_predictive()
    posterior_predictive = pm.sample_posterior_predictive(sales_demand_trace)

# Draw posterior samples
y_pred = pm.sample_posterior_predictive(sales_demand_trace, 10000, model)

# Plot posterior
data_ppc = az.from_pymc3(

az.plot_ppc(data_ppc, num_pp_samples=100, figsize=(12,6))

All help very much appreciated.