Wprowadzenie

W dzisiejszych czasach czołowe kluby piłkarskie wydają miliony euro w celu kupienia odpowiedniego zawodnika, który pomoże odnieśc drużynie sukces, co może przełożyć się również na milionowe dochody. Jednak wiele zakupów za duże pięniadze kończy sie niepowodzeniem i pieniędze poprostu przepadają. W celu uniknięcia takiej sytuacji sprawdzone zostanie czy można podzielić zawodników na więcej grup o konkretnych cechach niż tylko na takich co “atakuja” i “bronią”. Taki podział pomógłby np. gdyby, drużyna straciła zawodnika, który dobrze wpasowywał się w drużyne, znaleźć na jego miejsce zawodnika o bardzo zbliżonej charakterystyce, co znacznie zwiększyło by szanse na to ze transfer jego byłby udany i w konsekwencji pozwoliłby uniknąć straty pięniedzy, o której była mowa wcześniej.

Można też postawić hipotezę, że zawodnicy grający na tych samych pozycjach nie bedą w tych samych grupach i bedą występować w różnych pomieszanych grupach z zawodnikami z innych pozycji. Inaczej mówiać po podzieleniu zawodników na grupy nałożone zostaną na nich ich faktyczne pozycje na boisku i sprawdzone czy grupy będą składać się z tych samych pozycji.

Opis danych

Na początek wyświetlono przykładowe wiersze z ramki danych:

players <- read.csv2("C:/Users/User/Desktop/R/cluster_analysis/cluster/players_50.csv", row.names=1)
head(players,7)
##                    Goals Assists Tackels Fouls Clear Dribbles Passes
## Robert Lewandowski  0.67    0.21     0.4   0.8   0.5      1.5   22.1
## Lorenzo Insigne     0.36    0.21     0.5   0.3   0.1      0.9   43.9
## Kalidou Koulibaly   0.06    0.06     1.7   1.4   3.9      0.3   71.9
## Benjamin Pavard     0.00    0.00     1.0   0.7   6.4      0.2   49.8
## Niklas Sule         0.06    0.00     0.9   0.5   2.6      0.1   82.6
## Raheem Sterling     0.50    0.29     0.9   1.2   0.1      2.4   37.1
## Kyle Walker         0.03    0.03     1.2   0.5   1.5      0.5   72.4
str(players)
## 'data.frame':    50 obs. of  7 variables:
##  $ Goals   : num  0.67 0.36 0.06 0 0.06 0.5 0.03 0.68 0.1 0.03 ...
##  $ Assists : num  0.21 0.21 0.06 0 0 0.29 0.03 0.26 0 0.41 ...
##  $ Tackels : num  0.4 0.5 1.7 1 0.9 0.9 1.2 0.3 0.6 2.1 ...
##  $ Fouls   : num  0.8 0.3 1.4 0.7 0.5 1.2 0.5 0.6 0.5 0.5 ...
##  $ Clear   : num  0.5 0.1 3.9 6.4 2.6 0.1 1.5 1 2.8 2.1 ...
##  $ Dribbles: num  1.5 0.9 0.3 0.2 0.1 2.4 0.5 1.5 0.1 0.5 ...
##  $ Passes  : num  22.1 43.9 71.9 49.8 82.6 37.1 72.4 33.3 55.7 58.5 ...

Dane zawierają 50 piłkarzy z czołowych klubów europejskich i statystyki uzyskane przez nich w ostanim zakończonym sezonie ligowym, czyli sezonie 2018/2019. Wybrani zawodnicy rozegrali po około 30 spotkań. Zostali opisani przez siedem zmiennych:

Dane pochodzą ze strony whoscored.com.

Wyświetlono podstawowe statystyki oraz graficzną prezentacje danych:

