Samuel Nardus Hamonangan Sinaga
Proyek ini mengembangkan sistem rekomendasi wisata berbasis web di Swiss dengan pendekatan Singular Value Decomposition (SVD) sebagai metode Collaborative Filtering (CF). Model ini diintegrasikan ke dalam pipeline MLOps dengan penerapan CI/CD untuk otomatisasi pelatihan dan deployment, serta monitoring guna memastikan performa tetap stabil. Sistem ini membantu pengguna menemukan destinasi sesuai preferensi kolektif wisatawan lain, dengan hasil evaluasi menunjukkan prediksi yang akurat dan infrastruktur yang andal untuk pengembangan berkelanjutan.
Description
Secara garis besar, proyek ini tidak hanya berfokus pada pembangunan model machine learning semata, tetapi juga mengimplementasikan konsep MLOps dengan mengintegrasikan GitHub Actions sebagai tools untuk CI/CD serta penerapan website monitoring. Dengan pendekatan ini, sistem rekomendasi wisata Swiss dapat dikelola secara otomatis, terukur, dan berkelanjutan.
Back-End : Python (FastAPI)
Database : Supabase
Monitoring : Grafana + Prometheus
Front-End : ReactJS
Front-End: Swisstination-FE
Back-End: Swisstination-BE
Cara menjalankan proyek ini sudah disediakan secara lengkap pada dokumentasi GitHub masing-masing repository.
Dataset yang digunakan dalam proyek ini dihasilkan melalui Large Language Model (LLM) dan berisi beberapa tabel penting seperti user, user review, destinasi, dan lainnya. Struktur lengkap tabel dataset dapat dilihat pada dokumentasi GitHub Back-End.
Untuk menjalankan proyek ini, pastikan telah menginstal dan menyiapkan beberapa tools berikut:
Python (versi 3.10–3.11)
Node.js
Supabase
Docker (opsional, disarankan menggunakan Docker Hub untuk integrasi lebih baik)
TAHAPAN PROYEK
TAHAP PEMODELAN
Pengambilan Data
Python mengambil data dari tabel user dan tabel destinasi, serta data ratings/review yang langsung diambil dari Supabase. Data ini menjadi dasar untuk proses pelatihan model rekomendasi.
Training Model
Setelah dataset berhasil diambil dari Supabase, tahap berikutnya adalah melakukan training model.
Dengan konfigurasi ini, model dapat menghasilkan rekomendasi wisata berbasis pola interaksi pengguna dan destinasi.
Evaluasi Model
Untuk tahap evaluasi, model diuji menggunakan metode Cross Validation dengan 3-fold.
Pendekatan ini membagi dataset menjadi tiga bagian: dua bagian digunakan sebagai data training dan satu bagian sebagai data validasi, lalu prosesnya diulang hingga setiap bagian berperan sebagai data validasi.
Metrik evaluasi dihasilkan langsung dari hasil training model yang tersimpan dalam file output. Dengan metode ini, performa model dapat dinilai lebih objektif serta mengurangi risiko overfitting.
Deployment Model
Setelah model dilatih dan dievaluasi, tahap selanjutnya adalah deployment. Model yang sudah di-train disimpan dalam bentuk file (model.pkl) dan diintegrasikan dengan FastAPI pada sisi Back-End. Endpoint API disediakan untuk melakukan inferensi rekomendasi secara real-time berdasarkan input pengguna.
TAHAPAN MONITORING
Setup Prometheus
Prometheus adalah sistem monitoring yang berfungsi untuk mengumpulkan metrik dari berbagai layanan melalui endpoint tertentu. Pada proyek ini, Prometheus dikonfigurasi untuk:
Catatan: Prometheus tidak langsung mengambil data dari Supabase, melainkan dari aplikasi Back-End yang telah dipasang Prometheus client. Dengan begitu, data yang terkait aktivitas ke Supabase juga bisa tercatat lewat metrik Back-End.
Setup Grafana
Grafana digunakan sebagai tool visualisasi untuk menampilkan metrik yang dikumpulkan oleh Prometheus dalam bentuk grafik, tabel, atau panel interaktif. Dengan Grafana, developer bisa lebih mudah memahami kondisi sistem secara real-time.
Dalam proyek ini, Grafana dikonfigurasi untuk:
Berikut contoh dashboard grafana yang sudah saya buat untuk proyek ini
TAHAPAN CI/CD
CI (Continuous Integration)
Continuous Integration adalah proses otomatisasi yang berjalan setiap kali ada perubahan kode pada repository.
Dalam proyek ini, CI digunakan untuk:
Berikut gambaran flow untuk CI (Lebih lengkapnya ada di dokumentasi Back-end)
CD ( Continiuous Deployment)
Setelah proses build dan push image ke Docker Hub selesai pada tahap CI, pipeline berlanjut ke tahap Continuous Deployment (CD).
Pada tahap ini, sistem secara otomatis melakukan login ke VPS menggunakan kredensial yang telah disimpan dalam secrets. Setelah berhasil masuk, pipeline akan diarahkan ke deployment path yang telah ditentukan. Di dalam path ini, dibuat file .env berisi variabel penting seperti URL Supabase, JWT secret, dan konfigurasi lainnya.
Selanjutnya, pipeline akan menarik file docker-compose.yml dan folder monitoring dari repository GitHub agar infrastruktur monitoring tetap konsisten. Setelah itu, dilakukan pull Docker images terbaru dari Docker Hub untuk memastikan aplikasi menggunakan versi terbaru dari Back-End maupun Front-End.
Sebelum menjalankan aplikasi baru, pipeline akan melakukan pengecekan apakah service lama masih berjalan. Jika iya, maka dilakukan docker-compose down untuk mematikan layanan lama, kemudian dilanjutkan dengan docker-compose up -d agar service baru berjalan dengan lancar.
Dengan alur ini, proses deployment berjalan sepenuhnya otomatis mulai dari checkout code, build image, push ke Docker Hub, hingga rolling update ke VPS, sehingga developer tidak perlu melakukan deployment manual.
Berikut Flownya
Proyek ini membuktikan bahwa sistem rekomendasi wisata Swiss dapat dibangun secara end-to-end menggunakan metode Collaborative Filtering (SVD) yang dipadukan dengan pendekatan MLOps. Implementasi ini tidak berhenti pada pembuatan model saja, tetapi juga mencakup evaluasi performa dengan cross validation, monitoring real-time menggunakan Prometheus dan Grafana, serta otomatisasi CI/CD dengan GitHub Actions dan Docker.
Dengan integrasi ini, pipeline proyek mampu berjalan secara otomatis, terukur, dan konsisten, sehingga setiap perubahan kode atau data langsung menghasilkan model terbaru yang siap digunakan. Monitoring yang diterapkan juga memberikan jaminan bahwa performa sistem dapat diawasi secara berkelanjutan. Keseluruhan proses ini menunjukkan bahwa pendekatan MLOps mampu menjadikan sistem rekomendasi lebih andal, mudah dipelihara, dan siap dikembangkan lebih lanjut.
Untuk pengembangan berikutnya, beberapa hal yang dapat ditambahkan antara lain:
BERIKUT ADALAH HASIL AKHIR PROJEK SAYA (UNTUK WEBSITE REKOMENDASI)