Memuat Library

library(cluster)
library(factoextra)
library(clusterCrit)
library(dplyr)
library(ggplot2)
library(tidyr)
library(scales)
library(RColorBrewer)
library(readxl)

Input Data

data <- read_excel("C:\\Users\\Yehezki\\Downloads\\Data Produk.xlsx")
data
## # A tibble: 30 × 4
##    Produk   Biaya Produksi Unit …¹ Rating Pelanggan (1-…² `Stok Saat Ini (Unit)`
##    <chr>                     <dbl>                  <dbl>                  <dbl>
##  1 Produk A                   33.6                    5                     1366
##  2 Produk B                   22.8                    3                     1024
##  3 Produk C                   35.7                    4.9                    136
##  4 Produk D                   68.2                    2.6                    301
##  5 Produk E                   58.9                    2.5                   1466
##  6 Produk F                   42.8                    3                      283
##  7 Produk G                   41                      2.5                   1215
##  8 Produk H                    6                      3.6                   1192
##  9 Produk I                   21.2                    4.1                    842
## 10 Produk J                   16.7                    4.3                   1078
## # ℹ 20 more rows
## # ℹ abbreviated names: ¹​`Biaya Produksi Unit (Ribu IDR)`,
## #   ²​`Rating Pelanggan (1-5)`

Penjelasan Data

Data yang digunakan dalam analisis ini merupakan kumpulan informasi terkait karakteristik produk dari suatu perusahaan. Setiap produk memiliki tiga variabel utama yang merepresentasikan kondisi dan performa produk, yaitu:

  1. Biaya Produksi Unit (Ribu IDR) = menunjukkan besar biaya yang diperlukan untuk memproduksi satu unit produk. Nilai ini mencerminkan efisiensi biaya dan kompleksitas proses produksi.

  2. Rating Pelanggan (1–5) = menggambarkan tingkat kepuasan atau persepsi konsumen terhadap produk. Rating yang tinggi menandakan kualitas produk yang baik di mata pelanggan.

  3. Stok Saat Ini (Unit) = menunjukkan jumlah persediaan produk yang tersedia saat ini di gudang, yang dapat berkaitan dengan tingkat permintaan, perputaran stok, dan strategi distribusi.

Tujuan Analisis Clustering

Analisis clustering (Pengelompokan) dilakukan untuk mengidentifikasi pola dan kesamaan di antara produk-produk tersebut. Tujuannya adalah untuk menemukan kelompok produk dengan karakteristik yang mirip, misalnya: Produk dengan biaya produksi rendah namun memiliki rating pelanggan tinggi, produk dengan stok melimpah namun rating rendah, atau produk premium dengan biaya tinggi dan kepuasan pelanggan tinggi.

Melalui Analisis Clustering, diharapkan perusahaan dapat:

  1. Mengelompokkan produk berdasarkan profil performa dan efisiensi produksinya,

  2. Menentukan strategi pemasaran yang berbeda untuk setiap segmen produk,

  3. Mengoptimalkan perencanaan produksi dan distribusi sesuai kebutuhan setiap klaster.

Mempersiapkan Data

df <- data[,-1]
df <- df %>%
  mutate(across(2:3, as.double))
df
## # A tibble: 30 × 3
##    Biaya Produksi Unit (Ribu IDR…¹ Rating Pelanggan (1-…² `Stok Saat Ini (Unit)`
##                              <dbl>                  <dbl>                  <dbl>
##  1                            33.6                    5                     1366
##  2                            22.8                    3                     1024
##  3                            35.7                    4.9                    136
##  4                            68.2                    2.6                    301
##  5                            58.9                    2.5                   1466
##  6                            42.8                    3                      283
##  7                            41                      2.5                   1215
##  8                             6                      3.6                   1192
##  9                            21.2                    4.1                    842
## 10                            16.7                    4.3                   1078
## # ℹ 20 more rows
## # ℹ abbreviated names: ¹​`Biaya Produksi Unit (Ribu IDR)`,
## #   ²​`Rating Pelanggan (1-5)`

Standarisasi dan Matriks Jarak

Standarisasi Data

