Caso de Estudio: Predicción de Retornos Anuales en Fondos de Renta Variable

FZ2022 Algoritmos y Análisis de Datos

Author
Affiliation

Sergio Castellanos-Gamboa, PhD

Tecnológico de Monterrey

Published

October 15, 2024

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:

  1. A partir de los datos trimestrales, calcular el margen operativo para cada empresa.
  2. 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.
  3. Calcular las variables independientes del modelo predictivo a partir de razones financieras.
  4. Construir un modelo de predicción y realizar una partición de datos en un conjunto de entrenamiento y prueba.
  5. 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

  1. 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.
      Este cálculo nos da el cambio porcentual, lo que indica si el margen operativo ha crecido o decrecido en términos trimestrales.
  2. 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.
      Matemáticamente, se define como: margen\_operativo\_p = \begin{cases} 1 & \text{si } Crecimiento\_Margen\_Operativo > 0 \\ 0 & \text{si } Crecimiento\_Margen\_Operativo \leq 0 \end{cases}
  3. 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.
  4. 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.
  5. 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

# 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)

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
uspanel <- read.csv("uspanel1.csv")

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