Informe de Análisis y Modelado – Dataset Hitters

Informe del Proyecto: Predicción del Salario en Jugadores de Béisbol Curso: Métodos de Aprendizaje de Máquinas en Bioestadística Autor: John Jairo Prado Piñeres – Javier Esteban Santamaria Ovalle

INTRODUCCION

El conjunto de datos Hitters se obtuvo originalmente de la biblioteca StatLib, mantenida por la Universidad Carnegie Mellon. Fue utilizado en la sesión de pósteres de la Sección Gráfica de la American Statistical Association (ASA) en 1988 y ha sido ampliamente adoptado en el ámbito académico para la enseñanza y aplicación de técnicas estadísticas. La información salarial proviene de la revista Sports Illustrated, en su edición del 20 de abril de 1987, mientras que las estadísticas de la temporada 1986 y de la carrera de los jugadores fueron tomadas de la Actualización de la Enciclopedia de Béisbol de 1987, publicada por Collier Books, Macmillan Publishing Company, Nueva York.

Este conjunto de datos es particularmente valioso porque reúne variables cuantitativas y cualitativas relacionadas con el rendimiento deportivo de los jugadores de béisbol de las Grandes Ligas, lo que permite explorar la relación entre desempeño individual y compensación económica. Por su riqueza informativa, ha sido utilizado extensamente en literatura estadística, incluyendo el reconocido libro An Introduction to Statistical Learning (ISLR), donde se emplea para ilustrar técnicas como la regresión lineal, Ridge, Lasso y selección de variables.

En el presente informe, se utilizará este conjunto de datos para predecir el salario de los bateadores en función de sus estadísticas individuales de rendimiento. Este problema se realiza con el fin de observar cómo los métodos de aprendizaje estadístico pueden aplicarse a datos reales para obtener modelos predictivos robustos y útiles en contextos prácticos, como el análisis de decisiones salariales en el ámbito deportivo profesional.

OBJETIVO

Predecir el salario de los jugadores de béisbol de las Grandes Ligas empleando el conjunto de datos “Hitters” del paquete ISLR en R utilizando técnicas de aprendizaje automático supervisado, dado que el salario es una variable continua, el problema se plantea como un modelo de regresión.

El análisis busca determinar si es posible estimar el salario de un jugador a partir de sus características y estadísticas de juego, lo cual puede tener aplicaciones en la toma de decisiones de equipos, agentes y analistas deportivos.

El dataset contiene más de 300 registros, de los cuales se utilizan aquellos con información completa para el análisis (después de imputación). Cada registro representa un jugador, e incluye variables como:

Variable Descripción
AtBat Número de veces que el jugador ha tenido un turno al bate
Hits Número de veces que el jugador ha golpeado la pelota y ha alcanzado la base de forma segura
HmRun Número de jonrones que el jugador ha conseguido
Runs Número de veces que el jugador ha anotado una carrera
RBI Número de carreras que el jugador ha impulsado
Walks Número de veces que el jugador ha recibido una base por bolas
Years Número de años que el jugador ha jugado en las Grandes Ligas
CAtBat Total de turnos al bate que el jugador ha tenido a lo largo de su carrera
CHits Total de hits que el jugador ha conseguido a lo largo de su carrera
CHmRun Total de jonrones que el jugador ha conseguido a lo largo de su carrera
CRuns Total de carreras que el jugador ha anotado a lo largo de su carrera
CRBI Total de carreras impulsadas que el jugador ha conseguido a lo largo de su carrera
CWalks Total de bases por bolas que el jugador ha recibido a lo largo de su carrera
League Liga en la que el jugador juega (A = Liga Americana, N = Liga Nacional)
Division División en la que el jugador juega (E = Este, W = Oeste)
PutOuts Número de outs que el jugador ha realizado (generalmente atribuible a un primera base)
Assists Número de asistencias realizadas por el jugador
Errors Número de errores cometidos por el jugador
Salary Salario del jugador (en miles de dólares)
NewLeague Liga en la que el jugador ha comenzado a jugar después de cambiarse (A = Liga Americana, N = Liga Nacional)

INSTALACIÓN DE PAQUETES

#########################################################
# INSTALACIÓN DE PAQUETES
#########################################################

#🔧 **1. Cargar paquetes necesarios**
# Instalación de paquetes si no están ya instalados
paquetes <- c("tidyverse", "patchwork", "readxl", "gdata", "caret", "glmnet", "randomForest", "MASS", "e1071", "FNN", "rpart", "rpart.plot", "corrplot", "pheatmap", "gbm")

nuevos_paquetes <- paquetes[!(paquetes %in% installed.packages()[, "Package"])]
if(length(nuevos_paquetes)) install.packages(nuevos_paquetes)

# Cargar librerías
lapply(paquetes, library, character.only = TRUE)

CARGAR Y PREPARAR LOS DATOS