summary(players)
##      Goals           Assists          Tackels          Fouls      
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.300   Min.   :0.100  
##  1st Qu.:0.0700   1st Qu.:0.0625   1st Qu.:0.600   1st Qu.:0.500  
##  Median :0.1200   Median :0.1700   Median :1.150   Median :0.800  
##  Mean   :0.2564   Mean   :0.1774   Mean   :1.166   Mean   :0.814  
##  3rd Qu.:0.3850   3rd Qu.:0.2550   3rd Qu.:1.625   3rd Qu.:1.100  
##  Max.   :1.1400   Max.   :0.5400   Max.   :2.900   Max.   :1.700  
##      Clear          Dribbles         Passes     
##  Min.   :0.000   Min.   :0.100   Min.   :16.80  
##  1st Qu.:0.250   1st Qu.:0.500   1st Qu.:37.50  
##  Median :0.750   Median :0.900   Median :51.65  
##  Mean   :1.332   Mean   :1.124   Mean   :50.71  
##  3rd Qu.:1.575   3rd Qu.:1.500   3rd Qu.:65.35  
##  Max.   :6.400   Max.   :3.900   Max.   :83.60
ggplot(players, aes(x = Goals, y = Passes, color = Clear, size = Dribbles))+ geom_point()

Z wykresu można odczytać, że czym mniej zawodnik wymienia podań, tym więcej strzela bramek. Natomiast zawodnicy z mniejszą ilością bramek zaliczają więcej interwencji obronnych. Wydaje się, że gracze z średnią ilością bramek najwięcej dryblują.

ggplot(players, aes(x = Tackels, y = Assists, color= Fouls))+ geom_point()

Większa liczba przechwytów wiąze się zazwyczaj z większą liczbą fauli, co wynika pewnie z tego, że gdy zawodnik więcej razy próbuje przejąć piłkę to częściej ma szanse na faul na rywalu. Patrząc na asysty ciężko dostrzec jakąś prawidłowość.

Wybór zmiennych

Na początku trzeba wybrać odpowiednie zmienne do modelu. Każda ze zmiennych powinna być jak najbardziej zróznicowana, dlatego oczekiwany jest jak najwyższy współczynnik zmienności. W tym celu obliczono współczynnik zmienności, wyrażony w %:

sapply(players, cv)
##     Goals   Assists   Tackels     Fouls     Clear  Dribbles    Passes 
## 104.20853  73.02639  53.59026  43.84063 114.65674  78.42128  36.13512

Jak widać, każda zmienna znacznie przekracza 10%, dlatego wszystkie zmienne pozostaną w modleu.

Trzeba też sprawdzić współlinowść. Zmienne nie mogą być zbyt mocno skorelowane między sobą, dlatego sprawdzono czy żadna korelacja na moduł nie jest większa od 0,9.

Ewidentnie nie ma mowy o żadnej współliniowości. Korelacje nawet nie przekraczają wartości 0,7.

Po statystykach opisowych widać ze wartości zmiennej Passes jest wyrażona w dziesiątkach, natomiast np. Goals waha sie w okolicach 0-2. Wartości powinny byc porównywalne (być w tej samej skali). W tym celu dane są standaryzowane:

players_stand<- as.data.frame(scale(players))
summary(players_stand)
##      Goals            Assists            Tackels        
##  Min.   :-0.9596   Min.   :-1.36937   Min.   :-1.38590  
##  1st Qu.:-0.6976   1st Qu.:-0.88692   1st Qu.:-0.90580  
##  Median :-0.5105   Median :-0.05712   Median :-0.02561  
##  Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.00000  
##  3rd Qu.: 0.4813   3rd Qu.: 0.59900   3rd Qu.: 0.73456  
##  Max.   : 3.3070   Max.   : 2.79894   Max.   : 2.77501  
##      Fouls              Clear            Dribbles           Passes        
##  Min.   :-2.00077   Min.   :-0.8722   Min.   :-1.1617   Min.   :-1.85060  
##  1st Qu.:-0.87989   1st Qu.:-0.7085   1st Qu.:-0.7079   1st Qu.:-0.72099  
##  Median :-0.03923   Median :-0.3811   Median :-0.2541   Median : 0.05119  
##  Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000  
##  3rd Qu.: 0.80143   3rd Qu.: 0.1591   3rd Qu.: 0.4266   3rd Qu.: 0.79881  
##  Max.   : 2.48275   Max.   : 3.3184   Max.   : 3.1493   Max.   : 1.79472

