# import theano from pymc3.math import exp, log class ParetoNBD(pm.Continuous): """ Custom distribution class for Pareto/NBD likelihood. """ def __init__(self, lambda_, mu, *args, **kwargs): super(ParetoNBD, self).__init__(*args, **kwargs) self.lambda_ = lambda_ self.mu = mu def logp(self, x, t_x, T): """ Loglikelihood function for and indvidual customer's purchasing rate \lambda and lifetime \mu given their frequency, recency and time since first purchase. """ log_lambda = log(self.lambda_) log_mu = log(self.mu) mu_plus_lambda = self.lambda_ + self.mu log_mu_plus_lambda = log(mu_plus_lambda) p_1 = x * log_lambda + log_mu - log_mu_plus_lambda - t_x * mu_plus_lambda p_2 = (x + 1) * log_lambda - log_mu_plus_lambda - T * mu_plus_lambda return log(exp(p_1) + exp(p_2))
This is a custom distribution I have been using from this notebook.
I am running into issues when I try to run this piece of work with a different dataset. I have some nan’s in
mu when sampling and that is causing the following errors.
The derivative of RV `lambda_log__`.ravel() is zero. The derivative of RV `lambda_log__`.ravel() is zero. The derivative of RV `beta_log__`.ravel() is zero. The derivative of RV `s_log__`.ravel() is zero. The derivative of RV `alpha_log__`.ravel() is zero. The derivative of RV `r_log__`.ravel() is zero.
A couple of questions:
- How can I debug why some of my mu values are nan? and is there a way to overcome that?
- Is there a way for me to use logsumexp for
log(exp(p_1) + exp(p_2))?
Help is greatly appreciated!!