Showing posts with label data mining. Show all posts
Showing posts with label data mining. Show all posts

Friday, July 1, 2022

Menghitung TF-IDF menggunakan kode PHP


Term Frequency, Inverse Document Frequency (TFIDF), merupakan sub-area dari Natural Language Processing(NLP) yang digunakan dalam information retrievel dengan tujuan untuk ekstrasi data. Sederhananya, bagaimana menghitung kemunculan setiap kata dalam dokumen dan memberi bobot pada setiap kata, dan menghitung skor untuk dokumen tersebut.

Sebelum kita bahas code di PHP, saya akan share penjelasan perhitungan manual TF-IDF menggunakan Spreadsheet atau Excel untuk memudahkan memahami cara kerjanya. Harapannya, anda bisa melakukan improvisasi code di bahasa pemrograman yang lainnya.

Pastikan sebelum mulai proses pembobotan kata dengan metode ini, text yang anda gunakan sudah melalui tahap preprocessing. Untuk preprocessing text di bahasa indonesia anda bisa menggunakan library sastrawi yang sudah saya bahas di artikel berikut ini: https://blog.ariflaksito.net/2022/04/preprocessing-text-bahasa-indonesia-di.html.

Berikut ini perhitungan di Spreadsheet menggunakan 3 dokumen seperti yang saya gunakan pada artikel preprocessing pada link artikel diatas.


Kolom token/term merupakan kata unique dari semua dokumen yang ada. Selanjutnya pada kolom tf, dibagi menjadi 3 dokumen untuk menghitung jumlah setiap kata yang ada di masing-masing dokumen. Pada kolom df akan menghitung jumlah kata yang muncul pada semua dokumen. Pada bagian ini kita hitung jumlah kemunculan, bukan jumlah total kata (digunakan rumus countif bukan sum). Kolom D/df merupakan pembagian dari jumlah dokumen (n) dan df. Jumlah dokumen yang kita gunakan untuk contoh perhitungan ini adalah 3.

Kolom IDF merupakan nilai log dari D/df, dan terkahir score tf-idf merupakan perkalian dari tf masing-masing dokumen dan token dengan nilai IDF. Hasilnya akan berupa matrix bobot dari dokumen dan term seperti pada gambar diatas.

Bisa anda tuliskan email di komentar jika menghendaki file Spreadsheet/Excel untuk contoh perhitungan  TF-IDF diatas.

Selanjutnya kita masuk pada inti pembahasan, yaitu membuat script PHP untuk perhitungan bobot kata seperti cara di Excel diatas. Pertama siapkan class dan beberapa fungsi di PHP, yaitu:

  • fungsi untuk mebuat index dari setiap kata
  • fungsi untuk menghitung idf
  • fungsi untuk menghitung weight/tf-idf

Terdapat 2 file pada code diatas, index.php dan Tfidf.php. Dimana fungsi-fungsi TF-IDF berada pada class Tfidf() di file Tfidf.php. Sedangkan file index.php digunakan sebagai input dokumen untuk menjalankan perhitungan tersebut.

Pada fungsi create_index() di class Tidf menjalankan proses untuk melakukan split setiap kata dan memberi informasi posisi dari setiap dokumen. Hasilnya bisa di lihat menggunakan fungsi show_index(). Fungsi idf() digunakan untuk menghitung menggunakan rumus log(D/df). Dan fungsi weight() untuk menghitung score/nilai dari tf-idf dari setiap kata/term di dokumen. Hasilnya berupa matrix/array dengan bobot pada setiap term di dokumen.

Berikut ini hasil dari kode tersebut, sama seperti pada perhitungan di excel diatas pastinya..

Array
(
    [1] => Array
        (
            [hotel] => 0.1761
            [modern] => 0.1761
            [jangkau] => 0.1761
            [akomodasi] => 0
            [nyaman] => 0
            [tenang] => 0
            [bintang] => 0
            [3] => 0
            [mewah] => 0
            [harga] => 0
        )

    [2] => Array
        (
            [hotel] => 0
            [modern] => 0.1761
            [jangkau] => 0
            [akomodasi] => 0.4771
            [nyaman] => 0.4771
            [tenang] => 0.4771
            [bintang] => 0
            [3] => 0
            [mewah] => 0
            [harga] => 0
        )

    [3] => Array
        (
            [hotel] => 0.1761
            [modern] => 0
            [jangkau] => 0.1761
            [akomodasi] => 0
            [nyaman] => 0
            [tenang] => 0
            [bintang] => 0.4771
            [3] => 0.4771
            [mewah] => 0.4771
            [harga] => 0.4771
        )

)