Teraz wartości wszystkich obiektów wahają sie od około -3 do 3 i są porównywalne.

Algorytmy analizy skupień są czułe na istnienie outlierów. Chcąc pozbyć się wartości odstających skorzystano z reguły 3 sigm. Reguła ta mówi, że praktycznie wszystkie obserwacje mieszczą się w granicy 3 odchyleń standardowych od średniej. W naszym przypadku po standaryzacji, outlierami bedą wszystkie wartości na moduł większe od 3.

for (i in 1:50){
if  (rowSums(abs(players_stand[i,]<3) ) != dim(players_stand)[2]){
  print(players_stand[i,])
}
}
##                      Goals   Assists    Tackels      Fouls    Clear
## Benjamin Pavard -0.9596143 -1.369368 -0.2656585 -0.3194505 3.318431
##                  Dribbles     Passes
## Benjamin Pavard -1.048267 -0.0497685
##                Goals  Assists  Tackels      Fouls      Clear Dribbles
## Lionel Messi 3.00759 1.563889 -1.22587 -0.5996703 -0.8721686 3.149338
##                 Passes
## Lionel Messi 0.1685144
##                  Goals   Assists   Tackels      Fouls      Clear Dribbles
## Kylian Mbappe 3.307002 0.4832155 -1.385905 -0.3194505 -0.8066904 1.220709
##                  Passes
## Kylian Mbappe -1.299438

Znaleziono 3 outliery, np. Lionel Messi ma o wiele więcej dryblingów na mecz w porównaniu do innych, dlatego usunięto tą oraz pozostałe 2 obserwacje z dalszej analizy.

players_stand<- players_stand[rowSums(abs(players_stand<3))==dim(players_stand)[2],]

Teraz można przejśc do grupowania obiektów, oczekuje sie jak najbardziej podobnych obiektów w poszczególnych grupach, a grupy między sobą muszą być jak najbardziej różnorodne. Poniżej będą wykorzystane i opisane dwie metody, k-średnich i Warda.

Metoda k-średnich

Metoda k-średnich jest rodzajem grupowania podziałowego, która polega na tym, że przed przeprowadzniem algorytmu musimy podać liczbę ostatecznch skupień. Algorytm w skrócie:

  1. Ustalenie liczy skupień
  2. Losowy wybór wstępnych środków
  3. Obliczenie odległości obiektów od środka skupień
  4. Przypisanie obiektów do najbliższych śrdoków skupień
  5. Ustalamy nowe środki skupień, które są centroidami poprzednich skupień
  6. Powtarzamy algorytm aż do momentu gdy, punkty nie będą sie przemieszczać

Minusem tej metody jest, że liczbę grup trzeba znać z góry przed wykonaniem algorytmu. Na początku użyto metody k-średnich dla 2 skupień, argument nstart ustalono na 100, żeby punkty sie nie przemieszczały. Podział zostanie wyświetlony na wykresie, dodatkowo na wykresie użyto tylko nazwisk zawodników, żeby był czytelniejszy:

k2<- kmeans(players_stand, centers =2, nstart = 100)
rownames(players_stand)<- word(rownames(players_stand), -1)
fviz_cluster(k2, data = players_stand)

Wykresy sa przedstawione przy uzyciu metody PCA i położenie obiektów zależy od dwóch pierwszych głównych składowych, które wyjaśniają największa część zmienności zmiennych początkowych. W tym przypadku będzie to prawie 70%.

Wyświetlono też jak prezentują się wyniki dla większej ilości skupień:

