1
resposta

[Sugestão] Desafio

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.dummy import DummyClassifier
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt

# Carregar a base de dados
df = pd.read_csv('churn.csv')

# Separar as features e o alvo
X = df.drop('churn', axis=1)
y = df['churn']

# Divisão estratificada
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# Conferindo as proporções
proporcao_original = y.value_counts(normalize=True)
proporcao_treino = y_train.value_counts(normalize=True)
proporcao_teste = y_test.value_counts(normalize=True)

# Modelo de base
dummy = DummyClassifier(strategy='most_frequent')
dummy.fit(X_train, y_train)
score_dummy = dummy.score(X_test, y_test)

# Árvore de decisão
tree = DecisionTreeClassifier(max_depth=4, random_state=42)
tree.fit(X_train, y_train)
score_tree = tree.score(X_test, y_test)

# Visualização da árvore
def plotar_arvore():
    plt.figure(figsize=(20,10))
    plot_tree(tree, feature_names=X.columns, class_names=['Não Churn', 'Churn'], filled=True)
    plt.show()

# Resultados
(proporcao_original, proporcao_treino, proporcao_teste, score_dummy, score_tree, plotar_arvore())

Projeto Churn - Execução Completa

  1. Proporção de churn nos conjuntos

Conjunto original: 79,6% não churn, 20,4% churn

Treinamento: 79,6% não churn, 20,4% churn

Teste: 79,7% não churn, 20,3% churn

A estratificação funcionou perfeitamente!

  1. Modelo de base (DummyClassifier) Acurácia no teste: 0,7965 (79,65%)
  2. Árvore de decisão (max_depth=4) Acurácia no teste: 0,8515 (85,15%)
  3. Visualização da árvore

O gráfico da árvore de decisão foi exibido na interface. Ele mostra as principais regras de decisão do modelo.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

(churn
 0    0.7963
 1    0.2037
 Name: proportion, dtype: float64,
 churn
 0    0.79625
 1    0.20375
 Name: proportion, dtype: float64,
 churn
 0    0.7965
 1    0.2035
 Name: proportion, dtype: float64,
 0.7965,
 0.8515,
 None)
1 resposta

Bom dia, Mauro! Como está?

Incrível! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Notei que você utilizou o train_test_split para garantir a proporcionalidade das classes, aplicou de forma eficaz o DummyClassifier como um modelo de base para comparação e compreendeu a importância da árvore de decisão com max_depth para evitar overfitting e facilitar a interpretação.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!