1 METODE PENELITIAN

Pada bab ini, kita menggunakan dua packages yaitu cluster dan factoextra untuk perhitungan dan visualisasi cluster-nya. Kemudian, dilanjutkan memulai menyiapkan data yang digunakan untuk Clustering Analysis.

1.1 Packages atau Library yang Dibutuhkan

Berikut merupakan dua packages utama yang dibutuhkan dalam penyelesaian laporan kali ini.

library(cluster)
library(factoextra)

Untuk detail lengkap dari dua packages diatas, sebagai berikut:

  • cluster untuk perhitungan atau komputasi algoritma clustering
  • factoextra untuk visualisasi hasil dari clustering

Packages factoextra berisi banyak functions untuk kebutuhan analisis cluster dan visualisasinya, antara lain:

Tabel 1. Functions dari Packages factoextra
Functions Deskripsi
dist(fviz_dist, get_dist) Komputasi Jarak Matriks dan Visualisasi
get_clust_tendency Menilai Banyaknya Clustering
fviz_nbclust(fviz_gap_stat) Menentukan Jumlah Optimal Cluster
fviz_dend Meningkatkan Visualisasi Dendogram
fviz_cluster Memvisualisasikan Hasil Clustering
fviz_mclust Memvisualisasikan Hasil Model Clustering
fviz_silhouette Memvisualisasikan Bentuk Silhouette dari Clustering
hcut Menghitung Clustering Hirarki dan Memotong Jumlah Cluster
hkmeans Clustering untuk K-Means Hirarki
eclust Memvisualisasikan Penyebaran Cluster

2 Data

2.1 Persiapan Data

Data merupakan data primer produk Category Moto Exterior Accessories, cutoff tarikan data yaitu 01 Maret 2022.

library(readxl)
dataPKL <- read_excel("D:/MBKM/Laporan PKL (LAZADA INDONESIA)/Data PKL (Moto Exterior Accessories)/Data PKL - Analisis Cluster.xlsx")

Berikut merupakan data yang akan digunakan dalam laporan praktik kerja lapang ini.

library(FSA)
library(knitr)
library(dplyr)
headtail (dataPKL) %>%
  kable(digits = 6,
        align = "c",
        col.names = c("Region", "Revenue (GMV dalam $)", "Average Selling Price (ASP dalam $)", "Item Page View Unique Visit (IPV UV)", "Average of Conversion Rate (UV CR by %)", "Stock Availability"),
        caption = "**Tabel 2. Data Produk *Category Moto Exterior Accessories* Lazada Indonesia per *Region***")
Tabel 2. Data Produk Category Moto Exterior Accessories Lazada Indonesia per Region
Region Revenue (GMV dalam $) Average Selling Price (ASP dalam $) Item Page View Unique Visit (IPV UV) Average of Conversion Rate (UV CR by %) Stock Availability
1 Bali 437.7003 7.895685 15034 0.041514 1384
2 Banten 10790.0620 2.332879 154884 0.160735 25596624
3 Daerah Istimewa Yogyakarta 43767.6846 11.788060 156738 0.085087 438426
18 Sumatera Barat 30.8884 30.888404 43 0.023256 0
19 Sumatera Selatan 13316.2715 7.627544 85361 0.084697 321571
20 Sumatera Utara 8603.2989 3.402987 81909 0.074093 16193478

Untuk melakukan analisis cluster dengan R, data harus disiapkan dengan ketentuan sebagai berikut:

  • Baris merupakan observasi, dan kolom merupakan variabel (field).
  • Setiap data yang missing atau hilang harus dihilangkan atau diperkirakan.
  • Data yang digunakan harus telah distandarisasi (dengan: di-scaled) agar data memiliki satuan yang seragam. Oleh karena itu, perlu dilakukan proses standardisasi data terlebih dahulu ke bentuk z-score.
# Memanggil kembali Dataset produk Category Moto Exterior Accessories, kemudian assign dataset ke variabel df dari variabel dataPKL sebelumnya
df <- dataPKL
  1. Untuk menghilangkan missing values yang mungkin ada dalam dataset yang dipakai, dengan menggunakan perintah berikut:
df <- na.omit(object = df)
  1. Melakukan standarisasi data atau scaling agar data memiliki satuan yang seragam. Dilakukan proses standardisasi data terlebih dahulu ke bentuk z-score dengan fungsi scale(), berikut perintahnya:
