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)
);
}