Rows: 322
Columns: 20
$ AtBat     <dbl> 293, 315, 479, 496, 321, 594, 185, 298, 323, 401, 574, 202, …
$ Hits      <dbl> 66, 81, 130, 141, 87, 169, 37, 73, 81, 92, 159, 53, 113, 60,…
$ HmRun     <dbl> 1, 7, 18, 20, 10, 4, 1, 0, 6, 17, 21, 4, 13, 0, 7, 3, 20, 2,…
$ Runs      <dbl> 30, 24, 66, 65, 39, 74, 23, 24, 26, 49, 107, 31, 48, 30, 29,…
$ RBI       <dbl> 29, 38, 72, 78, 42, 51, 8, 24, 32, 66, 75, 26, 61, 11, 27, 1…
$ Walks     <dbl> 14, 39, 76, 37, 30, 35, 21, 7, 8, 65, 59, 27, 47, 22, 30, 11…
$ Years     <dbl> 1, 14, 3, 11, 2, 11, 2, 3, 2, 13, 10, 9, 4, 6, 13, 3, 15, 5,…
$ CAtBat    <dbl> 293, 3449, 1624, 5628, 396, 4408, 214, 509, 341, 5206, 4631,…
$ CHits     <dbl> 66, 835, 457, 1575, 101, 1133, 42, 108, 86, 1332, 1300, 467,…
$ CHmRun    <dbl> 1, 69, 63, 225, 12, 19, 1, 0, 6, 253, 90, 15, 41, 4, 36, 3, …
$ CRuns     <dbl> 30, 321, 224, 828, 48, 501, 30, 41, 32, 784, 702, 192, 205, …
$ CRBI      <dbl> 29, 414, 266, 838, 46, 336, 9, 37, 34, 890, 504, 186, 204, 1…
$ CWalks    <dbl> 14, 375, 263, 354, 33, 194, 24, 12, 8, 866, 488, 161, 203, 2…
$ League    <chr> "A", "N", "A", "N", "N", "A", "N", "A", "N", "A", "A", "N", …
$ Division  <chr> "E", "W", "W", "E", "E", "W", "E", "W", "W", "E", "E", "W", …
$ PutOuts   <dbl> 446, 632, 880, 200, 805, 282, 76, 121, 143, 0, 238, 304, 211…
$ Assists   <dbl> 33, 43, 82, 11, 40, 421, 127, 283, 290, 0, 445, 45, 11, 151,…
$ Errors    <dbl> 20, 10, 14, 3, 4, 25, 7, 9, 19, 0, 22, 11, 7, 6, 8, 0, 10, 1…
$ Salary    <dbl> NA, 475.000, 480.000, 500.000, 91.500, 750.000, 70.000, 100.…
$ NewLeague <chr> "A", "N", "A", "N", "N", "A", "A", "A", "N", "A", "A", "N", …
    AtBat      Hits     HmRun      Runs       RBI     Walks     Years    CAtBat 
        0         0         0         0         0         0         0         0 
    CHits    CHmRun     CRuns      CRBI    CWalks    League  Division   PutOuts 
        0         0         0         0         0         0         0         0 
  Assists    Errors    Salary NewLeague 
        0         0        59         0 
    AtBat      Hits     HmRun      Runs       RBI     Walks     Years    CAtBat 
        0         0         0         0         0         0         0         0 
    CHits    CHmRun     CRuns      CRBI    CWalks    League  Division   PutOuts 
        0         0         0         0         0         0         0         0 
  Assists    Errors    Salary NewLeague 
        0         0         0         0 

CONCLUSIONES:

El conjunto de datos tiene 322 observaciones (filas) y 20 variables (columnas).

Cada observación corresponde a un jugador de béisbol con información de su rendimiento y salario.

La mayoría de las variables en el dataset son numéricas (numeric), como AtBat, Hits, HmRun, Runs, RBI, Salary, etc. Estas variables representan valores cuantitativos relacionados con el rendimiento del jugador.

Algunas variables son de tipo carácter, lo cual indica que contienen categorías o etiquetas, como la liga o la división en la que juega el jugador. A continuación se enumera las Variables categóricas:

  • League: Identifica la liga del jugador (A = Liga Americana, N = Liga Nacional).

  • Division: Indica en qué división juega el jugador (E = Este, W = Oeste).

  • NewLeague: La liga en la que el jugador empezó a jugar después de un cambio.

La variable Salary tiene valores faltantes (59 NA). Lo que indica que hay jugadores para los cuales no se tiene información de salario, o que no tienen contrato (o salario registrado).

Variables de rendimiento deportivo: AtBat, Hits, HmRun, Runs, RBI, Walks, y las variables relacionadas con la carrera del jugador como CAtBat, CHits, CHmRun, CRuns, CRBI, CWalks son numéricas y reflejan las estadísticas de desempeño del jugador a lo largo de su carrera.

Variables de desempeño defensivo: PutOuts, Assists, Errors son variables numéricas que miden el desempeño defensivo del jugador, con PutOuts reflejando el número de outs realizados, Assists las asistencias realizadas y Errors los errores cometidos.

Salary es la única variable con valores faltantes (59 NA), lo que puede deberse a que algunos jugadores no tienen salario registrado. Sería importante investigar por qué faltan estos datos y si se pueden imputar o manejar de alguna manera.

El resto de las variables no presentan valores faltantes (ningún NA), lo que facilita el análisis.

TRANSFORMACIÓN DE VARIABLES CATEGÓRICAS Y CREACIÓN DE DUMMIES

Rows: 322
Columns: 20
$ AtBat       <dbl> 293, 315, 479, 496, 321, 594, 185, 298, 323, 401, 574, 202…
$ Hits        <dbl> 66, 81, 130, 141, 87, 169, 37, 73, 81, 92, 159, 53, 113, 6…
$ HmRun       <dbl> 1, 7, 18, 20, 10, 4, 1, 0, 6, 17, 21, 4, 13, 0, 7, 3, 20, …
$ Runs        <dbl> 30, 24, 66, 65, 39, 74, 23, 24, 26, 49, 107, 31, 48, 30, 2…
$ RBI         <dbl> 29, 38, 72, 78, 42, 51, 8, 24, 32, 66, 75, 26, 61, 11, 27,…
$ Walks       <dbl> 14, 39, 76, 37, 30, 35, 21, 7, 8, 65, 59, 27, 47, 22, 30, …
$ Years       <dbl> 1, 14, 3, 11, 2, 11, 2, 3, 2, 13, 10, 9, 4, 6, 13, 3, 15, …
$ CAtBat      <dbl> 293, 3449, 1624, 5628, 396, 4408, 214, 509, 341, 5206, 463…
$ CHits       <dbl> 66, 835, 457, 1575, 101, 1133, 42, 108, 86, 1332, 1300, 46…
$ CHmRun      <dbl> 1, 69, 63, 225, 12, 19, 1, 0, 6, 253, 90, 15, 41, 4, 36, 3…
$ CRuns       <dbl> 30, 321, 224, 828, 48, 501, 30, 41, 32, 784, 702, 192, 205…
$ CRBI        <dbl> 29, 414, 266, 838, 46, 336, 9, 37, 34, 890, 504, 186, 204,…
$ CWalks      <dbl> 14, 375, 263, 354, 33, 194, 24, 12, 8, 866, 488, 161, 203,…
$ PutOuts     <dbl> 446, 632, 880, 200, 805, 282, 76, 121, 143, 0, 238, 304, 2…
$ Assists     <dbl> 33, 43, 82, 11, 40, 421, 127, 283, 290, 0, 445, 45, 11, 15…
$ Errors      <dbl> 20, 10, 14, 3, 4, 25, 7, 9, 19, 0, 22, 11, 7, 6, 8, 0, 10,…
$ Salary      <dbl> 425.000, 475.000, 480.000, 500.000, 91.500, 750.000, 70.00…
$ League_N    <int> 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1…
$ Division_W  <int> 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1…
$ NewLeague_N <int> 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1…

ANALISIS DE LA VARIABLE PREDICTORA SALARY

Conclusión

La transformación logarítmica de la variable Salary reduce la asimetría de su distribución, ya que comprime la escala de los salarios altos y expande ligeramente los salarios bajos. Esto hace que la distribución sea más simétrica y cercana a una distribución normal. Esta transformación es especialmente útil al utilizar modelos lineales, ya que mejora la normalidad de los residuos, estabiliza la varianza y contribuye a una mejor capacidad predictiva del modelo. Por estas razones, es recomendable usar LogSalary como variable objetivo en lugar del salario original.

ANÁLISIS EXPLORATORIO DE DATOS (EDA)

     AtBat            Hits         HmRun            Runs       
 Min.   : 16.0   Min.   :  1   Min.   : 0.00   Min.   :  0.00  
 1st Qu.:255.2   1st Qu.: 64   1st Qu.: 4.00   1st Qu.: 30.25  
 Median :379.5   Median : 96   Median : 8.00   Median : 48.00  
 Mean   :380.9   Mean   :101   Mean   :10.77   Mean   : 50.91  
 3rd Qu.:512.0   3rd Qu.:137   3rd Qu.:16.00   3rd Qu.: 69.00  
 Max.   :687.0   Max.   :238   Max.   :40.00   Max.   :130.00  
      RBI             Walks            Years            CAtBat       
 Min.   :  0.00   Min.   :  0.00   Min.   : 1.000   Min.   :   19.0  
 1st Qu.: 28.00   1st Qu.: 22.00   1st Qu.: 4.000   1st Qu.:  816.8  
 Median : 44.00   Median : 35.00   Median : 6.000   Median : 1928.0  
 Mean   : 48.03   Mean   : 38.74   Mean   : 7.444   Mean   : 2648.7  
 3rd Qu.: 64.75   3rd Qu.: 53.00   3rd Qu.:11.000   3rd Qu.: 3924.2  
 Max.   :121.00   Max.   :105.00   Max.   :24.000   Max.   :14053.0  
     CHits            CHmRun           CRuns             CRBI        
 Min.   :   4.0   Min.   :  0.00   Min.   :   1.0   Min.   :   0.00  
 1st Qu.: 209.0   1st Qu.: 14.00   1st Qu.: 100.2   1st Qu.:  88.75  
 Median : 508.0   Median : 37.50   Median : 247.0   Median : 220.50  
 Mean   : 717.6   Mean   : 69.49   Mean   : 358.8   Mean   : 330.12  
 3rd Qu.:1059.2   3rd Qu.: 90.00   3rd Qu.: 526.2   3rd Qu.: 426.25  
 Max.   :4256.0   Max.   :548.00   Max.   :2165.0   Max.   :1659.00  
     CWalks           PutOuts          Assists          Errors     
 Min.   :   0.00   Min.   :   0.0   Min.   :  0.0   Min.   : 0.00  
 1st Qu.:  67.25   1st Qu.: 109.2   1st Qu.:  7.0   1st Qu.: 3.00  
 Median : 170.50   Median : 212.0   Median : 39.5   Median : 6.00  
 Mean   : 260.24   Mean   : 288.9   Mean   :106.9   Mean   : 8.04  
 3rd Qu.: 339.25   3rd Qu.: 325.0   3rd Qu.:166.0   3rd Qu.:11.00  
 Max.   :1566.00   Max.   :1378.0   Max.   :492.0   Max.   :32.00  
     Salary          League_N        Division_W      NewLeague_N    
 Min.   :  67.5   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
 1st Qu.: 226.2   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
 Median : 425.0   Median :0.0000   Median :1.0000   Median :0.0000  
 Mean   : 515.6   Mean   :0.4565   Mean   :0.5124   Mean   :0.4534  
 3rd Qu.: 700.0   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.0000  
 Max.   :2460.0   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
   LogSalary    
 Min.   :4.212  
 1st Qu.:5.422  
 Median :6.052  
 Mean   :5.950  
 3rd Qu.:6.551  
 Max.   :7.808  
 [1] "AtBat"       "Hits"        "HmRun"       "Runs"        "RBI"        
 [6] "Walks"       "Years"       "CAtBat"      "CHits"       "CHmRun"     
[11] "CRuns"       "CRBI"        "CWalks"      "PutOuts"     "Assists"    
[16] "Errors"      "Salary"      "League_N"    "Division_W"  "NewLeague_N"
[21] "LogSalary"  
# A tibble: 322 × 21
   AtBat  Hits HmRun  Runs   RBI Walks Years CAtBat CHits CHmRun CRuns  CRBI
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl> <dbl>
 1   293    66     1    30    29    14     1    293    66      1    30    29
 2   315    81     7    24    38    39    14   3449   835     69   321   414
 3   479   130    18    66    72    76     3   1624   457     63   224   266
 4   496   141    20    65    78    37    11   5628  1575    225   828   838
 5   321    87    10    39    42    30     2    396   101     12    48    46
 6   594   169     4    74    51    35    11   4408  1133     19   501   336
 7   185    37     1    23     8    21     2    214    42      1    30     9
 8   298    73     0    24    24     7     3    509   108      0    41    37
 9   323    81     6    26    32     8     2    341    86      6    32    34
10   401    92    17    49    66    65    13   5206  1332    253   784   890
# ℹ 312 more rows
# ℹ 9 more variables: CWalks <dbl>, PutOuts <dbl>, Assists <dbl>, Errors <dbl>,
#   Salary <dbl>, League_N <int>, Division_W <int>, NewLeague_N <int>,
#   LogSalary <dbl>

MATRIZ DE CORRELACIÓN ENTRE VARIABLES NUMÉRICAS

            AtBat  Hits HmRun  Runs   RBI Walks Years CAtBat CHits CHmRun CRuns
