Spis treści

  1. Podstawy teoretyczne analizy skupień
    • Definicja
    • Przykładowe zastosowania analizy skupień w praktyce
  2. Dane wykorzystane do analizy
    • Opis danych oraz cel badania
    • Wczytanie i podstawowe statystyki
    • Transformacja
  3. Metody pomiaru (nie)podobieństwa
  4. Algorytm metody k-średnich
    • Funkcja kmeans()
  5. Ustalenie optymalnej liczby skupień
  6. Dodatkowa analiza poszczególnych skupień
    • Rozkład wieku klientów
    • Struktura płci klientów
  7. Podsumowanie
  8. Źródła

1. Podstawy teoretyczne analizy skupień

Definicja

  • Analiza skupień (cluster analysis, data clustering) to dział wielowymiarowej analizy statystycznej znajdujący zastosowanie w badaniu danych o obiektach wielowymiarowych w celu podzielenia zbioru tych obiektów na grupy (skupienia), które w świetle danych wykazują odrębność.

Innymi słowy, naszym głównym celem jest pogrupowanie obiektów w taki sposób, aby stopień powiązania elementów z tej samej grupy był jak najwyższy (homogeniczność obiektów wchodzących w skład jednej grupy), a z elementami z innych grup jak najniższy (heterogeniczność samych grup).

Najczęściej wyróżnia się dwie podstawowe techniki tworzenia skupień:

  • Metody hierarchiczne
  • Metody niehierarchiczne (w tym grupa metod k-średnich)

Główną różnicą pomiędzy hierarchicznymi i niehierarchicznymi algorytmami jest konieczność wcześniejszego podania liczby skupień (w drugim przypadku).

Przy użyciu metod hierarchicznych utworzona zostaje pewna hierarchia skupień reprezentowana graficznie w postaci drzewa binarnego (dendrogramu). W liściach tego rodzaju drzewa znajdują się poszczególne elementy zbioru, a węzły stanowią ich grupy.

Algorytmy niehierarchiczne dzielą natomiast zbiór na zadaną wcześniej liczbę podzbiorów w taki sposób, aby uzyskać optymalną wartość pewnego kryterium. Optymalizację uzyskuje się np. poprzez iteracyjne przemieszczanie obiektów między skupieniami.

Przykładowe zastosowania analizy skupień w praktyce

Analiza skupień znajduje szerokie zastosowanie w wielu dziedzinach. Grupowanie może umożliwić przede wszystkim wyodrębnienie zasadniczych cech obiektów badania, odkrycie nieznanej struktury analizowanych danych oraz porównanie elementów, które posiadają więcej niż jedną cechę wspólną. Dzięki zredukowaniu wymiarowości zestawu danych pierwotnych do kilku podstawowych struktur, zmniejszony zostaje nakład pracy i czasu poświęcony na dalszą analizę statystyczną lub ekonometryczną.

Sztandarowe przykłady, w których stosuje się analizę skupień to m.in.:

  • segmentacja rynku (szukanie podobieństwa między grupami klientów)
  • grupowanie akcji na giełdzie na podstawie wyników
  • grupowanie chorób, ich symptomów i metod leczenia (medycyna).

W dalszej części poruszone zostanie pierwsze z wyżej wymienionych zagadnień, a dokładnie - segmentacja klientów galerii handlowej, czyli identyfikacja grup klientów o podobnych gustach lub zwyczajach. Zabieg ten może dostarczyć wielu cennych informacji przy opracowaniu strategii marketingowych. Umożliwia także lepsze dopasowanie produktu do wymagań i oczekiwań klientów.

2. Dane wykorzystane do analizy

Opis danych oraz cel badania

Dane, które będą wykorzystywane w dalszej analizie pochodzą ze strony http://kaggle.com. Dotyczą wybranych charakterystyk dwustu klientów galerii handlowej. Nie są to dane rzeczywiste.

Poszczególne zmienne opisujące danego klienta to:
  • CustomerID - Identyfikator przypisany do klienta
  • Gender - Płeć klient
  • Age - Wiek klienta
  • Annual income - Roczny dochód klienta (w tysiącach dolarów)
  • Spending score - Wynik przyznawany przez galerię handlową na podstawie zachowań kosumenckich i charakteru wydatków (od 1 do 100)

