BAB 32. AI MATCHING ALGORITHM
Pendekatan
Implementasi awal menggunakan Rule-Based Intelligent Recommendation Engine.
Alasan pemilihan pendekatan ini:
| Alasan | Penjelasan |
|---|---|
| Mudah diimplementasikan | Tidak membutuhkan training data |
| Transparan | Skor dapat dijelaskan |
| Tidak butuh dataset besar | Cocok untuk tahap awal |
| Mudah dievaluasi | Logika dapat diaudit |
| Mudah ditingkatkan | Dapat migrasi ke ML di masa depan |
Formula Dasar
Di mana adalah nilai faktor ke- (0–100) dan adalah bobot faktor ke-.
Matching Score =
(Skill Similarity × 0.30) +
(History Success × 0.20) +
(Rating × 0.15) +
(Availability × 0.10) +
(Distance × 0.10) +
(Helping Experience × 0.05) +
(Same Grade × 0.05) +
(Current Workload × 0.05)
─────────────────────────────
Total Bobot = 1.00
Detail Perhitungan Per Faktor
1. Skill Similarity — Bobot 30%
Mengukur seberapa relevan skill tutor dengan kebutuhan siswa.
| Kondisi | Skor |
|---|---|
| Materi sama persis | 100 |
| Mata pelajaran sama | 80 |
| Bidang serumpun (misal: Fisika ↔ Kimia) | 60 |
| Tidak relevan | 0 |
2. History Success — Bobot 20%
Mengukur tingkat keberhasilan tutor menyelesaikan masalah siswa.
| Success Rate | Skor |
|---|---|
| ≥ 95% | 95–100 |
| 80–94% | 80–94 |
| 60–79% | 60–79 |
| < 60% | Proporsional |
| Tidak ada histori | 50 (neutral) |
3. Rating — Bobot 15%
Mengkonversi rating rata-rata menjadi skor 0–100.
Contoh: Rating 4.9 → 98 poin
4. Availability — Bobot 10%
Mengukur ketersediaan tutor saat ini.
| Kondisi | Skor |
|---|---|
| Tersedia sekarang | 100 |
| Tersedia < 30 menit | 80 |
| Tersedia < 2 jam | 60 |
| Tersedia hari ini | 40 |
| Tidak tersedia | 0 |
5. Distance — Bobot 10%
Mengukur jarak tutor dari lokasi yang diinginkan siswa.
| Jarak | Skor |
|---|---|
| < 50 meter | 100 |
| < 100 meter | 90 |
| < 200 meter | 80 |
| < 500 meter | 60 |
| > 500 meter | 30 |
6. Helping Experience — Bobot 5%
Mengukur pengalaman tutor berdasarkan total sesi yang pernah dilakukan.
7. Same Grade — Bobot 5%
Tutor yang berada di tingkat kelas yang sama atau lebih tinggi mendapat prioritas.
| Kondisi | Skor |
|---|---|
| Kelas sama | 100 |
| Kelas lebih tinggi | 80 |
| Kelas lebih rendah | 40 |
8. Current Workload — Bobot 5%
Semakin sedikit beban aktif tutor, semakin tinggi skor.
Contoh Perhitungan Lengkap
Skenario: Siswa meminta tutor Integral — ada kandidat Tutor A.
| Faktor | Nilai | Bobot | Hasil |
|---|---|---|---|
| Skill Similarity | 100 | 0.30 | 30.0 |
| History Success | 95 | 0.20 | 19.0 |
| Rating | 98 | 0.15 | 14.7 |
| Availability | 100 | 0.10 | 10.0 |
| Distance | 90 | 0.10 | 9.0 |
| Helping Experience | 80 | 0.05 | 4.0 |
| Same Grade | 100 | 0.05 | 5.0 |
| Current Workload | 70 | 0.05 | 3.5 |
| TOTAL | 95.2 |
✅ Tutor A dengan skor 95.2 menjadi prioritas pertama.
Pseudocode Scoring Engine
function calculateMatchingScore(Student $tutor, Request $request): float
{
$skillScore = $this->calculateSkillSimilarity($tutor, $request);
$successScore = $this->calculateHistorySuccess($tutor);
$ratingScore = $tutor->average_rating / 5 * 100;
$availScore = $this->calculateAvailability($tutor, $request);
$distanceScore = $this->calculateDistance($tutor, $request);
$expScore = min($tutor->total_sessions_as_tutor / 50 * 100, 100);
$gradeScore = $this->calculateSameGrade($tutor, $request->student);
$workloadScore = max(100 - ($tutor->activeBookings->count() * 20), 0);
return (
($skillScore * 0.30) +
($successScore * 0.20) +
($ratingScore * 0.15) +
($availScore * 0.10) +
($distanceScore * 0.10) +
($expScore * 0.05) +
($gradeScore * 0.05) +
($workloadScore * 0.05)
);
}