Úvod: Zhluková (klastrová) analýza umožňuje identifikovať skupiny podobných pozorovaní na základe vybraných charakteristík. V tejto analýze budeme pracovať s vlastnými údajmi o cestovaní, pričom cieľom bude rozdeliť jednotlivé cesty do skupín podľa: dĺžky pobytu, ceny ubytovania, ceny dopravy. Tieto premenné reprezentujú ekonomické charakteristiky cestovania a môžu prirodzene vytvoriť zhluky ako napríklad „lacné krátke výlety“, „drahé dlhé dovolenky“, „stredná kategória“ a pod.
Načítanie a príprava údajov:
library(dplyr)
library(knitr)
library(kableExtra)
data <- read.csv("Travel_data.csv", sep = ";", stringsAsFactors = FALSE)
head(data)
names(data)
[1] "Trip.ID" "Destination"
[3] "Start.date" "End.date"
[5] "Duration..days." "Traveler.name"
[7] "Traveler.age" "Traveler.gender"
[9] "Traveler.nationality" "Accommodation.type"
[11] "Accommodation.cost" "Transportation.type"
[13] "Transportation.cost"
#Vyberieme premenné
travel <- data %>%
select(Trip.ID, Duration..days., Accommodation.cost, Transportation.cost)
rownames(travel) <- travel$Trip.ID
travel$Trip.ID <- NULL
travel
NA
Škálovanie údajov: Aby sme mohli správne počítať Euklidovskú vzdialenosť, je potrebné dať všetky premenné na rovnakú škálu pomocou z-skóre.
travel_scaled <- scale(travel)
travel_scaled
Duration..days. Accommodation.cost Transportation.cost
1 -0.3783480 -0.03373051 -0.07730653
2 -1.6273523 -0.33282951 -0.24839991
3 -0.3783480 -0.18328001 0.09378685
4 3.9931670 0.56446749 0.60706699
5 -0.3783480 -0.40760426 -0.76168005
6 -1.6273523 0.19059374 0.26488023
7 1.4951584 -0.55715376 0.94925374
8 -0.3783480 -0.25805476 -0.07730653
9 -0.3783480 -0.03373051 -0.76168005
10 -0.3783480 0.93834125 0.26488023
11 -0.3783480 -0.18328001 -0.24839991
12 -0.3783480 -0.33282951 -0.93277343
13 0.2461541 1.31221500 0.94925374
14 0.8706563 0.11581899 0.09378685
15 -0.3783480 -0.48237901 -0.41949329
16 -0.3783480 -0.25805476 -0.84722674
17 0.8706563 -0.25805476 -0.41949329
18 1.4951584 0.19059374 0.09378685
19 -1.0028502 -0.03373051 -0.84722674
20 1.4951584 -0.03373051 0.26488023
21 -1.6273523 -0.48237901 -0.93277343
22 -0.3783480 -0.18328001 -0.07730653
23 -0.3783480 -0.40760426 -0.96699210
24 0.2461541 -0.63192851 -0.24839991
25 -1.0028502 0.11581899 -0.93277343
26 0.8706563 0.56446749 0.26488023
27 0.2461541 -0.10850526 -0.84722674
28 0.2461541 -0.33282951 -0.24839991
29 -0.3783480 -0.78147801 -0.84722674
30 0.8706563 -0.48237901 -0.59058667
31 3.3686649 -0.18328001 -0.24839991
32 0.8706563 -0.81886539 -1.01832012
33 0.2461541 -0.63192851 -0.07730653
34 -0.3783480 -0.40760426 -0.93277343
35 1.4951584 -0.55715376 0.26488023
36 -1.0028502 -0.79643296 -0.89855475
37 0.2461541 -0.25805476 -0.41949329
38 -0.3783480 -0.66931589 -0.97554677
39 -0.3783480 0.11581899 -0.07730653
40 -0.3783480 -0.33282951 -0.84722674
41 0.2461541 -0.55715376 0.43597361
42 -0.3783480 0.71401699 0.26488023
43 -0.3783480 -0.03373051 0.09378685
44 -0.3783480 -0.25805476 -0.93277343
45 -0.3783480 -0.48237901 -0.07730653
46 -0.3783480 0.19059374 -0.24839991
47 -1.0028502 -0.55715376 -1.01832012
48 -0.3783480 -0.63192851 -0.84722674
49 0.2461541 -0.10850526 0.09378685
50 -0.3783480 -0.03373051 -0.59058667
51 1.4951584 -0.55715376 -0.93277343
52 -0.3783480 -0.25805476 -0.76168005
53 -0.3783480 0.11581899 0.26488023
54 0.8706563 -0.33282951 -0.84722674
55 0.2461541 -0.63192851 -1.01832012
56 0.2461541 -0.18328001 -0.76168005
57 0.2461541 -0.40760426 -0.67613336
58 0.2461541 -0.55715376 -1.06964813
59 -0.3783480 -0.03373051 -0.59058667
60 0.2461541 -0.33282951 -0.93277343
61 -1.0028502 -0.03373051 0.26488023
62 -0.3783480 -0.63192851 -0.59058667
63 0.8706563 -0.33282951 -0.76168005
64 -1.0028502 0.19059374 0.94925374
65 -0.3783480 -0.25805476 0.09378685
66 -0.3783480 0.71401699 0.60706699
67 -1.0028502 -0.10850526 -0.76168005
68 -1.0028502 -0.18328001 0.26488023
69 0.2461541 -0.70670326 0.09378685
70 -1.0028502 0.04104424 -0.93277343
71 0.2461541 0.41491799 0.60706699
73 -0.3783480 -0.55715376 0.26488023
74 0.2461541 -0.18328001 -0.76168005
75 -0.3783480 -0.33282951 -0.24839991
76 -0.3783480 -0.03373051 0.09378685
77 0.8706563 -0.63192851 -0.59058667
78 -0.3783480 -0.48237901 0.09378685
79 -0.3783480 -0.25805476 -0.07730653
80 -0.3783480 -0.63192851 -0.41949329
81 -0.3783480 0.19059374 0.60706699
82 -0.3783480 -0.40760426 0.26488023
83 -0.3783480 -0.85625276 NA
84 -1.0028502 -0.33282951 -0.24839991
85 1.4951584 -0.55715376 -0.59058667
86 2.1196606 -0.03373051 0.09378685
87 0.8706563 -0.25805476 -0.07730653
88 -1.0028502 -0.40760426 -0.76168005
89 2.1196606 -0.70670326 -0.41949329
90 0.2461541 -0.18328001 0.26488023
91 -0.3783480 -0.63192851 -0.93277343
92 2.1196606 -0.78147801 -0.50503998
93 2.1196606 0.19059374 -0.59058667
94 1.4951584 -0.33282951 -0.84722674
95 -1.6273523 -0.55715376 0.26488023
96 0.8706563 -0.63192851 -0.76168005
97 0.8706563 -0.78147801 0.94925374
98 -1.6273523 -0.48237901 0.09378685
99 -1.0028502 -0.33282951 -0.59058667
100 -0.3783480 -0.40760426 0.43597361
101 0.2461541 -0.70670326 -0.93277343
102 0.2461541 -0.55715376 1.46253388
103 -0.3783480 -0.25805476 -0.41949329
104 -1.0028502 -0.03373051 0.60706699
105 -0.3783480 -0.48237901 -0.84722674
106 -1.6273523 -0.18328001 0.26488023
107 0.8706563 -0.33282951 -0.24839991
108 -1.6273523 -0.03373051 -0.76168005
109 0.2461541 0.19059374 0.94925374
110 0.8706563 -0.70670326 0.43597361
111 -1.6273523 -0.25805476 -0.84722674
112 -0.3783480 0.56446749 0.09378685
113 -0.3783480 -0.10850526 -0.67613336
114 -0.3783480 -0.18328001 -0.84722674
115 -1.6273523 0.19059374 -0.59058667
116 -1.6273523 -0.78147801 -0.24839991
117 0.8706563 -0.18328001 0.09378685
118 -0.3783480 -0.03373051 -0.24839991
119 2.1196606 -0.33282951 0.60706699
120 -0.3783480 -0.25805476 -0.41949329
121 1.4951584 -0.55715376 0.26488023
122 0.2461541 0.04104424 -0.07730653
123 1.4951584 -0.40760426 0.43597361
124 0.2461541 -0.03373051 0.09378685
125 1.4951584 -0.25805476 0.60706699
126 0.2461541 -0.63192851 0.09378685
127 0.2461541 -0.33282951 0.26488023
129 -1.0028502 2.80771000 3.17346767
130 -0.3783480 4.30320501 1.46253388
131 0.8706563 1.31221500 2.31800078
132 -1.0028502 3.55545751 4.02893457
133 -0.3783480 2.05996250 1.46253388
134 -0.3783480 5.05095251 3.17346767
135 0.8706563 0.93834125 2.31800078
136 -1.0028502 2.80771000 4.02893457
137 -0.3783480 0.56446749 0.60706699
138 -0.3783480 3.55545751 3.17346767
139 -0.3783480 4.30320501 3.17346767
attr(,"scaled:center")
Duration..days. Accommodation.cost Transportation.cost
7.605839 1245.109489 645.183824
attr(,"scaled:scale")
Duration..days. Accommodation.cost Transportation.cost
1.601276 1337.349836 584.476153
Boxploty škálovaných premenných: Premenná Duration.days má pomerne rovnomerné rozloženie s niekoľkými dlhšími pobytmi ako odľahlými hodnotami. To znamená, že väčšina ciest má podobnú dĺžku, ale existuje pár veľmi dlhých pobytov (napr. 14 dní, 10 dní), ktoré zvyšujú variabilitu. Premenná Accommodation.cost má výraznejšie odľahlé hodnoty na hornej strane. Znamená to, že v dátach máš viac ciest, kde bolo ubytovanie výrazne drahšie než bežný priemer – typicky rezorty, drahé hotely alebo luxusnejšie pobyty. Premenná Transportation.cost má tiež odľahlé hodnoty, najmä smerom nahor. To odráža situácie, kde doprava bola veľmi nákladná (napr. diaľkové lety do USA, Ázie alebo Havaja), zatiaľ čo iné cesty mali relatívne lacnú prepravu (vlak, bus, krátke lety). Variabilita medzi cestami je najvyššia pri doprave a ubytovaní. Tieto dve premenné pravdepodobne najviac ovplyvnia výsledné klastre.
num_vars <- as.data.frame(travel_scaled)
num_plots <- ncol(num_vars)
par(mfrow = c(1, num_plots))
par(mar = c(4, 4, 2, 1))
for (col in names(num_vars)) {
boxplot(num_vars[[col]],
main = col,
col = "lightblue",
horizontal = TRUE)
}
Korelačná matica: Tabuľka korelačných koeficientov medzi Duration, Accommodation cost a Transportation cost. Korelácie sa pohybujú v nízkych až stredných hodnotách (typicky 0.1 až 0.5), čo znamená, že premenné spolu mierne súvisia, ale nie sú tak silne prepojené, aby spôsobovali multikolinearitu. Duration.days nebýva priamo úmerná cene ubytovania – môže existovať dlhý lacný pobyt aj krátky drahý výlet, čo vidno aj v dátach. Accommodation.cost a Transportation.cost majú bližší vzťah – drahšie cestovanie býva častejšie sprevádzané aj drahým ubytovaním (rezorty, exotika). Premenné sú dostatočne nezávislé na použitie v klastrovej analýze. Nie je potrebné žiadnu vylúčiť.
cor_mat <- round(cor(travel_scaled), 2)
cor_mat
Duration..days. Accommodation.cost
Duration..days. 1.00 -0.13
Accommodation.cost -0.13 1.00
Transportation.cost NA NA
Transportation.cost
Duration..days. NA
Accommodation.cost NA
Transportation.cost 1
Matica vzdialenosti: Euklidovskú vzdialenosť medzi každými dvoma cestami je číselné vyjadrenie toho, ako veľmi sú si dve cesty podobné podľa dĺžky pobytu, ceny ubytovania a ceny dopravy. Nízke hodnoty znamenajú veľmi podobné cesty (napr. 5 dní, nízke náklady na dopravu aj ubytovanie). Vysoké hodnoty znamenajú úplne iné cestovné profily (napr. lacný krátky výlet vs. drahá exotická dovolenka). Najvyššie vzdialenosti bývajú medzi lacnými európskymi motelovými/trénovými cestami a drahými diaľkovými destináciami s letom a ubytovaním v rezorte. Táto tabuľka potvrdzuje, že v dátach existujú jasné skupiny s relatívne homogénnymi hodnotami, čo je vhodné pre klastrovú analýzu.
dist_mat <- dist(travel_scaled, method = "euclidean")
round(as.matrix(dist_mat), 2)
1 2 3 4 5 6 7 8 9 10 11 12
1 0.00 1.30 0.23 4.47 0.78 1.31 2.20 0.22 0.68 1.03 0.23 0.91
2 1.30 0.00 1.30 5.76 1.35 0.73 3.35 1.26 1.38 1.85 1.26 1.42
3 0.23 1.30 0.00 4.46 0.88 1.31 2.09 0.19 0.87 1.13 0.34 1.04
4 4.47 5.76 4.46 0.00 4.68 5.64 2.76 4.50 4.62 4.40 4.52 4.72
5 0.78 1.35 0.88 4.68 0.00 1.72 2.54 0.70 0.37 1.69 0.56 0.19
6 1.31 0.73 1.31 5.64 1.72 0.00 3.28 1.37 1.63 1.46 1.40 1.81
7 2.20 3.35 2.09 2.76 2.54 3.28 0.00 2.16 2.59 2.49 2.25 2.67
13 14 15 16 17 18 19 20 21 22 23 24
1 1.80 1.27 0.56 0.80 1.31 1.89 0.99 1.90 1.58 0.15 0.97 0.88
2 2.77 2.56 1.27 1.39 2.50 3.18 0.92 3.18 0.70 1.27 1.44 1.90
3 1.83 1.28 0.59 0.94 1.35 1.91 1.14 1.89 1.64 0.17 1.08 0.84
4 3.84 3.20 4.61 4.68 3.39 2.58 5.24 2.59 5.92 4.49 4.75 4.03
5 2.51 1.60 0.35 0.17 1.30 2.14 0.73 2.17 1.26 0.72 0.21 0.84
6 2.29 2.50 1.58 1.73 2.63 3.13 1.30 3.13 1.37 1.35 1.85 2.11
7 2.25 1.25 2.32 2.61 1.53 1.14 3.12 0.86 3.65 2.17 2.68 1.73
25 26 27 28 29 30 31 32 33 34 35 36
1 1.07 1.43 0.99 0.71 1.07 1.42 3.75 1.75 0.86 0.93 1.98 1.28
2 1.03 2.70 1.98 1.87 1.46 2.53 5.00 2.66 1.90 1.43 3.17 1.01
3 1.24 1.47 1.13 0.73 1.12 1.46 3.76 1.79 0.79 1.05 1.92 1.32
4 5.25 3.14 4.08 3.95 4.80 3.50 1.30 3.78 3.99 4.74 2.76 5.39
5 0.83 1.89 0.70 0.81 0.38 1.26 3.79 1.34 0.95 0.17 2.14 0.75
6 1.35 2.53 2.20 2.01 1.93 2.72 5.04 2.98 2.07 1.83 3.21 1.65
7 3.20 1.45 2.23 1.74 2.61 1.66 2.25 2.08 1.62 2.66 0.68 3.12
37 38 39 40 41 42 43 44 45 46 47 48
1 0.75 1.10 0.15 0.83 0.96 0.82 0.17 0.88 0.45 0.28 1.24 0.97
2 1.88 1.48 1.34 1.39 2.01 1.71 1.33 1.43 1.27 1.35 1.02 1.42
3 0.81 1.17 0.34 0.95 0.80 0.91 0.15 1.03 0.34 0.51 1.33 1.04
4 3.97 4.81 4.45 4.69 3.92 4.39 4.44 4.71 4.55 4.47 5.37 4.76
5 0.73 0.34 0.86 0.11 1.36 1.52 0.93 0.23 0.69 0.79 0.69 0.24
6 2.04 1.96 1.30 1.75 2.02 1.35 1.28 1.79 1.46 1.35 1.61 1.86
7 1.88 2.69 2.24 2.61 1.35 2.37 2.13 2.67 2.14 2.35 3.18 2.60
49 50 51 52 53 54 55 56 57 58 59 60
1 0.65 0.51 2.13 0.72 0.37 1.50 1.28 0.94 0.94 1.28 0.51 1.10
2 1.92 1.33 3.20 1.35 1.42 2.57 2.05 1.95 1.92 2.06 1.33 1.99
3 0.63 0.70 2.17 0.86 0.34 1.57 1.35 1.06 1.02 1.37 0.70 1.21
4 3.84 4.57 3.14 4.65 4.41 3.56 4.26 4.06 4.08 4.26 4.57 4.15
5 1.10 0.41 1.89 0.15 1.15 1.25 0.71 0.66 0.63 0.71 0.41 0.65
6 1.90 1.53 3.43 1.68 1.25 2.78 2.42 2.17 2.18 2.42 1.53 2.28
7 1.58 2.48 1.88 2.55 2.11 1.92 2.33 2.15 2.06 2.37 2.48 2.27
61 62 63 64 65 66 67 68 69 70 71 73
1 0.71 0.79 1.46 1.22 0.28 1.01 0.93 0.73 0.93 1.06 1.03 0.63
2 0.86 1.33 2.55 1.45 1.30 1.84 0.84 0.82 1.94 1.00 2.19 1.37
3 0.66 0.82 1.52 1.12 0.07 1.03 1.06 0.65 0.81 1.22 1.01 0.41
4 5.04 4.69 3.53 5.02 4.48 4.37 5.22 5.06 3.99 5.25 3.75 4.53
5 1.26 0.28 1.25 1.92 0.87 1.77 0.69 1.22 1.10 0.79 1.71 1.04
6 0.66 1.72 2.75 0.93 1.34 1.40 1.24 0.73 2.08 1.36 1.92 1.46
7 2.64 2.43 1.84 2.61 2.08 2.29 3.06 2.62 1.52 3.18 1.62 1.99
74 75 76 77 78 79 80 81 82 83 84 85
1 0.94 0.34 0.17 1.48 0.48 0.22 0.69 0.72 0.51 1.01 0.71 2.01
2 1.95 1.25 1.33 2.54 1.30 1.26 1.30 1.60 1.35 1.66 0.62 3.15
3 1.06 0.37 0.15 1.49 0.30 0.19 0.68 0.64 0.28 0.82 0.73 2.03
4 4.06 4.54 4.44 3.55 4.52 4.50 4.65 4.39 4.49 5.63 5.15 2.99
5 0.66 0.52 0.93 1.28 0.86 0.70 0.41 1.49 1.03 0.55 0.81 1.89
6 2.17 1.45 1.28 2.77 1.43 1.37 1.64 1.30 1.38 2.00 0.96 3.32
7 2.15 2.23 2.13 1.66 2.06 2.16 2.32 2.05 2.00 2.32 2.78 1.54
86 87 88 89 90 91 92 93 94 95 96 97
1 2.50 1.27 1.00 2.61 0.73 1.04 2.64 2.56 2.05 1.40 1.54 1.78
2 3.77 2.50 0.81 3.77 1.95 1.46 3.78 3.80 3.18 0.56 2.57 2.81
3 2.50 1.26 1.08 2.60 0.65 1.12 2.64 2.62 2.10 1.31 1.58 1.63
4 2.03 3.30 5.27 2.49 3.84 4.79 2.56 2.25 3.03 5.74 3.61 3.42
5 2.67 1.43 0.62 2.54 1.22 0.28 2.54 2.57 1.88 1.62 1.27 2.15
6 3.76 2.56 1.34 3.91 1.91 1.92 3.95 3.84 3.36 0.75 2.82 2.77
7 1.18 1.24 3.03 1.51 1.47 2.66 1.60 1.82 1.81 3.20 1.82 0.66
98 99 100 101 102 103 104 105 106 107 108 109
1 1.34 0.86 0.64 1.25 1.74 0.41 0.93 0.89 1.30 1.30 1.42 1.22
2 0.37 0.71 1.43 2.03 2.55 1.26 1.10 1.39 0.53 2.50 0.59 2.28
3 1.28 0.94 0.41 1.31 1.55 0.52 0.82 0.99 1.26 1.30 1.52 1.12
4 5.74 5.22 4.48 4.25 4.00 4.57 5.03 4.72 5.68 3.36 5.82 3.78
5 1.52 0.65 1.20 0.71 2.32 0.37 1.55 0.11 1.63 1.35 1.30 1.92
6 0.69 1.18 1.40 2.40 2.35 1.49 0.75 1.80 0.37 2.60 1.05 1.99
7 3.24 2.94 1.95 2.26 1.35 2.34 2.58 2.60 3.22 1.37 3.60 1.46
110 111 112 113 114 115 116 117 118 119 120 121
1 1.51 1.48 0.62 0.60 0.78 1.37 1.47 1.27 0.17 2.61 0.41 1.98
2 2.62 0.60 1.58 1.34 1.39 0.63 0.45 2.53 1.28 3.84 1.26 3.17
3 1.40 1.57 0.75 0.77 0.94 1.47 1.43 1.25 0.37 2.55 0.52 1.92
4 3.38 5.86 4.40 4.61 4.67 5.76 5.84 3.25 4.49 2.08 4.57 2.76
5 1.76 1.26 1.29 0.31 0.24 1.40 1.40 1.53 0.64 2.85 0.37 2.14
6 2.66 1.20 1.31 1.59 1.71 0.86 1.10 2.53 1.37 3.80 1.49 3.21
7 0.82 3.61 2.35 2.52 2.62 3.56 3.35 1.12 2.28 0.75 2.34 0.68
122 123 124 125 126 127 129 130 131 132 133 134
1 0.63 1.98 0.65 2.01 0.88 0.77 4.36 4.60 3.02 5.49 2.60 6.04
2 1.92 3.20 1.93 3.24 1.93 1.94 4.69 5.10 3.94 5.81 3.20 6.50
3 0.69 1.92 0.64 1.94 0.77 0.66 4.34 4.69 2.96 5.46 2.63 6.07
4 3.84 2.69 3.83 2.63 3.97 3.87 6.05 5.82 3.64 6.75 4.70 6.77
5 1.03 2.22 1.12 2.33 1.08 1.20 5.12 5.21 3.74 6.25 3.32 6.73
6 1.91 3.18 1.89 3.17 2.05 1.95 3.96 4.46 3.42 5.09 2.55 5.80
7 1.72 0.53 1.60 0.45 1.52 1.44 4.74 5.23 2.40 5.71 3.26 6.32
135 136 137 138 139
1 2.87 5.03 0.91 4.84 5.42
2 3.80 5.34 1.76 5.33 5.90
3 2.79 4.98 0.91 4.84 5.44
4 3.58 6.46 4.37 5.89 6.30
5 3.59 5.80 1.68 5.58 6.14
6 3.32 4.63 1.35 4.62 5.19
7 2.12 5.20 2.21 5.04 5.66
[ reached 'max' / getOption("max.print") -- omitted 130 rows ]
Hierarchické zhlukovanie (Wardova metóda): Dendrogram vizualizuje proces postupného spájania ciest do zhlukov. Každý list predstavuje jednu cestu. Vertikálna výška spojenia určuje ako veľmi sa dva klastre líšia. Červená čiara predstavuje rez, ktorý definuje 3 klastre. Zhlukovanie začína spájaním najpodobnejších ciest (najnižšie spojenia). Pri vyšších výškach spájame odlišnejšie skupiny.
Rez na troch klastroch vytvára: Klaster 1: lacnejšie krátke výlety – nízke náklady na ubytovanie aj dopravu, – typicky Európa, hotely/hostely, krátke trvanie.
Klaster 2: drahé diaľkové cesty – extrémne vysoké náklady dopravy (lety mimo Európy), – ubytovanie v rezortoch alebo drahých hoteloch, – trvanie skôr dlhšie.
Klaster 3: stredná trieda – pobyty s priemernými nákladmi, – kombinácie hotelov, Airbnb, vlak/bus/krátke lety.
Wardova metóda potvrdzuje prirodzené tri skupiny cestovných typov podľa výdavkov a trvania.
hc <- hclust(dist_mat, method = "ward.D2")
plot(hc, main = "Hierarchical clustering (Ward.D2)",
xlab = "Trip ID", sub = "")
k <- 3
h_cut <- hc$height[length(hc$height) - (k - 1)]
abline(h = h_cut, col = "red", lwd = 2, lty = 2)
clusters <- cutree(hc, k = k)
clusters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 1
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
65 66 67 68 69 70 71 73 74 75 76 77 78 79 80 81
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
1 1 1 2 2 2 1 2 1 1 2 2 2 1 1 1
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
114 115 116 117 118 119 120 121 122 123 124 125 126 127 129 130
1 1 1 2 1 2 1 2 1 2 1 2 1 1 3 3
131 132 133 134 135 136 137 138 139
1 3 1 3 1 3 1 3 3
travel_clusters <- data.frame(
Trip = rownames(travel_scaled),
travel,
cluster = factor(clusters)
)
travel_clusters
Variabilita vnútri a medzi klastrami: Rozklad variability na: TSS – celková variabilita v dátach WSS – variabilita vo vnútri klastrov BSS – variabilita medzi klastrami Prop_Between – podiel variability, ktorý klastre vysvetľujú
Vysoká hodnota BSS/TSS znamená, že klastre dobre oddeľujú dáta. Vidíme, že všetky premenné majú vysoký podiel vysvetlenej variability. Najvyššiu medzi-klastrovú variabilitu majú: Transportation.cost Accommodation.cost → tieto dve premenné najviac „delia“ cestovateľské profily.
Zvolené klastre majú dobrú diskriminačnú silu a sú štatisticky zmysluplné.
ssq <- function(x, m) sum((x - m)^2)
vars <- colnames(travel_scaled)
TSS <- sapply(vars, function(v) ssq(travel_scaled[, v], mean(travel_scaled[, v])))
WSS <- sapply(vars, function(v) {
x <- travel_scaled[, v]
tapply(x, clusters, function(z) ssq(z, mean(z))) |> sum()
})
BSS <- TSS - WSS
ss_table <- data.frame(
Variable = vars,
Total_SS = TSS,
Within_SS = WSS,
Between_SS = BSS,
Prop_Between = BSS / TSS
)
ss_table
Centroidy - priemerné hodnoty v klastroch: Čo tabuľka centroidov ukazuje: priemernú dĺžku pobytu, priemerné náklady na ubytovanie, priemerné náklady na dopravu, pre každý klaster.
Klaster 1 (lacné krátke výlety): krátka dĺžka pobytu (2–5 dní) nízke náklady na dopravu (lacné lety, vlak, autobus) lacnejšie ubytovanie (hostel, lacné hotely)
Klaster 2 (luxusné a exotické cesty): dlhšie pobyty najvyššie náklady dopravy (medzikontinentálne lety) vysoké náklady ubytovania (rezorty, luxusné hotely)
Klaster 3 (stredná kategória): stredná dĺžka pobytu priemerné ceny za ubytovanie aj dopravu hotel/Airbnb štandardnej kvality
Centroidy presne ukazujú, že dátová štruktúra podporuje trojklastrové riešenie – klastre sú dobre oddelené ekonomickým profilom cestovania.
centroids <- travel_clusters %>%
group_by(cluster) %>%
summarise(
Duration_mean = mean(Duration..days.),
Accom_mean = mean(Accommodation.cost),
Transport_mean = mean(Transportation.cost)
)
centroids
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
plot(cars)
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.