# Standarisasi data pada kolom ke-2 sampai kolom ke-6
df <- scale(df[,2:6])
# Menampilkan 3 data teratas dan terbawah dari Data Pengguna Internet yang telah distandarisasi ke bentuk Z-Score
headtail(df) %>%
  kable(digits = 5,
        align = "c",
        col.names = c("Revenue", "ASP", "IPV UV", "CR", "Stock"),
        caption = "**Tabel 3. Data Produk *Category Moto Exterior Accessories* Lazada Indonesia per *Region* yang Telah Distandarisasi ke dalam Bentuk *Z-Score***")
Tabel 3. Data Produk Category Moto Exterior Accessories Lazada Indonesia per Region yang Telah Distandarisasi ke dalam Bentuk Z-Score
Revenue ASP IPV UV CR Stock
[1,] -0.37925 -0.22453 -0.38145 -0.63805 -0.25670
[2,] -0.34610 -0.96995 -0.32250 0.23455 -0.25578
[3,] -0.24051 0.29705 -0.32171 -0.31913 -0.25668
[18,] -0.38056 2.85651 -0.38777 -0.77168 -0.25670
[19,] -0.33802 -0.26046 -0.35180 -0.32198 -0.25669
[20,] -0.35311 -0.82655 -0.35326 -0.39960 -0.25612

Proses yang terjadi dalam fungsi scale() adalah menghitung rata-rata (mean) dan standar deviasi dari seluruh vektor yaitu dataset produk Category Moto Exterior Accessories atau variabel df, lalu menskalakan setiap elemen dengan nilai-nilai tersebut dengan mengurangi mean dan membaginya dengan sd.

\[ z = \frac{x - \bar{X}}\sigma \]

Dimana:

  • \(z\) : Nilai data setelah distandarisasi
  • \(x\) : Nilai data asli
  • \(\bar{X}\) : Nilai rata-rata keseluruhan data
  • \(\sigma\) : Simpangan baku

Berikut contoh prosesnya:

# Scaling secara manual kolom GMV
scl <- (dataPKL$GMV - mean(dataPKL$GMV)) / sd(dataPKL$GMV)
head(scl, 5)
[1] -0.3792542 -0.3461050 -0.2405075  3.8975872 -0.3806281

3 Menentukan Ukuran Kemiripan Antar Data atau Objek

3.1 Definisi

Dalam analisis cluster diperlukan beberapa ukuran untuk mengetahui seberapa mirip objek-objek yang akan dikelompokan ke dalam cluster yang sama. Untuk penelitian kali ini digunakan ukuran jarak untuk menentukan kemiripan antar data.

3.1.1 Ukuran Jarak

Ada dua metode klasik yang digunakan mengukur jarak yaitu Euclidean dan Manhattan distances, yang berumus seperti berikut:

  1. Euclidean Distance

\[ d_{ij} = \sqrt{\sum^{p}_{k=1}(x_{ik} - y_{jk})^2} \]

  1. Manhattan Distance

\[ d_{ij}= {\sum^{p}_{k=1}{|(x_{ik} - y_{jk})}|} \] Dimana, \(x\) dan \(y\) adalah dua vektor dengan panjang \(n\).

3.2 Perhitungan Jarak Matrix

Untuk percobaan perhitungan kali ini menggunakan dataset Data Produk Category Moto Exterior Accessories Lazada Indonesia per Region . Data yang diambil akan di-subset atau hanya menggunakan 15 baris acak yang diambil dari 20 baris yang ada. Perintah subset dilakukan dengan fungsi sample(). Selanjutnya, dilakukan standardized data yang diambil dengan fungsi scale().

set.seed(123)

ss <- sample(1:20, 15)
df <-dataPKL[ss, ]
df.scaled <- scale(df[,2:6])

print(df.scaled)
             GMV        ASP     IPV_UV          CR      Stock
 [1,] -0.3347284  1.1267285 -0.3398382 -0.93846029 -0.2944481
 [2,] -0.2965974 -0.3195891 -0.3075269 -0.04489488 -0.2944381
 [3,] -0.3304643 -0.1418262 -0.3326819 -0.16291137 -0.2944474
 [4,] -0.2090102  0.1763876 -0.2801795 -0.03907059 -0.2944345
 [5,] -0.3348421  1.1239572 -0.3402202 -0.82796009 -0.2944481
 [6,] -0.3038635 -0.9507683 -0.2808899  1.09057087 -0.2936502
 [7,]  0.6112243 -0.5493752  0.7392172  0.52785410  0.2470200
 [8,] -0.3325065  0.4860723 -0.3383692 -0.97805671 -0.2944481
 [9,] -0.3348740 -0.8852312 -0.3401451 -1.11231465 -0.2944481
