El procesamiento de datos para entrenar un árbol de decisión implica preparar tu dataset de forma que el algoritmo pueda aprender patrones de manera efectiva. Aunque los árboles de decisión son muy flexibles (no requieren escalado de variables, por ejemplo), sí necesitan ciertos pasos clave para funcionar correctamente.
✅ Pasos de Procesamiento de Datos para Árbol de Decisión (Clasificación o Regresión)
1. Separar variables predictoras y objetivo
X = df.drop('target', axis=1) # variables predictoras
y = df['target'] # variable objetivo
2. Codificar variables categóricas
Los árboles requieren valores numéricos.
Opción A: Label Encoding (útil si hay orden implícito o pocas categorías)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
X['transmision'] = le.fit_transform(X['transmision'])
Opción B: One-Hot Encoding (útil para categorías sin orden)
X = pd.get_dummies(X, columns=['marca', 'modelo'])
3. Manejo de valores nulos
Los árboles no manejan valores faltantes por sí solos.
X = X.fillna(X.median()) # o usar X.dropna() si es apropiado
4. División de datos en entrenamiento y prueba
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
5. (Opcional) Balancear clases si es clasificación
Si tienes un problema de clasificación desbalanceada:
from sklearn.utils import resample
# Combinar X e y
df_train = pd.concat([X_train, y_train], axis=1)
minority = df_train[df_train['target'] == 'clase_rara']
majority = df_train[df_train['target'] == 'clase_común']
minority_upsampled = resample(minority,
replace=True,
n_samples=len(majority),
random_state=42)
df_balanced = pd.concat([majority, minority_upsampled])
X_train = df_balanced.drop('target', axis=1)
y_train = df_balanced['target']
6. Entrenamiento del árbol
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=5, random_state=42)
clf.fit(X_train, y_train)
7. Evaluación
from sklearn.metrics import classification_report
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
8. (Opcional) Visualizar el árbol
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(16, 8))
plot_tree(clf, feature_names=X.columns, class_names=clf.classes_, filled=True)
plt.show()