Referensi

  1. https://khozaimi.wordpress.com/2010/06/26/menghitung-tf-idf-engan-php/
  2. https://www.youtube.com/watch?v=B3UZ8DxHocQ&t=1s

Preprocessing text bahasa Indonesia di PHP dengan Sastrawi

 

the image was taken from https://www.analyticsvidhya.com

Bismillah.. setelah sekian lama belum ada artikel lagi, semoga bisa kembali produktif menulis di blog ini lagi dan terus konsisten  ✌.

Pada beberapa artikel sebelumnya terkait content-based filtering di Sistem rekomendasi, saya menggunakan salah satu library untuk preprocessing text yaitu Sastrawi di Python. Ternyata beberapa mahasiswa menanyakan penggunaan library tersebut di pemrograman PHP. Inilah salah satu alasan adanya artikel ini.

Source code dari Sastrawi bisa anda temukan disini: https://github.com/sastrawi/sastrawi. Library ini sudah ada pada beberapa bahasa pemrograman, seperti: Java, C, Python, Go, Rudy dan tentunya di PHP. Untuk menggunakan di PHP anda bisa melakukan instalasi menggunakan Composer. Apa itu composer? Silahkan beca artikel berikut ini: https://blog.ariflaksito.net/2018/08/berkenalan-dengan-composer.html

Pada terminal atau command line anda bisa menjalankan perintah berikut ini:
php composer.phar require sastrawi/sastrawi:^1

Library ini dapat digunakan untuk melakukan stemming di bahasa Indonesia, yaitu proses untuk menemukan kata dasar dari sebuat kata, dengan menghilangkan semua imbuhan termasuk dari awalan, sisipan, akhiran dan kombinasi dari awalan dan akhiran pada kata turunan.

Contohnya:

  • Menghilang = hilang
  • Terjangkau = jangkau
Selain itu, Sastrawi dapat juga digunakan untuk menghilangkan kata-kata yang memiliki arti tidak penting(stop-words) dalam proses pengolahan text, seperti: dan, atau, yang, dll.

Berikut ini code di PHP berupa fungsi untuk melakukan stemming dan menghapus stop-words:

Output dari code diatas sebagai berikut:

Array
(
    [1] => hotel modern jangkau
    [2] => akomodasi modern nyaman tenang
    [3] => hotel bintang 3 mewah harga jangkau
)

Dari output tersebut terlihat bahwa beberapa kata stop-words dan tanda koma (,) berhasil di hapus dan kata "terjangkau" diubah menjadi bentuk kata dasar "jangkau". Tahapan ini berguna untuk beberapa case berikutnya seperti: text classification, sentiment analysis atau yang akan saya bahas berikutnya yaitu menghitung pembobotan kata dengan TF-IDF untuk sistem rekomendasi berbasis content (content-based filtering).

Selamat mencoba..

Referensi

  1. https://adinyahya.com/cara-penerapan-stemming-dengan-menggunakan-library-sastrawi/
  2. https://github.com/sastrawi/sastrawi

Sunday, September 12, 2021

Mengenal Regresi linear dan perhitungannya

Disini kita akan bahas salah satu model statistik yang umum digunakan untuk Machine Learning untuk melakukan prediksi dengan cara supervised learning, yaitu regresi linear. Metode ini melibatkan 2 variabel dimana salah satunya adalah variabel independen (x) dan satu lagi adalah variabel dependen (y)

  • Independen berarti variabel ini sebagai variabel utama yang mungkin akan mempengaruhi nilai variabel kedua (dependen). 
  • Dependen berarti nilai variabel ini akan tergantung dari nilai variabel independennya, jika korelasi tinggi maka dependensi juga tinggi.

Untuk memudahkan pemahaman, kita gunakan data sample berat dan tinggi badan dari 10 orang sebagai berikut ini:

Data Tinggi Badan(cm) : 151,174,138,186,128,136,179,163,152,131
Data Berat Badan (Kg) : 63, 81, 56, 91, 47, 57, 76, 72, 62, 48