Celem badania będzie stworzenie skupień na podstawie rocznych dochodów i wyników wydatków klientów (zmienne AnnualIncome oraz SpendingScore), a także przyjrzenie się pozostałym charakterystykom klientów w wyodrębnionych grupach. Pozwoli to na lepsze planowanie przyszłych strategii, a tym samym na efektywne odpowiadanie na potrzeby rynku.

Wczytanie i podstawowe statystyki

Segmentację klientów rozpoczniemy od wczytania wszystkich niezbędnych w dalszych etapach pakietów.

Następnie wczytamy dane oraz sprawdzimy ich podstawowe statystyki.

##    CustomerID        Gender               Age         AnnualIncome   
##  Min.   :  1.00   Length:200         Min.   :18.00   Min.   : 15.00  
##  1st Qu.: 50.75   Class :character   1st Qu.:28.75   1st Qu.: 41.50  
##  Median :100.50   Mode  :character   Median :36.00   Median : 61.50  
##  Mean   :100.50                      Mean   :38.85   Mean   : 60.56  
##  3rd Qu.:150.25                      3rd Qu.:49.00   3rd Qu.: 78.00  
##  Max.   :200.00                      Max.   :70.00   Max.   :137.00  
##  SpendingScore  
##  Min.   : 1.00  
##  1st Qu.:34.75  
##  Median :50.00  
##  Mean   :50.20  
##  3rd Qu.:73.00  
##  Max.   :99.00

Wstępny przegląd statystyk umożliwia wyciągnięcie kilku podstawowych wniosków na temat zestawu danych. Na przykład widzimy, że badani klienci galerii znajdowali się w przedziale wiekowym 18-70 lat, a średnia ich wieku wyniosła blisko 39 lat. Ponadto, najmniejszy zaobserwany roczny dochód wyniósł 15 tysięcy dolarów, a największy - 137 tysięcy dolarów. Dostrzeżenie, w jaki sposób rozkładają się poszczególne charakterystyki jest pierwszym i niezbędnym etapem głębszej analizy danych, na których pracujemy.

Transformacja

Przeprowadzenie analizy skupień wymaga odpowiedniego przygotowania danych, w tym dokonania niezbędnych przekształceń.

Po pierwsze, należy usunąć lub oszacować wszelkie brakujące wartości.

Ponadto, często przydatną transformacją jest zmiana typu informacji o płci na dane numeryczne (oznaczenie: 0-kobieta, 1-mężczyzna). W naszej analizie nie będzie to jednak zabieg konieczny, więc pozostaniemy przy znakowym typie danych (character). Przekształcenie na numeryczny typ zostało umieszczone w komentarzu:

Następnym krokiem jest wybór zmiennych, na podstawie których zostaną utworzone skupienia. W niniejszym badaniu są to zmienne: SpendingScore oraz AnnualIncome. Dla przejrzystości utworzymy nową bazę Mall_Customers_2.

##   AnnualIncome    SpendingScore  
##  Min.   : 15.00   Min.   : 1.00  
##  1st Qu.: 41.50   1st Qu.:34.75  
##  Median : 61.50   Median :50.00  
##  Mean   : 60.56   Mean   :50.20  
##  3rd Qu.: 78.00   3rd Qu.:73.00  
##  Max.   :137.00   Max.   :99.00

Kolejną istotną kwestią jest standaryzacja zmiennych, która zapewni ich porównywalność. Zabieg ten jest niezbędny jeśli zmienne opisujące obiekty są wyrażone w innych miarach lub jednostkach bądź zróżnicowanie obiektów pod względem poszczególnych cech nie jest jednakowe (różne odchylenia standardowe).

Funkcja scale() przy ustawieniach domyślnych unormuje każdy element odejmując średnią i dzieląc przez odchylenie standardowe.

##   AnnualIncome SpendingScore
## 1    -1.734646    -0.4337131
## 2    -1.734646     1.1927111
## 3    -1.696572    -1.7116178
## 4    -1.696572     1.0378135
## 5    -1.658498    -0.3949887
## 6    -1.658498     0.9990891

3. Metody pomiaru (nie)podobieństwa

Podział obserwacji na grupy wymaga pewnych metod obliczania odległości lub (nie)podobieństwa między każdą parą obserwacji. Wynik tego obliczenia nazywany jest macierzą niepodobieństwa. Istnieje wiele metod obliczania informacji o odległości; wybór miar odległości jest krytycznym krokiem w tworzeniu klastrów. Definiuje, w jaki sposób obliczane jest podobieństwo dwóch elementów (x, y) i wpłynie na kształt skupień. Jedną z klasycznych metod pomiaru odległości jest miara euklidesowa, wyrażona wzorem:

