Melakukan Unsupervised Learning Dengan R


Pada artikel sebelumnya, Memakai Local Regression Di R, saya menerapkan sebuah bentuk regression yang tidak dapat digunakan untuk melakukan prediksi. Kali ini, saya juga akan mencoba motode yang tidak dapat digunakan untuk memprediksi yang masuk dalam kategori unsupervised learning. Mengapa unsupervised learning tidak dapat dipakai untuk prediksi? Hal ini karena ia hanya melibatkan predictor (nilai X) dan nilai n (jumlah) untuk nilai predictor yang sama. Lalu apa manfaatnya bila tidak dapat digunakan untuk prediksi? Metode seperti ini dapat dipakai untuk melakukan pengelompokan variabel secara lebih rinci. Sebagai contoh, pada bidang pemasaran (marketing), berbagai metode unsupervised learning sering digunakan untuk mengelompokkan konsumen berdasarkan perilaku belanja mereka.

Saya akan mulai dengan membaca file CSV yang saya peroleh berdasarkan angket undian pada periode tertentu:

> pelanggan <- read.csv("pelanggan.csv")
> tail(pelanggan)
     tipeMotor   ponsel region
192 SUPRAX 125 KARTU AS   KUBU
193    LEGENDA  SIMPATI   KUBU
194 SUPRAX 125  SIMPATI   KUBU
195      GRAND KARTU AS   JAWI
196  SUPRA FIT KARTU AS SERDAM
197  SUPRA FIT KARTU AS SERDAM

Saya akan mulai dengan menerapkan metode coresspondence analysis (CA). Bila seandainya data yang saya miliki adalah data kuantitatif, bukan data kualitatif, maka saya harus menggunakan metode principal component analysis (PCA). Untuk menerapkan CA, saya dapat memakai function CA() dari package FactoMineR. Sebelum mulai, saya perlu terlebih dahulu mengubah data yang saya ke dalam bentuk crosstab. Bila pada artikel Memakai Linear Regression Di R, saya menggunakan cara manual dengan membuat function sendiri, kali ini saya akan menggunakan cara yang lebih mudah dengan memanggil function dcast() dari package reshape2 seperti berikut ini:

> require(reshape2)
Loading required package: reshape2
> data <- dcast(pelanggan, tipeMotor ~ region)
Using region as value column: use value.var to override.
Aggregation function missing: defaulting to length
> data
    tipeMotor AYANI GAMA JAWI JERUJU KOBAR KUBU MERDEKA PURNAMA SERDAM SIANTAN TAPUR
1      ASTREA     0    0    0      0     0    0       0       0      0       1     0
2        BEAT     0    2    2      0     0    2       1       0      2       1     5
3       BLADE     1    0    1      0     0    0       0       2      0       0     2
4         CS1     0    0    0      0     0    0       0       1      0       0     0
5       GRAND     0    2    2      1     0    1       1       0      0       1     1
6    KHARISMA     0    1    2      0     0    1       2       0      0       1     2
7     LEGENDA     0    1    0      0     0    1       0       1      0       0     0
8    MEGA PRO     0    1    0      0     0    1       0       0      0       0     0
9       PRIMA     1    1    1      0     0    2       0       0      0       0     1
10       REVO     0    3    0      0     1    3       1       1      1       0     2
11   REVO 110     0    0    1      0     1    2       2       0      1       1     1
12   REVO FIT     0    0    0      0     0    0       0       0      0       0     3
13     SCOOPY     0    1    0      0     0    0       0       0      0       0     0
14      SONIC     0    0    0      0     0    1       0       0      0       0     0
15       STAR     0    0    0      0     0    0       0       0      0       0     1
16      SUPRA     0    1    0      0     0    2       0       0      1       1     0
17  SUPRA FIT     0    1    2      2     2    4       1       1      4       2     2
18    SUPRA X     3    3    2      1     2    3       2       4      2       2     4
19 SUPRAX 125     3    8    8      2     3   11       5       0      3       7     6
20      TIGER     1    0    1      0     0    0       0       0      0       0     0
21      VARIO     0    1    1      0     0    2       0       1      0       1     0

Setelah memperoleh crosstab, langkah berikutnya adalah mengubah kolom pertama (tipe motor) menjadi nama baris. Untuk itu, saya memberikan perintah berikut ini:

> data <- data.frame(data[,-1], row.names=data[,1])
> data
           AYANI GAMA JAWI JERUJU KOBAR KUBU MERDEKA PURNAMA SERDAM SIANTAN TAPUR
ASTREA         0    0    0      0     0    0       0       0      0       1     0
BEAT           0    2    2      0     0    2       1       0      2       1     5
BLADE          1    0    1      0     0    0       0       2      0       0     2
CS1            0    0    0      0     0    0       0       1      0       0     0
GRAND          0    2    2      1     0    1       1       0      0       1     1
KHARISMA       0    1    2      0     0    1       2       0      0       1     2
LEGENDA        0    1    0      0     0    1       0       1      0       0     0
MEGA PRO       0    1    0      0     0    1       0       0      0       0     0
PRIMA          1    1    1      0     0    2       0       0      0       0     1
REVO           0    3    0      0     1    3       1       1      1       0     2
REVO 110       0    0    1      0     1    2       2       0      1       1     1
REVO FIT       0    0    0      0     0    0       0       0      0       0     3
SCOOPY         0    1    0      0     0    0       0       0      0       0     0
SONIC          0    0    0      0     0    1       0       0      0       0     0
STAR           0    0    0      0     0    0       0       0      0       0     1
SUPRA          0    1    0      0     0    2       0       0      1       1     0
SUPRA FIT      0    1    2      2     2    4       1       1      4       2     2
SUPRA X        3    3    2      1     2    3       2       4      2       2     4
SUPRAX 125     3    8    8      2     3   11       5       0      3       7     6
TIGER          1    0    1      0     0    0       0       0      0       0     0
VARIO          0    1    1      0     0    2       0       1      0       1     0

Sekarang, saya bisa memanggil perintah CA(). Hasilnya adalah sebuah grafis yang terlihat seperti pada gambar berikut ini:

> require(FactoMineR)
Loading required package: FactoMineR
> CA(data)
Hasil dari function CA()

Hasil dari function CA()

Pada grafis di atas, semakin dekat dua buah titik menunjukkan bahwa mereka semakin memiliki hubungan. Sebagai contoh, terlihat bahwa pelanggan yang memakai sepeda motor SupraX 125 memiliki hubungan yang lebih erat dengan wilayah Siantan, Kubu, dan Serdam.

Bagaimana bila saya ingin mencari hubungan untuk lebih dari dua variabel? Saya bisa menggunakan metode multiple correspondence analysis (MCA). Untuk itu, saya bisa memberikan perintah seperti berikut ini:

> pelanggan.mca <- MCA(pelanggan)
Hasil dari function MCA()

Hasil dari function MCA()

Pada grafis di atas, terlihat bahwa variabel ponsel dan region memiliki hubungan yang lebih erat bila dibandingkan dengan hubungan mereka dengan variabel tipeMotor.

Untuk melihat versi grafis yang lebih detail, saya bisa memberikan perintah berikut ini:

> plot(pelanggan.mca)
Plot MCA yang menyertakan nilai individual.

Plot MCA yang menyertakan nilai individual.

Pada grafis di atas, titik biru mewakili setiap baris data. Terlihat bahwa tidak ada pengelompokan data pada kombinasi variabel tertentu.

Operasi lain yang sering dilakukan pada unsupervised learning adalah clustering. Sebagai contoh, pada R, saya dapat melakukan hierarchial clustering dengan menggunakan perintah hclust() seperti berikut ini:

> pelanggan.hclust <- hclust(dist(data))
> plot(pelanggan.hclust)
Dendrogram yang dihasilkan oleh hclust()

Dendrogram yang dihasilkan oleh hclust()

Grafis yang dihasilkan disebut dengan dendrogram. Berbeda dengan K-Means Clustering, saya tidak perlu menentukan jumlah pengelompokan (cluster) bila memakai hierarchial clustering. Sebagai gantinya, saya dapat memilih jumlah cluster berdasarkan dendrogram. Sebagai contoh, pada nilai height=10, saya akan memperoleh 3 kelompok untuk seluruh jenis kendaraan yang ada, yaitu kelompok Supra X 125, kelompok di tengah yang terdiri atas berbagai kendaraan, dan kelompok di kanan (yang terdiri atas Supra X, Suprat Fit, Beat, dan Revo).

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: