Email             :
Instagram     : https://www.instagram.com/naaufald
RPubs            : https://rpubs.com/naaufaldd/
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.



1 Klasifikasi dan Klastering

Meskipun klasifikasi dan klastering keduanya adalah teknik yang digunakan untuk analisis data, mereka memiliki perbedaan yang mendasar dalam tujuan dan pendekatan:

Tujuan: Tujuan klasifikasi adalah untuk memprediksi label atau kategori dari suatu data, sementara tujuan klastering adalah untuk mengelompokkan data menjadi kelompok-kelompok yang homogen. Pendekatan: Dalam klasifikasi, kita memiliki variabel target yang ingin diprediksi, sedangkan dalam klastering, kita tidak memiliki variabel target yang jelas dan kami mencari struktur alami dalam data.

2 Studi Kasus

Dalam studi kasus ini, akan didemonstrasikan bagaimana klasifikasi dan klastering dapat diterapkan pada data pelanggan sebuah perusahaan e-commerce untuk memahami perilaku pembelian mereka dan menyusun strategi pemasaran yang lebih efektif.

2.1 Dataset

Andaikan, kita akan menggunakan data pelanggan e-commerce yang mencakup beberapa fitur seperti usia, jenis kelamin, total pembelian, harga produk, kategori produk yang dibeli, dan frekuensi pembelian.

set.seed(123)

# Membuat data dengan 1000 baris
jumlah_baris <- 1000
pelanggan <- data.frame(
  ID = 1:jumlah_baris,
  Usia = sample(18:70, jumlah_baris, replace = TRUE),
  Jenis_Kelamin = as.factor(sample(c("Pria", "Wanita"), jumlah_baris, replace = TRUE)),
  Total_Pembelian = rnorm(jumlah_baris, mean = 100, sd = 20),
  Kategori_Produk = as.factor(sample(c("A", "B", "C"), jumlah_baris, replace = TRUE)),
  Frekuensi_Pembelian = sample(1:10, jumlah_baris, replace = TRUE),
  Harga = rnorm(jumlah_baris, mean = 50, sd = 10)
)

# Memastikan faktor memiliki level yang sama di seluruh data
levels(pelanggan$Kategori_Produk) <- levels(pelanggan$Kategori_Produk)
levels(pelanggan$Jenis_Kelamin) <- levels(pelanggan$Jenis_Kelamin)

head(pelanggan)
##   ID Usia Jenis_Kelamin Total_Pembelian Kategori_Produk Frekuensi_Pembelian
## 1  1   48          Pria       120.81246               C                   4
## 2  2   32          Pria       109.68199               A                   9
## 3  3   68          Pria        95.10232               B                   6
## 4  4   31        Wanita       118.31984               A                   2
## 5  5   20          Pria       116.01245               B                   1
## 6  6   59          Pria        81.26862               B                   9
##      Harga
## 1 38.16866
## 2 42.19498
## 3 67.47695
## 4 68.37187
## 5 51.94556
## 6 33.79770

2.2 Klasifikasi

Mari kita lihat bagaimana kita dapat memprediksi kategori produk yang akan dibeli oleh pelanggan berdasarkan pada fitur-fitur

Dalam pendekatan klasifikasi, toko ingin mengidentifikasi pelanggan yang mungkin memiliki preferensi tertentu atau potensi untuk melakukan pembelian tertentu di masa depan. Misalnya, mereka ingin memprediksi apakah seorang pelanggan tertentu akan lebih mungkin membeli pakaian pria atau wanita.

Fitur: Informasi tentang pembelian sebelumnya,seperti usia, jenis kelamin, total pembelian, harga produk, dan frekuensi pembelian. Variabel Target: Katergori Produk (pria/wanita). Algoritma: Klasifikasi dapat menggunakan algoritma seperti KNN dan Decision Trees (notes: ada banyak yang model klasifikasi lainnya) untuk membangun model yang dapat memprediksi jenis kelamin berdasarkan pola pembelian sebelumnya.

2.3 KNN

library(class)

# Membagi dataset menjadi data latih dan data uji
set.seed(123) # Tetapkan seed untuk hasil yang dapat direproduksi
proporsi_latih <- 0.7 # Proporsi data latih
indeks_latih <- sample(1:nrow(pelanggan), proporsi_latih * nrow(pelanggan)) # Indeks data latih
data_latih <- pelanggan[indeks_latih, ] # Data latih
data_uji <- pelanggan[-indeks_latih, ] # Data uji

# Klasifikasi menggunakan kNN
k <- 3 # Jumlah tetangga terdekat yang akan digunakan
prediksi <- knn(train = data_latih[, c("Usia", "Total_Pembelian", "Frekuensi_Pembelian", "Harga")],
                 test = data_uji[, c("Usia", "Total_Pembelian", "Frekuensi_Pembelian", "Harga")],
                 cl = data_latih$Kategori_Produk,
                 k = k)

# Evaluasi klasifikasi
akurasi <- mean(prediksi == data_uji$Kategori_Produk) * 100
cat("Akurasi klasifikasi kNN dengan k =", k, "adalah:", akurasi, "%\n")
## Akurasi klasifikasi kNN dengan k = 3 adalah: 39.33333 %

2.4 Model Decision Trees

Decision tree adalah model prediksi yang menggunakan struktur pohon atau hirarki keputusan untuk memetakan kemungkinan hasil dari serangkaian keputusan dan peristiwa. Model ini menggambarkan serangkaian keputusan dan konsekuensi yang mungkin terjadi dari keputusan tersebut dalam bentuk pohon.

Decision Tree merupakan sebuah metode untuk membuat keputusan berdasarkan serangkaian pertanyaan yang terstruktur dalam bentuk pohon keputusan. Setiap simpul pada pohon keputusan mewakili sebuah pertanyaan atau kondisi, dan setiap cabang dari simpul tersebut mewakili jawaban atau aksi yang diambil berdasarkan kondisi. Proses membuat keputusan dimulai dari simpul paling atas (root node) dan bergerak ke bawah pohon sesuai dengan jawaban atau kondisi yang dipilih pada setiap simpul.

# Library untuk split data menggunakan fungsi createDataPartition
library(caret)
# Memisahkan data menjadi data latih dan data uji
set.seed(123)
trainIndex <- createDataPartition(pelanggan$Kategori_Produk, p = 0.7, list = FALSE)
data_train <- pelanggan[trainIndex, ]
data_test <- pelanggan[-trainIndex, ]

# Membangun model klasifikasi dengan Decision Tree
model_klasifikasi <- train(Kategori_Produk ~ Usia + Jenis_Kelamin + Total_Pembelian + Frekuensi_Pembelian + Harga, 
                           data = data_train, 
                           method = "rpart")

# Memprediksi kategori produk pada data uji
prediksi_klasifikasi <- predict(model_klasifikasi, newdata = data_test)

# Menampilkan confusion matrix
confusionMatrix(prediksi_klasifikasi, data_test$Kategori_Produk)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   A   B   C
##          A   0   0   0
##          B  93 113  93
##          C   0   0   0
## 
## Overall Statistics
##                                           
##                Accuracy : 0.3779          
##                  95% CI : (0.3227, 0.4355)
##     No Information Rate : 0.3779          
##     P-Value [Acc > NIR] : 0.5218          
##                                           
##                   Kappa : 0               
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: A Class: B Class: C
## Sensitivity             0.000   1.0000    0.000
## Specificity             1.000   0.0000    1.000
## Pos Pred Value            NaN   0.3779      NaN
## Neg Pred Value          0.689      NaN    0.689
## Prevalence              0.311   0.3779    0.311
## Detection Rate          0.000   0.3779    0.000
## Detection Prevalence    0.000   1.0000    0.000
## Balanced Accuracy       0.500   0.5000    0.500

3 Klastering

Dalam pendekatan klastering, toko ingin mengelompokkan pelanggannya ke dalam kelompok berdasarkan pola pembelian yang serupa. Ini membantu mereka memahami segmentasi pasar dan menyesuaikan strategi pemasaran dan layanan untuk setiap kelompok.

Fitur: Data transaksi pelanggan seperti seperti usia, total pembelian, frekuensi pembelian, dan harga. Algoritma: Salah satu pendekatan yang bisa digunakan adalah K-Means Clustering. Dengan algoritma ini, toko dapat mengelompokkan pelanggan ke dalam kelompok-kelompok yang memiliki pola pembelian yang mirip. Misalnya, satu kelompok mungkin terdiri dari pelanggan yang sering membeli pakaian formal, sementara kelompok lainnya mungkin terdiri dari pelanggan yang lebih suka pakaian kasual.

Dalam klasifikasi, tujuannya adalah untuk membuat prediksi tentang kategori atau kelas tertentu berdasarkan fitur yang diberikan, sementara dalam klastering, tujuannya adalah untuk mengelompokkan data tanpa informasi target yang jelas. Dalam kasus ini, klasifikasi membantu toko untuk memprediksi preferensi pembelian individu, sementara klastering membantu mereka untuk memahami segmentasi pasar dan pola pembelian yang ada di antara kelompok pelanggan yang berbeda.

