Continuo no contractual#
from pymc_marketing.clv.distributions import ContNonContract
import numpy as np
import pandas as pd
import pymc as pm
import matplotlib.pyplot as plt
import arviz as az
Valores de Parámetros de Verdad Fundamental#
rng = np.random.RandomState(seed=34)
T = 10
T0 = 0
# individual-level model
lam = 0.5; p = 0.3
Muestreo del Prior#
Realizaremos inferencias sobre los datos anteriores para estimar los valores de lam y p, que se han establecido en 0.5 y 0.3 respectivamente.
cnc = ContNonContract.dist(
lam=lam,
p=p,
T=T,
)
prior_data = pm.draw(cnc, draws=10000)
Inferencia Posterior#
with pm.Model() as model:
λ = pm.Gamma(name="λ", alpha=0.1, beta=0.1)
π = pm.Beta(name="π", alpha=0.1, beta=0.1)
cnc = ContNonContract(
name="cnc",
lam=λ,
p=π,
T=T,
observed=prior_data
)
trace = pm.sample(draws=1000, chains=1, tune=500)
Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
---------------------------------------------------------------------------
SamplingError Traceback (most recent call last)
Cell In[5], line 14
4 π = pm.Beta(name="π", alpha=0.1, beta=0.1)
6 cnc = ContNonContract(
7 name="cnc",
8 lam=λ,
(...)
11 observed=prior_data
12 )
---> 14 trace = pm.sample(draws=1000, chains=1, tune=500)
File ~/miniforge3/envs/pymmmc_env/lib/python3.8/site-packages/pymc/sampling/mcmc.py:619, in sample(draws, tune, chains, cores, random_seed, progressbar, step, nuts_sampler, initvals, init, jitter_max_retries, n_init, trace, discard_tuned_samples, compute_convergence_checks, keep_warning_stat, return_inferencedata, idata_kwargs, nuts_sampler_kwargs, callback, mp_ctx, model, **kwargs)
617 ip: Dict[str, np.ndarray]
618 for ip in initial_points:
--> 619 model.check_start_vals(ip)
620 _check_start_shape(model, ip)
622 # Create trace backends for each chain
File ~/miniforge3/envs/pymmmc_env/lib/python3.8/site-packages/pymc/model.py:1779, in Model.check_start_vals(self, start)
1776 initial_eval = self.point_logps(point=elem)
1778 if not all(np.isfinite(v) for v in initial_eval.values()):
-> 1779 raise SamplingError(
1780 "Initial evaluation of model at starting point failed!\n"
1781 f"Starting values:\n{elem}\n\n"
1782 f"Initial evaluation results:\n{initial_eval}"
1783 )
SamplingError: Initial evaluation of model at starting point failed!
Starting values:
{'λ_log__': array(0.16243669), 'π_logodds__': array(0.251218)}
Initial evaluation results:
{'λ': -2.58, 'π': -3.12, 'cnc': -inf}
_ = az.plot_posterior(trace, ref_val=[lam, p])
plt.tight_layout()
prior_data
array([[7.47907972, 5. ],
[9.73741477, 6. ],
[3.98171609, 3. ],
...,
[3.86405931, 3. ],
[3.55657266, 4. ],
[9.70014652, 3. ]])