AtBat        1.00  0.97  0.59  0.91  0.82  0.67  0.05   0.24  0.25   0.24  0.27
Hits         0.97  1.00  0.56  0.92  0.81  0.64  0.04   0.23  0.26   0.20  0.26
HmRun        0.59  0.56  1.00  0.65  0.86  0.48  0.12   0.22  0.22   0.49  0.26
Runs         0.91  0.92  0.65  1.00  0.80  0.73  0.00   0.19  0.20   0.23  0.25
RBI          0.82  0.81  0.86  0.80  1.00  0.62  0.15   0.29  0.31   0.44  0.32
Walks        0.67  0.64  0.48  0.73  0.62  1.00  0.14   0.28  0.28   0.33  0.34
Years        0.05  0.04  0.12  0.00  0.15  0.14  1.00   0.92  0.90   0.73  0.88
CAtBat       0.24  0.23  0.22  0.19  0.29  0.28  0.92   1.00  1.00   0.80  0.98
CHits        0.25  0.26  0.22  0.20  0.31  0.28  0.90   1.00  1.00   0.78  0.98
CHmRun       0.24  0.20  0.49  0.23  0.44  0.33  0.73   0.80  0.78   1.00  0.82
CRuns        0.27  0.26  0.26  0.25  0.32  0.34  0.88   0.98  0.98   0.82  1.00
CRBI         0.24  0.23  0.35  0.21  0.39  0.31  0.87   0.95  0.95   0.93  0.94
CWalks       0.17  0.15  0.23  0.18  0.25  0.42  0.84   0.91  0.89   0.80  0.93
PutOuts      0.32  0.31  0.28  0.28  0.34  0.30  0.00   0.06  0.08   0.11  0.06
Assists      0.35  0.32 -0.11  0.22  0.11  0.15 -0.08   0.00  0.00  -0.16 -0.02
Errors       0.35  0.31  0.04  0.24  0.19  0.13 -0.16  -0.07 -0.06  -0.14 -0.08
Salary       0.37  0.42  0.33  0.40  0.43  0.42  0.34   0.47  0.49   0.45  0.50
League_N    -0.10 -0.10 -0.18 -0.15 -0.15 -0.05 -0.05  -0.03 -0.03  -0.10 -0.05
Division_W  -0.05 -0.07 -0.02 -0.08 -0.08 -0.06  0.02   0.02  0.01   0.01  0.00
NewLeague_N -0.06 -0.06 -0.17 -0.12 -0.12 -0.02 -0.04  -0.02 -0.01  -0.10 -0.04
LogSalary    0.34  0.38  0.30  0.36  0.38  0.38  0.47   0.54  0.55   0.45  0.55
             CRBI CWalks PutOuts Assists Errors Salary League_N Division_W
AtBat        0.24   0.17    0.32    0.35   0.35   0.37    -0.10      -0.05
Hits         0.23   0.15    0.31    0.32   0.31   0.42    -0.10      -0.07
HmRun        0.35   0.23    0.28   -0.11   0.04   0.33    -0.18      -0.02
Runs         0.21   0.18    0.28    0.22   0.24   0.40    -0.15      -0.08
RBI          0.39   0.25    0.34    0.11   0.19   0.43    -0.15      -0.08
Walks        0.31   0.42    0.30    0.15   0.13   0.42    -0.05      -0.06
Years        0.87   0.84    0.00   -0.08  -0.16   0.34    -0.05       0.02
CAtBat       0.95   0.91    0.06    0.00  -0.07   0.47    -0.03       0.02
CHits        0.95   0.89    0.08    0.00  -0.06   0.49    -0.03       0.01
CHmRun       0.93   0.80    0.11   -0.16  -0.14   0.45    -0.10       0.01
CRuns        0.94   0.93    0.06   -0.02  -0.08   0.50    -0.05       0.00
CRBI         1.00   0.88    0.11   -0.08  -0.10   0.49    -0.05       0.01
CWalks       0.88   1.00    0.06   -0.04  -0.12   0.44    -0.05      -0.01
PutOuts      0.11   0.06    1.00   -0.03   0.11   0.27     0.02      -0.01
Assists     -0.08  -0.04   -0.03    1.00   0.71   0.04     0.05      -0.01
Errors      -0.10  -0.12    0.11    0.71   1.00   0.01     0.08      -0.02
Salary       0.49   0.44    0.27    0.04   0.01   1.00    -0.01      -0.17
League_N    -0.05  -0.05    0.02    0.05   0.08  -0.01     1.00       0.00
Division_W   0.01  -0.01   -0.01   -0.01  -0.02  -0.17     0.00       1.00
NewLeague_N -0.05  -0.05    0.03    0.04   0.05   0.00     0.88      -0.01
LogSalary    0.53   0.49    0.20    0.04  -0.03   0.88    -0.01      -0.13
            NewLeague_N LogSalary
AtBat             -0.06      0.34
Hits              -0.06      0.38
HmRun             -0.17      0.30
Runs              -0.12      0.36
RBI               -0.12      0.38
Walks             -0.02      0.38
Years             -0.04      0.47
CAtBat            -0.02      0.54
CHits             -0.01      0.55
CHmRun            -0.10      0.45
CRuns             -0.04      0.55
CRBI              -0.05      0.53
CWalks            -0.05      0.49
PutOuts            0.03      0.20
Assists            0.04      0.04
Errors             0.05     -0.03
Salary             0.00      0.88
League_N           0.88     -0.01
Division_W        -0.01     -0.13
NewLeague_N        1.00     -0.01
LogSalary         -0.01      1.00

CORRELACIÓN DE VARIABLES CON LOGSALARY

Conclusiones

Variables Fuertemente Correlacionadas con LogSalary:

CAtBat: Correlación de 0.54 con LogSalary, indicando que los jugadores con más turnos al bate tienden a tener salarios más altos, en la escala logarítmica.

CHits: Correlación de 0.55 con LogSalary. Similar a CAtBat, los jugadores con más hits corregidos tienen un salario más alto.

CRuns: Correlación de 0.55 con LogSalary. Los jugadores que anotan más carreras también tienen salarios más altos.

CRBI: Correlación de 0.53 con LogSalary. Los jugadores con más carreras impulsadas muestran una relación positiva con el salario en su forma logarítmica.