Regresi Linear adalah proses mencari garis linear yang menujukkan korelasi antara kedua variabel tersebut, garis linear itu akan didapat dengan sebuah persamaan :

y = ax + b atau y = w1x + w0

dimana: 
a atau w1 adalah slope / gradient / coefficient
b atau w0 adalah intercept / bias

Ciri dari problem regresi ini adalah kasusnya diminta menebak angka. Jenis outputnya bersifat continuous. Contoh lain dari regresi ini misalnya menebak curah hujan, harga rumah, jumlah kendaraan pemudik, dsb.

Perhitungan Manual

Untuk mendapatkan nilai coef(A) dan intercept/bias(B) digunakan rumus:


Gambar diatas menjelaskan detail perhitungan dari rumus tersebut kedalam excel. Dalam mencari nilai coef A dan intercept/bias B di excel digunakan formula pada sheet berikut:

A =((C25*C24)-(C23*C21))/((C25*C22)-(C23*C23))
B =((C21*C22)-(C23*C24))/((C25*C22)-(C23*C23))

Menggunakan Python

Perhitungan di python lebih sederhana, dimana kita bisa menggunakan library sklearn, seperti pada contoh kode dibawah ini:

Nilai coef dan intercept didapatkan dari kode baris ke-19 dan-20 diatas, sehingga akan didapatkan persamaan linear sebagai berikut:

y = 0.674 * x + (-38.455)

Sedangkan hasil dari plot data seperti pada gambar dibawah, dimana garis merah merupakan nilai prediksi dari model linear regresi dan titik-titik biru adalah 10 data training yang digunakan.

Regresi Linear Berganda

Regresi Linear Berganda adalah model regresi linear dengan melibatkan lebih dari satu variable bebas/independen dan persamaannya adalah

y = a1x1 + a2x2 + .. + anxn + b

Untuk pembahasan prediksi menggunakan regresi liner berganda kali ini akan diambil dari paper yang telah dipublish oleh mas Ervan Triyanto di jurnal Rabit, Juli 2019. Kasus ini adalah prediksi jumlah produksi padi di kabupaten Bantul dengan data yang digunakan dari tahun 2009 sampai dengan 2017. Di penelitian tersebut perhitungan nya diimplementasikan ke dalam aplikasi web menggunana PHP sebagai bahasa pemrogramannya. Di artikel ini akan digunakan python untuk perhitungannya dengan alasan kemudahannya.

Downlod pada link ini untuk mendapatkan artikelnya.  

Terdapat 1 variabel dependen yaitu jumlah produksi padi (dalam ton), sedangkan terdapat 3 variabel independen yaitu: curah hujan, luas lahan dan tingkat serangan hama. 

Berikut contoh code di Python untuk menghitung kasus produksi padi diatas:

Dari data diatas, didapatkan persamaan untuk prediksi sebagai berikut:

y = 5.929528x1 + 118.27991767x2 -175.71483753x3 + 8306.792151921123
dimana: luas lahan(x1), curah hujan(x2) dan hama(x3)

Evaluasi

Evaluasi untuk model linear regresi dapat dilakukan dengan beberapa metrik evaluasi seperti: MAE (Mean Absolute Error), MSE (Mean Squared Error) atau RMSE (Root Mean Squared Erorr).

RMSE merupakan salah satu cara untuk mengevaluasi model regresi linear dengan mengukur tingkat akurasi hasil perkiraan suatu model. RMSE dihitung dengan mengkuadratkan error (prediksi – observasi) dibagi dengan jumlah data (rata-rata), lalu diakarkan. RMSE tidak memiliki persamaan:

Pada kode python diatas, evaluasi model dituliskan pada baris kode ke-50 dengan menggunakan library metrics dari sklearn dan didapatkan score RMSE yaitu: 3.5045

Kesimpulan

Meskipun Linear regresi mudah diimplementasikan untuk melakukan prediksi pada data yang bersifat continuous, tetapi terdapat juga kekurangannya yaitu mudah terjadi overfitting dan sulit dilakukan prediksi jika relasi antara variabel dipenden dan independen tidak linear atau korelasi sangat rendah.

Jika membutuhkan dataset tersebut bisa tulis email pada komentar ya.. Bisa anda gunakan untuk penelitian dengan metode machine learning lainya dan silahkan dibandingkan nilai errornya dengan penelitian ini.