[10,]  3.5080499 -0.6044661  3.4757479  0.48968811  3.5794784
[11,] -0.3348101  2.4533471 -0.3402156 -0.96238942 -0.2944481
[12,] -0.3337309  0.6680655 -0.3401202  2.72106479 -0.2944481
[13,] -0.3101533 -0.8232002 -0.3088495 -0.20325201 -0.2939433
[14,] -0.3348881 -1.0043968 -0.3402286  0.34954128 -0.2944481
[15,] -0.3288056 -0.7557051 -0.3257003  0.09059087 -0.2944478
attr(,"scaled:center")
         GMV          ASP       IPV_UV           CR        Stock 
1.164342e+05 1.030843e+01 8.880109e+05 8.770358e-02 9.445613e+09 
attr(,"scaled:scale")
         GMV          ASP       IPV_UV           CR        Stock 
3.476696e+05 8.388530e+00 2.610015e+06 6.696642e-02 3.207904e+10 

Dimana:

  • set.seed(123) : Fungsi yang digunakan untuk menentukan seed/Random Number Generator (RNG) agar data/keacakan sesuatu dapat diatur sehingga antara percobaan pertema dan seterusnya menggunakan data acak yang sama.
  • dataPKL[ss, ] : Semua baris di dalam dataset Region mengikuti kondisi yang sesuai pada variabel ss, kecuali kolom/field-nya.
  • scale(df[,2:5]) : Fungsi scale() akan menghitung mean dan standar deviasi dari seluruh variabel df, lalu menskalakan setiap elemen dengan nilai-nilai hasil tersebut yaitu mengurangi dengan mean dan membaginya dengan sd. Sebagai contoh perhitungan manualnya di bawah ini.
x <- df$GMV            # Mengambil semua baris pada kolom GMV
(x - mean(x)) / sd(x) # Rumus manual fungsi scale()
 [1] -0.3347284 -0.2965974 -0.3304643 -0.2090102 -0.3348421 -0.3038635
 [7]  0.6112243 -0.3325065 -0.3348740  3.5080499 -0.3348101 -0.3337309
[13] -0.3101533 -0.3348881 -0.3288056

3.2.1 Menghitung Jarak Euclidean

Untuk menghitungnya, kita dapat menggunakan fungsi dist().

  • dist() : Fungsi dari paket stats. Hanya menerima tipe data numerik sebagai input-an.
dist.eucl <- dist(df.scaled, method = "euclidean")

Dari argumen method juga dapat menerima metode lain, diantaranya seperti: “euclidean”, “maximum”, “manhattan”, “canberra”, “binray”, “minkowski”.

Untuk memudahkan dalam melihat jarak yang dihasilkan oleh fungsi dist(), kita bisa format ulang vektor jaraknya ke bentuk matriks menggunakan fungsi as.matrix().

# Menampilkan matriks 5x5 dari perhitungan jarak Euclidean
round(as.matrix(dist.eucl)[1:5, 1:5], 1)
    1   2   3   4   5
1 0.0 1.7 1.5 1.3 0.1
2 1.7 0.0 0.2 0.5 1.6
3 1.5 0.2 0.0 0.4 1.4
4 1.3 0.5 0.4 0.0 1.2
5 0.1 1.6 1.4 1.2 0.0

Hasil matriks diatas, nilai merepresentasikan jarak antar objek. Nilai-nilai pada diagonal matriks mewakili jarak antara objek dan dirinya sendiri (yang bernilai nol: 0.0, 0.0, 0.0).

Dimana:

  • round(..., 1) : Fungsi ini membulatkan nilai dengan menetapkan satu bilangan setelah koma.
  • as.matrix() : Fungsi untuk mengkonversi ke bentuk matriks.
  • (dist.eucl)[1:5, 1:5] : Mengambil baris 1 sampai 5 dan kolom 1 sampai 5 dari variabel dist.eucl.

3.2.2 Visualisasi Jarak Matrix

Untuk memvisualisasikan matrix jarak adalah dengan menggunakan fungsi fviz_dist() dari packages factoextra.