Można tak dalej dzielić na coraz więcej skupień, ale rodzi się pytanie na ile grup powinno sie podzielić te obiekty?

W wybraniu odpowiedniej ilości klastrów pomocne mogą się okazać indeksy, które służą do identyfikacji optymalnej liczy klastrów.

Metoda “łokcia”

Jedną z nich jest metoda łokcia, która polega na tym, aby łączna suma wariancji w poszczególnych grupach była jak najmniejsza. Czym mniejsza ta wariancja tym nasze grupy będą zawierały bardziej zbliżone obserwacje, na czym nam istotnie zależy.

Funkcja kmeans odrazu oblicza te wartości. Wyświetlono otrzymane wartości:

total_withinss<- c()
for (i in 1:20){
  km<- kmeans(players_stand, centers = i, nstart = 100 )
  total_withinss[i]<- km$tot.withinss
}
total_withinss
##   1-klaster   2-klastry   3-klastry   4-klastry  5-klastrów  6-klastrów 
##   285.68463   192.97640   160.87425   135.33026   112.01093    96.50810 
##  7-klastrów  8-klastrów  9-klastrów 10-klastrów 11-klastrów 12-klastrów 
##    82.98064    71.75775    63.34176    56.92758    51.73189    47.48653 
## 13-klastrów 14-klastrów 15-klastrów 16-klastrów 16-klastrów 18-klastrów 
##    43.94581    39.79613    36.76934    33.70767    31.43760    28.98150 
## 19-klastrów 20-klastrów 
##    26.73482    24.46474

Naturalnie suma wariancji wraz ze wzrostem podziału na coraz większą liczbę klastrów będzie malała, gdyż klastry stają się coraz mniejsze. Jednak optymalnej liczby klastrów poszukuje się w miejscu, gdzie suma wariancji przestaje gwałtownie maleć, a dokładanie kolejnych klastrów nie wprowadza już dużej poprawy.

Patrząc na wyniki cięzko jednoznacznie określić punkt, od którego wariancja już nie zmienia się aż tak bardzo, liczono na to, że na wykresie będzie widoczne silne zagięcie tzw. “łokieć”, który jednoznacznie określi najlepszą ilość klastrów. Wydaje się, że w okolicach 8-10 grup wariancja przestaje spadać już dosyć widocznie, spada o kilka jednostek, a wykres zaczyna się wypłaszcać, więc okolice tych grup wydają sie być korzystne. Aczkolwiek, nie uzyskano zbytnio konkretnych odpowiedzi na pytanie jaka ilość klastrów jest odpowiednia, dlatego skorzystano z kolejnej metody.

Metoda profilu

Na początku wyjaśniono i pokazano wzór na wskaźnik sylwetkowy:

\(S =(b(i)-a(i))/ max(a(i), b(i))\)

Wskaźnik otrzyma się po wzięciu średniego wyniku sylwetkowego dla każdej z obserwacji w zbiorze danych.

Po przyglądnieciu się jak ten wskaźnik jest wyliczyny, można oczekiwać, że wybór ilości grup przez niego może byc dobry.

sylwetka <- c()
for(i in 2:20){
  podzial <- kmeans(players_stand, centers = i, nstart = 100)
  sylwetka[i] = index.S(dist(players_stand),podzial$cluster)
  
}
##   1-klaster   2-klastry   3-klastry   4-klastry  5-klastrów  6-klastrów 
##          NA   0.2770261   0.2328909   0.2359967   0.2763171   0.2785910 
##  7-klastrów  8-klastrów  9-klastrów 10-klastrów 11-klastrów 12-klastrów 
##   0.2850585   0.2785213   0.2944616   0.2928459   0.2839538   0.2546520 
## 13-klastrów 14-klastrów 15-klastrów 16-klastrów 16-klastrów 18-klastrów 
##   0.2557658   0.2566598   0.2593004   0.2527509   0.2488215   0.2482534 
## 19-klastrów 20-klastrów 
##   0.2489724   0.2477570

