como un NBA ¿entrenador? ¿Cuánto dura un entrenador típico? ¿Y su formación de coaching juega algún papel en la predicción del éxito?
Este análisis se inspiró en varias teorías clave. Primero, ha habido una crítica común entre los fanáticos casuales de la NBA que los equipos prefieren la contratación de candidatos con experiencia previa en entrenadores en jefe de la NBA.
En consecuencia, este análisis tiene como objetivo responder dos preguntas relacionadas. Primero, ¿es cierto que los equipos de la NBA frecuentemente vuelven a contratar candidatos con experiencia previa en el entrenador en jefe? Y segundo, ¿hay alguna evidencia de que estos candidatos tengan un rendimiento inferior en relación con otros candidatos?
La segunda teoría es que los candidatos internos (aunque con poca frecuencia contratados) a menudo tienen más éxito que los candidatos externos. Esta teoría se derivó de un par de anécdotas. Dos de los entrenadores más exitosos en la historia de la NBA, Gregg Popovich de San Antonio y Erik Spoelstra de Miami, fueron contrataciones internas. Sin embargo, se necesita evidencia cuantitativa rigurosa para probar si esta relación se mantiene sobre una muestra más grande.
Este análisis tiene como objetivo explorar estas preguntas y proporcionar el código para reproducir el análisis en Pitón.
Los datos
El código (contenido en un cuaderno de Jupyter) y el conjunto de datos para este proyecto son Disponible en Github aquí. El análisis se realizó utilizando Python en Google Colaboratory.
Un requisito previo para este análisis fue determinar una forma de medir el éxito del entrenamiento cuantitativamente. Decidí una idea simple: el éxito de un entrenador se mediría mejor por la duración de su mandato en ese trabajo. La tenencia mejor representa las diferentes expectativas que podrían colocarse en un entrenador. Se espera que un entrenador contratado para un equipo contador gane juegos y genere profundas carreras de playoffs. Un entrenador contratado para un equipo de reconstrucción podría ser juzgado por el desarrollo de jugadores más jóvenes y su capacidad para construir una cultura fuerte. Si un entrenador cumple con las expectativas (sean cuales sean), el equipo los mantendrá cerca.
Como no había un conjunto de datos existente con todos los datos requeridos, recopilé los datos de Wikipedia. Registré cada cambio de entrenamiento fuera de temporada desde 1990 hasta 2021. Dado que la variable de resultado primaria es la tenencia, se excluyeron los cambios de entrenamiento de temporada en la temporada ya que estos entrenadores a menudo llevaban una etiqueta “interina”, lo que significa que estaban destinados a ser temporales hasta que se pudiera encontrar un reemplazo permanente.
Además, se recogieron las siguientes variables:
| Variable | Definición |
| Equipo | El equipo de la NBA El entrenador fue contratado para |
| Año | El año en que el entrenador fue contratado |
| Entrenador | El nombre del entrenador |
| ¿Interno? | Un indicador si el entrenador era interno o no, por ejemplo, trabajaron para la organización de alguna manera inmediatamente antes de ser contratado como entrenador en jefe |
| Tipo | Los antecedentes del entrenador. Las categorías son HC anteriores (experiencia previa en el entrenador en jefe de la NBA), AC anterior (experiencia previa al entrenamiento asistente de la NBA, pero sin experiencia en entrenador en jefe), la universidad (entrenador en jefe de un equipo universitario), jugador (un ex jugador de la NBA sin experiencia en entrenamiento), administración (alguien con experiencia en la oficina principal pero sin experiencia de entrenamiento) y extranjeros (alguien entrenador fuera de América del Norte sin experiencia en entrenamiento de la NBA). |
| Años | El número de años que un entrenador fue empleado en el papel. Para los entrenadores despedidos a mitad de temporada, el valor se contó como 0.5. |
Primero, el conjunto de datos se importa de su ubicación en Google Drive. También convierto ‘¿interno?’ en una variable ficticia, reemplazando “sí” con 1 y “no” con 0.
from google.colab import drive
drive.mount('/content/drive')
import pandas as pd
pd.set_option('display.max_columns', None)
#Bring in the dataset
coach = pd.read_csv('/content/drive/MyDrive/Python_Files/Coaches.csv', on_bad_lines = 'skip').iloc[:,0:6]
coach['Internal'] = coach['Internal?'].map(dict(Yes=1, No=0))
coach
Esto imprime una vista previa de cómo se ve el conjunto de datos:
En total, el conjunto de datos contiene 221 contrataciones de coaching durante este tiempo.
Estadística descriptiva
Primero, resumen básico Estadística se calculan y visualizan para determinar los fondos de los entrenadores en jefe de la NBA.
#Create chart of coaching background
import matplotlib.pyplot as plt
#Count number of coaches per category
counts = coach['Type'].value_counts()
#Create chart
plt.bar(counts.index, counts.values, color = 'blue', edgecolor = 'black')
plt.title('Where Do NBA Coaches Come From?')
plt.figtext(0.76, -0.1, "Made by Brayden Gerrard", ha="center")
plt.xticks(rotation = 45)
plt.ylabel('Number of Coaches')
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
for i, value in enumerate(counts.values):
plt.text(i, value + 1, str(round((value/sum(counts.values))*100,1)) + '%' + ' (' + str(value) + ')', ha='center', fontsize=9)
plt.savefig('coachtype.png', bbox_inches = 'tight')
print(str(round(((coach['Internal'] == 1).sum()/len(coach))*100,1)) + " percent of coaches are internal.")
Más de la mitad de los contrataciones de entrenamiento anteriormente sirvieron como entrenador en jefe de la NBA, y casi el 90% tenía experiencia en el entrenamiento de la NBA de algún tipo. Esto responde a la primera pregunta planteada: los equipos de NBA muestran una fuerte preferencia por los entrenadores en jefe experimentados. Si te contratan una vez como entrenador de la NBA, tus probabilidades de ser contratado nuevamente son mucho más altas. Además, el 13.6% de los empleados son internos, lo que confirma que los equipos no contratan con frecuencia de sus propias filas.
En segundo lugar, exploraré la tenencia típica de un entrenador en jefe de la NBA. Esto se puede visualizar usando un histograma.
#Create histogram
plt.hist(coach['Years'], bins =12, edgecolor = 'black', color = 'blue')
plt.title('Distribution of Coaching Tenure')
plt.figtext(0.76, 0, "Made by Brayden Gerrard", ha="center")
plt.annotate('Erik Spoelstra (MIA)', xy=(16.4, 2), xytext=(14 + 1, 15),
arrowprops=dict(facecolor='black', shrink=0.1), fontsize=9, color='black')
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.savefig('tenurehist.png', bbox_inches = 'tight')
plt.show()
coach.sort_values('Years', ascending = False)
#Calculate some stats with the data
import numpy as np
print(str(np.median(coach['Years'])) + " years is the median coaching tenure length.")
print(str(round(((coach['Years'] <= 5).sum()/len(coach))*100,1)) + " percent of coaches last five years or less.")
print(str(round((coach['Years'] <= 1).sum()/len(coach)*100,1)) + " percent of coaches last a year or less.")
Utilizando la tenencia como indicador de éxito, los datos muestran claramente que la gran mayoría de los entrenadores no tienen éxito. La mediana de tenencia es de solo 2.5 temporadas. El 18.1% de los entrenadores duran una sola temporada o menos, y apenas el 10% de los entrenadores duran más de 5 temporadas.
Esto también se puede ver como una trama de análisis de supervivencia para ver la caída en varios puntos de tiempo:
#Survival analysis
import matplotlib.ticker as mtick
lst = np.arange(0,18,0.5)
surv = pd.DataFrame(lst, columns = ['Period'])
surv['Number'] = np.nan
for i in range(0,len(surv)):
surv.iloc[i,1] = (coach['Years'] >= surv.iloc[i,0]).sum()/len(coach)
plt.step(surv['Period'],surv['Number'])
plt.title('NBA Coach Survival Rate')
plt.xlabel('Coaching Tenure (Years)')
plt.figtext(0.76, -0.05, "Made by Brayden Gerrard", ha="center")
plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter(1))
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.savefig('coachsurvival.png', bbox_inches = 'tight')
plt.show
Por último, se puede generar una parcela de caja para ver si hay diferencias obvias en la tenencia basadas en el tipo de entrenamiento. Los diagramas de caja también muestran valores atípicos para cada grupo.
#Create a boxplot
import seaborn as sns
sns.boxplot(data=coach, x='Type', y='Years')
plt.title('Coaching Tenure by Coach Type')
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.xlabel('')
plt.xticks(rotation = 30, ha = 'right')
plt.figtext(0.76, -0.1, "Made by Brayden Gerrard", ha="center")
plt.savefig('coachtypeboxplot.png', bbox_inches = 'tight')
plt.show
Hay algunas diferencias entre los grupos. Además de las contrataciones de gestión (que tienen una muestra de solo seis), los entrenadores en jefe anteriores tienen la tenencia promedio más larga a los 3.3 años. Sin embargo, dado que muchos de los grupos tienen tamaños de muestra pequeños, necesitamos utilizar técnicas más avanzadas para probar si las diferencias son estadísticamente significativas.
Análisis estadístico
Primero, para probar si cualquier tipo o interno tiene una diferencia estadísticamente significativa entre las medias del grupo, podemos usar ANOVA:
#ANOVA
import statsmodels.api as sm
from statsmodels.formula.api import ols
am = ols('Years ~ C(Type) + C(Internal)', data=coach).fit()
anova_table = sm.stats.anova_lm(am, typ=2)
print(anova_table)
Los resultados muestran valores p altos y bajos-stats F, lo que no indica evidencia de diferencias estadísticamente significativas en las medias. Por lo tanto, la conclusión inicial es que no hay evidencia de que los equipos de la NBA subvieran a los candidatos internos o sobrevaloran la experiencia previa de entrenamiento en jefe como se hipotetiza inicialmente.
Sin embargo, hay una posible distorsión al comparar promedios de grupo. Los entrenadores de la NBA están firmados con contratos que generalmente funcionan entre tres y cinco años. Los equipos generalmente tienen que pagar el resto del contrato, incluso si los entrenadores se desestiman temprano por un bajo rendimiento. Un entrenador que dura dos años puede no ser peor que uno que dure tres o cuatro años; la diferencia podría ser simplemente atribuible a la duración y los términos del contrato inicial, lo que a su vez se ve afectado por la deseabilidad del entrenador en el mercado laboral. Dado que los entrenadores con experiencia previa son muy codiciados, pueden usar ese apalancamiento para negociar contratos más largos y/o salarios más altos, los cuales podrían disuadir a los equipos de terminar su empleo demasiado temprano.
Para dar cuenta de esta posibilidad, el resultado puede tratarse como binario en lugar de continuo. Si un entrenador duró más de 5 temporadas, es muy probable que hayan completado al menos su plazo de contrato inicial y el equipo eligió extenderlas o volver a firmarlas. Estos entrenadores serán tratados como éxitos, y aquellos que tengan una tenencia de cinco años o menos categorizados como fallidos. Para ejecutar este análisis, todas las contrataciones de entrenamiento de 2020 y 2021 deben ser excluidas, ya que aún no han podido eclipsar 5 temporadas.
Con una variable dependiente binaria, se puede usar una regresión logística para probar si alguna de las variables predice el éxito del entrenador. Interno y tipo se convierten en variables ficticias. Dado que los entrenadores en jefe anteriores representan las contrataciones de entrenamiento más comunes, establecí esto como la categoría de “referencia” contra la cual se medirán los demás. Además, el conjunto de datos contiene solo un entrenador de contrato extranjero (David Blatt), por lo que esta observación se elimina del análisis.
#Logistic regression
coach3 = coach[coach['Year']<2020]
coach3.loc[:, 'Success'] = np.where(coach3['Years'] > 5, 1, 0)
coach_type_dummies = pd.get_dummies(coach3['Type'], prefix = 'Type').astype(int)
coach_type_dummies.drop(columns=['Type_Previous HC'], inplace=True)
coach3 = pd.concat([coach3, coach_type_dummies], axis = 1)
#Drop foreign category / David Blatt since n = 1
coach3 = coach3.drop(columns=['Type_Foreign'])
coach3 = coach3.loc[coach3['Coach'] != "David Blatt"]
print(coach3['Success'].value_counts())
x = coach3[['Internal','Type_Management','Type_Player','Type_Previous AC', 'Type_College']]
x = sm.add_constant(x)
y = coach3['Success']
logm = sm.Logit(y,x)
logm.r = logm.fit(maxiter=1000)
print(logm.r.summary())
#Convert coefficients to odds ratio
print(str(np.exp(-1.4715)) + "is the odds ratio for internal.") #Internal coefficient
print(np.exp(1.0025)) #Management
print(np.exp(-39.6956)) #Player
print(np.exp(-0.3626)) #Previous AC
print(np.exp(-0.6901)) #College
De acuerdo con los resultados de ANOVA, ninguna de las variables es estadísticamente significativa bajo ningún umbral convencional. Sin embargo, un examen más detallado de los coeficientes cuenta una historia interesante.
Los coeficientes beta representan el cambio en los log-Odds del resultado. Dado que esto no es intuitivo para interpretar, los coeficientes se pueden convertir a una odds ratio de la siguiente manera:
El interno tiene una razón de probabilidad de 0.23, indicando que los candidatos internos tienen un 77% menos de probabilidades de tener éxito en comparación con los candidatos externos. La gerencia tiene una probabilidad de 2.725, lo que indica que estos candidatos tienen un 172.5% más de probabilidades de tener éxito. Las probabilidades para los jugadores son efectivamente cero, 0.696 para entrenadores asistentes anteriores y 0.5 para entrenadores universitarios. Dado que tres de cada cuatro variables ficticias de tipo coaching tienen una probabilidad bajo una, esto indica que solo las contrataciones de gestión tenían más probabilidades de tener éxito que los entrenadores anteriores.
Desde un punto de vista práctico, estos son grandes tamaños de efectos. Entonces, ¿por qué las variables son estadísticamente insignificantes?
La causa es un tamaño de muestra limitado de entrenadores exitosos. De 202 entrenadores restantes en la muestra, solo 23 (11.4%) fueron exitosos. Independientemente de los antecedentes del entrenador, las probabilidades son bajas, duran más de unas pocas temporadas. Si observamos una categoría, capaz de superar a los entrenadores en jefe anteriores (contrataciones de gestión) específicamente:
# Filter to management
manage = coach3[coach3['Type_Management'] == 1]
print(manage['Success'].value_counts())
print(manage)
El conjunto de datos filtrado contiene solo 6 contrataciones, de las cuales solo una (Steve Kerr con Golden State) se clasifica como un éxito. En otras palabras, todo el efecto fue impulsado por una sola observación exitosa. Por lo tanto, tomaría un tamaño de muestra considerablemente mayor para tener confianza si existen diferencias.
Con un valor p de 0.202, la variable interna viene más cercana a la significación estadística (aunque todavía no alcanza un alfa típico de 0.05). En particular, sin embargo, la dirección del efecto es en realidad lo opuesto a lo que se hipotetizó: es menos probable que los contrataciones internas tengan éxito que las contrataciones externas. De 26 contrataciones internas, solo una (Erik Spoelstra de Miami) cumplió con los criterios de éxito.
Conclusión
En conclusión, este análisis pudo sacar varias conclusiones clave:
- Independientemente de los antecedentes, ser entrenador de la NBA es típicamente un trabajo de corta duración. Es raro que un entrenador dure más de unas pocas temporadas.
- La sabiduría común que los equipos de la NBA prefieren contratar entrenadores anteriores en jefe es cierta. Más de la mitad de los contrataciones ya tenían experiencia en entrenador en jefe de la NBA.
- Si los equipos no contratan a un entrenador en jefe experimentado, es probable que contrate a un entrenador asistente de la NBA. Las contrataciones fuera de estas dos categorías son especialmente poco comunes.
- Aunque con frecuencia son contratados, no hay evidencia que sugiera que los equipos de la NBA prioricen demasiado a los entrenadores en jefe anteriores. Por el contrario, los entrenadores en jefe anteriores permanecen en el trabajo por más tiempo en promedio y es más probable que supere su término de contrato inicial, aunque ninguna de estas diferencias es estadísticamente significativa.
- A pesar de las anécdotas de alto perfil, no hay evidencia que sugiera que las contrataciones internas tengan más éxito que las contrataciones externas tampoco.
NOTA: Todas las imágenes fueron creadas por el autor a menos que se acredite lo contrario.