\[d(x,y)=\sqrt{\sum_{i=1}^{n}{(x_i-y_i)}^{2}}\]

gdzie \(x\) i \(y\) to dwa wektory o długości \(n\).

Odległość euklidesowa jest najczęściej domyślną miarą w funkcjach do grupowania dostępnych w R. W zależności od celu analizy oraz postawionego pytania badawczego możemy używać także innych opcji (np. ogległości Czebyszewa, odległości Manhattan).

Funkcja get_dist() z pakietu factoextra służy do obliczenia macierzy odległości. Domyślnie przyjęta jest odległość euklidesowa, lecz parametr ten można modyfikować. Natomiast funkcja fviz_dist() (z tego samego pakietu) jest graficzną interpretacją utworzonej macierzy.

Pary obserwacji o najmniejszym podobieństwie (największej odległości) oznaczone są kolorem czeronym, a pary o największym podobieństwie (najmniejszej odległości) - niebieskim.

4. Algorytm metody k-średnich

Grupowanie metodą k-średnich jest jednym z najczęściej używanych algorytmów uczenia maszynowego bez nadzoru (unsupervised learning). Zestaw danych zostaje podzielony na k grup (skupień). Liczba k musi zostać wstępnie określona przez analityka.

Działanie algorytmu polega na przenoszeniu obiektów ze skupienia do skupienia tak długo, aż wariancja wewnątrz każdego z nich zostanie zminimalizowana. Celem jest zatem zapewnienie największego podobieństwa elementów w ramach każdej z grup, przy jednoczesnej maksymalnej różnicy pomiędzy samymi grupami.

Standardowym algorytmem metody k-średnich jest algorytm Hartigana-Wonga (1979). Całkowita zmienność wewnątrz skupienia jest w tym przypadku zdefiniowana jako suma kwadratów odległości euklidesowych między elementami a odpowiadającym im środkiem ciężkości:

\[W(C_k)=\sum_{x_i\in C_k}{(x_i-\mu_k)}^{2}\] gdzie: \(x_i\) to punkt należący do skupienia \(C_k\), a \(\mu_k\) to średnia wartość punktów przypisanych do skupienia \(C_k\).

Każda obserwacja \((x_i)\) powinna zostać przypisana do danego skupienia w taki sposób, aby suma kwadratów \((W(C_k))\) odległości obserwacji do przypisanych im centrów skupień \((\mu_k)\) została zminimalizowana.

Optymalne rozwiązanie zapewnia minimalizacja całkowitej zmienności wewnątrz skupień (\(tot.withiness\)), którą definiuje się w poniższy sposób:

\[tot.withiness=\sum_{k=1}^{k}{W(C_k)}=\sum_{k=1}^{k}\sum_{x_i\in C_k}{(x_i-\mu_k)}^{2}\]

Poszczególne kroki algorytmu k-średnich można opisać jako:
1. Ustalenie liczby skupień k
2. Wylosowanie k punktów (wstępnych środków skupień)
3. Obliczenie odległości obiektów od środków skupień
4. Przypisanie obiektów do najbliższych skupień
5. Wyliczenie nowych środków skupień
6. Powtarzanie kroków 3, 4, 5 do czasu, aż:
- środki skupień przestaną się zmieniać
- wykonamy maksymalną liczbę iteracji

Funkcja kmeans()

Grupowanie metodą k-średnich możemy przeprowadzić przy użyciu funkcji kmeans().

W wyniku otrzymujemy także dodatkowe informacje, w tym najbardziej istotne z punktu widzenia analizy skupień:
cluster - wektor liczb całkowitych (od 1 do k) wskazujący na skupienie, do którego została przypisana dana obserwacja
centers - macierz środków skupień
totss - całkowita suma kwadratów
withinss - wektor sumy kwadratów wewnątrz skupienia
tot.withinss - całkowita suma kwadratów wewnątrz skupień
betweenss - suma kwadratów między skupieniami
size - rozmiar poszczególnych skupień

Na początku założymy, że chcemy podzielić klientów jedynie na dwie grupy:

