Instrucciones y requisitos de configuración del lab
Protege tu cuenta y tu progreso. Usa siempre una ventana de navegador privada y las credenciales del lab para ejecutarlo.

BigQuery Machine Learning con datos de fútbol

Lab 30 minutos universal_currency_alt 5 créditos show_chart Intermedio
info Es posible que este lab incorpore herramientas de IA para facilitar tu aprendizaje.
Este contenido aún no está optimizado para dispositivos móviles.
Para obtener la mejor experiencia, visítanos en una computadora de escritorio con un vínculo que te enviaremos por correo electrónico.

GSP851

Logotipo de los labs de autoaprendizaje de Google Cloud

Los datos que se usan en este lab provienen de las siguientes fuentes:

  • Pappalardo et al., (2019) A public data set of spatio-temporal match events in soccer competitions, Nature Scientific Data 6:236, https://www.nature.com/articles/s41597-019-0247-7
  • Pappalardo et al. (2019) PlayerRank: Data-driven Performance Evaluation and Player Ranking in Soccer via a Machine Learning Approach. ACM Transactions on Intelligent Systems and Technologies (TIST) 10, 5, Article 59 (September 2019), 27 pages. DOI: https://doi.org/10.1145/3343172

Objetivos

En este lab, aprenderás a hacer lo siguiente:

  • Escribir funciones en BigQuery para ayudar con los cálculos que se realizarán en los datos de tiros de fútbol
  • Crear y evaluar modelos de “goles esperados” con BigQuery ML
  • Aplicar un modelo de goles esperados a datos “nuevos” con BigQuery ML

Configuración y requisitos

Antes de hacer clic en el botón Comenzar lab

Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.

Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.

Para completar este lab, necesitarás lo siguiente:

  • Acceso a un navegador de Internet estándar. Se recomienda el navegador Chrome.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
  • Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.

Cómo iniciar tu lab y acceder a la consola de Google Cloud

  1. Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:

    • El botón para abrir la consola de Google Cloud
    • El tiempo restante
    • Las credenciales temporales que debes usar para el lab
    • Otra información para completar el lab, si es necesaria
  2. Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).

    El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.

    Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.

    Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
  3. De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.

    {{{user_0.username | "Username"}}}

    También puedes encontrar el nombre de usuario en el panel Detalles del lab.

  4. Haz clic en Siguiente.

  5. Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.

    {{{user_0.password | "Password"}}}

    También puedes encontrar la contraseña en el panel Detalles del lab.

  6. Haz clic en Siguiente.

    Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
  7. Haz clic para avanzar por las páginas siguientes:

    • Acepta los Términos y Condiciones.
    • No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
    • No te registres para obtener pruebas gratuitas.

Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.

Nota: Para acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar. Ícono del menú de navegación y campo de búsqueda

Tarea 1: Abre BigQuery

En la consola de BigQuery, se proporciona una interfaz para consultar tablas, incluidos conjuntos de datos públicos que ofrece BigQuery.

  1. En el menú de navegación de la consola de Cloud, selecciona BigQuery.

Se abrirá el cuadro de mensaje Te damos la bienvenida a BigQuery en la consola de Cloud. Este cuadro de mensaje contiene un vínculo a la guía de inicio rápido y las notas de la versión.

  1. Haz clic en Listo.

Se abrirá la consola de BigQuery.

Nota: El proceso para crear el conjunto de datos y las tablas se enseña en el lab Transferencia de datos de fútbol a BigQuery. En este lab, el enfoque es aprender a consultar la información.

Una vez que se creen las tablas, la pantalla será similar a la siguiente:

El Explorador muestra el proyecto fijado, que incluye el conjunto de datos de fútbol destacado y sus tablas.

En esta sección, se usó la interfaz de BigQuery para acceder a la consola. La consola proporciona una forma conveniente de agregar información a un conjunto de datos. BigQuery usa tablas para representar datos de forma estructurada.

