Pregătirea datelor pentru predicția achizițiilor

Machine Learning pentru Marketing în Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Regresia - predicția variabilelor continue

  • Regresie - tip de învățare supervizată
  • Variabilă țintă - continuă sau de tip numărare
  • Cea mai simplă variantă - regresia liniară
  • Datele de numărare (ex. numărul de zile active) sunt uneori mai bine prezise prin regresia Poisson sau Binomială negativă
Machine Learning pentru Marketing în Python

Caracteristici de recență, frecvență și valoare monetară (RFM)

  • RFM - abordare care stă la baza multor metode de inginerie a caracteristicilor
  • Recența - timpul de la ultima tranzacție a clientului
  • Frecvența - numărul de achiziții în perioada observată
  • Valoarea monetară - suma totală cheltuită în perioada observată
Machine Learning pentru Marketing în Python

Explorarea distribuției vânzărilor pe luni

# Explore monthly distribution of observations
online.groupby(['InvoiceMonth']).size()
InvoiceMonth
2010-12    4893
2011-01    3580
2011-02    3648
2011-03    4764
2011-04    4148
2011-05    5018
2011-06    4669
2011-07    4610
2011-08    4744
2011-09    7189
2011-10    8808
2011-11    9513
dtype: int64
Machine Learning pentru Marketing în Python

Separarea datelor de caracteristici

# Exclude target variable
online_X = online[online['InvoiceMonth']!='2011-11']

# Define snapshot date NOW = dt.datetime(2011,11,1)
# Build the features features = online_X.groupby('CustomerID').agg({ 'InvoiceDate': lambda x: (NOW - x.max()).days, 'InvoiceNo': pd.Series.nunique, 'TotalSum': np.sum, 'Quantity': ['mean', 'sum'] }).reset_index()
features.columns = ['CustomerID', 'recency', 'frequency', 'monetary', 'quantity_avg', 'quantity_total']
Machine Learning pentru Marketing în Python

Revizuirea caracteristicilor

print(features.head())

Primele rânduri din setul de caracteristici

Machine Learning pentru Marketing în Python

Calcularea variabilei țintă

# Build pivot table with monthly transactions per customer
cust_month_tx = pd.pivot_table(data=online, index=['CustomerID'], 
                               values='InvoiceNo',
                               columns=['InvoiceMonth'],
                               aggfunc=pd.Series.nunique, fill_value=0)
print(cust_month_tx.head())

Tabel pivot lunar pe client

Machine Learning pentru Marketing în Python

Finalizarea pregătirii datelor și împărțirea în seturi de antrenare/testare

# Store identifier and target variable column names
custid = ['CustomerID']
target = ['2011-11']

# Extract target variable Y = cust_month_tx[target]
# Extract feature column names cols = [col for col in features.columns if col not in custid]
# Store features X = features[cols]
Machine Learning pentru Marketing în Python

Împărțirea datelor în seturi de antrenare și testare

# Randomly split 25% of the data to testing
from sklearn.model_selection import train_test_split
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, 
                                                    test_size=0.25, 
                                                    random_state=99)

# Print shapes of the datasets print(train_X.shape, train_Y.shape, test_X.shape, test_Y.shape)
(2529, 5) (2529, 1) (843, 5) (843, 1)
Machine Learning pentru Marketing în Python

Să lucrăm la exercițiile de pregătire a datelor!

Machine Learning pentru Marketing în Python

Preparing Video For Download...