Como saber a probabilidade de um cliente voltar a comprar?
- Tessera Analysis
- 25 de abr. de 2023
- 2 min de leitura
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
Коментарі