Predicción Temprana del Rendimiento Aca- démico en Cursos Universitarios: Un enfoque en Cálculo 1 con Educational Data Mining y Learning Analytics Luis Pedro Cuéllar Pineda UNIVERSIDAD DEL VALLE DE GUATEMALA Facultad de Ingeniería Predicción Temprana del Rendimiento Académico en Cursos Universitarios: Un enfoque en Cálculo 1 con Educational Data Mining y Learning Analytics Trabajo de graduación en modalidad de tesis presentado por Luis Pedro Cuéllar Pineda para optar al grado académico de Licenciado en Ciencias de la Computación y TI Guatemala, 2023 UNIVERSIDAD DEL VALLE DE GUATEMALA Facultad de Ingeniería Predicción Temprana del Rendimiento Académico en Cursos Universitarios: Un enfoque en Cálculo 1 con Educational Data Mining y Learning Analytics Trabajo de graduación en modalidad de tesis presentado por Luis Pedro Cuéllar Pineda para optar al grado académico de Licenciado en Ciencias de la Computación y TI Guatemala, 2023 Vo.Bo.: (f) Carlos Ernesto Celada Correa Tribunal Examinador: (f) Carlos Ernesto Celada Correa (f) Douglas Leonel Barrios Gonzales (f) Luis Roberto Furlan Collver Fecha de aprobación: Guatemala, 21 de noviembre de 2023. Stamp Agradecimientos Durante el desarrollo del proyecto hubo varias personas que aportaron a que este fuera finalizado. Dentro esas personas quisiera resaltar y agrader a cuatro grupos de personas en específico. Primero, Lynette Garcia. Gracias Lynette por abrirme las puertas a su proyecto y permitirme aportar al mismo. Gracias por estar abierta a responder cualquier duda que iba surgiendo durante el desarrollo. Segundo, Douglas Barrios. Gracias Douglas por el constante apoyo y seguimiento durante, no solo el desarrollo de este proyecto sino que también en la carrera entera. Gracias por brindarme este tema para yo poder realizarlo. Gracias también por servir de intermediario cuando se requería hablar con otra gente. Tercero, Carlos Celada. Gracias Carlos por aceptar ser asesor de este proyecto. Por brindar ese apoyo para resolver cualquier duda que iba surgiendo. Por brindar recomendaciones a cualquier obstáculo con el que me topé en el desarrollo. También, por todas las insights que me ibas dando, no solo como profesional en el área, sino que también como catedrático. Cuarto, Silvia Pineda, Osberto Cuéllar y María Isabel Montoya. Gracias a todos ustedes por apoyar siempre, nunca dejar que se me pasara el hacer la tesis. El constante recordatorio que la tenía que hacer y terminar. Gracias por compartirme los ánimos cuando ya no tenía ganas de hacer nada. Gracias a estos cuatro grupos de personas, ya que sin ustedes, este trabajo no hubiera sido posible. Desde la idea, durante el desarrollo y hasta terminarlo. iii Índice Agradecimientos iii Índice de figuras vi Lista de cuadros viii Resumen ix 1. Introducción 1 2. Objetivos 3 2.1. Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Justificación 4 4. Marco teórico 5 4.1. Aspectos conceptuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.1.1. Inteligencia artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.1.2. Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.1.3. Ciencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.4. Educational Data Mining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.5. Learning Analytics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.1.6. Educational Warning System . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.1.7. Feature Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1.8. Selección de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.9. Métricas de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.2. Caso de éxito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2.1. Usando Learning Analytics para desarrollar un sistema de alerta temprana . 16 5. Metodología 18 5.1. Descripción general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.2. Herramientas utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.3. Primera etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.3.1. Pre-procesamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.3.2. Feature engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.3.3. Selección de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3.4. Escoger el mejor algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 iv 5.4. Segunda etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6. Resultados 46 6.1. Primera etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.2. Segunda etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7. Análisis de resultados 59 7.1. Primera etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.1.1. Primer análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.1.2. Segundo análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.2. Segunda etapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8. Conclusiones 63 9. Bibliografía 65 v Índice de figuras 4.1. Diagrama de qué es aprendizaje por transferencia [2] . . . . . . . . . . . . . . . . . . 6 4.2. Diagrama de qué es aprendizaje por refuerzo [30] . . . . . . . . . . . . . . . . . . . . 7 4.3. Diagrama de qué es aprendizaje federado [44] . . . . . . . . . . . . . . . . . . . . . . 7 4.4. Diagrama de Venn que define qué es Ciencia de Datos[12] . . . . . . . . . . . . . . . 8 5.1. Cursos y cantidad de estudiantes asignados en el dataset . . . . . . . . . . . . . . . . 21 5.2. Actividad en las cuales la proporción de nulos es 100 % . . . . . . . . . . . . . . . . . 22 5.3. Una actividad en la que la proporción de nulos es menor al 100% . . . . . . . . . . 22 5.4. Ambas actividades mostradas en la misma tabla . . . . . . . . . . . . . . . . . . . . 22 5.5. Estudiante cuya nota en todas las actividades es en nulo . . . . . . . . . . . . . . . . 23 5.6. Misma actividad pero con diferentes fechas en un mismo estudiante . . . . . . . . . . 23 5.7. Actividades con puntos posibles nulo . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.8. Actividades mostrando la diferencia de los valores puros vs los valores luego de la limpieza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.9. Valores nulos en la columna de FechaCalificacion y el valor final . . . . . . . . . . . 26 5.10. Valores nulos en la columna de FechaVencimiento y el valor final . . . . . . . . . . . 26 5.11. Valores nulos en la columna de FechaTodoElDia y el valor final, algunos valores con nulo y otros con la fecha final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.12. Valores nulos en la columna de FechaTodoElDia y el valor final, sin valores nulos . . 28 5.13. Nota en la escala de porcentajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.14. Nota en la escala de porcentajes con el símbolo % . . . . . . . . . . . . . . . . . . . . 29 5.15. Nota en la escala de porcentajes con el símbolo % . . . . . . . . . . . . . . . . . . . . 30 5.16. Misma Actividad con diferente Nota y FechasCalificacion . . . . . . . . . . . . . . . 30 5.17. Actividad con Nota complete e incomplete . . . . . . . . . . . . . . . . . . . . . . . . 31 5.18. Saltos entre semanas, no hay una secuencia seguida . . . . . . . . . . . . . . . . . . . 38 5.19. Ya no hay saltos entre semanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.20. Diagrama que muestra el proceso de RFE [17] . . . . . . . . . . . . . . . . . . . . . . 43 5.21. Diagrama de flujo del proceso sin Selección de Variables . . . . . . . . . . . . . . . . 44 5.22. Diagrama de flujo del proceso con Selección de Variables . . . . . . . . . . . . . . . . 44 5.23. Diagrama de flujo de la segunda etapa del proyecto . . . . . . . . . . . . . . . . . . . 45 6.1. Matriz de confusión de SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.2. Matriz de confusión de GBT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.3. Matriz de confusión de LR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.4. Matriz de confusión de KNN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.5. Matriz de confusión de NN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.6. Matriz de confusión de SVM después de Selección de Variables . . . . . . . . . . . . 52 vi 6.7. Matriz de confusión de GBT después de Selección de Variables . . . . . . . . . . . . 52 6.8. Matriz de confusión de LR después de Selección de Variables . . . . . . . . . . . . . 52 6.9. Matriz de confusión de KNN después de Selección de Variables . . . . . . . . . . . . 52 6.10. Matriz de confusión de NN después de Selección de Variables . . . . . . . . . . . . . 52 6.11. Importancia de variables sin aplicar Selección de Variables . . . . . . . . . . . . . . . 53 6.12. Importancia de variables después de aplicar Selección de Variables . . . . . . . . . . 54 6.13. Comparación de importancia de variables al no aplicar y aplicar Selección de Variables 55 6.14. Desempeño de las métricas conforme avanzan las semanas con el algoritmo de GBT, sin aplicar Selección de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.15. Matriz de confusión para cada semana utilizando el algoritmo GBT . . . . . . . . . . 57 6.16. Desempeño de las métricas conforme avanzan las semanas con el algoritmo de GBT, aplicando Selección de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.17. Matriz de confusión para cada semana utilizando el algoritmo GBT después de aplicar Selección de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 vii Lista de cuadros 5.1. Lista de programas y/o librerías y su versión que fue utilizado durante el desarrollo del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.2. Variables que se encuentran en el dataset con su tipo de dato y valores posibles . . . 20 5.3. Proporción y cantidad de nulos por variables . . . . . . . . . . . . . . . . . . . . . . 21 5.4. Proporción y cantidad de nulos por variables luego de una limpieza inicial . . . . . . 24 6.1. Métricas: primer análisis - 16 semanas - ningún método de Selección de Variables . . 46 6.2. Matriz de confusión: primer análisis - 16 semanas - ningún método de Selección de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.3. Lista de variables que se eliminaron del conjunto de datos junto a su descripción y el método por el que fueron eliminadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.4. Lista de variables finales con su descripción . . . . . . . . . . . . . . . . . . . . . . . 51 6.5. Métricas: segundo análisis - 16 semanas - aplicando RFE . . . . . . . . . . . . . . . . 51 6.6. Matriz de confusión: segundo análisis - 16 semanas - aplicando RFE . . . . . . . . . 51 6.7. Matriz de confusión: segunda etapa - evaluación por semanas del algoritmo GBT - ningún método Selección de Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.8. Matriz de confusión: segunda etapa - evaluación por semanas del algoritmo GBT - aplicando RFE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 viii Resumen Este proyecto de tesis se centra en la predicción temprana del rendimiento académico en el contexto universitario, específicamente en el curso de Cálculo 1. Se utilizaron técnicas de Educational Data Mining (EDM) y Learning Analytics (LA) para analizar grandes volúmenes de datos educativos y predecir el éxito o fracaso de los estudiantes. EDM emplea técnicas de minería de datos para datos educativos y tiene como objetivo pronosticar el rendimiento estudiantil, incluyendo el abandono escolar. Por su parte, LA se enfoca en medir, recopilar y analizar datos para mejorar los resultados académicos y entornos educativos. La predicción temprana es crucial para intervenir a tiempo y brindar apoyo a estudiantes en riesgo, mejorando sus posibilidades de éxito académico. Mediante análisis exploratorios y algoritmos de aprendizaje automático como Regresión Logística y Máquinas de Soporte Vectorial, se buscó identificar las características influyentes en el rendimiento de los estudiantes. Este proyecto tiene como objetivo mejorar la toma de decisiones en el proceso educativo, pro- porcionar recomendaciones personalizadas y promover un ambiente de aprendizaje enriquecedor y equitativo. La combinación de EDM y LA presenta un potencial significativo para transformar la manera en que se aborda el rendimiento estudiantil en entornos universitarios. ix CAPÍTULO 1 Introducción En un mundo cada vez más impulsado por la información y la tecnología, la capacidad de predecir y comprender eventos futuros se ha convertido en un recurso invaluable. En este contexto, la predicción del rendimiento académico de los estudiantes se erige como un campo de estudio crucial, con aplicaciones significativas en la mejora de la calidad de la educación y la identificación temprana de desafíos académicos. El presente trabajo se adentra en el ámbito de la predicción del desempeño de los estudiantes en un curso específico, explorando dos etapas distintas en el proceso de desarrollo de un modelo predictivo confiable. Este proyecto se basa en la premisa de que no sólo es fundamental anticipar quiénes podrían reprobar un curso, sino también hacerlo de manera temprana para permitir la implementación oportuna de intervenciones educativas. La primera etapa se centra en evaluar el impacto del pre-procesamiento de datos y la selección de características en el rendimiento de modelos de clasificación. Los datos iniciales revelaron una serie de desafíos, como la presencia de valores nulos en más del 40 % de las columnas, lo que requirió un exhaustivo trabajo de limpieza y tratamiento de datos. La selección de características, a través de diversas técnicas, se convirtió en un elemento clave para la mejora del rendimiento de los modelos. Las métricas de evaluación, como precisión, exactitud, sensibilidad y especificidad, se utilizaron para medir el desempeño de los algoritmos en la identificación de estudiantes en riesgo. En la segunda etapa, se aborda la cuestión de la predicción temprana, explorando cómo anticipar con seguridad el rendimiento académico de los estudiantes en distintos momentos del semestre. Para ello, se utilizó un algoritmo de Gradient Boosting Trees (GBT) y se evaluaron las métricas de rendi- miento a lo largo del tiempo, desde la semana 3 hasta la semana 16 del curso. Este análisis permitió determinar cuándo se podía realizar una predicción confiable y cómo la selección de características afectaba la calidad de las predicciones. En resumen, este trabajo se enfoca en la construcción de modelos predictivos para identificar a los estudiantes en riesgo de reprobar un curso, tanto de manera temprana como a lo largo del semestre. A través de un enfoque metódico que incluye pre-procesamiento de datos, selección de características y evaluación rigurosa de algoritmos, se busca proporcionar a las instituciones educativas herramientas efectivas para intervenir y apoyar a los estudiantes de manera más precisa y oportuna. El análisis detallado de las etapas y resultados de este proyecto ofrece una visión enriquecedora de las complejidades involucradas en la predicción del rendimiento académico, destacando la im- 1 portancia de la ciencia de datos en el ámbito educativo y su capacidad para mejorar la toma de decisiones en el campo de la enseñanza y el aprendizaje. 2 CAPÍTULO 2 Objetivos 2.1. Objetivo general Predicción Temprana del Rendimiento Académico en Cursos Universitarios: Un Enfoque en Cálculo 1 con Educational Data Mining y Learning Analytics. 2.2. Objetivos específicos Aplicar las mejores prácticas de limpieza de datos, Feature Engenieering y Selección de Varia- bles. Realizar comparaciones de las métricas obtenidas de distintos algoritmos. Obtener a partir de qué semana se puede obtener una predicción confiable. 3 CAPÍTULO 3 Justificación La predicción del rendimiento académico de los estudiantes es una tarea crucial, pero compleja en la educación [36]. Es vital para empoderar a los estudiantes a tomar el control, promover el aprendizaje autorregulado y permitir a los educadores identificar a los estudiantes en riesgo de fracaso e intervenir oportunamente [8]. Sin embargo, esta tarea supone un reto debido a los numerosos factores que pueden afectar al rendimiento de los estudiantes. Para hacer frente a esto, las técnicas de Educational Data Mining (EDM) y Learning Analytics (LA), como los Learning Management System (LMS) y los cursos masivos abiertos en línea (MOOC), sirven para analizar los grandes volúmenes de datos que reflejan los procesos de aprendizaje de los estudiantes [11]. Además, se pueden recopilar datos sobre los estudiantes en la educación tradicional presencial y en entornos mixtos (B-learning). La aplicación de técnicas de EDM y LA para analizar datos tan extensos, ha permitido obtener perspectivas valiosas, interpretables y novedosas sobre los alumnos [15]. La EDM, que implica el uso de técnicas de minería de datos (DM) para datos educativos, incluidas las actividades de aprendizaje [5], tiene como objetivo predecir el rendimiento de los estudiantes, así como el fracaso, el éxito o el abandono escolar [40]. Por su parte, la LA se centra en la medición, recopilación, análisis y comunicación de datos sobre los alumnos y sus entornos para optimizar sus resultados [43]. Así pues, EDM y LA son campos estrechamente relacionados que comparten el objetivo común de predecir y guiar el aprendizaje de los estudiantes. La predicción temprana, también conocida como la aplicación de modelos predictivos para identificar a los estudiantes en riesgo de fracaso o abandono lo antes posible, es una tarea crítica en EDM [6][46]. La detección temprana de los estudiantes en riesgo permite la intervención y el apoyo oportunos para promover el éxito de los estudiantes y prevenir el abandono o el fracaso. La predicción temprana presenta desafíos en EDM debido a la naturaleza multifactorial del ren- dimiento de los estudiantes, pero es vital en la educación a través de diferentes etapas e instituciones en todo el mundo. La predicción temprana es esencial para implementar estrategias de prevención eficaces, proporcionar asesoramiento o recomendaciones y llevar a cabo acciones o intervenciones de recuperación para los estudiantes en riesgo [39]. 4 CAPÍTULO 4 Marco teórico 4.1. Aspectos conceptuales 4.1.1. Inteligencia artificial La Inteligencia artificial (IA) se refiere en al campo de la ciencia e ingeniería que se enfoca en crear máquinas o sistemas inteligentes. Involucra desarrollar entidades artificiales que poseen ciertas características comúnmente asociadas con la inteligencia humana. Los sistemas de IA han demostrado la habilidad de poder percibir su entorno, buscar información, reconocer patrones, planear y ejecutar acciones, y adaptarse a nuevas situaciones emergentes [35] [13][28]. Esta perspectiva resalta las habilidades cognitivas de los sistemas de IA, lo cual le permite analizar y entender información compleja. [35] Otra perspectiva, tomada de los conceptos de Alan Turing, se refiere a la habilidad que tiene una máquina de IA de comunicarse, razonar y operar de forma independiente, parecido al comportamien- to humano. Sin embargo, reconoce que el uso actual del término de IA es comúnmente confundido con conceptos como Machine Learning y Deep Learning. [13] En general, IA engloba un gran rango de tecnologías y acercamientos dirigidos a desarrollar máquinas que exhiben un comportamiento inteligente. Involucra el estudio e ingeniería de un com- portamiento inteligente en humanos, animales y máquinas, con el fin de crear artefactos, como computadoras y tecnologías similares, capaces de realizar tareas que comúnmente requieren de inte- ligencia humana. [45] 4.1.2. Machine Learning Machine Learning (ML) es una rama del campo de la Inteligencia Artificial (IA) que se centra en el desarrollo de algoritmos y modelos estadísticos. Permite a los sistemas mejorar automáticamente su rendimiento y aprende de forma automática una tarea específica mediante el análisis de datos. Sus aplicaciones abarcan diversos ámbitos como la salud, finanzas, marketing, toma de decisiones, educación, automovilísmo, etc... Uno de los aspectos más significativos de ML es su aplicabilidad en una gran cantidad de es- 5 cenarios. En salud, los modelos de ML pueden predecir enfermedades, recomendar tratamientos e incluso ayudar a descubrir nuevos fármacos. En finanzas, se utilizan para la detección de fraudes, el comercio algorítmico, evaluación de riesgos, y detectar deserción de clientes. En marketing, se beneficia de la segmentación de clientes, recomendaciones personalizadas y el análisis de opiniones. La adopción de ML en estos ámbitos permite obtener información basada en datos, reducir costes y mejorar la toma de decisiones. A pesar de sus prometedoras aplicaciones, el aprendizaje automático presenta diversos retos. La naturaleza de “caja negra” de los modelos de ML plantea problemas de transparencia e interpre- tabilidad. Además, hay problemas relacionados al sesgo que pueden aplicarse sobre los datos y los modelos pueden perpetuar las desigualdades sociales. Garantizar el uso ético y responsable de las tecnologías de aprendizaje automático es un reto permanente que el sector debe abordar. Los modelos de ML se nutren de los datos. En la época actual, la generación de millones de bytes por día, ha aportado mucho a sus avances. Con la proliferación de las fuentes de datos, desde sensores a redes sociales, los modelos de aprendizaje automático pueden procesar y analizar inmensos conjuntos de datos. La interacción de los macrodatos y el aprendizaje automático ha dado lugar a grandes avances en el análisis predictivo, la detección de anomalías y el reconocimiento de patrones. En cuanto a su futuro, es prometedor. En los últimos años ha habido grandes innovaciones como el aprendizaje por transferencia (transfer learning), el aprendizaje por refuerzo (reinforcement learning), y el aprendizaje federado (Federated Learning). Todas estas innovaciones están ampliando los horizontes de la IA. Además, se está aventurando en la computación periférica, permitiendo el procesamiento y la toma de decisiones casi en tiempo real. Es probable que ML siga integrándose en diversos aspectos de nuestras vidas diarias. Aprendizaje por transferencia: El aprendizaje por transferencia consiste en tomar las características aprendidas en un problema y aprovecharlas en un nuevo problema similar. Por ejemplo, las características de un modelo que ha aprendido a identificar bicicletas pueden ser útiles para poner en marcha un modelo destinado a identificar motocicletas. [14] El aprendizaje por transferencia suele aplicarse a tareas en las que el conjunto de datos es demasiado pequeño para entrenar un modelo completo desde cero. [14] Figura 4.1: Diagrama de qué es aprendizaje por transferencia [2] Aprendizaje por refuerzo: El aprendizaje por refuerzo (RL por sus siglas en inglés) es 6 una técnica de aprendizaje de ML que entrena al software a tomar decisiones para lograr los resultados más óptimos. Imita el proceso de aprendizaje por ensayo y error que utilizan los humanos para alcanzar sus objetivos. Las acciones del software que contribuyen al logro del objetivo se ven reforzadas, mientras que las que lo desvían se ignoran [3]. Los algoritmos de RL utilizan un paradigma de recompensa y castigo cuando procesan datos. Aprenden de la retroalimentación de cada acción y autodescubren las mejores vías de proce- samiento para alcanzar los resultados finales. Los algoritmos también son capaces de atrasar la gratificación [3]. La RL es un potente método para ayudar a los sistemas de IA a lograr resultados óptimos en entornos invisibles [3]. Figura 4.2: Diagrama de qué es aprendizaje por refuerzo [30] Aprendizaje Federado: Aprendizaje Federado (FL por sus siglas en inglés) es un enfoque descentralizado propuesto inicialmente por Google para construir modelos de ML utilizando conjuntos de datos distribuidos a través de múltiples dispositivos. El objetivo principal es entrenar modelos estadísticos en dispositivos o centros de datos aislados sin transferir los datos a dispositivos centralizados. Incorpora ideas de múltiples áreas, incluyendo criptografía, ML, computación heterogénea y sistemas distribuidos [7]. Figura 4.3: Diagrama de qué es aprendizaje federado [44] 7 4.1.3. Ciencia de datos Después de buscar muchas definiciones de Ciencia de Datos, VanderPlass en su libro Python Data Science Handbook la define de una forma sencilla que engloba el resto de las otras definiciones, a grandes rasgos. La definición dice así: “It is a suprisingly hard definition to nail down, especially given how ubiquitous the term has become. Vocal critics have variously dismissed the term as a superfluous label or a simple buzzword that only exists to salt résumés and catch the eye of overzealous tech recruiters. ...Ciencia de Datos, despite its hyper laden veneer, is perhaps the best label we have for the cross-disciplinary set of skills that are becoming increasingly important in many applications across industry and academia. The best existing definition of Ciencia de Datos is illustrated by Drew Conway’s Ciencia de Datos Venn Diagram, published on his blog in September 2010. Figura 4.4: Diagrama de Venn que define qué es Ciencia de Datos[12] ...‘Ciencia de Datos‘ is fundamentally an interdisciplinary subject. Ciencia de Datos comprises three distinct and overlapping areas: the skills of a statistician who knows how to model and summarize datasets; the skills of a computer scientist who can design and use algorithms to efficiently store, process and visualize this data; and the domain expertise-what we might think of as “classical” training in a subject-necessary both to formulate the right questions and to put their answers in context...” [27] 4.1.4. Educational Data Mining Educational Data Mining (EDM) es definida según la página de la comunidad de The Educa- tional Data Mining [31] como una disciplina emergente, que se ocupa de desarrollar métodos para explorar los tipos de datos únicos que proceden del entorno educativo, y de utilizar esos métodos para comprender mejor a los estudiantes y los entornos en los que aprenden. La EDM suele hacer hincapié en la mejora de los modelos de los alumnos, que denotan sus conocimientos, motivación, metacognición y actitudes actuales. 8 Existen varios tipos de implementación para EDM. Los sistemas pueden ser orientados para diferentes actores con cada uno teniendo un punto de vista particular: Orientado hacia estudiantes: El objetivo es recomendar a los alumnos actividades, recursos y tareas de aprendizaje que favorezcan y mejoren su aprendizaje, sugerir buenas experiencias de aprendizaje para los alumnos, sugerir acortamientos de caminos o simplemente enlances a seguir, basándose en las tareas ya realizadas por el alumno y sus éxitos y en las tareas realizadas por otros alumnos similares, etc.. [10] Orientado hacia catedráticos: El objetivo es obtener una retroalimentación más objetiva para la instrucción, evaluar la estructura del contenido del curso y su eficacia en el proceso de aprendizaje, clasificar a los alumnos en grupos en función de sus necesidades de orientación y seguimiento, encontrar patrones de aprendizaje tanto regulares como irregulares, encontrar los errores cometidos con más frecuencia, encontrar actividades que sean más eficaces, descubrir información para mejorar la adaptación y personalización de los cursos, reestructurar los sitios para personalizar mejor los cursos, organizar los contenidos de forma eficaz según el progreso del alumno y construir de forma adaptativa planes de instrucción, etc..[10] Orientado hacia responsables académicos y administradores: El objetivo es disponer de parámetros sobre cómo mejorar la eficiencia del sitio y adaptarlo al comportamiento de sus usuarios, disponer de medidas sobre cómo organizar mejor los recursos institucionales y su oferta educativa, mejorar la oferta de programas educativos y determinar la eficiencia del nuevo enfoque de aprendizaje a distancia mediado por un computador. [10] 4.1.5. Learning Analytics El concepto Learning Analytics (LA) es comúnmente definido como la forma de medir, recolectar, analizar, y reportar toda la información acerca de estudiantes y sus contextos. Esto se hace con el fin de entender y optimizar el aprendizaje y los ambientes en el que ocurre [37]. Es un campo de práctica e investigación que utiliza métodos computacionales para analizar información de una gran variedad de fuentes, como sistemas de gestión del aprendizaje, herramientas de evaluación, redes sociales y encuestas a los estudiantes [4]. LA puede ser utilizado para: Identificar estudiantes en riesgo: Puede ser utilizado para identificar estudiantes que tienen un alto riesgo de reprobar o retirar un curso o también, dejar la universidad. Esta información puede ser luego utilizada para proveer apoyo específico y atención al estudiante para ayudar al estudiante a aprobar. Mejorar la enseñanza y el aprendizaje: Puede ser utilizado para llevar un registro del progreso del estudiante, identificar áreas en las cuales los estudiantes puedan tener dificulta- des, y darle retroalimentación al catedrático. Esta información puede ser luego utilizada para mejorar el diseño del material de estudio y actividades. Aprendizaje personalizado: Puede ser utilizado para personalizar la experiencia para cada estudiante. Por ejemplo, los estudiantes que se encuentran con dificultades con un concepto en específico, pueden ser apoyados con actividades o recursos o atención adicional para garantizar el entendimiento. Mejor toma de decisiones: También puede ser utilizada para asistir en la toma de decisiones sobre la política y la práctica educativas. Por ejemplo, los datos de la analítica del aprendizaje pueden utilizarse para evaluar la eficacia de nuevos métodos de enseñanza o para identificar las áreas a las que deben asignarse recursos. 9 Entender los comportamientos de aprendizaje de los estudiantes: Puede ser utiliza- da para entender cómo es que los estudiantes aprenden, incluyendo sus tipos de aprendizaje preferidos, fortalezas y debilidades, y sus motivadores. Mejorar el compromiso de los estudiantes: Puede ser utilizada para identificar y abordar los factores que contribuyen a la disminución del compromiso de los estudiantes con el paso del tiempo. [4][37][18] [42] 4.1.6. Educational Warning System Los Sistemas de Alerta Educativa (EWS) son sistemas basados en datos que utilizan diversas fuentes de información, como las notas, la asistencia y el comportamiento de los alumnos, para identificar a los estudiantes que corren el riesgo de suspender un curso o abandonar los estudios. Los EWS pueden utilizarse entonces para proporcionar apoyo e intervenciones específicas para ayudar a estos estudiantes a tener éxito [34]. Los EWS se suelen implantar a nivel de escuela o de distrito, pero también existen varios pro- ductos comerciales de EWS. Algunas de las características más comunes de los sistemas de alerta temprana son las siguientes: Recolección de datos: Los EWS recopilan datos de una variedad de fuentes, como las calificaciones de los estudiantes, la asistencia, los registros de comportamiento y los resultados de las pruebas estandarizadas. Análisis de datos: Los EWS utilizan sofisticados algoritmos de minería de datos y aprendizaje automático para analizar los datos recopilados e identificar a los estudiantes que están en riesgo de fracaso. Planificación de la intervención: EWS se puede utilizar para desarrollar e implementar intervenciones específicas para estudiantes en riesgo. Estas intervenciones pueden incluir apoyo académico, tutoría, asesoramiento u otros servicios. Seguimiento del progreso: Los EWS pueden utilizarse para seguir el progreso de los estu- diantes en situación de riesgo y evaluar la eficacia de las intervenciones que se están propor- cionando. Beneficios de los EWS Identificación temprana: El EWS puede identificar a los alumnos de riesgo en una fase temprana, antes de que se queden rezagados y sea más difícil ayudarles. Intervenciones específicas: El EWS puede utilizarse para proporcionar apoyo e interven- ciones específicas a los estudiantes en situación de riesgo, en función de sus necesidades indi- viduales. Mejores resultados de los alumnos: Se ha demostrado que los EWS mejoran los resultados de los estudiantes, como las calificaciones, la asistencia y las tasas de graduación. Eficacia: Los sistemas de alerta temprana pueden ayudar a las escuelas y distritos a utilizar sus recursos de manera más eficiente, dirigiendo sus intervenciones a los estudiantes que más las necesitan. 10 Equidad: El EWS puede ayudar a promover la equidad garantizando que todos los estudiantes tengan acceso al apoyo y las intervenciones que necesitan para tener éxito. [16] Desafíos de los EWS Calidad de los datos: Los EWS se basan en datos precisos y puntuales. Es importante disponer de un sistema de recolección y gestión eficaz de estos datos. Preocupación por la privacidad: Los sistemas de alerta temprana recogen datos sensibles sobre los estudiantes. Es importante contar con políticas que protejan estos datos y garanticen su uso responsable. Implementación: La implementación de los sistemas de alerta temprana puede ser compleja y requiere la información del personal. Coste: La implementación y el mantenimiento de los sistemas de alerta temprana pueden resultar caros. [16] Conclusión El EWS puede utilizarse de diversas maneras para apoyar a los estudiantes que corren el riesgo de fracasar. Por ejemplo, el EWS puede utilizarse para: Identificar a los estudiantes que necesitan apoyo académico adicional: EWS se puede utilizar para identificar a los estudiantes que están teniendo dificultades en una clase o materia en particular. A estos estudiantes se les puede proporcionar apoyo adicional, como tutorías o sesiones de ayuda extra. Identificar a los estudiantes que corren el riesgo de abandonar los estudios: El EWS puede utilizarse para identificar a los estudiantes que corren el riesgo de abandonar los estudios. Estos estudiantes pueden recibir intervenciones específicas para ayudarles a permanecer en la escuela y tener éxito. Supervisar el progreso de los estudiantes que reciben intervenciones: El EWS puede utilizarse para seguir el progreso de los estudiantes que están recibiendo intervenciones pa- ra ayudarles a tener éxito. Esta información puede utilizarse para evaluar la eficacia de las intervenciones y realizar los ajustes necesarios. [38] 4.1.7. Feature Engineering Es el proceso de transformar datos brutos en características que puedan ser utilizadas por modelos de machine learning para realizar predicciones. Es un paso fundamental en el proceso de machine learning, ya que la calidad de las características puede tener un impacto significativo en el rendimiento del modelo [1]. 11 Beneficios Feature Engineering puede aportar una serie de ventajas, entre ellas: Mejora del rendimiento del modelo: Al seleccionar y transformar cuidadosamente las características de su conjunto de datos, los profesionales del machine learning pueden mejorar la precisión y fiabilidad de sus modelos. Reducción del sobreajuste: El sobreajuste se produce cuando un modelo de machine lear- ning aprende demasiado bien los datos de entrenamiento y es incapaz de generalizar a nuevos datos. La aplicación de feature engineering puede ayudar a reducir el sobreajuste creando características más representativas del mundo real. Mayor interpretabilidad: La interpretabilidad se refiere a la capacidad de entender cómo un modelo de machine learning hace predicciones. La aplicación de feature engineering puede ayudar a aumentar la interpretabilidad de los modelos creando características más significativas para los humanos. [33] Técnicas Existen diversas técnicas de feature engineering que pueden utilizarse, dependiendo del conjunto de datos específico y de la tarea de machine learning. Algunas técnicas comunes son: Limpieza y preprocesamiento de datos: Consiste en eliminar el ruido y las incoherencias de los datos y convertirlos a un formato que pueda utilizar el modelo de machine learning. Por ejemplo, puede consistir en eliminar filas duplicadas, rellenar valores faltantes y convertir datos categóricos en datos numéricos. Selección de Variables: Consiste en seleccionar las características más relevantes e infor- mativas del conjunto de datos. Para ello pueden utilizarse diversos métodos, como pruebas estadísticas, algoritmos de machine learning o el conocimiento expertos en el negocio. Feature transformation: Consiste en transformar las características para crear otras más útiles para la tarea de machine learning. Por ejemplo, puede consistir en escalar las carac- terísticas a un rango común o crear nuevas características que representen la relación entre diferentes características. Feature creation: Se trata de crear nuevas características a partir de las existentes. Por ejemplo, se pueden crear características que representen las relaciones temporales o espacia- les entre puntos de datos, o características que representen las interacciones entre diferentes características. [9] Feature Engineering es una potente herramienta que puede utilizarse para mejorar el rendimiento de los modelos de machine learning. Seleccionando y transformando cuidadosamente las caracterís- ticas de su conjunto de datos, los profesionales de machine learning pueden construir modelos más precisos, fiables e interpretables. 12 4.1.8. Selección de variables Una “feature” es una propiedad individual medible del proceso observado. A partir de un conjunto de características, cualquier algoritmo de machine learning puede realizar una clasificación [19]. Selección de Variables es un método que consiste en reducir la cantidad de variables que nosotros le introducimos al modelo. Esto lo hacemos al usar únicamente las variables relevantes y eliminar esas variables que están introduciendo ruido y/o complejidad al modelo [29]. Existen dos tipos principales de modelos de Selección de Variables los que pueden ser aplicados en modelos supervisados y los no supervisados. Debido a que en este proyecto solo se aplicarán los de aprendizaje supervisados, únicamente se definen y clasifican estos. Los modelos supervisados de Selección de Variables se refiere a a los métodos en los cuáles necesita la clase a la que pertenece para poder realizar el Selección de Variables. Utilizan luego las variables a evaluar para identificar qué variables son las que pueden incrementar o reducir la eficiencia del modelo. El resultado final es un conjunto de variables óptimo para el desempeño del modelo. Las subdivisiones del modelo supervisado son las siguientes: Filter methods: Los filter methods para selección de variables son una clase de métodos de machine learning supervisado que utilizan medidas estadísticas para evaluar la relevancia de las características para la variable objetivo. Funcionan evaluando independientemente cada característica y clasificándola en función de su puntuación. Luego, un grupo de las variables con mejor puntuación es seleccionado [19]. Los filter methods suelen ser rápidos y poco costos computacionalmente. Esto los hace adecuados para conjuntos de datos con un gran número de variables. También son fáciles de aplicar y pueden utilizarse con diversos algoritmos de machine learning [22]. Sin embargo, los filter methods tienen algunas limitaciones. Por ejemplo, no tienen en cuenta las interacciones entre variables y pueden ser sensibles a la elección de la medida estadística. Además, puede que no sean capaces de identificar todas las variables relevantes en un conjunto de datos [24]. A pesar de estas limitaciones, los métodos de filtrado son una herramienta potente y versátil para la selección de características. Algunos ejemplos de filter methods son: Básicos • Constantes • Cuasi-constantes • Duplicados Medidas Estadísticas • Puntuación Fisher • Métodos univariados • Información mutua Correlación 13 Wrapper methods: Son un tipo de método supervisado de Selección de Variables que utiliza algoritmos de machine learning para evaluar el desempeño de un grupo de variables. Funcionan al añadir o remover de forma iterativa variables que pertenecen a un grupo de variables y luego medir el desempeño del modelo de machine learning. El resultado de este proceso, es un grupo de variables con el cual obtenemos el mejor desempeño del modelo [19]. A comparación de los filter methods, estos son más caros computacionalmente, pero pueden llegar a ser más efectivos al identificar las variables más relevantes, especialmente en un conjunto de datos en el cual hay interacciones complejas entre variables [21]. Al utilizar los wrapper methods hay que tener en cuenta, el resultado es el grupo de variables óptimo para un algoritmo o familia de algoritmos en específico. Por ejemplo, para un algoritmo que se base en árboles, el mismo grupo de variables puede servir para random-forests y gradient boosted trees, pero lo más probable es que no funcione con una Regresión Logística [26]. En general, los wrapper methods son una potente herramienta para Selección de Variables. Son especialmente adecuados para conjuntos de datos donde las interacciones entre variables son impor- tantes y se dispone de recursos informáticos. Algunos ejemplos de Wrapper Methods son: Step forward selection Step backward selection Exhaustive search Feature shuffling Embedded methods: Este método integra el proceso de Selección de Variables dentro del entrenamiento de un modelo de machine learning. Esto significa que el modelo aprende a seleccionar las variables más importantes como parte de su proceso de entrenamiento. Esto funciona gracias a que utilizan una variedad de técnicas para penalizar o regularizar los pesos en las variables del modelo. Esta penalización o regularización fuerza al modelo a aprender y a depender de un grupo más pequeño de variables, lo cual puede conducir a una mejora en el desempeño y una reducción en sobreajuste del modelo. Parecido a los wrapper methods, hay que tener en cuenta la interacción entre el modelo y las variables. Es decir, las variables seleccionadas para un algoritmo de la familia de los árboles proba- blemente no sean las mismas para un algoritmo de tipo de regresión. La diferencia es que son más baratos computacionalmente hablando. Esto se debe a que solamente se hace un fit del modelo, en lugar de varias iteraciones. Cuando se compara este método con los dos anteriores, los embedded methods son más rápidos que los wrapper, más precisos que los filter, sí detecta la interacción entre variables, y encuentra el grupo óptimo de variables para el algoritmo que se está entrenando. Algunos ejemplos de embedded methods son: LASSO Decision tree derived importance Regression coefficients Recursive feature elimination 14 Recursive feature addition 4.1.9. Métricas de rendimiento El uso de métricas de rendimiento como significado en machine learning ha sido muy común. También se puede obtener de fuentes secundarias como libros de texto, estudios de investigación y tutoriales web. Esta definición particular incluye conceptos procedentes de otras obras. Sin embargo, una fuente especialmente relevante es el libro “Machine Learning: A probbailistc perspective, escrito por Kevin Murphy”. Murphy ha descrito en el libro las métricas de rendimiento como medidas de la calidad de un modelo de aprendizaje automático. Se explican diferentes tipos de métricas de rendimiento y cómo pueden utilizarse para evaluar el rendimiento de los modelos de aprendizaje automático [32]. Aparte de los libros de texto, machine learning también se menciona en varios artículos de inves- tigación. Por ejemplo, hay un artículo titulado “A Survey of Performance Metrics for Classification”, de David J. Hand, que resume varios tipos de métricas de rendimiento utilizadas en tareas de clasi- ficación [25]. Métricas de clasificación El tema de los problemas de clasificación es quizá el más investigado en la actualidad en cuanto a machine learning se refiere. Casi todos los entornos industriales y de producción tienen sus casos de uso. Reconocimiento de voz; reconocimiento facial; clasificación de textos, etc. Dado que los modelos de clasificación se caracterizan por sus distintos resultados, necesitamos una métrica que empareje de algún modo las distintas clases. Las métricas de clasificación juzgan el rendimiento de un modelo y permiten saber si la clasificación es buena o mala a distintos niveles. Existen varias métricas para evaluar los modelos de clasificación, estas son: Matriz de confusión: La matriz de confusión es una métrica donde el output puede ser de dos o más clases. Es una tabla que tiene cuatro diferentes tipos de combinaciones de los valores predichos y actuales [41]. Valor predicho Aprobó Reprobó Valor real Aprobó VP FN Reprobó FP VN Cada valor de la matriz de confusión significa lo siguiente: • VP (Verdadero Positivo): El número de estudiantes que fueron asignados como aprobó y sí aprobaron el curso. • VN (Verdadero Negativo): El número de estudiantes que fueron asignados como reprobó y sí reprobaron el curso. • FP (Falso Positivo): El número de estudiantes que fueron asignados como aprobó y reprobaron el curso. • FN (Falso Negativo): El número de estudiantes que fueron asignados como reprobó y aprobaron el curso. 15 Exactitud: Es la proporción de sujetos correctamente clasificados sobre el total de sujetos, se calcula mediante la siguiente fórmula: Accuracy = V P + V N V P + V N + FP + FN Los resultados pueden ser erróneos si las características de las clases se distribuyen de forma desigual. Por lo tanto, no puede actuar como una métrica de rendimiento independiente para el modelo [23]. Precisión: La precisión intenta contestar al pregunta ¿Qué proporción de los que fueron identificados como positivos fueron correctos? [20]. Se calcula con la siguiente fórmula: Precision = V P V P + FP Sensibilidad: Es la probabilidad de que el modelo clasifique a los estudiantes como aprobados de forma correcta. También, es llamada Recall [23]. Se calcula con la fórmula siguiente: Sensitivity = V P V P + FN Especificidad: Es la probabilidad de que el modelo clasifique a los estudiantes como repro- vados de forma correcta [23]. Se calcula con la fórmula siguiente: Specificity = V N V N + FP Medida F: El uso únicamente de las medidas sensibilidad y especificidad puede generar sesgo al evaluar los diferentes modelos. La medida F, que es el promedio armónico de sensibilidad y especificidad, utiliza las dos métricas juntas [23]. F1 = 2 ∗ V P (2 ∗ V P ) + FP + FN 4.2. Caso de éxito 4.2.1. Usando Learning Analytics para desarrollar un sistema de alerta temprana Este paper [23], en el cual se basó este trabajo de graduación, se dividía en dos etapas. Al igual que este trabajo de graduación, primero se buscaba construir un modelo que con toda la data pudiera predecir de forma certera, qué estudiantes iban a reprobar el curso. Como segunda etapa se buscó determinar qué tan temprano se podía obtener una predicción que fuera lo suficientemente precisa para poder apoyar a los estudiantes. Los datos que utilizaron para poder realizar este análisis fueron extraídos de un ambiente de aprendizaje virtual. Los datos consistían en 3,803 sesiones, 119,921 páginas visitadas, 4,566 mensajes escritos, 62 preguntas en los fórums de discusión, 297 respuestas, 8,601 evaluaciones, y 3,937 etiquetas utilizadas para etiquetar los mensajes escritos. A lo largo del artículo, se trata de forma extensa el pre-procesamiento, la extracción de nuevas variables y el proceso de Selección de Variables. Se menciona que el pre-procesamiento tiene una 16 notable importancia en los estudios de minería de datos. Es posible generar modelos mejores y más entendibles a través de las acciones tomadas durante esta etapa del proyecto. Para el análisis de los datos, diferentes modelos de clasificación fueron probados, aplicando proce- sos de Selección de Variables ya que no siempre el grupo óptimo de variables que fue seleccionado con un modelo funciona con otros. En este caso se probaron con 7 diferentes tipos de modelos diferentes. Como parte del entrenamiento, se analizó el efecto de Selección de Variables en todos los modelos, se utilizaron diferentes métricas como (presición, sensitivity, specificity, y f-measure) para hacer la comparación entre todos los modelos. También, cabe mencionar, que este entrenamiento se hizo utilizando la validación de cross-fold. En la evaluación de resultados, se observó que los modelos que utilizaban información categó- rica se desempeñaba mejor que los modelos que utilizaban solamente data continua. También, los resultados indicaron que los modelos, luego de pasar por el proceso de Selección de Variables se desempeñaban mejor que los modelos que tenían todas las variables. Finalmente se menciona que la selección de variables (Selección de Variables) no sólo ayuda al modelo, sino que también le ayuda al científico realizando el análisis a interpretarlo más fácil. En la primera fase, que correspondía a obtener una predicción para estudiantes que puedan reprobar el curso utilizando toda la información, lograron construir un modelo con 83 % de precisión utilizando Redes Neuronales. Luego, para la segunda etapa lograron obtener resultados de 60 % de precisión desde la semana 3 del curso. Por último, mencionan que el modelo desarrollado ayudará a los catedráticos a identificar a estudiantes con altas probabilidades de reprobar el curso y con esa información, pueden aplicar las medidas necesarias para prevenirlo. Esto ayudará a reducir las tasas de alumnos reprobados [23]. 17 CAPÍTULO 5 Metodología 5.1. Descripción general Este proyecto busca predecir si un estudiante va a reprobar el curso de Cálculo 1. El objetivo es notificar al estudiante con el suficiente tiempo para que brindar la ayuda necesaria al estudiante para lograr aprobar el curso. El Proyecto fue dividido en dos etapas. La primera etapa consistió en obtener los datos necesarios, hacer la exploración y limpieza a los datos, aplicar técnicas de pre-procesamiento, escoger las variables a utilizar y determinar, y determinar cuál es el algoritmo predictivo que arroja los mejores resultados. La segunda fase, consitió en determinar qué tan temprano se puede alertar al estudiante que, de acuerdo con el modelo, tiene una alta probabilidad de reprobar el curso. Durante el proyecto, se respondieron las siguientes preguntas: 1. Cuando se comparan los modelos de clasificación formados a partir de todos los datos (16 semanas) con respecto a las métricas de rendimiento, ¿qué algoritmo/algoritmos de clasificación y técnicas de pre-procesamiento son mejores para predecir los alumnos que no aprueban? ¿Cuál es el impacto de las distintas técnicas de transformación de datos utilizadas en la fase de pre-procesamiento sobre el rendimiento de la clasificación? ¿Cómo influyen en la clasificación las distintas técnicas de “selección de características“ utilizadas en la fase de pre-procesamiento? ¿Cómo es el rendimiento de los modelos de clasificación establecidos utilizando un número reducido de características en comparación con otros modelos de clasificación formados utilizando todas las características? ¿Qué características tienen más importancia en la predicción del rendimiento de los alum- nos? 2. ¿Cuál es la precisión de los modelos de clasificación establecidos a partir de los datos obtenidos de las semanas 3, 5, 7, 10, 12, 14, y 16 utilizando el algoritmo y las técnicas de pre-procesamiento seleccionados en el ámbito de la primera pregunta de investigación para predecir el rendimiento académico de los estudiantes al final del trimestre? 18 5.2. Herramientas utilizadas El proyecto fue trabajado utilizando el lenguaje de programación Python. Como herramientas o librerías que ayudaron con la manipulación al dataset, están Pandas, Spark, Jupyter Notebook y Numpy. Para poder realizar gráficas y entender de una mejor manera el dataset, se utilizaron seabron y matplotlib. A continuación, una tabla con todos los paquetes utilizados junto a la versión: Programa/Librería Version Python 3.9.10 feature-engine 1.6.1 matplotlib 3.7.2 numpy 1.25.1 pandas 2.0.3 pyspark 3.4.1 scikit-learn 1.3.0 seaborn 0.12.2 Tabla 5.1: Lista de programas y/o librerías y su versión que fue utilizado durante el desarrollo del proyecto. El dataset con el que se trabajó contiene información de estudiantes que han tomado el curso de Cálculo 1 entre los años 2019 hasta 2022. Estos datos fueron obtenidos por medio del API del portal Canvas. 5.3. Primera etapa 5.3.1. Pre-procesamiento El dataset cuenta con 155,158 registros y 17 columnas: Variable Descripción Tipo Valores posbiles Curso Curso que se está anali- zando Categórica CALCULO 1, CÁLCULO 1, LABORATORIO DE CALCULO 1 Semestre Semestre en el que se cursó el curso Discreta 1 y 2 Seccion Sección en la que el estu- diante estaba asignado Discreta - Anio Año que el estudiante to- mó el curso Discreta 2019-2022 Actividad Tipo de actividad que se realizó Categórica - TipoCalificacion Tipo de calificación que tiene esa actividad Categórica points, percent, pass_fail, not_graded PuntosPosibles El puntaje total que tenía esa actividad Continua - RevisionPares Indicador si la actividad era en grupos o individual Categórica True, False 19 FechaTodoElDia Fecha de la entrega de la actividad Discreta - FechaVencimiento Fecha y hora máxima de la entrega de la tarea Continua - TipoEntrega Forma de entrega de la ta- rea Categórica discussion_topic, on- line_text_entry, onli- ne_url, media_recording, online_upload, exter- nal_tool, on_paper, not_graded Nota La nota o el puntaje que se obtuvo de esa actividad Continua - FechaCalificacion Fecha y hora en la que la actividad fue calificada Continua - TipoEnvio Cómo fue entregada la ta- rea en la plataforma Categórica online_quiz, discus- sion_topic, online_url, basic_lti_launch, online_upload, me- dia_recording, onli- ne_text_entry NombreEst Nombre del estudiante asignado al curso Categórica - CantComentarios Cantidad de comentarios que tiene esa actividad en la plataforma Discreta - Est_ID Identificador único del es- tudiante. Discreta - Tabla 5.2: Variables que se encuentran en el dataset con su tipo de dato y valores posibles Exploración y limpieza Luego de un primer análisis exploratorio y lectura del del dataset, se identificaron varias columnas con valores faltantes. La cantidad de valores faltantes por columna es la siguiente: Como se puede observar en la Tabla 5.2, hay varias columnas que tienen valores nulos. Hay algunas que tienen una gran proporción de valores nulos, entre ellas podemos identificar a TipoEntrega, Nota, FechaCalificacion, y TipoEnvio. Limpieza general Inicialmente se identificaron diferentes valores en la columna Curso. Como se puede observar en la imagen, existen tres valores distintos. De los tres, se puede asumir que CÁLCULO 1 y CALCULO 1 son los mismos solo escritos de forma distinta. Ahora, con el tercero, LABORATORIO DE CALCULO 1 causó duda por dos razones. Una es porque no es parecido al nombre de los primeros dos y segundo, porque solamente tiene 32 estudiantes asignados. Cuando se entró más a detalle, parece ser que el curso es solamente dado durante el primer semestre de los años 2020, 2021, y 2022. La cantidad de estudiantes con respecto al total del dataset, representaba solamente el 1.30%. Debido a esto, se decidió eliminar del dataset todas las filas con el valor LABORATORIO DE CALCULO 1 en la columna Curso. 20 Variable Cantidad de nulos Proporción de nulos Curso 0 0 % Semestre 0 0 % Seccion 0 0% Anio 0 0 % Actividad 0 0 % TipoCalificacion 0 0 % PuntosPosibles 220 0.14 % RevisionPares 0 0% FechaTodoElDia 20,274 13.07 % FechaVencimiento 19,365 12.48 % TipoEntrega 33,094 21.33% Nota 78,935 50.87% FechaCalificacion 78,844 50.82 % TipoEnvio 105,176 68.79 % NombreEst 0 0% CantComentarios 0 0 % Est_ID 0 0 % Tabla 5.3: Proporción y cantidad de nulos por variables Figura 5.1: Cursos y cantidad de estudiantes asignados en el dataset Durante esta limpieza inicial, se identificó la existencia de dos valores en el campo NombreEst que no correspondían a nombres reales de estudiantes. Estos valores son Estudiante de prueba y Alumno de prueba, por lo que se decidió eliminar todas las filas que presentaran estos valores en dicho campo. Siguiendo con la limpieza, se crearon dos nuevas variables. La primera permitió identificar las actividades para las cuales ningún alumno de una misma sección, semestre y año tenía calificación. Es decir, el 100% de los valores de la nota para una misma sección, semestre, y año era nulos. Se decidió eliminar del análisis las actividades identificadas de esta manera, ya que no aportaban información a los modelos predictivos. En las imágenes a continuación, se pueden observar algunos casos: 21 Figura 5.2: Actividad en las cuales la proporción de nulos es 100 % Figura 5.3: Una actividad en la que la proporción de nulos es menor al 100 % Figura 5.4: Ambas actividades mostradas en la misma tabla 22 La segunda variable creada fue la proporción de nulos pero esta vez, en un estudiante. Esta variable se utilizó para identificar estudiantes cuyas notas son nulas para el 100 % de actividades durante el semestre. Estos registros no aportan información al modelo e incluso podrían generar ruido si se incluyen. Por lo anterior, se construyó esta variable y se eliminaron todos los registros de aquellos estudiantes cuya proporción de nulos para la misma sección, año, y semestre era del 100 %. A continuación una demostración de lo observado: Figura 5.5: Estudiante cuya nota en todas las actividades es en nulo Finalmente, se identificaron algunas actividades las cuales parecían no pertenecer al semestre que se estaba cursando. Había algunas actividades que, por ejemplo, el estudiante estaba cursando en el primer semestre del 2020 y habían actividades con fecha del segundo semestre de 2019. Esto se puede suponer que es causado cuando el catedrático copia un curso de un semestre anterior al nuevo y se copia con las fechas del anterior. Luego, ya al cambiarlas, es que aparece la nueva actividad con la fecha en el semestre correcto. Se decidió eliminar los registros de las actividades con fechas que corresponden a semestres anteriores al que se está cursando. En la siguiente imagen se muestra un ejemplo. Figura 5.6: Misma actividad pero con diferentes fechas en un mismo estudiante 23 Al aplicar los 4 filtros mencionados anteriormente, la cantidad de registros en el dataset disminuyó a 79,797 registros, lo que equivale a una reducción del 48.57% de los registros iniciales. A pesar de disminuir casi un 50 % el dataset, la cantidad de estudiantes disminuyó de 2,407 (dataset inicial) a 2,392, una reducción del 0.62%. Luego de esta limpieza inicial, la cantidad y proporción de nulos disminuyeron a lo siguiente: Variable Cantidad de nulos % de nulos actual % de nulos anterior PuntosPosibles 39 0.05% 0.14 % FechaTodoElDia 4,618 5.79 % 13.07 % FechaVencimiento 3,770 4.72 % 12.48% TipoEntrega 4,164 5.22 % 21.33% Nota 4,230 5.30 % 50.87% FechaCalificacion 4,216 5.15% 50.82 % TipoEnvio 30,430 38.13% 68.79 % Tabla 5.4: Proporción y cantidad de nulos por variables luego de una limpieza inicial A pesar de que se lograron disminuir los valores faltantes de forma considerable solo una con una limpieza inicial, todavía habían varios nulos que eran necesarios tratarlos o filtrarlos para poder dar por terminada la fase de Limpieza de datos. Para lograr tratarlos, fueron trabajadas las variables de forma separada. Puntos posibles La columna de PuntosPosibles es una de las columnas más importantes en este dataset, ya que nos indicaba cuántos puntos netos vale cada actividad. Esto es de vital importancia porque hay muchas notas que no están como puntos netos, sino que están en una escala de porcentajes y para lograr pasarlo a una escala de puntos netos, fue necesaria esta columna. Dicho esto, fue necesario una buena limpieza a los nulos y también, que se corrigiera cualquier error o valor anormal. Se partió con 39 nulos en esta columna. Primero, se hizo un filtro para lograr obtener todas las actividades que tenían nulo como valor. El resultado fue el siguiente: Figura 5.7: Actividades con puntos posibles nulo Para quitarle el valor nulo y asignarle una nota a cada una de estas actividades, se hicieron dos cosas. Lo primero fue específicamente para la actividad Roll Call Atendance. Esta actividad representa la asistencia que un alumno tiene en un curso, siempre y cuando, la asistencia sea tomada por el catedrático. En la mayoría de los casos, la asistencia tenía en la columna de TipoCalificacion not_graded, por lo tanto, se le asignó un valor de 0. Lo segundo que se hizo para eliminar los nulos de esta columna fue asignarle el valor de la moda de la agrupación al nivel de Semestre, Anio, Seccion y Actividad. Con estos dos cambios, logramos dejar en cero los valores nulos en esta columna. 24 Ahora, una vez con los datos nulos en cero, se procedió a corregir cualquier valor que no hiciera sentido del todo. En la limpieza, se identificaron varias actividades que en lugar de tener los puntos posibles con un valor en la escala de puntos netos, lo tenían, pero en la escala de porcentaje. Para corregir esto, se identificaron cuáles eran estas actividades y se filtró todo el dataset por cada actividad. Esto con el fin de identificar cuál era el valor en puntos posibles que tenía la actividad en otras secciones del mismo año. Con esa solución se logró disminuir en gran cantidad estas actividades cuyo puntos posibles era 100, pero no se arreglaron todas, ya que por alguna razón habían ciertas actividades que solo se hacían en una sección en específico. Para solucionar estas últimas actividades, ya que no se querían eliminar del dataset, lo que se realizó fue filtrar por año, sección y semestre y obtener el puntaje acumulado que tenían las columnas. Una vez ya se tenía el puntaje acumulado, se le restó 100 (la nota que tiene que tener un curso) y ese valor que restaba fue dividido entre las actividades que estaban con 100 puntos. Ya teniendo el residuo, fue asignado para quitarles el valor de 100 en puntos posibles y dejarlo todo en la escala de puntos netos. Figura 5.8: Actividades mostrando la diferencia de los valores puros vs los valores luego de la limpieza Fecha de calificación La columna FechaCalificacion, a comparación de PuntosPosibles, fue mucho más sencilla. La cantidad de nulos en un inicio era de 4,216. Viendo de dónde podían venir la cantidad de nulos en la FechaCalificacion, se intentó encontrar alguna relación con la Nota. Resultó que siempre que la FechaCalificacion es nulo, también lo es la nota, lo cual puede indicar que esta actividad no se hizo y no tiene nota ni FechaCalificacion ya que en el portal no salía como entregada la actividad y el auxiliar/catedrático no le asignó puntos como tal. Para solucionar los valores nulos en la FechaCalificacion, se tuvo que comparar este estudiante contra el resto de la clase. Esto se hizo al obtener la fecha mínima de Calificación que resultaba de la agrupación a nivel de Semestre, Anio, Seccion y Actividad. Luego de aplicar esta forma de tratar los nulos, el resultado era el esperado, cero nulos en esta columna. 25 Figura 5.9: Valores nulos en la columna de FechaCalificacion y el valor final Fecha de vencimiento La columna FechaVencimiento, al igual que FechaCalificación, no presentó dificultad a la hora de intentar llenar los valores faltantes. Un patrón curioso, siempre que la FechaVencimiento es nula, la FechaTodoElDia tamnbién lo es. El trato de nulos fue muy parecida a la de FecCalificacion. Se hizo la misma agrupación y se obtuvo la fecha mínima que dio como resultado. Al mismo tiempo, no se intentó de forma muy extensa quitar todos los nulos ya que era una columna que desde un principio no se vio mucho potencial, ya sea para ayudar con la predicción o para generar nuevas variables. El resultado de la limpieza a la columna FecVencimiento fue disminuir la cantidad de nulos de 3,770 a 2,451. Figura 5.10: Valores nulos en la columna de FechaVencimiento y el valor final 26 Fecha todo el día El caso de FechaTodoElDia era algo diferente a los casos de las dos fechas anteriores. A diferencia de las dos anteriores, esta columna iba a servir mucho, no sólo para la creación de variables, sino que también para ayudar a generar una línea del tiempo. La línea del tiempo es vital para terminar de crear la tabla base en el nivel de agrupación que escojamos y también, para poder ubicar al estudiante en cada una de las semanas del semestre. Por último, tuvo mucha importancia en la segunda fase del proyecto, el poder determinar a partir de qué semana se puede tener una predicción confiable. Se empezó, teniendo 4,618 valores faltantes. Al igual que las dos fechas anteriores, se aplicó la misma agrupación para obtener la fecha mínima del resultado de la agrupación a nivel de Semestre, Anio, Seccion y Actividad. Figura 5.11: Valores nulos en la columna de FechaTodoElDia y el valor final, algunos valores con nulo y otros con la fecha final A pesar del intento anterior, todavía quedaron varios registros con valor nulo. Debido a la im- portancia que tenía esta columna, no se podían dejar esos registros con nulo. Por ende, se procedió a ponerle la FechaCalificacion como la FechaTodoElDia. La decisión fue tomada de esta forma sobre poner FechaVencimiento por dos razones. Uno fue porque FechaCalificacion no tenía valores nulo, en cambio FechaVencimiento sí. La segunda, fue porque nos interesa más tener esa actividad en la fecha que fue calificada que en la fecha que se vencía (sabiendo que no siempre se encontraría fecha). Luego, de hacerte este arreglo, no quedaron valores nulos en la columna. 27 Figura 5.12: Valores nulos en la columna de FechaTodoElDia y el valor final, sin valores nulos Tipo de entrega La columna TipoEntrega, era un caso especial, parecido al de FechaVencimiento. El único intento de eliminar los valores nulos fue aplicar la moda de la agrupación a nivel de Semestre, Anio, Seccion y Actividad. Tipo de envío La columna TipoEnvio, era un caso especial, parecido al de FechaVencimiento y TipoEntrega. El único intento de eliminar los valores nulos fue aplicar la moda de la agrupación a nivel de Semestre, Anio, Seccion y Actividad. La razón por la que no se hizo mucho esfuerzo para las columnas de TipoEntrega, TipoEnvio, y FechaVencimiento es porque no se podían realizar muchas nuevas variables utilizando estas columnas. Se intentaron quitar la mayoría con la agrupación, pero luego no fueron aplicadas más técnicas. Nota A diferencia del resto de columnas, con excepción de FechaTodoElDia, esta es de las columnas más importantes del dataset. Esta columna es la que sirvió luego para poder realizar nuestra y y poder identificar luego quiénes son los que aprobaron y reprobaron el curso. En cuando a disminuir la cantidad de valores nulos, no se hizo nada ya que con la nota no se puede aplicar ningún tipo de técnica sin que altere el resultado final. Por lo tanto, se asumieron que todos los registros que tenían valor nulo es porque no entregaron la tarea, por ende, se sustituyó el nulo con 0. A pesar de que no se pudieron reducir los nulos en la Nota, sí se hizo limpieza sobre la columna. El primer caso, era todos aquellos que tenían una Nota mayor a los PuntosPosibles en alguna actividad. Habían dos tipos de este caso, uno donde la Nota tenía el símbolo de porcentaje ( %) y otro donde 28 no. Para ambos casos, la escala estaba sobre ciento. Entonces, la solución fue quitar el porcentaje de la nota, para los casos que aplicara y aplicar la siguiente fórmula: nota_tmp = Nota 100 ∗ PuntosPosibles Figura 5.13: Nota en la escala de porcentajes Figura 5.14: Nota en la escala de porcentajes con el símbolo % Ya corregido este caso, quedó como resultado lo siguiente: 29 Figura 5.15: Nota en la escala de porcentajes con el símbolo % El siguiente caso que se tuvo que tratar fue en donde una misma Actividad aparecía dos veces con diferente nota y en casos, con diferentes PuntosPosibles. A veces, estas actividades aparecían con diferente FechaTodoElDia y FechaCalificacion. Esto ayudó al momento de corregir este caso ya que se hizo una validación para verificar que se obtuviera la Nota con la última FechaCalificacion para obtener la más reciente, siempre y cuando no fuera nula. A continuación un ejemplo del caso: Figura 5.16: Misma Actividad con diferente Nota y FechasCalificacion Como último caso a tratar con la Nota fue que habían algunas actividades que en lugar de tener nota numérica, tenían complete e incomplete y en la columna de TipoCalificacion tenían el valor pass_fail. La solución a este caso fue sencillo, si tenía como Nota complete, se le asignaba el valor que tenía en la columna PuntosPosibles, en caso el valor fuera incomplete, se le asignaba 0. 30 Figura 5.17: Actividad con Nota complete e incomplete Con este último caso, completamos la limpieza y tratamiento de nulos a todas las variables que fueron de interés para las siguientes fases. 5.3.2. Feature engineering Ya habiendo terminado con toda la limpieza y tratamiento de nulo, el siguiente paso fue hacer Feature Egineering. Lo primero que se hizo durante este paso, fue quedarnos con solo una observación por la combinación de Sección - Anio - Semestre - Actividad - NombreEst - Est_ID. Hasta el momento, se tienen casos en donde hay más de una observación en la combinación que se acaba de mencionar. Para lograr tener una sola observación, se hizo una agrupación y se obtuvo el último valor que aparecía. Esto fue hecho gracias a la función last de Spark. Esta función, si uno se lo especifica (es el True del código siguiente), puede obtener el último valor que no sea nulo entonces, era lo que se necesitaba para lograr el objetivo. 1 df_agg = df9.groupBy( 2 "Curso", 3 "Semestre", 4 "Seccion", 5 "Anio", 6 "Actividad", 7 "NombreEst", 8 "Est_ID" 9 ).agg( 10 f.last("ptos_posibles", True).alias("puntos_posibles"), 11 f.last("nota_tmp", True).alias("nota_tmp"), 12 f.last("RevisionPares", True).alias("en_parejas"), 13 f.last("CantComentarios", True).alias("qty_comentarios"), 14 f.last("is_not_null", True).alias("no_es_nullo"), 15 f.last("proportion_nulls", True).alias("proposion_nulos"), 16 f.last("proportion_nulls_p_student", True).alias("proportion_nulls_p_student"), 17 f.last("fec_calificacion", True).alias("fec_calificacion"), 18 f.last("fec_venc", True).alias("fec_venc"), 19 f.last("fec_dia_entrega", True).alias("fec_entrega"), 20 f.last("tip_entrega", True).alias("tip_entrega"), 21 f.last("tip_envio", True).alias("tip_envio") 22 ) Listing 5.1: Código para obtener el nivel de agrupación en Sección - Anio - Semestre - Actividad - NombreEst - Est_ID 31 Aplicar este código en el dataset redujo los datos de 79,797 a 76,948. Una vez ya teniendo este nivel de agregación, en donde solo tenemos un registro Sección - Anio - Semestre - Actividad - NombreEst - Est_ID, se procedió a la creación de nuevas variables. Las variables creadas en esta etapa fueron las siguientes: nota acumulada por estudiante la nota final del estudiante nota acumulada por curso nota final del curso si es la primera que el estudiante se cursa el curso Las variables anteriores, fueron creadas con el siguiente código: 1 df10 = df_agg.withColumn( 2 "nota_acumulada", 3 f.sum("nota_tmp").over( 4 Window.partitionBy("Est_ID", "Anio", "Semestre").orderBy("fec_entrega"). rangeBetween(Window.unboundedPreceding , Window.currentRow) 5 ) 6 ).withColumn( 7 "nota_final", 8 f.max("nota_acumulada").over( 9 Window.partitionBy("Est_ID", "Anio", "Semestre") 10 ) 11 ).withColumn( 12 "aprobado", 13 f.when(f.col("nota_final") > 61, 1) 14 .otherwise (0) 15 ).withColumn( 16 "semestre_anio", 17 f.concat(f.col("Semestre"), f.lit("-"), f.col("Anio")) 18 ).withColumn( 19 "is_first_time", 20 f.when( 21 f.min("semestre_anio").over( 22 Window.partitionBy("Est_ID").orderBy("Anio").rangeBetween(Window. unboundedPreceding , 0) 23 ) == f.col("semestre_anio"), 1 24 ) 25 .otherwise (0) 26 ).withColumn( 27 "nota_acumulada_curso", 28 f.sum("puntos_posibles").over( 29 Window.partitionBy("Est_ID", "Anio", "Semestre").orderBy("fec_entrega"). rangeBetween(Window.unboundedPreceding , Window.currentRow) 30 ) 31 ).withColumn( 32 "nota_curso_final", 33 f.max("nota_acumulada_curso").over( 34 Window.partitionBy("Est_ID", "Anio", "Semestre") 35 ) 36 ) Listing 5.2: Código para la creación de nuevas variables de nota final y aprobado Lo siguiente fue crear el timeline por estudiante. Para esto, se obtuvo la fecha mínima y máxima del estudiante y las modas de ambas fechas. Esto se obtuvo de la columna fec_entrega. Una vez ya teníamos la fecha mínima y máxima y las modas de ambas, obteníamos la semana del año a la que pertenecían esas fechas. Se restó la semana del año de la fecha máxima con la mínima, para obtener 32 la duración del curso en semanas. Para ubicar al estudiante dependiente de la fec_entrega que tenía la Actividad, lo que se hizo fue obtener la semana del año de esa actividad. A la longitud del curso en semanas, se le restaba la semana de la fecha máxima con la resta de la semana de la actividad. La fórmula era: week_course = length_weeks− (weekofyear(mode_max_fec)− weekofyear(fec_entrega)) El código es el siguiente: 33 1 df_fec_curso = df_final_f.withColumn( 2 "fec_entrega", 3 f.when( 4 (f.year(f.col("fec_entrega")) != f.col("Anio")), f.concat(f.col("Anio"), f. lit("-"), f.month(f.col("fec_entrega")), f.lit("-"), f.dayofmonth(f.col(" fec_entrega"))).cast("date") 5 ) 6 .otherwise(f.col("fec_entrega")) 7 ).withColumn( 8 "fec_entrega", 9 f.mode(f.col("fec_entrega")).over( 10 Window.partitionBy("Semestre", "Anio", "Seccion", "Actividad") 11 ) 12 ).withColumn( 13 "min_fec", 14 f.min(f.col("fec_entrega")).over( 15 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID") 16 ) 17 ).withColumn( 18 "max_fec", 19 f.max(f.col("fec_entrega")).over( 20 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID") 21 ) 22 ).withColumn( 23 "mode_min_fec", 24 f.mode(f.col("min_fec")).over( 25 Window.partitionBy("Semestre", "Anio", "Seccion") 26 ) 27 ).withColumn( 28 "mode_max_fec", 29 f.mode(f.col("max_fec")).over( 30 Window.partitionBy("Semestre", "Anio", "Seccion") 31 ) 32 ).withColumn( 33 "week_year", 34 f.weekofyear(f.col("fec_entrega")) 35 ).withColumn( 36 "length_weeks", 37 f.weekofyear(f.col("mode_max_fec")) - f.weekofyear(f.col("mode_min_fec")) 38 ).withColumn( 39 "week_course", 40 f.col("length_weeks") - (f.weekofyear(f.col("mode_max_fec")) - f.weekofyear(f.col( "fec_entrega"))) 41 ).filter( 42 f.col("Actividad") != "Ejemplo Parcial 3 Cálculo" 43 ).withColumn( 44 "fec_entrega", 45 f.when( 46 f.col("week_course") < 0, f.col("fec_calificacion").cast("date") 47 ) 48 .otherwise(f.col("fec_entrega")) 49 ).withColumn( 50 "week_course", 51 f.col("length_weeks") - (f.weekofyear(f.col("mode_max_fec")) - f.weekofyear(f.col( "fec_entrega"))) 52 ) Listing 5.3: Código para obtener la fecha inicial y final del curso y ubicar al estudiante en una semana del semestre El siguiente paso, fue crear una variable con la que se pudieran categorizar algunas tareas. Luego de toda la limpieza, tratamiento de nulos, y la exploración que se tuvo realizando los dos pasos anteriores, se identificaron las siguientes categorías: Parciales, Proyectos, Cortos, Simulacros, y Refuerzo. La principal razón por la que se decidió hacer esta categorización de actividades es porque dentro de la columna de Actividades habían muchos nombres distintos entonces, el intentar 34 convertir estos nombres en variables iba a aumentar mucho la dimensionalidad del modelo. También, para poder crear nuevas variables que nos indiquen los cambios porcentuales entre la última actividad de la misma actividad. El código para hacer la categorización de actividades, indicando qué toma y no toma en cuenta para cada categoría es el siguietne: 1 df_tip_act = df_fec_curso.withColumn( 2 "tipo_actividad", 3 f.when( 4 ( 5 (f.col("puntos_posibles") >= 15) | 6 (f.lower(f.col("Actividad")).contains("parcial")) | 7 (f.lower(f.col("Actividad")).contains("examen")) | 8 (f.lower(f.col("Actividad")).contains("final")) | 9 (f.lower(f.col("Actividad")).contains("evaluación")) 10 ) & 11 ( 12 ~( 13 (f.lower(f.col("Actividad")).contains("proyecto")) | 14 (f.lower(f.col("Actividad")).contains("asincrónica")) | 15 (f.lower(f.col("Actividad")).contains("corto")) | 16 (f.lower(f.col("Actividad")).contains("discusión")) | 17 (f.lower(f.col("Actividad")).contains("ejerci")) | 18 (f.lower(f.col("Actividad")).contains("ejemplo")) | 19 (f.lower(f.col("Actividad")).contains("tarea")) | 20 (f.lower(f.col("Actividad")).contains("auto")) | 21 (f.lower(f.col("Actividad")).contains("trabajo")) 22 ) 23 ), "parcial" 24 ).when( 25 (f.lower(f.col("Actividad")).contains("proyecto")), "proyecto" 26 ).when( 27 (f.lower(f.col("Actividad")).contains("verificación")) | 28 (f.lower(f.col("Actividad")).contains("comprobación")) | 29 (f.lower(f.col("Actividad")).contains("corto")) | 30 (f.lower(f.col("Actividad")).contains("corta")), "corto" 31 ).when( 32 ( 33 (f.lower(f.col("Actividad")).contains("simulacro")) 34 ) & 35 ( 36 ~(f.lower(f.col("Actividad")).contains("ejercicios")) 37 38 ), "simulacro" 39 ).when( 40 (f.lower(f.col("Actividad")).contains("ejercicio")) | 41 (f.lower(f.col("Actividad")).contains("ejercitación")) | 42 (f.lower(f.col("Actividad")).contains("tarea")) | 43 (f.lower(f.col("Actividad")).contains("hoja de trabajo")) | 44 (f.lower(f.col("Actividad")).contains("hojas de trabajo")) | 45 (f.lower(f.col("Actividad")).contains("h.t.")) | 46 (f.lower(f.col("Actividad")).contains("ht")) | 47 (f.lower(f.col("Actividad")).contains("repaso")), "ejercicios" 48 ) 49 .otherwise("refuerzo") 50 ) Listing 5.4: Código para la categorización de actividades Ahora, al ya tener las categorizaciones hechas, se pudo calcular variables como promedios en cada una de los tipos de actividad y el promedio porcentual de las actividades. Esto se hizo de la siguiente forma: 35 1 .withColumn( 2 "prom_tipo_actividad", 3 f.when( 4 f.col("tipo_actividad") == "tipo_actividad", f.avg(f.col("nota_tmp")).over( 5 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID", " tipo_actividad").orderBy(f.col("week_course")).rangeBetween(Window. unboundedPreceding , 0) 6 ) 7 ) 8 ).withColumn( 9 "prom_tipo_actividad_por", 10 f.when( 11 f.col("tipo_actividad") == "tipo_actividad", f.avg(f.col("nota_tmp")/f.col(" puntos_posibles")).over( 12 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID", " tipo_actividad").orderBy(f.col("week_course")).rangeBetween(Window. unboundedPreceding , 0) 13 ) 14 ) 15 ) Listing 5.5: Código para obtener los promedios de los puntos netos y del porcentaje de cada tipo de actividad Teniendo estas nuevas variables creadas, se procedió con el siguiente paso, que consistía en reducir el nivel de agrupación del dataset nuevamente. Anteriormente, se tenía en Sección - Anio - Semestre - Actividad - NombreEst - Est_ID. Para este paso, se necesitaba que estuviera en Semestre - Seccion - Anio - NombreEst - Est_ID - week_course. Esto se hizo con el fin de poder tener una observación por semana por estudiante. Se decidió llegar a este nivel de agregación porque esto es lo que tendría que recibir el modelo para poder analizar semana por semana quiénes van a aprobar o reprobar. El código es el siguiente: 36 1 df_final_agg = df_proms.groupBy( 2 "Curso", 3 "Semestre", 4 "Seccion", 5 "Anio", 6 "NombreEst", 7 "Est_ID", 8 "week_course" 9 ).agg( 10 f.max("length_weeks").alias("duracion_curso"), 11 f.max("nota_acumulada").alias("nota_acumulada_estudiante"), 12 f.sum("nota_tmp").alias("nota_semana_estudiante"), 13 f.max("nota_acumulada_curso").alias("nota_acumulada_curso"), 14 f.sum("puntos_posibles").alias("nota_semana_curso"), 15 f.max("qty_comentarios").alias("tqy_comentarios"), 16 f.max("aprobado").alias("aprobado"), 17 f.max("is_first_time").alias("primera_asignacion"), 18 f.last("prom_parciales").alias("prom_parciales"), 19 f.last("prom_parciales_por").alias("prom_parciales_por"), 20 f.last("prom_proyectos").alias("prom_proyectos"), 21 f.last("prom_proyectos_por").alias("prom_proyectos_por"), 22 f.last("prom_cortos").alias("prom_cortos"), 23 f.last("prom_cortos_por").alias("prom_cortos_por"), 24 f.last("prom_simulacros").alias("prom_simulacros"), 25 f.last("prom_simulacros_por").alias("prom_simulacros_por"), 26 f.last("prom_refuerzos").alias("prom_refuerzos"), 27 f.last("prom_refuerzos_por").alias("prom_refuerzos_por"), 28 f.last("prom_ejercicios").alias("prom_ejercicios"), 29 f.last("prom_ejercicios_por").alias("prom_ejercicios_por") 30 ).fillna( 31 value = 0, 32 subset = [ 33 "prom_parciales", 34 "prom_parciales_por", 35 "prom_proyectos", 36 "prom_proyectos_por", 37 "prom_cortos", 38 "prom_cortos_por", 39 "prom_simulacros", 40 "prom_simulacros_por", 41 "prom_refuerzos", 42 "prom_refuerzos_por", 43 "prom_ejercicios", 44 "prom_ejercicios_por" 45 ] 46 ) Listing 5.6: Código para obtener el nivel de agregación Semestre - Seccion - Anio - NombreEst - Est_ID - week_course Con lo que tenemos hasta el momento, pareciera que ya terminamos esta fase y estamos listos para cambiar de paso del proyecto, pero no hay un problema. Actualmente sólo se tienen las semanas en donde hubo una actividad. Hay semanas en donde el estudiante no aparece, ya sea porque no se calificó nada o no se entregaba nada o simplemente no aparecía en el API de Canvas. Esto afecta al entrenamiento del moelo porque no se van a tener siempre los mismos datos dependiendo de la semana que se esté evaluando. 37 Figura 5.18: Saltos entre semanas, no hay una secuencia seguida Para corregir lo anterior, lo que se hizo fue hacer una copia del dataset. A esta copia del dataset, se determinó la semana mínima que aparece un estudiante. Con esto, se obtuvo una secuencia de las semanas desde la primera hasta la última fecha. Teniendo la secuencia, se modificó el dataset para que quedara un registro por cada semana obtenido por la secuencia. Teniendo esta secuencia, se le hizo un left join al dataset original. Esto nos dió como resultado el dataset original, pero con las semanas que anteriormente no estaban con valor nulo en todas las columnas. Para arreglar y quitar los valores nulos, se aplicó nuevamente la función last para que obteniera los datos de la última semana que no fuera nulo el dato. El código es el siguiente: 38 1 df_fec_completas = .withColumn( 2 "min_week", 3 f.min(f.col("week_course")).over( 4 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(" week_course") 5 ) 6 ).groupBy( 7 "Curso", 8 "Semestre", 9 "Seccion", 10 "Anio", 11 "NombreEst", 12 "Est_ID", 13 "min_week", 14 "duracion_curso" 15 ).agg( 16 ## APLICAMOS LA FUNCION sequence PARA OBTENER UNA SECUENCIA DESDE LA FECHA MINIMA 17 ## HASTA LA FECHA MAXIIMA DADA EN UNA LISTA 18 f.sequence("min_week", "duracion_curso").alias("semanas") 19 ).withColumn( 20 "week_course", 21 ## CON LA FUNCION EXPLODE , PODEMOS CONVERTIR UNA COLUMNA QUE ES UNA LISTA A 22 ## UNA FILA POR ELEMENTO DE LA LISTA 23 f.explode("semanas") 24 )drop("semanas", "min_week", "duracion_curso").join( 25 ## HACEMOS LEFT -JOIN PARA GENERAR ESAS SEMANAS "VACIAS" 26 df_final_agg , 27 ["Curso", "Semestre", "Seccion", "Anio", "NombreEst", "Est_ID", "week_course"], 28 "left" 29 ) 30 31 ## LLENAMOS LOS VALORES NULOS DE CADA COLUMNA CON EL ULTIMO VALOR NO NULO 32 for i in df_fec_completas.columns: 33 df_fec_completas = df_fec_completas.withColumn( 34 i, 35 f.when( 36 f.col(i).isNull (), f.last(f.col(i), True).over( 37 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(f .col("week_course")) 38 ) 39 ) 40 .otherwise(f.col(i)) 41 ) Listing 5.7: Código para obtener aquellas semanas en las que un estudiante no apareciera 39 Figura 5.19: Ya no hay saltos entre semanas Como último paso de Feature Engineering, se calcularon variables de cambio para cada una de las actividades. La temporalidad que se escogió para hacer estas variables de cambio es 3 y 5 semanas. También, se creó una nueva variable que indicaba el porcentaje de puntos que un estudiante obtuvo durante cada semana. El código para las variables es el siguiente: 40 1 df_final_final = df_fec_completa.withColumn( 2 "por_puntos_obtenidos_semana", 3 f.when( 4 f.col("nota_semana_curso") == 0, f.col("nota_semana_estudiante") / (f.col(" nota_semana_curso") + 0.00001) 5 ) 6 .otherwise(f.col("nota_semana_estudiante") / f.col("nota_semana_curso")) 7 ).withColumn( 8 "prom_tipo_actividad_3w", 9 f.avg(f.col("prom_tipo_actividad")).over( 10 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(" week_course").rangeBetween(-3, Window.currentRow) 11 ) 12 ).withColumn( 13 "prom_tipo_actividad_5w", 14 f.avg(f.col("prom_tipo_actividad")).over( 15 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(" week_course").rangeBetween(-5, Window.currentRow) 16 ) 17 ).withColumn( 18 "prom_tipo_actividad_por_3w", 19 f.avg(f.col("prom_tipo_actividad_por")).over( 20 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(" week_course").rangeBetween(-3, Window.currentRow) 21 ) 22 ).withColumn( 23 "prom_tipo_actividad_por_5w", 24 f.avg(f.col("prom_tipo_actividad_por")).over( 25 Window.partitionBy("Semestre", "Anio", "Seccion", "Est_ID").orderBy(" week_course").rangeBetween(-5, Window.currentRow) 26 ) 27 ) Listing 5.8: Código para obtener los promedios de 3 y 5 semanas para atrás El resultado de Feature Engineering fue obtener un dataset de 51,620 registros y 52 columnas. 5.3.3. Selección de variables En esta parte del proceso, se analizó el impacto de las diferenres variables en los modelos. 1. Se hizo una búsqueda para obtener el listado de variables constantes o cuasi constantes. Esto sirve ya que se eliminaron estas variables. La razón detrás es porque cuando una variables es constante o cuasi constante, no le aporta nada al modelo. El modelo no puede aprender de una variables que es o siempre la misma o casi siempre al misma. Por esta razón, se eliminaron las variables que resultaron ser constantes o cuasi constantes. Las variables que se eliminaron durante este proceso fueron: week_course prom_proyectos prom_proyectos_por prom_proyectos_3w prom_proyectos_5w prom_proyectos_por_3w prom_proyectos_por_5w len_course 41 5.3.4. Escoger el mejor algoritmo Durante esta etapa, se utilizó todo lo que se había trabajando previamente. Se utilizó el dataset que se estuvo trabajando en la limpieza y exploración y las nuevas variables y el nivel de agregación de Selección de Variables. En esta última parte de la primera fase, se unió el proceso de Selección de Variables con el entrenamiento del modelo. Esto se hizo debido a la técnica de Selección de Variables que se está utilizando. Durante esta parte, se decidió entrenar y evaluar en la semana 16 (no equivale a la semana 16 del semestre). Se cargaron los datos luego de hacerles la limpieza y después de pasar por una primera fase de Selección de Variables. Al tener cuatro años (2019, 2020, 2021, 2022) de información, se decidió que el dataset de entrenamiento iba a ser todo 2019, 2020, 2021 y el primer semestre de 2022. Lo que nos deja con el segundo semestre de 2022 como dataset de test. Primero, se separó la información de entrenamiento y la de prueba. Segundo, se balancearon los datos de entrenamiento, es decir, la misma cantidad de estudiantes aprobados y reprobados. Para lograr este balanceo, lo que se utilizó fue Random Under Sampling, reduciendo la población de alumnos que aprobaron el curso. Tercero, se eliminaron las variabels constantes y quasi-constantes. Cuarto, previo a empezar con el entrenamiento (para algunos modelos), se normalizó la data. Quinto, una vez ya normalizada la data (si es necesario, dependoiendo el modelo a evaluar), se procedió a hacer el entrenamiento de los modelos. En el entrenamiento del modelo, se realizaron pruebas con los siguientes algoritmos: Support Vector Machine (SVM), Gradient Boosted Trees (GBT), Regresión Logística (LR), KNN, y Redes Neuronales (NN). Para cada algoritmo se utilizaron parámetros aleatorios y Cross Validation. Una vez entrenado el modelo con todas las variables y obtenidas sus métricas, se hizo el proceso de Recursive Feature Elimination (RFE) para eliminar las variables que no tenían un aporte significativo al modelo. Después de eliminar esas variables, se repitió el proceso de entrenamiento y recopilación de métricas. Este proceso fue repetido para cada uno de los algoritmos que se evaluaron. 42 Figura 5.20: Diagrama que muestra el proceso de RFE [17] 43 Figura 5.21: Diagrama de flujo del proceso sin Selección de Variables Figura 5.22: Diagrama de flujo del proceso con Selección de Variables 44 Una vez ya se habían ejecutado todos los modelos, se recopilaron todas las métricas y fueron analizados por medio de gráficas para poder determinar cuál de todos los algoritmos tenía el mejor desempeño en identificar a aquellos estudiantes que reprueban el curso. También, se analizaron los resultados comparando los resultados obtenidos previo y después de aplicarle Selección de Variables. Por último, se seleccionó el mejor modelo. 5.4. Segunda etapa Una vez obtenidos los resultados de la primera fase, se procedió a determinar qué tan temprano se puede llegar a predecir con una precisión en los alumnos reprobados mayor o igual a 75 % a un estudiante que va a reprobar el curso. Para esta fase se repitieron muchos de los pasos que se realizaron durante la primera fase. La diferencia, es que ahora varió el tiempo con el que con el cual las variables fueron calculadas. Como se dijo anteriormente, se repitió todo lo que se hizo en la primera fase. Esto incluye el proceos de Selección de Variables, el probar con todos los algoritmos mencionados antes y después de aplicarles Selección de Variables, y la forma de analizar los resutlados. Figura 5.23: Diagrama de flujo de la segunda etapa del proyecto 45 CAPÍTULO 6 Resultados Durante el proyecto fueron realizados 14 pruebas y análisis para poder determinar qué combi- nación entre aplicación de Selección de Variables y algoritmo es el que mejor logra predecir qué estudiantes van a reprobar un el curso de Cálculo 1. La primera prueba realizada fue para lograr encontrar el algoritmo que mejor desempeño tenía utilizando 16 semanas sin ningún tipo de trans- formación en los datos. El segundo, fue replicar la misma prueba que la primera pero aplicando técnicas de Selección de Variables como Recursive Feature Elimination. Cabe mencionar que du- rante las 14 pruebas, se estuvieron utilizando los mismos algoritmos (con parámetros aleatorios), mismas métricas, y un método de 5 cross-fold validation. 6.1. Primera etapa Modelo Precision Accuracy Sensitivity Specificity F1 SVM 0.916 0.927 0.995 0.698 0.954 GBT 0.898 0.901 0.983 0.627 0.938 LR 0.859 0.873 1.0 0.452 0.924 KNN 0.819 0.76 0.883 0.349 0.85 NN 0.769 0.769 1.0 0.0 0.869 Tabla 6.1: Métricas: primer análisis - 16 semanas - ningún método de Selección de Variables Durante el primer análisis, en donde no se aplicó ningún método de Selección de Variables luego del proceso de limpieza y Feature Engineering, se obtuvieron los resultados de la Tabla 6.1. Se lograron obtener modelos con buenas métricas. El SVM llegó a obtener 93.7 % en Acurracy, el puntaje más alto. El resto de algoritmos tuvieron un desempeño de 76.9% para arriba. 46 Modelo VN FP FN VP SVM 88 38 2 417 GBT 79 47 7 412 LR 57 69 0 419 KNN 44 82 49 370 NN 0 126 0 419 Tabla 6.2: Matriz de confusión: primer análisis - 16 semanas - ningún método de Selección de Variables Figura 6.1: Matriz de confusión de SVM Figura 6.2: Matriz de confusión de GBT Figura 6.3: Matriz de confusión de LR Figura 6.4: Matriz de confusión de KNN 47 Figura 6.5: Matriz de confusión de NN Al ver la Tabla 6.2, podemos ver cómo es que los modelos esetán separando a los estudiantes entre estudiantes que aprueban y reprueban. Al ver más a detalle cómo los modelos asignaban a los estudiantes, se pudo observar que las métricas obtenidas en la Tabla 6.1 eran un poco engañosas. Se puede observar que todos los modelos asignan muy bien a los estudiantes que aprueban los cursos, siendo el mejor LR y NN. A pesar de saber identificar los estudiantes que aprueban los cursos, que no están asignando estudiantes en alguna de las categorías. También, se puede observar que el SVM es el que más asigna estudiantes que reprobaron el curso de forma correcta. Para este segundo análisis, se mantuvo el tiempo de entrenamiento (16 semanas), los mismos algoritmos, y las mismas transformaciones durante el proceso de limpieza y Feature Engineering. A diferencia del primer análisis, se aplicó el método de Selección de Variables llamado Recursive Feature Elimination (RSE). En conjunto, el método de RSE, la eliminación de variables constantes y cuasi-constantes, se eliminaron un total de 20 variables, entre ellas estaban: Variable Descipción Método Est_ID Identificador único del estudiante RFE week_course Semana en la que se encuentra el estu- diante dentro del semestre Cuasi-Constante nota_acumulada_curso Puntos que se llevan del curso, obtenida de los puntos posibles de las actividades RFE prom_parciales_por Promedio obtenido de los puntos netos obtenidos durante esa semana del tipo de actividad que corresponda a parcia- les RFE prom_proyectos Promedio obtenido de los puntos netos obtenidos durante esa semana del tipo de actividad que corresponda a proyec- tos Cuasi-Constante prom_proyectos_por Promedio obtenido del porcentaje obte- nido de la actividad durante esa semana del tipo de actividad que corresponda a proyectos Cuasi-Constante 48 prom_simulacros_por Promedio obtenido del porcentaje obte- nido de la actividad durante esa semana del tipo de actividad que corresponda a simulacros RFE prom_refuerzos_por Promedio obtenido del porcentaje obte- nido de la actividad durante esa semana del tipo de actividad que corresponda a refuerzos RFE prom_ejercicios Promedio obtenido de los puntos netos obtenidos durante esa semana del tipo de actividad que corresponda a ejerci- cios RFE prom_ejercicios_por Promedio obtenido del porcentaje obte- nido de la actividad durante esa semana del tipo de actividad que corresponda a ejercicios RFE por_puntos_obtenidos_semana Porcentaje de los puntos obtenidos de la semana RFE prom_parciales_5w Promedio del tipo de actividad que co- rresponda a parciales. Es calculada ob- teniendo el promedio de los puntos ne- tos de las últimas 5 semanas de donde se está parado para atrás RFE prom_proyectos_3w Promedio del tipo de actividad que co- rresponda a proyectos Cuasi-Constante prom_proyectos_5w Promedio del tipo de actividad que co- rresponda a proyectos Cuasi-Constante prom_proyectos_por_3w Promedio del tipo de actividad que co- rresponda a proyectos Cuasi-Constante prom_proyectos_por_5w Promedio del tipo de actividad que co- rresponda a proyectos Cuasi-Constante prom_cortos_5w Promedio del tipo de actividad que co- rresponda a cortos RFE prom_refuerzos_por_3w Promedio del tipo de actividad que co- rresponda a proyectos RFE prom_ejercicios_5w Promedio del tipo de actividad que co- rresponda a ejercicos RFE len_course Longitud en semanas que dura el curso Contante Tabla 6.3: Lista de variables que se eliminaron del conjunto de datos junto a su descripción y el método por el que fueron eliminadas Luego de aplicar los métodos de Selección de Variables se obtuvo un listado de variables a eliminar (Tabla 6.3). Al eliminar las variables anteriores, el conjunto de datos final contenía las variables que se encuentran en la Tabla 6.4. 49 Variable Descripción Semestre Semestre en el que se está cursando Seccion Sección a la que el estudiante está asignado Anio Año en el cual el estudiante está cursando el curso duracion_curso Duración que tiene el curso en semanas nota_semana_estudiante Puntos netos obtenidos durante la semana nota_semana_curso Puntos netos posibles del curso tqy_comentarios Suma de la cantidad de comentarios que se tienen en las actividades de la semana primera_asignacion Indicador si es la primera vez que un estudiantes toma el curso de cálculo 1 prom_parciales Promedio de los puntos netos obtenidos en el tipo de acti- cidad que corresponde a parcialesdurante la semana prom_cortos Promedio de los puntos netos obtenidos en el tipo de acti- cidad que corresponde a cortos durante la semana prom_cortos_por Promedio del porcentaje obtenido en el tipo de acticidad que corresponde a cortos durante la semana prom_simulacros Promedio de los puntos netos obtenidos en el tipo de acti- cidad que corresponde a simulacros durante la semana prom_refuerzos Promedio de los puntos netos obtenidos en el tipo de acti- cidad que corresponde a refuerzos durante la semana prom_refuerzos_por Promedio del porcentaje obtenido en el tipo de acticidad que corresponde a refuerzos durante la semana prom_parciales_3w Promedio de los puntos netos obtenidos en las últimas 3 semanas que corresponde al tipo de actividad parciales prom_parciales_por_3w Promedio de los porcentajes obtenidos en las últimas 3 se- manas que corresponde al tipo de actividad parciales prom_parciales_por_5w Promedio de los porcentajes obtenidos en las últimas 5 se- manas que corresponde al tipo de actividad parciales prom_cortos_3w Promedio de los puntos netos obtenidos en las últimas 3 semanas que corresponde al tipo de actividad cortos prom_cortos_por_3w Promedio de los porcentajes obtenidos en las últimas 3 se- manas que corresponde al tipo de actividad cortos prom_cortos_por_5w Promedio de los porcentajes obtenidos en las últimas 5 se- manas que corresponde al tipo de actividad cortos prom_simulacros_3w Promedio de los puntos netos obtenidos en las últimas 3 semanas que corresponde al tipo de actividad simulacros prom_simulacros_5w Promedio de los puntos netos obtenidos en las últimas 5 semanas que corresponde al tipo de actividad simulacros prom_simulacros_por_3w Promedio de los porcentajes obtenidos en las últimas 3 se- manas que corresponde al tipo de actividad simulacros 50 prom_simulacros_por_5w Promedio de los porcentajes obtenidos en las últimas 5 se- manas q