Foto User
Rekomendasi Wisata Swiss menggunakan SVD + MLOps

Samuel Nardus Hamonangan Sinaga

Sosial Media


0 orang menyukai ini
Suka

Summary

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

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.

Tech Stack

Back-End : Python (FastAPI)

Database : Supabase

Monitoring : Grafana + Prometheus

Front-End : ReactJS

Dokumentasi Lengkap

Front-End: Swisstination-FE

Back-End: Swisstination-BE

Cara menjalankan proyek ini sudah disediakan secara lengkap pada dokumentasi GitHub masing-masing repository.

PERSIAPAN PROYEK

Dataset

Dataset yang digunakan dalam proyek ini dihasilkan melalui Large Language Model (LLM) dan berisi beberapa tabel penting seperti useruser reviewdestinasi, dan lainnya. Struktur lengkap tabel dataset dapat dilihat pada dokumentasi GitHub Back-End.

Alat yang Dibutuhkan

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.

  • Alasan tanpa preprocessing: Dataset hasil generate sudah bersih, tidak memiliki nilai kosong (missing value), dan jumlah kolomnya sedikit sehingga tidak diperlukan reduksi kolom atau transformasi tambahan.
  • Metode yang digunakanSingular Value Decomposition (SVD) dari library Surprise.
  • Parameter training:
    n_factors = 20
    n_epochs = 50
    random_state = 24

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:

  • Mengambil metrik dari aplikasi Back-End (FastAPI) melalui endpoint /metrics.
  • Memastikan performa dan kestabilan layanan Back-End tetap terpantau.
  • Menyediakan data metrik yang nantinya dapat divisualisasikan dengan Grafana.
     

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:

  • Menghubungkan Prometheus sebagai data source.


 

  • Membuat dashboard custom yang menampilkan metrik penting, seperti:
    • Jumlah request ke API.
    • Latensi rata-rata (response time).
    • Throughput (permintaan per detik).
    • Penggunaan CPU dan RAM pada server.

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:

  • Mengotomatisasi training model setiap kali ada perubahan pada branch utama.
  • Mengupdate artefak model terbaru (model.pkl) agar selalu sinkron dengan versi kode terkini.
  • Memastikan pipeline berjalan konsisten di berbagai lingkungan dengan bantuan Docker.

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 codebuild imagepush ke Docker Hub, hingga rolling update ke VPS, sehingga developer tidak perlu melakukan deployment manual.

Berikut Flownya

 

Full Flow dari aplikasi saya buat

PlantUML diagram

 

Kesimpulan

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 validationmonitoring 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.

Future Work

Untuk pengembangan berikutnya, beberapa hal yang dapat ditambahkan antara lain:

  • Hybrid Recommender System → mengombinasikan Collaborative Filtering dengan metode lain untuk mengatasi masalah cold start.
  • A/B Testing & Canary Deployment → membandingkan performa model lama dengan model baru sebelum melakukan full deployment.
  • Model Drift Detection → menambahkan deteksi otomatis terhadap perubahan distribusi data pengguna agar rekomendasi tetap akurat.
  • Cloud Native Deployment → memperluas skala deployment dengan Kubernetes atau platform cloud lainnya.

 

BERIKUT ADALAH HASIL AKHIR PROJEK SAYA (UNTUK WEBSITE REKOMENDASI)



 

Informasi Course Terkait
  Kategori: Artificial Intelligence
  Course: Master Class Data Science