top of page

Como saber a probabilidade de um cliente voltar a comprar?

CASE: prever a probabilidade de clientes de uma loja virtual voltar a comprar

Método: Regressão Logística


Base de dados: informações dos clientes de uma loja virtual, incluindo informações demográficas (idade, gênero, estado civil, etc.), dados de compra anterior (valor gasto, data da última compra, etc.) e se o cliente voltou a comprar ou não.


Para simular esse exemplo, vou criar alguns dados fictícios. Vamos supor que temos informações de 1000 clientes, sendo que 500 deles voltaram a comprar e 500 não voltaram:


Código Python

import pandas as pd

import numpy as np


np.random.seed(42)


# Criando dados fictícios

idade = np.random.normal(35, 10, 1000)

genero = np.random.choice(['Masculino', 'Feminino'], size=1000)

estado_civil = np.random.choice(['Solteiro(a)', 'Casado(a)', 'Divorciado(a)', 'Viúvo(a)'], size=1000)

valor_gasto = np.random.normal(100, 50, 1000)

dias_ultima_compra = np.random.randint(1, 365, 1000)

voltou_a_comprar = np.random.choice([0, 1], size=1000)


dados = pd.DataFrame({'idade': idade, 'genero': genero, 'estado_civil': estado_civil,

'valor_gasto': valor_gasto, 'dias_ultima_compra': dias_ultima_compra,

'voltou_a_comprar': voltou_a_comprar})


Agora, vamos analisar os dados:


Código Python

dados.head()


Resultado:


Vamos usar essas informações para construir um modelo de regressão logística que prevê se um cliente voltou a comprar ou não. Vamos começar fazendo algumas transformações nos dados, como converter as variáveis categóricas em variáveis dummy:


Código Python

# Convertendo as variáveis categóricas em variáveis dummy

dados = pd.get_dummies(dados, columns=['genero', 'estado_civil'])


# Separando os dados em treino e teste

from sklearn.model_selection import train_test_split


X = dados.drop('voltou_a_comprar', axis=1)

y = dados['voltou_a_comprar']


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


Agora, podemos escalar as variáveis numéricas para que elas tenham média zero e desvio padrão igual a um, o que pode melhorar a performance do modelo:


Código Python

# Escalando as variáveis numéricas

from sklearn.preprocessing import StandardScaler


scaler = StandardScaler()

numeric_cols = ['idade', 'valor_gasto', 'dias_ultima_compra']

X_train[numeric_cols] = scaler.fit_transform(X_train[numeric_cols])

X_test[numeric_cols] = scaler.transform(X_test[numeric_cols])


Com os dados preparados, podemos treinar o modelo de regressão logística:


Código Python

# Treinando o modelo de regressão logística

from sklearn.linear_model import LogisticRegression


model = LogisticRegression(random_state=42)

model.fit(X_train, y_train)


Agora que o modelo está treinado, podemos avaliar sua performance no conjunto de teste:


Código Python

# Avaliando a performance do modelo no conjunto de teste

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score


y_pred = model.predict(X_test)


print("Acurácia: {:.2f}".format(accuracy_score(y_test, y_pred)))

print("Precisão: {:.2f}".format(precision_score(y_test, y_pred)))

print("Recall: {:.2f}".format(recall_score(y_test, y_pred)))

print("F1-score: {:.2f}".format(f1_score(y_test, y_pred)))


Resultado

Acurácia: 0.54

Precisão: 0.64

Recall: 0.27

F1-score: 0.38


Interpretação

· Acurácia: representa a proporção de amostras que foram classificadas corretamente pelo modelo. No caso apresentado, a acurácia foi de 0.54, o que significa que o modelo acertou cerca de 54% das classificações.


· Precisão: representa a proporção de amostras classificadas como positivas (no caso, clientes que voltaram a comprar) que são realmente positivas. No caso apresentado, a precisão foi de 0.64, o que significa que, das amostras que foram classificadas como positivas pelo modelo, cerca de 64% realmente voltaram a comprar.


· Recall: representa a proporção de amostras positivas que foram corretamente identificadas pelo modelo. No caso apresentado, o recall foi de 0.27, o que significa que o modelo identificou corretamente cerca de 27% das amostras positivas (clientes que voltaram a comprar).


· F1-score: é uma medida que combina a precisão e o recall, fornecendo uma medida única de desempenho do modelo. No caso apresentado, o F1-score foi de 0.38, o que indica que o modelo teve um desempenho geral relativamente baixo.


Conclusão

Em resumo, as métricas indicam que o modelo não teve um desempenho muito bom na tarefa de classificação de clientes que voltaram a comprar, pois obteve baixa acurácia e recall, e uma precisão moderada. É possível que o modelo precise ser ajustado e melhorado para obter resultados mais satisfatórios.



Por Giovanni Barillari e Lucas Pellegrino,

Especialistas em Valuation e Business Intelligence




Коментарі


bottom of page