Jak widać, wskaźnik sylwetkowy wypada najlepiej dla 9 skupień.

Wyświetlono podział na 9 skupień:

Po wzięciu pod uwagę obydwu indeksów, przede wszystkim sylwetkowego oraz przeanlizowania podziałów zdecydowano się na wybór dziewięciu grup.

Przed interpretacją grup, dokonano jeszcze wyboru skupień inna metodą.

Metoda Warda

Metoda Warda to jedna z hierarchicznych metod grupowania, dlatego nie podaje się liczby skupień na początku. Metode spośród pozostałych wyróżnia wykorzystanie podejścia analizy wariancji do oszacowania odległości między skupieniami. Metoda ta zmierza do minimalizacji sumy kwadratów odchyleń wewnątrz skupień. Jest to metoda dosyć często stosowana w praktyce.

Wyświetlono efekty działania metody Warda i przedstawiono je na dendogramie:

distance <- dist(players_stand, method = "euclidean")
ward <- hclust(distance, method = "ward.D2")

plot(ward, hang = -1, cex =0.7, main = "Ward method")

Widać jak po kolei obiekty łączą sie w grupy, aż do momentu gdy wszystkie będą w jednej. Tak jak w przypadku poprzedniej metody znowu trzeba się zastanowić ile grup wybrać.

Użyto ponownie wskaźnika sylwetkowego, który był już wcześniej omówiony:

##   1-klaster   2-klastry   3-klastry   4-klastry  5-klastrów  6-klastrów 
##          NA   0.2619446   0.2142679   0.2221092   0.2675092   0.2671390 
##  7-klastrów  8-klastrów  9-klastrów 10-klastrów 11-klastrów 12-klastrów 
##   0.2691543   0.2836635   0.2931310   0.2907510   0.2706996   0.2617598 
## 13-klastrów 14-klastrów 15-klastrów 16-klastrów 16-klastrów 18-klastrów 
##   0.2557948   0.2542018   0.2538344   0.2628820   0.2554515   0.2531521 
## 19-klastrów 20-klastrów 
##   0.2538711   0.2606340

Co ciekawe wskaźnik znowu wskazał na 9 grup. Wyświetlono te grupy:

Zdecydownao sie również na 9 skupień jak w przypadku metody k-średnich, ze względu na wskaźnik sylwetkowy, który poza grupami 8-10 był zdecydowanie niższy niż w tych grupach.

Porównanie wyników k-średnich i Warda

W obu metodach zdecydowano się na dziewięc klastrów, ale czy te grupy są identyczne? Wyświetlono wyniki grupowania poprzez metodę Warda na takim samym wykresie i tabeli, aby porównać wyniki:

Grupy wedułg Warda:

## Lewandowski     Insigne   Koulibaly        Sule    Sterling      Walker 
##           1           2           3           4           5           4 
##     Ronaldo     Bonucci      Arnold   Robertson        Dijk       Salah 
##           1           4           6           6           4           1 
##        Jong   Griezmann       Kroos    Carvajal      Sancho   Zielinski 
##           7           2           7           7           8           9 
##       Alaba       Godin      Modric        Alba    Coutinho     Rakitic 
##           9           3           9           9           9           9 
##       Kante       Silva       Pogba    Busquets        Reus     Draxler 
##           7           9           5           7           5           9 
##     Kimmich   Alcantara      Muller      Hazard     Eriksen        Kane 
##           6           7           2           8           2           1 
##     Mustafi       Milik    Callejon    Rashford        Shaw       Young 
##           3           1           2           1           3           3 
##       Dzeko     Kolarov    Shaarawy      Suarez       Pique 
##           1           9           9           1           4

Grupy wedułg k-średnich:

## Lewandowski     Insigne   Koulibaly        Sule    Sterling      Walker 
##           4           8           9           1           5           1 
##     Ronaldo     Bonucci      Arnold   Robertson        Dijk       Salah 
##           4           1           6           6           1           4 
##        Jong   Griezmann       Kroos    Carvajal      Sancho   Zielinski 
##           7           8           7           7           3           2 
##       Alaba       Godin      Modric        Alba    Coutinho     Rakitic 
##           2           9           2           6           2           2 
##       Kante       Silva       Pogba    Busquets        Reus     Draxler 
##           7           2           5           7           5           2 
##     Kimmich   Alcantara      Muller      Hazard     Eriksen        Kane 
##           6           7           8           3           8           4 
##     Mustafi       Milik    Callejon    Rashford        Shaw       Young 
##           9           4           8           4           9           9 
##       Dzeko     Kolarov    Shaarawy      Suarez       Pique 
##           4           2           4           4           1

Z wykresów można odczytać, że sześć na dziewięć grup jest takich samych w obdywdu metodach, natomiast pozostałe trzy są nieznacznie różne. Można porównać wskaźnik sylwetkowy dla zaproponowanych obu podziałów. W przypadku k-średnich wynosi on 0.2944616, natomiast w przypadku metody Warda jest troche mniejszy i wynosi 0.2931310. Uwzględniając tą informacje oraz po przyjrzeniu sie poszczęgólnym podziałom podjęto decyzję o wybraniu modelu, który zasugerowała metoda k-średnich.

Wybrane grupy, a pozycje zawodników w drużynach

W celu sprawdzenia jak pozycję zawodników mają się do podziału, każdego gracza zastąpiono jego pozycją na boisku i uzyskano wyniki jak jego pozycja ma się do grup otrzymanych wcześniej:

Z wykresu można odczytać ze między grupami mieszają się obrońcy z pomocnikami/skrzydłowymi, natomiast napastnicy z skrzydłowami/pomocnikami.

Co ciekawe, napastnicy nie mieszają się w ogóle z obrońcami, co świadczy o całkowicie innym stylu gry na tych pozycjach i po takich statystykach analiza skupień odrazu ich odróżnia.

Interpretacja i podsumowanie

Dla każdej z grup wyliczono średnią wartość oraz odchylenia standardowe

players_km<- players
players_km<- players[c(-4,-14,-31),]
players_km$group9<- k9$cluster

mean_groups<- group_by(players_km, group9) %>%
  summarise_all(mean)%>%
  arrange(desc(Goals))

sd_groups<- group_by(players_km, group9) %>%
  summarise_all(sd) 

mean_groups
## # A tibble: 9 x 8
##   group9  Goals Assists Tackels Fouls Clear Dribbles Passes
##    <int>  <dbl>   <dbl>   <dbl> <dbl> <dbl>    <dbl>  <dbl>
## 1      4 0.514    0.173   0.533 0.833 0.578     1.3    24.0
## 2      5 0.5      0.377   1.13  1.33  0.767     1.67   44.6
## 3      3 0.39     0.41    0.5   0.2   0.1       3.5    47.0
## 4      8 0.256    0.272   0.96  0.48  0.3       0.6    43.2
## 5      2 0.145    0.12    1.11  0.738 0.675     1.23   53.5
## 6      1 0.082    0.028   0.98  0.5   3.26      0.24   71.8
## 7      7 0.065    0.11    2.15  1.17  0.85      1.17   71.0
## 8      9 0.064    0.06    1.8   1.3   3.62      0.48   53.4
## 9      6 0.0375   0.33    1.72  0.625 1.5       0.7    66.2
sd_groups
## # A tibble: 9 x 8
##   group9  Goals Assists Tackels Fouls Clear Dribbles Passes
##    <int>  <dbl>   <dbl>   <dbl> <dbl> <dbl>    <dbl>  <dbl>
## 1      1 0.0356  0.0277   0.249 0.141 1.45     0.167  10.7 
## 2      2 0.0535  0.0563   0.300 0.160 0.667    0.369  10.0 
## 3      3 0.0566  0        0.141 0.141 0        0.283   3.18
## 4      4 0.159   0.0529   0.212 0.224 0.335    0.520   5.40
## 5      5 0.13    0.142    0.208 0.153 0.586    0.751  12.6 
## 6      6 0.0287  0.0845   0.499 0.15  0.469    0.316   6.38
## 7      7 0.0404  0.0573   0.493 0.308 0.339    0.715  10.1 
## 8      8 0.130   0.0497   0.321 0.148 0.2      0.20    6.56
## 9      9 0.0251  0.0524   0.141 0.141 1.29     0.268  13.9