3.0.1 Algoritma Kmeans

Sebelum menerapkan algoritma dalam membentuk kluster, langkah pertama yang penting dilakukan adalah melakukan pemilihan jumlah kluster yang optimal. Berikut ini diperlihatkan pemilihan jumlah kluster menggunakan metode elbow, silhouette, dan gap statistic.

Pastikan untuk menginstal paket-paket tersebut jika belum terpasang. Sekarang, mari kita tambahkan bagian kode untuk masing-masing metode.

# Memuat paket-paket yang diperlukan
library(ggplot2)
library(cluster)
library(factoextra)
library(NbClust)

# Load necessary libraries
library(cluster)

# Load data
# Misalkan Anda memiliki data dalam bentuk dataframe 'customers'
# Anda harus mengganti path sesuai dengan lokasi penyimpanan data Anda
# customers <- read.csv("lokasi_file/customers.csv")

# Contoh dataframe customers
customers <- data.frame(
  usia = c(25, 35, 45, 20, 30, 50, 65, 40, 55, 60),
  jenis_kelamin = c("Pria", "Pria", "Wanita", "Wanita", "Pria", "Pria", "Wanita", "Wanita", "Pria", "Wanita"),
  total_pembelian = c(100, 200, 150, 80, 300, 400, 200, 250, 350, 500),
  harga_produk = c(50, 60, 70, 40, 55, 65, 75, 45, 70, 80),
  kategori_produk = c("A", "B", "A", "C", "B", "C", "A", "B", "C", "A"),
  frekuensi_pembelian = c(2, 3, 2, 4, 1, 2, 3, 1, 2, 3)
)

# Print data
print(customers)
##    usia jenis_kelamin total_pembelian harga_produk kategori_produk
## 1    25          Pria             100           50               A
## 2    35          Pria             200           60               B
## 3    45        Wanita             150           70               A
## 4    20        Wanita              80           40               C
## 5    30          Pria             300           55               B
## 6    50          Pria             400           65               C
## 7    65        Wanita             200           75               A
## 8    40        Wanita             250           45               B
## 9    55          Pria             350           70               C
## 10   60        Wanita             500           80               A
##    frekuensi_pembelian
## 1                    2
## 2                    3
## 3                    2
## 4                    4
## 5                    1
## 6                    2
## 7                    3
## 8                    1
## 9                    2
## 10                   3
# Preprocess data
# Untuk mempersiapkan data untuk clustering, Anda mungkin perlu melakukan normalisasi atau standarisasi fitur-fitur numerik

# Contoh: standarisasi fitur-fitur numerik
numerik_features <- customers[, c("usia", "total_pembelian", "harga_produk", "frekuensi_pembelian")]
scaled_features <- scale(numerik_features)

# Gabungkan kembali data yang telah discaling dengan fitur-fitur kategorikal
preprocessed_data <- cbind(customers[, c("jenis_kelamin", "kategori_produk")], scaled_features)

# Print data setelah preprocessing
print(preprocessed_data)
##    jenis_kelamin kategori_produk       usia total_pembelian harga_produk
## 1           Pria               A -1.1560120      -1.1340768  -0.82759027
## 2           Pria               B -0.4954337      -0.3928501  -0.07523548
## 3         Wanita               A  0.1651446      -0.7634635   0.67711931
## 4         Wanita               C -1.4863011      -1.2823222  -1.57994507
## 5           Pria               B -0.8257228       0.3483765  -0.45141288
## 6           Pria               C  0.4954337       1.0896032   0.30094192
## 7         Wanita               A  1.4863011      -0.3928501   1.05329671
## 8         Wanita               B -0.1651446      -0.0222368  -1.20376767
## 9           Pria               C  0.8257228       0.7189899   0.67711931
## 10        Wanita               A  1.1560120       1.8308299   1.42947411
##    frekuensi_pembelian
## 1           -0.3162278
## 2            0.7378648
## 3           -0.3162278
## 4            1.7919573
## 5           -1.3703203
## 6           -0.3162278
## 7            0.7378648
## 8           -1.3703203
## 9           -0.3162278
## 10           0.7378648

3.0.1.1 Metode Elbow

Metode Elbow adalah sebuah algoritma dalam analisis klaster (clustering) yang digunakan untuk menentukan jumlah klaster yang optimal dalam suatu kumpulan data. Pendekatan ini didasarkan pada mencari titik di mana penambahan jumlah klaster tidak memberikan peningkatan signifikan dalam pengukuran yang digunakan untuk mengevaluasi kualitas klaster.

library(FactoMineR)
# Melakukan PCA
pca_result <- PCA(scaled_features, graph = FALSE)

