Baloncesto y estadística: Consulta SQL para calcular el porcentaje de robos de un jugador

Seguimos con el tema de la estadística baloncestística avanzada. Ya vimos cómo se calcula el PIE,también los porcentajes de tiro avanzado y real y hubo otra entrada sobre estadísticas de asistencias. Hoy vamos con el porcentaje de robos.

¿Qué nos indica este porcentaje? Pues la cantida de balones que un jugador recupera, pero teniendo en cuenta los minutos que juega y el ritmo de juego del rival. Aquí es importante matizar ¿qué entendemos por robo? Pues cuando un jugador, por medio de una acción defensiva legal, logra que el rival pierda la posesión del balón ganándola a su vez para su equipo. Es decir, que no cuenta ni cuando se recuperan balones sueltos ni cuando se intercepta el balón cambiando su trayectoria pero sin recuperar la posesión. Ojo, ahora la NBA también recoge eso en sus estadísticas oficiales avanzadas como «Loose ball recoverd» y «Deflections«. Peor lo que ahora nos ocupa es el tema de los robos.

¿La fórmula? Es la siguiente:

100 * Robos del Jugador * Minutos totales de Partido / Minutos jugados por el jugador * Posesiones del equipo rival.

En una base de datos donde tuviéramos los campos Robos,MinutosPartido,MinutosJugador y PosesionesRival la consulta sería algo así

Select 100.00*Convert(Numeric(4,2),Robos)*Convert(Numeric(4,2),MinutosPartido)/Convert(Numeric(4,2),MinutosJugador)*Convert(Numeric(4,2),PosesionesRival) as StealPcnt

¿Limitaciones de esta estadística? Pues que recoge solo el porcentaje de éxitos, al igual que el total de robos, por lo que un jugador puede quedar sobrerrepresentado en la misma, pareciendo mejor defensor de lo que es. Gente como Monta Ellis o, en Europa, Bo McCalebb son jugadores con manos rápidas que por su estilo defensivo consiguen muchos robos pero que en el global no son grandes defensores.

Baloncesto y estadística: Consulta SQL para calcular los ratios de asistencias de un jugador

Seguimos con el tema de la estadística baloncestística avanzada. Ya vimos cómo se calcula el PIE y también los porcentajes de tiro avanzado y real, así que hoy vamos con los ratios de asistencias.

En este caso tenemos dos fórmulas distintas, ya que por un lado tenemos el Ratio de Asistencias de Hollinger (hAST%) y por otro el de Pomeroy (pAST%).

El ratio de Hollinger se calcula respecto al número de balones que terminan en manos del jugador mientras que el de Pomeroy lo calcula respecto al tiempo que el jugador está en la pista y el número de posesiones.

La fórmula de Hollinger sería la siguiente:

ASISTENCIAS*100 / (TIROS DE CAMPO INTENTADOS POR EL JUGADOR+ 0.44 * TIROS LIBRES INTENTADOS POR EL JUGADOR + ASISTENCIAS + PÉRDIDAS)

Por su parte la de Pomeroy sería esta:

ASISTENCIAS*100 / (((MINUTOS JUGADOS / (MINUTOS TOTALES DEL EQUIPO / 5)) * TIROS DE CAMPO INTENTADOS POR EL EQUIPO ) – TIROS DE CAMPO INTENTADOS POR EL JUGADOR)

Entonces suponiendo que tenemos una tabla Estadisticas con los campos: Asistencias, Tiros, TirosLibres, Perdidas con los valores correspondientes, la fórmula de Hollinger la sacaríamos tal que así:

Select Convert(Numeric(5,2),Asistencias)*100.00  / (Convert(Numeric(5,2),Tiros)+ 0.44 * Convert(Numeric(5,2),TirosLibres) + Convert(Numeric(5,2),Asistencias) + Convert(Numeric(5,2),Perdidas)) as hAST from Estadisticas

Para la de Pomeroy necesitaríamos una tabla com los campos Asistencias,Minutos,MinutosEquipo,TirosEquipo y Tiros:

Select Convert(Numeric(5,2),Asistencias)*100.00  / (((Minutos / (Convert(Numeric(5,2),MinutosEquipo) / 5.00)) * Convert(Numeric(5,2),TirosEquipo)) - Convert(Numeric(5,2),Tiros)) as pAST from Estadisticas

