Contenido del curso
Preparación y Exploración de Datos
Ingeniería de Características
Modelado Predictivo Supervisado
- 10

División de datos en machine learning con train_test_split
07:30 min - 11

Regresión lineal para predecir goles en Python
Viendo ahora - 12

Cómo saber si tu modelo de regresión funciona
08:56 min - 13

Análisis de métricas R² en modelos de regresión deportiva
02:48 min - 14

Árbol de decisión vs regresión lineal
02:08 min
Aprendizaje No Supervisado
Pipeline y Proyecto Final
Introducción al Deep Learning
NLP en nuestro caso de uso
Regresión lineal para predecir goles en Python
Resumen
Predecir el resultado de un partido suena a magia, pero en realidad es matemática aplicada. Con regresión lineal en Python y unas pocas variables del Cebollitas FC, puedes construir tu primer modelo de machine learning capaz de estimar la diferencia de goles. Aquí te muestro cómo entrenarlo, leer sus coeficientes y darle vida con controles interactivos.
Cómo preparar los datos para entrenar el modelo
Antes de modelar, hay que dejar los datos listos. La idea es separar lo que el modelo va a usar como pista (las variables predictoras) de lo que queremos adivinar (la variable objetivo).
En este caso, la variable objetivo es la diferencia de goles, calculada como goles del local menos goles del visitante. Las predictoras son dos: el porcentaje de posesión local y los tiros al arco del local.
Una vez separadas, entra en juego train_test_split de scikit-learn con esta configuración:
test_size=0.2, que reserva el 20% de los datos para evaluar.random_state=42, que fija la división para que los resultados sean reproducibles.- División 80/20, una práctica estándar para entrenamiento y prueba.
¿Para qué sirve random_state en train_test_split? Fija la semilla aleatoria para que la división entre entrenamiento y prueba sea siempre igual. Eso te permite comparar resultados entre experimentos sin que cambien por azar.
Cómo entrenar un modelo de regresión lineal con scikit-learn
La parte central es sorprendentemente corta. Importas la clase LinearRegression desde sklearn.linear_model, la instancias con parámetros por defecto y llamas al método .fit() con los datos de entrenamiento.
Detrás de esa línea pasa algo potente: el modelo calcula los coeficientes beta que minimizan el error cuadrático medio. En palabras simples, busca la línea recta que mejor se acomoda a tus datos históricos del Cebollitas.
Qué significa el intercepto y los coeficientes
Después de entrenar, el modelo expone dos atributos clave:
intercept_o beta cero: el valor que predice el modelo cuando todas las variables independientes valen cero.coef_: un arreglo con los coeficientes beta, uno por cada variable predictora.
Cada coeficiente te dice cuánto cambia la predicción cuando esa variable aumenta en una unidad, manteniendo las demás constantes. En el ejemplo del Cebollitas, los resultados fueron reveladores:
- Si la posesión local sube una unidad, la diferencia de goles cambia en promedio +0.06.
- Si los tiros al arco suben una unidad, la diferencia de goles cambia en promedio -0.05.
Ese signo negativo en los tiros al arco es contraintuitivo y vale la pena cuestionarlo. Puede indicar que el modelo necesita más variables o que hay correlaciones escondidas en los datos.
Cómo predecir y visualizar los resultados
Con el modelo entrenado, llamas a .predict(X_test) para obtener los valores estimados sobre los datos nuevos. Luego construyes un DataFrame que combine tres cosas: las entradas (posesión y tiros), la diferencia real de goles y la diferencia predicha redondeada a dos decimales.
Mostrar las primeras 10 filas con .head(10) te deja ver, fila por fila, dónde el modelo acierta y dónde se equivoca.
¿Cómo se interpretan las predicciones de regresión lineal? Cada predicción es la mejor estimación numérica que da la fórmula ajustada. Si la diferencia real fue 2 goles y el modelo predijo 0.8, hay un error de 1.2 goles que conviene medir con métricas como MAE o RMSE.
Gráfico de dispersión: predicción vs realidad
La visualización se arma con matplotlib y seaborn. La idea es un gráfico de dispersión con tamaño de figura (10,6) que enfrente y_test contra y_pred. Cada punto compara un valor real con uno predicho.
Luego dibujas una línea de referencia con axline: si los puntos caen cerca de esa línea, el modelo está ajustando bien. Si quedan dispersos, hay trabajo por hacer. En el caso del Cebollitas, la nube de puntos sugiere que el modelo necesita ajustes, no es aún una predicción confiable para apostar el próximo partido.
Cómo agregar controles interactivos con widgets en Jupyter
La parte más divertida es darle al entrenador una herramienta que pueda usar sin tocar código. Con ipywidgets y la función interactive puedes crear dos sliders: uno para la posesión y otro para los tiros al arco.
La función conectada a los sliders hace tres cosas:
- Construye un DataFrame de una sola fila con los valores ingresados.
- Llama a
modelo_rl.predict()sobre esa fila. - Muestra la diferencia de goles estimada en pantalla.
Arrastrando los controles en vivo aparecen patrones interesantes. Por ejemplo, con 70% de posesión y pocos tiros al arco, el modelo proyecta una diferencia de goles más favorable que con muchos tiros y posesión similar. Es contraintuitivo y abre preguntas sobre la calidad de los datos.
Qué viene después de entrenar tu primer modelo
Tener un modelo funcionando no significa que sea bueno. El siguiente paso natural es evaluar el modelo con métricas claras para decidir si confías en él o lo ajustas.
Las tres métricas que vienen al rescate son:
- MAE (Mean Absolute Error): el error promedio en valor absoluto.
- RMSE (Root Mean Squared Error): penaliza más los errores grandes.
- R cuadrado: cuánta variación de los datos explica el modelo.
Mientras tanto, ya tienes en tus manos un flujo completo: cargar datos, entrenar regresión lineal, interpretar coeficientes, predecir y visualizar. ¿Tu modelo predijo bien tu deporte favorito o necesita más variables? Cuéntame en los comentarios qué predictoras agregarías tú.