Olá, Breno! Como vai?
A solução que você recebeu está correta e descreve um método comum para determinar o max_depth ideal para uma árvore de decisão.
A ideia é evitar o overfitting, que ocorre quando o modelo se ajusta demais aos dados de treinamento, capturando ruídos e padrões que não se generalizam bem para dados novos.
Para encontrar o max_depth ótimo, você pode seguir o procedimento de validação cruzada. Aqui está um exemplo prático de como você pode implementá-lo usando a biblioteca scikit-learn:
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
import numpy as np
# Definindo uma lista de profundidades para testar
depths = range(1, 20)
# Lista para armazenar os scores de validação cruzada
cv_scores = []
# Loop para calcular o score de validação cruzada para cada profundidade
for depth in depths:
model = DecisionTreeClassifier(max_depth=depth, random_state=5)
scores = cross_val_score(model, x_treino, y_treino, cv=5, scoring='accuracy')
cv_scores.append(scores.mean())
# Encontrando a profundidade com o melhor score
optimal_depth = depths[np.argmax(cv_scores)]
print(f'O max_depth ótimo é: {optimal_depth}')
Esse código testa diferentes valores de max_depth e usa validação cruzada para avaliar o desempenho do modelo em cada caso. O max_depth que proporciona a melhor média de acurácia nos conjuntos de validação cruzada é considerado o mais adequado.
O fato de você ter encontrado max_depth = 5 como ponto ótimo faz sentido, já que esse valor pode representar um bom equilíbrio entre complexidade e capacidade de generalização do modelo.
Espero ter ajudado e fico à disposição se precisar.
Abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado