まとめ
- Mengelompokkan metrik ranking dan menjelaskan perannya dalam sistem rekomendasi, pencarian, dan iklan.
- Membandingkan NDCG, MAP, Recall@k, serta Hit Rate melalui contoh kode.
- Merangkum cara memilih kumpulan metrik yang selaras dengan KPI bisnis dan bagaimana melaporkan peningkatannya.
Ringkasan evaluasi ranking #
Model ranking memberi skor pada item agar yang “paling relevan” muncul di urutan teratas. Dalam rekomendasi atau pencarian, kualitas posisi atas sangat memengaruhi keterlibatan dan pendapatan, sehingga evaluasi harus menyorot bagian tersebut. Bab ini memperkenalkan keluarga metrik utama dan bagaimana saling melengkapi.
Kategori metrik #
1. List-wise #
- NDCG / DCG (NDCG): menggunakan bobot logaritmik sehingga posisi teratas lebih bernilai.
- MAP (Mean Average Precision) (MAP): merata-ratakan precision tiap item relevan; cocok saat satu kueri memiliki banyak relevan.
2. Top-k #
- Recall@k (Recall@k): proporsi item relevan yang muncul di top k.
- Hit Rate / Hit@k (Hit Rate): apakah ada minimal satu item relevan di top k.
- Top-k Accuracy (Top-k Accuracy): berguna ketika model klasifikasi dipakai untuk rekomendasi top-k.
3. Pair-wise #
- AUC (versi ranking): probabilitas item relevan berada di atas item non-relevan.
- Kendall’s τ / Korelasi Spearman: membandingkan urutan penuh antar ranking.
Membandingkan metrik ranking #
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import average_precision_score, ndcg_score
y_true = np.array(
[
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
]
)
y_score = np.array(
[
[0.9, 0.3, 0.2, 0.1, 0.6, 0.05, 0.03, 0.02, 0.01, 0.005],
[0.4, 0.8, 0.2, 0.1, 0.05, 0.6, 0.03, 0.02, 0.01, 0.005],
[0.2, 0.1, 0.85, 0.05, 0.03, 0.02, 0.7, 0.01, 0.005, 0.003],
]
)
def recall_at_k(y_true_row: np.ndarray, y_score_row: np.ndarray, k: int) -> float:
top_k_idx = np.argsort(y_score_row)[::-1][:k]
positives = y_true_row.sum()
if positives == 0:
return 0.0
return y_true_row[top_k_idx].sum() / positives
def hit_rate_at_k(y_true_row: np.ndarray, y_score_row: np.ndarray, k: int) -> float:
top_k_idx = np.argsort(y_score_row)[::-1][:k]
return float(y_true_row[top_k_idx].sum() > 0)
ks = [3, 5]
ndcg5 = ndcg_score(y_true, y_score, k=5)
map_score = np.mean(
[average_precision_score(t, s) for t, s in zip(y_true, y_score)]
)
recalls = [np.mean([recall_at_k(t, s, k) for t, s in zip(y_true, y_score)]) for k in ks]
hits = [np.mean([hit_rate_at_k(t, s, k) for t, s in zip(y_true, y_score)]) for k in ks]
metrics = {
"NDCG@5": ndcg5,
"MAP": map_score,
"Recall@3": recalls[0],
"Recall@5": recalls[1],
"Hit@3": hits[0],
"Hit@5": hits[1],
}
fig, ax = plt.subplots(figsize=(6.5, 3.8))
ax.bar(metrics.keys(), metrics.values(), color="#f97316", alpha=0.85)
ax.set_ylim(0, 1.05)
ax.set_ylabel("Skor")
ax.set_title("Metrik ranking pada contoh rekomendasi")
ax.grid(axis="y", alpha=0.3)
plt.xticks(rotation=25)
plt.tight_layout()

Setiap metrik menekankan aspek berbeda: Recall/Hit menilai cakupan, sementara MAP dan NDCG memperhitungkan urutan. Gunakan kombinasi keduanya untuk menilai perbaikan.
Memilih metrik #
- Tentukan unit evaluasi
Apakah kualitas ranking dihitung per kueri, pengguna, atau sesi. - Definisikan apa yang relevan
Klik, pembelian, atau like—setiap sinyal mengubah interpretasi metrik. - Selaraskan k dengan tampilan
Sesuaikan cut-off dengan jumlah item yang benar-benar ditampilkan produk. - Pertimbangkan bobot bisnis
Beri bobot lebih pada item bernilai tinggi jika beberapa hasil lebih penting. - Hubungkan metrik offline ke KPI online
Validasi peningkatan offline dengan uji A/B dan pantau korelasinya.
Referensi cepat #
| Kategori | Metrik | Halaman terkait | Catatan |
|---|---|---|---|
| List-wise | NDCG / DCG | NDCG | Mengutamakan item bernilai tinggi di posisi awal |
| List-wise | MAP | MAP | Cocok saat ada banyak item relevan |
| Top-k | Recall@k / Hit@k | Recall@k / Hit Rate | Fokus pada cakupan dalam top yang ditampilkan |
| Top-k | Top-k Accuracy | Top-k Accuracy | Menjembatani klasifikasi dan ranking |
| Pair-wise | AUC | ROC-AUC | Probabilitas positif mengalahkan negatif dalam ranking |
Daftar periksa #
- Relevansi item dan unit evaluasi sudah didefinisikan
- Nilai k disesuaikan dengan tampilan UI atau kebutuhan bisnis
- Metrik cakupan (Recall/Hit) dan urutan (NDCG/MAP) dilaporkan bersamaan
- Dibandingkan dengan baseline dan dampak online dipantau
- Data evaluasi mencerminkan tren popularitas terkini