En la siguiente sección, obtén más información sobre la creación de funciones en BigQuery.

Tarea 2: Calcula la distancia y el ángulo del tiro

En esta sección, crearás algunas funciones definidas por el usuario en BigQuery que ayudan con los cálculos de distancia y ángulo del tiro, lo que permite preparar los datos de eventos de fútbol para su uso eventual en un modelo de AA.

Calcula la distancia del tiro a partir de las coordenadas (x,y)

Para entender por qué se necesita la función, comienza por observar en detalle el campo positions en la tabla events. Este es un campo repetido que contiene 1 o más pares (x, y) por evento.

Según Wyscout, una empresa líder en datos de la industria del fútbol que proporcionó esta información, estos valores representan las posiciones de origen y (si corresponde) destino asociadas con el evento, en una escala de 0 a 100 que representa el porcentaje del campo desde la perspectiva del equipo atacante. Consulta la captura de pantalla de la tabla que se muestra a continuación, en la que se indican las posiciones correspondientes a algunos tipos de eventos diferentes para algunos eventos de ejemplo.

tabla con 6 columnas: evnentName, playerid, subEventName, Id, positions.x y positions.y

El primer par (x, y) en las posiciones de los eventos que son tiros representa la ubicación en el campo desde la que se originó el tiro.

Nota: Para calcular la distancia de un tiro desde una ubicación determinada hasta el arco, se usa el punto medio de la boca del arco (100, 50) como ubicación final, las dimensiones promedio conocidas de una cancha de fútbol (105 m x 68 m, según Wikipedia; no hay un tamaño estándar de la cancha) y la fórmula de distancia bidimensional.
  1. Copia el siguiente código y pégalo en el Editor de consultas:
CREATE FUNCTION `soccer.GetShotDistanceToGoal`(x INT64, y INT64) RETURNS FLOAT64 AS ( /* Translate 0-100 (x,y) coordinate-based distances to absolute positions using "average" field dimensions of 105x68 before combining in 2D dist calc */ SQRT( POW((100 - x) * 105/100, 2) + POW((50 - y) * 68/100, 2) ) );

Esto especifica el nombre de la función, las entradas y sus tipos (2 números enteros), el tipo de salida (un número de punto flotante) y la lógica real que implementa la fórmula de distancia bidimensional en las distancias de coordenadas x e y escaladas.

  1. Haz clic en Ejecutar.

En la sección Resultados de la consulta, debería aparecer un mensaje que diga Con esta sentencia, se creó una nueva función llamada: .soccer.GetShotDistanceToGoal.

Haz clic en Revisar mi progreso para verificar el objetivo

Verificar que la consulta se haya ejecutado

Calcula el ángulo de tiro a partir de las coordenadas (x,y)

El proceso general aquí es similar al cálculo de la distancia del tiro, pero aplicado al ángulo del tiro. En este caso, el ángulo calculado es el que se forma entre la ubicación del tiro y la línea de gol, como se muestra a continuación (imagen de Ian Dragulet).

Cuatro ejemplos de ángulos de tiro en función de la ubicación del tiro y el ancho del arco de fútbol

Los ángulos más grandes se producen cuando se está cerca del objetivo y en el centro, por lo que esto está algo correlacionado con el cálculo de la distancia realizado anteriormente. Los cálculos del ángulo de tiro implican el uso de funciones trigonométricas de BigQuery en los datos (x, y).

  1. En el Editor de consultas, haz clic en "+" (Consulta en SQL).
  2. Agrega el siguiente código en el Editor de consultas. Esto crea una función de ángulo de tiro como la función de distancia de tiro anterior con 2 entradas de números enteros y una salida de punto flotante, pero con un cálculo trigonométrico más detallado que usa la Ley de los cosenos para obtener el ángulo hacia el arco:
CREATE FUNCTION `soccer.GetShotAngleToGoal`(x INT64, y INT64) RETURNS FLOAT64 AS ( SAFE.ACOS( /* Have to translate 0-100 (x,y) coordinates to absolute positions using "average" field dimensions of 105x68 before using in various distance calcs */ SAFE_DIVIDE( ( /* Squared distance between shot and 1 post, in meters */ (POW(105 - (x * 105/100), 2) + POW(34 + (7.32/2) - (y * 68/100), 2)) + /* Squared distance between shot and other post, in meters */ (POW(105 - (x * 105/100), 2) + POW(34 - (7.32/2) - (y * 68/100), 2)) - /* Squared length of goal opening, in meters */ POW(7.32, 2) ), (2 * /* Distance between shot and 1 post, in meters */ SQRT(POW(105 - (x * 105/100), 2) + POW(34 + 7.32/2 - (y * 68/100), 2)) * /* Distance between shot and other post, in meters */ SQRT(POW(105 - (x * 105/100), 2) + POW(34 - 7.32/2 - (y * 68/100), 2)) ) ) /* Translate radians to degrees */ ) * 180 / ACOS(-1) ) ;
  1. Haz clic en Ejecutar.
  2. En la sección Resultados de la consulta, debería aparecer un mensaje que diga Con esta sentencia, se creó una nueva función llamada .soccer.GetShotAngleToGoal.

Haz clic en Revisar mi progreso para verificar el objetivo Verificar que la consulta se haya ejecutado

En esta sección, usaste BigQuery para crear funciones que calculan la distancia y el ángulo del tiro.

En la siguiente sección, aprenderás a crear un modelo para calcular los goles esperados usando la distancia y el ángulo de cada tiro.

Tarea 3: Crea modelos de goles esperados con BigQuery ML

En esta sección, usarás BigQuery ML para crear y ejecutar modelos de aprendizaje automático en BigQuery con consultas en SQL estándar. En este caso, crearás modelos de goles esperados con los datos de eventos de fútbol para predecir la probabilidad de que un tiro se convierta en gol según su tipo, distancia y ángulo (se sabe que estos son buenos predictores de la probabilidad de un gol, como se demostró en el lab Análisis de datos de fútbol en BigQuery).

Los modelos de goles esperados son de uso frecuente en el análisis de fútbol para medir la calidad de los tiros y la capacidad de definición o atajada en función de la calidad del tiro, y tienen una variedad de aplicaciones tanto en el análisis retrospectivo de partidos como en la realización de proyecciones.

Ajuste de un modelo de regresión logística para goles esperados

Primero, ajustarás un modelo de regresión logística a los datos.

  1. En el Editor de consultas, haz clic en "+" (Consulta en SQL).
  2. Agrega el siguiente código en el Editor de consultas.
CREATE MODEL `soccer.xg_logistic_reg_model` OPTIONS( model_type = 'LOGISTIC_REG', input_label_cols = ['isGoal'] ) AS SELECT Events.subEventName AS shotType, /* 101 is known Tag for 'goals' from goals table */ (101 IN UNNEST(Events.tags.id)) AS isGoal, `soccer.GetShotDistanceToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotDistance, `soccer.GetShotAngleToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotAngle FROM `soccer.events` Events LEFT JOIN `soccer.matches` Matches ON Events.matchId = Matches.wyId LEFT JOIN `soccer.competitions` Competitions ON Matches.competitionId = Competitions.wyId WHERE /* Filter out World Cup matches for model fitting purposes */ Competitions.name != 'World Cup' AND /* Includes both "open play" & free kick shots (including penalties) */ ( eventName = 'Shot' OR (eventName = 'Free Kick' AND subEventName IN ('Free kick shot', 'Penalty')) ) ;

