コード例 #1
0
 def test_alive_probs(self, bbgb_params):
     sim_data = beta_geometric_beta_binom_model(N=6, size=50000, **bbgb_params)
     assert (np.abs(sim_data.loc[(sim_data['frequency'] == 0) & (sim_data['recency'] == 0),
                                 'alive'].mean() - 0.11) < 0.01)
     assert (np.abs(sim_data.loc[(sim_data['frequency'] == 2) & (sim_data['recency'] == 4),
                                 'alive'].mean() - 0.59) < 0.01)
     assert (np.abs(sim_data.loc[(sim_data['frequency'] == 6) & (sim_data['recency'] == 6),
                                 'alive'].mean() - 0.93) < 0.01)
コード例 #2
0
    def test_params_same_from_sim_data(self, bbgb_params):
        sim_data = beta_geometric_beta_binom_model(N=6, size=100000, **bbgb_params)
        bbtf = estimation.BetaGeoBetaBinomFitter()
        grouped_data = sim_data.groupby(['frequency', 'recency', 'n_periods'])['customer_id'].count()
        grouped_data = grouped_data.reset_index().rename(columns={'customer_id': 'weights'})
        bbtf.fit(grouped_data['frequency'],
                 grouped_data['recency'],
                 grouped_data['n_periods'],
                 grouped_data['weights'])

        npt.assert_allclose(
            np.asarray(list(bbgb_params.values())).astype(float),
            np.asarray(bbtf._unload_params('alpha', 'beta', 'gamma', 'delta')).astype(float),
            atol=0.1, rtol=1e-2)
コード例 #3
0
 def test_params_same_from_sim_data(self):
     sim_data = beta_geometric_beta_binom_model(N=6,
                                                size=100000,
                                                **bbgb_params)
     bbtf = estimation.BetaGeoBetaBinomFitter()
     grouped_data = sim_data.groupby(['frequency', 'recency',
                                      'n'])['customer_id'].count()
     grouped_data = grouped_data.reset_index().rename(
         columns={'customer_id': 'n_custs'})
     bbtf.fit(grouped_data['frequency'], grouped_data['recency'],
              grouped_data['n'], grouped_data['n_custs'])
     assert (
         (np.array(list(bbgb_params.values())) -
          np.array(bbtf._unload_params('alpha', 'beta', 'gamma', 'delta')))
         < 0.1).all()
コード例 #4
0
    def test_params_same_from_sim_data(self, bbgb_params):
        sim_data = beta_geometric_beta_binom_model(N=6,
                                                   size=100000,
                                                   **bbgb_params)
        bbtf = BetaGeoBetaBinomFitter()
        grouped_data = sim_data.groupby(["frequency", "recency",
                                         "n_periods"])["customer_id"].count()
        grouped_data = grouped_data.reset_index().rename(
            columns={"customer_id": "weights"})
        bbtf.fit(grouped_data["frequency"], grouped_data["recency"],
                 grouped_data["n_periods"], grouped_data["weights"])

        npt.assert_allclose(
            np.asarray(list(bbgb_params.values())).astype(float),
            np.asarray(bbtf._unload_params("alpha", "beta", "gamma",
                                           "delta")).astype(float),
            atol=0.1,
            rtol=1e-2,
        )
コード例 #5
0
 def test_hitting_max(self, bbgb_params):
     sim_data = beta_geometric_beta_binom_model(N=6, size=5000, **bbgb_params)
     assert sim_data['frequency'].max() == 6
     assert sim_data['recency'].max() == 6
コード例 #6
0
 def test_positivity(self, bbgb_params):
     sim_data = beta_geometric_beta_binom_model(N=6, size=5000, **bbgb_params)
     assert (sim_data['frequency'] >= 0).all()
     assert (sim_data['recency'] >= 0).all()