Skip to content

A-eye


You're building an image search engine called A-eye 👁. You're using Mean Average Precision at K (MAP@K) to evaluate the performance of your results.

Your dataset contains three queries and their predicted relevance on 1000 images. Calculate MAP@5 for this data.

rng = np.random.default_rng(2703)
df = pd.DataFrame({
    'id': np.tile(range(1000), reps=3),
    'query': np.repeat(["dolphin", "emu", "gorilla"], repeats=1000),
    'pred_score': rng.uniform(low=0, high=1, size=3000),
})

df["relevant"] = False
df.loc[(df.id.isin(rng.choice(1000, size=25, replace=False))) & (df["query"] == "dolphin"), "relevant"] = True
df.loc[(df.id.isin(rng.choice(1000, size=25, replace=False))) & (df["query"] == "emu"), "relevant"] = True
df.loc[(df.id.isin(rng.choice(1000, size=25, replace=False))) & (df["query"] == "gorilla"), "relevant"] = True

print(df)
#        id    query  pred_score  relevant
# 0       0  dolphin    0.690034     False
# 1       1  dolphin    0.555039     False
# 2       2  dolphin    0.001131     False
# 3       3  dolphin    0.453131     False
# 4       4  dolphin    0.942450     False
#    ...      ...         ...       ...
# 2995  995  gorilla    0.650423     False
# 2996  996  gorilla    0.883602     False
# 2997  997  gorilla    0.756802     False
# 2998  998  gorilla    0.143045     False
# 2999  999  gorilla    0.944064     False
library(data.table)

set.seed(6186)
dt <- data.table(
  id = rep(1:1000, times = 3),
  query = rep(c("dolphin", "gorilla", "emu"), each = 1000),
  pred_score = runif(3000, min = 0, max = 1)
)

dt[, relevant := FALSE]
dt[id %in% sample(1000, size = 25, replace = FALSE) & query == "dolphin", relevant := TRUE]
dt[id %in% sample(1000, size = 25, replace = FALSE) & query == "gorilla", relevant := TRUE]
dt[id %in% sample(1000, size = 25, replace = FALSE) & query == "emu", relevant := TRUE]

print(dt)
#         id   query pred_score relevant
#    1:    1 dolphin  0.3276352    FALSE
#    2:    2 dolphin  0.5503843    FALSE
#    3:    3 dolphin  0.2108938    FALSE
#    4:    4 dolphin  0.3693824    FALSE
#    5:    5 dolphin  0.5566705    FALSE
#   ---                                 
# 2996:  996 gorilla  0.7887701    FALSE
# 2997:  997 gorilla  0.1574011    FALSE
# 2998:  998 gorilla  0.2992015    FALSE
# 2999:  999 gorilla  0.3836474    FALSE
# 3000: 1000 gorilla  0.6554015     TRUE

See the solution