Referensi

  1. Jimy, Regresi Linier dengan R dan Python, https://medium.com/@jrendz/regresi-linier-dengan-r-dan-python-ebb80662c6da
  2. Jasme Moody,What does RMSE really mean?, https://towardsdatascience.com/what-does-rmse-really-mean-806b65f2e48e
  3. Triyanto, E., Sismoro, H., & Laksito, A. (2019). Implementasi Algoritma Regresi Linear Berganda untuk Memprediksi Produksi Padi di Kabupaten Bantul. Rabit : Jurnal Teknologi Dan Sistem Informasi Univrab, 4(2), 73-86. https://doi.org/10.36341/rabit.v4i2.666

Monday, November 23, 2020

Improvisasi Sistem Rekomendasi teknik Content-based

Diagram content-based filtering dengan metadata


Tulisan kali ini merupakan kelanjutan dari pembahasan sebelumnya yaitu bagaimana membangun sistem rekomendasi menggunakan teknik content-based filtering. Setelah kita perhatikan kembali pada hasil rekomendasi yang saya tulis di artikel sebelumnya tampak beberapa item yang tidak relevan, dimana saat merekomendasikan suatu item terpilih misalkan "Gunawangsa Manyar Hotel" yang berlokasi di Surabaya terdapat beberapa item hotel yang direkomedasikan berada di Jakarta atau Malang. 

Hal tersebut bisa terjadi karena teknik yang digunakan untuk pencarian kemiripan item hanya berdasarkan pada deskripsi hotel saja, jadi saat ada kemiripan text pada deskripsi hotel tersebut maka akan mendapatkan score yang bagus sebagai item yang muncul di rekomendasi tanpa memperhatikan lokasi hotel tersebut.

Untuk itu perlu adanya improvisasi dari teknik tersebut, salah satunya adalah dengan menambahkan beberapa properties/metada item untuk di mix dengan properties deskripsi hotel supaya meningkatkan kemiripan antara item hotel satu dengan lainnya.

Di python kita dapat menggunakan fungsi agg( ) dengan parameter join pada beberapa kolom dataframe yang akan digabungkan.

df[['col1 ','col2 ',' col3']].agg(' '.join, axis=1)

Analisis Metadata

Disini akan digunakan dataset dari review hotel dimana data tersebut mempunyai relasi dengan data hotel sebelumnya. Setelah kita melihat struktur data yang ada pada dataset review dan hotel, kita akan lakukan beberapa analisis untuk menambahkan metadata untuk membangun sistem rekomendasi.

Tahap pertama kita tambahkan informasi province dan city untuk setiap hotel.

Selanjutnya kita bisa juga tambahkan informasi dari harga hotel yang kita kelompokan menjadi beberapa bagian. Dalam hal ini akan dibagi menjadi 3 kategori yaitu "low", "medium", dan "high". Kita bisa gunakan fungsi cut( ) di pandas dataframe.

pd.cut(hotel_review_df['price_per_night'], 
            bins=3, labels=['low','medium','high'])

Berikutnya kita bisa juga menambahkan metadata untuk mengkategorikan hotel termasuk family room atau single room dengan menggunakan conditional dari informasi rata-rata children dan adults.

def set_family_room(x):
    if((x['children']>=1.0) | (x['adults']>1.0)):
        return "family room"
    else:
        return "single room"
hotel_review_df.apply(lambda x : set_family_room(x), axis=1)

Membangun Sistem rekomendasi

Setelah kita mendapatkan metadata dari dataset hotel dan review, kita dapat membangun sistem rekomendasi menggunakan cara sebelumnya yaitu TF-IDF dan Cosine similarity yang sudah dibahas secara singkat di artikel berikut ini.

Sebelum kita ubah dokumen text ke dalam vektor menggunakan TF-IDF, kita lakukan join masing-masing metadata tersebut ke dalam satu kolom menggunakan fungsi agg( ) seperti yang telah dibahas diatas.

Berikut ini code detail di python yang dapat dijalankan di Jupyter notebook

Jika kita perhatikan hasil dari rekomendasi saat ini lebih relevan dibandingkan sebelumnya, dimana saat kita menampilkan rekomendasi dari hotel "Gunawangsa Manyar Hotel" makan akan muncul beberapa hotel yang berlokasi di Surabaya dengan kategori harga yang sama dan juga kategori family room.

Semoga bermanfaat tulisan ini, inshaAllah selanjutnya akan saya bahas tentang Sistem rekomendasi menggunakan weight rating yang bisa kita gabungkan dengan teknik content-based sebagai hybrid sistem rekomendasi.

Referensi

  1. Saket Garodia, Metadata-based Recommender Systems in Python, https://medium.com/analytics-vidhya/metadata-based-recommender-systems-in-python-c6aae213b25c
  2. JCOp Untuk Indonesia, Course 9 -Recommendation System, https://www.youtube.com/playlist?list=PLGn1wRmlR3MvcgYgTp71QXnJaFNUsQga2

Wednesday, July 22, 2020

Belajar Data Science dimana ya sebaiknya?

Menjawab pertanyaan dari judul diatas secara sedarhana yaitu kuliah aja di kampus dimana terdapat prodi/jurusan computer science, informatika, atau bidang-bidang komputer. Ternyata kenyataannya tidak semua prodi/jurusan komputer tersebut mengajarkan data science loh. Nah, sebaiknya gimana donk??

Data Science Diagram
source: https://intellipaat.com/blog/what-is-data-science/

Tren pekerjaan yang banyak diminati oleh para lulusan bidang komputer saat ini yaitu data science, dimana anda bisa cek sendiri rentang gaji untuk pekerjaan ini di google degh. Bidang ilmu data science ini merupakan lintas ilmu dari programming, database dan statistika seperti pada ilustrasi gambar diatas. Selain itu ilmu machine learning juga diperlukan pada pekerjaan ini.

Sayangnya tidak semua kampus di prodi komputer mengajarkan ilmu ini, seperti di prodi kampus tempat saya mengajar hanya 2 sks saja untuk belajar data mining, lebih baik dari pada tidak ada sama sekali khan. Selanjutnya bagaimana cara nya supaya kita bisa mendapat ilmu tentang data science tersebut?

Investasi waktu, pikiran dan uang
Disini uang saya tuliskan di bagian akhir, karena yang paling penting adalah waktu dan fokus pada pikiran. Bisa juga koq kita tanpa uang mempelajari ilmu tersebut.

Nah.. dimasa pandemi ini sangat banyak online course atau webinar yang gratis atau berbayar yg bisa kita ikuti. Pada artikel kali ini saya akan share 2 course online yang bagus untuk anda ikuti dalam mempelajari data science ini, dimana saya sendiri sudah mencoba nya, yaitu: Dqlab dan Sanbercode

DQLab

Saya sudah join ecourse yang beralamat di https://dqlab.id/ ini sejak agustus 2019, dan materi yang dipelajari cukup lengkap, yaitu SQL for data science, R for data science dan Python for data science. Content materi sangat beragam, dari level pemula sampai level lanjut/advance. Selain itu di paltform ini menggunakan live code yang sudah support ke-3 bahasa tersebut, jadi kita tidak perlu menyiapkan environment di local PC/Laptop untuk belajar data science, cukup browser dan koneksi internet saja.

Menurut saya ecourse di DQLab menyiapkan membernya untuk menjadi data engineering, data analyst ataupun data science (perbedaan ke-3 bidang ini saya kurang paham detail, bisa explore sendiri ya), disini materi-materinya fokus di pengolahan data, transformasi, data analisis, cleaning, wrangling, dsb.

DQLab juga menyediakan beberapa challenge yang dipandu oleh beberapa pakar dari dunia industri, seperti traveloka, tokopedia, efishery, xeratic, dll. Challenge ini seperti mini project yang bisa kita kerjakan dengan range waktu tertentu, dimana kasusnya memang sesuai dengan dunia industri, jadi jika kita mengikutinya akan punya pengalaman yang sangat berharga.

Untuk materi-materi tentang modeling machine learning atau data mining ada juga di DQLab pada project challenge yang biasanya setiap bulan 1x atau 2x akan diinfokan di dashboard kita.

Modul challenge Dqlab
Modul challenge DQLab

Beberapa modul dasar di DQLab di sediakan gratis, selanjutnya kita bisa berlangganan dengan harga yang cukup terjangkau. Saat artikel ini diposting terdapat promo untuk berlangganan seharga Rp. 179.400,- untuk 6 bulan. Cek berkala web dan IG Dqlab yang biasanya share informasi promo untuk berlangganan.

Dengan jumlah modul saat ini lebih dari 30 dan akan terus bertambah lagi dengan materi-materi terupdate, saya rasa biaya berlangganan sebesar angka diatas layak dengan apa yang nantinya akan kita dapatkan.

Beberapa modul juga menawarkan reward yaitu extend berlangganan 1 bulan jika kita bisa menyelesaikannya dengan batas waktu yang ditentukan. Saya sendiri pernah mendapatkan reward challenge ini dan juga reward 6 bulan gratis ketika tim DQLab meminta tetimoni.

Challenge dengan Reward di DQLab
Challenge dengan Reward di DQLab

Sanbercode

Sanbercode merupakan ecourse kedua yang akan saya bahas disini, dimana terdapat juga kelas di bidang programing dan design yang ditawarkan selain kelas data science.  Beralamatkan di https://sanbercode.com/, saya mengikuti kegiatan bootcamp dari sanbercode untuk kelas python data science pada bulan Juni 2020 dan sangat puas dengan metode yang diterapkan di event ini.

Event bootcamp tersebut bernama "Bootcamp online 2020 by SanberCode.. From Zero to Hero". Program ini intensif selama 1 bulan atau 4 pekan yang diselenggarakan setiap bulan (kegiatan bisa berubah sewaktu-waktu, cek IG Sanbercode untuk info lebih lanjut). 

Terdapat 2 level pada bootcamp ini yaitu kelas dasar dan kelas lanjutan. Kelas dasar ini gratis dengan syarat yaitu membayar uang komitmen Rp 200,000 dan mendapatkan score bootcamp 80 atau lebih. Saya mengikuti kelas dasar dan Alhamdulillah mendapatkan score 88 dan uang kembali masuk rekening 😄.

Informasi bootcamp bulan Juli 2020


Kurikulum dari bootcamp tersebut kurang lebih seperti berikut ini:
Minggu 1
  • Hello Python
  • Functions, Method and Getting Help
  • Logic Control Flow and Loop
  • Python List dan Dictionary
  • Statistika Deskriptif Untuk Data Science
Minggu 2
  • Pandas Introduction
  • Akses/Indexing dan Transformasi Data
  • Reshaping Data
  • Grouping Data
  • Merging DataFrame
Minggu 3
  • Pengenalan Matplotlib
  • Custom Visualisasi
  • Multiple Plots
  • Perbandingan Kuantitatif
  • Seaborn dan Altair
Minggu 4
  • Pengenalan Machine Learning
  • Algoritma KNN dan Model Regresi Linear
  • Evaluasi Performa dan Memilih Model
  • Preprocessing Data
Setiap materi tersebut akan ada tugas harian yang dikerjakan pada jupyter notebook atau google colab dan disubmit untuk dilakukan penilaian. Selanjutnya pada akhir pekan (hari sabtu) teradapat quiz sampai minggu ke-3 dan minggu terakhir akan ada final project. Dan untuk final project ini akan dibuka kaggle competition dimana kita disediakan data untuk diolah dan kemudian dilakukan prediksi dengan akurasi terbaik sebagai rangking dari beberapa peserta bootcamp.

Dengan cara pembelajaran intensif seperti ini saya rasa pemahaman materi yang akan didapatkan akan lebih cepat karena kita akan dipakasa fokus selama 1 bulan penuh. 

Jika anda ingin mendapatkan file-file tugas dan quiz dari sanbercode yang pernah saya kerjakan sebelumnya bisa akses github berikut: https://github.com/ariflaksito/sanbercode-data-science

Kesimpulan

Dari kedua ecourse yang saya bahas tersebut, kesimpulan menurut saya yaitu:
1) DQLab
- Kasus-kasus di bidang industri terkini
- Bisa mempelajari 3 bahasa penting di data science(R, python, SQL)
- Materi sangat banyak dan terus bertambah, bisa dipelajari sesuai kebutuhan

2) Sanbercode
- Waktu singkat hanya 4 minggu
- Sesuai bagi pemula untuk belajar cepat
- Gratis dengan syarat

Semoga bermanfaat yaa, selamat belajar data science!