1 . Objective

Pada kesempatan kali ini, saya akan mendemonstrasikan unsupervised learning analysis menggunakan dataset wine customer segmentation. Analisis tersebut meliputi pengelompokan menggunakan algoritma K-means dan reduksi dimensi menggunakan principal component analysis (PCA).

Melalui analisis ini, saya ingin mengevaluasi kemungkinan melakukan clustering untuk menghasilkan label baru untuk dataset dan kemungkinan pengurangan dimensionalitas menggunakan PCA. Selain itu, saya juga akan menganalisis pola data untuk mendapatkan wawasan dengan menggabungkan PCA dan clustering.

2 . Preparation

Sebelum kita melakukan analisis terhadap data maka kita harus melakukan install.package() yang di butuhkan pada R Studio. Apabila telah ter-install, maka lakukan pengaktifan package menggunakan library().

library(dplyr)
library(tidyr)
library(GGally)
library(gridExtra)
library(factoextra)
library(FactoMineR)
library(plotly)
library(tidyverse)
library(lubridate)
library(cluster)
library(ggforce)
library(GGally)
library(scales)
library(cowplot)

3 . Import Data

Dataset diperoleh dari kaggle.com tentang segmentasi customer wine: Data ini adalah hasil analisis kimiawi anggur yang ditanam di wilayah yang sama di Italia tetapi berasal dari tiga kultivar berbeda. Analisis menentukan jumlah 13 unsur yang ditemukan di masing-masing dari tiga jenis anggur.

wine <- read.csv("data_input/Wine.csv")

glimpse(wine)
## Rows: 178
## Columns: 14
## $ Alcohol              <dbl> 14.23, 13.20, 13.16, 14.37, 13.24, 14.20, 14.39, ~
## $ Malic_Acid           <dbl> 1.71, 1.78, 2.36, 1.95, 2.59, 1.76, 1.87, 2.15, 1~
## $ Ash                  <dbl> 2.43, 2.14, 2.67, 2.50, 2.87, 2.45, 2.45, 2.61, 2~
## $ Ash_Alcanity         <dbl> 15.6, 11.2, 18.6, 16.8, 21.0, 15.2, 14.6, 17.6, 1~
## $ Magnesium            <int> 127, 100, 101, 113, 118, 112, 96, 121, 97, 98, 10~
## $ Total_Phenols        <dbl> 2.80, 2.65, 2.80, 3.85, 2.80, 3.27, 2.50, 2.60, 2~
## $ Flavanoids           <dbl> 3.06, 2.76, 3.24, 3.49, 2.69, 3.39, 2.52, 2.51, 2~
## $ Nonflavanoid_Phenols <dbl> 0.28, 0.26, 0.30, 0.24, 0.39, 0.34, 0.30, 0.31, 0~
## $ Proanthocyanins      <dbl> 2.29, 1.28, 2.81, 2.18, 1.82, 1.97, 1.98, 1.25, 1~
## $ Color_Intensity      <dbl> 5.64, 4.38, 5.68, 7.80, 4.32, 6.75, 5.25, 5.05, 5~
## $ Hue                  <dbl> 1.04, 1.05, 1.03, 0.86, 1.04, 1.05, 1.02, 1.06, 1~
## $ OD280                <dbl> 3.92, 3.40, 3.17, 3.45, 2.93, 2.85, 3.58, 3.58, 2~
## $ Proline              <int> 1065, 1050, 1185, 1480, 735, 1450, 1290, 1295, 10~
## $ Customer_Segment     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1~

Dalam data tersebut, ada 13 unsur yang ditemukan di masing-masing dari tiga jenis anggur :

1.Alcohol : Kadar alkohol dalam anggur

2.Malic_Acid : Kadar asam malat pada anggur

3.Ash : Unsur ash pada anggur

4.Ash_Alcanity : kadar alkanity pada anggur

5.Magnesium : kadar magnesium pada anggur

6.Total_Phenols : Jumlah fenol pada anggur

7.Flavanoids : Kadar flavanoid pada anggur

8.Nonflavanoid_Phenols : kadar nonflavanoid_phenols pada anggur

9.Proanthocyanins : kadar Proanthocyanins pada anggur

10.Color_Intensity : tingkatan warna pada anggur

11.Hue : kadar Hue pada anggur

12.OD280 : protein quantification pada anggur

13.Proline : kadar proline pada anggur