library(factoextra)

fviz_dist(dist.eucl)

Dimana untuk heatmap diatas:

  • Merah (Warna Orange Tua) yaitu tingkat kesamaan yang tinggi.
  • Biru yaitu tingkat kesamaan yang rendah.

Tingkat warna sebanding dengan nilai ketidaksamaan antara hasil pengamatan: Merah jika \(dist(x_i,x_j) = 0\) dan Biru sesuai dengan nilai tertinggi jarak euclidean yang dihitung (lihat bagian legend value). Objek yang termasuk dalam cluster yang sama ditampilkan secara berurutan.

4 Hasil Dan Pembahasan

4.1 Packages atau Library yang Digunakan

library(cluster)        # Perhitungan atau komputasi algoritma clustering
library(factoextra)     # Visualisasi hasil dari clustering
library(readxl)         # Import dataset dari file excel
library(FSA)            # Head & Tail
library(knitr)          # Mencetak tabel
library(dplyr)          # Data Processing

4.2 Persiapan Data

Berikut merupakan tahap persiapan data untuk melakukan analisis cluster.

library(readxl)
dataPKL <- read_excel("D:/MBKM/Laporan PKL (LAZADA INDONESIA)/Data PKL (Moto Exterior Accessories)/Data PKL - Analisis Cluster.xlsx")
df <- dataPKL
df <- na.omit(object = df)
df <- scale(df[ ,2:6])
headtail(df) %>%
  kable(digits = 4,
        align = "c",
        col.names = c("Revenue", "ASP", "IPV UV", "CR", "Stock"),
        caption = "**Tabel 4. Data Produk *Category Moto Exterior Accessories* Lazada Indonesia per *Region* yang Telah Distandarisasi ke dalam Bentuk *Z-Score***")
Tabel 4. Data Produk Category Moto Exterior Accessories Lazada Indonesia per Region yang Telah Distandarisasi ke dalam Bentuk Z-Score
Revenue ASP IPV UV CR Stock
[1,] -0.3793 -0.2245 -0.3815 -0.6380 -0.2567
[2,] -0.3461 -0.9699 -0.3225 0.2346 -0.2558
[3,] -0.2405 0.2971 -0.3217 -0.3191 -0.2567
[18,] -0.3806 2.8565 -0.3878 -0.7717 -0.2567
[19,] -0.3380 -0.2605 -0.3518 -0.3220 -0.2567
[20,] -0.3531 -0.8266 -0.3533 -0.3996 -0.2561

4.3 K-Means Clustering

K-Means adalah teknik pengelompokan atau clustering yang membagi kumpulan data menjadi sekumpulan k grup, dimana k adalah jumlah grup yang sudah ditentukan sebelumnya.

4.3.1 Menentukan Jumlah Cluster yang Optimal

Untuk menentukan jumlah cluster yang optimal dengan menggunakan fungsi fviz_nbclust().

fviz_nbclust(x = df, FUNcluster = kmeans, method = "wss", k.max = 15) + labs(subtitle = "Elbow Method")

fviz_nbclust(x = df, FUNcluster = kmeans, method = "silhouette", k.max = 15) + labs(subtitle = "Silhouette Method")

fviz_nbclust(x = df, FUNcluster = kmeans, method = "gap_stat", k.max = 15) + labs(subtitle = "Statistik Kesenjangan (Gap Statistic)")

Berdasarkan visualisasi ketiga metode di atas, jumlah cluster paling optimum yaitu k = 4 dan k = 5 dari metode Elbow (WSS) dan Silhouette. Maka, proses selanjutnya akan dibandingkan cluster mana yang akan dipakai dengan nilai between sum of square dan total sum of square. Jumlah cluster tidak bergantung penuh pada Teknik-teknik penentuan k-optimal. Jumlah cluster juga dapat kita tentukan sendiri sesuai dengan kebutuhan.

Dimana penjelasan code diatas yaitu:

  • fviz_nbclust() : Fungsi yang menentukan dan memvisualisasikan jumlah cluster yang optimal.
  • x = df : Variabel x untuk memanggil dataframe df.
  • FUNcluster = kmeans : Parameter partisi atau yang berfungsi untuk membagi cluster
  • method = "wss" : Metode yang digunakan untuk memperkirakan jumlah cluster dapat juga menggunakan "silhouette" atau "gap_stat".

