Content

Saya orang yang baru belajar machine learning, saya juga mengetahui beberapa pengetahuan dasar tentang pemrograman. suatu hari saya kepikiran untuk membuat machine learning.

Bagaimana cara saya untuk membuat model machine learning dalam menghadapi masalah saya? apa saja yang harus saya lakukan?.


Definisikan Masalah Kamu


Kita harus punya masalah, bukan berarti saya menyuruh kamu untuk cari masalah. Tapi kita harus mendefinisikan masalah yang kamu punya dengan cara yang logis dan matematis. Pasti bingung ya?

Misal kamu seorang real estate, kamu ingin menjual rumah - rumahmu dengan tipe serta fasilitas yang berbeda. Kamu punya data tentang rumah yang telah kamu jual dulu. Dan sekarang kamu ingin membuat sebuah aplikasi yang dimana aplikasi itu dapat dengan tepat menemukan harga yang cocok untuk rumah yang akan kamu jual.

Dari permasalahan diatas kamu coba pecah dengan beberapa pertanyaan :

  • Apa tujuanmu? Apa yang ingin kamu prediksi?
  • Feature (Bobot) seperti apa yang akan kamu gunakan?
  • Data seperti apa yang ingin kamu input? apakah data itu tersedia?
  • Masalah seperti apa yang sedang kita hadapi? Binnary classification? Clustering?
  • Improvement seperti apa yang kita harapkan?
  • Bagaimana cara kita mengukur Feature (bobot) dalam data kita ?

Masalah tidak bisa kita selesaikan, sampai kita memiliki sebuah model kerja yang dapat membuat kita berhipotesis :

  • Output dapat kita prediksi dari input yang kita masukkan
  • Data yang ada cukup informatif untuk mempelajari hubungan antara input dan output

Penting untuk diingat bahwa machine learning hanya dapat digunakan untuk menghafal pola yang ada dalam data yang sudah di latih (Training Data).

Machine learning hanya dapat mengenali apa yang telah kita lihat sebelumnya. Ketika kita menggunakan machine learning, kita berasumsi bahwa masa depan akan berjalan layaknya masa lalu, dan ini tidak selalu benar.


Mengumpulkan Data


Langkah pertama dalam pembuatan machine learning yaitu mengumpulkan data. Semakin banyak dan semakin baik kualitas data yang kita punya, performa machine learning yang kita buat akan semakin baik.

Ada beberapa metode dalam mengumpulkan data seperti web scrapping dan data mining, serta masih ada yang lain tetapi author belum belajar itu 😄.

“Airline Safety”
Contoh dataset diambil dari Airline Safety


Pilih Ukuran Keberhasilan Kamu


“If you can’t measure it, you can’t improve it”.
- Peter Drucker (Harvard Teacher)

Jika kamu ingin mengontrol sesuatu, kamu harus mengamati hal tersebut, dan untuk mencapai kesuksesan, sangat penting untuk mendefinisikan hal apa yang dapat kamu anggap sukses. Mungkin itu adalah presisi? akurasi? atau hal lainnya.

Hal yang kamu ukur harus sesuai dengan apa yang ingin kamu tuju dan juga terkait langsung dengan jenis masalah yang kamu hadapi :

  • Regression Problem (masalah regresi) menggunakan metrik evaluasi seperti mean squared error (MSE).
  • Classification Problem (masalah klasifikasi) menggunakan metrik evaluasi seperti precission, accuracy dan recall.

Kalian mungkin masih bingung tentang maksud diatas, di artikel berikutnya kita akan mempelajari cara menghadapi serta menyikapi 2 tipe permasalahan diatas. Jika kalian sudah tau tentang permasalahan tersebut, jauh lebih baik.


Tetapkan Protokol Evaluasi Model Kita


Setelah tujuan kita jelas, saatnya menentukan cara kita mengukur keberhasilan dari model yang akan kita buat. Cara mengukur keberhasilan yang paling sering dilakukan adalah :


1. Hold-Out Validation

Validasi Hold-Out adalah ketika kamu membagi dataset menjadi “Training” dan juga “Test”. Dataset training adalah data yang digunakan untuk pelatihan model. Sedangkan Dataset Testing digunakan untuk melihat seberapa baik performa model tersebut pada data yang baru (data yang tidak ada di data training).

Pembagian secara umum ketika menggunakan metode Hold-out adalah 80% dari keseluruhan data untuk data training dan sisanya sebesar 20% digunakan data testing.

“Hold Out Validation”
Hold Out Validation


2. K-Fold Validation

Validasi K-Fold adalah metode pemisahan data menjadi beberapa bagian (K) secara acak dengan ukuran yang sama. Salah satu bagian digunakan untuk jadi data testing, dan sisa nya digunakan untuk data training. Lalu proses ini akan diulang sampai seluruh bagian yang dibagi tadi sudah pernah digunakan sebagai data testing.

Skor yang akan diambil adalah rata - rata dari nilai K yang diperoleh tadi. Teknik ini sangat berguna jika performa pada model secara signifikan berbeda pada validasi Hold-Out.

Misalnya, kita menggunakan validasi 4-Fold dimana kumpulan data akan dipecah menjadi 4 bagian, dan model machine learning kita akan dilatih serta diuji sebanyak 4 kali secara terpisah sehingga setiap bagian akan mendapatkan kesempatan untuk menjadi data testing.

“K-Fold Validation”
K-Fold Validation


3. Iterated K-Fold Validation With Suffling

Teknik validasi yang terakhir sangat relevan jika kita berhadapan dengan sedikit data yang tersedia dan kita perlu mengevaluasi model seakurat mungkin (ini mungkin diperlukan ketika mengikuti kompetensi di Kaggle.com).

Teknik ini pada dasarnya adalah penerapan validasi K-Fold dengan data yang diacak setiap kali sebelum membaginya menjadi bagian - bagian (K).

Metode ini sangatlah berat pada saat komputasi penghitungan data. Karena jumlah model yang dilatih dan juga dievaluasi adalah i x K kali. i adalah jumlah perulangan yang dilakukan, sedangkan K adalah jumlah bagian pada validasi.


Mempersiapkan Data


Sebelum kita mulai masuk ketahap pembuatan model machine learning, kita harus mengubah data agar dapat dimasukkan kedalam model machine learning kita. Teknik yang paling sering digunakan adalah :


1. Menangani Missing Data

Sangat umum dalam kasus didunia nyata terjadinya kehilangan data (missing value) atau data yang tidak lengkap. Penyebab kasus data seperti ini biasanya :

  • Kesalahan dalam pengumpulan data.
  • Field kosong pada saat survey
  • Terjadi data corrupt
  • Measurements not applicable(?)

Data yang hilang biasanya diwakili dengan indikator Nan atau Null. Masalahnya adalah kebanyakan algoritma yang ada, tidak bisa menangani missing value sehingga kita harus menangani nilai - nilai seperti itu sebelum memasukkan nya ke dalam model machine learnig kita.

Ada beberapa cara dalam menangani missing data :

  1. Menghilangkan sample atau feature (bobot) yang memiliki banyak missing data . Tetapi beresiko ketika sample atau bobot memiliki banyak informasi yang relevan.
  2. Mengganti data yang hilang dengan beberapa pre-built estimator (data penduga) seperti Imputer Class pada Scikit Learn. Kita akan sesuaikan data yang kosong dengan memperkirakan data yang kosong tersebut. Salah satu cara yang paling umum adalah dengan menggantinya dengan nilai rata - rata dari sisa sample atau Feature (bobot).

2. Menangani Data Kategori (Categorical Data)

Ketika kita berbicara dengan data kategori, kita bekerja menggunakan feature (bobot) yang ordinal (urut) dan nominal.

  • Feature Ordinal ialah jenis feature kategori yang dapat diurutkan (contoh, size : L < M < S).

  • Feature Nominal ialah jenis feature kategori tidak dapat diurutkan (contoh, color : merah, kuning, hijau).

Metode yang digunakan dalam menangani ordinal dan nominal feature adalah :

a. Mapping Ordinal Feature : untuk memastikan bahwa algoritma menafsirkan feature dengan benar, kita perlu mengubah data kategorikal dari bentuk string ke bentuk integer. Contoh :

  • L (Large) menjadi 0
  • M (Medium) menjadi 1
  • S (Small) menjadi 2

b. Encoding nominal class labels : Cara paling umum yaitu dengan melakukan one-hot encoding, yang terdiri dari pembuatan fitur dummy baru untuk setiap unique value didalam kolom feature nominal.

Contoh, didalam kolom warna (color), jika kita punya 3 class : merah, kuning, hijau. Lalu kita melakukan one-hot encoding pada ketiga class tersebut, Lalu hasilnya kita akan mendapatkan 3 kolom baru, terdiri dari satu untuk setiap class yang unik.

Lalu, jika kita punya baju berwarna kuning, didalam satu kolom feature akan berbentuk seperti ini = {kuning : 1, hijau : 0, merah : 0}.

&ldquo;One-Hot Encoding&rdquo;
One-Hot Encoding

Hal ini dilakukan untuk memastikan performa dari algoritma model itu baik, karena algoritma ini akan jauh lebih efisien saat menangani matriks yang renggang (banyak nilai 0 atau null).


3. Feature Scaling

Ini adalah salah satu langkah yang penting dalam fase pre-processing karena sebagian besar algoritma machine learning memiliki peforma yang lebih baik ketika saat menangani feature dengan skala yang sama.

Ada dua teknik yang paling umum digunakan dalam feature scaling :

  • Normalization : mengacu pada penskalaan ulang (rescaling) feature ke kisaran [0,1], yang merupakan case khusus menggunakan min-max scaling. Untuk menormalkan data yang kita miliki, kita hanya perlu menerapkan metode min-max scaling pada setiap kolom feature.

    &ldquo;Normalization Formula&rdquo;
    Normalization Formula

  • Standardization : berfokus pada memusatkan feature pada rata-rata (mean) dengan standar deviasi 1, sehingga feature memiliki parameter yang sama dengan standard normal distribution (zero mean dan unit variance). Ini membuat algoritma machine learning lebih mudah untuk mempelajari bobot dari paramater.

    &ldquo;Standardization Formula&rdquo;
    Standardization Formula


4. Memilih Feature yang Penting

Seperti yang kita lihat, salah satu alasan utama terjadinya penyebab overfit pada model machine learning adalah karena adanya redundansi pada data kita. Hal ini membuat model yang kita buat terlalu kompleks sehingga tidak dapat mengeneralalisasi dengan baik data yang belum pernah ditraining (data baru).

Salah satu solusi paling umum dalam menghindari overfitting adalah dengan mengurangi dimensionalitas data. Hal ini sering dilakukan dengan cara mengurangi feature melalui Principal Component Analisys (PCA).

&ldquo;Principal Component Analysis&rdquo;
Principal Component Analysis


5. Membagi Data Menjadi Subset

Secara umum, kita akan membagi data kita menjadi 3 bagian : Training, Testing, Validation. Kita telah melatih model dengan data training, mengevaluasinya dengan data validation dan yang terakhir mengujinya dengan data testing.

Kenapa kita tidak membaginya hanya menjadi 2 bagian, yaitu training dan testing? karena dengan begitu proses pembuatan model akan lebih sederhana.

Jawabannya adalah, mengembangkan sebuah model machine learning membutuhkan ruang untuk belajar. Memilih nilai tertentu sebagai hyperparameter (parameter yang berbeda pada training) membuat model diuji ulang dengan feedback yang diterima pada saat menggunakan data validasi, dan pada dasarnya, ini juga suatu cara belajar.

. . .

Tujuan utama kita adalah agar model yang kita buat dapat menggeneralisasi dengan baik pada data yang belum pernah dilatih, dengan kata lain, memprediksi hasil yang akurat dari data yang baru.


Proses Belajar


Kita dapat melihat lebih dekat bagaimana proses pembelajaran (learning process) dilakukan dengan mempelajari salah satu algoritma paling sederhana yaitu Regresi Linear (Linear Regression).

Didalam regresi linear kita diberi sejumlah variabel predictor (prediksi) dan juga variabel continuos response (respon), dan kita mencoba untuk menemukan hubungan antara variabel - variabel tersebut yang memungkinkan kita memprediksi sebuah hasil.

&ldquo;Linear Regression&rdquo;
Linear Regression

Rumus untuk menentukan garis prediksi adalah :

y = β0 + β1x +u.

x - input.
β1 - gradien.
β0 - garis potong y (y-intercepts).
u - residual
y - nilai dari garis pada posisi x

Nilai yang digunakan untuk training adalah β0 dan β1, yaitu nilai yang mempengaruhi posisi garis, Karena u (residual) tidak diperhitungkan serta variable lainnya hanya x (input) dan y (output). Sehingga nilai β1 dan β0 adalah “bobot” (Weight) dari fungsi prediksi.

“bobot” dan “bias”, adalah parameter yang akan disusun menjadi sebuah matrix (W untuk bobot dan b untuk bias)

. . .

Dalam proses training selalu melibatkan inisialisasi beberapa nilai acak untuk setiap training matriks, dan mencoba untuk memprediksi output dari data yang diinput menggunakan nilai acak.

Pada awalnya errornya yang dihasilkan akan bernilai besar, namun dengan membandingkan model prediksi kita dengan output yang benar, model mampu menyesuaikan bobot (Weight) dan nilai bias sampai mendapatkan hasil prediksi model yang baik.

Proses ini diulangi sampai jumlah loop yang ditentukan. Dalam setiap perulangan garis yang tadinya acak (random) akan bergerak mendekati garis yang lebih ideal dan akurat.

&ldquo;Training Process&rdquo;
Training Process


Overfitting dan Underfitting


Salah satu masalah terpenting dalam mempertimbangkan model training adalah memilih antara pengoptimalan atau generalisasi.

  • Optimasi adalah proses untuk menyesuaikan model agar mendapatkan performa terbaik pada data training (learning process).

  • Generalisasi adalah seberapa baik performa model pada data yang baru (belum pernah ditraining).

Dari awal training, kedua masalah tersebut saling berkorelasi, semakin rendah loss pada data training, maka semakin rendah pula loss pada data testing.

Ini terjadi ketika model Underfitted : kurang nya jumlah loop pada saat learning process, sehingga masih harus dilakukan learning process karena belum semua parameter dimodelkan secara relevan.

&ldquo;Underfitting Model&rdquo;
Underfitting Model

Tapi, ketika kita menambah jumlah loop (iterasi) pada saat learning process, Generaliasi akan berhenti dalam berimprovisasi dan sebelumnya validasi pada model akan berhenti, lalu mulai menurun.

Model akan menjadi Overfit : model mempelajari data training dengan sangat baik, sehingga ketika disuguhi data yang baru hasilnya pun tidak relevan.

&ldquo;Overfitting Model&rdquo;
Overfitting Model

Ada 2 cara untuk menghindari overfitting ini, dapatkan lebih banyak data dan regularisasi.

  • Mendapatkan lebih banyak data merupakan solusi terbaik, model yang dilatih pada data yang lebih banyak secara alami akan menggeneralisasi dengan lebih baik.

  • Regularisasi dilakukan ketika semua cara sudah dicoba, ini adalah proses memodulasi kuantitas informasi yang dapat disimpan model atau menambahkan batasan pada informasi apa yang boleh disimpan.

Jika model hanya dapat menghafal sejumlah kecil pola, pengoptimalan akan membuatnya fokus pada data yang paling relevan, meningkatkan peluang model untuk menggeneralisasi dengan lebih baik.

Sementara model yang “baik” adalah model yang bisa menjelaskan data tanpa terpengaruh oleh data noise. Model tidak akan fit terhadap tiap data point, namun mampu menjelaskan trend atau kelompok data. Model yang baik akan memiliki low coss dan akurasi tinggi.

&ldquo;Overfitting Model&rdquo;
Overfitting Model

ini belum selesai akan ada update lagi :)