Perumnas Data Analytics

Halo, nama saya Salomo Sitorus dan sekarang ketika halaman ini dibuat saya sedang bertugas di Bagian Produksi Apartemen Pondok Cina. Pada kesempatan ini saya ingin menyampaikan ide saya yang erat kaitannya dengan penggunaan big data (or not that big) dalam mengetahui karakter customer yang datang. Dalam halaman ini saya menggunakan bahasa pemrograman R yaitu sebuah bahasa pemrograman komputer yang sengaja dibuat untuk keperluan statistik dan machine learning.

Metode yang saya gunakan adalah K-medoids yang merupakan salah satu dari Unsupervised Learning. Unsupervised Learning sendiri merupakan salah satu cabang machine learning yang tidak menggunakan target/label tertentu untuk diprediksi, melainkan hanya untuk mengelompokkan data (clustering) menurut karakter dan jarak kedekatannya. Hampir sama dengan K-means, K-medoids menggunakan pendekatan terdekat untuk mengelompokkan data hanya saja K-means menggunakan centroids, sedangkan K-medoids menggunakan medoids (bingung? sama! hahahaha)

Baiklah langsung kita mulai

Generate the data

Dikarenakan data yang ada di Perumnas sekarang masih dinilai belum cukup dalam untuk dilakukan analisis mendalam, maka saya mencoba untuk membuat data “dummy” menggunakan 1000 row data dan 15 kolom variable. Isi dari row adalah dummy dari customer yang saya generate secara acak sehingga ada kemungkinan nantinya hasilnya akan tidak sesuai dengan kondisi sebenarnya (misal : PNS menginginkan rumah seharga >200 juta dibayar tunai). Sedangkan kolom-kolom variable saya generate berdasarkan pengetahuan dan pengalaman saya selama ini. Saya berharap kolom-kolom ini mendapatkan saran mengenai keterkaitannya dengan kondisi asli atau malah dapat memberikan inspirasi bagi Perumnas untuk menambahkan kolom variable dalam pendataan customer.

set.seed(257)
id <- c(1:1000) %>% 
  factor()

luas.bangunan <- sample(c("36-45","46-54","55-60","61-70",">70"),size = 1000,replace = T) %>% 
  factor(levels = c("36-45","46-54","55-60","61-70",">70"),ordered = T)

luas.tanah <- sample(c("60-72","72-90","91-120","121-145",">145"),size = 1000,replace = T) %>% 
  factor(levels = c("60-72","72-90","91-120","121-145",">145"),ordered = T)

pekerjaan <- sample(c("Polri/TNI","PNS/BUMN","Swasta","Pengusaha"),size = 1000,replace = T) %>% 
  factor(levels = c("Polri/TNI","PNS/BUMN","Swasta","Pengusaha"),ordered = T)

pendidikan <- sample(c("SMA/SMK","D3","S1","S2","Lainnya"),size = 1000,replace = T) %>% 
  factor(levels = c("SMA/SMK","D3","S1","S2","Lainnya"),ordered = T)

usia <- sample(c("<25","26-30","31-40","41-50","51-60",">60"),size = 1000,replace = T) %>% 
  factor(levels = c("<25","26-30","31-40","41-50","51-60",">60"),ordered = T)

pendapatan <- sample(c("<1 juta","1-3 juta","3-5 juta","5-10 juta","10-15 juta",">15 juta"),size = 1000,replace = T) %>% 
  factor(levels = c("<1 juta","1-3 juta","3-5 juta","5-10 juta","10-15 juta",">15 juta"),ordered = T)

jenis.kelamin <- sample(c("Laki-laki","Perempuan"),size = 1000,replace = T) %>% 
  factor(levels = c("Laki-laki","Perempuan"),ordered = T)

status.perkawinan <- sample(c("Menikah","Belum menikah","Lainnya"),size = 1000,replace = T) %>% 
  factor(levels = c("Menikah","Belum menikah","Lainnya"),ordered = T)

jumlah.anak <- sample(c("Belum ada","1-2","3-4",">4"),size = 1000,replace = T) %>% 
  factor(levels = c("Belum ada","1-2","3-4",">4"),ordered = T)

jumlah.penghuni <- sample(c("1","2-3","4-5",">5"),size = 1000,replace = T) %>% 
  factor(levels = c("1","2-3","4-5",">5"),ordered = T)

alasan.membeli <- sample(c("Pindah Tugas","Keamanan","Investasi Modal","Lain-lain"),size = 1000,replace = T) %>% 
  factor(levels = c("Pindah Tugas","Keamanan","Investasi Modal","Lain-lain"),ordered = T)

sistem.pembelian <- sample(c("Tunai","Kredit"),size = 1000,replace = T) %>% 
  factor(levels = c("Tunai","Kredit"),ordered = T)

rencana.beli <- sample(c("Ya","Tidak","Mungkin"),size = 1000,replace = T) %>% 
  factor(levels = c("Ya","Tidak","Mungkin"),ordered = T)

harga.rumah <- sample(c("60-100 juta","101-200 juta",">200 juta"),size = 1000,replace = T) %>% 
  factor(levels = c("60-100 juta","101-200 juta",">200 juta"),ordered = T)

perumnas.dummy <- data.frame(id,luas.bangunan,luas.tanah,pekerjaan,pendidikan,usia,pendapatan,jenis.kelamin,status.perkawinan,jumlah.anak,jumlah.penghuni,alasan.membeli,sistem.pembelian,rencana.beli,harga.rumah)

perumnas.dummy

Seperti yang dapat kita lihat di atas, data kita terdiri dari 1000 rows dan 15 columns yang berarti ada 15000 observasi di dalam data kita (ini kalau dibuka pakai excel bisa ditinggal bikin indomie dulu kali ya). Kelas dari masing-masing column/variable adalah factor semuanya. Kelas data factor adalah kelas data yang sering muncul atau mungkin bahasa awamnya pengelompokkan (contoh : dari 1000 data ada 254 yang menikah dan sisanya belum menikah). Mengapa saya menggunakan kelas data factor ini adalah karena apabila suatu saat diterapkan dalam kenyataannya, para sales atau customer dapat memilihnya dengan drop down menu (pilihan jawaban) sehingga dapat mempermudah pengisian data. Kebayang kan mengisi 15 kolom tapi diketik semua?

Defining K value

Dalam metode K-medoids, hal yang pertama kali kita lakukan adalah menentukan tipe jarak yang kita gunakan. Dalam prakteknya ada beberapa jenis jarak yang digunakan mulai dari Eucledian, Manhattan, Gower, dll. Untuk metode K-medoids tipe jarak yang kita gunakan adalah Gower. Kenapa? karena variable-variable kita sebelumnya memiliki kelas factor dan akan lebih susah jika kita menggunakan tipe jarak yang lain (harus dibuat dummy lah, one hot encoding lah, ribet pokoknya). Kalau memang tertarik bisa googling apa itu Gower Distance nanti kita sama-sama diskusi.

Lalu apabila tipe jarak sudah kita tentukan maka kita akan menentukan nilai dari K. Nilai K adalah nilai yang menentukan akan dibagi berapa cluster data kita nanti. Nilai K bisa berapa saja mulai dari 1 samapi jumlah datanya (1000), tapi apabila seperti itu untuk apa saya panjang lebar menjelaskan metode ini? Untuk apa saya kurang tidur karena belajar metode ini? Untuk apa?

Maaf saya emosional

Jadi bagaimana kita menentukan nilai K? Sebenarnya ada 2 cara yaitu mengikuti keperluan bisnis kita dan mengikuti cara statistik. Apabila kita menggunakan keperluan bisnis jumlah K bisa diberikan oleh siapa pun mulai dari Direksi, GM, Manager, Sales bahkan sekuriti (kalau dia paham bisnis) juga bisa memberikan masukan. Dan apabila menggunakan cara statistik dapat menggunakan cara Elbow dan Siluette. Apa itu? Tenang saja, tidak saya jelaskan disini, biarkan saya saja yang tambah botak untuk mempelajari hal tersebut.

Berdasarkan plot di atas sumbu x adalah nilai K, maka nilai K yang mempunyai nilai y paling tinggi adalah K = 2. Tapi apakah kita cukup menggunakan K = 2? Dari 1000 orang yang ada kita hanya menggunakan 2 cluster? Mungkin saja sebenarnya tapi biasanya hasilnya nanti datanya seperti hanya dibagi 2 sama besar dan tidak terlalu memberikan kita informasi yang spesifik. Saya sarankan bagaimana kalau kita mengambil K = 4 karena memiliki nilai y kedua tertinggi.

Clustering

Lalu kita sampailah pada saat yang berbahagia. Clustering
Karena data yang ada sudah kita tentukan ingin menggunakan tipe jarak apa (Gower), nilai K = 4 dan metode clusteringnya adalah K-medoids, maka sekarang adalah tugas mesin untuk mengelompokkannya. Ketik script, tekan enter dan voila!

## [1] 419 829  71 751

Angka-angka di atas adalah angka-angka medoids yang melambangkan ciri khas sebuah cluster. Jumlahnya ada 4 (sesuai dengan nilai K) yaitu customer ke 419, 829, 71 dan 751.

Tabel di atas memberikan informasi seperti apa karakteristik dari masing-masing cluster

Tabel di atas menjelaskan id customer yang ada masuk di cluster mana (Sayangnya saya tidak generate nama, sehingga yang saya gunakan id)

Visualization

Pertanyaan selanjutnya adalah “Berapa banyak anggota dalam masing-masing cluster?”
Jangan sedih, jangan takut, jangan bimbang, jangan resah karena di bawah ini kita akan temukan jawabannya

##   A   B   C   D 
## 277 263 236 224
##     A     B     C     D 
## 0.277 0.263 0.236 0.224

Secara default mari kita namakan cluster kita A, B, C dan D. Sehingga terlihat jelas bahwa anggota dari cluster A adalah 277 orang dengan persentase 27.7% dan seterusnya. Dari hasil analisis tersebut kita dapat mengetahui seperti apa karakter dari sebagian besar customer kita dan akan mengarah seperti apa perlakuan kepada customer-customer itu apabila kita sudah mengetahui karakternya.

Gambar di atas adalah plot dari 1000 data yang dibagi berdasarkan clusternya (hitung saja sendiri kalau tidak percaya)

Conclusion

  1. Analisis yang telah kita lakukan adalah Unsupervised Learning yang artinya kita hanya dapat mengelompokkan data berdasarkan jarak dan karakteristiknya. Kita tidak melakukan prediction maupun forecasting di halaman ini (mungkin akan saya lakukan nanti)
  2. Variabel-variabel yang saya gunakan dalam generate random data di atas masih berdasarkan pengalaman pribadi saya. Bila memang ada variable-variable yang lebih baik berdasarkan studi atau yang lain akan sangat membantu untuk improve model ini.
  3. Big data awareness is a must in this industry 4.0 era

Salomo

2019-09-15