We’re Doing Machine Learning!

Tim data science di KMK, selain menghasilkan dashboard analisis yang dikenal dengan analisis.io juga telah menghasilkan produk — produk yang menerapkan metode machine learning. Salah satu produknya adalah sotoy spam video detection yang telah digunakan untuk menanggulangi spam spam video yang masuk ke vidio.com. Pada blog post kali ini kami akan membagikan langkah — langkah apa saja yang telah kami lakukan untuk dapat mengerjakan proyek machine learning ini.

Kami mengadaptasi langkah langkah yang telah disarankan pada artikel berikut : machinelearningmastery.com/applied-machine-learning-process/ . Pada artikel tersebut terdapat 6 langkah dasar dalam melakukan machine learning. Berikut akan dijelaskan aplikasinya pada proyek sotoy spam video detection.

1. Problem Definition

Pada tahap ini kami berdiskusi mengenai masalah yang ingin dipecahkan. Yaitu bagaimana kita dapat mengklasifikasikan sebuah video yang baru diupload apakah itu spam atau tidak, sebelum nantinya video tersebut akan di transcode.

2. Analyze Data

Pada tahap ini, kita mencari tahu terlebih dahulu info — info apa saja yang dapat kita gunakan sebagai alat ukur apakah video ini spam atau tidak. Hal ini dilakukan dengan cara melihat meta data dari video — video yang di upload oleh user. Dari analisis tersebut, terlihat bahwa video spam memiliki pola judul dan deskripsi video yang cukup similar. Kebanyakan video spam memiliki judul “Full Movie”, nama dari sebuah serial TV dan masih banyak lagi. Sedangkan di deskripsinya, mereka meletakan banyak link yang mengacu ke website lain.

Selain itu, kita juga melihat video spam memiliki pola tayangan yang similar. Meskipun demikian kita tidak memilih untuk menggunakan data video, karena cukup sulit untuk menjadikan video (image dalam frekuensi besar) sebagai fitur dikarenakan cost yang akan digunakan dapat menjadi besar. Namun, kita juga memiliki data bitrate video yang cukup dapat merepresentasikan isi dari video tersebut.

3. Prepare Data

3.1. Pre-processing

Setelah mengetahui data apa saja yang dapat kita pakai, kita harus mengubah representasi data tersebut agar dapat kita komputasikan dan dijadikan pemelajaran bagi komputer. Pada proses klasifikasi, data yang digunakan adalah data dalam bentuk vektor. Dimana setiap elemennya merepresentasikan fitur dari sebuah instance (dalam kasus ini adalah video). Namun, bagaimana jika data yang digunakan adalah data teks?

Python memiliki library bernama Scikit Learn yang dapat digunakan dalam Machine Learning. Pada library ini terdapat algoritma CountVectorizer yang dapat mengubah fitur teks menjadi sebuah representasi vector. Berikut adalah gambaran yang dilakukan oleh CountVectorizer:

Sebagai contoh kita memiliki 3 buah data teks:

  • Kucing itu berwarna putih
  • Anjing itu berwarna coklat
  • Kucing memakan coklat putih

Dari data teks yang kita miliki (atau biasa disebut korpus) kita dapat menyusun sebuah vocabulary yang terdiri dari :

anjing, berwarna, coklat, itu, kucing, memakan, putih (7 kata)

Kita kemudian menjadikan setiap data menjadi representasi vector 7 dimensi (masing — masing untuk setiap kata) Tiap elemen dari vector menunjukkan jumlah fitur kata yang ada pada data. Representasinya kurang lebih sebagai berikut :

  • Kucing itu berwarna putih : [0,1,0,1,1,0,1]
  • Anjing itu berwarna coklat : [1,1,1,1,0,0,0]
  • Kucing memakan coklat putih : [0,0,1,0,1,1,1]

Untuk data bitrate, terdiri dari empat jenis, yaitu original bitrate, video bitrate, audio bitrate, dan duration. Maka dari itu nantinya tiap data akan direpresentasikan kedalam vector 4 dimensi. Karena tiap data sudah dalam bentuk integer, kita tidak perlu lagi melakukan pre-processing seperti pada data teks.

3.2. Labeling Data

Setelah kita mendapatkan representasi data, kita kemudian melakukan manual labeling. Manual labeling adalah memberikan label/tag pada masing masing data. Karena kita ingin mengklasifikasikan data spam atau tidak, maka kita cukup memberi label untuk 2 kelas saja, yaitu 0 (Spam) dan 1 (Tidak Spam). Yang harus diperhatikan adalah, usahakan data yang diberi label memiliki variasi yang tinggi. Jangan sampai kita hanya memberi label bagi sedikit jenis data saja. Karena hal ini dapat menyebabkan model klasifikasi yang kita hasilkan kurang baik.

3.3 Pembagian data

Setelah kita memiliki sejumlah data, kita harus membagi data ke dalam 2 golongan. Yaitu data training dan data testing. Data training digunakan untuk membuat model klasifikasi. Sedangkan data testing digunakan untuk mengevaluasi hasil klasifikasi. Biasanya data training memiliki porsi yang lebih besar dibandingkan dengan data testing.

4. Evaluate Algorithms

Pada tahap ini kita memilih algoritma klasifikasi yang cocok diterapkan pada dataset yang kita miliki. Terdapat banyak algoritma klasifikasi seperti Support Vector Machine (SVM), Logistic Regression, Naive Bayes, Random Forest, dan masih banyak lagi. Beberapa algoritma sudah ada yang disediakan oleh library Scikit Learn. Pada blog post kali ini, tidak akan dijelaskan secara rinci tentang cara ketja masing — masing algoritma (mungkin akan dibuat blog post khusus untuk ini :D).

Pada sotoy spam video detector kita menggunakan algoritma SVM, karena dari beberapa referensi yang telah kita baca sepertinya SVM cukup baik dalam mengklasifikasikan data yang berbentuk teks. Kita melakukan 2 kali klasifikasi. Yang pertama menggunakan data teks, yang kedua menggunakan data bitrate. Kurang lebih ilustrasinya seperti ini.

  • Data Teks → Text Classsification (Using SVM) → Result 1
  • Data Bitrate → Text Classification (Using SVM) → Result 2
  • Hasil akhir = Result 1 && Result 2

Selanjutnya kita mengevaluasi model yang dihasilkan menggunakan data testing. Kita hitung persenatse akurasi model dalam mengklasifikasi data test tersebut. Kita juga melakukan cross validation saat evaluasi. Cross Validation adalah membagi data ke dalam n bagian, kemudian melakukan evaluasi sebanyak n kali. Di setiap evaluasi n-1 bagian digunakan sebagai data training dan 1 bagian sebagai data testing. Hal ini bertujuan agar model yang diklasifikasikan tidak overfit ke dalam sebuah golongan saja.

5. Improve Results

Selanjutnya adalah tahapan dimana kita meng-improve model yang telah kita buat. Hal ini dilakukan dengan cara melakukan training model secara berkala ketika ada data baru yang tidak terklasifikasikan dengan benar. Sebagai contoh, jika suatu saat terdapat spam video yang memiliki pola judul atau deskripsi yang baru, kita dapat menambahkannya kedalam dataset training kita agar komputer dapat mengenali data ini sebagai spam. Begitu juga sebaliknya.

6. Present Results

Tahapan akhir yaitu bagaimana membuat agar model klasifikasi ini dapat digunakan oleh pihak lainnya. Dalam hal ini kita membuat sebuat API yang dapat digunakan oleh tim Vidio yang dapat dipanggil setiap ada user yang mengupload video.

Kurang lebih seperti itulah gambaran umum cara melakukan Machine Learning yang dikerjakan oleh tim Data Science KMK. Kami juga masih terus belajar mengembangkan cara melakukan machine learning yang tepat untuk proyek lainnya (seperti recommendation system) serta memperdalam pengetahuan kami terhadap algoritma — algoritma yang ada. Nantikan cerita mengenai keseruan yang dilakukan Tim Data Science selanjutnya ya B)!