## List of 9
##  $ cluster     : Named int [1:200] 1 2 1 2 1 2 1 2 1 2 ...
##   ..- attr(*, "names")= chr [1:200] "1" "2" "3" "4" ...
##  $ centers     : num [1:2, 1:2] 0.0144 -0.0139 -0.8225 0.7903
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:2] "1" "2"
##   .. ..$ : chr [1:2] "AnnualIncome" "SpendingScore"
##  $ totss       : num 398
##  $ withinss    : num [1:2] 133 135
##  $ tot.withinss: num 268
##  $ betweenss   : num 130
##  $ size        : int [1:2] 98 102
##  $ iter        : int 1
##  $ ifault      : int 0
##  - attr(*, "class")= chr "kmeans"
## K-means clustering with 2 clusters of sizes 98, 102
## 
## Cluster means:
##   AnnualIncome SpendingScore
## 1   0.01442146    -0.8225376
## 2  -0.01385591     0.7902812
## 
## Clustering vector:
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
##   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
##  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
##   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
##  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
##   1   2   1   2   1   2   2   1   1   1   2   2   2   2   1   1   2   1   2   1 
##  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
##   2   2   2   2   2   2   2   1   2   1   2   1   1   2   1   2   2   1   2   1 
##  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
##   2   2   1   1   2   1   2   2   2   1   2   1   1   1   1   2   1   2   1   1 
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 
##   1   1   2   2   2   1   2   1   1   1   2   2   1   1   1   2   1   2   1   2 
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 
##   2   1   2   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
## 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 
##   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
## 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 
##   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
## 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 
##   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2   1   2 
## 
## Within cluster sum of squares by cluster:
## [1] 133.1768 134.7760
##  (between_SS / total_SS =  32.7 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Obserwacje zostały podzielone w 2 skupienia liczące odpowiednio 111 oraz 89 elementów. Interpretacja graficzna tego podziału przedstawia się następująco:

Ponieważ liczbę skupień (k) należy ustawić przed uruchomieniem algorytmu, często korzystne jest użycie kilku różnych wartości i zbadanie różnic w wynikach. Powtórzymy proces dodatkowo dla 3, 4, 5 i 6 skupień, a także ukażemy wizualizację.

Wizualizacja nie sugeruje jednak, jaka liczba skupień wydaje się być najbardziej odpowiednia. Aby uzyskać odpowiedź na to pytanie, można posłużyć się dodatkowymi metodami.

5. Ustalenie optymalnej liczby skupień

Wybór najlepszej liczby skupień \(k\) może ułatwić zastosowanie jednej ze statystycznych metod: Elbow, Silhouette lub Gap Statistic.

Metody te są dostępne w pakiecie factoextra przy wykorzystaniu funkcji fviz_nbclust().

W niniejszej analizie posłużymy się jedynie metodą Elbow, ponieważ jest najprostsza i w konsekwencji najczęściej wykorzystywana.

Metoda Elbow

Przypomnijmy, że najbardziej optymalna liczba skupień zostanie wyznaczona przy spełnieniu warunku minimalizacji całkowitej zmienności wewnątrz skupień, czyli:

\[min\left({\sum_{k=1}^{k}{W(C_k)}}\right)\]

Naturalnie suma wariancji wraz ze wzrostem podziału na coraz większą liczbę skupień będzie malała. Dzieje się tak, ponieważ skupienia stają się coraz mniejsze. Jednak optymalnej liczby klastrów poszukujemy w miejscu, w którym suma wariancji przestaje gwałtownie maleć, a podział na coraz większą liczbę skupień nie poprawia znacząco wyniku. Innymi słowy szukamy na wykresie silnego przegięcia, tzw. “łokcia”.

Możemy samodzielnie stworzyć funkcję generującą wykres, na podstawie którego odczytamy najlepszą wartość \(k\):

Możemy również skorzystać z gotowej, wbudowanej funkcji fviz_nbclust():

W naszym przykładzie widać, iż optymalnie będzie podzielić klientów na 6 skupień.

## K-means clustering with 6 clusters of sizes 23, 10, 29, 22, 81, 35
## 
## Cluster means:
##   AnnualIncome SpendingScore
## 1   -1.3042458   -1.13411939
## 2    1.8709508    1.23143545
## 3    0.6850149    1.23811207
## 4   -1.3262173    1.12934389
## 5   -0.2004097   -0.02638995
## 6    1.0523622   -1.28122394
## 
## Clustering vector:
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
##   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4 
##  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
##   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4   1   4 
##  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
##   1   4   1   5   1   4   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
##  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
##   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
##  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
##   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
## 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 
##   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5   5 
## 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 
##   5   5   5   3   6   3   5   3   6   3   6   3   5   3   6   3   6   3   6   3 
## 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 
##   6   3   5   3   6   3   6   3   6   3   6   3   6   3   6   3   6   3   6   3 
## 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 
##   6   3   6   3   6   3   6   3   6   3   6   3   6   3   6   3   6   3   6   3 
## 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 
##   6   2   6   2   6   2   6   2   6   2   6   2   6   2   6   2   6   2   6   2 
## 
## Within cluster sum of squares by cluster:
## [1]  7.577407  3.681858  5.514889  5.217630 14.485632 18.304646
##  (between_SS / total_SS =  86.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Skupienia 1-6 będą liczyło kolejno po 23, 10, 29, 22, 81 i 35 elementów.

Z powyższej wizualizacji skupień możemy wywnioskować, iż:
Do skupienia 1 należą klienci o niskim rocznym dochodzie oraz niskim wyniku wydatków.
Do skupienia 2 należą klienci o wysokim rocznym dochodzie oraz wysokim wyniku wydatków.
Do skupienia 3 należą klienci o średnim rocznym dochodzie oraz wysokim wyniku wydatków.
Do skupienia 4 należą klienci o niskim rocznym dochodzie oraz wysokim wyniku wydatków.
Do skupienia 5 należą klienci o średnim rocznym dochodzie oraz średnim wyniku wydatków.
Do skupienia 6 należą klienci o wysokim rocznym dochodzie oraz niskim wyniku wydatków.

Możemy teraz pogłębić analizę i sprawdzić, w jaki sposób w poszczególnych grupach rozkładają się charakterystyki takie jak płeć oraz wiek.

6. Dodatkowa analiza poszczególnych skupień

Na początku należy powiązać pozostałe charakterystyki z utworzonymi skupieniami:

##   CustomerID Gender Age AnnualIncome SpendingScore cluster
## 1          1      1  19           15            39       1
## 2          2      1  21           15            81       4
## 3          3      0  20           16             6       1
## 4          4      0  23           16            77       4
## 5          5      0  31           17            40       1
## 6          6      0  22           17            76       4
Rozkład wieku klientów

Interesującą informacją z punktu widzenia segmentacji rynku będzie z pewnością rozkład wieku w poszczególnych grupach.

Powyższa wizualizacja niesie za sobą kilka cennych informacji. Po pierwsze, w skupieniach 1, 5 oraz 6 rozkład wieku jest normalny. Do skupienia nr 4 należą natomiast przede wszystkim młodzi ludzie, mający w większości nieco ponad 20 lat. Z poprzedniej części analizy wiemy, że skupienie to odznaczało się niskim rocznym dochodem oraz wysokim wynikiem wydatków. Jest to zgodne z intuicją podpowiadającą, iż bardzo młode osoby nie będą miały jeszcze wysokich dochodów, lecz znaczną ich część będą przeznaczały na własną konsumpcję impulsywną. Pozostałe skupienia (2 i 3) obejmują w większości osoby w wieku 25-40 lat i są to klienci o wysokich lub średnich dochodach, a także wysokim wyniku w zakresie wydatków.

Struktura płci klientów

Kolejne istotne informacje może nieść za sobą struktura płci. Możemy sprawdzić, czy znacznie różni się ona w poszczególnych grupach:

Widzimy, że proporcje kobiet i mężczyzn w poszczególnych skupieniach są dosyć wyrównane. Dla analityka opracowującego strategie marketingowe na podstawie zmiennych AnnualIncome oraz SpendingScore może stanowić to informację, że w tym przypadku nie warto przykładać dużej uwagi do tego, aby dotrzeć do przedstawicieli konkretnej płci.

7. Podsumowanie

Praktyczne zastosowanie analizy skupień jest niezwykle szerokie. Niniejsza praca miała na celu pokazać, iż z jej wykorzystaniem można przeprowadzić segmentację rynku. Zastosowana metoda k-średnich jest prosta, lecz dostarcza wielu istotnych informacji o strukturze naszego zbioru danych.