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.
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ść.
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 jest rodzajem grupowania podziałowego, która polega na tym, że przed przeprowadzniem algorytmu musimy podać liczbę ostatecznch skupień. Algorytm w skrócie:
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.
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.
Na początku wyjaśniono i pokazano wzór na wskaźnik sylwetkowy:
\(S =(b(i)-a(i))/ max(a(i), b(i))\)
gdzie ai oznacza średnią odległość punktu do innych punktów znajdującym się w tym samym klastrze (naturalnie oczekuje się jak najmniejszej wartości, żeby klastry zawierał jak najbardziej zbliżone obserwacje)
bi jest średnią odległościa od punktów znajdujących się w innym klastrze, ale bedącym najbliżej (tutaj natomiast oczekujemy jak największej wartości, co będzie oznaczać ze obserwacja jest daleko od innych klastrów)
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 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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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ń.
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.
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.