data_scaled <- scale(df)
data_scaled
##       Biaya Produksi Unit (Ribu IDR) Rating Pelanggan (1-5)
##  [1,]                     -0.6067952            1.508387515
##  [2,]                     -1.0154455           -0.991702289
##  [3,]                     -0.5273354            1.383383025
##  [4,]                      0.7023992           -1.491720250
##  [5,]                      0.3505059           -1.616724740
##  [6,]                     -0.2586857           -0.991702289
##  [7,]                     -0.3267941           -1.616724740
##  [8,]                     -1.6511237           -0.241675348
##  [9,]                     -1.0759863            0.383347103
## [10,]                     -1.2462573            0.633356084
## [11,]                      0.8007780           -0.866697799
## [12,]                      1.4553752            0.758360574
## [13,]                     -0.4743623            1.383383025
## [14,]                      1.8791607            0.008333633
## [15,]                     -1.2159869           -0.241675348
## [16,]                      0.1083428           -0.116670858
## [17,]                     -0.6597684            0.758360574
## [18,]                     -0.8943639           -0.616688818
## [19,]                      0.1159104           -1.116706779
## [20,]                      0.5964528            0.258342613
## [21,]                      0.5964528            0.383347103
## [22,]                     -1.4013930            0.883365064
## [23,]                      0.3996953            1.258378535
## [24,]                      1.3267260            1.008369554
## [25,]                     -0.6370656            1.383383025
## [26,]                      1.8640255            0.133338123
## [27,]                      0.2786137           -1.491720250
## [28,]                      1.7580791           -1.116706779
## [29,]                     -0.4100377           -0.116670858
## [30,]                      0.1688836            0.508351593
##       Stok Saat Ini (Unit)
##  [1,]           1.12839463
##  [2,]           0.40598549
##  [3,]          -1.46974351
##  [4,]          -1.12121279
##  [5,]           1.33962537
##  [6,]          -1.15923432
##  [7,]           0.80943621
##  [8,]           0.76085314
##  [9,]           0.02154554
## [10,]           0.52005009
## [11,]           0.74606699
## [12,]           0.06590399
## [13,]           0.94039927
## [14,]          -0.17701136
## [15,]           0.13983475
## [16,]           0.19686705
## [17,]          -0.03337446
## [18,]          -0.78113129
## [19,]           1.00588080
## [20,]           1.24879615
## [21,]          -0.72409899
## [22,]          -0.70086361
## [23,]           1.40933152
## [24,]          -1.55634812
## [25,]          -1.63872811
## [26,]           0.87914235
## [27,]          -1.57958350
## [28,]          -0.88463435
## [29,]           1.24457154
## [30,]          -1.03672049
## attr(,"scaled:center")
## Biaya Produksi Unit (Ribu IDR)         Rating Pelanggan (1-5) 
##                      49.636667                       3.793333 
##           Stok Saat Ini (Unit) 
##                     831.800000 
## attr(,"scaled:scale")
## Biaya Produksi Unit (Ribu IDR)         Rating Pelanggan (1-5) 
##                     26.4284654                      0.7999713 
##           Stok Saat Ini (Unit) 
##                    473.4159358

Standarisasi data diperlukan sehingga masing-masing nilai memberi pengaruh atau kontribusi yang hampir sama satu dengan lainnya (memiliki rentang skala yang sebanding) ketika dilakukan perhitungan jarak (tidak terjadi ketimpangan kontribusi dalam perhitungan jarak).

Matriks Jarak Euclidean

dist_matrix <- dist(data_scaled, method = "euclidean")
as.matrix(dist_matrix)
##            1         2         3         4         5         6         7
## 1  0.0000000 2.6342587 2.6023570 3.9718220 3.2752665 3.4065929 3.1538012
## 2  2.6342587 0.0000000 3.0655572 2.3523059 1.7686605 1.7385622 1.0137388
## 3  2.6023570 3.0655572 0.0000000 3.1464170 4.2028330 2.4103151 3.7729993
## 4  3.9718220 2.3523059 3.1464170 0.0000000 2.4890117 1.0840424 2.1914083
## 5  3.2752665 1.7686605 4.2028330 2.4890117 0.0000000 2.6468977 0.8601371
## 6  3.4065929 1.7385622 2.4103151 1.0840424 2.6468977 0.0000000 2.0666290
## 7  3.1538012 1.0137388 3.7729993 2.1914083 0.8601371 2.0666290 0.0000000
## 8  2.0708522 1.0452551 2.9798114 3.2624921 2.4964494 2.4876012 1.9097042
## 9  1.6465027 1.4290627 1.8775070 2.8256732 2.7879207 1.9882108 2.2764771
## 10 1.2428495 1.6453266 2.2446977 3.3176732 2.8782321 2.5369486 2.4478604
## 11 2.7871970 1.8520122 3.4258671 1.9715641 1.0571646 2.1836352 1.3557193
## 12 2.4380266 3.0468558 2.5845711 2.6531270 2.9127534 2.7389211 3.0610452
## 13 0.2617382 2.4938724 2.4107249 3.7284354 3.1369469 3.1774216 3.0065885
## 14 3.1834295 3.1174833 3.0582905 2.1275445 2.6977374 2.5564078 2.9120663
## 15 2.1002583 0.8207274 2.3886812 2.6140119 2.4050276 1.7794792 1.7691214
## 16 2.0049890 1.4395522 2.3306307 1.9952439 1.9012368 1.6551135 1.6777207
## 17 1.3838548 1.8390931 1.5720520 2.8463585 2.9234933 2.1192328 2.5420920
## 18 2.8713994 1.2508166 2.1469010 1.8522926 2.6546905 0.8292670 1.9626799
## 19 2.7255152 1.2866494 3.5767206 2.2381089 0.6453204 2.2008343 0.6961291
## 20 1.7392282 2.2070701 3.1494561 2.9480310 1.8933086 2.8447293 2.1357199
## 21 2.4789624 2.4012639 1.6789752 1.9195837 2.8843952 1.6767127 2.6841018
## 22 2.0900298 2.2113227 1.2669534 3.2005727 3.6719469 2.2431588 3.1122688
## 23 1.0744548 2.8411601 3.0272240 3.7494436 2.8763688 3.4776227 3.0255380
## 24 3.3460971 3.6519595 1.8935890 2.6133457 4.0287452 2.5829280 3.9015618
## 25 2.7701102 3.1567476 0.2014857 3.2137528 4.3412594 2.4523694 3.8846394
## 26 2.8386339 3.1274505 3.5774969 2.8269438 2.3591325 3.1506505 2.8048653
## 27 4.1373592 2.4222080 2.9879488 0.6242578 2.9227684 0.8458145 2.4677034
## 28 4.0664526 3.0616604 3.4374295 1.1450173 2.6792931 2.0392086 2.7325061
## 29 1.6410440 1.3547787 3.1034540 2.9538470 1.6845247 2.5625905 1.5641080
## 30 2.5078822 2.3946185 1.1991288 2.0717300 3.1931107 1.5646044 2.8583107
##            8         9        10        11        12        13        14
## 1  2.0708522 1.6465027 1.2428495 2.7871970 2.4380266 0.2617382 3.1834295
## 2  1.0452551 1.4290627 1.6453266 1.8520122 3.0468558 2.4938724 3.1174833
## 3  2.9798114 1.8775070 2.2446977 3.4258671 2.5845711 2.4107249 3.0582905
## 4  3.2624921 2.8256732 3.3176732 1.9715641 2.6531270 3.7284354 2.1275445
## 5  2.4964494 2.7879207 2.8782321 1.0571646 2.9127534 3.1369469 2.6977374
## 6  2.4876012 1.9882108 2.5369486 2.1836352 2.7389211 3.1774216 2.5564078
## 7  1.9097042 2.2764771 2.4478604 1.3557193 3.0610452 3.0065885 2.9120663
## 8  0.0000000 1.1260603 0.9937721 2.5303545 3.3366693 2.0144029 3.6612843
## 9  1.1260603 0.0000000 0.5830982 2.3684991 2.5593737 1.4853671 2.9854570
## 10 0.9937721 0.5830982 0.0000000 2.5478616 2.7423882 1.1554461 3.2626347
## 11 2.5303545 2.3684991 2.5478616 0.0000000 1.8793440 2.5935712 1.6675320
## 12 3.3366693 2.5593737 2.7423882 1.8793440 0.0000000 2.2089096 0.8950656
## 13 2.0144029 1.4853671 1.1554461 2.5935712 2.2089096 0.0000000 2.9459188
## 14 3.6612843 2.9854570 3.2626347 1.6675320 0.8950656 2.9459188 0.0000000
## 15 0.7582928 0.6513414 0.9545470 2.1967046 2.8533687 1.9574793 3.1213514
## 16 1.8518717 1.2974556 1.5817487 1.1591495 1.6116227 1.7727230 1.8141685
## 17 1.6166801 0.5629286 0.8160110 2.3198145 2.1174723 1.1718634 2.6512889
## 18 1.7581344 1.2951249 1.8383455 2.2952876 2.8512285 2.6721445 2.9065534
## 19 1.9869897 2.1539952 2.2702978 0.7739841 2.4886944 2.5696612 2.4029152
## 20 2.3536582 2.0781778 2.0167515 1.2490802 1.5449917 1.5834992 1.9341073
## 21 2.7653818 1.8311304 2.2374074 1.9405538 1.2257599 2.2174921 1.4440497
## 22 1.8613697 0.9369005 1.2558670 3.1632081 2.9605208 1.9501661 3.4354234
## 23 2.6223166 2.2066414 1.9724691 2.2620205 1.7802459 0.9997501 2.5035802
## 24 3.9748740 2.9416710 3.3275077 3.0155620 1.6464377 3.1013387 1.7910404
## 25 3.0703613 1.9872674 2.3651592 3.5801544 2.7703307 2.5842543 3.2185045
## 26 3.5370753 3.0727262 3.1706189 1.4656999 1.1040855 2.6522485 1.0636333
## 27 3.2808753 2.8132602 3.3540486 2.4641345 3.0257661 3.8966017 2.6036745
## 28 3.8853537 3.3321540 3.7499194 1.9073848 2.1239186 3.8164108 1.3345812
## 29 1.3378730 1.4796277 1.3366880 1.5090135 2.3737528 1.5319334 2.6975829
## 30 2.6657528 1.6386745 2.1075541 2.3384573 1.7127014 2.2557588 1.9784250
##           15       16        17       18        19       20        21        22
## 1  2.1002583 2.004989 1.3838548 2.871399 2.7255152 1.739228 2.4789624 2.0900298
## 2  0.8207274 1.439552 1.8390931 1.250817 1.2866494 2.207070 2.4012639 2.2113227
## 3  2.3886812 2.330631 1.5720520 2.146901 3.5767206 3.149456 1.6789752 1.2669534
## 4  2.6140119 1.995244 2.8463585 1.852293 2.2381089 2.948031 1.9195837 3.2005727
## 5  2.4050276 1.901237 2.9234933 2.654690 0.6453204 1.893309 2.8843952 3.6719469
## 6  1.7794792 1.655114 2.1192328 0.829267 2.2008343 2.844729 1.6767127 2.2431588
## 7  1.7691214 1.677721 2.5420920 1.962680 0.6961291 2.135720 2.6841018 3.1122688
## 8  0.7582928 1.851872 1.6166801 1.758134 1.9869897 2.353658 2.7653818 1.8613697
## 9  0.6513414 1.297456 0.5629286 1.295125 2.1539952 2.078178 1.8311304 0.9369005
## 10 0.9545470 1.581749 0.8160110 1.838345 2.2702978 2.016751 2.2374074 1.2558670
## 11 2.1967046 1.159149 2.3198145 2.295288 0.7739841 1.249080 1.9405538 3.1632081
## 12 2.8533687 1.611623 2.1174723 2.851228 2.4886944 1.544992 1.2257599 2.9605208
## 13 1.9574793 1.772723 1.1718634 2.672145 2.5696612 1.583499 2.2174921 1.9501661
## 14 3.1213514 1.814168 2.6512889 2.906553 2.4029152 1.934107 1.4440497 3.4354234
## 15 0.0000000 1.331438 1.1573471 1.045110 1.8137436 2.182831 2.1028486 1.4166387
## 16 1.3314382 0.000000 1.1868808 1.487252 1.2863251 1.218787 1.1560484 2.0212111
## 17 1.1573471 1.186881 0.0000000 1.582699 2.2798260 1.863349 1.4818324 1.0055719
## 18 1.0451100 1.487252 1.5826990 0.000000 2.1128380 2.666237 1.7960677 1.5854599
## 19 1.8137436 1.286325 2.2798260 2.112838 0.0000000 1.476716 2.3396395 3.0356998
## 20 2.1828310 1.218787 1.8633495 2.666237 1.4767159 0.000000 1.9768514 2.8606318
## 21 2.1028486 1.156048 1.4818324 1.796068 2.3396395 1.976851 0.0000000 2.0595985
## 22 1.4166387 2.021211 1.0055719 1.585460 3.0356998 2.860632 2.0595985 0.0000000
## 23 2.5440543 1.856264 1.8584622 3.160474 2.4257652 1.031774 2.3142859 2.7995495
## 24 3.3022776 2.413283 2.5155742 2.859199 3.5421803 2.994107 1.2714522 2.8618374
## 25 2.4777511 2.484996 1.7228839 2.191338 3.7163663 3.335428 1.8325354 1.3091234
## 26 3.1896218 1.900112 2.7555173 3.305716 2.1528078 1.326277 2.0590356 3.7043106
## 27 2.5986232 2.252894 2.8868992 1.667058 2.6175815 3.341178 2.0853664 3.0390133
## 28 3.2650093 2.211639 3.1759263 2.701145 2.5041497 2.791355 1.9040244 3.7438380
## 29 1.3731801 1.168932 1.5688185 2.141976 1.1548448 1.074093 2.2668711 2.4015776
## 30 1.9658812 1.384217 1.3250931 1.568929 2.6107165 2.338569 0.5442185 1.6490007
##           23       24        25       26        27       28       29        30
## 1  1.0744548 3.346097 2.7701102 2.838634 4.1373592 4.066453 1.641044 2.5078822
## 2  2.8411601 3.651959 3.1567476 3.127451 2.4222080 3.061660 1.354779 2.3946185
## 3  3.0272240 1.893589 0.2014857 3.577497 2.9879488 3.437429 3.103454 1.1991288
## 4  3.7494436 2.613346 3.2137528 2.826944 0.6242578 1.145017 2.953847 2.0717300
## 5  2.8763688 4.028745 4.3412594 2.359133 2.9227684 2.679293 1.684525 3.1931107
## 6  3.4776227 2.582928 2.4523694 3.150650 0.8458145 2.039209 2.562590 1.5646044
## 7  3.0255380 3.901562 3.8846394 2.804865 2.4677034 2.732506 1.564108 2.8583107
## 8  2.6223166 3.974874 3.0703613 3.537075 3.2808753 3.885354 1.337873 2.6657528
## 9  2.2066414 2.941671 1.9872674 3.072726 2.8132602 3.332154 1.479628 1.6386745
## 10 1.9724691 3.327508 2.3651592 3.170619 3.3540486 3.749919 1.336688 2.1075541
## 11 2.2620205 3.015562 3.5801544 1.465700 2.4641345 1.907385 1.509014 2.3384573
## 12 1.7802459 1.646438 2.7703307 1.104085 3.0257661 2.123919 2.373753 1.7127014
## 13 0.9997501 3.101339 2.5842543 2.652248 3.8966017 3.816411 1.531933 2.2557588
## 14 2.5035802 1.791040 3.2185045 1.063633 2.6036745 1.334581 2.697583 1.9784250
## 15 2.5440543 3.302278 2.4777511 3.189622 2.5986232 3.265009 1.373180 1.9658812
## 16 1.8562643 2.413283 2.4849960 1.900112 2.2528936 2.211639 1.168932 1.3842169
## 17 1.8584622 2.515574 1.7228839 2.755517 2.8868992 3.175926 1.568818 1.3250931
## 18 3.1604737 2.859199 2.1913380 3.305716 1.6670581 2.701145 2.141976 1.5689286
## 19 2.4257652 3.542180 3.7163663 2.152808 2.6175815 2.504150 1.154845 2.6107165
## 20 1.0317737 2.994107 3.3354280 1.326277 3.3411784 2.791355 1.074093 2.3385693
## 21 2.3142859 1.271452 1.8325354 2.059036 2.0853664 1.904024 2.266871 0.5442185
## 22 2.7995495 2.861837 1.3091234 3.704311 3.0390133 3.743838 2.401578 1.6490007
## 23 0.0000000 3.117234 3.2219818 1.921218 4.0634120 3.570506 1.604236 2.5688489
## 24 3.1172337 0.000000 2.0009746 2.643101 2.7110014 2.270069 3.482415 1.3640491
## 25 3.2219818 2.000975 0.0000000 3.762677 3.0179771 3.543420 3.258085 1.3332844
## 26 1.9212182 2.643101 3.7626773 0.000000 3.3465920 2.164427 2.316766 2.5854732
## 27 4.0634120 2.711001 3.0179771 3.346592 0.0000000 1.677023 3.215720 2.0753381
## 28 3.5705064 2.270069 3.5434199 2.164427 1.6770233 0.000000 3.199112 2.2780447
## 29 1.6042363 3.482415 3.2580854 2.316766 3.2157197 3.199112 0.000000 2.4351789
## 30 2.5688489 1.364049 1.3332844 2.585473 2.0753381 2.278045 2.435179 0.0000000

