S1 Sistem Informatika - FSTT ISTN Jakarta | Semester Ganjil 2025/2026
Pernahkah kamu bertanya-tanya bagaimana Facebook, Instagram, atau LinkedIn bisa tahu siapa teman yang mungkin kamu kenal? Sistem "People You May Know" atau "Suggested Friends" adalah salah satu implementasi paling sukses dari sistem rekomendasi dalam media sosial.
Pada materi ini, kita akan membedah bagaimana sistem rekomendasi pertemanan bekerja, dengan fokus pada algoritma Mutual Friends โ yaitu merekomendasikan orang berdasarkan teman bersama.
Bayangkan kamu di pesta, dan ada orang yang belum kamu kenal:
Itulah logika Mutual Friends! Semakin banyak teman bersama, semakin tinggi score rekomendasi.
Masalah: Bagaimana cara merekomendasikan teman baru yang relevan kepada user di platform media sosial?
Gunakan algoritma berbasis Graph/Network Analysis untuk cari kandidat terbaik berdasarkan:
Social network bisa direpresentasikan sebagai Graph:
Ali ---- Budi ---- Cici
| | |
| | |
Dedi --- Eka ---- Fani
Pertemanan:
- Ali: berteman dengan Budi, Dedi
- Budi: berteman dengan Ali, Cici, Eka
- Cici: berteman dengan Budi, Fani
- Dedi: berteman dengan Ali, Eka
- Eka: berteman dengan Budi, Dedi, Fani
- Fani: berteman dengan Cici, Eka
Untuk user target (misal: Ali), cari semua "Friends of Friends" (FoF) yang belum berteman dengan Ali.
Untuk setiap kandidat, hitung berapa banyak teman bersama dengan Ali.
| Kandidat | Mutual Friends | Score |
|---|---|---|
| Cici | Budi | 1 |
| Eka | Budi, Dedi | 2 |
| Fani | - | 0 |
Urutkan kandidat berdasarkan score dari tertinggi ke terendah:
// Data struktur pertemanan (adjacency list)
const friendships = {
Ali: ['Budi', 'Dedi'],
Budi: ['Ali', 'Cici', 'Eka'],
Cici: ['Budi', 'Fani'],
Dedi: ['Ali', 'Eka'],
Eka: ['Budi', 'Dedi', 'Fani'],
Fani: ['Cici', 'Eka']
};
// Fungsi untuk mendapatkan rekomendasi teman
function getFriendSuggestions(user, friendships, topN = 5) {
const userFriends = new Set(friendships[user]);
const candidates = {};
// Step 1: Cari Friends of Friends (FoF)
for (let friend of userFriends) {
const friendsOfFriend = friendships[friend];
for (let candidate of friendsOfFriend) {
// Skip jika kandidat adalah user sendiri
if (candidate === user) continue;
// Skip jika sudah berteman
if (userFriends.has(candidate)) continue;
// Hitung mutual friends
if (!candidates[candidate]) {
candidates[candidate] = {
mutualFriends: [],
score: 0
};
}
candidates[candidate].mutualFriends.push(friend);
candidates[candidate].score++;
}
}
// Step 2: Ranking berdasarkan score
const recommendations = Object.entries(candidates)
.map(([name, data]) => ({
name: name,
mutualFriends: data.mutualFriends,
score: data.score
}))
.sort((a, b) => b.score - a.score)
.slice(0, topN);
return recommendations;
}
// Test sistem
console.log("Rekomendasi teman untuk Ali:");
const suggestions = getFriendSuggestions('Ali', friendships);
console.log(suggestions);
/* Output:
[
{
name: 'Eka',
mutualFriends: ['Budi', 'Dedi'],
score: 2
},
{
name: 'Cici',
mutualFriends: ['Budi'],
score: 1
}
]
*/
Algoritma sederhana di atas bagus untuk demo, tapi untuk platform dengan jutaan user (seperti Facebook), perlu optimasi:
Sistem real-world tidak hanya pakai mutual friends. Mereka kombinasikan multiple signals:
function calculateFriendScore(candidate, user) {
let score = 0;
// 1. Mutual Friends (bobot tertinggi: 40%)
score += candidate.mutualFriends * 4;
// 2. Common Groups/Communities (30%)
score += candidate.commonGroups * 3;
// 3. Same Location (15%)
if (candidate.location === user.location) {
score += 1.5;
}
// 4. Common Interests (10%)
const commonInterests = getCommonInterests(candidate, user);
score += commonInterests.length * 0.5;
// 5. Recent Interactions (5%)
if (candidate.recentInteraction) {
score += 0.5;
}
return score;
}
Bagaimana tahu sistem rekomendasi pertemanan berhasil?
| Metrik | Deskripsi | Target |
|---|---|---|
| Acceptance Rate | % rekomendasi yang di-accept user | 15-25% |
| Click-Through Rate | % rekomendasi yang diklik untuk lihat profil | 5-10% |
| Network Growth | Pertumbuhan jumlah pertemanan per user | +10-20% per bulan |
| Engagement | Interaksi dengan teman yang direkomendasi | 50% aktif interact |
ยฉ 2025 ISTN Jakarta - Fakultas Sains Terapan dan Teknologi