Neural Mastery
← Practice
Mean Average Precision at K (MAP@K)medium

Mean Average Precision at K (MAP@K)

medium Classical ML from Scratch 15 min

NumPy allowed · plain Python earns 10 bonus points

RAG step 1/4

A query retrieves context

Embedding similarity ranks the documents before generation.
Open lesson →
01query
02embed
03retrieve
04context
What is RAG?→ embed →top context
retrieval.md44%
rag-systems.md33%
agents.md24%

Cosine-like similarity scores ranked before context assembly

Implement Average Precision@K for one user, the per-query building block of the MAP@K metric used to evaluate recommendation ranking quality.

Task

Implement average_precision_at_k(ranked_items, relevant_items, k). Walk ranked_items[:k] in order; every time you hit a relevant item, compute precision-so-far (hits found / position, 1-indexed) and record it. Return the average of those recorded precision values, or 0.0 if no relevant item was found in the top k.

Function Signature

average_precision_at_k(ranked_items: list[str], relevant_items: set, k: int) -> float

Examples

Example 1: all relevant, front-loaded
Input: ranked_items = ['a', 'b', 'c'] relevant_items = ['a', 'b', 'c'] k = 3
Output: 1
Example 2: no relevant found
Input: ranked_items = ['a', 'b'] relevant_items = ['z'] k = 2
Output: 0
Example 3: relevant items spread out
Input: ranked_items = ['a', 'x', 'b', 'y'] relevant_items = ['a', 'b'] k = 4
Output: 0.8333333333333333

Constraints

  • k >= 1
Python3Saved ✓
def average_precision_at_k(ranked_items, relevant_items, k):
# Your implementation here
pass

Case 1: all relevant, front-loaded
Input: ranked_items = ['a', 'b', 'c'] relevant_items = ['a', 'b', 'c'] k = 3
Expected: 1
Case 2: no relevant found
Input: ranked_items = ['a', 'b'] relevant_items = ['z'] k = 2
Expected: 0
Case 3: relevant items spread out
Input: ranked_items = ['a', 'x', 'b', 'y'] relevant_items = ['a', 'b'] k = 4
Expected: 0.8333333333333333