Esempio n. 1
0
def cdnow_customers():
    return load_cdnow()
Esempio n. 2
0
import os
import pandas as pd
import pytest

import matplotlib
matplotlib.use('AGG')  # use a non-interactive backend
from matplotlib import pyplot as plt

from lifetimes import plotting
from lifetimes import BetaGeoFitter, ParetoNBDFitter, ModifiedBetaGeoFitter
from lifetimes.datasets import load_cdnow, load_transaction_data
from lifetimes import utils

bgf = BetaGeoFitter()
cd_data = load_cdnow()
bgf.fit(cd_data['frequency'],
        cd_data['recency'],
        cd_data['T'],
        iterative_fitting=1)


@pytest.mark.plottest
class TestPlotting():
    @pytest.mark.mpl_image_compare(tolerance=30)
    def test_plot_period_transactions(self):
        plt.figure()
        plotting.plot_period_transactions(bgf)
        return plt.gcf()

    @pytest.mark.mpl_image_compare(tolerance=30)
    def test_plot_period_transactions_parento(self):
Esempio n. 3
0
from __future__ import print_function

import numpy as np
import pandas as pd
import numpy.testing as npt

import lifetimes.estimation as estimation
from lifetimes.datasets import load_cdnow, load_summary_data_with_monetary_value

cdnow_customers = load_cdnow()
cdnow_customers_with_monetary_value = load_summary_data_with_monetary_value()

class TestGammaGammaFitter():

    def test_params_out_is_close_to_Hardie_paper(self):
        ggf = estimation.GammaGammaFitter()
        ggf.fit(
            cdnow_customers_with_monetary_value['frequency'],
            cdnow_customers_with_monetary_value['monetary_value'],
            iterative_fitting=3
        )
        expected = np.array([6.25, 3.74, 15.44])
        npt.assert_array_almost_equal(expected, np.array(ggf._unload_params('p', 'q', 'v')), decimal=2)


class TestParetoNBDFitter():

    def test_overflow_error(self):
         
        ptf = estimation.ParetoNBDFitter()
        params = np.array([10.465, 7.98565181e-03, 3.0516, 2.820])
Esempio n. 4
0
import os
import pandas as pd
import pytest

import matplotlib
matplotlib.use('AGG') # use a non-interactive backend
from matplotlib import pyplot as plt

from lifetimes import plotting
from lifetimes import BetaGeoFitter, ParetoNBDFitter, ModifiedBetaGeoFitter
from lifetimes.datasets import load_cdnow, load_transaction_data
from lifetimes import utils

bgf = BetaGeoFitter()
cd_data = load_cdnow()
bgf.fit(cd_data['frequency'], cd_data['recency'], cd_data['T'], iterative_fitting=1)

@pytest.mark.plottest
class TestPlotting():
    
    @pytest.mark.mpl_image_compare(tolerance=30)
    def test_plot_period_transactions(self):
        plt.figure()
        plotting.plot_period_transactions(bgf)
        return plt.gcf()

    @pytest.mark.mpl_image_compare(tolerance=30)
    def test_plot_period_transactions_parento(self):
        pnbd = ParetoNBDFitter()
        pnbd.fit(cd_data['frequency'], cd_data['recency'], cd_data['T'], iterative_fitting=1)
        
Esempio n. 5
0
from __future__ import print_function

import numpy as np
import pandas as pd
import numpy.testing as npt

import lifetimes.estimation as estimation
import lifetimes.utils as utils
from lifetimes.datasets import load_cdnow, load_summary_data_with_monetary_value, load_donations

cdnow_customers = load_cdnow()
cdnow_customers_with_monetary_value = load_summary_data_with_monetary_value()
donations = load_donations()

class TestBetaGeoBetaBinomFitter():

    def test_params_out_is_close_to_Hardie_paper(self):

        bbtf = estimation.BetaGeoBetaBinomFitter()
        bbtf.fit(
            donations['frequency'],
            donations['recency'],
            donations['n'],
            donations['n_custs'],
        )
        expected = np.array([1.204, 0.750, 0.657, 2.783])
        npt.assert_array_almost_equal(expected, np.array(bbtf._unload_params('alpha','beta','gamma','delta')),
                                      decimal=2)

    def test_prob_alive_is_close_to_Hardie_paper_table_6(self):
        """Table 6: P(Alive in 2002) as a Function of Recency and Frequency"""
Esempio n. 6
0
'''
Created on 22 oct. 2015

@author: mrousseau - toto
'''
from lifetimes.datasets import load_cdnow
from lifetimes.estimation import BetaGeoFitter, GammaGammaFitter, ParetoNBDFitter
data = load_cdnow(index_col=[0])
print data.head()
print type(data) 
from scikits.recommenders.knn import UserBasedRecommender

bgf = ParetoNBDFitter(penalizer_coef=0.0)
bgf.fit(data['frequency'], data['recency'], data['T'])
print bgf
print bgf.conditional_expected_number_of_purchases_up_to_time(1,2,45,90)
print bgf.conditional_probability_alive(2,45,90)

from lifetimes.plotting import plot_frequency_recency_matrix
plot_frequency_recency_matrix(bgf)

#from matplotlib import pyplot as plt
#plt.show()

#from lifetimes.plotting import plot_probability_alive_matrix
#plot_probability_alive_matrix(bgf)


#plt.show()

t = 1
Esempio n. 7
0
def cdnow_customers():
    return load_cdnow()