Interpretacja poszczególnych grup:

  1. Są to zawodnicy, którzy przede wszystkim odpowiadają za bramki, troche dryblują, ale w innych parametrach mają dosyć przeciętne statystyki, co więcej, wymieniają najmniej podań na boisku. Można ich określić jako takich co są odpowiedzialni za bramki, ale nie biorą zbytnio udziału w akcjach, tylko czekają na właściwy moment do zdobycia bramki.

  2. Zawodnicy w tej grupie strzelają praktycznie tyle samo bramek co poprzednia grupa, jednak co różni ich od poprzednich to, że bardziej biorą udział w grze, mają dwa razy więcej podań, więcej dryblingów, asyst czy nawet fauli.

  3. Zawdonicy, którzy wyróżniają sie znacząco w dryblingu i asystach, a z drugiej strony mają najniższe statystyki dotyczące umiejętności defensywnych takich jak odbiory czy przerwań akcji. Są to zawodnicy, którzy czekają, aż dostaną piłkę i wtedy zazwyczaj próbują przedryblować przeciwnika w celu wypracowaniu sytuacji bramkowej.

  4. W tej grupie również są zawodnicy, którzy mają ponad przeciętna ilość bramek i asyst, natomiast warto zauważyć, ze są to podobni zawodnicy do drugiej grupy, lecz o gorszych statystykach.

  5. Gracze, którzy mają już o wiele mniej bramek czy asyst, aczkolwiek mają już więcej podań niż poprzednie grupy, co może świadczyć o tym, że częściej cofają się po piłke, co skutkuje mniejszą ilością bramek z ich strony.

  6. Zawodnicy, którzy wymieniają bardzo dużo podań i zaliczają sporo interwencji obronnych, nie mając praktycznie bramek i asyst, co świadczy o tym, że grają daleko od przeciwnika i spokojnie rozgrywają piłke.

  7. Gracze bazujący na przejęciach piłek od przeciwników, co w efekcie kończy się też dużą ilością fauli z ich strony, wymieniają także dużo podań.

  8. Są to gracze, którzy często wchodzą w kontakt z przeciwnikami, o czym mogą świadczyć praktycznie największe ilości fauli, przejęć piłki czy interwencji obronnych. Po takim przejęciu zazwyczaj podają do zawodnika z drużyny i czekają na kolejną szanse do interwencji.

  9. Gracz, którzy co ciekawe nie mają praktycznie bramek, ale sporo asyst. Liczba przychwytów i podań też jest na stosunkowo wysokim poziomie. Są to zawdonicy, którzy próbują mieć cały czas piłke przy sobie i dogrywać je do zawodników znajdujących się w dobrych sytuacjacj do strzelenie bramki.

Podsumowując, udało się podzielić piłkarzy na różne grupy i zaobserwować różnice w ich stylu gry w każdej z grup. Przy stracie określonego zawodnika, z którejś z grup, drużyny powinny poszukać gracza z tego samego klastra. Oczywiście, taką analize przydałoby się przeprowadzić na większej grupie zawodników, żeby wybór był większy i bardziej precyzyjny.

Również, dowiedziano się, że gracze z różnych pozycji mogą mieć podobną charakterystykę do graczy z innych pozycji. Aczkolwiek, napastnicy są ewidentnie zawodnikami o innej charakterystyce niż obrońcy i te dwie pozycje jako jedyne nie mieszały się w grupach.