4.3.2 Menghitung dan Visualisasi K-Means Clustering

Analisis cluster dapat dilakukan dengan fungsi kmeans() dan menggunakan data yang telah distandardisasi.

4.3.2.1 k = 4

set.seed(123)

km.resultk4 <- kmeans(x = df, centers = 4, nstart = 25)

str(km.resultk4)        #Menampilkan struktur variabel km.result
List of 9
 $ cluster     : int [1:20] 2 2 2 3 2 2 2 2 4 1 ...
 $ centers     : num [1:4, 1:5] -0.38 -0.103 3.898 -0.38 1.557 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "1" "2" "3" "4"
  .. ..$ : chr [1:5] "GMV" "ASP" "IPV_UV" "CR" ...
 $ totss       : num 95
 $ withinss    : num [1:4] 2.6 9.09 0 3.18
 $ tot.withinss: num 14.9
 $ betweenss   : num 80.1
 $ size        : int [1:4] 4 12 1 3
 $ iter        : int 3
 $ ifault      : int 0
 - attr(*, "class")= chr "kmeans"

km.resultk4$cluster     #Menampilkan hasil K-Means Cluster dari 34 Provinsi yang menjadi 3 Cluster
 [1] 2 2 2 3 2 2 2 2 4 1 1 2 4 2 1 4 2 1 2 2

fviz_cluster(object = km.resultk4, data = df, palette = "viridis", ggtheme = theme_gray())

round((km.resultk4$betweenss/km.resultk4$totss)*100,1)
[1] 84.4

4.3.2.2 k = 5

set.seed(123)

km.resultk5 <- kmeans(x = df, centers = 5, nstart = 25)

str(km.resultk5)        #Menampilkan struktur variabel km.result
List of 9
 $ cluster     : int [1:20] 3 3 3 5 3 2 2 3 4 1 ...
 $ centers     : num [1:5, 1:5] -0.38 0.881 -0.3 -0.38 3.898 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. ..$ : chr [1:5] "GMV" "ASP" "IPV_UV" "CR" ...
 $ totss       : num 95
 $ withinss    : num [1:5] 2.598 0.386 3.032 3.178 0
 $ tot.withinss: num 9.19
 $ betweenss   : num 85.8
 $ size        : int [1:5] 4 2 10 3 1
 $ iter        : int 3
 $ ifault      : int 0
 - attr(*, "class")= chr "kmeans"

km.resultk5$cluster     #Menampilkan hasil K-Means Cluster dari 34 Provinsi yang menjadi 3 Cluster
 [1] 3 3 3 5 3 2 2 3 4 1 1 3 4 3 1 4 3 1 3 3

fviz_cluster(object = km.resultk5, data = df, palette = "viridis", ggtheme = theme_gray())

round((km.resultk5$betweenss/km.resultk5$totss)*100,1)
[1] 90.3

Dimana penjelasan code diatas yaitu:

  • kmeans() : Proses Clustering pada data matriks dengan perhitungan K-Means.
  • x = df : Variabel x untuk memanggil dataframe df.
  • centers = 4 atau 5 : Jumlah k atau cluster yang didapat atau diinginkan.
  • nstart = 25 : Jumlah random sets yang dipilih (berlaku hanya jika parameter center berisi angka)
  • fviz_cluster() : Fungsi untuk memvisualisasikan hasil clustering.
  • object = km.result : Objek yang berisi hasil partisi dari fungsi kmeans().
  • data = df : df adalah data yang sudah digunakan untuk clustering. Ini hanya digunakan bila objeknya berbentuk class yang terlihat seperti di akhir baris dari kode str(km.result) diatas.
  • ggtheme = theme_gray() : Tema yang disediakan packages ggplot2. Terdapat beberapa pilihan seperti theme_minimal(), theme_classic(), dan lain-lain.

4.3.3 Mengembalikan Nilai Centroid

Nilai mean/centroid yang termuat masih dalam nilai yang distandardisasi, maka nilainya perlu dikembalikan ke nilai awal untuk mengidentifikasi karakteristik sebenarnya dari tiap cluster.

nilai.centroid <- dataPKL %>%
  mutate(Cluster = km.resultk5$cluster) %>%
  group_by(Cluster) %>%
  summarise(Mean_GMV = mean(GMV), Mean_ASP = mean(ASP), Mean_IPVUV = mean(IPV_UV), Mean_CR = mean(CR), Mean_Stock = mean(Stock))
  • Untuk mempermudah melihat karakteristik tiap cluster dari nilai centroid akan dibentuk Tabel berikut:
