Identitas Praktikum

Komponen Keterangan
Mata kuliah Data Mining
Pertemuan 03
Topik langkah-langkah penting dalam mempersiapkan data
Perangkat lunak R dan RStudio

Capaian Praktikum

Setelah menyelesaikan praktikum, mahasiswa mampu:

  • menjelaskan definisi data mining dan posisinya dalam proses Knowledge Discovery in Databases (KDD);
  • membedakan tugas data mining yang bersifat deskriptif dan prediktif;
  • melakukan eksplorasi data awal sebagai fondasi proses mining;
  • menerapkan klasifikasi sederhana menggunakan regresi logistik;
  • menerapkan clustering sederhana menggunakan k-means;
  • menerapkan analisis asosiasi sederhana pada data keranjang belanja; dan
  • menginterpretasikan hasil mining secara kritis, bukan hanya membaca output.

Skenario Praktikum

Sebuah perusahaan retail ingin memahami pola perilaku pelanggannya untuk dua kebutuhan sekaligus:

  • Kebutuhan deskriptif: mengelompokkan pelanggan berdasarkan kemiripan karakteristik belanja, dan menemukan produk-produk yang cenderung dibeli bersamaan.
  • Kebutuhan prediktif: memperkirakan apakah seorang pelanggan tergolong Premium atau Reguler berdasarkan pola transaksinya, sehingga tim pemasaran dapat menargetkan promosi secara lebih tepat.

Mahasiswa diminta mempraktikkan tahapan inti data mining — mulai dari eksplorasi data, penerapan teknik mining dasar (klasifikasi, clustering, dan asosiasi), hingga interpretasi hasil.

Prinsip utama: data mining bukan sekadar menjalankan fungsi di R. Setiap pola yang ditemukan harus dievaluasi: apakah pola tersebut masuk akal, cukup kuat secara statistik, dan berguna bagi pengambilan keputusan.

Persiapan RStudio

Membuat proyek

  1. Buka RStudio.
  2. Pilih File → New Project → New Directory → New Project.
  3. Beri nama proyek, misalnya praktikum_mining_data.
  4. Simpan file ini di dalam folder proyek.
  5. Klik Knit untuk menghasilkan HTML.

Memeriksa lingkungan kerja

getwd()
## [1] "C:/Users/MyBook Hype AMD/Downloads"
R.version.string
## [1] "R version 4.4.1 (2024-06-14 ucrt)"

Modul ini menggunakan fungsi dasar R (stats, graphics) sehingga dapat dijalankan tanpa memasang paket tambahan. Jika di kelas Anda ingin mencoba analisis asosiasi yang lebih lengkap, paket arules dapat dipasang secara opsional dengan install.packages("arules"); modul ini tetap membahas konsepnya menggunakan R dasar agar dapat dijalankan di semua komputer.

Membangun Dataset Praktikum

Jalankan kode berikut untuk membangun dua dataset praktikum: data profil transaksi pelanggan (untuk klasifikasi dan clustering) dan data keranjang belanja (untuk analisis asosiasi).

data_pelanggan <- data.frame(
  customer_id = sprintf("C%03d", 1:15),
  usia = c(22, 35, 28, 41, 30, 55, 24, 38, 45, 27, 33, 29, 50, 26, 37),
  pendapatan = c(4500000, 7200000, 5100000, 8900000, 6000000, 9500000,
                 4200000, 6800000, 9100000, 5400000, 6100000, 4700000,
                 8700000, 5300000, 7000000),
  frekuensi_belanja = c(3, 12, 5, 15, 8, 18, 2, 10, 16, 4, 7, 3, 14, 5, 9),
  total_belanja = c(900000, 5400000, 1500000, 7200000, 3600000, 9800000,
                     600000, 4800000, 8200000, 1300000, 2900000, 850000,
                     7100000, 1600000, 3800000),
  kategori_pelanggan = c("Reguler", "Premium", "Reguler", "Premium",
                          "Reguler", "Premium", "Reguler", "Premium",
                          "Premium", "Reguler", "Reguler", "Reguler",
                          "Premium", "Reguler", "Reguler"),
  stringsAsFactors = FALSE
)

transaksi_keranjang <- list(
  c("Kopi", "Gula", "Susu"),
  c("Roti", "Mentega"),
  c("Kopi", "Gula"),
  c("Roti", "Mentega", "Susu"),
  c("Kopi", "Susu"),
  c("Teh", "Gula"),
  c("Kopi", "Gula", "Roti"),
  c("Roti", "Mentega", "Kopi"),
  c("Kopi", "Gula", "Susu", "Roti"),
  c("Teh", "Susu")
)

data_pelanggan

kategori_pelanggan berperan sebagai label yang sudah diketahui (ground truth) sehingga dapat digunakan untuk membangun sekaligus mengevaluasi model klasifikasi pada bagian selanjutnya.

Bagian I — Konsep Dasar Data Mining

Definisi dan posisi dalam proses KDD

Data mining adalah proses menemukan pola, hubungan, atau pengetahuan yang tersembunyi dan berpotensi berguna dari sekumpulan data berukuran besar. Han, Kamber, dan Pei menempatkan data mining sebagai satu tahap inti dari proses yang lebih besar, yaitu Knowledge Discovery in Databases (KDD), yang secara umum terdiri atas:

  1. Data cleaning — menghilangkan derau (noise) dan data yang tidak konsisten.
  2. Data integration — menggabungkan data dari berbagai sumber.
  3. Data selection — memilih data yang relevan dengan tujuan analisis.
  4. Data transformation — mengubah data ke bentuk yang sesuai untuk mining, misalnya melalui normalisasi.
  5. Data mining — menerapkan metode untuk mengekstraksi pola.
  6. Pattern evaluation — menilai pola yang benar-benar menarik berdasarkan ukuran tertentu.
  7. Knowledge presentation — menyajikan hasil dengan visualisasi atau representasi yang mudah dipahami.

Dengan kata lain, teknik mining (klasifikasi, clustering, asosiasi, dan sejenisnya) hanya efektif jika dijalankan pada data yang sudah melalui tahap preprocessing yang memadai.

Mengapa data mining diperlukan

dim(data_pelanggan)
## [1] 15  6
str(data_pelanggan)
## 'data.frame':    15 obs. of  6 variables:
##  $ customer_id       : chr  "C001" "C002" "C003" "C004" ...
##  $ usia              : num  22 35 28 41 30 55 24 38 45 27 ...
##  $ pendapatan        : num  4500000 7200000 5100000 8900000 6000000 9500000 4200000 6800000 9100000 5400000 ...
##  $ frekuensi_belanja : num  3 12 5 15 8 18 2 10 16 4 ...
##  $ total_belanja     : num  900000 5400000 1500000 7200000 3600000 9800000 600000 4800000 8200000 1300000 ...
##  $ kategori_pelanggan: chr  "Reguler" "Premium" "Reguler" "Premium" ...

Pada dataset nyata, jumlah baris dan kolom bisa jauh lebih besar sehingga pola tidak mungkin ditemukan hanya dengan membaca tabel secara manual. Di sinilah teknik mining berperan: mengubah data mentah menjadi informasi yang dapat ditindaklanjuti.

Bagian II — Jenis Tugas Data Mining

Secara umum, tugas data mining dibedakan menjadi dua kelompok besar.

Tugas deskriptif bertujuan mengenali karakteristik umum data:

  • Clustering — mengelompokkan objek yang mirip tanpa label kelas yang diketahui sebelumnya.
  • Association rule mining — menemukan aturan asosiasi antar item, misalnya “pelanggan yang membeli kopi cenderung juga membeli gula”.

Tugas prediktif bertujuan memperkirakan nilai suatu atribut berdasarkan atribut lain:

  • Klasifikasi — memprediksi label kategorik, misalnya Premium atau Reguler.
  • Regresi — memprediksi nilai numerik, misalnya perkiraan total belanja bulan depan.