#Mengganti tipe data Customer_Segment menjadi Factor
wine$Customer_Segment <- as.factor(wine$Customer_Segment)

4 . Data Wrangling

anyNA(wine)
## [1] FALSE
colSums(is.na(wine))
##              Alcohol           Malic_Acid                  Ash 
##                    0                    0                    0 
##         Ash_Alcanity            Magnesium        Total_Phenols 
##                    0                    0                    0 
##           Flavanoids Nonflavanoid_Phenols      Proanthocyanins 
##                    0                    0                    0 
##      Color_Intensity                  Hue                OD280 
##                    0                    0                    0 
##              Proline     Customer_Segment 
##                    0                    0

Pada data wine tidak terdapat data NA dan karena int kita bisa menlanjutkan ke tahap selanjutnya

5 . Exploratory Data Analysis

1 . Clustering Opportunity

# Inspecting the difference between numerical variable based on Customer_segment
p1 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Alcohol, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Alcohol")

p2 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Malic_Acid, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Malic_Acid")

p3 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Ash, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Ash")

p4 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Ash_Alcanity, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Ash_Alcanity")

p5 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Magnesium, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Magnesium")

p6 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Total_Phenols, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Total_Phenols")

p7 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Flavanoids, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Flavanoids")

p8 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Nonflavanoid_Phenols, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Nonflavanoid_Phenols")

p9 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Proanthocyanins, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Proanthocyanins")

p10 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Color_Intensity, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Color_Intensity")

p11 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Hue, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Hue")

p12 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = OD280, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "OD280")

p13 <- ggplot(data = wine, mapping = aes(x= Customer_Segment, y = Proline, color = Customer_Segment ))+
  geom_boxplot(show.legend = F) + theme_minimal() + labs(title = "Proline")

plot_grid(p1, p2, p3, p4)

plot_grid(p5, p6, p7, p8)

plot_grid(p9, p10, p11, p12)

plot_grid(p13)

Dari barplot terlihat bahwa secara umum Customer_Segment 1 memiliki nilai tertinggi pada sebagian besar variabel. sedangkan pada Customer_Segment 3 memiliki nilai tertinggi pada 4 variabel yaitu Malic_Acid, Ash_Alcanity, Nonflavanoid_Phenols, & Color_Intensity. oleh karena itu dapat di simpulkan Customer_Segment 1 mendominasi nilai tertinggi terhapa variabel yang ada (Customer_Segment 1 > Customer_Segment 3 > Customer_Segment 2)

Dengan memiliki pemisahan nilai yang berbeda antara setiap Customer_Segment, data ini mungkin cocok menggunakan K-means untuk melakuakan pengelompokan customer. Meskipun datanya sudah berisi label Customer_Segment, pengelompokan akan tetap digunakan untuk membuktikan apakah Customer_Segment dapat digunakan untuk menghasilkan kluster yang sesuai. Jika tidak, dapatkah kita membuat Customer_Segment baru berdasarkan properti kadar pada anggur tersebut? Selain itu, visualisasi dan pembuatan profil dari hasil pengelompokan akan dilakukan untuk mendapatkan wawasan yang berharga.

2. Dimensionality Reduction Opportunity

Di sini kita akan mengeksplorasi distribusi data setiap variabel numerik menggunakan plot kepadatan dan korelasi antara masing-masing variabel menggunakan scatterplot yang disediakan dalam fungsi ggpairs dari paket GGally.

ggpairs(wine[,c(1:13)], showStrips = F) + 
  theme(axis.text = element_text(colour = "black", size = 11),
        strip.background = element_rect(fill = "#d63d2d"),
        strip.text = element_text(colour = "white", size = 12,
                                  face = "bold"))

ggcorr(wine, label = T,  hjust = 1)
## Warning in ggcorr(wine, label = T, hjust = 1): data in column(s)
## 'Customer_Segment' are not numeric and were ignored

Terlihat bahwa terdapat korelasi yang tidak begitu kuat antara variabel dari data tersebut, dari data tersebut hanya Total_Phenols dan Flavanoids yang saling berkolerasi kuat.

Principal Component Analysis (PCA) dapat dilakukan agar data ini menghasilkan data non-multikolinearitas, sekaligus mengurangi dimensi data dan menyimpan informasi sebanyak mungkin. Hasil analisis ini dapat dimanfaatkan lebih lanjut untuk tujuan klasifikasi dengan komputasi yang lebih rendah.

6 . Data Pre-processing

# scaling data, dan membuang kolom yang bertipe factor
wine_z <- scale(wine[, -14])

7 . UL: Clustering

# Menentukan nilai K Optimum
fviz_nbclust(wine_z, kmeans, method = "wss")

Dari plot, kita dapat melihat bahwa 3 adalah jumlah K yang optimal. Setelah k = 3, peningkatan jumlah K tidak mengakibatkan penurunan yang cukup besar dari total dalam jumlah kuadrat (kohesi internal yang kuat) atau peningkatan yang cukup besar dari antara jumlah kuadrat dan antara / jumlah total rasio kuadrat (pemisahan eksternal maksimum).

#K-Means Clustering
set.seed(100)
wine_k <- kmeans(wine_z, 3)

#result analysis
wine_k
## K-means clustering with 3 clusters of sizes 65, 62, 51
## 
## Cluster means:
##      Alcohol Malic_Acid        Ash Ash_Alcanity   Magnesium Total_Phenols
## 1 -0.9234669 -0.3929331 -0.4931257    0.1701220 -0.49032869   -0.07576891
## 2  0.8328826 -0.3029551  0.3636801   -0.6084749  0.57596208    0.88274724
## 3  0.1644436  0.8690954  0.1863726    0.5228924 -0.07526047   -0.97657548
##    Flavanoids Nonflavanoid_Phenols Proanthocyanins Color_Intensity        Hue
## 1  0.02075402          -0.03343924      0.05810161      -0.8993770  0.4605046
## 2  0.97506900          -0.56050853      0.57865427       0.1705823  0.4726504
## 3 -1.21182921           0.72402116     -0.77751312       0.9388902 -1.1615122
##        OD280    Proline
## 1  0.2700025 -0.7517257
## 2  0.7770551  1.1220202
## 3 -1.2887761 -0.4059428
## 
## Clustering vector:
##   [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 3 1 1 1 1 1 1 1 1 1 1 1 2
##  [75] 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 3 1 1 2 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [149] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## 
## Within cluster sum of squares by cluster:
## [1] 558.6971 385.6983 326.3537
##  (between_SS / total_SS =  44.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Dari hasil clustering, sangat menarik bahwa ukuran masing-masing cluster tidak proporsional satu sama lain (cluster 1:65; cluster 2: 62; cluster 3: 51), menampakkan hasil yang sedikit berbeda dari pengamatan sebenarnya dari masing-masing Customer_Segment(cluster 1: 59; cluster 2: 71; cluster 3: 48)

Hal ini menunjukkan bahwa mungkin terdapat Customer_Segment dengan kadar anggur tentu. Berikut ini, saya akan mencoba membandingkan hasil pengelompokan (vektor pengelompokan) dengan label sebenarnya untuk melihat berapa banyak pengamatan yang termasuk dalam kelas yang berbeda.

wine$Customer_Segment
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [149] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## Levels: 1 2 3
wine_k$cluster
##   [1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##  [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 3 1 1 1 1 1 1 1 1 1 1 1 2
##  [75] 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 3 1 1 2 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [149] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
# total of miss-class
59+69    
## [1] 128
# percentage of miss-class from the data
(128/178)*100 
## [1] 71.91011

Dari hasil perhitungan, 128 observasi (71,9% observasi) masuk dalam kelas yang berbeda dari yang seharusnya. Hal ini menunjukkan bahwa jenis anggur saja tidak cukup untuk mendapatkan pengelompokan Customer_segment. unsur-unsur yang terkandung di dalamnya mungkin bisa menjelaskan Customer_Segment.

# additional information
wine_k$tot.withinss # total within sum of squares
## [1] 1270.749
wine_k$betweenss # between sum of squares
## [1] 1030.251
wine_k$totss # total sum of squares
## [1] 2301
wine_k$iter # number of iteration needed to obtain optimum clustering
## [1] 2

Meskipun demikian, cluster baru dapat dibuat menggunakan dataset ini dan cluster baru tersebut juga memiliki karakteristik berbeda yang dimiliki oleh masing-masing cluster. Visualisasi dan pembuatan profil hasil cluster dapat memberi kami informasi tambahan tentang setiap cluster yang dapat berguna bagi kami dari perspektif bisnis.

Untuk memvisualisasikan hasil K-means clustering, kita dapat menggunakan berbagai fungsi dari paket factoextra atau dengan menggabungkannya dengan PCA. Kali ini akan menggunakan paket factoextra (saya akan menggabungkan hasilnya dengan PCA di bagian selanjutnya).

# data preparation for visualization & profiling
wine$cluster <- as.factor(wine_k$cluster)
wine
# clustering visualization
fviz_cluster(object = wine_k, 
             data = wine_z)

# cluster profiling
wine %>%
  group_by(cluster) %>% 
  summarise_all(.funs = "mean") %>% 
  select(-Customer_Segment)
## Warning in mean.default(Customer_Segment): argument is not numeric or logical:
## returning NA

## Warning in mean.default(Customer_Segment): argument is not numeric or logical:
## returning NA

## Warning in mean.default(Customer_Segment): argument is not numeric or logical:
## returning NA

Dari hasil pembuatan profil, kita dapat memperoleh insight:

Cluster 1: Anggur yang memiliki kadar Alcohol yang rendah dibanding 2 cluster lainnya.

Cluster 2: Anggur yang memiliki kadar Magnesium dan Proline paling tinggi,

Cluster 3: Anggur yang memiliki kadar Malic_Acid tertinggi .

Karakteristik dari setiap cluster ini juga dapat divisualisasikan dengan menggabungkan clustering dan PCA di bagian selanjutnya.

8 . UL: Principal Component Analysis

# PCA
wine_pca <- PCA(wine[,1:14], graph = F ,quali.sup = 14)
wine_pca$eig # analyze cumulative variance of each PC
##         eigenvalue percentage of variance cumulative percentage of variance
## comp 1   4.7058503             36.1988481                          36.19885
## comp 2   2.4969737             19.2074903                          55.40634
## comp 3   1.4460720             11.1236305                          66.52997
## comp 4   0.9189739              7.0690302                          73.59900
## comp 5   0.8532282              6.5632937                          80.16229
## comp 6   0.6416570              4.9358233                          85.09812
## comp 7   0.5510283              4.2386793                          89.33680
## comp 8   0.3484974              2.6807489                          92.01754
## comp 9   0.2888799              2.2221534                          94.23970
## comp 10  0.2509025              1.9300191                          96.16972
## comp 11  0.2257886              1.7368357                          97.90655
## comp 12  0.1687702              1.2982326                          99.20479
## comp 13  0.1033779              0.7952149                         100.00000
wine_pca2 <- PCA(wine[,c(1:13, 15)], graph = F, quali.sup = 14)
wine_pca2$eig
##         eigenvalue percentage of variance cumulative percentage of variance
## comp 1   4.7058503             36.1988481                          36.19885
## comp 2   2.4969737             19.2074903                          55.40634
## comp 3   1.4460720             11.1236305                          66.52997
## comp 4   0.9189739              7.0690302                          73.59900
## comp 5   0.8532282              6.5632937                          80.16229
## comp 6   0.6416570              4.9358233                          85.09812
## comp 7   0.5510283              4.2386793                          89.33680
## comp 8   0.3484974              2.6807489                          92.01754
## comp 9   0.2888799              2.2221534                          94.23970
## comp 10  0.2509025              1.9300191                          96.16972
## comp 11  0.2257886              1.7368357                          97.90655
## comp 12  0.1687702              1.2982326                          99.20479
## comp 13  0.1033779              0.7952149                         100.00000

Melalui PCA, saya dapat mempertahankan beberapa komponen utama informatif (varians kumulatif tinggi) dari dataset wine untuk melakukan pengurangan dimensi. Dengan melakukan ini, saya dapat mengurangi dimensi kumpulan data sambil juga menyimpan informasi sebanyak mungkin.

Dalam studi ini, saya ingin menyimpan setidaknya 80% informasi dari data kami. Dari ringkasan PCA (seed_pca $ eig), saya memilih PC1-PC5 dari total 13 PC. Dengan melakukan ini, saya dapat mengurangi ~ 20% dimensi dari data asli saya sambil mempertahankan 80.16% informasi dari data.

Kami dapat mengekstrak nilai PC1-PC5 dari semua pengamatan dan memasukkannya ke dalam data frame baru. Data frame yang baru ini nantinya dapat dianalisis menggunakan teknik supervised learning classification technique atau tujuan lain.

# making a new data frame from PCA result
wine_x <- data.frame(wine_pca$ind$coord[,1:5])
# another way: 
# seed_x <- PCA(seed[,1:13], graph = F, ncp = 5)$ind$coord

