# Check if the dplyr package is installed; if not, install it
if(!require(dplyr)) install.packages("dplyr")
# Load the dplyr package
library(dplyr)
# Check if the statar package is installed; if not, install it
if(!require(caret)) install.packages("caret")
# Load the statar package
library(caret)
Caso de Estudio: Predicción de Retornos Anuales en Fondos de Renta Variable
FZ2022 Algoritmos y Análisis de Datos
1 Escenario:
Eres un gestor de fondos de renta variable con el objetivo de identificar qué empresas mejorarán su margen operativo (EBIT / Ventas) en el siguiente trimestre. Para ello, dispones de datos trimestrales financieros de varias empresas y deberás transformarlos en crecimientos porcentuales trimestrales para construir un modelo predictivo que ayude a anticipar el desempeño futuro de estas empresas.
2 Objetivo del Caso:
Desarrollar un modelo de Machine Learning para predecir si el margen operativo de una empresa crecerá porcentualmente o no, en términos trimestrales. Para esto, se requiere:
- A partir de los datos trimestrales, calcular el margen operativo para cada empresa.
- Crear la variable dependiente margen_operativo_p, que será igual a 1 si el crecimiento trimestral del margen operativo de la empresa es positivo y 0 en caso contrario.
- Calcular las variables independientes del modelo predictivo a partir de razones financieras.
- Construir un modelo de predicción y realizar una partición de datos en un conjunto de entrenamiento y prueba.
- Documentar detalladamente cada uno de los pasos e interpretar las salidas del modelo y sus resultados.
2.1 Instrucciones para la creación del documento de Colab
En Google Colab, DEBES INICIAR SESIÓN con tu cuenta @tec.mx y luego crear un cuaderno de Google Colab para la evidencia.
Debes compartir el documento de Colab conmigo por correo electrónico:
sergio.castellanos@tec.mx
Debes dar privilegios de Edición a esta cuenta.
En Google Colab, puedes trabajar con cuadernos de Python o R. Por defecto, los cuadernos están configurados para Python, por lo que debes ir a “Runtime” o “Entorno de Ejecución”, seleccionar “Change runtime type” o “Cambiar entorno de ejecución”, y luego seleccionar R (en lugar de Python).
Tu cuaderno tendrá un nombre predeterminado como “Untitled3.ipynb”. Haz clic en este nombre y cámbialo a “Evidencia_FZ2022_TuNombre_TuApellido”.
En tu Cuaderno del Taller, debes:
- Desarrollar y ejecutar todo el código R.
- Completar el caso siguiendo las instrucciones.
Para CUALQUIER PREGUNTA o INTERPRETACIÓN, debes RESPONDER EN MAYÚSCULAS justo después de la pregunta.
Asegúrate de EJECUTAR TODOS LOS BLOQUES DE CÓDIGO. Puedes ejecutar cada bloque de código haciendo clic en el botón “Run” ubicado en la parte superior izquierda de cada bloque. También puedes ejecutar todos los bloques a la vez con Ctrl-F9. Debes enviar el enlace web de tu evidencia en Google Colab a Canvas.
3 Instrucciones y Lineamientos
- Cálculo del Margen Operativo
- La base de datos contiene ventas y costos trimestrales, a partir de los cuales puedes calcular el margen operativo. El margen operativo se define como:
Margen\_Operativo = \frac{EBIT}{revenue}
donde:
EBIT = \text{revenue} - \text{cogs} - \text{sgae}
- El EBIT (Earnings Before Interest and Taxes) representa las ganancias antes de intereses e impuestos, calculado restando los costos operativos (cogs y sgae).
- Una vez calculado el margen operativo, es necesario estimar el cambio porcentual trimestral del margen operativo para capturar el crecimiento o disminución en comparación con el trimestre anterior. El cambio porcentual se calcula comparando el margen operativo actual con el margen del trimestre anterior:
Crecimiento\_Margen\_Operativo = \left( \frac{Margen\_Operativo_{t}}{Margen\_Operativo_{t-1}} - 1 \right)
donde:
- Margen_Operativo_{t} es el margen operativo del trimestre actual.
- Margen_Operativo_{t-1} es el margen operativo del trimestre anterior.
- La base de datos contiene ventas y costos trimestrales, a partir de los cuales puedes calcular el margen operativo. El margen operativo se define como:
Margen\_Operativo = \frac{EBIT}{revenue}
donde:
EBIT = \text{revenue} - \text{cogs} - \text{sgae}
- Creación de la Variable Dependiente: Margen Operativo Positivo
- Con el crecimiento porcentual del margen operativo calculado, se puede crear la variable dependiente margen_operativo_p, que será una variable binaria. Esta variable toma el valor de:
- 1 si el crecimiento del margen operativo es positivo, es decir, el margen operativo ha aumentado en términos trimestrales.
- 0 si el crecimiento del margen operativo es negativo o cero.
- Con el crecimiento porcentual del margen operativo calculado, se puede crear la variable dependiente margen_operativo_p, que será una variable binaria. Esta variable toma el valor de:
- Selección de Variables Independientes
- Crea dos variables independientes que ayuden a predecir si el crecimiento del margen operativo será positivo:
- Apalancamiento Financiero: \frac{longdebt}{totalassets} Relación entre la deuda a largo plazo y los activos totales de la empresa, lo cual nos indica el grado de apalancamiento.
- Crecimiento de Activos: El crecimiento trimestral de los activos totales, que mide el incremento o decremento de los activos de la empresa en comparación con el trimestre anterior. Se define como: Crecimiento\_de\_Activos = \left(\frac{totalassets_{t}}{totalassets_{t-1}}-1\right) donde:
- totalassets_{t} representa los activos totales del trimestre actual.
- totalassets_{t-1} representa los activos totales del trimestre anterior.
- Crea dos variables independientes que ayuden a predecir si el crecimiento del margen operativo será positivo:
- Construcción del Modelo de Machine Learning
- Usa un modelo de regresión logística con la variable dependiente margen_operativo_p y las dos variables independientes seleccionadas.
- División de Datos: Realiza una partición del 80/20 para entrenar y probar el modelo.
- Matriz de Confusión: Utiliza la matriz de confusión para evaluar la precisión del modelo y entender su capacidad predictiva.
- Interpretación de Resultados
- Interpreta los coeficientes del modelo logístico y discute qué variables resultaron ser más importantes o significativas.
- Reflexiona sobre cómo estas variables te ayudan a predecir si el crecimiento del margen operativo será positivo.
- Analiza la utilidad del modelo de Machine Learning a partir de la matriz de confusión, sus verdaderos positivos y negativos, así como sus falsos positivos y negativos.
4 Recursos Permitidos
- Puedes hacer uso de las soluciones de workshops anteriores y de tus notas personales para resolver el caso.
5 Reglas del Juego y Advertencias
- No está permitido el uso de inteligencia artificial generativa (ChatGPT, Gemini, etc.) para resolver el caso.
- Evita cometer FIAS (Faltas a la Integridad Académica):
- Citar o tomar trabajo de otros sin darle crédito correspondiente.
- Plagio o colaboración no permitida con otros compañeros.
- Tiempo asignado: 1 hora y 30 minutos.
- Elabora y documenta tu proceso de forma clara y estructurada, explicando cada decisión que tomes.
- No incluyas códigos que no sean necesarios. El objetivo no es hacer copy+paste de los workshops pasados.
6 Rúbrica de Evaluación
La rúbrica a continuación detalla los puntos asignados a cada sección clave del caso, con los porcentajes respectivos para cada criterio.
Criterio | Sobresaliente (100%) | Sólido (90%) | Básico (75%) | Incipiente (50%) | Porcentaje |
---|---|---|---|---|---|
1. Algoritmos y Manejo de Datos | Implementación correcta del manejo de datos con dplyr, creación precisa de la variable dependiente. | Manejo de datos correcto, pero con errores menores en el cálculo o en la creación de la variable dependiente. | Cálculo incorrecto de la variable dependiente, con errores evidentes en el manejo de los datos o el filtrado. | No se realiza el cálculo de la variable dependiente, ni el filtrado de los datos. | 30% |
2. Cálculo de Razones Financieras | Cálculo y selección clara de dos razones financieras relevantes y bien justificadas. | Cálculo correcto de razones financieras, pero con explicaciones superficiales o insuficientes. | Selección pobre o cálculo incorrecto de las razones financieras. | No se calculan ni seleccionan razones financieras. | 20% |
3. Modelo de Machine Learning | Modelo implementado correctamente con partición 80/20, matriz de confusión y análisis detallado de resultados. | Modelo implementado correctamente, pero con una interpretación incompleta o sin análisis profundo de resultados. | Implementación incompleta del modelo o errores en la partición de los datos y en la matriz de confusión. | No se implementa un modelo de Machine Learning. | 30% |
4. Interpretación de Resultados | Interpretación coherente y detallada de los resultados y su impacto en la predicción de los retornos. | Interpretación correcta, pero sin suficiente profundidad o análisis crítico. | Interpretación superficial o poco clara de los resultados. | No se realiza interpretación de resultados. | 20% |
¡Muchos éxitos!
7 Solución
7.1 Instalar y cargar las liberarías
7.2 Descargar los datos
# Descargar el archivo CSV del sitio web:
download.file("http://www.apradie.com/datos/uspanel1.csv", "uspanel1.csv")
# Importar el panel
<- read.csv("uspanel1.csv") uspanel
Lista de las variables en el dataset
head(uspanel)
firm q fiscalmonth revenue cogs sgae otherincome extraordinaryitems
1 BCPC 2021q1 3 185656 126929 28152 133 0
2 BCPC 2021q2 6 388021 269847 57006 167 0
3 BCPC 2021q3 9 585890 406782 85427 295 0
4 BCPC 2021q4 12 799023 555849 115672 187 0
5 BCPC 2022q1 3 228867 157361 33170 -161 0
6 BCPC 2022q2 6 465560 322178 65126 137 0
finexp incometax totalassets currentassets inventory totalliabilities
1 725 6572 1169215 281204 77022 319723
2 1333 13860 1173606 287263 78333 303964
3 1889 20932 1179349 300275 81925 290271
4 2456 29129 1199325 322232 91058 322310
5 545 8700 1194908 319804 108411 321226
6 1505 18176 1606674 377141 140840 705304
currentliabilities longdebt adjprice originalprice sharesoutstanding year
1 88763 172337 123.1968 125.41 32392.81 2021
2 100759 143660 128.9436 131.26 32435.69 2021
3 104926 129069 142.5098 145.07 32370.53 2021
4 143802 129395 166.2726 168.60 32381.61 2021
5 123529 150664 134.8130 136.70 32187.35 2022
6 144143 458794 127.9491 129.74 32116.46 2022
fixedassets yearf cto fiscalq Nombre status partind
1 226513 2021 1 1 Balchem Corp activo NA
2 228289 2021 2 2 Balchem Corp activo NA
3 229798 2021 3 3 Balchem Corp activo NA
4 237517 2021 4 4 Balchem Corp activo NA
5 240419 2022 1 1 Balchem Corp activo NA
6 252145 2022 2 2 Balchem Corp activo NA
naics1 naics2 SectorEconomatica
1 Industrias manufactureras Industria química Química
2 Industrias manufactureras Industria química Química
3 Industrias manufactureras Industria química Química
4 Industrias manufactureras Industria química Química
5 Industrias manufactureras Industria química Química
6 Industrias manufactureras Industria química Química
8 Creación de variables
# Calcular las variables dependientes e independientes.
9 Entrenamiento del modelo
Creamos la partición 80/20
Dejamos las variables que se usarán en el modelo
# Dividimos los datos entre la base de entrenamiento y la de evaluación y creamos los dos sets
# Crear base de entrenamiento
# Crear base de evaluación
Correr el modelo de regresión logísitca con la base de entrenamiento
10 Predicciones y evaluación del modelo
Luego, se crean las predicciones de la probabilidad de ocurrencia del evento con el modelo.
Para asignar cuándo el modelo predice la ocurrencia del evento, debo definir un punto de corte. En este caso, si el modelo predice la ocurrencia con una probabilidad mayor al 50%, entonces determino que el evento ocurrirá.
# Crear margen_operativo_p_pred
Ahora construyo la matriz de confusión para evaluar el modelo.
# Convierto las variables a factores
# Construyo la matriz de confusión