nilai.centroid %>%
 kable(digits = 6,
        align = "c",
        col.names = c("Cluster", "Mean_GMV", "Mean_ASP", "Mean_IPVUV", "Mean_CR", "Mean_Stock"),
        caption = "**Tabel 5. Nilai Centroid Tiap Cluster**")
Tabel 5. Nilai Centroid Tiap Cluster
Cluster Mean_GMV Mean_ASP Mean_IPVUV Mean_CR Mean_Stock
1 235.4167 21.192766 1491.0000 0.025645 291
2 394010.7787 6.470760 3365306.5000 0.122818 9234299007
3 25184.2291 5.689610 170062.4000 0.085852 18456759
4 220.1754 10.526238 152.6667 0.415516 633
5 1336076.3491 5.237845 9959766.0000 0.120496 124271838136

4.3.4 Pengelompokkan Objek ke dalam Cluster

Pengelompokkan objek ke dalam cluster yang terbentuk dapat dilihat dari code berikut:

final.kmeans <- dataPKL %>%
  mutate(Cluster = km.resultk5$cluster) %>%
  select(`Region`, Cluster) %>%
  arrange(Cluster)
  • Untuk mempermudah pengelompokkan objek ke dalam cluster dibuat Tabel berikut:
final.kmeans %>%
  kable(digits = 2,
        align = "c",
        col.names = c("Region", "Cluster"),
        caption = "**Tabel 6. Hasil Pengelompokkan Objek ke dalam Cluster**")
Tabel 6. Hasil Pengelompokkan Objek ke dalam Cluster
Region Cluster
Kalimantan Utara 1
Kepulauan Riau 1
Sulawesi Barat 1
Sumatera Barat 1
Jawa Barat 2
Jawa Tengah 2
Bali 3
Banten 3
Daerah Istimewa Yogyakarta 3
Jambi 3
Jawa Timur 3
Lampung 3
Riau 3
Sulawesi Utara 3
Sumatera Selatan 3
Sumatera Utara 3
Kalimantan Tengah 4
Nusa Tenggara Barat 4
Sulawesi Selatan 4
JABODETABEK 5

4.4 Hasil Akhir K-Means Clustering

  • Untuk mempermudah dalam menginterpretasikan hasil K-Means Clustering akan dibuat Tabel berikut:
# Memanggil & menampilkan hasil clustering Tabel 6. yang dikelompokkan per Cluster, kemudian menggabungkannya dengan Tabel 5. Nilai Centroid untuk mempermudah interpretasi
tabelfinal.kmeansregion <- read_excel("D:/MBKM/Laporan PKL (LAZADA INDONESIA)/Data PKL (Moto Exterior Accessories)/Tabel 7. Hasil Clustering Region.xlsx")
tabelFINAL <- as.data.frame(c(nilai.centroid, tabelfinal.kmeansregion[,2]))
tabelFINAL %>%
kable(digits = 7,
        align = "c",
        col.names = c("Cluster", "Mean_GMV", "Mean_ASP", "Mean_IPVUV", "Mean_CR", "Mean_Stock", "Region"),
        caption = "**Tabel 7. Nilai Centroid & Hasil Pengelompokkan Region Tiap Cluster**")
Tabel 7. Nilai Centroid & Hasil Pengelompokkan Region Tiap Cluster
Cluster Mean_GMV Mean_ASP Mean_IPVUV Mean_CR Mean_Stock Region
1 235.4167 21.192766 1491.0000 0.0256447 291 Kalimantan Utara, Kepulauan Riau, Sulawesi Barat, & Sumatera Barat
2 394010.7787 6.470760 3365306.5000 0.1228178 9234299007 Jawa Barat dan Jawa Tengah
3 25184.2291 5.689610 170062.4000 0.0858517 18456759 Bali, Banten, Daerah Istimewa Yogyakarta, Jambi, Jawa Timur, Lampung, Riau, Sulawesi Utara, Sumatera Selatan, & Sumatera Utara
4 220.1754 10.526238 152.6667 0.4155159 633 Kalimantan Tengah, Nusa Tenggara Barat, dan Sulawesi Selatan
5 1336076.3490 5.237845 9959766.0000 0.1204962 124271838136 JABODETADEK