Years: Correlación de 0.47 con LogSalary, lo que sugiere que los jugadores con más años de experiencia tienen un salario logarítmico más alto.

Correlaciones Moderadas con LogSalary:

Walks: Correlación de 0.38 con LogSalary, lo que indica que los jugadores que suelen recibir más bases por bolas tienen salarios logarítmicos más altos.

HmRun: Correlación de 0.30 con LogSalary. Los jugadores con más jonrones tienen una correlación moderada con un salario logarítmico más alto.

RBI: Correlación de 0.38 con LogSalary, indicando que los jugadores que impulsan más carreras también suelen tener salarios más altos en términos logarítmicos.

Al construir modelos predictivos, nos centraremos principalmente en las variables que están más fuertemente correlacionadas con LogSalary, como CAtBat, CHits, CRuns, CRBI, y Years. Se usa regresión lineal con LogSalary como la variable dependiente para modelar el salario en función de las estadísticas de rendimiento.

GRÁFICOS DE DISPERSIÓN SALARY VS VARIABLES EXPLICATIVAS

Conclusiones

Las métricas relacionadas con el desempeño, como CHits, CRuns, CAtBat, y CRBI, parecen tener una relación más directa y fuerte con el salario que las variables como Years.

CRBI (carreras impulsadas) y CRuns (carreras anotadas) muestran las relaciones más fuertes con el salario, sugiriendo que estos factores tienen un peso significativo en la determinación del salario de un jugador.

Si bien Years tiene una relación positiva con el salario, no es tan consistente como las métricas de rendimiento, lo que podría indicar que la experiencia no siempre se traduce de manera lineal en un salario mayor.

El gráfico CHmRun (Carrera de Jonrones) también muestra una tendencia ascendente moderada, aunque con mayor dispersión. Esto refleja que, si bien los jonrones contribuyen al rendimiento de un jugador, su impacto en el salario no es tan fuerte como otras métricas, como los hits o las carreras impulsadas.

MODELOS DE REGRESIÓN

Regresión Lineal Múltiple (correlacion)


Call:
lm(formula = formula_logsalary, data = hitters_df_dummy)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.05952 -0.47102  0.06882  0.43810  2.30248 

Coefficients:
               Estimate  Std. Error t value             Pr(>|t|)    
(Intercept)  5.20238339  0.15126812  34.392 < 0.0000000000000002 ***
AtBat       -0.00336685  0.00115550  -2.914              0.00384 ** 
Hits         0.01099984  0.00441628   2.491              0.01328 *  
HmRun        0.01296730  0.01154516   1.123              0.26225    
Runs         0.00046386  0.00550284   0.084              0.93288    
RBI         -0.00167786  0.00484357  -0.346              0.72928    
Walks        0.00930768  0.00336109   2.769              0.00597 ** 
Years        0.03069439  0.02196932   1.397              0.16339    
CAtBat       0.00007377  0.00023600   0.313              0.75481    
CHits       -0.00010639  0.00118203  -0.090              0.92834    
CHmRun      -0.00036781  0.00293627  -0.125              0.90040    
CRuns        0.00127196  0.00129597   0.981              0.32714    
CRBI         0.00006450  0.00128035   0.050              0.95986    
CWalks      -0.00120103  0.00055961  -2.146              0.03265 *  
PutOuts      0.00030323  0.00013903   2.181              0.02995 *  
Assists      0.00068621  0.00041323   1.661              0.09783 .  
Errors      -0.01255599  0.00824357  -1.523              0.12877    
League_N     0.15573459  0.15043184   1.035              0.30138    
Division_W  -0.18351325  0.07144501  -2.569              0.01069 *  
NewLeague_N -0.10692038  0.15079243  -0.709              0.47884    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6233 on 302 degrees of freedom
Multiple R-squared:  0.4357,    Adjusted R-squared:  0.4002 
F-statistic: 12.27 on 19 and 302 DF,  p-value: < 0.00000000000000022
Modelo con LogSalary:
R²: 0.4357303 
MSE: 0.3643309 
MAE: 0.5054889 

Conclusiones

Variables no significativas (valor-p > 0.1): Estas variables no aportan evidencia estadística clara de estar asociadas con LogSalary en este modelo: HmRun, Runs, RBI, Years, CAtBat, CHits, CHmRun, CRuns, CRBI, Errors, League_N

Las variables AtBat, Hits, Walks, CWalks, PutOuts, Division_W serían las más relevantes para predecir LogSalary, según este modelo. Por lo tanto procederemos a eliminar las no significativas.

Modelo Reducido Regresión Lineal Múltiple


Call:
lm(formula = LogSalary ~ AtBat + Hits + Walks + CWalks + PutOuts + 
    Division_W, data = hitters_df_dummy)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.16460 -0.49204  0.08381  0.49404  2.39760 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  5.2761169  0.1111000  47.490 < 0.0000000000000002 ***
AtBat       -0.0025625  0.0009765  -2.624              0.00911 ** 
Hits         0.0127998  0.0031201   4.102            0.0000521 ***
Walks        0.0002024  0.0025154   0.080              0.93592    
CWalks       0.0013493  0.0001521   8.869 < 0.0000000000000002 ***
PutOuts      0.0002815  0.0001371   2.054              0.04081 *  
Division_W  -0.1625549  0.0727968  -2.233              0.02625 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6476 on 315 degrees of freedom
Multiple R-squared:  0.3645,    Adjusted R-squared:  0.3524 
F-statistic: 30.12 on 6 and 315 DF,  p-value: < 0.00000000000000022
Modelo reducido (solo variables significativas):
R²: 0.3645295 
MSE: 0.410303 
MAE: 0.5293277 

Modelo con Variables Seleccionadas por VIF

# A tibble: 322 × 19
   AtBat  Hits HmRun  Runs   RBI Walks Years CAtBat CHits CHmRun CRuns  CRBI
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl> <dbl>
 1   293    66     1    30    29    14     1    293    66      1    30    29
 2   315    81     7    24    38    39    14   3449   835     69   321   414
 3   479   130    18    66    72    76     3   1624   457     63   224   266
 4   496   141    20    65    78    37    11   5628  1575    225   828   838
 5   321    87    10    39    42    30     2    396   101     12    48    46
 6   594   169     4    74    51    35    11   4408  1133     19   501   336
 7   185    37     1    23     8    21     2    214    42      1    30     9
 8   298    73     0    24    24     7     3    509   108      0    41    37
 9   323    81     6    26    32     8     2    341    86      6    32    34
10   401    92    17    49    66    65    13   5206  1332    253   784   890
# ℹ 312 more rows
# ℹ 7 more variables: CWalks <dbl>, PutOuts <dbl>, Assists <dbl>, Errors <dbl>,
#   League_N <int>, Division_W <int>, NewLeague_N <int>

Call:
lm(formula = formula_vif, data = hitters_df_dummy)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.05952 -0.47102  0.06882  0.43810  2.30248 

Coefficients:
               Estimate  Std. Error t value             Pr(>|t|)    
(Intercept)  5.20238339  0.15126812  34.392 < 0.0000000000000002 ***
AtBat       -0.00336685  0.00115550  -2.914              0.00384 ** 
Hits         0.01099984  0.00441628   2.491              0.01328 *  
HmRun        0.01296730  0.01154516   1.123              0.26225    
Runs         0.00046386  0.00550284   0.084              0.93288    
RBI         -0.00167786  0.00484357  -0.346              0.72928    
Walks        0.00930768  0.00336109   2.769              0.00597 ** 
Years        0.03069439  0.02196932   1.397              0.16339    
CAtBat       0.00007377  0.00023600   0.313              0.75481    
CHits       -0.00010639  0.00118203  -0.090              0.92834    
CHmRun      -0.00036781  0.00293627  -0.125              0.90040    
CRuns        0.00127196  0.00129597   0.981              0.32714    
CRBI         0.00006450  0.00128035   0.050              0.95986    
CWalks      -0.00120103  0.00055961  -2.146              0.03265 *  
PutOuts      0.00030323  0.00013903   2.181              0.02995 *  
Assists      0.00068621  0.00041323   1.661              0.09783 .  
Errors      -0.01255599  0.00824357  -1.523              0.12877    
League_N     0.15573459  0.15043184   1.035              0.30138    
Division_W  -0.18351325  0.07144501  -2.569              0.01069 *  
NewLeague_N -0.10692038  0.15079243  -0.709              0.47884    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6233 on 302 degrees of freedom
Multiple R-squared:  0.4357,    Adjusted R-squared:  0.4002 
F-statistic: 12.27 on 19 and 302 DF,  p-value: < 0.00000000000000022
Modelo de regresión con VIF (LogSalary):
R²: 0.4357303 
MSE: 0.3643309 
MAE: 0.5054889 

Valores de VIF para cada variable:
      AtBat        Hits       HmRun        Runs         RBI       Walks 
  25.964579   34.780246    8.354115   16.946732   13.273811    4.371276 
      Years      CAtBat       CHits      CHmRun       CRuns        CRBI 
   9.678270  248.610088  494.542062   53.019214  154.923233  150.409512 
     CWalks     PutOuts     Assists      Errors    League_N  Division_W 
  18.456402    1.258513    2.642843    2.277437    4.654083    1.057126 
NewLeague_N 
   4.671150 

Conclusiones

Variables con VIF muy alto (CAtBat, CHits, CRuns, CRBI) están altamente correlacionadas con otras variables y causan multicolinealidad, lo que puede afectar la estabilidad y precisión del modelo. Se recomienda eliminarlas.

Variables con VIF moderado (HmRun, Runs, RBI, CWalks) aún tienen cierta colinealidad, pero no generan problemas graves. Es recomendable revisar su inclusión en el modelo.

Variables con VIF bajo (Walks, PutOuts, Division_W, League_N) no presentan multicolinealidad significativa y aportan información útil al modelo. Deben mantenerse.

Acción recomendada: Eliminar variables con VIF alto y revisar las de VIF moderado para mejorar la precisión y estabilidad del modelo.

Modelo Reducido con VIF


Call:
lm(formula = formula_reducida_vif, data = hitters_df_dummy)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.2200 -0.3940  0.1417  0.5044  2.2363 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  5.4290193  0.1310113  41.439 < 0.0000000000000002 ***
AtBat       -0.0028798  0.0010910  -2.640             0.008714 ** 
Hits         0.0122938  0.0034871   3.526             0.000485 ***
Walks        0.0097740  0.0025392   3.849             0.000144 ***
PutOuts      0.0002159  0.0001533   1.409             0.159860    
Division_W  -0.1497023  0.0813561  -1.840             0.066696 .  
League_N     0.0257876  0.0815852   0.316             0.752149    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.7239 on 315 degrees of freedom
Multiple R-squared:  0.2061,    Adjusted R-squared:  0.191 
F-statistic: 13.63 on 6 and 315 DF,  p-value: 0.00000000000009242
Nuevo modelo reducido (con variables de bajo VIF):
R²: 0.2060802 
MSE: 0.5126086 
MAE: 0.5757515 

Modelo con Variables Seleccionadas por Stepwise


Call:
lm(formula = LogSalary ~ CRuns + Hits + Division_W + PutOuts + 
    Years + Walks + CWalks + Errors, data = hitters_df_dummy)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.72429 -0.50700  0.05328  0.46597  2.56942 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  5.0418784  0.1290101  39.081 < 0.0000000000000002 ***
CRuns        0.0012562  0.0003977   3.159              0.00174 ** 
Hits         0.0024539  0.0012799   1.917              0.05612 .  
Division_W  -0.1942794  0.0700932  -2.772              0.00591 ** 
PutOuts      0.0002731  0.0001326   2.060              0.04021 *  
Years        0.0365384  0.0170043   2.149              0.03242 *  
Walks        0.0066027  0.0028222   2.340              0.01994 *  
CWalks      -0.0008886  0.0004625  -1.921              0.05562 .  
Errors      -0.0082490  0.0058952  -1.399              0.16272    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6264 on 313 degrees of freedom
Multiple R-squared:  0.4092,    Adjusted R-squared:  0.3941 
F-statistic:  27.1 on 8 and 313 DF,  p-value: < 0.00000000000000022
Modelo Stepwise:
R²: 0.4091879 
MSE: 0.3814685 
MAE: 0.5109051 

Conclusiones

Las variables más relevantes para predecir el LogSalary en este modelo son CRuns, Division_W, PutOuts, Years y Walks.

Hits y CWalks son marginalmente significativas, por lo que podrían considerarse para mantenerlas si es necesario.

Errors no tiene un impacto significativo en el modelo y podría eliminarse.

El modelo tiene un R² ajustado de 0.3941, lo que sugiere que aún hay un margen de mejora en la capacidad de predicción, aunque es un modelo razonablemente bueno.

Modelo Reducido Stepwise

# Filtrar filas sin NA para las variables relevantes
vars_modelo <- c("LogSalary", "CRuns", "Division_W", "PutOuts", "Years", "Walks")
hitters_df_modelo <- hitters_df_dummy[complete.cases(hitters_df_dummy[, vars_modelo]), ]

# Crear fórmula y ajustar el modelo
formula_reducida <- LogSalary ~ CRuns + Division_W + PutOuts + Years + Walks
modelo_stepwise <- lm(formula_reducida, data = hitters_df_modelo)

# Resumen del modelo
summary(modelo_stepwise)

Call:
lm(formula = formula_reducida, data = hitters_df_modelo)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.54964 -0.50315  0.06806  0.48297  2.38318 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  5.2077471  0.1099788  47.352 < 0.0000000000000002 ***
CRuns        0.0009039  0.0002576   3.509             0.000515 ***
Division_W  -0.2008517  0.0714746  -2.810             0.005261 ** 
PutOuts      0.0003433  0.0001335   2.572             0.010559 *  
Years        0.0197470  0.0166023   1.189             0.235169    
Walks        0.0070926  0.0019594   3.620             0.000343 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6396 on 316 degrees of freedom
Multiple R-squared:  0.3783,    Adjusted R-squared:  0.3685 
F-statistic: 38.46 on 5 and 316 DF,  p-value: < 0.00000000000000022
# Predicciones
predicciones_reducidas <- predict(modelo_stepwise, newdata = hitters_df_modelo)

# Métricas de rendimiento
mse_reducido <- mean((hitters_df_modelo$LogSalary - predicciones_reducidas)^2)
mae_reducido <- mean(abs(hitters_df_modelo$LogSalary - predicciones_reducidas))
r2_reducido <- summary(modelo_stepwise)$r.squared

# Imprimir resultados
cat("Modelo reducido (LogSalary):\n")
Modelo reducido (LogSalary):
cat("R²:", round(r2_reducido, 4), "\n")
R²: 0.3783 
cat("MSE:", round(mse_reducido, 4), "\n")
MSE: 0.4014 
cat("MAE:", round(mae_reducido, 4), "\n")
MAE: 0.5267 

Modelo Variables Seleccionadas con Lasso

# Instalar y cargar el paquete "glmnet" si no está instalado
# install.packages("glmnet")
library(glmnet)

# 1. Seleccionar variables numéricas y excluir Salary y LogSalary
numeric_vars <- hitters_df_dummy[sapply(hitters_df_dummy, is.numeric)]
numeric_vars <- numeric_vars[, !colnames(numeric_vars) %in% c("LogSalary", "Salary")]

# 2. Combinar con la variable respuesta
datos_lasso <- cbind(numeric_vars, LogSalary = hitters_df_dummy$LogSalary)

# 3. Eliminar filas con NA en cualquiera de las columnas
datos_lasso <- datos_lasso[complete.cases(datos_lasso), ]

# 4. Crear matriz de predictores y vector de respuesta
X <- as.matrix(datos_lasso[, !colnames(datos_lasso) %in% "LogSalary"])
y <- datos_lasso$LogSalary

# 5. Ajustar modelo Lasso con validación cruzada
set.seed(12345)
lasso_cv <- cv.glmnet(X, y, alpha = 1)

# 6. Seleccionar el mejor lambda
best_lambda <- lasso_cv$lambda.min

# 7. Ajustar modelo final con el mejor lambda
lasso_model <- glmnet(X, y, alpha = 1, lambda = best_lambda)

# 8. Extraer variables seleccionadas
coef_lasso <- coef(lasso_model)
selected_features <- rownames(coef_lasso)[which(coef_lasso != 0)]
selected_features <- selected_features[selected_features != "(Intercept)"]

cat("Variables seleccionadas por Lasso:\n")
Variables seleccionadas por Lasso:
print(selected_features)
 [1] "AtBat"       "Hits"        "HmRun"       "Runs"        "Walks"      
 [6] "Years"       "CHits"       "CRuns"       "CWalks"      "PutOuts"    
[11] "Assists"     "Errors"      "League_N"    "Division_W"  "NewLeague_N"
# 9. Ajustar modelo lineal solo con esas variables
modelo_lasso <- lm(as.formula(paste("LogSalary ~", paste(selected_features, collapse = " + "))), data = datos_lasso)

# 10. Predicción y métricas
y_pred_lasso <- predict(modelo_lasso, newdata = datos_lasso)
mse_lasso <- mean((datos_lasso$LogSalary - y_pred_lasso)^2)
mae_lasso <- mean(abs(datos_lasso$LogSalary - y_pred_lasso))
r2_lasso <- summary(modelo_lasso)$r.squared

# 11. Imprimir resultados
cat("Modelo Lasso:\n")
Modelo Lasso:
cat("R²:", round(r2_lasso, 4), "\n")
R²: 0.4352 
cat("MSE:", round(mse_lasso, 4), "\n")
MSE: 0.3647 
cat("MAE:", round(mae_lasso, 4), "\n")
MAE: 0.5051 

Conclusiones

De acuerdo con los valores p y el resumen de la regresión, deberías eliminar las siguientes variables del modelo, ya que no son significativas: HmRun Runs CHits CRuns, Errors, League_N, Las demás variables tienen p-valores significativos y deberían mantenerse en el modelo. Además, las variables Years y Assists pueden ser consideradas marginalmente significativas, y su inclusión dependerá de si deseas mantener variables con un efecto marginal.

Modelo Reducido Lasso


Call:
lm(formula = formula_reducido, data = hitters_df_dummy)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.16460 -0.49204  0.08381  0.49404  2.39760 

