Predikce odchodu pomocí logistické regrese

Machine Learning for Marketing in Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Úvod do logistické regrese

  • Statistický klasifikační model pro binární odezvy
  • Modeluje log-pravděpodobnost cílové proměnné
  • Předpokládá lineární vztah mezi log-pravděpodobností a prediktory
  • Vrací koeficienty a pravděpodobnost predikce

Model logistické regrese

Machine Learning for Marketing in Python

Kroky modelování

  1. Rozdělte data na trénovací a testovací
  2. Inicializujte model
  3. Natrénujte model na trénovacích datech
  4. Predikujte hodnoty na testovacích datech
  5. Vyhodnoťte výkon modelu na testovacích datech
Machine Learning for Marketing in Python

Trénování modelu

Import klasifikátoru logistické regrese

from sklearn.linear_model import LogisticRegression

Inicializace instance logistické regrese

logreg = LogisticRegression()

Natrénování modelu na trénovacích datech

logreg.fit(train_X, train_Y)
Machine Learning for Marketing in Python

Metriky výkonu modelu

Klíčové metriky:

  • Přesnost (Accuracy) – % správně predikovaných štítků (odchod i neodchod)
  • Přesnost (Precision) – % pozitivních predikcí modelu (odchod), které byly správné
  • Úplnost (Recall) – % skutečně pozitivních vzorků (všichni odchozí zákazníci), které byly správně klasifikovány
Machine Learning for Marketing in Python

Měření přesnosti modelu

from sklearn.metrics import accuracy_score

pred_train_Y = logreg.predict(train_X) pred_test_Y = logreg.predict(test_X)
train_accuracy = accuracy_score(train_Y, pred_train_Y) test_accuracy = accuracy_score(test_Y, pred_test_Y)
print('Training accuracy:', round(train_accuracy,4)) print('Test accuracy:', round(test_accuracy, 4))
Training accuracy: 0.8108
Test accuracy: 0.8009
Machine Learning for Marketing in Python

Měření přesnosti a úplnosti

from sklearn.metrics import precision_score, recall_score

train_precision = round(precision_score(train_Y, pred_train_Y), 4) test_precision = round(precision_score(test_Y, pred_test_Y), 4)
train_recall = round(recall_score(train_Y, pred_train_Y), 4) test_recall = round(recall_score(test_Y, pred_test_Y), 4)
print('Training precision: {}, Training recall: {}'.format(train_precision, train_recall)) print('Test precision: {}, Test recall: {}'.format(train_recall, test_recall))
Training precision: 0.6725, Training recall: 0.5736
Test precision: 0.5736, Test recall: 0.4835
Machine Learning for Marketing in Python

Regularizace

  • Zavádí penalizační koeficient ve fázi tvorby modelu
  • Řeší přetrénování (když si model „zapamatuje" vzory)
  • Některé techniky regularizace provádějí i výběr příznaků, např. L1
  • Zvyšuje schopnost modelu generalizovat na nová data
Machine Learning for Marketing in Python

Regularizace L1 a výběr příznaků

  • LogisticRegression ze sklearn používá ve výchozím nastavení regularizaci L2
  • Regularizaci L1 (LASSO) lze vyvolat explicitně; provádí výběr příznaků tím, že některé koeficienty modelu zkrátí na nulu.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • Parametr C je nutné ladit pro nalezení optimální hodnoty
Machine Learning for Marketing in Python

Ladění regularizace L1

C = [1, .5, .25, .1, .05, .025, .01, .005, .0025]
l1_metrics = np.zeros((len(C), 5))
l1_metrics[:,0] = C

for index in range(0, len(C)): logreg = LogisticRegression(penalty='l1', C=C[index], solver='liblinear') logreg.fit(train_X, train_Y) pred_test_Y = logreg.predict(test_X)
l1_metrics[index,1] = np.count_nonzero(logreg.coef_) l1_metrics[index,2] = accuracy_score(test_Y, pred_test_Y) l1_metrics[index,3] = precision_score(test_Y, pred_test_Y) l1_metrics[index,4] = recall_score(test_Y, pred_test_Y)
col_names = ['C','Non-Zero Coeffs','Accuracy','Precision','Recall'] print(pd.DataFrame(l1_metrics, columns=col_names)
Machine Learning for Marketing in Python

Výběr optimální hodnoty C

Ladění parametru C regularizace L1

Machine Learning for Marketing in Python

Výběr optimální hodnoty C

Ladění parametru C regularizace L1

Machine Learning for Marketing in Python

Pojďme si procvičit logistickou regresi!

Machine Learning for Marketing in Python

Preparing Video For Download...