Árboles de Decisión Aplicado a la Educación Superior
Árboles de Decisión Aplicado a la Educación Superior.ipynb
Árboles de
Decisión Aplicado a la Educación Superior
1. Entendiendo los
Árboles de Decisión
Un Árbol de
Decisión es un modelo predictivo que se utiliza para representar decisiones y
sus posibles consecuencias. Es como un diagrama de flujo donde cada nodo
interno representa una "pregunta" sobre un atributo, cada rama
representa la respuesta a esa pregunta, y cada nodo hoja representa una
predicción o resultado.
2. Características
de los Árboles de Decisión
Interpretación
sencilla:
Son fáciles de entender e interpretar, lo que los hace útiles en la toma de
decisiones.
Manejo de datos no
lineales:
Pueden capturar relaciones no lineales entre características.
Poco
preprocesamiento:
No requiere mucho preprocesamiento de los datos (normalización, escalado,
etc.).
Manejo de datos
mixtos:
Pueden manejar tanto datos numéricos como categóricos.
3. Aplicaciones en
Educación Superior
En el contexto de
la educación superior, los Árboles de Decisión pueden aplicarse para:
Predecir el
rendimiento académico de los estudiantes.
Identificar
factores que contribuyen al éxito o fracaso académico.
Clasificar a los
estudiantes en diferentes grupos para intervenciones personalizadas.
4. Creando un
Conjunto de Datos Ficticios
Vamos a crear un
conjunto de datos ficticios que podría ser utilizado en un contexto educativo.
Imagina que queremos predecir si un estudiante va a aprobar o no un curso
basándonos en ciertos atributos.
Atributos:
Horas de estudio
por semana (horas_estudio): numérico.
Asistencia a
clases (asistencia): categórico (alta, media, baja).
Notas en trabajos
anteriores (nota_trabajos): numérico.
Participación en
clase (participación): categórico (activa, pasiva).
Objetivo:
Aprobar curso (aprobar):
binario (sí, no).
5. Generando el
Conjunto de Datos
Voy a generar un
conjunto de datos ficticios con estos atributos y lo guardaré en un archivo CSV
para que puedas descargarlo.
6. Script en
Python para Árboles de Decisión
Después de generar
el conjunto de datos, te proporcionaré un script en Python que puedes usar para
crear y entrenar un Árbol de Decisión con este conjunto de datos.
Primero,
generaremos el conjunto de datos.
Creó un conjunto
de datos ficticios para la aplicación de Árboles de Decisión en el contexto de
la educación superior. Puedes descargar el conjunto de datos desde el siguiente
enlace:
Descargar Conjunto
de Datos Ficticio datos_educacion_superior.csv
Ahora,
procederemos a desarrollar un script en Python para trabajar con estos datos y
construir un Árbol de Decisión.
Script en Python
para Árboles de Decisión
El siguiente
script realizará los siguientes pasos:
Cargar el conjunto
de datos.
Preprocesar los
datos (codificación de variables categóricas, división en conjunto de
entrenamiento y prueba).
Entrenar un Árbol
de Decisión.
Evaluar el modelo
con el conjunto de prueba.
Vamos a escribir y
explicar el código.
import pandas as pd
import numpy as np
# Semilla para reproducibilidad
np.random.seed(0)
# Generando datos ficticios
n = 100
# Número de estudiantes
# Características
horas_estudio = np.random.normal(5, 2, n).clip(0, 10) #
Horas de estudio, entre 0 y 10
asistencia = np.random.choice(['alta', 'media', 'baja'], n) #
Asistencia a clases
nota_trabajos = np.random.normal(75, 10, n).clip(0, 100) #
Notas en trabajos, entre 0 y 100
participacion = np.random.choice(['activa', 'pasiva'], n) #
Participación en clase
# Etiqueta: Aprobar curso
# Suponiendo que un estudiante aprueba si estudia
más de 4 horas, tiene buena asistencia, y tiene una nota mayor a 60
aprobar = (horas_estudio > 4) & (asistencia == 'alta') & (nota_trabajos > 60)
# Creando el DataFrame
data = pd.DataFrame({
'horas_estudio':
horas_estudio,
'asistencia':
asistencia,
'nota_trabajos':
nota_trabajos,
'participacion':
participacion,
'aprobar':
aprobar
})
# Guardando el conjunto de datos en un archivo CSV
csv_file_path = '/content/datos_educacion_superior.csv'
data.to_csv(csv_file_path, index=False)
csv_file_path #
Ruta del archivo para descargar
Resultado
'/mnt/data/datos_educacion_superior.csv'
Aquí tienes el
script en Python para entrenar un Árbol de Decisión con el conjunto de datos
que hemos creado:
import pandas as pd
from
sklearn.model_selection import
train_test_split
from
sklearn.tree import
DecisionTreeClassifier
from
sklearn.metrics import
accuracy_score
from
sklearn.preprocessing import
LabelEncoder
# Cargar datos
data = pd.read_csv('datos_educacion_superior.csv')
# Codificar variables categóricas
label_encoder = LabelEncoder()
data['asistencia']
= label_encoder.fit_transform(data['asistencia'])
data['participacion']
= label_encoder.fit_transform(data['participacion'])
# Separar características y etiqueta
X = data.drop('aprobar',
axis=1)
y = data['aprobar']
# Dividir en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size=0.3,
random_state=42)
# Crear y entrenar el modelo de Árbol de Decisión
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
# Realizar predicciones y evaluar
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Precisión del modelo: {accuracy:.2f}')
Resultado
Precisión del modelo: 1.00
Este script
realiza lo siguiente:
Carga los datos
del archivo CSV.
Codifica las
variables categóricas ('asistencia' y 'participación') en números para que
puedan ser procesadas por el algoritmo.
Divida los datos
en un conjunto de entrenamiento y otro de prueba.
Crea y entrena un
modelo de Árbol de Decisión con el conjunto de entrenamiento.
Evalúa el modelo
con el conjunto de prueba, mostrando la precisión (accuracy).
Imágenes y
Gráficos
Gráfico de un
Árbol de Decisión:
Este gráfico ilustra cómo se ve un Árbol de Decisión típico. Representa las
decisiones y sus posibles consecuencias.
Distribución de
Atributos: Podemos
mostrar gráficos de distribución para cada atributo (horas de estudio,
asistencia, notas en trabajos, y participación en clase) para entender cómo se
distribuyen en el conjunto de datos.
Matriz de
Confusión:
Una vez entrenado el modelo, un gráfico de matriz de confusión puede ayudar a
entender cómo el modelo está clasificando los casos de aprobación y no
aprobación.
Vamos a generar
estos gráficos basados en el conjunto de datos que creamos.
1. Gráfico de un
Árbol de Decisión
Primero, entrenaré
un modelo de Árbol de Decisión con el conjunto de datos y generaré una
visualización del árbol.
from
sklearn.preprocessing import
LabelEncoder
# Codificación de las variables categóricas
label_encoder_asistencia = LabelEncoder()
data['asistencia']
= label_encoder_asistencia.fit_transform(data['asistencia'])
label_encoder_participacion = LabelEncoder()
data['participacion']
= label_encoder_participacion.fit_transform(data['participacion'])
# Actualizando los datos para el modelo
X = data.drop('aprobar',
axis=1)
y = data['aprobar']
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size=0.3,
random_state=42)
# Entrenando el Árbol de Decisión nuevamente
clf = DecisionTreeClassifier(max_depth=3) #
Limitando la profundidad para facilitar la visualización
clf.fit(X_train, y_train)
# Visualización del Árbol de Decisión
plt.figure(figsize=(20,10))
plot_tree(clf, filled=True,
feature_names=X.columns, class_names=['No
Aprobar', 'Aprobar'], proportion=True)
plt.title('Árbol de
Decisión - Educación Superior')
plt.show()
Resultado
Aquí tienes la
visualización del Árbol de Decisión entrenado con nuestro conjunto de datos.
Este gráfico muestra cómo el modelo toma decisiones basándose en las diferentes
características (horas de estudio, asistencia, etc.) para predecir si un
estudiante aprobará o no.
2. Distribución de
Atributos
Luego, creará
gráficos para visualizar la distribución de cada atributo en el conjunto de
datos.
# Creando gráficos de distribución para cada
atributo
plt.figure(figsize=(10, 6))
sns.histplot(data['horas_estudio'], kde=True)
plt.title('Distribución
de Horas de Estudio')
plt.xlabel('Horas de
Estudio')
plt.ylabel('Frecuencia')
plt.show()
# Asistencia
plt.figure(figsize=(10, 6))
sns.countplot(x='asistencia',
data=data)
plt.title('Distribución
de Asistencia a Clases')
plt.xlabel('Asistencia')
plt.ylabel('Frecuencia')
plt.xticks(ticks=[0, 1, 2],
labels=label_encoder_asistencia.classes_)
plt.show()
# Nota en Trabajos
plt.figure(figsize=(10, 6))
sns.histplot(data['nota_trabajos'], kde=True)
plt.title('Distribución
de Notas en Trabajos')
plt.xlabel('Nota en
Trabajos')
plt.ylabel('Frecuencia')
plt.show()
# Participación en Clase
plt.figure(figsize=(10, 6))
sns.countplot(x='participacion',
data=data)
plt.title('Distribución
de Participación en Clase')
plt.xlabel('Participación')
plt.ylabel('Frecuencia')
plt.xticks(ticks=[0, 1],
labels=label_encoder_participacion.classes_)
plt.show()
Resultado
Aquí tienes los
gráficos que representan la distribución de cada uno de los atributos en
nuestro conjunto de datos:
Distribución de Horas de Estudio: Muestra cómo se distribuyen las horas de estudio entre los estudiantes.
Distribución de
Asistencia a Clases:
Representa la frecuencia de diferentes niveles de asistencia (alta, media,
baja).
Distribución de
Notas en Trabajos:
Ilustra cómo se distribuyen las notas de los trabajos entre los estudiantes.
Distribución de
Participación en Clase: Muestra la frecuencia de la participación activa y
pasiva en clase.
3. Matriz de
Confusión
Por último,
después de entrenar y evaluar el modelo, mostrará una matriz de confusión para
ilustrar cómo el modelo clasifica los casos.
# Generando y visualizando la matriz de confusión
# Realizando predicciones con el conjunto de prueba
y_pred = clf.predict(X_test)
# Creando la matriz de confusión
conf_mat = confusion_matrix(y_test, y_pred)
# Visualización de la matriz de confusión
plt.figure(figsize=(8, 6))
sns.heatmap(conf_mat, annot=True,
fmt='g', cmap='Blues')
plt.title('Matriz de
Confusión')
plt.xlabel('Predicciones')
plt.ylabel('Valores
Reales')
plt.xticks(ticks=[0.5, 1.5], labels=['No Aprobar', 'Aprobar'])
plt.yticks(ticks=[0.5, 1.5], labels=['No Aprobar', 'Aprobar'])
plt.show()
Resultado
La matriz de
confusión muestra cómo el modelo de Árbol de Decisión clasificó los casos de
aprobación y no aprobación en el conjunto de prueba. Las celdas diagonales
representan las predicciones correctas, mientras que las celdas fuera de la
diagonal indican las clasificaciones incorrectas.
Conclusiones y
Reflexiones
Interpretación de
Modelos:
La visualización del Árbol de Decisión demuestra cómo esta técnica es útil para
entender las decisiones basadas en datos, con una representación gráfica
intuitiva.
Importancia de los
Atributos:
Los gráficos de distribución muestran la variedad en los patrones de estudio y
comportamiento de los estudiantes. Esto destaca la importancia de considerar
múltiples factores al evaluar el rendimiento académico.
Precisión y
Limitaciones:
La matriz de confusión nos da una idea clara de la precisión del modelo y sus
limitaciones. Nos ayuda a identificar en qué casos el modelo es más fuerte y
dónde podría mejorar.
Aplicaciones en
Educación:
Este enfoque puede ser extremadamente útil en entornos educativos para
identificar estudiantes que podrían necesitar apoyo adicional, así como para
entender los factores que contribuyen más significativamente al éxito
académico.
Personalización del Aprendizaje: Estos métodos abren puertas hacia una educación más personalizada, permitiendo a los educadores y administradores adaptar sus métodos y recursos para satisfacer mejor las necesidades de sus estudiantes.