Coefficients:
              Estimate Std. Error t value             Pr(>|t|)    
(Intercept)  5.2761169  0.1111000  47.490 < 0.0000000000000002 ***
AtBat       -0.0025625  0.0009765  -2.624              0.00911 ** 
Hits         0.0127998  0.0031201   4.102            0.0000521 ***
Walks        0.0002024  0.0025154   0.080              0.93592    
CWalks       0.0013493  0.0001521   8.869 < 0.0000000000000002 ***
PutOuts      0.0002815  0.0001371   2.054              0.04081 *  
Division_W  -0.1625549  0.0727968  -2.233              0.02625 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6476 on 315 degrees of freedom
Multiple R-squared:  0.3645,    Adjusted R-squared:  0.3524 
F-statistic: 30.12 on 6 and 315 DF,  p-value: < 0.00000000000000022
Modelo reducido con las variables seleccionadas:
R²: 0.3645295 
MSE: 0.410303 
MAE: 0.5293277 

Comparación de Métricas de Rendimiento

Modelo MSE MAE Variables seleccionadas
Modelo de Regresión 0.3645 0.410303 0.5293277 AtBat, Hits, Walks, CWalks, PutOuts, Division_W
Modelo VIF 0.2061 0.5126086 0.5757515 AtBat, Hits, Walks, PutOuts, Division_W
Modelo Stepwise 0.3783 0.4014135 0.5266722 CRuns, Division_W, PutOuts, Walks
Modelo Lasso 0.3645 0.410303 0.5293277 AtBat, Hits, Walks, CWalks, PutOuts, Division_W

Mejor modelo: El Modelo Stepwise parece ser el que tiene el mejor rendimiento en términos de R² (0.3783), ya que logra la mayor proporción de varianza explicada en los datos. Sin embargo, si nos basamos en MSE y MAE, el Modelo Reducido (solo variables significativas) también tiene un buen rendimiento, con un R² similar (0.3645) y un MSE y MAE ligeramente mejores que el modelo Stepwise.

Variables a utilizar Modelo de Regresión: “AtBat”, “Hits”, “Walks”, “CWalks”, “PutOuts”, “Division_W”

Variables a utilizar Modelo Stepwise: “CRuns”, “Division_W”, “PutOuts”, “Walks”,

Método a Tomar

Considerando el equilibrio entre R², MSE y MAE y su buen ajuste y baja complejidad, el Modelo de Regresión es una excelente opción.

ALGORITMO K-NEAREST NEIGHBORS (kNN)

Mejor valor de k: 24 
Mean Squared Error (MSE) en conjunto de prueba: 0.4078

Conclusiones

El valor de k=24 parece ser el óptimo para el modelo. Esto indica que este número de características (o hiperparámetros) permite un buen equilibrio entre el ajuste del modelo y su capacidad de generalización.

El Mean Squared Error (MSE) en el conjunto de prueba es de 0.4078. Este valor indica que el modelo tiene una capacidad moderada de predicción, ya que los errores cuadráticos promedio están controlados, pero aún hay espacio para mejorar.

Este MSE es relativamente bajo, lo que sugiere que el modelo se desempeña bien al generalizar sobre datos nuevos (en comparación con los valores más altos de MSE en otros modelos que podrían estar sobreajustados). Sin embargo, siempre es posible mejorar este rendimiento mediante la optimización del modelo, como probar diferentes transformaciones de las características, o incluso ajustar otros hiperparámetros.

MODELO DE RANDOM FOREST (BAGGING)

MSE: 0.2326
MAE: 0.3954
R²: 0.6211


Importancia de las características:
                  var   rel.inf
CWalks         CWalks 49.353968
Walks           Walks 14.402717
Hits             Hits 12.898165
PutOuts       PutOuts 11.227998
AtBat           AtBat 10.706345
Division_W Division_W  1.410807

Conclusiones

Rendimiento del Modelo. MSE: 0.2324 (error relativamente bajo en las predicciones). MAE: 0.3961 (el modelo se equivoca, en promedio, en 0.3961 unidades del salario logarítmico). R²: 0.6215 (el modelo explica el 62.15% de la variabilidad de los salarios).

Las variables más importantes para predecir el salario logarítmico son:

CWalks (49.07%), Walks (14.54%), Hits (12.57%), AtBat (11.20%), PutOuts (11.06%), Division_W (1.57%).

Recomendaciones:

el mejor rendimiento lo generó Learning Rate: 0.010.

Características clave: Enfocarse en CWalks, Walks y Hits para mejorar interpretabilidad o selección de características.

Posibles Mejoras: Ajustar más parámetros como el número de árboles o la profundidad de los árboles, y considerar otros modelos como Random Forest o XGBoost para comparar rendimiento.

En resumen, el modelo GBM con un learning rate de 0.010 mostró un buen rendimiento, pero siempre hay espacio para optimizar y explorar otros enfoques.

Tabla de Modelos Ordenados de Mejor a Peor (según el MSE):

Modelo MSE
Random Forest 0.0666
GBM (Optimizado) 0.2324
Modelo Stepwise 0.4014
Modelo de Regresión 0.4103
Modelo Lasso 0.4103
kNN (k=24) 0.4078
Modelo VIF 0.5126

CONCLUSIONES FINALES

Random Forest es el modelo con el mejor desempeño, alcanzando un MSE de 0.0666, lo que lo convierte en el más preciso en las predicciones. Este modelo maneja de manera efectiva la no linealidad y las interacciones entre variables, siendo altamente robusto para este tipo de problemas.

GBM (Optimizado) ocupa el segundo lugar con un MSE de 0.2324. Aunque tiene un buen rendimiento, no supera a Random Forest en términos de precisión.

Los modelos lineales (Regresión, Lasso, y Stepwise) presentan MSEs más altos (todos superiores a 0.4), lo que sugiere que no logran capturar adecuadamente las relaciones no lineales en los datos.

kNN (k=24) tiene un MSE de 0.4078, lo cual es similar a los modelos lineales, pero sigue siendo menos efectivo que Random Forest y GBM.

Modelo VIF tiene el peor desempeño, con un MSE de 0.5126, lo que indica que no es adecuado para este conjunto de datos en comparación con los demás modelos evaluados.