La sección superior es el código de generación del modelo real, que especifica el tipo de modelo y la etiqueta para la variable de resultado. La sentencia SELECT crea la variable de resultado isGoal, junto con los atributos de interés de los datos del evento, incluidos la distancia y el ángulo del tiro calculados con las funciones creadas en el paso anterior. Las uniones permiten determinar de qué competencia provino cada tiro, lo que se emplea para filtrar los datos de la Copa Mundial de este modelado (guardados para su uso posterior después de que se ajusta el modelo).

  1. Haz clic en Ejecutar.

En la sección Resultados de la consulta, debería aparecer un mensaje que diga Con esta sentencia, se creará un nuevo modelo llamado: :soccer.xg_logistic_reg_model. Según el tipo de modelo, esto podría tardar varias horas en completarse. En este caso, solo debería tardar uno o dos minutos en finalizar.

  1. Una vez que el modelo termine de entrenarse (busca una notificación de "Consulta completada" en la sección Resultados de la consulta), haz clic en Ir al modelo en el extremo derecho, junto al mensaje sobre la creación del modelo.

Se abrirá una nueva pestaña con información sobre el modelo que se acaba de entrenar.

  1. Haz clic en la pestaña Evaluación y revisa algunas de las métricas, en particular, "Pérdida logística" y "AUC de ROC" en Métricas agregadas.
Nota: Los resultados pueden variar ligeramente en función de la aleatorización inherente en el procedimiento de ajuste del modelo.

Página Evaluación con pestañas que muestra datos para Métricas agregadas, Umbral de puntuación y tres gráficos que analizan esos datos

Haz clic en Revisar mi progreso para verificar el objetivo

Verificar que la consulta se haya ejecutado

Dado que el interés principal radica en la exactitud de las probabilidades de gol del modelo (no en la exactitud explícita en términos de predecir 0 y 1 en un umbral determinado), la pérdida logística y el AUC de ROC son buenas métricas en las que enfocarse. Los números en sí son más útiles para comparar diferentes modelos, lo que se hace en una sección posterior.

Comprende el ajuste del modelo de regresión logística

Ahora que ajustaste el modelo de regresión logística, puedes usar la funcionalidad de pesos de BigQuery ML para ver los coeficientes del modelo para cada predictor.

  1. En el EDITOR de consultas, haz clic en "+" (Consulta en SQL).

  2. Copia el siguiente código y pégalo en el EDITOR de consultas: Esta es una llamada simple a la función ML.WEIGHTS para el modelo de regresión logística que ajustaste en el paso anterior:

SELECT * FROM ML.WEIGHTS(MODEL soccer.xg_logistic_reg_model) ;
  1. Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.

Los resultados de la consulta dentro de la página Resultados con pestañas.

Hay pesos para cada entrada: un único peso numérico para los atributos continuos y 1 valor por categoría potencial para los atributos categóricos, que corresponden a coeficientes en un modelo de regresión logística. A veces es peligroso interpretar directamente los coeficientes del modelo de regresión logística debido a la correlación entre los predictores, por ejemplo.

Como mínimo, el signo de estos valores parece razonable según el conocimiento general sobre el fútbol:

  • Los penales tienen muchas más posibilidades de éxito que otros tipos de tiros
  • Los tiros a mayor distancia tienen menos posibilidades de éxito
  • Los tiros con ángulos más amplios hacia el arco tienen más posibilidades de éxito

Ver estos resultados puede dar cierta confianza de que el modelo está haciendo algo lógico.

Crea un modelo de árbol con boosting para los goles esperados

A continuación, ajustarás un modelo de árbol con boosting a los datos usando la implementación de XGBoost de BigQuery ML y compararás los resultados con el modelo de regresión logística ajustado anteriormente. En teoría, los árboles con boosting pueden ser más precisos debido a su capacidad de tener en cuenta las relaciones no lineales entre los atributos y el resultado, así como las interacciones entre los atributos.

  1. En el Editor de consultas, haz clic en "+" (Consulta en SQL).
  2. Copia el siguiente código y pégalo en el Editor de consultas:
CREATE MODEL `soccer.xg_boosted_tree_model` OPTIONS( model_type = 'BOOSTED_TREE_CLASSIFIER', input_label_cols = ['isGoal'] ) AS SELECT Events.subEventName AS shotType, /* 101 is known Tag for 'goals' from goals table */ (101 IN UNNEST(Events.tags.id)) AS isGoal, `soccer.GetShotDistanceToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotDistance, `soccer.GetShotAngleToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotAngle FROM `soccer.events` Events LEFT JOIN `soccer.matches` Matches ON Events.matchId = Matches.wyId LEFT JOIN `soccer.competitions` Competitions ON Matches.competitionId = Competitions.wyId WHERE /* Filter out World Cup matches for model fitting purposes */ Competitions.name != 'World Cup' AND /* Includes both "open play" & free kick shots (including penalties) */ ( eventName = 'Shot' OR (eventName = 'Free Kick' AND subEventName IN ('Free kick shot', 'Penalty')) ) ;

La sentencia de SQL es idéntica a la que se usa para ajustar la regresión logística anterior, excepto por los cambios en el tipo de modelo para elegir un clasificador de árbol con boosting y el nombre del objeto de modelo creado.

  1. Haz clic en Ejecutar. En la sección Resultados de la consulta, debería aparecer un mensaje que diga Con esta sentencia, se creará un modelo nuevo llamado: :soccer.xg_boosted_tree_model. Según el tipo de modelo, esto podría tardar varias horas en completarse. En este caso, debería tardar varios minutos en finalizar.
Nota: El entrenamiento del modelo puede tardar entre 15 y 20 minutos en completarse.

Mientras esperas, consulta esta descripción general de BigQuery ML.

BigQuery ML: Aprendizaje automático con SQL estándar

Una vez que el modelo se haya entrenado, verifica que el paso se haya completado correctamente.
  1. Una vez que el modelo termine de entrenarse, busca una notificación de “Consulta completada” en la sección Resultados de la consulta.
  2. Haz clic en Ir al modelo en el extremo derecho, junto al mensaje sobre la creación del modelo.

Se abrirá una nueva pestaña con información sobre el modelo que se acaba de entrenar.

  1. Haz clic en la pestaña Evaluación y revisa algunas de las métricas, en particular, "Pérdida logística" y "AUC de ROC" en Métricas agregadas.
Nota: Los resultados pueden variar ligeramente en función de la aleatorización inherente en el procedimiento de ajuste del modelo.

Página Evaluación con pestañas, con los tipos de datos de Métricas agregadas destacados, que incluyen Pérdida logística y AUC de ROC

La pérdida logística y el AUC de ROC del modelo de árbol con boosting son bastante similares a los del modelo de regresión logística, pero ligeramente peores (mayor pérdida logística y menor AUC de ROC).

Haz clic en Revisar mi progreso para verificar el objetivo

Verificar que la consulta se haya ejecutado

En esta sección, se usó BigQuery para ajustar modelos de aprendizaje automático con datos de fútbol. Un modelo de goles esperados se puede crear de varias maneras.

En la siguiente sección, aprende a aplicar un modelo de goles esperados a datos nuevos con BigQuery ML.

Tarea 4: Aplica un modelo de goles esperados a datos nuevos

Ahora que ajustaste un modelo de goles esperados con una precisión y explicabilidad razonables, puedes aplicarlo a datos “nuevos”; en este caso, la Copa Mundial 2018 (que se dejó fuera del ajuste del modelo).

El modelo de regresión logística creado en el paso anterior se usará para evaluar la dificultad de cada tiro y gol en esa competencia, lo que permitirá identificar los goles más "impresionantes" del torneo.

Obtén probabilidades para todos los tiros en la Copa Mundial 2018

Puedes usar la funcionalidad de predicción de BigQuery ML con el modelo de regresión logística ajustado en el paso anterior (o incluso el modelo de árbol con boosting, si lo prefieres) para observar la probabilidad de que cada tiro anote o no en la Copa Mundial.

  1. En el Editor de consultas, haz clic en "+" (Consulta en SQL).
  2. Copia el siguiente código y pégalo en el Editor de consultas:
SELECT * FROM ML.PREDICT( MODEL `soccer.xg_logistic_reg_model`, ( SELECT Events.subEventName AS shotType, /* 101 is known Tag for 'goals' from goals table */ (101 IN UNNEST(Events.tags.id)) AS isGoal, `soccer.GetShotDistanceToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotDistance, `soccer.GetShotAngleToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotAngle FROM `soccer.events` Events LEFT JOIN `soccer.matches` Matches ON Events.matchId = Matches.wyId LEFT JOIN `soccer.competitions` Competitions ON Matches.competitionId = Competitions.wyId WHERE /* Look only at World Cup matches for model predictions */ Competitions.name = 'World Cup' AND /* Includes both "open play" & free kick shots (including penalties) */ ( eventName = 'Shot' OR (eventName = 'Free Kick' AND subEventName IN ('Free kick shot', 'Penalty')) ) ) )

Esto llama a la función ML.PREDICT en el modelo de regresión logística que se ajustó anteriormente.

La sentencia SELECT crea los mismos campos en todos los tiros de los datos de events que se usaron para ajustar el modelo, pero esta vez filtra solo los partidos de la Copa Mundial (en lugar de dejarlos fuera), ya que esos son los tiros a los que se aplicará el modelo.

  1. Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.

Página Resultados con pestañas en la que se muestran cinco líneas de resultados de la consulta.

El resultado muestra un par de campos relacionados con la predicción, junto con los campos originales de esos datos: tipo de tiro, distancia, ángulo y éxito:

  • predicted_isGoal, una predicción binaria de si el tiro resultaría en un gol o no
  • predicted_isGoal_probs, un array de pares (etiqueta, probabilidad) que muestra la probabilidad de que cada tiro sea exitoso y no del modelo

Identifica los objetivos menos probables con las probabilidades del modelo

A partir de la sección anterior, que arrojó probabilidades para todos los tiros en la Copa Mundial 2018, usa BigQuery para extraer la probabilidad de cada gol y, luego, ordenar de menor a mayor para ver los goles más improbables anotados en la Copa Mundial en función de los factores del modelo.

En teoría, esto debería generar una lista de algunos de los goles más impresionantes del torneo, al menos según los factores del modelo (distancia, ángulo, etcétera).

  1. En el Editor de consultas, haz clic en "+" (Consulta en SQL).
  2. Agrega el siguiente código al Editor de consultas:
