Lewati ke konten utama

BAB 33. RECOMMENDATION ENGINE

Tujuan

Recommendation Engine bertugas memilih tutor terbaik secara bertahap dan adil melalui 5 stage pemrosesan sebelum notifikasi dikirim.


Alur 5 Stage

flowchart LR
S1["Stage 1\n🔍 Filtering"] --> S2["Stage 2\n⚙️ Scoring"]
S2 --> S3["Stage 3\n📊 Ranking"]
S3 --> S4["Stage 4\n⚖️ Fairness\nAdjustment"]
S4 --> S5["Stage 5\n📲 Notification\nCascade"]

style S1 fill:#1e1b4b,color:#a5b4fc
style S2 fill:#4c1d95,color:#ddd6fe
style S3 fill:#2e1065,color:#e9d5ff
style S4 fill:#1e3a5f,color:#93c5fd
style S5 fill:#064e3b,color:#a7f3d0

Stage 1 — Filtering

Menghapus kandidat yang tidak memenuhi syarat dasar sebelum dihitung skornya (efisiensi komputasi).

Filter yang diterapkan:

FilterKondisi
Sekolah samaschool_id harus sama
Status aktifis_active = true
Skill relevanMemiliki skill terkait subject_id
Tidak sedang meetingTidak ada booking dengan status on_going
Bukan diri sendiristudent_id ≠ request.student_id
Tidak diblokirTidak ada relasi blokir

Stage 2 — Scoring

Menghitung seluruh komponen skor untuk setiap kandidat yang lolos filtering.

Lihat detail formula di BAB 32 — AI Matching Algorithm.


Stage 3 — Ranking

Mengurutkan kandidat berdasarkan matching_score dari tertinggi ke terendah.

$candidates = $candidates->sortByDesc('matching_score');

Stage 4 — Fairness Adjustment

Mencegah tutor yang sama selalu dipilih meskipun selalu memiliki skor tertinggi. Ini menjaga distribusi beban yang adil antar tutor.

Formula Adjusted Score:

Adjusted Score=Raw Score(Recent Sessions×Penalty)\text{Adjusted Score} = \text{Raw Score} - (\text{Recent Sessions} \times \text{Penalty})

Keterangan:

  • Recent Sessions = jumlah sesi dalam 7 hari terakhir
  • Penalty = 0.5 per sesi

Contoh:

Tutor A memiliki raw score 95.2 tetapi sudah membantu 6 sesi minggu ini:

Adjusted Score=95.2(6×0.5)=92.2\text{Adjusted Score} = 95.2 - (6 \times 0.5) = 92.2

Jika Tutor B memiliki raw score 93.0 dengan 1 sesi minggu ini:

Adjusted Score=93.0(1×0.5)=92.5\text{Adjusted Score} = 93.0 - (1 \times 0.5) = 92.5

Tutor B dipilih karena adjusted score lebih tinggi.


Stage 5 — Notification Cascade

Notifikasi dikirim secara bertahap (cascade) — bukan serentak ke semua tutor sekaligus.

Alasan: Memberikan waktu respon dan menghindari notifikasi berlebihan.

Contoh Cascade:

[t=0s] → Notifikasi ke Tutor #1
[t=30s] → Jika belum ada respon → Notifikasi ke Tutor #2
[t=60s] → Jika belum ada respon → Notifikasi ke Tutor #3
[t=90s] → Jika semua menolak → Notifikasi ke siswa: "Coba lagi nanti"
sequenceDiagram
participant Sys as System
participant T1 as Tutor #1
participant T2 as Tutor #2
participant T3 as Tutor #3
participant S as Siswa

Sys->>T1: Push notification
Note over T1: Tunggu 30 detik
T1-->>Sys: Tidak merespons
Sys->>T2: Push notification
T2->>Sys: Reject
Sys->>T3: Push notification
T3->>Sys: Accept ✅
Sys->>S: "Tutor ditemukan!"

Roadmap Peningkatan AI

flowchart LR
A["📋 Rule-Based\n(Sekarang)"] --> B["⚖️ Weighted Rule\n(v1.1)"]
B --> C["🔄 Adaptive Weight\n(v1.5)"]
C --> D["🤖 ML Ranking\n(v2.0)"]
D --> E["👥 Collaborative\nFiltering (v2.5)"]
E --> F["🧠 Deep Learning\n(v3.0)"]

style A fill:#059669,color:#fff
style F fill:#7c3aed,color:#fff
FaseMetodeKeunggulan
v1.0Rule-BasedTransparan, mudah diimplementasikan
v1.1Weighted RuleBobot dapat dikonfigurasi admin
v1.5Adaptive WeightBobot menyesuaikan data historis
v2.0ML RankingBelajar dari pola pengguna
v2.5Collaborative FilteringRekomendasi berbasis preferensi serupa
v3.0Deep LearningRekomendasi kontekstual yang sangat akurat