I tried the following code from the lifetimes library, using a 1 million row dataset. I get the error "ConvergenceError: The model did not converge. Try adding a larger penalizer to see if that helps convergence." I havent set any penalizer.
bgf.fit(summary_cal_holdout['frequency_cal'],
summary_cal_holdout['recency_cal'],
summary_cal_holdout['T_cal'])
fun: -0.6687805030754939
hess_inv: array([[3.59401922e+00, 4.07817298e+00, 1.96553220e-04, 3.81178105e-01],
[4.07817298e+00, 7.68848347e+00, 2.57679876e-04, 3.33282620e+00],
[1.96553220e-04, 2.57679876e-04, 7.65922646e+01, 7.65930375e+01],
[3.81178107e-01, 3.33282620e+00, 7.65930375e+01, 1.05547305e+02]])
jac: array([ 5.54469203e-07, -1.18094006e-07, -6.14083829e-08, 6.21662541e-08])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 87
nit: 42
njev: 76
status: 2
success: False
x: array([-0.60365091, -1.75150201, 12.07528864, 14.80580897])
---------------------------------------------------------------------------
ConvergenceError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_28924\3528314986.py in <module>
----> 1 bgf.fit(summary_cal_holdout['frequency_cal'],
2 summary_cal_holdout['recency_cal'],
3 summary_cal_holdout['T_cal'])
~\anaconda3\lib\site-packages\lifetimes\fitters\beta_geo_fitter.py in fit(self, frequency, recency, T, weights, initial_params, verbose, tol, index, **kwargs)
135 scaled_T = T * self._scale
136
--> 137 log_params_, self._negative_log_likelihood_, self._hessian_ = self._fit(
138 (frequency, scaled_recency, scaled_T, weights, self.penalizer_coef),
139 initial_params,
~\anaconda3\lib\site-packages\lifetimes\fitters\__init__.py in _fit(self, minimizing_function_args, initial_params, params_size, disp, tol, bounds, **kwargs)
113 return output.x, output.fun, hessian_
114 print(output)
--> 115 raise ConvergenceError(
116 dedent(
117 """
ConvergenceError:
The model did not converge. Try adding a larger penalizer to see if that helps convergence.