Monday, November 12, 2012

Tugas Model Tree

Minggu lalu Pak Yudi Wibisono memberikan tugas tentang pembuatan model untuk data mining.

Sebelum masuk ke tugasnya apa, perlu diingat ada 3 langkah dalam pemodelan:

  1. Training
  2. Model
  3. Testing
Dan jangan lupa karena kita ingin menggali datanya maka data harus dibersihkan dengan preprocessing terlebih dahulu.

Okey? Mari kita lanjut


Soalnya


Soalnya seperti ini:

Diberikan data dengan judul "Restaurant & consumer data, recommender systems domain" (data ini bisa dicari dengan keyword serupa di Google dan bebas digunakan untuk kepentingan pendidikan) . Data yang diberikan berupa .csv dan terdiri dari beberapa file. Filenya adalah sebagai berikut:
Restaurants
1 chefmozaccepts.csv
2 chefmozcuisine.csv
3 chefmozhours4.csv
4 chefmozparking.csv
5 geoplaces2.csv

Consumers
6 usercuisine.csv
7 userpayment.csv
8 userprofile.csv

User-Item-Rating
9 rating_final.csv

Pertanyaannya, buatlah model berupa tree yang dapat menentukan berapa nilai rating yang diberikan jika ada pengunjung dengan paramater a,b,c,d...

Telaah


Okay! Saya coba telaah

Jadi soal ini mencari cara berapa rating yang akan diberikan oleh seorang pelanggan jika dia memiliki attribut:
  1. Peminum
  2. Perokok
  3. Pilihan pakaian
  4. Pergi sendiri/keluarga/teman
  5. Transportasi
  6. Kepribadian
  7. Status menikah
  8. Minat
  9. Aktivitas (pekerjaan)
  10. Budget
Dan hal ini dilihat berdasarkan restoran yang dilihat dari fasilitas:
  1. Alkohol
  2. Smoking area
  3. dress code
  4. Accessibility (nampaknya ini kemudahan mengakses tempatnya? atau mungkin bagi orang yang berkebutuhan khusus? hmm..)
  5. harga
  6. rambience (sepertinya singkatan dari restaurant ambience, suasana tempatnya)
  7. Area (tertutup dalam ruangan atau terbuka)
  8. Servis lain (internet, macam-macam, atau tidak ada sama sekali)
Dan beragam atribut tadi akan menentukan kelas Rating.

Jadi kalau kita jadikan satu tabel data untuk menentukan rating apa yang akan diberikan user maka tampilannya adalah sebagai berikut


Nampaknya teknis sekali ya? Hm... saya coba narasikan seperti ini.
Jadi terdapat data ORANG dan TEMPAT, dengan beragam atribut yang ada. Orang tersebut diminta menilai restoran yang didatanginya. Setelah sekian lama didapatlah data-data jika orang dengan kepribadian tertentu yang berada di restoran tertentu akan memberikan rating seperti apa.

Orang seperti apa yang berada di restoran apa dapat memberi rating X?

Saat membaca soalnya saya bingung juga. Pertanyaannya "Atribut mana yang harus dipakai dan mana yang tidak?"
Kalau jawaban saya sendiri, atribut yang relevan untuk kelas yang akan ditemukan dari data tabel yang diberikan. Misalnya untuk mencari rating dari sebuah restoran kita tidak perlu mengambil atribut nama website restorannya karena nama website restoran tidak menentukan apakah akan membuat rating jadi tinggi atau tidak.

Pak Yudi juga ada berpesan seperti ini:

Yudi Wibisono Atribut di data mentah tidak harus masuk ke model. Salah satu tugas dari analis adalah menentukan atribut mana yg akan diproses dan mana yg bisa dibuang. Atrbiut yg datanya terlalu banyak null, terlalu banyak noise dll, bisa dipertimbangkan untuk tidak dimasukkan.

Ha! Ya ya ya. Banyak pertimbangan ya

Lalu gunanya apa?


Misalnya kita ingin membangun restoran dan tahu target pasar dari orang yang datang seperti apa, maka kita bisa menentukan atribut restoran yang cocok seperti apa agar memiliki rating yang bagus.

Got it kan?

Nah sekarang kita mulai ke tahap pertama

Tahap Preprocessing

Sudah dapat kan atribut apa saja yang ingin kita dapatkan? Nah karena kita punya banyak sekali file jadi bingung data yang mana yang harus diproses. Yang perlu diingat pertama kali adalah ambil data yang memiliki kelas. Dalam kasus ini adalah file rating_final.csv, di dalam file ini terdapat atribut userID,placeID,rating,food_rating,service_rating

Karena yang saya inginkan hanyalah rating maka kelas food_rating dan service_rating tidak saya pergunakan untuk kali ini.

Kemudian saya memerlukan data dari pengunjung ke restoran tersebut. data ini ada di userprofile.csv yang memiliki primary key userID. Perhatikan, ini adalah foreign key di rating_final.csv yang jelas harus dipakai.

Dan yang terakhir adalah restoran yang dikunjungi ada di geoplaces2.csv

Nah, karena data-data ini terpisah sedangkan kita harus menemukan satu record memiliki nilai apa maka kita harus mendenormalisasikan datanya.

Denormalisasi

Jika di database transaksional denormalisasi seolah haram hukumnya (walaupun trade off dengan kecepatan) pada pencarian model ini denormalisasi menjadi bagian penting. Dari beberapa tabel yang tersedia kita kawinkan sehingga atribut-atribut dari kebutuhan data yang ingin kita teliti ada semuanya.

Untuk denormalisasi ini saya menggunakan Pentaho Kettle. Bagi anda yang terbiasa dengan MySQL juga boleh menggunakannya, namun saya sarankan dengan Pentaho Kettle ini karena sudah terdapat beragam tools seperti input data file, output data file, transformasi, dan sebagainya.

Result

Dengan menggunakan Weka, dari tree dengan Classifier Id3 saya mendapatkan model. Tapi sayangnya dari data yang benar hanya 47.0886%. Menyeramkan sekali kurang dari setengahnya yang benar.

Hm... mungkin ini karena datanya masih sedikit, atau classifiernya (tapi bahkan dengan menggunakan Naive Bayes hanya mencapai 50.6329% yang benar). Nampaknya data yang diambil harus lebih banyak agar learning yang diproses lebih tepat.Oh ya ampun, padahal datanya ada 1162!

Tapi ada kemungkinan juga atribut yang digunakan tidak tepat, mungkin kurang. Misalnya saya tidak memasukkan metode pembayaran yang dimiliki tiap restoran atau makanan yang dimiliki restoran. Kendala yang saya miliki adalah bagaimana memasukkan multiple-values ke dalam satu kolom? Apa harus dibuat kolom berbeda?

It's fun!


Walaupun hasilnya belum akurat, namun.. ah.. menyenangkan sekali membuat seperti ini. Ada knowledge yang didapat dari data. Misalnya saya jadi tahu orang yang minatnya bebas, pekerja keras, berada di restoran yang boleh merokok, memiliki budget medium, di restoran dengan harga medium, dan tidak punya pilihan pakaian akan selalu menilai restoran dengan rating Good. Berarti orang yang agak slordeh dengan budget lumayan ratingnya juga bagus. Hihi

Kayaknya bisa juga buat sistem mencari jodoh pakai data mining kayak gini yak~


Okay! That's it! Hope you like it!

No comments:

Post a Comment

Comment is caring :)