Hierarchical clustering

hc_single <- hclust(dist_matrix, method = "single")
hc_single
## 
## Call:
## hclust(d = dist_matrix, method = "single")
## 
## Cluster method   : single 
## Distance         : euclidean 
## Number of objects: 30

Hierarchical clustering yang akan digunakan ialah metode aglomerasi pautan tunggal (single linkage). Metode ini didasarkan pada jarak minimum. Dimulai dengan dua objek yang dipisahkan dengan jarak paling pendek maka keduanya akan ditempatkan pada cluster pertama, dan seterusnya.

Visualisasi Dendogram dan Hasil Clustering

Dendogram

Dendrogram menggambarkan proses penggabungan antar objek atau cluster berdasarkan tingkat kemiripan. Setiap percabangan menunjukkan dua cluster yang digabung, dengan tinggi cabang mencerminkan jarak antar cluster. Nilai k menunjukkan banyaknya cluster / kelompok yang ingin dibentuk.

fviz_dend(hc_single, k = 4, rect = TRUE, palette = "jco",
main = "Dendrogram Hierarchical Clustering with Single Linkage")
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Hasil Clustering

cluster_hc <- cutree(hc_single, k = 4)
table(cluster_hc)
## cluster_hc
##  1  2  3  4 
## 24  2  3  1

Berdasarkan hasil analisis hierarchical clustering dengan metode single linkage, dendrogram di atas menunjukkan bagaimana 30 produk dikelompokkan berdasarkan kemiripan nilai biaya produksi, rating pelanggan, dan stok saat ini. Pada awal proses penggabungan (bagian bawah dendrogram), beberapa produk bergabung pada tingkat height yang rendah, menandakan bahwa mereka memiliki karakteristik yang sangat mirip satu sama lain. Misalnya, produk-produk seperti nomor 3 & 25 dan 1 & 13 membentuk kelompok kecil terlebih dahulu karena jarak Euclidean antar mereka sangat kecil. Ini berarti ketiga peubah numerik mereka relatif sebanding dan serupa dalam skala nilai.

Seiring meningkatnya height, kelompok-kelompok kecil ini kemudian bergabung menjadi cluster yang lebih besar, menunjukkan tingkat perbedaan yang mulai meningkat. Pada height menengah hingga tinggi, penggabungan antar cluster besar mulai terjadi, menandakan bahwa produk yang bergabung pada tahap ini memiliki perbedaan yang lebih signifikan dalam setidaknya satu dari tiga peubah yang digunakan. Pemotongan dendrogram pada k = 4 menghasilkan empat cluster utama, dengan jumlah anggota yang bervariasi. Cluster 1 berisi 24 produk, Cluster 2 terdiri dari 2 produk, Cluster 3 mencakup 3 produk, dan Cluster 4 hanya 1 produk.

Distribusi ini menunjukkan bahwa sebagian besar produk memiliki kemiripan tinggi dan tergabung dalam satu kelompok besar (Cluster 1), sementara beberapa produk tertentu memiliki karakteristik yang cukup unik sehingga membentuk kelompok kecil atau berdiri sendiri (seperti produk dalam Cluster 4). Dengan demikian, dendrogram ini mengindikasikan bahwa meskipun sebagian besar produk homogen dari segi karakteristik produksinya, terdapat beberapa produk yang menyimpang dan dapat menjadi fokus untuk analisis lebih lanjut.

merge_info <- as.data.frame(hc_single$merge)
colnames(merge_info) <- c("Cluster 1", "Cluster 2")

merge_info$Distance <- hc_single$height
merge_info$Similarity <- round(100 - (merge_info$Distance / max(merge_info$Distance) * 100), 4)
merge_info$Step <- 1:nrow(merge_info)

merge_info <- merge_info[, c("Step", "Cluster 1", "Cluster 2", "Distance", "Similarity")]
merge_info
##    Step Cluster 1 Cluster 2  Distance Similarity
## 1     1        -3       -25 0.2014857    84.1531
## 2     2        -1       -13 0.2617382    79.4142
## 3     3       -21       -30 0.5442185    57.1971
## 4     4        -9       -17 0.5629286    55.7255
## 5     5       -10         4 0.5830982    54.1392
## 6     6        -4       -27 0.6242578    50.9020
## 7     7        -5       -19 0.6453204    49.2454
## 8     8       -15         5 0.6513414    48.7719
## 9     9        -7         7 0.6961291    45.2493
## 10   10        -8         8 0.7582928    40.3601
## 11   11       -11         9 0.7739841    39.1260
## 12   12        -2        10 0.8207274    35.4496
## 13   13        -6       -18 0.8292670    34.7780
## 14   14         6        13 0.8458145    33.4765
## 15   15       -12       -14 0.8950656    29.6029
## 16   16       -22        12 0.9369005    26.3126
## 17   17       -23         2 0.9997501    21.3694
## 18   18        11        16 1.0137388    20.2692
## 19   19       -20        17 1.0317737    18.8508
## 20   20        14        18 1.0451100    17.8019
## 21   21       -26        15 1.0636333    16.3450
## 22   22       -29        19 1.0740932    15.5223
## 23   23       -28        20 1.1450173     9.9441
## 24   24        22        23 1.1548448     9.1712
## 25   25       -16         3 1.1560484     9.0765
## 26   26        24        25 1.1591495     8.8326
## 27   27         1        26 1.1991288     5.6883
## 28   28        21        27 1.2257599     3.5937
## 29   29       -24        28 1.2714522     0.0000

Tabel ini memberikan informasi tentang cluster yang bergabung pada langkah tertentu. Berdasarkan tabel tersebut, dapat dilihat bahwa proses penggabungan produk / cluster dimulai dari jarak / distance yang rendah dan kemiripan / similarity yang tinggi.

Karakteristik dan Evaluasi Clustering

Karakteristik

data_clustered <- data.frame(data, cluster = factor(cluster_hc))
cluster_summary <- data_clustered %>%
group_by(cluster) %>%
summarise(across(where(is.numeric), mean, .names = "{.col}"))
cluster_summary
## # A tibble: 4 × 4
##   cluster Biaya.Produksi.Unit..Rib…¹ Rating.Pelanggan..1.5. Stok.Saat.Ini..Unit.
##   <fct>                        <dbl>                  <dbl>                <dbl>
## 1 1                             43.7                   3.64                 909.
## 2 2                             34.2                   4.9                   96 
## 3 3                             95.4                   4.03                 953 
## 4 4                             84.7                   4.6                   95 
## # ℹ abbreviated name: ¹​Biaya.Produksi.Unit..Ribu.IDR.

Cluster 1 merupakan kelompok terbesar dan paling umum, dengan rata-rata biaya produksi sebesar 43,7 ribu IDR, rating pelanggan 3,64, dan stok 909 unit. Karakteristik ini menggambarkan produk dengan biaya produksi menengah, penilaian pelanggan yang cukup baik, dan ketersediaan stok yang relatif tinggi. Dengan demikian, cluster ini bisa diartikan sebagai produk standar atau arus utama yang memiliki keseimbangan antara biaya, kepuasan, dan ketersediaan barang.

Cluster 2 memiliki rata-rata biaya produksi yang relatif rendah (34,2 ribu IDR) namun dengan rating pelanggan yang sangat tinggi (4,9) dan stok yang rendah (96 unit). Pola ini menunjukkan bahwa produk dalam cluster ini sangat disukai pelanggan, tetapi jumlahnya terbatas di pasaran. Ini bisa mengindikasikan produk unggulan atau premium yang efisien secara biaya namun bernilai tinggi di mata konsumen—berpotensi untuk dikembangkan lebih lanjut atau ditingkatkan produksinya.

Cluster 3 memiliki biaya produksi sangat tinggi (95,4 ribu IDR) dengan rating pelanggan cukup baik (4,03) dan stok sedang (953 unit). Produk dalam kelompok ini dapat diartikan sebagai produk mahal namun tetap diminati, mungkin karena kualitas atau fitur spesifik yang membedakannya. Namun, tingginya biaya produksi bisa menjadi perhatian dari sisi efisiensi dan profitabilitas.

Cluster 4 hanya berisi satu produk dengan biaya produksi 84,7 ribu IDR, rating pelanggan 4,6, dan stok sangat rendah (95 unit). Produk ini menonjol karena berkualitas tinggi (rating tinggi) dan biaya produksi tinggi, tetapi jumlah ketersediaannya sangat terbatas. Hal ini menunjukkan kemungkinan produk eksklusif atau spesialis, yang mungkin diproduksi dalam jumlah kecil untuk segmen pasar tertentu.

Evaluasi

eval_cluster <- function(data_scaled, cluster, dist_matrix) {
sil <- mean(silhouette(cluster, dist_matrix)[, 3])
ch <- intCriteria(traj = as.matrix(data_scaled),
part = cluster, crit = "Calinski_Harabasz")$calinski_harabasz
dunn <- intCriteria(traj = as.matrix(data_scaled),
part = cluster, crit = "Dunn")$dunn
return(data.frame(Silhouette = sil,
Calinski_Harabasz = ch,
Dunn = dunn))
}

eval_cluster(data_scaled, cluster_hc, dist_matrix)
##   Silhouette Calinski_Harabasz      Dunn
## 1  0.1179423          3.848234 0.2898295

Berdasarkan ketiga metrik tersebut, hasil clustering menunjukkan bahwa struktur pengelompokan produk masih lemah, dengan tumpang tindih antar kelompok dan jarak antar cluster yang tidak terlalu jauh.

Visualisasi Clustering

heat_data <- cluster_summary %>%
pivot_longer(-cluster, names_to = "Variabel", values_to = "Rata-Rata")
heat_data
## # A tibble: 12 × 3
##    cluster Variabel                       `Rata-Rata`
##    <fct>   <chr>                                <dbl>
##  1 1       Biaya.Produksi.Unit..Ribu.IDR.       43.7 
##  2 1       Rating.Pelanggan..1.5.                3.64
##  3 1       Stok.Saat.Ini..Unit.                909.  
##  4 2       Biaya.Produksi.Unit..Ribu.IDR.       34.2 
##  5 2       Rating.Pelanggan..1.5.                4.9 
##  6 2       Stok.Saat.Ini..Unit.                 96   
##  7 3       Biaya.Produksi.Unit..Ribu.IDR.       95.4 
##  8 3       Rating.Pelanggan..1.5.                4.03
##  9 3       Stok.Saat.Ini..Unit.                953   
## 10 4       Biaya.Produksi.Unit..Ribu.IDR.       84.7 
## 11 4       Rating.Pelanggan..1.5.                4.6 
## 12 4       Stok.Saat.Ini..Unit.                 95
ggplot(heat_data, aes(x = Variabel, y = `Rata-Rata`, fill = cluster)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_brewer(palette = "Set2") +
labs(title = "Bar Plot Karakteristik Cluster",
x = "Variabel", y = "Rata-rata Nilai") +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

Visualisasi karakteristik clustering dilakukan dengan boxplot saja dikarenakan nilai rata-rata karakteristik cluster masing-masing peubah memiliki skala yang tidak sebanding, sehingga visualisasi berupa heatmap akan memberikan informasi yang ambigu.