๐Ÿค– Autonomous Information Systems & Edge Intelligence

S1 Sistem Informatika - FSTT ISTN Jakarta | Semester Ganjil 2025/2026

๐Ÿค Materi 7: Analisis Kasus - Friend Suggestion System

๐ŸŽฏ Pendahuluan

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.

๐Ÿ’ญ Analogi Sederhana: Pesta Teman

Bayangkan kamu di pesta, dan ada orang yang belum kamu kenal:

  • Jika 5 temanmu kenal orang itu โ†’ kemungkinan besar kamu juga cocok berteman dengannya!
  • Jika cuma 1 teman yang kenal โ†’ mungkin kurang relevan
  • Jika tidak ada teman bersama โ†’ hampir tidak mungkin disarankan

Itulah logika Mutual Friends! Semakin banyak teman bersama, semakin tinggi score rekomendasi.

๐Ÿ“Š Problem Statement

Masalah: Bagaimana cara merekomendasikan teman baru yang relevan kepada user di platform media sosial?

Tantangan:

Solusi: Friend Suggestion System

Gunakan algoritma berbasis Graph/Network Analysis untuk cari kandidat terbaik berdasarkan:

  1. Mutual Friends: Jumlah teman bersama (paling penting!)
  2. Common Interests: Kesamaan minat/hobi
  3. Location: Lokasi geografis yang sama
  4. Network Distance: Seberapa dekat dalam graph pertemanan

๐Ÿ”— Konsep Graph dalam Social Network

Social network bisa direpresentasikan sebagai Graph:

๐Ÿ“Š Contoh Graph Sederhana:

    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
                

๐Ÿงฎ Algoritma: Mutual Friends Recommendation

Step 1: Identifikasi Kandidat

Untuk user target (misal: Ali), cari semua "Friends of Friends" (FoF) yang belum berteman dengan Ali.

Contoh untuk Ali:

  • Teman Ali: Budi, Dedi
  • Teman Budi: Ali, Cici, Eka
  • Teman Dedi: Ali, Eka
  • FoF (belum berteman dengan Ali): Cici, Eka, Fani

Step 2: Hitung Mutual Friends Score

Untuk setiap kandidat, hitung berapa banyak teman bersama dengan Ali.

Kandidat Mutual Friends Score
Cici Budi 1
Eka Budi, Dedi 2
Fani - 0

Step 3: Ranking & Filter

Urutkan kandidat berdasarkan score dari tertinggi ke terendah:

  1. Eka (2 mutual friends) โ†’ Rekomendasi tertinggi!
  2. Cici (1 mutual friend)
  3. Fani (0 mutual friends) โ†’ Tidak direkomendasikan

๐Ÿ’ป Implementasi Code

			
// 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 
    }
]
*/

โšก Optimasi untuk Skala Besar

Algoritma sederhana di atas bagus untuk demo, tapi untuk platform dengan jutaan user (seperti Facebook), perlu optimasi:

1. Batasi Kandidat dengan Heuristics

2. Pre-computation & Caching

3. Indexing & Database Optimization

๐ŸŽฏ Fitur Tambahan: Scoring yang Lebih Kompleks

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

๐Ÿ“Š Evaluasi & Metrik

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

๐Ÿ”’ Pertimbangan Privacy & Ethics

โš ๏ธ Hal yang Perlu Diperhatikan:

  • Jangan terlalu agresif: Rekomendasi yang terlalu akurat bisa creepy
  • Respect privacy settings: Jika user hide friend list, jangan gunakan sebagai signal
  • Avoid sensitive connections: Jangan sarankan ex-partner, mantan atasan yang bermasalah, dll
  • Transparansi: Beri tahu kenapa orang ini disarankan ("5 mutual friends")
  • User control: Beri opsi "Don't suggest this person" atau "Hide"

๐ŸŽ“ Kesimpulan

๐Ÿ“ Poin-Poin Penting:

  1. Friend Suggestion menggunakan Graph Analysis untuk cari kandidat terbaik
  2. Mutual Friends adalah signal terkuat (semakin banyak, semakin relevan)
  3. Algoritma dasar: Cari FoF โ†’ Hitung mutual friends โ†’ Ranking โ†’ Rekomendasi
  4. Optimasi penting: Pre-computation, caching, indexing untuk skala besar
  5. Real-world: Kombinasi multiple signals (location, interests, groups, interactions)
  6. Privacy: Transparansi dan user control adalah kunci

๐Ÿ’ก Takeaway untuk Developer:

  • Mulai dengan algoritma sederhana (mutual friends) dulu
  • Test dengan dataset kecil sebelum scale up
  • Monitor metrik acceptance rate untuk validasi
  • Iterate: tambahkan signal lain jika perlu (location, interests)
  • Jangan lupakan aspek privacy dan user experience!

ยฉ 2025 ISTN Jakarta - Fakultas Sains Terapan dan Teknologi