Pengenalan Gambar

Januari 2020 | Dios Kurniawan

**NOTE: This article is part of my upcoming book and is still written in Bahasa Indonesia. I will provide the English version as soon as possible **

Di jaman sekarang, gambar dan video digital ada di mana-mana. Ponsel yang ada di tangan hampir setiap orang modern saat ini bisa dengan mudahnya bisa mengambil foto dan sekejap mengirimkannya melalui jaringan nirkabel ke mana pun di dunia, termasuk melalui media sosial. Begitu juga dengan video digital yang saat ini bisa dibuat oleh siapapun bahkan oleh anak-anak, diunggah dan diunduh dengan bebas di platform video seperti Youtube. Kamera CCTV juga dengan rajin 24 jam sehari merekam aktivitas orang-orang di hampir semua tempat publik. Dunia telah dibanjiri oleh gambar digital.

Kita tahu bahwa perangkat lunak komputer pada umumnya tidak akan kesulitan untuk membuat index pencarian dokumen teks dalam jumlah yang besar sekalipun, namun untuk gambar digital tidak demikian. Agar dapat membuat index untuk pencarian gambar, perangkat lunak harus dapat terlebih dahulu “melihat” isi dokumen gambar dan menemukan obyek-obyek di dalamnya.

Bagi manusia, hal ini adalah hal yang bisa dilakukan secara naluriah dengan cepat. Kita tidak perlu waktu lama untuk bisa mengenali benda-benda yang ada dalam sebuah foto, atau wajah-wajah orang di dalam suatu video. Tidak demikian dengan komputer. Salah satu tantangan terberat membuat perangkat lunak komputer yang bisa mengenali obyek di dalam gambar adalah fakta bahwa hingga kini kita masih belum benar-benar bisa memahami (apalagi menirukan) bagaimana sesungguhnya cara kerja manusia mengenali obyek yang diterima oleh indera matanya.

Walaupun kemampuan manusia mengenali obyek masih menjadi misteri, sejak beberapa dekade terakhir berbagai metode pendekatan telah ditemukan dan teknologi untuk pengenalan obyek dalam gambar digital juga masih terus berkembang. Bila kita tertarik untuk menggeluti bidang ini, maka hampir pasti kita harus mempelajari suatu yaitu cabang ilmu yang disebut Computer Vision (CV).  CV adalah upaya manusia membuat perangkat lunak komputer yang bisa mengenali obyek di dalam gambar digital. Ini berbeda dengan metode image processing (pengolahan citra) yang biasa dimanfaatkan untuk memanipulasi gambar digital, namun tidak bertujuan memahami isi gambar.

Sebagai sebuah cabang ilmu, CV banyak beririsan dengan Machine Learning. Beragam algoritma Machine Learning yang sudah kita bahas di buku ini juga tidak sedikit dipergunakan di dalam CV. Serupa dengan metode supervised learning lainnya, CV dalam penggunaan praktis juga memerlukan proses training.

OpenCV

Dalam bab ini, kita akan mencoba membuat penerapan praktis CV untuk mengambil informasi dari gambar diam dan gambar bergerak atau video. Untuk itu kita akan memanfaatkan OpenCV, sebuah library open source yang menyediakan banyak fungsi CV yang menarik untuk dieksplorasi. OpenCV dapat dipakai dengan beragam bahasa pemrograman seperti C++, Java, Perl dan tentu saja bahasa favorit kita yaitu Python.

OpenCV dapat diunduh dengan bebas dari situs https://opencv.org. Instruksi untuk instalasi tersedia di sana. Bila Anda mempergunakan Anaconda, prosesnya instalasinya juga mudah. Caranya dengan menjalankan perintah di bawah ini di sebuah terminal (pastikan Anda tersambung ke internet):

conda create -name ComputerVision python=3.7
conda install -c menpo opencv
source activate ComputerVision

Perhatikan bahwa contoh di atas mempergunakan Python versi 3.7, gantilah dengan versi Python yang terpasang di komputer Anda apabila berbeda.

import cv2

Setelah itu kita bisa memakai OpenCV di program python kita dengan mengimpornya:

Bila tidak ada pesan error, artinya Anda sudah siap untuk mengikuti pembahasan selanjutnya, yaitu pendeteksian obyek dalam gambar digital yang akan kita coba bangun sebagai sebuah contoh kasus.

Pendeteksian Wajah

Anda pasti pernah mengalami ketika Anda mengunggah foto di platform media sosial misalnya Facebook, secara otomatis Facebook akan membuat tanda gambar kotak di wajah-wajah orang yang muncul di foto tersebut dan menawarkan kepada Anda untuk men-tag-nya sebagai teman-teman Anda. Ini adalah contoh penerapan nyata Machine Learning untuk facial detection (pendeteksian wajah). Lebih jauh lagi, Facebook juga menerapkan facial recognition (pengenalan wajah) sehingga bisa menampilkan nama-nama teman-teman Anda yang ada di dalam sebuah foto.

Di bab ini kita akan mencoba untuk membuat sebuah program untuk memecahkan tantangan yang pertama yaitu pendeteksian wajah. Sebuah file gambar (dalam format JPEG atau PNG) akan dibaca oleh program dan kemudian semua wajah yang muncul di gambar akan ditandai dengan simbol kotak. Untuk program kedua kita akan mempergunakan video sebagai input program.

Program kita bertujuan melakukan pendeteksian – bukan pengenalan – sehingga kita belum mempedulikan siapa pemilik wajah yang ada di dalam gambar. Proses deteksi akan menghasilkan lokasi koordinat tempat wajah (atau wajah-wajah) yang berhasil dideteksi. Seterusnya terserah kita untuk melakukan proses lebih lanjut, misalnya untuk dilakukan pengenalan siapa individu yang wajahnya muncul di gambar.

Ada beberapa metode untuk pengenalan obyek di dalam gambar, salah satunya adalah algoritma pengenalan obyek berbasis Haar Cascade (diambil dari nama ahli matematika dari Hongaria, Alfred Haar). Algoritma Haar Cascade akan dipergunakan dalam contoh program kita sebagai classifier, yaitu suatu bentuk khusus dari predictive model untuk klasifikasi. Tidak hanya untuk wajah, obyek yang dicoba dikenali bisa berupa anggota tubuh lain (misal hidung, mata, mulut) atau benda apapun asalkan kita bisa menyediakan training dataset-nya.

Algoritma ini ditemukan oleh dua orang periset bernama Paul Viola dan Michael Jones yang dituangkan dalam paper ilmiah mereka di tahun 2001, sehingga seringkali algoritma ini disebut juga dengan algoritma Viola-Jones. Mereka memberikan ide yang bertujuan untuk menghasilkan metode pendeteksian obyek yang cepat sehingga cocok untuk penggunaan secara real-time. Algoritma ini bisa dipakai untuk mengenali beragam obyek, namun face detection memang merupakan fokus utamanya.

Pembahasan detail mengenai teori dan cara kerja algoritma pendeteksian obyek berbasis Haar Cascade berada di luar lingkup artikel ini, namun secara singkat perlu dipahami bahwa algoritma memerlukan training dataset berupa sampel positif (gambar obyek yang ingin dideteksi, dalam kasus kita adalah wajah orang) dan sampel negatif (tidak berisi gambar obyek yang ingin dideteksi).

OpenCV menyediakan fasilitas untuk memuat file dalam format JPG atau PNG beserta label lokasi obyek di dalam gambar untuk dijadikan training dataset. Agar algoritma dapat bekerja efektif, sampel positif dan negatif untuk training dataset harus tersedia dalam jumlah yang besar, ratusan bahkan ribuan gambar. Adapun begitu, untuk keperluan pendeteksian wajah, kabar baiknya adalah kita tidak harus membuat training dataset sendiri, karena OpenCV sudah menyediakan training dataset yang bisa langsung dipakai. Kita akan bahas ini kemudian.

Bagaimana caranya agar komputer bisa mengenali gambar? Kita tentu sudah memahami bahwa gambar digital sebenarnya adalah sekumpulan titik yang disebut pixel. Satu file gambar digital bisa memiliki jutaan pixel yang disusun dalam baris dan kolom layaknya sebuah tabel. Sebuah gambar yang dihasilkan oleh sebuah kamera digital dengan resolusi standar 1920 x 1080 memiliki lebih dari dua juta pixel. Gambar dengan resolusi yang sangat tinggi bisa memiliki sampai 30 juta pixel.

Karena komputer hanya bisa bekerja dengan angka, maka setiap pixel harus diwakili oleh sebuah angka. Angka ini menunjukkan intensitas cahaya yang biasanya berada dalam jangkauan nol hingga 255, dengan angka nol berarti gelap total atau hitam. Untuk gambar berwarna, ada tiga angka seperti ini untuk setiap pixel, masing-masing mewakili komponen warna merah, hijau dan biru (sering disebut RGB, red-green-blue). Adapun begitu, algoritma pengenalan obyek tidak memerlukan informasi warna, sehingga kita kesampingkan dulu hal ini. Gambar berwarna justru harus terlebih dahulu diubah menjadi gambar tanpa warna (sering disebut grayscale).

Tentunya tidak efisien bila jutaan pixel harus diolah secara satu per satu. Itu sebabnya cara kerja algoritma pengenalan obyek adalah dengan mengolah sekumpulan pixel yang membentuk elemen gambar seperti garis, sudut-sudut, atau bentuk-bentuk lain. Inilah yang dijadikan feature bagi proses training.

Bila kita perhatikan sebuah gambar wajah, wilayah di sekitar mata nampak lebih gelap dibanding wilayah sekitar pipi. Begitu juga batang hidung nampak lebih cerah dibandingkan wilayah sekitar mata. Angka-angka intensitas cahaya dalam gabungan beberapa pixel bila dikumpulkan dengan ciri lainnya bisa dipakai sebagai feature untuk pengenalan wajah.

Memproses File Gambar

Di bagian ini kita akan membuat program demonstrasi deteksi wajah dengan masukan sebuah file gambar dalam format JPEG atau PNG. Langkah pertama adalah impor modul OpenCV (versi yang digunakan buku ini adalah versi 2.4).

Selanjutnya kita buka sebuah file JPEG atau PNG dengan perintah imread() dari OpenCV. Anda bisa mempergunakan gambar apa saja yang berisi setidaknya satu gambar wajah seseorang. Untuk contoh kali ini, kita pergunakan foto almarhum Presiden Soeharto yang diperoleh dari Wikipedia. Foto ini harus diubah menjadi grayscale dengan fungsi cvtColor() karena seperti sudah disinggung sebelumnya, algoritma pengenalan obyek tidak memerlukan informasi warna:

import cv2 as cv
foto = cv.imread('presiden1.jpg')
foto_gray = cv.cvtColor(foto, cv.COLOR_BGR2GRAY)

Sebelum melangkah lebih jauh, kita uji terlebih dahulu dengan menampilkan foto grayscale ini ke layar. Ini dilakukan dengan perintah imshow(). Fungsi waitKey() perlu ditambahkan untuk membuat program menunggu pengguna komputer menekan sembarang tombol keyboard agar program tidak langsung berakhir. Fungsi destroyAllWindows() dipanggil untuk mengakhiri program dan membersihkan layar dari semua window di layar.

cv.imshow("Foto", foto_gray)
cv.waitKey(0)
cv.destroyAllWindows()

Setelah foto siap, langkah berikutnya adalah kita aktifkan class pendeteksi obyek, yang di dalam OpenCV diberi nama CascadeClassifier. Seperti kita ketahui, pendeteksian wajah memerlukan training dataset berupa sebuah file XML. Untungnya, di dalam paket OpenCV telah tersedia training dataset standar yang berisikan ribuan sampel-sampel wajah yang bisa kita pakai. Ini cukup untuk eksperimen pertama kita di sini, adapun demikian training dataset ini tidak sepenuhnya lengkap dan tidak selalu berhasil mendeteksi wajah orang misalnya dari ras atau suku tertentu yang belum ada sampelnya. Dalam kasus seperti itu, kita harus membuat training dataset sendiri. Ini akan kita bicarakan di bagian lain artikel ini.

Training dataset standar yang disediakan OpenCV berada di file bernama haarcascade_frontalface_alt.xml. Lokasi file XML ini ada di folder /data/haarcascades/ di tempat Anda memasang OpenCV di komputer Anda (bila tidak bisa ditemukan, file XML ini juga bisa diunduh dari situs OpenCV). Perintah berikut akan memuat CascadeClassifier ke dalam variabel cc_wajah dengan menyertakan file XML yang disebut di atas:

cc_wajah = cv.CascadeClassifier('/data/haarcascade_frontalface_alt.xml')
if cc_wajah.empty():
    raise IOError('File XML tidak ditemukan!')

Pastikan bahwa file XML bisa sudah ada dan bisa diakses, sebab bilamana tidak, program akan berhenti dengan pesan error file tidak bisa ditemukan. Pada titik ini kita sudah siap untuk menjalankan pendeteksian wajah. Kita panggil method/fungsi detectMultiScale dengan memasukkan foto grayscale yang sudah kita persiapkan sebelumnya:

hasil = cc_wajah.detectMultiScale(foto_gray, scaleFactor=1.1, minNeighbor=5)

Apa arti parameter scaleFactor=1.1 di atas? Ini adalah konstanta yang bila kita ubah, apabila semakin tinggi angkanya maka proses deteksi akan lebih cepat namun demikian melemahkan kehandalannya (semakin kecil kemungkinan deteksi berhasil). Secara umum, Anda bisa bereksperimen dengan mengubah-ubah angka ini dari 1,0 hingga 3,0 dan perhatikan efeknya terhadap akurasi dan kecepatan proses deteksi.

Parameter kedua yaitu minNeighbor=5 juga menentukan akurasi deteksi. Semakin rendah nilai ini, semakin besar kemungkinan obyek yang bukan wajah dideteksi sebagai wajah (false positive yang tinggi), sebaliknya bila nilainya tinggi, semakin besar kemungkinan ada wajah lolos dari deteksi (false negative yang tinggi). Anda bisa bereksperimen dengan angka ini untuk mendapatkan akurasi yang sesuai.

Setelah perintah di atas dijalankan, akan terbentuk sebuah List (variabel hasil) yang berisi kumpulan wajah yang berhasil terdeteksi di dalam gambar. Bila program tidak berhasil mendeteksi adanya waja, variabel hasil akan kosong. Mari kita lihat isinya, apakah kosong atau berisi nilai:

print(hasil)
[[137 106 177 177]]

Terlihat bahwa proses deteksi wajah telah berhasil dan tidak kosong. Karena variabel hasil adalah sebuah List, dari sini kita bisa menghitung ada berapa orang yang wajahnya terdeteksi di dalam gambar dengan menampilkan jumlah elemen dalam List:

jumlah_wajah = len(hasil)
print("Terdeteksi", jumlah_wajah, "orang di dalam gambar")

Untuk setiap obyek (wajah) yang terdeteksi, akan diwakili oleh empat angka (posisi sumbu x, posisi sumbu y, lebar dan tinggi) yang membentuk wilayah berupa persegi panjang di dalam gambar. Keempat angka ini bisa kita ambil dari List sebagai variabel x,y, w dan h, kemudian kita visualkan berupa persegi panjang dengan bantuan fungsi rectangle() yang disediakan OpenCV.

x =(hasil[0][0])
y =(hasil[0][1])
w =(hasil[0][2])
h =(hasil[0][3])
cv.rectangle(foto, (x,y), (x+w,y+h), color=(0,255,0), thickness=6)

Hasil deteksi wajah selain ditampilkan ke layar dengan fungsi imshow() juga disimpan ke sebuah file dengan fungsi imwrite(). Agar program tidak langsung berakhir, fungsi waitKey() dipergunakan untuk menunggu pengguna komputer menekan sembarang tombol di keyboard sebelum program berlanjut ke perintah selanjutnya. Fungsi destroyAllWindows() membersihkan memori layar dengan menutup semua window. Bila program berikut dijalankan, hasilnya akan muncul di layar:

cv.imshow("Foto", foto)
cv.imwrite('hasil_deteksi.jpg', foto)
cv.waitKey(0)
cv.destroyAllWindows()

Program kita sukses mendeteksi wajah Presiden Soeharto. Perhatikan bahwa parameter thickness=6 menentukan tebal garis (bila Anda rasa garis kotak terlalu tebal, angka ini bisa dikurangi). Parameter color=(0,255,0) menghasilkan kotak berwarna hijau karena ketiga angka tersebut mewakili nilai warna RGB dengan R (red) = 0, G (green) = 255 dan B (blue) = 0. Anda bisa ubah warna ini misalnya menjadi warna merah dengan membuat R=255, G=0 dan B=0.

Contoh gambar di atas hanya berisikan wajah satu orang saja. Bagaimana bila ada lebih dari satu orang di dalam gambar? Seperti sudah dijelaskan sebelumnya, variabel hasil adalah sebuah List yang berisi seluruh wajah yang berhasil dideteksi. Agar lebih jelas, kita ganti file gambar dengan gambar berisi lebih dari satu orang. Kita ambil foto lain sebagai contoh yang berisikan tokoh-tokoh penting (foto dapat diunduh dari lokasi ini).

Sebelum kita lanjutkan, program harus diubah dengan mempergunakan for-loop untuk mengakses semua informasi wajah dari List yang dihasilkan oleh proses deteksi, kemudian masing-masing ditandai dengan gambar kotak:

import cv2 as cv
cc_wajah = cv.CascadeClassifier('haarcascade_frontalface_alt.xml')
if cc_wajah.empty():
   raise IOError('File XML tidak bisa ditemukan!')
foto = cv.imread('tokoh1.jpg')
foto_gray = cv.cvtColor(foto, cv.COLOR_BGR2GRAY)
hasil = cc_wajah.detectMultiScale(foto_gray, scaleFactor=1.2, minNeighbors=5)
print("Terdeteksi ", len(face_rects), " orang di dalam gambar:")
for (x,y,w,h) in hasil:
    cv.rectangle(foto, (x,y), (x+w,y+h), color=(0,255,0), thickness=5)
cv.imshow('Deteksi Wajah', foto)
cv.imwrite('hasil_deteksi.jpg', foto)
cv.waitKey(0)
cv.destroyAllWindows()

Video

Agar lebih menarik lagi, kita akan mencoba membuat program yang melakukan proses deteksi wajah dengan masukan berupa video, sehingga proses deteksi berjalan terus tanpa henti. Untuk mudahnya, kita akan mempergunakan webcam yang hampir selalu ada di setiap laptop. OpenCV menyediakan class untuk menangkap video yaitu VideoCapture(). Webcam diwakili oleh angka nol sebagai parameter saat mengaktifkan kelas ini.

Secara garis besar tidak ada perubahan pada program Python yang sudah kita buat, hanya kita ganti masukan gambar dari pembacaan file menjadi pembacaan video yang dilaksanakan oleh fungsi read() di dalam suatu while-loopyang menangkap satu frame di setiap iterasi dan diulang terus. Agar program dapat kita hentikan, user bisa menekan tombol ESC (kode 27) untuk membuat program keluar dari while-loop tersebut.

Satu catatan penting adalah untuk menulis dan menjalankan program ini disarankan tidak mempergunakan Jupyter Notebook, namun mempergunakan Python interpreter seperti IPython karena fungsi video sulit ditampilkan di Jupyter Notebook.

import cv2 as cv
cc_wajah = cv.CascadeClassifier('haarcascade_frontalface_alt.xml')
if cc_wajah.empty():
    raise IOError('File XML tidak bisa ditemukan!')
webcam1 = cv.VideoCapture(0)
while True:
    ret, frame = webcam1.read()
    frame = cv.resize(frame, None, fx=0.8, fy=0.8, interpolation=cv.INTER_AREA)
    frame_gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    hasil = cc_wajah.detectMultiScale(frame_gray, 1.1, 5)
    for (x,y,w,h) in hasil:
        cv.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 5)
    cv.imshow('Face Detection', frame)
    tombol = cv.waitKey(1)
    if tombol == 27:
        break
webcam1.release()
cv.destroyAllWindows()

Perhatikan bahwa kita menambahkan fungsi resize() dengan tujuan memperkecil ukuran gambar video menjadi 80% saja. Anda bisa ubah nilai ini sesuai kebutuhan.

Anda juga bisa mengganti webcam dengan file video, atau bisa juga dengan kamera IP / CCTV sebagai sumber video. Syaratnya, kamera tersebut mendukung protokol streaming RSTP atau HTTP. Dalam buku ini penulis mempergunakan kamer IP merk “TP-Link” yang bisa diakses melalui HTTP. Untuk itu kita ganti panggilan ke VideoCapture() dengan alamat IP dari kamera yang ingin kita akses, seperti contoh di bawah ini:

webcam1 = cv.VideoCapture('http://admin:pwd@192.168.1.112/?action=stream')

Melatih Pengenalan Obyek

Tidak terbatas pada pendeteksian wajah, kita bisa melatih CascadeClassifier dengan obyek-obyek lain, misalnya logo, mobil, hewan dan sebagainya. Syaratnya, kita harus menyiapkan training dataset berupa sebanyak-banyaknya sampel positif berupa gambar obyek yang ingin kita deteksi dan juga sebanyak-banyaknya sampel negatif.

Untuk keperluan training, OpenCV menyediakan dua program yaitu opencv_createsamples dan opencv_traincascade. Keduanya ada di folder tempat OpenCV dipasang di disk Langkah pertama dalam proses training adalah memanfaatkan program opencv_createsamples untuk menghasilkan sampel positif berbentuk file berekstensi .vec yang kemudian dipergunakan untuk training oleh program opencv_traincascade.

Sampel positif yang diperlukan harus mencakup berbagai variasi posisi, sudut kemiringan, atau variasi latar belakang. Ini diperlukan untuk memperkuat kemungkinan pendeteksian berhasil.

Kita ingat bahwa algoritma berbasis Haar Cascade memanfaatkan perbedaan intensitas cahaya di dalam gambar sebagai dasar penentuan feature. Oleh karena itu gambar sampel obyek yang kita persiapkan haruslah obyek yang memang memiliki banyak sudut atau lekukan yang kontras perbedaan intensitas terang-gelapnya. Gambar yang sedikit garis kontrasnya, terlalu terang atau terlalu gelap akan kurang baik dijadikan sampel.

Semua file gambar yang berisi sampel positif harus didaftarkan dalam sebuah file text, yang berisikan semua file JPEG atau PNG beserta informasi lokasi obyek dalam gambar (berupa wilayah kotak persegi empat). File text tersebut isinya berformat sebagai berikut:

Contohnya kita buat sebuah file bernama obyek1.txt yang isinya seperti di bawah:

Penentuan lokasi wilayah kotak memang memerlukan proses manual, biasanya dengan perangkat pengolah gambar. Di sinilah diperlukan tenaga dan waktu yang tidak sedikit.

Bila sampel sudah siap, program opencv_createsamples bisa dipanggil dengan menyertakan parameter seperti berikut:

opencv_createsamples -info obyek1.txt -w 50 -h 50 -vec obyek1.vec

Parameter pertama -info menentukan file yang berisikan informasi sampel positif yang sudah kita buat. Parameter -w dan -h menentukan lebar dan tinggi sampel (dalam pixel). Keluaran program ini adalah file obyek1.vec yang berformat biner, dan akan dipergunakan untuk proses training.

Setelah sampel positif didapatkan, berikutnya kita harus persiapkan juga sampel negatif. Cara yang paling tepat adalah mempergunakan gambar yang persis dengan sampel positif namun obyek yang kita hendak deteksi dihilangkan dari gambar. Bila kita ingin mendeteksi buah apel di meja, maka sampel positifnya adalah foto meja beserta buah apel, sedangkan sampel negatifnya adalah meja tanpa buah apel.

Selain itu ada aturan tidak baku yaitu jumlah sampel negatif harus lebih banyak dari sampel positif, setidaknya dua kali lipat lebih banyak. Bila ada 1.000 sampel positif, maka perlu disediakan setidaknya 2.000 sampel negatif.

Semua file gambar sampel negatif harus diletakkan di satu folder terpisah, dan nama-namanya didaftarkan dalam sebuah file text. Karena tidak ada obyek yang perlu dikenali, maka kita tidak perlu menentukan wilayah persegi empat seperti di sampel positif.

Proses training dilakukan dengan memanggil program opencv_traincascade, dengan parameter seperti berikut ini:

opencv_traincascade -data /home/diosk/samples -vec obyek1.vec -bg neg-filepaths.txt -precalcValBufSize 2048 -precalcIdxBufSize 2048 -numPos 100 -numNeg 1000 -nstages 20 -minhitrate 0.999 -maxfalsealarm 0.5 -w 20 -h 20 -nonsym -baseFormatSave

Parameter -data menentukan folder tempat file sampel berada. Parameter -numPos adalah jumlah sampel positif (dalam contoh ini ada 100) dan -numNeg adalah jumlah sampel negatif (dalam contoh ini ada 1000). Parameter lainnya dapat diubah-ubah dengan eksperimen untuk mendapatkan hasil terbaik. Hasil keluaran program ini adalah sebuah file bernama cascade.XML yang kemudian bisa dipakai untuk program pendeteksian.

Membuat training dataset memang sebuah proses yang tidak ringan, karena umumnya diperlukan ratusan hingga ribuan sampel positif dan negatif. Mengerjakannya dengan tangan satu-per-satu akan memerlukan waktu sangat lama. Ada trik sederhana yaitu mempergunakan kamera video untuk merekam obyek yang sama dari berbagai sudut dan pencahayaan, kemudian dengan perangkat lunak video editor kita ambil frame yang diperlukan. Dengan cara ini, kita bisa mendapat puluhan bahkan ratusan sampel positif dalam sekali pengambilan gambar.

Kesimpulan

Computer Vision adalah cabang ilmu yang masih terus berkembang dan sangat menarik untuk dipelajari. Selain Haar Cascade, ada classifier lain yang cukup sering dipergunakan yaitu Local Binary Pattern (LBP). Berikut adalah perbandingan keunggulan dan kelemahan masing classifier:

Teknologi pendeteksian dan pengenalan wajah meskipun terus berkembang, penerapannya di dunia nyata sering mendapat sorotan tajam karena rentan disalahgunakan. Tidak seperti teknologi pengenalan biometrik lain misalnya sidik jari, pengenalan wajah bisa dilakukan dari jauh tanpa kontak fisik, tanpa seijin orang yang sedang diidentifikasi.

Bayangkan bila wajah Anda ditangkap kamera di jalanan dan perusahaan periklanan tertentu memanfaatkan identitas Anda untuk mengirimkan iklan tanpa ijin Anda. Kepolisian bisa menangkap seorang warga atas tuduhan kriminal berdasarkan pengenalan wajah yang dihasilkan komputer, yang kita tahu belum 100% akurat. Dalam kasus yang lebih ekstrim, Pemerintah China dikabarkan mepergunakan teknologi ini untuk keperluan politis, misalnya mengawasi etnik minoritas tertentu di wilayahnya. Itu sebabnya Microsoft di bulan Juni 2019 menghapus jutaan file wajah dari databasenya yang bernama MS-Celeb atas dasar kurangnya regulasi pemerintah yang mengatur penggunaan teknologi facial recognition.

Computer Vision memang bidang yang menarik untuk didalami, adapun begitu kita harus memanfaatkannya dengan penuh kehati-hatian. Pastikan kita tidak mengganggu privacy orang lain ketika kita memanfaatkan identitasnya untuk keperluan pembuatan model Machine Learning.

Belajar dari Data

January 2020 | Dios Kurniawan

**NOTE: This article is part of my upcoming book and is still written in Bahasa Indonesia. I will provide the English version as soon as possible **

Sadarkah kita bahwa di masa kini, setiap langkah manusia modern dalam kesehariannya selalu meninggalkan digital footprint (jejak digital) di mana-mana? Di dunia yang serba digital saat ini, banyak aspek kehidupan kita dalam aktivitas sehari-hari yang telah direkam ke dalam sistem komputer. Bank menyimpan data transaksi perbankan Anda, toko-toko online menyimpan sejarah belanja Anda, jaringan telepon selular mencatat kemana saja Anda pergi, media sosial mencatat interaksi Anda dengan teman Anda, apa yang Anda bicarakan dan Anda sukai, layanan music streaming mencatat jenis lagu selera Anda, ojek online mencatat perjalanan dan pesanan makanan Anda, dan seterusnya. Suka tidak suka, data tentang kehidupan Anda berceceran di mana-mana.

Salah satu yang menjadi pencetus begitu banyaknya data yang dihasilkan manusia adalah ponsel pintar. Dengan semakin luasnya penggunaan ponsel pintar yang selalu tersambung ke internet, semakin tinggi pula intensitas manusia dalam menghasilkan data. Sebuah laporan riset yang dikeluarkan oleh DOMO[2] menyebutkan bahwa di tahun 2020 rata-rata setiap manusia di bumi menghasilkan data sebesar 1,7 MB per detik. Kelihatannya kecil, tapi jangan lupa, ada 86,400 detik dalam sehari dan ada tujuh milyar lebih manusia di bumi!

Tidak hanya dihasilkan oleh aktivitas manusia, data juga dihasilkan oleh mesin-mesin, sensor-sensor, dan peralatan-peralatan elektronik lainnya. MGD (machine-generated data, data yang dihasilkan oleh mesin) memiliki potensi manfaat yang tinggi karena tidak mendapat pengaruh campur tangan manusia (emosi, subyektivitas, dan sebagainya). MGD yang dihasilkan di dunia cenderung semakin besar dari hari ke hari. Menurut hasil riset yang dilakukan IDC[3], pada tahun 2025, 30% data yang ada di dunia akan dihasilkan oleh mesin, bukan oleh manusia.

Singkatnya, dunia kita akan dibanjiri oleh data yang tersimpan di beragam macam sistem komputer. Itu sebabnya Big Data, yaitu data dalam skala yang amat besar, sudah menjadi istilah yang sering disebut sejak awal dekade ini.

Data yang banyak ini harus kita apakan? Meskipun kita memiliki sangat banyak data, semua tidak akan bermanfaat kecuali kita bisa menggali nilai-nilai yang terkandung di dalamnya. Data yang tidak dimanfaatkan hanya akan menumpuk di dalam sistem komputer, menghabiskan media penyimpan tanpa guna. Di sinilah perlunya ilmu Data Science untuk membantu mendapatkan manfaat dari data.

Dalam bahasa yang paling sederhana, Data Science adalah ilmu multidisipliner yang mempelajari tentang upaya mendapatkan pemahaman yang lebih dari berbagai macam data. Tujuannya agar didapatkan kesimpulan dari informasi yang terkandung di dalam data, sehingga orang dapat mengambil keputusan – dan tindakan – yang tepat.

Ada pula yang menyebut ilmu ini dengan istilah Data Analytics, di mana batas pemisahnya memang tidak terdefinisi dengan jelas. Adapun demikian, di dalam buku ini kita menganggap Data Science memiliki lingkup yang lebih luas dari Data Analytics. Data Analytics lebih difokuskan pada memecahkan permasalahan atau menjawab pertanyaan tertentu yang spesifik. Data Analytics berusaha memberikan kesimpulan dari apa yang sudah diketahui sebelumnya. Berbeda dengan Data Science yang berupaya menghasilkan pemahaman lebih luas, yaitu menemukan hal-hal penting apa saja yang terkandung di dalam data, dan hal-hal yang potensial bisa dijadikan pertanyaan lebih lanjut.

Mungkin Anda bertanya, apa manfaat Data Science sebenarnya dalam kehidupan kita sehari-hari? Jawabannya bisa beragam. Data Science telah umum dipergunakan secara sistematis oleh dunia industri khususnya perusahaan besar untuk berbagai kepentingan misalnya untuk kegiatan pemasaran digital, merancang produk baru, atau meningkatkan kualitas layanan kepada pelanggan. Data Science juga banyak dipergunakan oleh banyak organisasi di bidang kesehatan, bidang ilmiah dan bidang penyusunan kebijakan publik. Adapun demikian, motivasi utama Data Science lebih sering adalah untuk monetisasi (mendapatkan keuntungan finansial), karena informasi yang bernilai tinggi dapat menghasilkan banyak uang. Data bisa dieksploitasi untuk menghasilkan keuntungan bisnis, dan bahkan sering menjadi produk bisnis itu sendiri – ada banyak perusahaan yang penghasilan terbesarnya justru dari menjual data.

Apakah hanya organisasi atau perusahaan besar saja yang bisa mempraktekkan Data Science? Tentu tidak. Usaha kecil dan menengah pun bisa jadi memiliki cukup banyak data yang berpotensi nilai tinggi. Transaksi penjualan toko, penjualan obat di apotik, atau penjualan restoran adalah contoh-contoh data yang meskipun tidak termasuk Big Data namun tetap bisa sangat berguna untuk upaya peningkatan usaha.  

Di masa kini telah tersedia banyak pilihan perangkat lunak yang telah dikembangkan untuk membantu pekerjaan mereka yang bergelut di bidang Data Science. Kita dapat memilih apakah hendak mempergunakan perangkat lunak komersial (yang berbayar) atau perangkat lunak open-source (sumber terbuka), dengan kelebihan dan kekurangan masing-masing.

Dengan relatif murahnya perangkat keras dan perangkat lunak serta begitu banyaknya materi belajar di internet, saat ini Data Science bukanlah ilmu yang eksklusif lagi dan bisa diakses oleh orang kebanyakan. Pendeknya, tanpa memperhatikan latar belakang pendidikan, siapapun yang memiliki laptop dan kemauan untuk belajar yang tinggi, sekarang bisa mencoba algoritma Data Science canggih tanpa kesulitan berarti. Dengan upaya yang lebih serius, setiap orang bisa menerapkan model-model praktis untuk memecahkan problematika bisnis maupun ilmiah, tanpa perlu gelar di bidang matematika atau ilmu komputer.

Adapun demikian tetap diperlukan orang-orang profesional yang memang fokus di bidang Data Science. Data Scientist adalah profesi bagi mereka yang memiliki latar belakang pendidikan matematika, statistik atau ilmu komputer, memiliki pengetahuan mendalam tentang pemrograman (umumnya dengan Python, R, Java atau Scala), serta memiliki pemahaman mendalam akan bidang industri yang digeluti (disebut juga domain expertise). Perlu pengalaman bertahun-tahun sebelum seseorang bisa disebut sebagai Data Scientist. Tidak jarang Data Scientist profesional adalah mereka yang sudah mengenyam jenjang pendidikan master atau doktor.

Data Scientist memang profesi yang relatif masih muda usianya (sepuluh tahun lalu pun orang masih belum banyak mengenal profesi ini), namun saat ini sudah menjadi suatu peran yang sangat dibutuhkan dan berbayaran tinggi. Menurut laporan LinkedIn[4], Data Science merupakan keahlian yang memiliki masa depan paling menjanjikan. Dunia industri bersedia membayar banyak untuk mendapatkan Data Scientist yang berpengalaman untuk memecahkan masalah big data mereka yang semakin hari semakin kompleks. Data Science adalah pilihan karir yang menarik.

Meniru Cara Belajar Manusia

Manusia secara alamiah mempergunakan panca indera yaitu mata, telinga, hidung, lidah dan saraf kulit untuk menangkap hal-hal yang ada di sekitarnya dan kemudian “data mentah” ini dikirimkan ke otak untuk diterjemahkan menjadi konsep-konsep yang sudah dikenal misalnya barang, orang, udara dingin, bau harum, rasa sedap makanan, dan sebagainya. Dengan teknologi, cara kerja manusia inilah yang dalam beberapa hal ingin dicoba ditiru agar bisa diterapkan dalam komputer untuk memudahkan pekerjaan manusia.

Machine learning adalah ilmu yang mempelajari tentang algoritma komputer yang bisa mengenali pola-pola di dalam data, dengan tujuan untuk mengubah beragam macam data menjadi suatu tindakan yang nyata dengan sesedikit mungkin campur tangan manusia. Dengan Machine Learning, kita dapat menciptakan mesin (komputer) yang “belajar” dari data yang ada, selanjutnya dia bisa membuat keputusan secara mandiri tanpa perlu diprogram lagi. Secara umum Machine Learning berada di bawah payung Artificial Intelligence / AI, (kecerdasan buatan).

Walaupun teknologi kecerdasan buatan terus berkembang pesat, mesin yang benar-benar bisa belajar dan “lebih cerdas” dari manusia masih jauh dari kenyataan. Sebenarnya mesin hanya mencari pola dari sejumlah data yang diberikan kepadanya, kemudian mengubah program di dalam dirinya agar mengikuti pola yang telah ditemukan. Bila pola-polanya terkumpul cukup banyak, maka program akan bisa membuat prediksi matematis terhadap apa yang akan datang. Jadi, mesin masih sebatas melakukan pattern matching (pencocokan pola).

Kita bisa beragumentasi bahwa komputer memiliki memori dan kemampuan proses matematis yang jauh lebih cepat dari manusia, namun kecepatan bukanlah kecerdasan. Salah satu perbedaan utama manusia dengan mesin adalah hingga hari ini, belum ada mesin yang bisa mengajari mesin yang lain, seperti halnya manusia bisa mengajari ilmu baru kepada manusia lain.

Lalu apa bedanya Machine Learning dengan Data Science? Batasannya belum disepakati semua orang. Keduanya memiliki sejarah dan tujuan yang berbeda, namun antara kedua bidang ilmu ini banyak beririsan. Adapun untuk mudahnya, kita bisa melihat Machine Learning sebagai bidang yang melengkapi ilmu Data Science. Data Science memiliki cakupan yang lebih luas dan memanfaatkan ilmu komputer, matematika, statistik dan Machine Learning untuk mencapai tujuannya.

Di dunia industri, sekarang muncul para profesional yang disebut sebagai Machine Learning Engineer. Pekerjaan mereka berfokus pada rekayasa perangkat lunak untuk menerapkan algoritma Machine Learning sehingga bisa bekerja pada lingkungan produksi. Mereka membuat program yang mengubah model eksperimental yang dibangun para Data Scientist menjadi berskala besar, bisa mengolah data yang mengalir dengan cepat dan hasilnya bisa dipakai di kegiatan nyata. Ini berbeda dengan Data Scientist yang tugasnya lebih condong pada pekerjaan analisis statistik dan matematis. Adapun demikian, dalam buku ini kita akan mempergunakan istilah Data Scientist saja untuk mengacu pada para profesional di kedua bidang Data Science dan Machine Learning, karena tidak jarang seorang Data Scientist harus berperan sebagai Machine Learning Engineer juga.

Selain itu, ada pula disiplin ilmu serupa yaitu Data Mining yang mempelajari tentang metode untuk menghasilkan pengetahuan dengan mengenali pola-pola dari data yang berjumlah besar, yang bila mempergunakan mata manusia belaka akan sukar dilakukan.

Meskipun mirip, Data Mining tidak sama dengan Machine Learning. Ada irisan antara keduanya yang masih belum terlalu jelas, namun untuk mudah diingat, Machine Learning lebih bertujuan untuk membangun sistem yang melakukan pekerjaan-pekerjaan spesifik secara otomatis, misalnya mesin untuk mengenali gambar, mesin untuk pendeteksi transaksi kartu kredit yang mencurigakan, atau mesin pemberi rekomendasi produk apa yang cocok bagi seorang pelanggan. Sementara itu Data Mining lebih merupakan pekerjaan analisis untuk mencari pola-pola tersebunyi di dalam data untuk membantu pembuatan keputusan, misalnya mencari pola belanja pelanggan pasar, atau memperkirakan berapa calon pelanggan yang akan membeli suatu produk.

Data mining memerlukan banyak peranan manusia di setiap langkah, berbeda dengan Machine Learning yang memerlukan keterlibatan manusia sekali saja di awal dan selanjutnya berlangsung otomatis. Keduanya saling membutuhkan; bila Anda mengerjakan Data Mining, maka kemungkinan besar Anda akan memerlukan metode-metode Machine Learning. Kebalikannya, Machine Learning bisa jadi memerlukan Data Mining untuk mendapatkan data yang sesuai keperluannya.

Proses-proses di Dalam Machine Learning

Untuk dapat berhasil membuat mesin yang berkemampuan Machine Learning, diperlukan adanya tiga komponen dasar: algoritma matematis, prosesor komputer dan data. Ketiganya harus tersedia di waktu yang sama, karena tanpa prosesor komputer, algoritma matematis tidak akan bisa diimplementasikan. Hal yang sama terjadi bila data tidak tersedia, maka algoritma matematis macam apapun tidak akan bisa menghasilkan sesuatu.

Ketiga komponen tersebut masing-masing juga saling memacu perkembangan komponen yang lain. Di masa kini, teknologi prosesor komputer setiap hari semakin maju sehingga kemampuan pemrosesan data semakin hari semakin kuat, yang memungkinkan pengolahan data yang semakin besar yang pada gilirannya mendorong riset dan pengembangan algoritma dan metode matematis baru yang semakin kompleks. Data yang semakin besar juga mendorong pengembangan teknologi prosesor, demikian seterusnya.

Suatu mesin dapat dikatakan “belajar” apabila mesin tersebut dapat menggunakan data yang diberikan kepadanya untuk meningkatkan kualitas keluaran mesin secara bertahap. Ini mirip dengan cara belajar manusia, yaitu mempergunakan pengalaman di masa lalu untuk memperbaiki cara kerjanya sehingga bila menjumpai situasi serupa di masa depan, reaksi manusia akan lebih baik. Manusia (umumnya) bisa belajar dari pengalaman buruk agar tidak ingin jatuh ke lubang yang sama. Bila Anda sudah tahu dari pengalaman bahwa mengendarai mobil pribadi di Jalan Raya Jenderal Sudirman pada saat jam sibuk hari Jumat sore ternyata membuat Anda terjebak kemacetan parah, maka secara alamiah Anda akan memilih jalur lain yang lebih lancar atau naik kendaraan umum di hari Jumat minggu berikutnya. Otomatis otak kita membuat “algoritma” sendiri.

Ada banyak algoritma Machine Learning yang sudah diciptakan untuk keperluan yang berbeda-beda, namun semuanya mengikuti prinsip yang sama yaitu meniru (atau berusaha meniru) cara manusia belajar. Secara umum, ada tiga langkah penting dalam proses belajar:

  1. Pengumpulan Data, misalnya data hasil pengukuran dari transaksi, sensor-sensor, catatan-catatan, tulisan, angka, gambar, suara dan sebagainya. Dalam terminologi komputer, dataset adalah sekelompok data yang memiliki keterkaitan satu sama lain yang dapat dimanipulasi oleh komputer sebagai satu kesatuan.
  2. Abstraksi, yaitu proses yang menterjemahkan data-data menjadi suatu model yang lebih umum (mengenai apa definisi model akan dibahas di bawah ini).
  3. Generalisasi, yaitu proses yang mempergunakan model hasil abstraksi sebagai dasar pembuatan keputusan atau kesimpulan.

Sebagai contoh yang lebih mudah dipahami, ketika Anda hendak melakukan perjalanan dari suatu tempat ke tempat yang lain dengan kendaraan, Anda tidak mencoba mengingat pada detik atau menit ke berapa Anda berbelok ke kiri, kemudian pada detik atau menit ke sekian berbelok ke kanan, dan seterusnya.

Cara yang lebih masuk akal adalah Anda mempergunakan tanda-tanda yang ada di jalanan untuk diingat sebagai tanda kapan harus berbelok kanan, kapan berjalan lurus, kapan berbelok kiri dan seterusnya.  Otak Anda mencoba mempergunakan data-data dari indera mata Anda ke dalam suatu konsep umum yang lebih mudah dipahami dan diingat. Inilah proses abstraksi.

Kemudian Anda melakukan generalisasi, yaitu mempergunakan ingatan itu pada saat Anda harus menjalani lagi tugas yang serupa. Jadi ketika Anda harus melakukan perjalanan menuju tempat yang sama, Anda kemungkinan besar tetap bisa sampai di tujuan meskipun berangkat dari tempat yang berbeda, atau berjalan kaki, bukan naik kendaraan.

Contoh lain adalah ketika Anda di jalan raya melihat sebuah mobil bermerk baru yang belum pernah Anda lihat sebelumnya. Meskipun ini adalah pertama kalinya Anda melihat mobil tersebut, Anda sudah dapat menyimpulkan bahwa barang tersebut adalah sebuah mobil, dikarenakan Anda sudah memiliki ingatan di dalam otak Anda sebagai hasil proses abstraksi di masa lalu terhadap beragam obyek yang pernah Anda lihat. Bila ada barang beroda empat, memiliki pintu-pintu dan jendela kaca, dengan sepasang lampu depan-belakang, maka barang itu memenuhi syarat sebagai sebuah mobil sehingga Anda pun akan mempercayai bahwa yang Anda lihat adalah sebuah mobil. Anda tidak memasukkan data-data yang tidak relevan misalnya warna cat mobil atau warna kaca mobil ke dalam memori Anda.

Di sinilah muncul konsep yaitu model. Dalam contoh di atas, otak Anda telah membuat model untuk benda bernama mobil, dan model itu diterapkan pada panca indera Anda saat melihat obyek baru. Rangsangan visual akan dicocokkan dengan beragam model di otak Anda, sehingga Anda dapat membuat kesimpulan mengenai obyek yang sedang Anda lihat.

Contoh lain: bila Anda sudah pernah menikmati hidangan ayam goreng, berarti lidah dan hidung Anda sudah pernah pula memberikan data-data ke memori otak Anda mengenai citarasa dan aroma ayam goreng. Data-data ini sudah disimpan di dalam otak Anda sebagai model bernama “ayam goreng”. Jadi meskipun seandainya mata Anda ditutup, tidak melihat ke makanan yang sedang disantap, data dari lidah dan hidung Anda beserta model di memori otak Anda sudah cukup untuk mengetahui makanan apa yang sedang Anda makan. Kalau berbau seperti ayam dan rasanya seperti ayam, kemungkinan besar Anda memang sedang makan ayam. Proses abstraksi dan generalisasi ini berlangsung dengan sendirinya di bawah kesadaran Anda.

Adapun tidak demikian untuk sebuah komputer. Semua proses harus diprogram secara jelas. Komputer sendiri tidak bisa membuat dan memilih model apa yang akan dipakai. Komputer harus “diajari” untuk menyimpulkan data-data mentah menjadi suatu model. Inilah yang disebut proses training, yaitu proses “pelatihan” membentuk suatu model berdasarkan suatu dataset (yang disebut training dataset).

Kita melatih model dengan tujuan agar model dapat menghasilkan kesimpulan baru berdasarkan data-data baru yang nantinya akan muncul. Dengan algoritma matematis, model dibuat fit (cocok) dengan training dataset. Semakin bagus kualitas training dataset, semakin bagus model yang dibangun.

Di dalam Machine Learning, model bisa berupa persamaan matematis, atau berupa aturan logis (misalnya “if-then-else”), bisa juga berupa diagram alur berbentuk tree(pohon). Algoritma yang dipergunakan untuk membangun model tentunya tetap harus ditentukan oleh manusia. Bisa kita umpamakan manusia adalah guru, dan mesin adalah murid. Murid hanya memodelkan struktur yang disediakan guru.

Saat model sudah dibangun dan dilatih, data sudah diubah menjadi bentuk abstrak yang merangkum semua informasi aslinya. Dengan bentuk yang abstrak, beragam hubungan di antara data menjadi bisa ditemukan, yang sebelumnya tidak terlihat.

Adapun demikian, proses belajar belum tuntas bilamana hasil proses abstraksi tidak dipergunakan untuk membuat tindakan. Di sinilah proses generalisasi terjadi. Model harus beradaptasi dengan data baru yang belum pernah diterima sebelumnya. Data-data baru yang diterima oleh mesin akan dicocokkan dengan pengetahuan abstrak yang sudah dimiliki untuk kemudian dijadikan suatu kesimpulan. Misalnya program pendeteksi transaksi ilegal di sebuah bank, program tersebut sudah memiliki model yang menggeneralisasi transaksi-transaksi jahat, dan membuat prediksi berupa peringatan ketika pola di data baru ada yang cocok dengan model itu.

Training Dataset

Agar algoritma Machine Learning dapat menjalankan proses belajar, kita perlu mempersiapkan training dataset sesuai dengan kasus yang ingin kita pecahkan. Ada beberapa macam data yang bisa dijadikan training dataset:

  • Structured data, yaitu data yang terstruktur dengan tipe data yang konsisten dan dapat disimpan dalam tabel berupa baris-baris dan kolom (oleh sebab itu biasa disebut data tabular).
  • Unstructured data yang tidak memiliki struktur tetap, misalnya teks, gambar, suara dan video.

Dalam buku ini, kita akan lebih memberi perhatian kepada kasus yang mempergunakan structured data, karena kebanyakan algoritma Machine Learning memerlukan data yang terstruktur. Adapun begitu tanpa memandang macam datanya, secara umum training dataset harus berisikan tiga macam input (masukan) yaitu:

  1. Example, yaitu rekaman yang menggambarkan satu obyek yang sedang diamati. Sebagai contoh, data transaksi penjualan di sebuah toserba adalah sekumpulan example. Dalam structured data, satu baris dalam tabel mewakili satu example, jadi satu transaksi pembelian adalah satu example.
  2. Feature, yaitu karakteristik atau atribut dari suatu example. Misalnya jenis, ukuran, warna, usia, dan beragam macam hasil pengukuran yang terkait dengan obyek yang sedang diamati. Feature bisa berupa elemen data yang bersifat continuous yaitu nilai numerik misalnya angka penjualan dan jumlah pelanggan. Feature bisa juga elemen data dalam bentuk sekumpulan kategori, misalnya jenis kelamin, kategori produk, kelompok penyakit, dan sebagainya. Feature yang berupa kategori seperti ini sering disebut dengan data-data nominal. Lebih khusus lagi, kategori berupa daftar yang berbentuk urutan tertentu (misalnya ukuran kecil/sedang/besar, atau usia anak/remaja/dewasa) disebut sebagai data ordinal. Sementara itu, feature yang berisi elemen data yang hanya memiliki dua kemungkinan nilai (misal ‘Ya’ atau ‘Tidak’) disebut binary feature.
  3. Target Feature (atau disebut juga label) yaitu feature yang ingin diketahui atau diprediksi nilainya dengan bantuan model Machine Learning. Target feature harus terdefinisi dengan baik karena algoritma Machine Learning memerlukannya untuk belajar membuat fungsi matematis yang memetakan hubungan antara feature yang ada dengan target yang ingin diprediksi. Contoh target feature yang umum:
    • Angka penjualan perusahaan
    • Angka pertumbuhan ekonomi dan angka inflasi
    • Jenis kelamin laki-laki atau perempuan
    • Kelompok usia penduduk (anak-anak, remaja, dewasa, tua)
    • Transaksi ilegal atau legal
    • Calon pembeli produk atau bukan calon pembeli produk
    • Pesan e-mail biasa atau e-mail sampah
    • Sentimen percakapan positif atau negatif
    • Transaksi kartu kredit yang jahat atau normal

Hal yang penting diperhatikan dalam adalah training dataset harus mencakup seluruh jangkauan nilai yang nanti akan diprediksi. Sebagai contoh, bila kita ingin memprediksi berapa suhu esok hari di suatu daerah, maka training dataset harus memiliki example yang mencakup seluruh jangkauan suhu yang pernah tercatat di daerah itu, misalnya dari 10°C hingga 35°C. Kita tidak bisa memprediksi sesuatu yang ada di luar jangkauan training dataset, misalnya -100°C.

Mengukur Kinerja Model

Setelah kita membangun model, kita tentu tidak bisa langsung memakainya. Kita harus tahu apakah model sudah baik atau belum, yaitu melakukan apa yang disebut dengan proses evaluasi atau validasi model. Bagaimana mengukur baik atau tidaknya sebuah model? Setelah suatu model dilatih dengan training dataset, model harus diuji dengan dataset baru (disebut test dataset) yang dipergunakan untuk mengukur kinerjanya. Proses memanfaatkan model dengan dataset baru disebut dengan proses scoring.

Ukuran terpenting baik-buruk sebuah model adalah seberapa akurat model tersebut bila dihadapkan dengan data baru. Dalam contoh model pendeteksi transaksi perbankan ilegal, harus diukur berapa banyak transaksi yang oleh model dikategorikan sebagai jahat memang benar-benar terbukti sebagai transaksi jahat. Bila model mendeteksi 100 transaksi jahat namun ternyata hanya 50 saja yang benar-benar transaksi jahat, jadi hanya separuh saja prediksi yang benar, maka model ini memiliki akurasi yang buruk karena tidak ada bedanya dengan deteksi acak atau asal-asalan belaka, seperti melempar koin ke udara dan melihat sisi mana yang menghadap ke atas ketika koin mendarat di tanah.

Dari mana kita bisa mendapatkan test dataset? Praktek yang biasa dilakukan adalah membagi dataset yang tersedia menjadi dua, yaitu training dataset dan test dataset. Test dataset jumlahnya lebih sedikit dari training dataset, umumnya sekitar 20% dari total seluruh example. Meskipun lebih sedikit, dalam pemilihan test dataset ini harus dipastikan bahwa isinya dipilih secara acak, jumlahnya cukup besar serta bisa mewakili keseluruhan populasi dataset.

Perlu diingat bahwa tidak ada model yang selalu sukses melakukan generalisasi semua data dengan tingkat akurasi yang selalu tinggi. Setiap macam algoritma Machine Learning memiliki kelebihan dan kelemahan masing-masing.

Salah satu penyebab mengapa model tidak selalu akurat adalah karena adanya noise, yaitu data yang bervariasi di luar kewajaran bila dibandingkan dengan data lain di dalam dataset yang sama. Terkadang noise diakibatkan oleh hal-hal yang tidak bisa dijelaskan secara pasti, namun lebih sering noise diakibatkan oleh kesalahan dalam pengukuran (misalnya alat ukur yang belum dikalibrasi), atau data yang tidak terekam dengan baik misalnya elemen data hilang, terpotong, atau null (kosong). Bisa juga noise dihasilkan oleh manusia, misalnya dalam suatu survei, responden yang mengisi survei tidak memberikan jawaban yang tepat (karena salah membaca, terburu-buru, atau kelelahan) sehingga hasilnya menjadi tidak masuk akal ketika dibandingkan dengan hasil survei dari responden lain.

Bila kita melatih model dengan terlalu banyak noise di dalam training dataset, kita akan menemukan masalah yang disebut overfitting. Karena noise adalah fenomena yang acak dan tidak bisa dijelaskan secara pasti, noise akan membuat pola sesungguhnya di dalam data menjadi kabur dan tidak jelas. Model yang overfit akan nampak bagus dalam proses training namun ketika diuji dengan test dataset kinerjanya akan merosot. Itu sebabnya kita harus sebisa mungkin menghilangkan noise dari training dataset sebelum membuat model.

Predictive Model

Dalam bahasa ilmiah, prediction (prediksi) yaitu perkiraaan apa yang akan terjadi di masa depan (tentunya dilakukan secara matematis, bukan dengan ilmu gaib). Prediksi bisa didapat berdasarkan pengetahuan dan pengalaman di masa lalu. Sebagai contoh bila kita ingin memprediksi bagaimana cuaca esok hari di sebuah kota maka kita perlu terlebih dahulu mendapatkan data iklim dan pola cuaca di daerah itu untuk tahun-tahun sebelumnya. Bila kita ingin memperkirakan berapa laba perusahaan bulan depan, maka kita memerlukan data-data penjualan dan pengeluaran perusahaan di masa sebelumnya. Karena dipakai sebagai dasar membuat prediksi, data-data ini disebut predictor.

Hampir mirip dengan prediksi, bila kita ingin membuat perkiraan terhadap apa yang telah terjadi, maka yang kita lakukan adalah membuat estimasi. Contohnya adalah membuat estimasi berapa tinggi badan seseorang, atau membuat estimasi berapa jarak yang telah ditempuh sebuah kendaraan.

Predictive model, seperti namanya, dipergunakan untuk memecahkan persoalan-persoalan yang memerlukan prediksi dan estimasi. Algoritma Machine Learning akan mencoba mencari hubungan antara target feature (yang ingin diprediksi) dan feature yang lain yang tersedia di dalam dataset. Perlu dipahami bahwa perbedaan antara prediksi dan estimasi secara matematis sebenarnya tidak ada, sehingga bisa kita pergunakan model yang sama.

Selain dipergunakan untuk membuat prediksi nilai-nilai numerik, predictive model bisa dipergunakan juga untuk melakukan kategorisasi, artinya menentukan suatu example masuk ke dalam kategori yang mana (dalam bidang Machine Learning, kategori disebut juga dengan istilah class). Prediksi seperti ini disebut dengan classification (klasifikasi), dan modelnya disebut classification model. Contoh classification antara lain:

  • Cuaca diperkirakan cerah, berawan, hujan, atau hujan badai
  • Pelanggan dikelompokkan ke golongan pelanggan baru, pelanggan biasa, atau pelanggan setia
  • Pasien dinilai beresiko rendah atau tinggi mendapat serangan jantung
  • E-mail dipisahkan antara spam (berisi pesan sampah) dan yang bukan.

Agar dapat membuat prediksi, predictive model harus diberi petunjuk yang jelas tentang apa yang harus diprediksi, juga bagaimana caranya belajar agar modelnya bisa terbentuk. Ibarat seorang murid yang perlu bimbingan dan pengawasan, proses training seperti ini disebut supervised learning. Pengawasan di sini tidak berarti secara harfiah diawasi oleh manusia, namun artinya manusia harus mempersiapkan apa yang disebut ground truth, yaitu data lengkap hasil pengamatan di dunia nyata yang akan dijadikan masukan bagi dasar proses belajar. Data lengkap ini berisi featurefeature dan target feature. Tugas mesin adalah menemukan fungsi matematis yang paling bisa menggambarkan hubungan antara feature dan target feature-nya.

Hasil keluaran model juga harus dievaluasi oleh manusia agar kemudian dapat dilakukan langkah-langkah untuk membuat model menjadi lebih baik lagi, dengan melihat feature yang mana saja yang paling berpengaruh terhadap unjuk kerja model.

Ada banyak macam algoritma Machine Learning untuk membuat predictive model. Jenis target feature, jumlah feature dan jenis data yang bisa dijadikan predictor akan menentukan algoritma yang cocok untuk memecahkan kasus yang sedang dihadapi. Di dalam buku ini kita akan membahas beberapa algoritma Machine Learning yang paling sering dipakai. Beberapa algoritma supervised learning antara lain:

  • Linear regression
  • Logistic regression
  • Decision Trees
  • Random Forest
  • Naive Bayes
  • Neural Network

Descriptive Model

Ada banyak kasus di mana kita tidak menentukan target yang hendak diprediksi, sebaliknya kita lebih tertarik untuk mencari pola yang terdapat di dalam dataset. Model yang dibuat tidak bersifat prediktif, namun dibuat untuk mengetahui apa yang telah terjadi. Model seperti ini disebut descriptive model.

Ada dua macam penggunaan descriptive model yaitu association dan clustering. Contoh kasus association adalah menemukan pola-pola belanja pelanggan dari jutaan baris data transaksi di sebuah pasar swalayan. Ini yang sering disebut dengan Market Basket Analysis, yang akan kita bahas di Bab 11. Di lain sisi, clustering adalah proses pengelompokan data ke dalam kelompok-kelompok homogen (disebut cluster) berdasarkan atributnya. Secara mandiri, model akan menghasilkan clustercluster berdasarkan kesamaan data tanpa sebelumnya ditentukan oleh manusia. Kita bisa anggap clustering sebagai pengelompokan yang terjadi secara otomatis.

Dalam descriptive model, semua feature yang ada akan diperlakukan sama, tidak ada yang dianggap lebih penting. Tidak ada training dataset, tidak ada target feature yang ditentukan untuk proses belajar. Proses untuk membangun model seperti ini disebut unsupervised learning. Disebut demikian karena ibaratnya murid, tidak ada guru yang mengawasi proses belajarnya. Sang murid harus mencari sendiri pola-pola yang tersembunyi, tanpa diberikan jawaban yang benar.

Bidang ilmu kecerdasan buatan banyak mempergunakan pengembangan dari unsupervised learning yang disebut deep learning. Ini terutama diterapkan pada teknologi pengenalan gambar, pengenalan suara, dan robotika.

Feature Selection

Sepanjang perjalanan proses pembuatan model, kita bisa memulai dengan semua feature yang ada di dataset, namun pada iterasi-iterasi selanjutnya kita akan menjumpai kenyataan bahwa tidak semua feature bisa memberikan kontribusi nyata pada akurasimodel. Tidak jarang di awal proses pembuatan model kita memiliki puluhan hingga ratusan feature di dalam dataset, namun pada akhirnya kita menemukan hanya sepuluh atau bahkan kurang yang benar-benar bermanfaat untuk pembuatan model. Feature yang tidak bermanfaat harus dipilih untuk dibuang sehingga yang tersisa adalah feature yang memang membuat akurasi model menjadi lebih tinggi. Feature yang jumlahnya sedikit juga akan lebih menguntungkan karena volume data menjadi lebih kecil dan kompleksitas model bisa lebih dibatasi.

Proses pemilihan feature ini sering disebut feature selection. Bagaimana cara melakukan feature selection? Salah satu pengukuran yang biasa dipakai untuk memilih feature adalah Pearson Correlation. Gunanya adalah mengukur seberapa dekat hubungan antara dua feature mengikuti suatu garis lurus. Koefisien Pearson jangkauannya dari angka -1 hingga +1. Angka nol menunjukkan tidak ada sama sekali hubungan linier antara kedua feature, sementara bila angka mendekati -1 atau +1 artinya kedua feature memiliki hubungan linier yang nyaris sempurna.

Contoh yang mudah dipahami: bila angka Pearson Correlation antara gaji dan produktivitas pekerja adalah 0,8, artinya terjadi korelasi positif, yaitu bila satu variabel naik, yang lain juga akan naik. Bila gaji meningkat maka produktivitas pekerja juga meningkat. Sebaliknya korelasi negatif bisa terjadi antara suhu ruangan dan produktivitas pekerja; bila suhu ruangan meningkat, pekerja menjadi kegerahan sehingga produktivitas menurun.

Cara yang umum adalah membuat matriks berisikan semua feature di dalam dataset dan menghitung Pearson Correlation untuk semua pasangan yang ada. Contohnya seperti di bawah ini, yaitu Pearson Correlation antara empat feature dalam dataset pekerja pabrik (usia, gaji, produktivitas, jumlah hari absen). Kita lihat, gaji meningkat maka produktivitas meningkat, namun bila usia bertambah, produktivitas menurun (jangan khawatir, ini hanya contoh dan tidak menggambarkan fakta dunia nyata).

Formula perhitungan Pearson Correlation tidak kita bahas di dalam buku ini, adapun aturan umum adalah angka Pearson Correlation di atas 0,5 artinya ada korelasi kuat antara dua feature. Pearson Correlation di bawah 0,5 menununjukkan korelasi yang dianggap lemah. Dengan mengetahui statistik ini, pasangan feature yang tinggi korelasinya akan memiliki efek yang kurang lebih mirip terhadap akurasi model, sehingga bisa dibuang salah satunya dari proses training model.

Persiapan Data

Dalam pembuatan model Machine Learning, kualitas training dataset sangat berpengaruh terhadap kualitas model. Ibaratnya masakan, bahan dasar masakan sangat berpengaruh terhadap citarasa makanan. Data yang kosong, nilai yang keliru atau ketidakwajaran kecil saja di dalam training dataset dapat membuat model yang dihasilkan menjadi buruk kinerjanya.

Untuk mendapatkan data yang berkualitas tinggi bukanlah hal yang sederhana. Tantangan pertama bagi Data Scientist adalah mendapatkan data yang diperlukan dari sumbernya, biasanya berupa sistem transaksional yang isi datanya tidak bersih. Selain itu data yang diperlukan belum tentu tersedia di sumbernya, dan kalaupun tersedia, umumnya terpencar-pencar di banyak lokasi dan lebih rumit lagi, tersimpan dalam berbagai macam format (SQL database, file text, dan sebagainya). Diperlukan mekanisme khusus untuk pengumpulan dan persiapan data agar bisa dipakai untuk keperluan Machine Learning. Di beberapa penerapan, data yang sudah dipersiapkan untuk proses Data Analytics dan Machine Learning disebut dengan Analytical Base Table.

Data collection adalah proses pengumpulan dan pengambilan data dari sumber-sumber data yang bisa dilakukan secara berkala (per hari, per jam, atau per sekian menit) atau secara real-time. Tidak semua data perlu diambil, hanya informasi yang sekiranya diperlukan untuk proses analisis saja yang dipilih. Setelah terkumpul, hampir selalu diperlukan upaya untuk mengkonversi, membersihkan, menghilangkan elemen-elemen data yang duplikat, tidak konsisten, atau isinya bermasalah. Setelah itu, data yang ada harus diubah strukturnya agar sesuai dengan bentuk dan ukuran yang dibutuhkan oleh algoritma Machine Learning yang dituju. Pekerjaan biasanya dikerjakan oleh para Data Engineer, yaitu spesialis yang mengerti bagaimana metode transformasi data ke bentuk yang bisa dipakai oleh para Data Scientist.

Contoh transformasi data antara lain:

  1. Membuang data duplikat/ganda
  2. Membuang data yang kosong
  3. Membuang data yang keliru
  4. Menggabungkan semua data ke dalam satu tabel
  5. Membuat data-data turunan hasil perhitungan (“calculated fields”)
  6. Mentransformasi format dan struktur tabel
  7. Melihat profil data secara keseluruhan dengan cara visual

Kasus yang sangat sering terjadi dalam praktek adalah banyaknya nilai hilang atau kosong di dalam dataset. Kebanyakan algoritma Machine Learning tidak dapat menerima data yang kosong, sehingga dataset harus dimanipulasi terlebih dahulu sebelum masuk ke proses pembuatan model.

Beberapa pendekatan yang umum untuk menangani nilai kosong adalah impute yang artinya mengganti nilai yang hilang dengan nilai yang lain seperti angka rata-rata atau angka default. Pendekatan lain adalah dengan menghapus seluruh example yang memiliki feature berisi nilai kosong bila diketahui informasi yang hilang memiliki hubungan kuat terhadap target feature (dan sebaliknya, example tetap dibiarkan saja bilamana informasi yang hilang setelah melalui pengujian statistik terbukti tidak memiliki hubungan yang kuat dengan target feature).

Kemudian tantangan selanjutnya adalah melakukan data exploration, yaitu eksplorasi untuk memahami apa isi data sehingga bisa diputuskan elemen data mana yang penting dan yang relevan sesuai kasus Machine Learning yang ingin dicapai. Di sini diperlukan Data Scientist yang memahami domain permasalahan yang hendak dipecahkan.

Salah satu yang harus dilakukan dalam eksplorasi data adalah pendeteksian outlier, yaitu example dengan nilai ekstrim dan berbeda jauh dibandingkan keseluruhan populasi. Outlier bisa berupa data yang tidak wajar dan sudah pasti harus dibuang misalnya seorang penduduk yang tercatat berumur 150 tahun, atau bisa saja memang sesuatu yang sah dan tidak harus dibuang misalnya seorang pengusaha muda berusia 19 tahun yang memiliki penghasilan bulanan 30 juta Rupiah, jauh dari rata-rata orang seusianya.

Pendeteksian outlier bisa dilakukan secara visual dengan histogram, yang menunjukkan sebaran data berdasarkan frekuensi kemunculannya seperti contoh di bawah ini:

Di organisasi dan perusahaan besar, sudah menjadi praktek umum bahwa setiap macam data yang disimpan di sistem informasi sudah dilengkapi dengan data dictionary, yaitu dokumentasi yang menjelaskan metadata (data tentang data) beserta isi dan arti setiap feature sehingga siapapun yang membutuhkan data misalnya seorang Data Scientist bisa mendapat gambaran feature apa saja yang potensial bisa diekplorasi lebih lanjut.

Proses-proses di atas sulit atau tidak dapat diotomasi karena membutuhkan keterampilan. Dalam praktek, sebagian besar waktu dan tenaga akan dihabiskan di sisi eksplorasi, persiapan dan dokumentasi data.

Sampling

Dengan semakin majunya teknologi komputasi yang mampu mengolah data dalam jumlah yang semakin besar, sebagian orang berpendapat bahwa kita bisa langsung menganalisis seluruh dataset berapapun besarnya. Ada semacam aturan umum yang menyatakan bahwa “lebih banyak data, lebih baik”. Adapun begitu pandangan ini tidak selamanya benar karena ada kalanya lebih menguntungkan untuk melakukan sampling, yaitu mengambil subset (sebagian) data saja bukan seluruhnya. Dengan tidak mengolah seluruh dataset, proses komputasi bisa dihemat dan waktu proses juga menjadi lebih singkat.

Ada syarat untuk sampling yang baik yaitu data yang diambil harus bisa mewakili keseluruhan populasi. Sampling dilakukan secara acak dari dataset. Berapa banyak data sampling yang diperlukan? Tidak ada aturan baku tentang ini, bisa saja 10% sample sudah cukup mewakili seluruh populasi. Yang terpenting adalah kita harus menghindari sampling bias, atau pengambilan sample-nya condong ke satu atau beberapa kelompok populasi saja. Hal ini bisa membuat kita terbawa ke kesimpulan yang tidak benar. Misalnya mengambil sampling data satu hari transaksi saja sementara ada hari-hari lain yang memiliki pola transaksi berbeda. Pola belanja pelanggan di hari Senin bisa sangat berbeda dengan di hari Sabtu.

Sampling bisa dilakukan dengan pengambilan acak sederhana, atau bisa dengan metode yang disebut stratified sampling, yaitu memisahkan populasi ke dalam segmen-segmen kecil terlebih dahulu sebelum dilakukan pengambilan acak. Tujuannya agar bisa mengambil sample yang merata untuk seluruh elemen data. Misalnya data penduduk dipecah ke dalam beberapa strata berdasarkan jenis kelamin, usia, suku, dan sebagainya sebelum dilakukan pengambilan acak.

Standarisasi Data

Ketika kita akan membangun model Machine Learning, penting untuk memastikan setiap feature berada di dalam jangkauan nilai yang sama. Kita tidak ingin ada feature yang jangkauan angkanya tinggi (misalnya dalam orde ribuan atau jutaan) mendominasi feature yang jangkauan angkanya jauh di bawahnya (misalnya puluhan atau ratusan). Sebagai contoh, adalah hal yang lumrah bila suatu transaksi dengan mata uang Rupiah bernilai dalam orde juta atau milyar, namun orde yang sama tidak wajar untuk transaksi dengan mata uang Dolar Amerika.

Beberapa algoritma Machine Learning tidak bisa bekerja baik bila hal seperti ini dibiarkan. Untuk menghindari ini, diperlukan normalisasi data, yaitu dengan membuat semua feature memiliki skala jangkauan yang seragam, umumnya dengan mengubah nilai-nilai menjadi berpusat di sekitar angka nol. Seperti contoh di bawah, dengan formula matematis data asli yang memiliki jangkauan lebar diubah menjadi berskala 0 hingga 1. Proses normalisasi seperti ini disebut dengan istilah feature scaling atau rescaling.

Demikian juga dengan dataset dengan feature yang isinya sangat beragam, ada kalanya perlu diolah agar menjadi kelompok-kelompok kecil dengan teknik yang disebut binning. Tujuan binning adalah data yang bersifat continuous diubah menjadi bersifat kategorikal, sehingga memudahkan analisis terhadap data yang memiliki jangkauan nilai yang lebar. Binning bermanfaat untuk mencegah model menjadi overfit, yaitu hanya bekerja baik bila dihadapkan dengan training dataset saja. Manfaat lain adalah agar jumlah data yang harus diproses menjadi lebih kecil dan dapat menghemat waktu komputasi.

Contoh binning adalah data penghasilan rumah tangga penduduk di suatu wilayah yang bernilai di atas sepuluh juta Rupiah dikelompokkan menjadi tingkat penghasilan tinggi, di bawah tiga juta Rupiah sebagai tingkat penghasilan rendah, dan seterusnya. Binning juga umumnya dipergunakan untuk pengolahan gambar digital dengan cara mengkombinasikan banyak pixel (elemen terkecil gambar) yang berdekatan menjadi satu pixel saja.

Mendapatkan Dataset

Di lingkungan nyata, data yang akan diolah biasanya berasal dari dalam sistem informasi transaksional di perusahaan atau organisasi yang bersangkutan. Data bisa berupa transaksi penjualan, database pelanggan, hasil survei atau data lain yang dihasilkan kegiatan nyata. Semua organisasi memiliki kebijakan masing-masing mengenai kerahasiaan informasi, termasuk juga adanya undang-undang yang melindungi privasi pelanggan. Oleh karena itu biasanya data akan dijaga ketat dan tidak dapat dibawa keluar dari organisasi.  

Bagi kita yang sedang belajar, kita juga memerlukan dataset untuk berlatih, namun biasanya kita menemui kesulitan untuk mendapatkan dataset yang sesuai karena kita tidak memiliki akses ke data asli seperti mereka yang bekerja di organisasi-organisasi besar. Alternatifnya, ada beberapa situs di internet yang menyediakan contoh-contoh dataset yang bebas untuk dipergunakan. UCI Machine Learning Repository yang berada di University of California di Amerika Serikat adalah salah satu situs yang paling populer untuk mendapatkan contoh dataset bagi proses latihan dan belajar. Situs ini menyediakan banyak dataset yang berasal dari kasus-kasus nyata di berbagai bidang, baik bidang ilmiah maupun sektor bisnis. Setiap dataset sudah dilengkapi dengan deskripsi yang mendetail tentang dataset tersebut.

Sudah siap? Mari kita mulai belajar!

[1] Gartner Release “Global AI Business Value”, https://www.gartner.com/en/newsroom/press-releases/2018-04-25-gartner-says-global-artificial-intelligence-business-value-to-reach-1-point-2-trillion-in-2018

[2] DOMO Report “Data Never Sleeps” https://www.domo.com/news/press/data-never-sleeps-7

[3] IDC Report https://www.seagate.com/id/id/our-story/data-age-2025/