ACP NBA

L’analyse en composantes principales (ACP) est une méthode statistique permettant de réduire la redondance de l’information apportée par un ensemble de variables corrélées (liées de façon linéaire). La logique de cette méthode consiste à déterminer des nouvelles variables décorrélées les unes des autres, les composantes principales, dont chacune s’exprime comme une combinaison linéaire des variables de départ. Les composantes principales résument donc l’essentiel de l’information contenue dans un jeu de données.

Je vais illustrer ici l’efficacité de l’ACP en l’appliquant aux stats individuelles des joueurs de la NBA. Ces stats sont des variables telles que le nombre de points marqués par match, le pourcentage de réussite aux tirs, le nombre de rebonds offensifs, le nombre de passes décisives, etc. Ces variables sont plus ou moins corrélées entre elles. Peut-on résumer ces stats individuelles à l’aide de quelques dimensions uniquement ? Et auquel cas, quelles seraient-elles ?

Les données que j’ai analysées sont celles de la saison régulière 2014-2015, disponibles sur le site officiel de la NBA. Si vous voulez refaire vous-mêmes mes analyses (avec R) et gagner du temps, ces données sont accessibles ici au format .csv. Les données indiquent 18 stats individuelles pour 267 joueurs. On va voir comment une ACP résume toute cette information.

On commence par importer les données dans R :

d <- read.csv2(file.choose())
head(d)

Player_1Player_2PositionTeamPlayerGPMINPTSFGMFGAFG.X3PMX3PAX3P.FTMFTAFT.OREBDREBREBASTSTLBLKTOVEFF
Russell WestbrookRussell WestbrookPGOKCRussell Westbrook6734.428.19.42242.61.34.329.98.19.883.51.95.47.38.62.10.24.427.7
James HardenJames HardenSGHOUJames Harden8136.827.4818.1442.66.937.58.810.286.80.94.75.771.90.7427.2
LeBron JamesLeBron JamesSFCLELeBron James6936.125.3918.548.81.74.935.45.47.7710.75.367.41.60.73.925.3
Anthony DavisAnthony DavisPFNOAnthony Davis6836.124.49.417.653.500.28.35.56.880.52.57.710.22.21.52.91.430.3
DeMarcus CousinsDeMarcus CousinsCSACDeMarcus Cousins5934.124.18.418.146.700.1257.29.278.23.19.512.73.61.51.84.327.6
Stephen CurryStephen CurryPGGSStephen Curry8032.723.88.216.848.73.68.144.33.94.291.40.73.64.37.720.23.125.9

On effectue l’ACP :

pca <- prcomp(d[,8:ncol(d)], center = TRUE, scale. = TRUE)
summary(pca)

 PC1PC2PC3PC4PC5PC6PC7PC8PC9PC10PC11PC12PC13PC14PC15PC16PC17PC18
Standard deviation2.78882.3361.086940.921410.722080.694050.651280.628580.579120.545370.368090.341670.121080.086230.069960.018530.014020.008765
Proportion of Variance0.43210.30320.065640.047170.028970.026760.023570.021950.018630.016520.007530.006490.000810.000410.000270.000020.000010
Cumulative Proportion0.43210.73520.800890.848050.877020.903780.927350.94930.967930.984450.991980.998470.999280.999690.999970.9999811

On voit que les deux premières composantes principales rendent compte d’environ 75% de la variance des données, ce qui est un très bon résumé. Examinons la projection des variables (les stats individuelles) dans un espace à deux dimensions correspondant à ces deux composantes :

library(ggbiplot)
ggbiplot(pca)

ACP-NBA_1

La première composante (l’axe horizontal) représente des variables telles que le nombre de points marqués, le nombre de tirs tentés, le nombre de lancers francs, etc., elle correspond donc à l’activité offensive du joueur. La seconde composante (l’axe vertical) oppose d’une part des variables telles que le nombre de tirs à trois points tentés et le pourcentage de réussite aux tirs à trois points, et d’autre part des variables telles que le nombre de rebonds (offensifs et défensifs), le nombre de contres, etc., elle correspond donc à la position du joueur sur le terrain (la distance par rapport au panier). En effet, les joueurs qui prennent les tirs à trois points sont typiquement des meneurs ou des arrières tandis que les joueurs qui prennent les rebonds et qui contrent sont typiquement des intérieurs (pivot et ailier fort).

Ainsi, si on fait apparaître le poste de chaque joueur sur le graphique, on devrait voir émerger 5 clusters le long de l’axe vertical correspondant aux 5 postes standards d’une équipe de basket :

Poste 1 : Meneur (Point Guard)
Poste 2 : Arrière (Shooting Guard)
Poste 3 : Ailier (Small Forward)
Poste 4 : Ailier fort (Power Forward)
Poste 5 : Pivot (Center)

library(devtools)
install_github("ggbiplot", "vqv")

library(ggbiplot)
g <- ggbiplot(pca, obs.scale = 1, var.scale = 1, 
              groups = d$Position, ellipse = TRUE, 
              circle = TRUE)
g <- g + scale_color_discrete(name = '')
g <- g + theme(legend.direction = 'horizontal', 
               legend.position = 'top')
print(g)

C’est globalement ce que l’on voit apparaître :
ACP-NBA_3

Au passage, on remarque que les quatre joueurs a) dont l’activité offensive est particulièrement élevée, et b) qui jouent à des postes de meneur ou arrière (joueurs en haut à gauche sur le graphique : Stephen Curry, James Harden, Russell Westbrook, et Lebron James) occupent les quatre premières places du classement du MVP 2014-2015 :

ggbiplot(pca, labels=d$Player)

ACP-NBA_2

Le résumé que produit une ACP appliquée aux stats des joueurs de la NBA est une bonne illustration du caractère extrêmement efficace de l’ACP comme méthode de réduction de la dimensionnalité des données.

Share on FacebookTweet about this on TwitterEmail this to someone