📚Teori Dasar

Apa itu fitur?

Fitur merupakan representasi dari sebuah data (raw data) yang berbentuk nilai-nilai dalam angka. Fitur merupakan atribut, karakteristik, atau penciri dari data tersebut yang menunjukkan sebuah keunikan dari sebuah data. Secara alamiah, fitur didapatkan dari data yang telah tersedia. Selain itu, terkadang, fitur juga memiliki hubungan dengan algoritma atau model pembelajaran mesin yang digunakan. Dengan kata lain, beberapa model hanya cocok dengan beberapa jenis fitur, begitu juga sebaliknya. Pemilihan fitur yang tepat, dapat mempermudah model dalam melakukan pembelajaran, sehingga dapat mencapai tujuan dengan lebih baik. Untuk mendapatkan fitur yang sesuai dengan data, model, dan tujuan pembelajaran mesin, dapat dilakukan proses perekayasaan fitur atau lebih sering dikenal dengan istilah feature engineering.

Untuk lebih memahami tentang konsep fitur, mari kita gunakan data pesan email. Perhatikan ilustrasi pada Gambar 2.1. Pada konteks pesan email, data yang digunakan keseluruhan pesan email itu sendiri. Didalam sebuah pesan email pasti terdapat alamat pengirim, alamat tujuan, subyek pesan email, dan isi email. Lalu, mana yang dapat kita jadikan sebagai fitur dalam data pesan email? Beberapa hal yang mungkin revelan untuk menjadi fitur pesan email adalah panjang isi email, kata atau karakter khusus didalam email, nama pengirim, alamat penerima, dan sebagainya. Hal ini menjadikan jumlah fitur didalam sebuah data bisa jadi sangat banyak.

Gambar 2.1. Ilustrasi Email (Image by Upl56 on Freepik)

Jumlah fitur yang kita gunakan juga sangat penting. Jika fitur yang digunakan terlalu sedikit, maka model pembelajaran mesin tidak dapat belajar dengan baik. Jika fitur yang digunakan terlalu banyak, proses pembelajaran akan berlangsung lebih lama dan ada kemungkinan model menjadi lebih sulit untuk menemukan pola-pola unik didalam fitur-fitur tersebut. Kedua hal tersebut dikenal dengan istilah underfitting dan overfitting.

Ekstraksi Fitur

Setelah mengetahui konsep fitur pada pembelajaran mesin, selanjutnya kita akan membahas bagaimana cara mendapatkan fitur dari sebuah data. Proses ini dikenal dengan nama ekstraksi fitur (feature extraction).

Ekstraksi fitur adalah proses pengurangan (reduksi) dimensi dari sebuah data mentah menjadi nilai-nilai atau variabel-variabel yang mudah dikelola oleh perangkat komputasi. Pada proses ini juga dilakukan pemilihan dan pengkombinasian nilai-nilai dari data sehingga dapat digunakan sebagai fitur atau representasi dari data tersebut. Untuk memudahkan pemahaman terkait dengan dimensi dan fitur, perhatikan data penumpang kapal Titanic pada Gambar 2.2.

Gambar 2.2 Data Penumpang Kapal Titanic (Sumber: https://www.kaggle.com/datasets/yasserh/titanic-dataset)

Dimensi pada data penumpang kapal Titanic merupakan semua kolom pada data mulai dari PassengerId hingga Embarked. Sehingga, berdasarkan hal tersebut, kita dapat mengatakan bahwa data tersebut terdiri dari 12 dimensi. Lalu, apabila kita memunculkan sebuah pertanyaan, "Bagaimana caranya jika kita ingin mengetahui pengumpang yang selamat dari tragedi Titanic?". Maka kita perlu menganalisis kolom mana saya yang mungkin dapat mencirikan bahwa penumpang tersebut selamat atau tidak. Bisa jadi, tidak semua 12 dimensi data kita gunakan menjadi fitur untuk dapat menjawab pertanyaan tersebut.

Mari coba kita analisa bersama-sama.

Informasi terkait dengan apakah penumpang selamat atau tidak, dapat dilihat dari kolom "Survived". Nilai "0" untuk tidak selamat dan "1" untuk penumpang yang selamat. Kolom "Survived" akan menjadi acuan kita dalam mencari ciri-ciri penumpang yang selamat. Selanjutnya kita perlu melakukan analisis dimensi mana yang dapat menggambarkan bahwa penumpang tersebut selamat ataupun tidak. Let's do this!

  • PassengerId --> "PassengerId" merupakan kolom yang digunakan untuk mengetahui urutan penumpang. Kesemuanya nilainya unik untuk setiap penumpang, tidak unik untuk membedakan penumpang yang salamat atau tidak. So, kita tidak dapat menggunakan PessengerId sebagai fitur.

  • Pclass --> "Pclass" merupakan informasi terkait dengan kelas penumpang didalam dek kapal Titanic. Nilainya terdiri dari 1,2,3. Bisa jadi kelas penumpang menggambarkan lokasi pada kapal, dek bawah, dek tengah, ataupun dek atas. Potensi dek bawah untuk tidak selamat pada tragedi ini cukup besar secara logika. Sedangkan dek atas sebaliknya. Sehingga, ada kemungkinan "Pclass" dapat menjadi nilai yang unik.

  • Name --> "Name" merupakan informasi tekait dengan nama penumpang. Seluruhnya unik untuk setiap penumpang, sama seperti "PassengerId". Akan menjadi sulit apabila nilai ini kita gunakan untuk menjadi sebuah penciri penumpang selamat ataupun tidak. Kita tidak akan menggunakannya.

  • "Sex" --> "Sex" merupakan informasi terkait dengan jenis kelamin penumpang. Nilai ini memiliki kemungkinan untuk menjadi sebuah fitur. Hal ini dikarenakan, pada kondisi darurat, terdapat kemungkinan jenis kelamin tertentu memiliki prioritas untuk diselamatkan terlebih dahulu. Kita dapat melihat pada film Titatic, anak-anak dan wanita merupakan prioritas untuk diselamatkan. Oleh karena itu, kita dapat menggunakan "Sex" sebagai fitur.

  • "Age" --> Seperti nama kolomnya, "Age" merupakan informasi terkait dengan usia penumpang. Nilai ini juga memiliki kemungkinan untuk dijadikan sebuah fitur dengan alasan yang sama dengan "Sex", yaitu prioritas.

  • "SibSp" --> "SibSp" merupakan informasi terkait dengan jumlah saudara (siblings) dan pasangan ("spouses"). Pada tragedi Titanic, keadaan menjadi sangat tidak terkendali, ada kemungkinan setiap orang berusaha menyelamatkan dirinya sendiri. Sehingga, jumlah saudara ataupun pasangan mungkin tidak revelan untuk menggambarkan orang tersebut selamat atau tidak.

  • "Parch" --> "Parch" merupakan informasi terkait dengan jumlah anak ataupun orang tua yang ikut dalam perjalanan Titanic. Dengan alasan yang sama dengan "SibSp", cukup sulit untuk menjadikan data ini sebagai acuan untuk mengetahui apakah penumpang selamat atau tidak.

  • "Ticket" --> "Ticket" merupakan informasi nomor tiket untuk setiap penumpang. Nomor ini unik untuk setiap tiket. Sehingga sulit untuk menjadinya penciri "Survived" sama halnya seperti "PassengerID".

  • "Fare" --> "Fare" merupakan informasi harga tiket yang dibayarkan oleh penumpang. Setiap orang mungkin berbeda. Akan tetapi, tiket untuk setiap kelas pasti tidak jauh berbeda. Sehingga, kita dapat mengelompokkan "Fare" menjadi 3 kelompok dengan rentang harga tertentu. Hal ini dikarenakan "Fare" kemungkinan memiliki korelasi dengan "Pclass". Oleh karena itu, "Fare" memiliki kemungkinan untuk menjadi fitur.

  • "Cabin" --> "Cabin" merupakan informasi lokasi kabin penumpang. Jika kita perhatikan pada Gambar 2.2, terdapat beberapa data dengan nilai "NaN" pada "Cabin". Hal ini menandakan hilangnya informasi "Cabin" pada data tersebut, atau, bisa jadi penumpang tersebut memang memegang tiket non-kabin. Kita dapat menjadikan ini sebagai fitur dengan syarat. Syaratnya adalah, kita harus mengenaralisir nilai kabin dan non kabin.

  • "Embarked" --> "Embarked" adalah informasi tentang dimana penumpang akan turun. Dikarenakan targedi Titanic terjadi sebelum Titanic bersandar disalah satu lokasi embarkasi, maka, informasi ini menjadi tidak relevan untuk menjadi acuan apakah penumpang selamat atau tidak.

Berdasarkan analisa yang telah kita lakukan, maka kita mendapatkan,

  • "Pclass"

  • "Sex"

  • "Age"

  • "Fare"

  • "Cabin"

sebagai fitur yang akan kita gunakan untuk memprediksi apakah penumpang selamat atau tidak. Kita dapat melihat, dimensi yang digunakan mengecil. Tidak semua informasi dari data Titanic kita gunakan untuk memprediksi keselamatan penumpang. Inilah yang dimaksud dengan konsep reduksi dimensi pada proses ekstraksi fitur. Selain itu, berdasarkan analisa yang kita lakukan, kita juga melakukan pemilihan nilai-nilai yang dapat menggambarkan kondisi keselamatan penumpang. Proses inilah yang disebut proses pemiliah nilai atau fitur.

Pertanyaan selanjutnya adalah, apakah fitur yang kita pilih sudah tepat? Jawabannya bisa jadi "ya" bisa jadi "tidak". Diperlukan pengukuran lebih lanjut terkait dengan hal ini. Kita akan mempelajarinya sepanjang perjalanan kita mempelajari materi pembelajaran mesin. So, keep learning!

Ekstraksi Fitur Berdasarkan Jenis Data

Kita telah mengetahui konsep ekstraksi fitur menggunakan contoh data Titanic. Data tersebut merupakan data tabular yang termasuk kedalam jenis data terstruktur. Seluruh fitur didapakan dari nilai-nilai pada setiap kolom dengan sangat mudah. Kita dapat langsung mengetahui maksud dan tujuan dari nilai fitur tersebut.

Lalu bagaimana dengan fitur pada data semi-terstruktur dan tidak terstruktur?

Ekstraksi Fitur Data Semi-Terstruktur

Seperti yang telah dijelaskan pada modul sebelumnya, data semi-terstruktur adalah data yang tidak mengikuti pola terstruktur seperti pada tabel ataupun basis data relational, akan tetapi masih memiliki penanda berupa tags ataupun keys yang menyimpan untuk membedakan informasi satu dengan yang lain serta dapat memiliki hirarki. Berdasarkan definisi tersebut, kita tetap dapat mengekstraksi fitur dari data semi-terstruktur berdasarkan tags atau keys yang dimiliki oleh data tersebut. Beberapa contoh data semi terstrutkur yang poluler adalah data yang disimpan dalam bentuk Extensible Markup Language (XML) dan Javascript Object Notation (JSON).

Perhatikan contoh dokumen JSON dibawah ini,

[
    "mahasiswa": {
        "nim": "52101000175",
        "nama": "Alex Gorgon",
        "jenis_kelamin": "L",
        "dosen_wali": "Raiden Kolomogorov",
        "ipk": 3.5,
        "perkuliahan": [
            "Dasar Pemrograman",
            "Pemrograman Berbasis Objek",
            "Statistika",
            "Pembelajaran Mesin"
        ]
    },
    "mahasiswa": {
        "nim": "52101000199",
        "nama": "Kenkei Reinan",
        "jenis_kelamin": "P",
        "dosen_wali": "Raiden Kolomogorov",
        "ipk": 3.75,
        "perkuliahan": [
            "Dasar Pemrograman",
            "Pemrograman Berbasis Objek",
            "Statistika",
            "Pembelajaran Mesin"
        ],
        "prestasi": [
            "Juara 1 GEMASTIK",
            "Puteri Indoensia 2045",
            "Juara 1 Liga Voli Mahasiswa"
        ]
    }
]

Dokumen JSON tersebut berisi informasi tentang profil mahasiswa pada sebuah kampus. Berdasarkan dokumen tersebut kita dapat mengambil berbagai macam informasi sesuai dengan keys yang diberikan, seperti "nim" ataupun "nama". Dari dokumen JSON tersebut kita juga dapat dengan jelas mengetahui bahwa perbedaan antara data satu dengan data yang lainnya tidak dibedakan berdasarkan baris ataupun kolom, melainkan menggunakan bentuk array ataupun dictionary. Strukturnyapun sangat memungkinkan berbeda antara satu data dengan yang lain.

Setelah mengekstaksi nilai-nilai yang diperlukan dari data semi-terstruktur, selanjutnya kita dapat menggunakan teknik pengolahan yang serupa dengan teknik pengolahan pada data terstruktur. Perbedaanya adalah terdapat diperlukan satu tahapan untuk mengambil nilai-nilai dari keys sesuai dengan kebutuhan yang kita perlukan.

Ekstraksi Fitur Data Tidak Terstruktur

Kembali ke definisi data tidak terstruktur, yaitu merupakan data yang tidak mengikuti atau menggunakan pola penyusunan (skema) tertentu, mungkin akan tampak sulit untuk melakukan proses ekstraksi fitur. Tidak ada kolom, baris, ataupun keys pada data ini. Lalu bagimana kita mengetahui fiturnya? Sebelum ini mari kita diskusikan terlebih dulu contoh data-data tidak terstruktur.

Contoh data tidak terstrutkur diantaranya adalah konten multimedia (suara, gambar, video), dokumen teks, ataupun data sosial media.

  • Konten multimedia --> Data suara, gambar, ataupun video tidak disusun berdasarkan struktur tertentu, setiap nilainya bebas untuk mengisi "ruang-ruang" sepanjang-panjang data.

  • Dokumen teks --> Dokumen teks seperti PDF ataupun dokumen dari aplikasi pengolah kata mungkin dapat dikatakan semi-terstruktur. Hal ini karenakan mereka memiliki meta-data yang terstruktur untuk menyimpan informasi terkait dokumen tersebut. Akan tetapi, konten didalam dokumen itu sendiri tidak terstruktur. Setiap orang dapat menulis apa saja disana dengan struktur dan rincian yang berbeda-beda.

  • Data media sosial --> Sama halnya dengan dokumen teks, sosial media juga dapat dilihat dari sudut pandang semi-terstrukur atau tidak. Semi-terstruktur karena data seperti postingan di media sosial pasti memiliki metadata seperti kapan waktu posting, siapa yang memposting, hashtag yang digunakan, jumlah like, dan sebagainya. Akan tetapi konten yang diposting merupakan data tidak terstruktur. Untuk mengetahui maksud dari konten tersebut, misalnya dalam konteks sentimen, maka kita harus melakukan pengolahan lanjutan untuk mengetahuinya.

Lalu, jika tidak memiliki struktur, bagimana kita mendapatkan fiturnya? Ingat kembali konsep fitur.

Fitur adalah nilai-nilai unik yang dapat merepresentasikan sebuah data.

Meskipun tidak memiliki struktur, kita hanya perlu mendapatkan nilai-nilai untuk dari data tidak terstruktur. Sebagai contoh, perhatikan Gambar 2.3.

Sebuah gambar, sebetulnya merupakan kumpulan dari piksel kecil yang menyusun gambar tersebut. Setiap piksel akan memiliki nilainya masing-masing. Untuk mendapatkan fitur dari gambar, kita hanya perlu memperhatikan nilai-nilai piksel dari gambar. Fitur bisa didapatkan dari jumlah nilai piksel tertentu, kedekatan antar nilai, dan sebagainya. Fokusnya adalah, nilai-nilai unik dalam sebuah data tidak terstruktur tetap mungkin untuk ditemukan. Namun untuk memenumukannya, terkadang kita memerlukan proses tambahan yang disebut proses pra-pengolahan data.

Strategi Pembuatan Data Latih, Validasi, dan Uji

Random Split dan Stratified Split

Pemisahan antar jenis data yaitu data latih, data validasi, dan data uji untuk kebutuhan pembuatan model pembelajaran mesin sudah kita bahas pada modul sebelumnya. Pada modul yang lalu, kita telah mengenal random split untuk melakukan hal tersebut. Akan tetapi, terdapat teknik lain yang dapat kita gunakan untuk melakukan splitting data, yaitu stratified split atau stratified random split. Sedikit berbeda dengan random split, dimana kita langsung memilih secara acak data yang akan kita gunakan sebagai data latih, validasi, maupun uji, pada stratified split, teknik ini mengenal strata pada prosesnya.

Apa maksud dari strata (stratified)? Strata dalam konteks ini adalah kelompok, atau kita dapat menganologikannya sebagai label. Stratified split akan membagi data kedalam porsi latih, validasi, dan uji sesuai dengan proporsi setiap label atau kelas. Hal ini menyebabkan jumlah tiap label akan memiliki rasio yang sama. Pada ilmu statistika, teknik ini juga masuk dalam teknik sampling. Gambar 2.4 merupakan ilustrasi dari stratified sampling yang digunakan pada ilmu statistika.

Gambar 2.4 Ilustrasi Stratfied Sampling (Sumber: https://www.kaggle.com/code/jardelnascimento/stratified-sampling)

Cross Validation

Setelah kita memahami bagaimana cara melakukan spliting data training, validasi, dan testing, pada bagian ini kita akan belajar terkait dengan teknik lain dalam melakukan splitting data, yaitu cross validation. Apa itu cross validation? cross validation adalah teknik pada machine leanring untuk mengevaluasi model dengan cara melakukan evaluasi berganda (multiple evaluation). Evaluasi berganda dilakukan dengan cara membagi data menjadi data latih dan uji, yang diistilahkan sebagai fold sedemiakan sehingga setiap data pernah menjadi data latih ataupun data uji. Hasil pengujian pada model ini adalah rata-rata hasil untuk setiap fold. Besaran spliting data akan ditentukan oleh nilai k-nya. Sebagai contoh, jika kita menggunakan nilai k=4k=4, maka data akan dibagi menjadi 4 bagian. Salah satu dari bagian tersebut akan menjadi data validasi. Kemudian, untuk setiap iterasi, data validasi akan diganti sesuai dengan jumlah fold. Untuk memudahkan pemahaman, perhatikan Gambar 2.5.

Apa itu fitur?

Fitur merupakan representasi dari sebuah data (raw data) yang berbentuk nilai-nilai dalam angka. Fitur merupakan atribut, karakteristik, atau penciri dari data tersebut yang menunjukkan sebuah keunikan dari sebuah data. Secara alamiah, fitur didapatkan dari data yang telah tersedia. Selain itu, terkadang, fitur juga memiliki hubungan dengan algoritma atau model pembelajaran mesin yang digunakan. Dengan kata lain, beberapa model hanya cocok dengan beberapa jenis fitur, begitu juga sebaliknya. Pemilihan fitur yang tepat, dapat mempermudah model dalam melakukan pembelajaran, sehingga dapat mencapai tujuan dengan lebih baik. Untuk mendapatkan fitur yang sesuai dengan data, model, dan tujuan pembelajaran mesin, dapat dilakukan proses perekayasaan fitur atau lebih sering dikenal dengan istilah feature engineering.

Untuk lebih memahami tentang konsep fitur, mari kita gunakan data pesan email. Perhatikan ilustrasi pada Gambar 2.1. Pada konteks pesan email, data yang digunakan keseluruhan pesan email itu sendiri. Didalam sebuah pesan email pasti terdapat alamat pengirim, alamat tujuan, subyek pesan email, dan isi email. Lalu, mana yang dapat kita jadikan sebagai fitur dalam data pesan email? Beberapa hal yang mungkin revelan untuk menjadi fitur pesan email adalah panjang isi email, kata atau karakter khusus didalam email, nama pengirim, alamat penerima, dan sebagainya. Hal ini menjadikan jumlah fitur didalam sebuah data bisa jadi sangat banyak.

Gambar 2.1. Ilustrasi Email (Image by Upl56 on Freepik)

Jumlah fitur yang kita gunakan juga sangat penting. Jika fitur yang digunakan terlalu sedikit, maka model pembelajaran mesin tidak dapat belajar dengan baik. Jika fitur yang digunakan terlalu banyak, proses pembelajaran akan berlangsung lebih lama dan ada kemungkinan model menjadi lebih sulit untuk menemukan pola-pola unik didalam fitur-fitur tersebut. Kedua hal tersebut dikenal dengan istilah underfitting dan overfitting.

Ekstraksi Fitur

Setelah mengetahui konsep fitur pada pembelajaran mesin, selanjutnya kita akan membahas bagaimana cara mendapatkan fitur dari sebuah data. Proses ini dikenal dengan nama ekstraksi fitur (feature extraction).

Ekstraksi fitur adalah proses pengurangan (reduksi) dimensi dari sebuah data mentah menjadi nilai-nilai atau variabel-variabel yang mudah dikelola oleh perangkat komputasi. Pada proses ini juga dilakukan pemilihan dan pengkombinasian nilai-nilai dari data sehingga dapat digunakan sebagai fitur atau representasi dari data tersebut. Untuk memudahkan pemahaman terkait dengan dimensi dan fitur, perhatikan data penumpang kapal Titanic pada Gambar 2.2.

Gambar 2.2 Data Penumpang Kapal Titanic (Sumber: https://www.kaggle.com/datasets/yasserh/titanic-dataset)

Dimensi pada data penumpang kapal Titanic merupakan semua kolom pada data mulai dari PassengerId hingga Embarked. Sehingga, berdasarkan hal tersebut, kita dapat mengatakan bahwa data tersebut terdiri dari 12 dimensi. Lalu, apabila kita memunculkan sebuah pertanyaan, "Bagaimana caranya jika kita ingin mengetahui pengumpang yang selamat dari tragedi Titanic?". Maka kita perlu menganalisis kolom mana saya yang mungkin dapat mencirikan bahwa penumpang tersebut selamat atau tidak. Bisa jadi, tidak semua 12 dimensi data kita gunakan menjadi fitur untuk dapat menjawab pertanyaan tersebut.

Mari coba kita analisa bersama-sama.

Informasi terkait dengan apakah penumpang selamat atau tidak, dapat dilihat dari kolom "Survived". Nilai "0" untuk tidak selamat dan "1" untuk penumpang yang selamat. Kolom "Survived" akan menjadi acuan kita dalam mencari ciri-ciri penumpang yang selamat. Selanjutnya kita perlu melakukan analisis dimensi mana yang dapat menggambarkan bahwa penumpang tersebut selamat ataupun tidak. Let's do this!

  • PassengerId --> "PassengerId" merupakan kolom yang digunakan untuk mengetahui urutan penumpang. Kesemuanya nilainya unik untuk setiap penumpang, tidak unik untuk membedakan penumpang yang salamat atau tidak. So, kita tidak dapat menggunakan PessengerId sebagai fitur.

  • Pclass --> "Pclass" merupakan informasi terkait dengan kelas penumpang didalam dek kapal Titanic. Nilainya terdiri dari 1,2,3. Bisa jadi kelas penumpang menggambarkan lokasi pada kapal, dek bawah, dek tengah, ataupun dek atas. Potensi dek bawah untuk tidak selamat pada tragedi ini cukup besar secara logika. Sedangkan dek atas sebaliknya. Sehingga, ada kemungkinan "Pclass" dapat menjadi nilai yang unik.

  • Name --> "Name" merupakan informasi tekait dengan nama penumpang. Seluruhnya unik untuk setiap penumpang, sama seperti "PassengerId". Akan menjadi sulit apabila nilai ini kita gunakan untuk menjadi sebuah penciri penumpang selamat ataupun tidak. Kita tidak akan menggunakannya.

  • "Sex" --> "Sex" merupakan informasi terkait dengan jenis kelamin penumpang. Nilai ini memiliki kemungkinan untuk menjadi sebuah fitur. Hal ini dikarenakan, pada kondisi darurat, terdapat kemungkinan jenis kelamin tertentu memiliki prioritas untuk diselamatkan terlebih dahulu. Kita dapat melihat pada film Titatic, anak-anak dan wanita merupakan prioritas untuk diselamatkan. Oleh karena itu, kita dapat menggunakan "Sex" sebagai fitur.

  • "Age" --> Seperti nama kolomnya, "Age" merupakan informasi terkait dengan usia penumpang. Nilai ini juga memiliki kemungkinan untuk dijadikan sebuah fitur dengan alasan yang sama dengan "Sex", yaitu prioritas.

  • "SibSp" --> "SibSp" merupakan informasi terkait dengan jumlah saudara (siblings) dan pasangan ("spouses"). Pada tragedi Titanic, keadaan menjadi sangat tidak terkendali, ada kemungkinan setiap orang berusaha menyelamatkan dirinya sendiri. Sehingga, jumlah saudara ataupun pasangan mungkin tidak revelan untuk menggambarkan orang tersebut selamat atau tidak.

  • "Parch" --> "Parch" merupakan informasi terkait dengan jumlah anak ataupun orang tua yang ikut dalam perjalanan Titanic. Dengan alasan yang sama dengan "SibSp", cukup sulit untuk menjadikan data ini sebagai acuan untuk mengetahui apakah penumpang selamat atau tidak.

  • "Ticket" --> "Ticket" merupakan informasi nomor tiket untuk setiap penumpang. Nomor ini unik untuk setiap tiket. Sehingga sulit untuk menjadinya penciri "Survived" sama halnya seperti "PassengerID".

  • "Fare" --> "Fare" merupakan informasi harga tiket yang dibayarkan oleh penumpang. Setiap orang mungkin berbeda. Akan tetapi, tiket untuk setiap kelas pasti tidak jauh berbeda. Sehingga, kita dapat mengelompokkan "Fare" menjadi 3 kelompok dengan rentang harga tertentu. Hal ini dikarenakan "Fare" kemungkinan memiliki korelasi dengan "Pclass". Oleh karena itu, "Fare" memiliki kemungkinan untuk menjadi fitur.

  • "Cabin" --> "Cabin" merupakan informasi lokasi kabin penumpang. Jika kita perhatikan pada Gambar 2.2, terdapat beberapa data dengan nilai "NaN" pada "Cabin". Hal ini menandakan hilangnya informasi "Cabin" pada data tersebut, atau, bisa jadi penumpang tersebut memang memegang tiket non-kabin. Kita dapat menjadikan ini sebagai fitur dengan syarat. Syaratnya adalah, kita harus mengenaralisir nilai kabin dan non kabin.

  • "Embarked" --> "Embarked" adalah informasi tentang dimana penumpang akan turun. Dikarenakan targedi Titanic terjadi sebelum Titanic bersandar disalah satu lokasi embarkasi, maka, informasi ini menjadi tidak relevan untuk menjadi acuan apakah penumpang selamat atau tidak.

Berdasarkan analisa yang telah kita lakukan, maka kita mendapatkan,

  • "Pclass"

  • "Sex"

  • "Age"

  • "Fare"

  • "Cabin"

sebagai fitur yang akan kita gunakan untuk memprediksi apakah penumpang selamat atau tidak. Kita dapat melihat, dimensi yang digunakan mengecil. Tidak semua informasi dari data Titanic kita gunakan untuk memprediksi keselamatan penumpang. Inilah yang dimaksud dengan konsep reduksi dimensi pada proses ekstraksi fitur. Selain itu, berdasarkan analisa yang kita lakukan, kita juga melakukan pemilihan nilai-nilai yang dapat menggambarkan kondisi keselamatan penumpang. Proses inilah yang disebut proses pemiliah nilai atau fitur.

Pertanyaan selanjutnya adalah, apakah fitur yang kita pilih sudah tepat? Jawabannya bisa jadi "ya" bisa jadi "tidak". Diperlukan pengukuran lebih lanjut terkait dengan hal ini. Kita akan mempelajarinya sepanjang perjalanan kita mempelajari materi pembelajaran mesin. So, keep learning!

Ekstraksi Fitur Berdasarkan Jenis Data

Kita telah mengetahui konsep ekstraksi fitur menggunakan contoh data Titanic. Data tersebut merupakan data tabular yang termasuk kedalam jenis data terstruktur. Seluruh fitur didapakan dari nilai-nilai pada setiap kolom dengan sangat mudah. Kita dapat langsung mengetahui maksud dan tujuan dari nilai fitur tersebut.

Lalu bagaimana dengan fitur pada data semi-terstruktur dan tidak terstruktur?

Ekstraksi Fitur Data Semi-Terstruktur

Seperti yang telah dijelaskan pada modul sebelumnya, data semi-terstruktur adalah data yang tidak mengikuti pola terstruktur seperti pada tabel ataupun basis data relational, akan tetapi masih memiliki penanda berupa tags ataupun keys yang menyimpan untuk membedakan informasi satu dengan yang lain serta dapat memiliki hirarki. Berdasarkan definisi tersebut, kita tetap dapat mengekstraksi fitur dari data semi-terstruktur berdasarkan tags atau keys yang dimiliki oleh data tersebut. Beberapa contoh data semi terstrutkur yang poluler adalah data yang disimpan dalam bentuk Extensible Markup Language (XML) dan Javascript Object Notation (JSON).

Perhatikan contoh dokumen JSON dibawah ini,

[
    "mahasiswa": {
        "nim": "52101000175",
        "nama": "Alex Gorgon",
        "jenis_kelamin": "L",
        "dosen_wali": "Raiden Kolomogorov",
        "ipk": 3.5,
        "perkuliahan": [
            "Dasar Pemrograman",
            "Pemrograman Berbasis Objek",
            "Statistika",
            "Pembelajaran Mesin"
        ]
    },
    "mahasiswa": {
        "nim": "52101000199",
        "nama": "Kenkei Reinan",
        "jenis_kelamin": "P",
        "dosen_wali": "Raiden Kolomogorov",
        "ipk": 3.75,
        "perkuliahan": [
            "Dasar Pemrograman",
            "Pemrograman Berbasis Objek",
            "Statistika",
            "Pembelajaran Mesin"
        ],
        "prestasi": [
            "Juara 1 GEMASTIK",
            "Puteri Indoensia 2045",
            "Juara 1 Liga Voli Mahasiswa"
        ]
    }
]

Dokumen JSON tersebut berisi informasi tentang profil mahasiswa pada sebuah kampus. Berdasarkan dokumen tersebut kita dapat mengambil berbagai macam informasi sesuai dengan keys yang diberikan, seperti "nim" ataupun "nama". Dari dokumen JSON tersebut kita juga dapat dengan jelas mengetahui bahwa perbedaan antara data satu dengan data yang lainnya tidak dibedakan berdasarkan baris ataupun kolom, melainkan menggunakan bentuk array ataupun dictionary. Strukturnyapun sangat memungkinkan berbeda antara satu data dengan yang lain.

Setelah mengekstaksi nilai-nilai yang diperlukan dari data semi-terstruktur, selanjutnya kita dapat menggunakan teknik pengolahan yang serupa dengan teknik pengolahan pada data terstruktur. Perbedaanya adalah terdapat diperlukan satu tahapan untuk mengambil nilai-nilai dari keys sesuai dengan kebutuhan yang kita perlukan.

Ekstraksi Fitur Data Tidak Terstruktur

Kembali ke definisi data tidak terstruktur, yaitu merupakan data yang tidak mengikuti atau menggunakan pola penyusunan (skema) tertentu, mungkin akan tampak sulit untuk melakukan proses ekstraksi fitur. Tidak ada kolom, baris, ataupun keys pada data ini. Lalu bagimana kita mengetahui fiturnya? Sebelum ini mari kita diskusikan terlebih dulu contoh data-data tidak terstruktur.

Contoh data tidak terstrutkur diantaranya adalah konten multimedia (suara, gambar, video), dokumen teks, ataupun data sosial media.

  • Konten multimedia --> Data suara, gambar, ataupun video tidak disusun berdasarkan struktur tertentu, setiap nilainya bebas untuk mengisi "ruang-ruang" sepanjang-panjang data.

  • Dokumen teks --> Dokumen teks seperti PDF ataupun dokumen dari aplikasi pengolah kata mungkin dapat dikatakan semi-terstruktur. Hal ini karenakan mereka memiliki meta-data yang terstruktur untuk menyimpan informasi terkait dokumen tersebut. Akan tetapi, konten didalam dokumen itu sendiri tidak terstruktur. Setiap orang dapat menulis apa saja disana dengan struktur dan rincian yang berbeda-beda.

  • Data media sosial --> Sama halnya dengan dokumen teks, sosial media juga dapat dilihat dari sudut pandang semi-terstrukur atau tidak. Semi-terstruktur karena data seperti postingan di media sosial pasti memiliki metadata seperti kapan waktu posting, siapa yang memposting, hashtag yang digunakan, jumlah like, dan sebagainya. Akan tetapi konten yang diposting merupakan data tidak terstruktur. Untuk mengetahui maksud dari konten tersebut, misalnya dalam konteks sentimen, maka kita harus melakukan pengolahan lanjutan untuk mengetahuinya.

Lalu, jika tidak memiliki struktur, bagimana kita mendapatkan fiturnya? Ingat kembali konsep fitur.

Fitur adalah nilai-nilai unik yang dapat merepresentasikan sebuah data.

Meskipun tidak memiliki struktur, kita hanya perlu mendapatkan nilai-nilai untuk dari data tidak terstruktur. Sebagai contoh, perhatikan Gambar 2.3.

Sebuah gambar, sebetulnya merupakan kumpulan dari piksel kecil yang menyusun gambar tersebut. Setiap piksel akan memiliki nilainya masing-masing. Untuk mendapatkan fitur dari gambar, kita hanya perlu memperhatikan nilai-nilai piksel dari gambar. Fitur bisa didapatkan dari jumlah nilai piksel tertentu, kedekatan antar nilai, dan sebagainya. Fokusnya adalah, nilai-nilai unik dalam sebuah data tidak terstruktur tetap mungkin untuk ditemukan. Namun untuk memenumukannya, terkadang kita memerlukan proses tambahan yang disebut proses pra-pengolahan data.

Strategi Pembuatan Data Latih, Validasi, dan Uji

Random Split dan Stratified Split

Pemisahan antar jenis data yaitu data latih, data validasi, dan data uji untuk kebutuhan pembuatan model pembelajaran mesin sudah kita bahas pada modul sebelumnya. Pada modul yang lalu, kita telah mengenal random split untuk melakukan hal tersebut. Akan tetapi, terdapat teknik lain yang dapat kita gunakan untuk melakukan splitting data, yaitu stratified split atau stratified random split. Sedikit berbeda dengan random split, dimana kita langsung memilih secara acak data yang akan kita gunakan sebagai data latih, validasi, maupun uji, pada stratified split, teknik ini mengenal strata pada prosesnya.

Apa maksud dari strata (stratified)? Strata dalam konteks ini adalah kelompok, atau kita dapat menganologikannya sebagai label. Stratified split akan membagi data kedalam porsi latih, validasi, dan uji sesuai dengan proporsi setiap label atau kelas. Hal ini menyebabkan jumlah tiap label akan memiliki rasio yang sama. Pada ilmu statistika, teknik ini juga masuk dalam teknik sampling. Gambar 2.4 merupakan ilustrasi dari stratified sampling yang digunakan pada ilmu statistika.

Gambar 2.4 Ilustrasi Stratfied Sampling (Sumber: https://www.kaggle.com/code/jardelnascimento/stratified-sampling)

Cross Validation

Setelah kita memahami bagaimana cara melakukan spliting data training, validasi, dan testing, pada bagian ini kita akan belajar terkait dengan teknik lain dalam melakukan splitting data, yaitu cross validation. Apa itu cross validation? cross validation adalah teknik pada machine leanring untuk mengevaluasi model dengan cara melakukan evaluasi berganda (multiple evaluation). Evaluasi berganda dilakukan dengan cara membagi data menjadi data latih dan uji, yang diistilahkan sebagai fold sedemiakan sehingga setiap data pernah menjadi data latih ataupun data uji. Hasil pengujian pada model ini adalah rata-rata hasil untuk setiap fold. Besaran spliting data akan ditentukan oleh nilai k-nya. Sebagai contoh, jika kita menggunakan nilai k=4k=4, maka data akan dibagi menjadi 4 bagian. Salah satu dari bagian tersebut akan menjadi data validasi. Kemudian, untuk setiap iterasi, data validasi akan diganti sesuai dengan jumlah fold. Untuk memudahkan pemahaman, perhatikan Gambar 2.5.

Last updated