Prever churn com regressão logística

Machine Learning para Marketing em Python

Karolis Urbonas

Head of Analytics & Science, Amazon

Introdução à regressão logística

  • Modelo de classificação estatística para respostas binárias
  • Modela o log-odds da probabilidade do alvo
  • Assume relação linear entre o log-odds do alvo e os preditores
  • Retorna coeficientes e probabilidade de previsão

Modelo de Regressão Logística

Machine Learning para Marketing em Python

Etapas de modelagem

  1. Dividir dados em treino e teste
  2. Inicializar o modelo
  3. Ajustar o modelo nos dados de treino
  4. Prever valores nos dados de teste
  5. Medir o desempenho no teste
Machine Learning para Marketing em Python

Ajustando o modelo

Importar o classificador Logistic Regression

from sklearn.linear_model import LogisticRegression

Inicializar a instância de Logistic Regression

logreg = LogisticRegression()

Ajustar o modelo nos dados de treino

logreg.fit(train_X, train_Y)
Machine Learning para Marketing em Python

Métricas de desempenho do modelo

Métricas principais:

  • Acurácia — % de rótulos previstos corretamente (Churn e não Churn)
  • Precisão — % das previsões da classe positiva do modelo (aqui, previstas como Churn) que estão corretas
  • Recall — % do total de amostras da classe positiva (todos os clientes que churnaram) previstas corretamente
Machine Learning para Marketing em Python

Medindo a acurácia do modelo

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 para Marketing em Python

Medindo precisão e recall

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 para Marketing em Python

Regularização

  • Introduz um coeficiente de penalização na fase de construção do modelo
  • Combate overfitting (quando padrões são "memorizados pelo modelo")
  • Algumas técnicas também fazem seleção de variáveis, ex.: L1
  • Torna o modelo mais generalizável para novas amostras
Machine Learning para Marketing em Python

Regularização L1 e seleção de variáveis

  • LogisticRegression do sklearn faz regularização L2 por padrão
  • A regularização L1 (LASSO) pode ser definida explicitamente e realiza seleção de variáveis, zerando alguns coeficientes do modelo.
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(penalty='l1', C=0.1, solver='liblinear')
logreg.fit(train_X, train_Y)
  • O parâmetro C precisa ser ajustado para achar o valor ideal
Machine Learning para Marketing em Python

Ajustando a regularização 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 para Marketing em Python

Escolhendo o valor ideal de C

Ajuste do parâmetro C na regularização L1

Machine Learning para Marketing em Python

Escolhendo o valor ideal de C

Ajuste do parâmetro C na regularização L1

Machine Learning para Marketing em Python

Vamos rodar alguns modelos de regressão logística!

Machine Learning para Marketing em Python

Preparing Video For Download...