wine_xx <- cbind(wine_x, Type = as.factor(wine$Customer_Segment))
wine_xx

9 . Combining Clustering and PCA

Dari bagian sebelumnya kita telah membahas bahwa PCA dapat digabungkan dengan clustering untuk mendapatkan visualisasi yang lebih baik dari hasil clustering kita, atau sekedar untuk memahami pola dalam dataset kita. Ini dapat dilakukan dengan menggunakan biplot, plot umum di PCA untuk memvisualisasikan data berdimensi tinggi menggunakan PC1 dan PC2 sebagai sumbu.

Kita dapat menggunakan plot.PCA untuk memvisualisasikan objek PCA dengan argumen tambahan untuk kustomisasi.

# analysis of clustering result
par(mfcol=c(1,2)) # graphical parameter to arrange plots
plot.PCA(x = wine_pca, choix = "ind", label = "quali", habillage = 14, title = "by Customer Segment")

plot.PCA(x = wine_pca2, choix = "ind", label = "quali", habillage = 14, title = "Colored by Cluster")

Plot di atas adalah contoh individual factor map dari biplot. Titik-titik dalam plot menyerupai pengamatan dan diwarnai oleh customer segment dan Cluster (kandungan unsur menurut hasil pengelompokan). Dim1 dan Dim2 masing-masing adalah PC1 dan PC2, dengan bagian (persentase) informasi mereka sendiri dari total informasi kumpulan data.

Dari biplot, kita dapat melihat dengan jelas di plot Diwarnai menurut customer segment, beberapa pengamatan dari cluster yang berbeda terletak sangat dekat satu sama lain dan tampilan cluster yang tumpang tindih dapat dilihat. Sementara itu, pada plot Colored by Cluster, kita dapat melihat bahwa cluster terpisah dengan baik tanpa tumpang tindih tampilan cluster.

Visualisasi ini mendukung asumsi yang dibuat selama analisis hasil clustering, yaitu, “.. mungkin ada unsur-unsur yang terdapat dalam wine dapat di kelompokkan.. Ini menunjukkan bahwa customer segment saja tidak cukup untuk mendapatkan pengelompokan.

Setelah ini, saya akan fokus pada interpretasi biplot yang pengamatannya diwarnai berdasarkan cluster yang telah kita buat sebelumnya.

# analysis of biplot
par(mfcol=c(1,2)) # graphical parameter to arrange plots
plot.PCA(x = wine_pca2, choix = "ind", label = "quali", habillage = 14, title = "Colored by Cluster")

plot.PCA(x = wine_pca, choix = "var", title = "Variable Factor Map")

Beberapa insights yang bisa di ambil dari plot tersebut adalah:

  1. Dataset dapat dikelompokkan sesuai dengan unsur unsur yang terkandung di dalam wine.
  2. Tidak ada outlier dalam data.
  3. Variabel yang berkontribusi besar terhadap PC1 adalah Flavanoids, Total_Phenols, & OD280.
  4. Variabel yang berkontribusi besar terhadap PC2 adalah Color_Intensity, Alcohol, & Proline.
  5. Variabel Malic_Acid kemungkinan memiliki korelasi negatif dengan Hue.

10 . Summary

Dari unsupervised learning analysis di atas, dapat disimpulkan bahwa:

  1. Pengelompokan K-means dapat dilakukan menggunakan kumpulan data ini, meskipun, kluster tidak menyerupai Customer Segment. Customer Segment saja tidak cukup untuk mendapatkan pengelompokan berdasarkan unsur unsur yang tekandung didalammnya.

  2. Reduksi dimensi dapat dilakukan dengan menggunakan dataset ini. Untuk melakukan reduksi dimensionalitas, kita dapat memilih PC dari total 13 PC sesuai dengan total informasi yang ingin kita simpan. Dalam artikel ini, saya menggunakan 5 PC dan mempertahankan 80% informasi dari data.

Bonus: Visualisasi 3D-plot untuk Data Multi Dimensi

wine_xc <- cbind(wine_x, cluster = wine$cluster)

plot_ly(wine_xc, x = ~Dim.1, y = ~Dim.2, z = ~Dim.3, color = ~cluster, colors = c('black', 'red', 'green')) %>%
  add_markers() %>%
  layout(scene = list(xaxis = list(title = 'Dim.1'),
                     yaxis = list(title = 'Dim.2'),
                     zaxis = list(title = 'Dim.3')))