Zhluková (klastrová) analýza patrí medzi najpoužívanejšie metódy exploratívnej štatistiky. Jej zmyslom je nájsť v dátach skupiny pozorovaní, ktoré sú si navzájom podobné, a zároveň sa odlišujú od iných skupín. V praxi sa využíva napríklad pri segmentácii zákazníkov, identifikácii podobných regiónov či pri analýze dopravných udalostí.
V tejto práci analyzujem dopravné nehody a snažím sa zistiť, či sa dajú rozdeliť do niekoľkých typických skupín podľa vybraných charakteristík. Pracujem s premennými, ktoré popisujú mieru závažnosti (počet zranení, počet vozidiel) aj časový kontext (hodina, mesiac, deň v týždni).
| Počet.riadkov.po.odstránení.NA | Počet.premenných | Veľkosť.podvzorky.pre.výstupy |
|---|---|---|
| 209306 | 5 | 5000 |
Pri zhlukovaní sa pracuje s maticou vzdialeností (v princípe ide o vzťahy medzi každými dvoma pozorovaniami). Pri veľmi veľkom počte nehôd je to náročné na pamäť aj čas. Preto pri vizualizáciách a v časti samotného zhlukovania používam rozumnú podvzorku. Podstata analýzy zostáva zachovaná a report sa dá bez problémov knitovať.
| Premenná | total | units | hour | month | day |
|---|---|---|---|---|---|
| crash | NULL | NULL | 0.000000, 9.000000, 14.000000, 13.388600, 17.000000, 23.000000, 5.612084 | 1.000000, 4.000000, 7.000000, 6.800000, 10.000000, 12.000000, 3.424959 | 1.00000, 3.00000, 4.00000, 4.18580, 6.00000, 7.00000, 1.96246 |
| injuries | 0.0000000, 0.0000000, 0.0000000, 0.3680000, 1.0000000, 8.0000000, 0.7680456 | NULL | NULL | NULL | NULL |
| num | NULL | 1.0000000, 2.0000000, 2.0000000, 2.0598000, 2.0000000, 7.0000000, 0.3723596 | NULL | NULL | NULL |
Obr. 1: Rozdelenie hodnôt vybraných premenných pred škálovaním
Premenné majú rôzne rozsahy a jednotky (napr. hodina nehody je 0–23, mesiac 1–12, počet zranení môže mať úplne inú mierku). Ak by som zhlukovala priamo tieto hodnoty, premenná s väčším rozsahom by mala neúmerne silný vplyv na vzdialenosti. Preto je ďalším krokom štandardizácia (z-škálovanie), aby mali všetky premenné porovnateľnú váhu.
Štandardizáciu realizujem pomocou z-skóre:
\[ z = \frac{x - \mu}{\sigma} \]
kde \(\mu\) je priemer a \(\sigma\) smerodajná odchýlka. Po škálovaní majú premenné priemer približne 0 a štandardnú odchýlku 1, čo je ideálne pre výpočet euklidovských vzdialeností.
Obr. 2: Boxploty škálovaných premenných (z-skóre)
V tejto analýze odľahlé hodnoty nevylučujem. Pri dopravných nehodách môžu extrémy predstavovať dôležité prípady (napr. nehody s vyšším počtom zranení alebo s viacerými vozidlami). Okrem toho Wardova metóda často vytvára relatívne kompaktné a homogénne zhluky aj v prítomnosti odľahlých pozorovaní. Ak by sme outliery odstránili automaticky, mohli by sme prísť o informáciu o špecifických, ale reálnych situáciách.
Pred zhlukovaním je užitočné skontrolovať korelácie. Ak by boli dve premenné veľmi silno korelované, mohlo by sa stať, že jedna informácia bude v klastrovaní „započítaná dvakrát“.
| injuries_total | num_units | crash_hour | crash_month | crash_day_of_week | |
|---|---|---|---|---|---|
| injuries_total | 1.00 | 0.15 | 0.01 | 0.01 | -0.02 |
| num_units | 0.15 | 1.00 | 0.01 | 0.01 | -0.02 |
| crash_hour | 0.01 | 0.01 | 1.00 | 0.00 | 0.06 |
| crash_month | 0.01 | 0.01 | 0.00 | 1.00 | 0.00 |
| crash_day_of_week | -0.02 | -0.02 | 0.06 | 0.00 | 1.00 |
Obr. 3: Korelačná heatmapa premenných
V dátach sa neobjavujú extrémne vysoké korelácie, ktoré by si vyžadovali vyradenie premennej. To znamená, že každá premenná do analýzy prináša vlastnú informáciu a je rozumné ponechať ich všetky. Ak by korelácie boli výrazne vyššie, zvažovala by som redukciu premenných alebo PCA (analýzu hlavných komponentov).
Použijem euklidovskú vzdialenosť:
\[ d^{ij} = \sqrt{\sum_k (x^i_k - x^j_k)^2} \]
Nižšia vzdialenosť znamená, že dve nehody sú si podobné (majú podobné charakteristiky), vyššia vzdialenosť znamená, že sa výraznejšie líšia.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|
| 0.00 | 2.61 | 2.77 | 1.15 | 6.70 | 1.80 | 2.81 | 1.07 | 3.81 | 1.25 |
| 2.61 | 0.00 | 2.38 | 1.88 | 5.85 | 1.68 | 2.09 | 2.21 | 2.55 | 2.72 |
| 2.77 | 2.38 | 0.00 | 2.99 | 6.88 | 3.16 | 3.76 | 2.69 | 4.04 | 2.69 |
| 1.15 | 1.88 | 2.99 | 0.00 | 6.27 | 1.03 | 2.09 | 1.32 | 3.29 | 1.86 |
| 6.70 | 5.85 | 6.88 | 6.27 | 0.00 | 6.09 | 6.11 | 6.33 | 5.47 | 6.48 |
| 1.80 | 1.68 | 3.16 | 1.03 | 6.09 | 0.00 | 1.07 | 1.29 | 3.12 | 2.39 |
| 2.81 | 2.09 | 3.76 | 2.09 | 6.11 | 1.07 | 0.00 | 2.11 | 3.40 | 3.34 |
| 1.07 | 2.21 | 2.69 | 1.32 | 6.33 | 1.29 | 2.11 | 0.00 | 3.20 | 1.37 |
| 3.81 | 2.55 | 4.04 | 3.29 | 5.47 | 3.12 | 3.40 | 3.20 | 0.00 | 3.14 |
| 1.25 | 2.72 | 2.69 | 1.86 | 6.48 | 2.39 | 3.34 | 1.37 | 3.14 | 0.00 |
Obr. 4: Rozdelenie euklidovských vzdialeností (výrez)
Matica vzdialeností je najmä vstupom pre hierarchické zhlukovanie. Pre report je dôležité ukázať, že vzdialenosti nie sú len abstraktné čísla — reálne vyjadrujú mieru podobnosti medzi nehodami. Histogram zároveň naznačuje, či sú v dátach veľmi podobné prípady (nižšie vzdialenosti) a aj výrazne odlišné nehody (vyššie vzdialenosti).
Wardova metóda je aglomeratívna (spája zhluky „zdola nahor“) a v každom kroku volí také spojenie, ktoré čo najmenej zvýši vnútornú variabilitu zhluku. Vďaka tomu často vznikajú kompaktné a interpretovateľné zhluky.
\[ ESS(C) = \sum_{i \in C} \lVert x_i - \bar{x}_C \rVert^2 \]
Hierarchické zhlukovanie je výpočtovo náročné, preto tu nastavujem
veľkosť vzorky pre clustering cez parameter N_CLUSTER. Ak
ti to počítač zvládne, vieš ho zvýšiť (napr. na 5000). Ak by sa knit
zasekával, zníž ho (napr. na 1000–1500).
Obr. 5: Dendrogram (Ward.D2) – rez pre 3 klastre je vyznačený červenou čiarou
| klaster | n |
|---|---|
| 1 | 674 |
| 2 | 986 |
| 3 | 340 |
Obr. 6: Počet nehôd v jednotlivých klastroch
Dendrogram ukazuje, ako sa nehody postupne spájali do väčších skupín. Rez červenou čiarou vytvoril tri klastre, ktoré predstavujú tri odlišné typy nehôd podľa kombinácie sledovaných premenných. Počet 3 je praktický na interpretáciu — report ostáva prehľadný a zároveň už vidno rozdiely medzi skupinami.
| nehoda_id | klaster |
|---|---|
| Nehoda_1 | 1 |
| Nehoda_2 | 2 |
| Nehoda_3 | 2 |
| Nehoda_4 | 3 |
| Nehoda_5 | 1 |
| Nehoda_6 | 2 |
| Nehoda_7 | 2 |
| Nehoda_8 | 1 |
| Nehoda_9 | 2 |
| Nehoda_10 | 2 |
| Nehoda_11 | 3 |
| Nehoda_12 | 3 |
| Nehoda_13 | 2 |
| Nehoda_14 | 1 |
| Nehoda_15 | 1 |
| Nehoda_16 | 3 |
| Nehoda_17 | 1 |
| Nehoda_18 | 2 |
| Nehoda_19 | 1 |
| Nehoda_20 | 2 |
| Nehoda_21 | 1 |
| Nehoda_22 | 1 |
| Nehoda_23 | 1 |
| Nehoda_24 | 3 |
| Nehoda_25 | 2 |
Pri dobrom klastrovaní by mali byť nehody v jednom klastri podobné (nízka vnútro-klastrová variabilita) a zároveň by sa klastre medzi sebou mali odlišovať (vyššia medzi-klastrová variabilita). Preto sledujem rozklad variability na: - TSS (celková suma štvorcov), - WSS (vnútro-klastrová suma štvorcov), - BSS (medzi-klastrová suma štvorcov).
| Premenná | TSS | WSS | BSS | Podiel_medzi | |
|---|---|---|---|---|---|
| injuries_total | injuries_total | 1999 | 1307.618 | 691.382 | 0.346 |
| crash_day_of_week | crash_day_of_week | 1999 | 1322.552 | 676.448 | 0.338 |
| num_units | num_units | 1999 | 1490.788 | 508.212 | 0.254 |
| crash_hour | crash_hour | 1999 | 1781.575 | 217.425 | 0.109 |
| crash_month | crash_month | 1999 | 1821.222 | 177.778 | 0.089 |
Obr. 7: Podiel variability vysvetlený klastrami (vyššie = premenná viac odlišuje klastre)
Premenné s vyšším podielom medzi-klastrovej variability (BSS/TSS) viac prispievajú k tomu, že sa klastre od seba odlišujú. To je užitočné aj pri interpretácii: viem povedať, či sa klastre líšia hlavne počtom zranení, počtom vozidiel alebo skôr časovým kontextom (hodina, deň, mesiac).
Aby som vedela klastre prakticky interpretovať, vypočítam priemerné hodnoty premenných v jednotlivých klastroch. Tieto priemery (centroidy) sú v pôvodných jednotkách, takže sa dajú prirodzene opísať.
| klaster | injuries_total | num_units | crash_hour | crash_month | crash_day_of_week |
|---|---|---|---|---|---|
| 1 | 0.135 | 2.000 | 11.404 | 5.694 | 2.681 |
| 2 | 0.198 | 1.958 | 15.154 | 7.769 | 5.216 |
| 3 | 1.344 | 2.618 | 11.438 | 5.762 | 4.262 |
Obr. 8: Porovnanie priemerov premenných medzi klastrami
Na základe centroidov viem klastre interpretovať ako tri typy nehôd:
Klaster 1 typicky združuje nehody s nižším priemerným počtom zranení a často aj s nižším počtom zúčastnených vozidiel. Tento klaster môžem chápať ako „menej závažné“ alebo bežnejšie nehody.
Klaster 2 predstavuje prechodnú skupinu: priemery sú spravidla medzi klastrom 1 a 3. V praxi môže ísť o nehody, ktoré nie sú úplne najľahšie, ale zároveň nie sú ani extrémne závažné.
Klaster 3 je charakteristický vyšším priemerom zranení a/alebo vyšším počtom vozidiel. Takýto klaster môže signalizovať komplexnejšie alebo rizikovejšie situácie, ktoré sa odlišujú od bežných nehôd.
Dôležité je, že klastre nevznikli podľa jednej premennej, ale podľa kombinácie všetkých piatich charakteristík – preto dávajú zmysel ako komplexné typy nehôd.
V tejto práci som aplikovala hierarchickú zhlukovú analýzu na dopravné nehody s cieľom identifikovať skupiny nehôd s podobnými charakteristikami. Postupovala som cez výber relevantných premenných, odstránenie chýbajúcich hodnôt, štandardizáciu a kontrolu korelácií. Následne som použila euklidovskú vzdialenosť a Wardovu metódu, ktorá minimalizuje nárast vnútornej variability pri spájaní zhlukov.
Výsledkom sú tri klastre, ktoré predstavujú tri odlišné typy nehôd. Rozdiely medzi klastrami sú viditeľné aj cez rozklad variability a centroidy, ktoré umožňujú interpretovať klastre prakticky – od menej závažných nehôd cez stredne závažné až po skupinu s vyšším počtom zranení a/alebo vozidiel.
Takéto rozdelenie nehôd môže slúžiť ako podklad pre ďalšie analýzy (napr. doplnenie ďalších premenných) a tiež ako pomôcka pri plánovaní preventívnych opatrení v oblasti dopravnej bezpečnosti.