# Plot varian eksplanasi
plot(pca_result$eig)

# Melihat varian kumulatif
cumulative_variance <- cumsum(pca_result$var$cor)
plot(cumulative_variance, xlab = "Komponen Utama", ylab = "Variansi Kumulatif", type = "b")

# Memilih jumlah komponen utama berdasarkan varian kumulatif yang diinginkan
num_components <- which.max(cumulative_variance > 90)  # Misalnya, kita ingin mempertahankan 90% varian

# Melakukan reduksi dimensi berdasarkan jumlah komponen utama yang dipilih
reduced_features <- pca_result$ind$coord[, 1:num_components]
reduced_features
##          1          2          3          4          5          6          7 
## -1.8776870 -0.6023907  0.1182056 -2.7048541 -0.5791941  1.1179451  1.3734546 
##          8          9         10 
## -0.8360136  1.3605207  2.6300135

3.0.1.2 Metode Silhouette (Tugas)

Metode Silhouette adalah algoritma evaluasi klaster yang digunakan untuk mengukur seberapa baik suatu objek telah dikelompokkan dalam klasternya sendiri dibandingkan dengan klaster lain. Ini memberikan pengukuran numerik tentang seberapa jauh setiap objek dalam klaster tertentu dari objek di klaster lain. Semakin tinggi nilai Silhouette, semakin baik klaster tersebut dianggap berkualitas. Algoritma metode Silhouette membantu dalam mengevaluasi kualitas klaster dengan memberikan pengukuran numerik tentang seberapa baik setiap objek dikelompokkan dalam klasternya sendiri dibandingkan dengan klaster lainnya.

fitur_clustering <- pelanggan[, c("Usia", "Total_Pembelian", "Frekuensi_Pembelian", "Harga")]

# Menstandarisasi data
fitur_scaled <- scale(fitur_clustering)

# Melakukan clustering dengan k-means
kmeans_result <- kmeans(fitur_scaled, centers = 3, nstart = 25)

# Mengevaluasi kualitas clustering dengan silhouette
sil <- silhouette(kmeans_result$cluster, dist(fitur_scaled))

# Visualisasi hasil clustering
fviz_cluster(kmeans_result, data = fitur_scaled, geom = "point", stand = FALSE)

3.0.1.3 Metode Gap Statistic

Metode Gap Statistics adalah algoritma evaluasi klaster yang digunakan untuk menentukan jumlah klaster yang optimal dalam sebuah kumpulan data.

Metode ini membandingkan inersia (inertia) dari klaster aktual dengan inersia dari klaster-klasternya yang dihasilkan dari data yang diacak secara acak (disebut klaster acak).

Tujuannya adalah untuk menemukan jumlah klaster yang memberikan penurunan inersia yang signifikan dibandingkan dengan klaster acak, menunjukkan bahwa struktur yang teramati dalam data sebenarnya bukan hanya hasil dari kebetulan.

fitur_clustering <- pelanggan[, c("Usia", "Total_Pembelian", "Frekuensi_Pembelian", "Harga")]

# Menstandarisasi data
fitur_scaled <- scale(fitur_clustering)

# Menghitung gap statistics untuk mengevaluasi jumlah klaster yang optimal
gap_stat <- clusGap(fitur_scaled, FUN = kmeans, nstart = 25, K.max = 10, B = 50)

# Memplot gap statistics
plot(gap_stat, main = "Gap Statistics")

# Menampilkan hasil
print(gap_stat)
## Clustering Gap statistic ["clusGap"] from call:
## clusGap(x = fitur_scaled, FUNcluster = kmeans, K.max = 10, B = 50, nstart = 25)
## B=50 simulated reference sets, k = 1..10; spaceH0="scaledPCA"
##  --> Number of clusters (method 'firstSEmax', SE.factor=1): 1
##           logW   E.logW       gap      SE.sim
##  [1,] 6.505953 7.035305 0.5293520 0.007585939
##  [2,] 6.386097 6.894408 0.5083109 0.007931116
##  [3,] 6.302928 6.796879 0.4939506 0.007713020
##  [4,] 6.230170 6.722249 0.4920792 0.008234898
##  [5,] 6.174885 6.663029 0.4881445 0.008373402
##  [6,] 6.122368 6.610274 0.4879058 0.008151819
##  [7,] 6.079161 6.565884 0.4867225 0.008586480
##  [8,] 6.039599 6.524245 0.4846450 0.008412414
##  [9,] 6.011311 6.488727 0.4774168 0.008886964
## [10,] 5.984051 6.455976 0.4719250 0.008780317