Tutorial (MovieLens)¶
This tutorial follows the benchmark path on MovieLens-1M. It is a narrative version of the
configs/example.yaml run.
1. Choose the dataset¶
MovieLens-1M is small enough for quick iteration and has genre features for every movie.
datasets:
- ml-1m
2. Pick a donor¶
Start with ALS. It trains on warm interactions only after the pseudo-cold split.
donors:
- name: als
params:
factors: 64
regularization: 0.05
iterations: 20
3. Compare baselines and transfer¶
Grouped MP is the strong popularity baseline. linmap tests direct content-to-score transfer.
knn_score_avg is the naive neighbor baseline.
methods:
- name: grouped_most_popular_pers
- name: linmap
- name: knn_score_avg
params:
k: 20
4. Keep the split honest¶
splitter:
name: pseudo_cold
params:
cold_frac: 0.2
val_frac: 0.1
n_pop_buckets: 5
min_item_interactions: 5
The splitter removes pseudo-cold items from donor training and neighbor construction. See the evaluation protocol for the invariant.
5. Run¶
uv run warmbench --config configs/example.yaml --dry-run
uv run warmbench --config configs/example.yaml
Expected direction: linmap should be competitive with or stronger than the personalized Grouped MP
baseline on AUC, while naive KNN is a useful check for inherited popularity.
6. Read the metrics¶
Ranking metrics (recall@k, precision@k, map@k, ndcg@k, mrr@k) show top-k quality. AUC is
reported as an auxiliary per-user ranking signal. For final claims, compare across seeds rather than a
single run.