Lewati ke konten utama

BAB 32. AI MATCHING ALGORITHM

Pendekatan

Implementasi awal menggunakan Rule-Based Intelligent Recommendation Engine.

Alasan pemilihan pendekatan ini:

AlasanPenjelasan
Mudah diimplementasikanTidak membutuhkan training data
TransparanSkor dapat dijelaskan
Tidak butuh dataset besarCocok untuk tahap awal
Mudah dievaluasiLogika dapat diaudit
Mudah ditingkatkanDapat migrasi ke ML di masa depan

Formula Dasar

Matching Score=i=1n(Fi×Wi)\text{Matching Score} = \sum_{i=1}^{n} (F_i \times W_i)

Di mana FiF_i adalah nilai faktor ke-ii (0–100) dan WiW_i adalah bobot faktor ke-ii.

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.

KondisiSkor
Materi sama persis100
Mata pelajaran sama80
Bidang serumpun (misal: Fisika ↔ Kimia)60
Tidak relevan0

2. History Success — Bobot 20%

Mengukur tingkat keberhasilan tutor menyelesaikan masalah siswa.

Success Rate=Solved SessionsTotal Sessions×100\text{Success Rate} = \frac{\text{Solved Sessions}}{\text{Total Sessions}} \times 100
Success RateSkor
≥ 95%95–100
80–94%80–94
60–79%60–79
< 60%Proporsional
Tidak ada histori50 (neutral)

3. Rating — Bobot 15%

Mengkonversi rating rata-rata menjadi skor 0–100.

Rating Score=Avg Rating5×100\text{Rating Score} = \frac{\text{Avg Rating}}{5} \times 100

Contoh: Rating 4.9 → 98 poin

4. Availability — Bobot 10%

Mengukur ketersediaan tutor saat ini.

KondisiSkor
Tersedia sekarang100
Tersedia < 30 menit80
Tersedia < 2 jam60
Tersedia hari ini40
Tidak tersedia0

5. Distance — Bobot 10%

Mengukur jarak tutor dari lokasi yang diinginkan siswa.

JarakSkor
< 50 meter100
< 100 meter90
< 200 meter80
< 500 meter60
> 500 meter30

6. Helping Experience — Bobot 5%

Mengukur pengalaman tutor berdasarkan total sesi yang pernah dilakukan.

Experience Score=min(Total Sessions50×100, 100)\text{Experience Score} = \min\left(\frac{\text{Total Sessions}}{50} \times 100,\ 100\right)

7. Same Grade — Bobot 5%

Tutor yang berada di tingkat kelas yang sama atau lebih tinggi mendapat prioritas.

KondisiSkor
Kelas sama100
Kelas lebih tinggi80
Kelas lebih rendah40

8. Current Workload — Bobot 5%

Semakin sedikit beban aktif tutor, semakin tinggi skor.

Workload Score=max(100(Active Sessions×20), 0)\text{Workload Score} = \max\left(100 - (\text{Active Sessions} \times 20),\ 0\right)

Contoh Perhitungan Lengkap

Skenario: Siswa meminta tutor Integral — ada kandidat Tutor A.

FaktorNilaiBobotHasil
Skill Similarity1000.3030.0
History Success950.2019.0
Rating980.1514.7
Availability1000.1010.0
Distance900.109.0
Helping Experience800.054.0
Same Grade1000.055.0
Current Workload700.053.5
TOTAL95.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)
);
}