SELECT predicted_isGoal_probs[ORDINAL(1)].prob AS predictedGoalProb, * EXCEPT (predicted_isGoal, predicted_isGoal_probs), FROM ML.PREDICT( MODEL `soccer.xg_logistic_reg_model`, ( SELECT Events.playerId, (Players.firstName || ' ' || Players.lastName) AS playerName, Teams.name AS teamName, CAST(Matches.dateutc AS DATE) AS matchDate, Matches.label AS match, /* Convert match period and event seconds to minute of match */ CAST((CASE WHEN Events.matchPeriod = '1H' THEN 0 WHEN Events.matchPeriod = '2H' THEN 45 WHEN Events.matchPeriod = 'E1' THEN 90 WHEN Events.matchPeriod = 'E2' THEN 105 ELSE 120 END) + CEILING(Events.eventSec / 60) AS INT64) AS matchMinute, Events.subEventName AS shotType, /* 101 is known Tag for 'goals' from goals table */ (101 IN UNNEST(Events.tags.id)) AS isGoal, `soccer.GetShotDistanceToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotDistance, `soccer.GetShotAngleToGoal`(Events.positions[ORDINAL(1)].x, Events.positions[ORDINAL(1)].y) AS shotAngle FROM `soccer.events` Events LEFT JOIN `soccer.matches` Matches ON Events.matchId = Matches.wyId LEFT JOIN `soccer.competitions` Competitions ON Matches.competitionId = Competitions.wyId LEFT JOIN `soccer.players` Players ON Events.playerId = Players.wyId LEFT JOIN `soccer.teams` Teams ON Events.teamId = Teams.wyId WHERE /* Look only at World Cup matches to apply model */ Competitions.name = 'World Cup' AND /* Includes both "open play" & free kick shots (but not penalties) */ ( eventName = 'Shot' OR (eventName = 'Free Kick' AND subEventName IN ('Free kick shot')) ) AND /* Filter only to goals scored */ (101 IN UNNEST(Events.tags.id)) ) ) ORDER BY predictedgoalProb

Esto se basa en la llamada a la función ML.PREDICT de la sección anterior, filtrando solo los tiros que fueron gol (sin incluir los penales, ya que el objetivo es obtener los goles más "impresionantes"), extrayendo solo la probabilidad de que se marque un gol de las predicciones y ordenando según ese valor.

Se agregan algunos campos en la sentencia SELECT a partir de los datos de events y de las demás tablas que pueden unirse a ella, para obtener otra información de interés sobre cada gol, como el jugador y el equipo que lo anotaron, la fecha y la información del partido, y el minuto del gol dentro del encuentro.

  1. Haz clic en Ejecutar. Los resultados se muestran debajo de la ventana de consulta.

Haz clic en Revisar mi progreso para verificar el objetivo

Verificar que la consulta se haya ejecutado

Las primeras líneas muestran los goles de la Copa Mundial 2018 que, según el modelo, tenían la menor probabilidad de entrar: todos con distancias de tiro bastante largas (cerca de 30 metros) y ángulos relativamente cerrados (entre 10° y 15°).

Para una validación visual, puedes mirar el gol de Antoine Griezmann que ocupa el primer lugar en la lista; aunque, siendo justos, es más un gol poco probable que uno impresionante, según cómo lo jugó el arquero.

Para ver un gol más espectacular, en línea con lo que este análisis busca destacar, mira este increíble tiro de Son Heung-min, de la República de Corea, contra México, que ocupó el segundo lugar en los resultados.

En la siguiente sección, pon a prueba tu comprensión de lo que aprendiste en esta introducción a BigQuery ML.

Cuestionario sorpresa

Completa un breve cuestionario sobre los temas abordados en este lab para poner a prueba tus conocimientos sobre BigQuery.

¡Felicitaciones!

Creaste modelos de aprendizaje automático con datos de fútbol. Creaste funciones definidas por el usuario en BigQuery para calcular la distancia y el ángulo de los tiros; luego, usaste BigQuery ML para crear un modelo de goles esperados y usaste la funcionalidad de predicción de BigQuery ML en datos “nuevos” de la Copa Mundial 2018 para determinar algunos de los goles más impresionantes del torneo.

Capacitación y certificación de Google Cloud

Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.

Última actualización del manual: 30 de enero de 2025

Prueba más reciente del lab: 30 de enero de 2025

Copyright 2026 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.

Antes de comenzar

  1. Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
  2. .
  3. Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
  4. En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar

Usa la navegación privada

  1. Copia el nombre de usuario y la contraseña proporcionados para el lab
  2. Haz clic en Abrir la consola en modo privado

Accede a la consola

  1. Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
  2. Acepta las condiciones y omite la página de recursos de recuperación
  3. No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto

Este contenido no está disponible en este momento

Te enviaremos una notificación por correo electrónico cuando esté disponible

¡Genial!

Nos comunicaremos contigo por correo electrónico si está disponible

Un lab a la vez

Confirma para finalizar todos los labs existentes y comenzar este

Usa la navegación privada para ejecutar el lab

Usar una ventana de incógnito o de navegación privada es la mejor forma de ejecutar este lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.