Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
freq_multiplier = 1
transactions_summary = utils.summary_data_from_transaction_data(
cdnow_transactions, customer_id_col, datetime_col,
datetime_format=datetime_format, freq=freq,
freq_multiplier=freq_multiplier,
observation_period_end=observation_period_end)
transactions_summary = transactions_summary.reset_index()
model = BetaGeoFitter()
model.fit(transactions_summary['frequency'],
transactions_summary['recency'],
transactions_summary['T'])
df_cum = utils.expected_cumulative_transactions(
model, cdnow_transactions, datetime_col, customer_id_col, t,
datetime_format, freq, set_index_date=True,
freq_multiplier=freq_multiplier)
dates = ['1997-01-11', '1997-01-12', '1997-01-13', '1997-01-14']
actual_trans = [11, 12, 15, 19]
expected_trans = [10.67, 12.67, 14.87, 17.24]
date_index = df_cum.iloc[-4:].index.to_timestamp().astype(str)
actual = df_cum['actual'].iloc[-4:].values
predicted = df_cum['predicted'].iloc[-4:].values.round(2)
assert all(dates == date_index)
assert_allclose(actual, actual_trans)
assert_allclose(predicted, expected_trans, atol=1e-2)
observation_period_end = '19970930'
freq_multiplier = 7
transactions_summary = utils.summary_data_from_transaction_data(
cdnow_transactions, customer_id_col, datetime_col,
datetime_format=datetime_format, freq=freq, freq_multiplier=freq_multiplier,
observation_period_end=observation_period_end)
transactions_summary = transactions_summary.reset_index()
model = ParetoNBDFitter()
model.fit(transactions_summary['frequency'],
transactions_summary['recency'],
transactions_summary['T'])
df_cum = utils.expected_cumulative_transactions(
model, cdnow_transactions, datetime_col, customer_id_col, t,
datetime_format, freq, set_index_date=False, freq_multiplier=freq_multiplier)
return df_cum
def test_expected_cumulative_transactions_dedups_inside_a_time_period(fitted_bg, example_transaction_data):
by_week = utils.expected_cumulative_transactions(fitted_bg, example_transaction_data, 'date', 'id', 10, freq='W')
by_day = utils.expected_cumulative_transactions(fitted_bg, example_transaction_data, 'date', 'id', 10, freq='D')
assert (by_week['actual'] >= by_day['actual']).all()
def test_expected_cumulative_transactions_dedups_inside_a_time_period(fitted_bg, example_transaction_data):
by_week = utils.expected_cumulative_transactions(fitted_bg, example_transaction_data, 'date', 'id', 10, freq='W')
by_day = utils.expected_cumulative_transactions(fitted_bg, example_transaction_data, 'date', 'id', 10, freq='D')
assert (by_week['actual'] >= by_day['actual']).all()
ax: matplotlib.AxesSubplot, optional
Using user axes
kwargs
Passed into the pandas.DataFrame.plot command.
Returns
-------
axes: matplotlib.AxesSubplot
"""
from matplotlib import pyplot as plt
if ax is None:
ax = plt.subplot(111)
df_cum_transactions = expected_cumulative_transactions(
model,
transactions,
datetime_col,
customer_id_col,
t,
datetime_format=datetime_format,
freq=freq,
set_index_date=set_index_date,
)
# get incremental from cumulative transactions
df_cum_transactions = df_cum_transactions.apply(lambda x: x - x.shift(1))
ax = df_cum_transactions.plot(ax=ax, title=title, **kwargs)
if set_index_date:
x_vline = df_cum_transactions.index[int(t_cal)]
ax: matplotlib.AxesSubplot, optional
Using user axes
kwargs
Passed into the pandas.DataFrame.plot command.
Returns
-------
axes: matplotlib.AxesSubplot
"""
from matplotlib import pyplot as plt
if ax is None:
ax = plt.subplot(111)
df_cum_transactions = expected_cumulative_transactions(
model,
transactions,
datetime_col,
customer_id_col,
t,
datetime_format=datetime_format,
freq=freq,
set_index_date=set_index_date,
)
ax = df_cum_transactions.plot(ax=ax, title=title, **kwargs)
if set_index_date:
x_vline = df_cum_transactions.index[int(t_cal)]
xlabel = "date"
else: