Data Mining: Analisis Afinitas Sederhana A.K.A Algoritma Sugesti Sederhana

Artikel kali ini in nutshell. True story, saya nonton Steins;gate dulu dan langsung sambung nonton anime sebelahnya.

Hype big data dimana-mana. Semua orang bilang era selanjutnya itu adalah era big data tapi entah kenapa saya tidak tertarik sama sekali untuk menjelajahi "big data" ini lebih lanjut. Kupikir big data itu cuma ibarat data yang terkena inflasi, semakin lama semakin banyak dan terdapat dimana-mana ok ok, cukup perumpamaan yang buruk ini sebelum ada orang ekonomi yang tertrigger

Berawal dari belajar deep learning dan ternyata butuh basic dari machine learning. Selesai mempelajari basic-basic atau garis besar dari machine learning yang dirasa sudah cukup barulah beralih ke deep learning. Membaca literatur deep learning ternyata sangat kental dengan matematika yang mana notasi-notasi atau paradigmanya masih asing di saya. Lebih buruk dari itu, saya juga masih bingung mau dibawa kemana semua 'matematika' ini. Pucuk di cinta ulam pun tiba, lihat diberanda ada tawaran buku gratis dari packtpub.com. Spesialnya ini sepertinya merupakan buku yang sedang saya butuhkan dan langsung kudownload (judul tertera dibagian referensi artikel ini). Buku ini sepertinya akan membantu saya dalam mencari insight pada sistem deep learning.

Ini buku tentang data mining. Apa itu data mining? Singkatnya data mining itu adalah tentang bagimana mendapatkan pola dari data-data yang jumlahnya banyak. Semakin banyak data yang di olah, interpretasi pola yang didapatkan semakin akurat. Machine learning adalah tentang bagimana 'membeberkan' data-data itu ke komputer dan menyuruhnya 'berpikir sendiri' masih kurang tepat, tapi cukup mewakilkan apa pola yang ada pada data itu. Teknik berpikir komputer itu menggunakan metode dari data mining dan disinilah, mau tidak mau saya jadi harus mempelajari big data. Deep learning sendiri hanyalah bagian kecil dari machine learning. Menjadi populer sekarang karena era big data ini dan kebutuhan komputasi yang rumit (read: voice recognition, face recognition, prediksi rumit dll).


Keluar dari konteks video di atas, bisa disimpulkan bahwa informasi itu berharga. Perusahaan advertiser sangat-sangat peduli dengan apa yang kita-kita searching tiap hari di google, apa yang kita beli di toko online, siapa yang kita stalking tiap hari dan masih banyak lagi. Mereka ingin mempelajari perilaku para konsumen sehingga iklan-iklan yang diberikan tepat sasaran. Produsen jadi tahu mau konsumen, happy ending lol.

Algoritma yang kita bahas kali ini berhubungan tentang bagaimana caranya advertiser atau produsen bisa memperkirakan apa yang kita cari. Contoh kasus, kamu ingin membuat roti bakar. Bahan-bahan yang kamu perlukan tentu saja seperti: roti, meses, mentega. Jadi, ketika kamu akan membeli bahan itu ke supermarket selain membeli roti, kamu juga akan membeli meses dan mentega. Orang lain yang membuat roti bakar juga ketika akan berbelanja ke supermarket kemungkinan besar akan membeli barang-barang yang sama. Sehinga disini terjadi kecenderungan atau pola dimana bisa disimpulkan orang yang membeli roti, punya kecenderungan untuk membeli meses dan mentega.

If you liked A then you might like B

Kita akan memperagakan ini menggunakan script python dengan input data text. Script pythonnya kali ini tidak diupdate ke github karena cukup sepele.

 #!/usr/bin/python  
 import numpy as np  
 somedata = '/home/genomexyz/rewrite/Chapter1/affinity_dataset.txt'  
 X = np.loadtxt(somedata)  
 #order  
 #0 = bread  
 #1 = milk  
 #2 = cheese  
 #3 = banana  
 #4 = apple  
 def calcconfidence(obj1, obj2, rawdata):  
      proved = 0.0  
      total = np.sum(rawdata[:,obj1])  
      for something in rawdata:  
           if something[obj1] and something[obj2]:  
                proved += 1  
      return proved / total  
 print calcconfidence(0, 1, X)  

Pada input datanya, hanya berisi nilai 0 dan 1. 0 berarti tidak membeli barang itu dan 1 berarti membelinya. Berurutan tiap baris ada 5 angka  yang masing-masing merepresentsikan di beli atau tidaknya barang itu berururtan yaitu: bread, milk, cheese, banana dan apple. Jadi, misal kita ingin mengecek apakah pada sampel pertama (baris pertama) ada yang membeli banana, maka cek saja angka urutan ke 4 dari kiri.

  #order   
  #0 = bread   
  #1 = milk   
  #2 = cheese   
  #3 = banana   
  #4 = apple   

Pada script kali ini, input data itu akan dibaca sebagai array 2 dimensi yang mana memisahkan tiap sampel (baris pada file input sebenarnya).

Yang kita ingin cari tahu dari data ini adalah nilai support dan confidence. Support adalah berapa banyak A yang terjadi pada sampel sedangkan confidence adalah berapa persen A dan B terjadi bersama-sama pada total terjadinya A. Nilai confidence inilah yang menjadi tolak ukur kecenderungan dari kesimpulan yang didapatkan.

confidence = sum(A and B) / sum(A)
Sehingga outpunya dari script ini

 ~$ ./affinity.py  
 0.518518518519  

Mari kita perumit sedikit, misalnya kamu ingin bahan mana yang nilai kecenderungan (confidence) paling tinggi jika disandingkan dengan bread (bread adalah bahan utamanya jadi akan dibagi nilai total kejadian bread). Mari kita tambahkan sedikit scriptnya.

 #!/usr/bin/python  
 import numpy as np  
 somedata = '/home/genomexyz/rewrite/Chapter1/affinity_dataset.txt'  
 X = np.loadtxt(somedata)  
 #order  
 #0 = bread  
 #1 = milk  
 #2 = cheese  
 #3 = banana  
 #4 = apple  
 def calcconfidence(obj1, obj2, rawdata):  
      proved = 0.0  
      total = np.sum(rawdata[:,obj1])  
      for something in rawdata:  
           if something[obj1] and something[obj2]:  
                proved += 1  
      return proved / total  
 def rankorder(totmemberinorder, confidencear):  
      order = 0  
      biggest = 0  
      for i in xrange(totmemberinorder):  
           confidence = confidencear[i]  
           if confidence > biggest:  
                biggest = confidence  
                winner = i  
      return winner+1, biggest  
 calculate = np.asarray([calcconfidence(0, i, X) for i in xrange(1,5)])  
 win, val = rankorder(4, calculate)  
 print 'dan yang paling tinggi kecenderungannya adalah bahan', win, 'dengan nilai confidence', val  

Dan kita dapatkan output

 ~$ ./affinity.py  
 dan yang paling tinggi kecenderungannya adalah bahan 4 dengan nilai confidence 0.62962962963  

Bahan 4 adalah apple (bisa dilihat pada comment di script di atas) walaupun nilai confidencenya tidak terlalu tinggi, tapi bisa disimpulkan disini bahwa, orang yang membeli bread cenderung membeli apple. Dari sini, pihak advertiser atau manajer dari supermarket tadi bisa memerintahkan anak buahnya memberi saran pada orang-orang yang membeli bread untuk membeli apple juga.

Ok, ini agak awkward karena saya menyebut roti sebagai bread, apel sebagai apple dan lainnya. Ini sebenarnya agar tidak terjadi ambigu pada objek yang saya maksud.

Ok, dan berakhir sudah. Algoritma ini penerapannya tidak hanya untuk advertiser dan sekitarnya. Kita juga bisa melakukan analisis kecenderungan ini pada sains. Dalam meteorologi mungkin saja kita bisa menghitung seberapa erat hubungan nilai indeks-indeks stabilitas atmosfer terhadap terjadinya awan CB atau badai guntur? bisa saja kan.

referensi:
buku: Learning Data Mining with Python

Komentar