tugas_mining <- data.frame(
  jenis = c("Deskriptif", "Deskriptif", "Prediktif", "Prediktif"),
  teknik = c("Clustering", "Association rule", "Klasifikasi", "Regresi"),
  contoh_pada_kasus = c(
    "Mengelompokkan pelanggan berdasarkan pola belanja",
    "Menemukan produk yang sering dibeli bersamaan",
    "Memprediksi kategori Premium/Reguler",
    "Memprediksi total belanja pelanggan"
  )
)
tugas_mining

Ketiga bagian berikutnya (Bagian IV, V, dan VI) masing-masing mempraktikkan satu teknik: klasifikasi, clustering, dan asosiasi.

Bagian III — Eksplorasi Data sebagai Fondasi Mining

Sebelum menerapkan teknik mining, data perlu dipahami terlebih dahulu melalui statistik ringkasan dan visualisasi sederhana.

Statistik ringkasan

summary(data_pelanggan[, c("usia", "pendapatan",
                            "frekuensi_belanja", "total_belanja")])
##       usia         pendapatan      frekuensi_belanja total_belanja    
##  Min.   :22.00   Min.   :4200000   Min.   : 2.000    Min.   : 600000  
##  1st Qu.:27.50   1st Qu.:5200000   1st Qu.: 4.500    1st Qu.:1400000  
##  Median :33.00   Median :6100000   Median : 8.000    Median :3600000  
##  Mean   :34.67   Mean   :6566667   Mean   : 8.733    Mean   :3970000  
##  3rd Qu.:39.50   3rd Qu.:7950000   3rd Qu.:13.000    3rd Qu.:6250000  
##  Max.   :55.00   Max.   :9500000   Max.   :18.000    Max.   :9800000

Hubungan antar atribut numerik

fitur_numerik <- data_pelanggan[, c("usia", "pendapatan",
                                     "frekuensi_belanja", "total_belanja")]
round(cor(fitur_numerik), 2)
##                   usia pendapatan frekuensi_belanja total_belanja
## usia              1.00       0.95              0.94          0.95
## pendapatan        0.95       1.00              0.99          0.98
## frekuensi_belanja 0.94       0.99              1.00          1.00
## total_belanja     0.95       0.98              1.00          1.00

Visualisasi sebaran data

boxplot(total_belanja ~ kategori_pelanggan, data = data_pelanggan,
        main = "Sebaran Total Belanja per Kategori Pelanggan",
        xlab = "Kategori Pelanggan", ylab = "Total Belanja (Rp)",
        col = c("#f4a261", "#2a9d8f"))

plot(data_pelanggan$frekuensi_belanja, data_pelanggan$total_belanja,
     pch = 19, col = "#264653",
     main = "Frekuensi Belanja vs Total Belanja",
     xlab = "Frekuensi Belanja", ylab = "Total Belanja (Rp)")

Dari boxplot terlihat pemisahan yang cukup jelas antara kategori Premium dan Reguler berdasarkan total belanja, dan dari scatter plot terlihat kecenderungan hubungan positif antara frekuensi belanja dan total belanja. Pola awal ini menjadi dasar untuk teknik mining pada bagian berikutnya.

Bagian IV — Klasifikasi Sederhana

Klasifikasi digunakan untuk memprediksi label kategori_pelanggan berdasarkan atribut lain. Pada praktikum ini digunakan regresi logistik sebagai model klasifikasi dasar.

Menyiapkan label biner

data_pelanggan$target_premium <- ifelse(
  data_pelanggan$kategori_pelanggan == "Premium", 1, 0
)
table(data_pelanggan$kategori_pelanggan)
## 
## Premium Reguler 
##       6       9

Membangun model

model_klasifikasi <- glm(
  target_premium ~ frekuensi_belanja + total_belanja,
  data = data_pelanggan,
  family = binomial
)
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_klasifikasi)
## 
## Call:
## glm(formula = target_premium ~ frekuensi_belanja + total_belanja, 
##     family = binomial, data = data_pelanggan)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)
## (Intercept)       -1.166e+02  3.455e+05       0        1
## frekuensi_belanja -1.968e+01  1.747e+05       0        1
## total_belanja      6.998e-05  3.118e-01       0        1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2.0190e+01  on 14  degrees of freedom
## Residual deviance: 8.5979e-10  on 12  degrees of freedom
## AIC: 6
## 
## Number of Fisher Scoring iterations: 25

Perhatikan jika muncul peringatan “fitted probabilities numerically 0 or 1 occurred”. Ini bukan galat pemrograman, melainkan tanda bahwa kedua kelas pada data contoh terpisah dengan cukup jelas (separation) — hal yang wajar terjadi pada dataset kecil buatan dan patut didiskusikan di kelas.

Evaluasi model

prob_prediksi <- predict(model_klasifikasi, type = "response")
kelas_prediksi <- ifelse(prob_prediksi >= 0.5, "Premium", "Reguler")

tabel_konfusi <- table(Prediksi = kelas_prediksi,
                        Aktual = data_pelanggan$kategori_pelanggan)
tabel_konfusi
##          Aktual
## Prediksi  Premium Reguler
##   Premium       6       0
##   Reguler       0       9
akurasi <- mean(kelas_prediksi == data_pelanggan$kategori_pelanggan)
akurasi
## [1] 1

Akurasi yang tinggi pada data latih perlu dibaca hati-hati: dataset ini kecil dan labelnya dibuat berkorelasi kuat dengan total_belanja, sehingga performa yang sangat baik di sini belum tentu terulang pada data pelanggan baru yang belum pernah dilihat model.

Bagian V — Clustering Sederhana

Clustering mengelompokkan pelanggan tanpa menggunakan label kategori_pelanggan, murni berdasarkan kemiripan atribut numerik.

Standardisasi atribut

Karena skala pendapatan dan total_belanja jauh lebih besar daripada usia dan frekuensi_belanja, atribut perlu distandardisasi agar tidak mendominasi perhitungan jarak.

fitur_scaled <- scale(fitur_numerik)
head(fitur_scaled)
##             usia pendapatan frekuensi_belanja total_belanja
## [1,] -1.30382758 -1.1569385        -1.0962500    -1.0252922
## [2,]  0.03431125  0.3545457         0.6246076     0.4775791
## [3,] -0.68622504 -0.8210531        -0.7138372    -0.8249094
## [4,]  0.65191379  1.3062209         1.1982268     1.0787276
## [5,] -0.48035753 -0.3172251        -0.1402180    -0.1235694
## [6,]  2.09298638  1.6421063         1.7718460     1.9470533

Menjalankan k-means

set.seed(123)
hasil_kmeans <- kmeans(fitur_scaled, centers = 2, nstart = 25)
hasil_kmeans$centers
##         usia pendapatan frekuensi_belanja total_belanja
## 1  0.8577813  0.8983601         0.8977596     0.8831158
## 2 -0.7505586 -0.7860651        -0.7855396    -0.7727263
data_pelanggan$cluster <- hasil_kmeans$cluster

Membandingkan cluster dengan label aktual

table(Cluster = data_pelanggan$cluster,
      Kategori = data_pelanggan$kategori_pelanggan)
##        Kategori
## Cluster Premium Reguler
##       1       6       1
##       2       0       8
plot(data_pelanggan$frekuensi_belanja, data_pelanggan$total_belanja,
     col = data_pelanggan$cluster, pch = 19,
     main = "Hasil Clustering (k = 2)",
     xlab = "Frekuensi Belanja", ylab = "Total Belanja (Rp)")
legend("topleft", legend = paste("Cluster", sort(unique(data_pelanggan$cluster))),
       col = sort(unique(data_pelanggan$cluster)), pch = 19)

Jika hasil cluster sejalan dengan kategori_pelanggan, ini menunjukkan bahwa perbedaan pola belanja yang tampak di data memang cukup kuat untuk ditemukan tanpa label — sebuah indikasi bahwa segmentasi tersebut valid secara data, bukan hanya asumsi bisnis.

Bagian VI — Analisis Asosiasi Sederhana

Analisis asosiasi mencari pola “jika membeli A, cenderung juga membeli B” dari data keranjang belanja transaksi_keranjang yang telah dibangun sebelumnya.

Menghitung support

Support mengukur seberapa sering suatu itemset muncul di seluruh transaksi.

ada_kopi <- sapply(transaksi_keranjang, function(x) "Kopi" %in% x)
ada_gula <- sapply(transaksi_keranjang, function(x) "Gula" %in% x)

support_kopi <- mean(ada_kopi)
support_gula <- mean(ada_gula)
support_kopi_gula <- mean(ada_kopi & ada_gula)

data.frame(itemset = c("{Kopi}", "{Gula}", "{Kopi, Gula}"),
           support = c(support_kopi, support_gula, support_kopi_gula))

Menghitung confidence dan lift

Confidence mengukur kekuatan aturan “Kopi → Gula”, sedangkan lift menunjukkan apakah hubungan tersebut lebih kuat daripada kebetulan.

confidence_kopi_ke_gula <- support_kopi_gula / support_kopi
lift_kopi_gula <- confidence_kopi_ke_gula / support_gula

data.frame(aturan = "Kopi -> Gula",
           support = support_kopi_gula,
           confidence = confidence_kopi_ke_gula,
           lift = lift_kopi_gula)

Nilai lift lebih besar dari 1 menunjukkan bahwa pembelian Kopi dan Gula berasosiasi positif — keduanya lebih sering dibeli bersamaan dibandingkan jika pembelian keduanya saling bebas. Pola inilah yang biasa dimanfaatkan untuk strategi product bundling atau penempatan produk pada rak yang berdekatan.

Evaluasi dan Interpretasi Hasil

data_pelanggan[, c("customer_id", "kategori_pelanggan",
                    "cluster")]

Ketiga teknik yang dipraktikkan menjawab kebutuhan yang berbeda:

  • Klasifikasi memberi prediksi berlabel untuk pelanggan baru.
  • Clustering memberi struktur tersembunyi tanpa memerlukan label.
  • Analisis asosiasi memberi aturan hubungan antar item, bukan antar pelanggan.

Ketiganya saling melengkapi dan sering digunakan bersamaan dalam proyek data mining nyata, bukan dipilih salah satu saja.

Pertanyaan Refleksi

  1. Mengapa hasil clustering tidak selalu sama dengan segmentasi bisnis yang sudah ada (misalnya kategori_pelanggan)?
  2. Apa risiko menginterpretasikan akurasi model klasifikasi yang sangat tinggi pada dataset kecil seperti pada praktikum ini?
  3. Mengapa atribut numerik perlu distandardisasi sebelum clustering, tetapi tidak selalu diperlukan sebelum regresi logistik?
  4. Apakah lift yang tinggi pada suatu aturan asosiasi selalu berarti hubungan sebab-akibat? Jelaskan.
  5. Tahap KDD mana yang paling menentukan kualitas hasil data mining, dan mengapa?

Ringkasan

Alur yang telah dipraktikkan adalah:

  • memahami definisi data mining dan posisinya dalam proses KDD;
  • membedakan tugas deskriptif (clustering, asosiasi) dan prediktif (klasifikasi, regresi);
  • melakukan eksplorasi data sebagai fondasi sebelum mining;
  • menerapkan klasifikasi sederhana dengan regresi logistik;
  • menerapkan clustering sederhana dengan k-means; dan
  • menerapkan analisis asosiasi sederhana pada data keranjang belanja.

Data mining bukan proses satu langkah. Kualitas hasilnya bergantung pada pemahaman data, ketepatan pemilihan teknik, dan interpretasi yang kritis terhadap pola yang ditemukan — bukan hanya menjalankan fungsi R dan membaca output apa adanya.

Daftar Pustaka

Han, J., Kamber, M., & Pei, J. (2012). Data Mining: Concepts and Techniques (3rd ed.). Morgan Kaufmann.

Tan, P. N., Steinbach, M., & Kumar, V. (2019). Introduction to Data Mining (2nd ed.). Pearson.