Finalmente nos quedaría el ratio de asistencias por pérdida, que consiste simplemente en dividir las asistencias repartidas entre las pérdidas de balón sufridas. Suponiendo una tabla con los campos Asistencias y Perdidas la consulta sería:

Select Convert(Numeric(5,2),Asistencias)/Convert(Numeric(5,2),Perdidas) as ASTTO from Estadisticas

La críticaal ratio de Hollinger es que solamente refleja la tendencia de un jugador a asistir y no tanto su eficacia, mientras que la crítica al de Pomeroy es que si los compañeros fallan muchos tiros penalizan la estadística del asistente.

Baloncesto y estadística: Consulta SQL para calcular el porcentaje de tiro efectivo (eFG%) y el porcentaje de tiro verdadero (TS%)

El otro día habláblamos un poco sobre estadística avanzada en baloncesto viendo cómo se calcula el PIE, y como ha sido un artículo bien recibido vamos a ver cómo podemos calcular las dos principales estadísticas avanzadas de tiro y aplicarlas a una consulta SQL. Pero veamos primero qué son estas estadísticas.

La estadística de tiro clásica, el porcentaje de tiros anotados, ha dado resultados engañosos desde que se introdujo el tiro de tres. Pensemos por un segundo en dos jugadores que lanzan diez tiros: el primero lanza diez tiros de dos y anota seis, el segundo diez triples y anota cuatro. El porcentaje de tiro simple del primero es de un 60% mientras que el del segundo es de un 40%, pero en realidad ambos han anotado la misma cantidad de puntos: 12. El porcentaje de tiro efectivo y el porcentaje de tiro verdadero ponderan el mayor valor de los triples y el menor valor de los tiros libres para que el cálculo de la efectividad del tirador sea más realista. Dwight Howard o Clint Capela, que anotan mucho pegados al aro o machacando, tendrían mejores porcentajes simples que tiradores excelsos desde la larga distancia como Nowitzki o Curry. O en la ACB podría ser el caso de Tomic y Navarro.

El porcentaje de tiro efectivo es la estadística que pondera el mayor valor de los triples y la fórmula para su cálculo es: (Tiros de campo anotados+0.5*Triples Anotados)/Tiros de campo intentados.

El porcentaje de tiro verdadero incluye también el valor de los tiros libres y se calcula con la siguiente fórmula: Puntos / 2 * (Tiros de campo intentados + 0.44 * Tiros libres intentados)

Supongamos que tenemos una tabla llamada Tiros con las estadísticas de tiro de un jugador en una base de datos SQL-Server, con los siguientes campos: TirosIntentados, TirosAnotados, TriplesAnotados, TirosLibresIntentados y Puntos. Podríamos tener más, pero estos son los campos que necesitamos. Supongamos que todos estos campos almacenan números enteros, que sería lo lógico, y que tendremos que aplicar una conversión porque necesitamos un resultado decimal (en SQL-Server 2008 sería necesario ).

¿Cómo irían las consultas? Aquí para el eFG%:

Select ((Convert(Numeric(4,2),TirosAnotados)+0.5*Convert(Numeric(4,2),TriplesAnotados))/Convert(Numeric(4,2),TirosIntentados)) as eFG from Tiros

Aquí para el TS%:

Select (Convert(Numeric(4,2),Puntos) / 2.00 * (Convert(Numeric(4,2),TirosIntentados) + 0.44 * Convert(Numeric(4,2),TirosLibresIntentados))) as TS from Tiros

Baloncesto y estadística: ¿Cómo se calcula el porcentaje de impacto o PIE?

Iba a hacer una entrada hablando de cómo calcular el PIE en una tabla de Excel o en una consulta SQL, pero mejor dejaré por aquí la fórmula y que cada cual le de el uso adecuado. Pero vayamos por partes ¿qué es el PIE? ¿Existe también la MANO?

PIE no es otra cosa que el acrónimo de Player Impact Estimate, una estadística que pretende medir el impacto estadístico de un jugador respecto a las estadísticas totales de un partido. Citando textualmente a la web de la NBA:

«In its simplest terms, PIE shows what % of game events did that player or team achieve».

Desde el fenómeno «Moneyball» en (casi) todos los deportes vivimos una época de obsesión con las estadísticas. Este artículo de Andrés Monje es un guía genial para echarle un ojo a todas estas nuevas métricas que hacen que cada vez muchos llamados «intangibles» sean más tangibles y contables. También puedes pegarle una oída a los podcast de Javi Mendoza, un apasionado de todos los temas relacionados con estadística y baloncesto.

Este PIE fue incluído en un primer momento en las estadísticas oficiales de la WNBA en la temporada 2013, como una alternativa a la popular estadística avanzada de eficiencia (PER) de John Hollinger. Seguidamente la gente de su sección de estadística  lo incluiría dentro de las estadísticas oficiales de la web de la NBA también.

Para calcular el PIE tenemos que sumar y restar las estadísticas positivas y negativas del jugador y dividirlo entre los totales de esas estadísticas del partido. La fórmula, tal cual está recogida en la web de la NBA, es la siguiente:

(PTS + (FGM + FTM – FGA – FTA) + DREB + (0.5 * OREB) + AST + STL + (0.5 * BLK) – PF – TO) / (GmPTS + (GmFGM + GmFTM – GmFGA – GmFTA) + GmDREB + (0.5 * GmOREB) + GmAST + GmSTL + (0.5 * GmBLK) – GmPF – GmTO)

O lo que es lo mismo: Sumamos los puntos, tiros de campo anotados, tiros libres anotados, rebotes defensivos, asistencias, robos, los rebotes ofensivos divididos entre dos y los tapones divididos entre dos, y restamos los tiros de campo intentados, los tiros libres intentados, las pérdidas de balón y las faltas cometidas por el jugador. Luego dividimos ese resultado entre el producto de la misma operación pero con los valores totales del partido: todos los puntos, todos los tiros intentados, todos los rebotes, etc.

¿La diferencia con el PER? El PER nos da un valor ajustado por minutos, ritmo y la media de la liga, mientras que el PIE nos da un valor relativo a los totales del partido disputado (o de todos los partidos, si así lo queremos).

¿Y con la Valoración del basket FIBA? En ese caso esa estadística solo realiza la suma de la aportación estadística del jugador, pero no la pone en relación con los totales.

¿Qué estadística es más útil? Pues hay tantos defensores como detractores de ambas. Se critica, por ejemplo, que el PER no valora el impacto defensivo del jugador o que no tiene en cuenta la eficiencia de los tiradores, no penalizando a los que fallan muchos tiros. También hay quien critica que el PIE no es más que una versión actualizada de la antigua estadística de EFF de la NBA, añadiendo el denominador con los totales para compensar el que no haya una relación con el ritmo del partido.

 

 

SQL-Server y capitalización compuesta: calcular el capital final.

Ayer veíamos cómo calcular el capital final y los intereses sobre un importe aplicando la formula de la capitalización simple en una consulta de SQL-Server. Hoy vamos a ver cómo calcular el capital final, pero con la fórmula de la capitalización compuesta:

La capitalización compuesta es una fórmula financiera que permite calcular el equivalente de un capital en un momento posterior.

La diferencia entre la capitalización simple y la compuesta radica en que en la simple sólo genera intereses el capital inicial, mientras que en la compuesta se considera que los intereses que va generando el capital inicial, ellos mismos van generando nuevos intereses.

La fórmula para obtener el capital final sería Cf = C0 * (( 1 + i) ^ t) siendo C0 el capital inicial, i el tipo de interés y t el tiempo. Ahora supongamo, como en el ejemplo de la capitalización simple, que tenemos una tabla llamada Depositos con una columna Capital donde almacenamos el dato del capital inicial, que para el ejemplo serán 2000 euros (C0=2000), una columna Interes con el tipo de interés, que para el ejmplo será del 5% anual (i=0.05) y una columna Tiempo que será de 10 años.

Entonces ¿cómo nos quedaría la consulta?

Select CONVERT(float,Importe)*POWER(CONVERT(float,(1.00+Interes)),Tiempo) from Depositos

