Cesar Vargas Ochoa
Daniel
Nahuel Herrera
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.¿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:
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:
modelo_rl.predict() sobre esa fila.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:
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ú.
Cesar Vargas Ochoa
Daniel
Nahuel Herrera
Nicolás Melgarejo
Juan Osorio
ProfesorWalter Paúl Reyes Pineda
Juan Osorio
ProfesorJavier Emanuel González Andrade
Mario Alexander Vargas Celis
Jhon Freddy Tavera Blandon
Jesus E. Rocca
Gabriel Obregón
Mauricio García Grajales
Manuel Roa Ojeda
Manuel Roa Ojeda
Daniel David Mármol Rivero
Martin Villarreal
Esteban Bastías B.
LUIS GUILLERMO MONCADA RUIZ
Juan Osorio
ProfesorRobert Jarod Meza Garcia
Andres Velasco
Juan Osorio
ProfesorZara Ester Córdova Vásquez
Edgardo Antonio García Lopez
PABLO LIZCANO GONZALEZ
Luis Andrés Pazmiño Figueroa
El Curso de Fundamentos de Machine Learning lamentablemente no cumple con los estándares esperados para una formación de nivel introductorio. El instructor se limita a leer ejercicios previamente desarrollados, sin explicar el razonamiento, las técnicas ni los pasos metodológicos necesarios para comprender y aplicar los conceptos. Esta forma de enseñanza dificulta la adquisición de conocimientos y no aporta una guía clara para quienes buscan iniciarse en el tema.
Asimismo, en varios momentos se evidencia falta de claridad en la interpretación de los datos, lo cual genera aún más confusión. Resulta poco apropiado que el instructor solicite al estudiante “analizar los datos y dejar sus conclusiones en los comentarios”, delegando en el alumno tareas que deberían formar parte del proceso pedagógico del curso.
Otro aspecto preocupante es que, al revisar los comentarios, se observa que muchos estudiantes con mayor experiencia terminan señalando errores, omisiones o pasos no explicados por el instructor, lo cual evidencia que el contenido depende de correcciones externas para suplir sus falencias. Esta dinámica confirma que el curso no está brindando una base sólida para quienes realmente buscan comprender los fundamentos del Machine Learning.
En conjunto, estas situaciones hacen que el curso no proporcione las herramientas necesarias para una formación seria y estructurada. El resultado es una experiencia decepcionante y muy por debajo de lo que se esperaría de un curso de fundamentos.
estoy de acuerdo siento el curso no me aporto mucho, además es rara esa obsesión del instructor con el head(). Termino el curso solo porque no me gusta dejar las cosas a medias.
Coincido completamente con el comentario y agrego que el instructor evidencia una falta de conocimiento absoluto del deporte que intenta analizar lo que le hace caer en ejercicios que no ayudan a predecir absolutamente nada.
Falta un diagrama para entender la lógica del proceso propuesto. Si no, parece una receta de cocina.
También me pregunto, ¿qué se espera de nosotros como estudiantes del curso? que repliquemos el código, que lo leamos, que lo entendamos o que experimentemos con el.
Nicolás, la verdad me encantaría que experimentaras. El código que preparé es solo una guía, ¡pero estoy emocionado por ver qué puedes crear tú! Estoy seguro de que puedes llevarlo aún más lejos.
Vengo del futuro, el entrenador nos despidió a todos por crear un modelo que predice mal
Preparando el curso, vi 14 millones de futuros… y solo en uno logramos conservar la categoría.
No era necesario graficar para saber si el modelo predecía de manera correcta, viendo el DataFrame generado con Diferencia_Goles_Real VS Diferencia_Goles_Predicha podíamos ver claramente que el modelo ❌ <u>hizo pésimas predicciones.</u> ❌
⚽CebollitasFC: gracias por tanto y perdón por tan poco, estoy seguro de que lo arreglaremos:(
Vamos a ver cómo aplicar regresión lineal para predecir goles en fútbol usando Python y scikit-learn. Este modelo es ideal si quieres explorar relaciones como:
📊 ¿Cuántos goles marcará un equipo según sus tiros al arco, posesión, pases, etc.?
⚽ Ejemplo: Regresión Lineal para predecir goles
📁 1. Datos de ejemplo (pandas)
Supongamos que tienes un DataFrame con estas columnas:
import pandas as pd
# Datos ficticios de partidos data = { 'tiros_arco': [5, 3, 8, 6, 7], 'posesion': [60, 45, 70, 55, 65], 'pases': [500, 300, 700, 450, 600], 'goles': [2, 1, 3, 2, 3] }
df = pd.DataFrame(data)
🧪 2. División en entrenamiento y prueba
from sklearn.model_selection import train_test_split
X = df[['tiros_arco', 'posesion', 'pases']] y = df['goles']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
🧠 3. Entrenar el modelo
from sklearn.linear_model import LinearRegression
modelo = LinearRegression() modelo.fit(X_train, y_train)
🔍 4. Hacer predicciones
y_pred = modelo.predict(X_test) print("Predicciones de goles:", y_pred)
📈 5. Evaluar el modelo
from sklearn.metrics import mean_squared_error, r2_score
print("Error cuadrático medio:", mean_squared_error(y_test, y_pred)) print("R² score:", r2_score(y_test, y_pred))
🧮 6. Interpretar los coeficientes
coeficientes = pd.DataFrame({ 'Variable': X.columns, 'Coeficiente': modelo.coef_ }) print(coeficientes)
✅ ¿Qué te permite hacer esto?
matplotlib o seaborn.📝 Mi resumen de clase ¿qué os parece?
📚 ¿Qué es LinearRegression de scikit‑learn?
LinearRegression implementa la regresión lineal ordinaria (OLS). Es decir, encuentra una línea (o hiperplano) que minimiza la suma de los errores al cuadrado entre las predicciones y los valores reales
🛠 Parámetros principales de inicialización
⚙️ Métodos principales
🧩 Atributos después de entrenar
💡 ¿Cómo funciona por dentro?
Utiliza descomposición en valores singulares (SVD) o, si se activa positive=True, emplea una solución de mínimos cuadrados no negativos .
La complejidad es aproximadamente O(n_samples × n_features²) para datos densos
🧪 Ejemplo rápido
from sklearn.linear_model import LinearRegression
import numpy as np
# Datos sintéticos
X = np.array([[1,1],[1,2],[2,2],[2,3]])
y = X.dot([1,2]) + 3
# Ajuste del modelo
reg = LinearRegression().fit(X, y)
print(reg.coef_) # → [1. 2.]
print(reg.intercept_) # → 3.0
print(reg.predict([[3,5]])) # → [16.]
print(reg.score(X, y)) # → 1.0 (ajuste perfecto)
⚠️ Cuándo usar otras alternativas
el modelo no predice muy bien
Creo que la base de datos que utilizó es muy pequeña y los modelos no logran detectar claramante patrones y predecir de manera de adecuada. Tal vez con otras variables hubiese sido mas acertado el modelo.
Sobre todo en el caso de una regresión linear, esta clase de modelos suelen ser muy precisos cuando tienen las variables adecuadas.
Entiendo la frustración de muchos respecto al curso, pero porque se llame Fundamentos de ML no quiere decir que vaya a ahondar en todos los algoritmos. Platzi dedicó un curso para cada algoritmo en profundidad. Aprender es incómodo y si bien hay muchas cosas a optimizar, me quedo con todo el aprendizaje que comparte el profesor!
El curso es horrible, de que sirve que nos lean un ejercicio ya creado con funciones que no sabemos para que funcionan?.
simplemente va leyendo y leyendo codigo, horrible. Esperaba mas
No se por que le han dado tanto palo a este curso, he visto cursos en platzi en los que me quedo igual, o no aprendo nada, yo he sentido que este profesor a enseñado al detalle muchas cosas, a lo mejor las cosas no sean exactas o asi o que porque utiliza ejemplos de partidos o asi, , pero el concepto es el mismo, este curso ha sido muy bien explicado, la verdad, obvio si tengo que ser honesto para una persona que esta iniciando, podria quedarse perdida, pero siento que afiance muchos conceptos.
Hola Jose Luis! gracias por tu comentario... todo el feedback es importante pues me permite mejorar y subir la barra!
El modelo de regresión lineal, existe un buen recurso para entender lo que sucede internamente usando tensorflow La teoría es importante saberla, hasta explica el famoso método de descenso de gradiente que permite al algoritmo reducir el error cuadrático medio para que la linea generada con la función sea el mejor modelo capaz de predecir
Como compruebas los supuestos en la regresion lineal? Linealidad, Homocedasticiad, Colinealidad entre las variables?
sí, esos 3 se revisan para comprobar que tu regresión lineal se comporta como se debe y que los resultados son interpretables y confiables.
Podemos ver que no guardan correlacion las variables y hay bastante dispersion, entonces el modelo es demaciado simple o los datos no le enseñan nada.
el humano es impredecible, el animo puede variar el comportamiento del partido.
¿Cómo interpreto los coeficientes de mi modelo?
Los coeficientes (o betas) son el corazón de la regresión lineal porque te dicen exactamente cuánto peso tiene cada variable en tu predicción.
Imagina que el coeficiente de la posesión del balón es 0.06. Esto significa que por cada 1% adicional de posesión que logre el equipo, la diferencia de goles a favor aumentará en 0.06, asumiendo que el resto de las variables (como los tiros al arco) se mantengan exactamente iguales.
Si un coeficiente es negativo, indica una relación inversa. Por ejemplo, si los tiros al arco tienen un coeficiente de -0.05, matemáticamente sugiere que tirar más al arco reduce la diferencia de goles. Cuando ves resultados contraintuitivos como este en la vida real, es una señal de alerta. Te indica que el modelo necesita ajustes, que faltan variables importantes (como la calidad del tiro o la defensa rival), o que los datos actuales tienen ruido que confunde al algoritmo.
He tenido que utilizar las herramientas con mis ejercicios para poder entender mejor. Tenia otra expectativa, espero que este curso lo den de baja y lo mejoren.