¿Por qué metí ahí las funciones CONVERT() para asegurarme de que los valores con los que se operan son float? Bueno, en el caso del importe porque ya sabéis, como comentamos anteriormente, que SQL-Server 2008 (también os comenté que estoy estudiando las versiones posteriores) convierte a enteros los resultados de las operaciones si operamos con algún entero en las mismas. En el caso del segundo es por el funcionamiento de la función POWER(). Dicha función recibe dos parámetros y devuelve el valor del primer parámetro elevado al valor del segundo parámetro, pero el tipo de dato devuelto es siempre el mismo tipo que el enviado en el primer parámetro. Si, por ejemplo, recibe un valor Numeric(4,2) redondearía el resultado a dos decimales y nos daría un resultado bastante impreciso por ello.

SQL-Server y Capitalización simple:calcular los intereses y el capital final

La capitalización simple es una fórmula financiera que permite calcular el equivalente de un capital en un momento posterior. Se utiliza generalmente en depósitos o préstamos a corto plazo.

Partiendo de un capital (aquí será C0) del que se dispone inicialmente, se determinará la cuantía final que se recuperará en el futuro sabidas las condiciones en las que la operación se contrata (tiempo –t– y tipo de interés –i-).

La fórmula para calcular los intereses sería la siguiente: I = C0 * i * t. Es decir, los intereses son el Capital multiplicado por el tipo de interés y el tiempo.

Ahora supongamos que tenemos una tabla Cuentas donde guardamos el capital inicial y las condiciones. Supongamos que tenemos un capital inicial de 1000 euros (C0=1000) guardado en el campo Capital, a un interés del 10% anual (i=0.1) almacenadado en el campo Interes y por un año (t=1) almacenado en el campo Tiempo:

Select Capital*Interes*Tiempo as InteresAnual from Cuentas

El resultado de la consulta de arriba debería ser de 100 euros.

Ahora, usando los mismos datos del ejemplo de arriba ¿Cómo sabríamos cual es el capital final? Una opción es calcular el interés y sumarlo al capital inicial, otro es aplicar la fórmula CapitalFinal = C0 * (1 + (i * t)). La consulta sería así:

#Así multiplicando
Select Capital*(1.00+(Interes*Tiempo)) as CapitalFinal from Cuentas

Recuerda que SQL-Server, al menos en la versión 2008 (estoy actualizándome ahora a 2017, con mucho por leer), convierte siempre a entero si utilizas enteros en la operación, por eso que puse el uno seguido de decimales en la segunda consulta. Recuérdalo también a la hora de almacenar los datos y de operar con ellos.

Otro punto importante: el tipo de interés y el plazo deben referirse a la misma medida temporal. Es decir: si el tipo es anual el plazo debe de ir en años, pero si el tipo es mensual el plazo irá en meses. Por ejemplo, ¿con los datos de antes cómo se calcularía el interés generado en cinco meses?

Select Capital*(Interes/12.00)*5.00 as InteresMeses from Cuentas

Dividimos el interés anual entre 12 para obtener el interés mensual y multiplicamos por 5 para obtener el resultado deseado.

¿Por qué un número elevado a 0 es igual a 1?

Esto se sale totalmente de la línea editorial del blog, desde luego, pero me apetecía contarlo por aquí. El caso es que en una charla de oficina comenté que una vez cuando cursaba 2º de ESO la profesora me hizo explicar en clase por qué cualquier número elevado a 0 es igual 1, y un compañero me discutió que no. Así que con 32 años me volvía a ver delante de una pizarra haciendo esta demostración:

Podemos expresar que X0 es el resultado de Xn-n siendo X cualquier número real menos el 0 y siendo n cualquier número real. O, por ponerlo con número, podemos decir 20 es el resultado de (por ejemplo) 22-2.

Entonces por propiedades de las potencias Xn-n es igual a Xn/Xn. Siguiendo el ejemplo anterior 22-2=22/22.

Por lo tanto tenemos que X0 = Xn/Xn, y siendo el numerador y el denominador iguales en la división el resultado es necesariamente 1. Es decir 20 = 22/22, por tanto 20 = 4/4. Y 4/4=1, así de simple.

¿Y en el caso del 00? Bueno, eso a mi ya me supera. Pero os dejo un enlace a otro blog donde lo explican y debaten, para que matéis vuestra curiosidad.