How does the notepad compare to the field?
Every model in this project is our own rewrite of someone else's, so a comparison is only worth anything if all of them get the same deal. We gave nineteen models one identical training budget, ran each twice with different random starts, and scored them the same way on three very different datasets: movie ratings, Amazon game purchases, and short-video watch logs. Nothing was tuned for our own method. The point was not to win — the notepad's case rests on being cheap and inspectable — but to find out honestly where it sits among models people actually publish.
On ID vectors the notepad is mid-table everywhere. On shared frozen content vectors its published configuration leads Amazon outright — but a configuration ladder shows where that comes from: given the identical one-variable swap the baselines received, the notepad scores 0.085, below even its own ID row; the content anchor lifts it to 0.130; the tuned write constants more than double it to 0.284. The lead is real but belongs to the tuned configuration, and the baselines were not given an equivalent tuning pass. On MIND-large the content-anchored notepad sits upper-mid-table. The one claim that survives every column untouched: rank-16 matches full memory everywhere.
Part 1 · Learned ID vectors
Every model learns its item table from interaction IDs alone — the like-for-like protocol of the original campaign. Columns are comparable down their own length only.
MovieLens-1M
Ranked by nDCG@10 on the held-out test set. All runs finished.
| # | Model | HR@1 | HR@10 | nDCG@10 | nDCG@20 |
|---|---|---|---|---|---|
| 1 | HSTU | 0.4536 | 0.8359 | 0.6419 | 0.6596 |
| 2 | Mamba4Rec | 0.4494 | 0.8240 | 0.6336 | 0.6524 |
| 3 | LRURec | 0.4412 | 0.8247 | 0.6310 | 0.6494 |
| 4 | SASRec | 0.4372 | 0.8219 | 0.6259 | 0.6448 |
| 5 | BSARec | 0.4325 | 0.8212 | 0.6235 | 0.6421 |
| 6 | TiSASRec | 0.4315 | 0.8215 | 0.6224 | 0.6414 |
| 7 | DuoRec | 0.4285 | 0.8198 | 0.6211 | 0.6401 |
| 8 | GRU4Rec | 0.4286 | 0.8161 | 0.6179 | 0.6353 |
| 9 | FWPRec (dense) | 0.4136 | 0.8269 | 0.6148 | 0.6332 |
| 10 | FWPRec (rank-16) | 0.4081 | 0.8248 | 0.6120 | 0.6316 |
| 11 | LinRec | 0.3853 | 0.7982 | 0.5859 | 0.6060 |
| 12 | FPMC | 0.3400 | 0.7797 | 0.5470 | 0.5724 |
| 13 | SeqRules | 0.3535 | 0.7439 | 0.5400 | 0.5661 |
| 14 | BERT4Rec | 0.3132 | 0.6858 | 0.4918 | 0.5169 |
| 15 | BPRMF | 0.1696 | 0.6682 | 0.3913 | 0.4315 |
| 16 | ItemKNN | 0.1369 | 0.5780 | 0.3282 | 0.3743 |
| 17 | Popularity | 0.0892 | 0.4363 | 0.2386 | 0.2851 |
| — | NRMS | n/a | n/a | n/a | n/a |
| — | LSTUR | n/a | n/a | n/a | n/a |
Amazon Video Games
Ranked by nDCG@10 on the held-out test set. All runs finished.
| # | Model | HR@1 | HR@10 | nDCG@10 | nDCG@20 |
|---|---|---|---|---|---|
| 1 | BSARec | 0.0795 | 0.2159 | 0.1412 | 0.1538 |
| 2 | BERT4Rec | 0.0771 | 0.2191 | 0.1411 | 0.1549 |
| 3 | SASRec | 0.0747 | 0.2162 | 0.1383 | 0.1508 |
| 4 | TiSASRec | 0.0739 | 0.2157 | 0.1379 | 0.1509 |
| 5 | GRU4Rec | 0.0763 | 0.2092 | 0.1364 | 0.1487 |
| 6 | HSTU | 0.0745 | 0.2115 | 0.1362 | 0.1497 |
| 7 | LRURec | 0.0740 | 0.2093 | 0.1353 | 0.1482 |
| 8 | Mamba4Rec | 0.0723 | 0.2070 | 0.1329 | 0.1455 |
| 9 | FPMC | 0.0457 | 0.2044 | 0.1123 | 0.1403 |
| 10 | SeqRules | 0.0562 | 0.1801 | 0.1097 | 0.1326 |
| 11 | FWPRec (dense) | 0.0548 | 0.1699 | 0.1061 | 0.1184 |
| 12 | FWPRec (rank-16) | 0.0542 | 0.1698 | 0.1056 | 0.1179 |
| 13 | DuoRec | 0.0460 | 0.1668 | 0.0989 | 0.1132 |
| 14 | ItemKNN | 0.0465 | 0.1607 | 0.0953 | 0.1184 |
| 15 | BPRMF | 0.0415 | 0.1469 | 0.0875 | 0.1002 |
| 16 | Popularity | 0.0300 | 0.1354 | 0.0745 | 0.0882 |
| 17 | LinRec | 0.0294 | 0.1352 | 0.0744 | 0.0876 |
| — | NRMS | n/a | n/a | n/a | n/a |
| — | LSTUR | n/a | n/a | n/a | n/a |
KuaiRand-1K
Ranked by nDCG@10 on the held-out test set. All runs finished.
| # | Model | HR@1 | HR@10 | nDCG@10 | nDCG@20 |
|---|---|---|---|---|---|
| 1 | BPRMF | 0.0982 | 0.8329 | 0.4077 | 0.4453 |
| 2 | SASRec | 0.0980 | 0.7722 | 0.3901 | 0.4217 |
| 3 | TiSASRec | 0.0960 | 0.7719 | 0.3878 | 0.4198 |
| 4 | Mamba4Rec | 0.0760 | 0.7622 | 0.3654 | 0.4004 |
| 5 | GRU4Rec | 0.0723 | 0.7532 | 0.3586 | 0.3924 |
| 6 | LinRec | 0.1008 | 0.6993 | 0.3547 | 0.4007 |
| 7 | FWPRec (rank-16) | 0.0912 | 0.7231 | 0.3531 | 0.4090 |
| 8 | FWPRec (dense) | 0.0914 | 0.7218 | 0.3527 | 0.4087 |
| 9 | HSTU | 0.0665 | 0.7498 | 0.3509 | 0.3881 |
| 10 | DuoRec | 0.0741 | 0.7294 | 0.3473 | 0.3898 |
| 11 | BSARec | 0.0617 | 0.7390 | 0.3409 | 0.3809 |
| 12 | LRURec | 0.0511 | 0.7095 | 0.3160 | 0.3624 |
| 13 | SeqRules | 0.0205 | 0.2004 | 0.0914 | 0.1414 |
| 14 | Popularity | 0.0092 | 0.0931 | 0.0426 | 0.0668 |
| — | ItemKNN | n/a | n/a | n/a | n/a |
| — | FPMC | n/a | n/a | n/a | n/a |
| — | BERT4Rec | n/a | n/a | n/a | n/a |
| — | NRMS | n/a | n/a | n/a | n/a |
| — | LSTUR | n/a | n/a | n/a | n/a |
Does the ranking hold at other list lengths?
Hit rate on MovieLens-1M at four cutoffs. Reading only the ten-item column would overstate the notepad: it places second there, but ninth when only the single top pick counts.
| Model | HR@1 | HR@5 | HR@10 | HR@20 |
|---|---|---|---|---|
| HSTU | 0.4536 | 0.7506 | 0.8359 | 0.9053 |
| Mamba4Rec | 0.4494 | 0.7421 | 0.8240 | 0.8978 |
| LRURec | 0.4412 | 0.7412 | 0.8247 | 0.8973 |
| SASRec | 0.4372 | 0.7340 | 0.8219 | 0.8963 |
| BSARec | 0.4325 | 0.7353 | 0.8212 | 0.8945 |
| FWPRec (dense) | 0.4136 | 0.7293 | 0.8269 | 0.8991 |
| FWPRec (rank-16) | 0.4081 | 0.7280 | 0.8248 | 0.9022 |
| GRU4Rec | 0.4286 | 0.7281 | 0.8161 | 0.8845 |
Part 2 · Frozen content vectors
The same models, given identical frozen Qwen content vectors instead of learned IDs. Different information, so nothing in this part may be compared against Part 1 — except deliberately, in the paired exhibit below, where that comparison is the entire point.
What one change of representation does on Amazon
Identical split, candidates, seeds and training budget; the only change is swapping each model's learned ID table for the same frozen content vectors. The notepad moves from eleventh place to first.
| Model | ID vectors | Content vectors | Δ |
|---|---|---|---|
| FWPRec (dense) | 0.1061 | 0.2842 | +0.1781 |
| FWPRec (rank-16) | 0.1056 | 0.2836 | +0.1780 |
| FPMC | 0.1123 | 0.2562 | +0.1439 |
| HSTU | 0.1362 | 0.1994 | +0.0632 |
| LRURec | 0.1353 | 0.1967 | +0.0614 |
| BSARec | 0.1412 | 0.1908 | +0.0496 |
| Mamba4Rec | 0.1329 | 0.1836 | +0.0507 |
| GRU4Rec | 0.1364 | 0.1635 | +0.0271 |
| SASRec | 0.1383 | 0.1502 | +0.0119 |
| TiSASRec | 0.1379 | 0.1445 | +0.0065 |
| DuoRec | 0.0989 | 0.1387 | +0.0399 |
| LinRec | 0.0744 | 0.1100 | +0.0356 |
| BPRMF | 0.0875 | 0.0806 | -0.0069 |
Read the notepad's row with care: unlike every other row, its content-side number uses ten tuned constants from an earlier search — the baselines' deltas are representation alone, the notepad's is representation plus tuning. The ladder below separates the two; the notepad's symmetric-swap score is 0.0852.
Where the notepad's content number actually comes from
One knob-group at a time, from the identical swap the baselines received up to the published configuration. The anchor and the write mechanism contribute little; the tuned constants carry the result. Under strictly equal treatment the notepad scores 0.0852 — below its own ID-column row.
| Configuration | What it adds | nDCG@10 |
|---|---|---|
| Same one-variable swap the baselines got | the symmetric row | 0.0846 |
| + content anchor | mean of the user's item vectors | 0.1305 |
| + sequential writes | evolving write state | 0.1318 |
| + tuned constants | write gains ×10, mixing weight, week/quarter time scales | 0.2842 |
Amazon Video Games — frozen Qwen content vectors
Ranked by nDCG@10 on the held-out test set. All runs finished.
| # | Model | HR@1 | HR@10 | nDCG@10 | nDCG@20 |
|---|---|---|---|---|---|
| 1 | FWPRec (dense) | — | 0.4982 | 0.2842 | — |
| 2 | FWPRec (rank-16) | — | 0.5000 | 0.2836 | — |
| 3 | FPMC | — | 0.4254 | 0.2562 | — |
| 4 | HSTU | — | 0.3548 | 0.1994 | — |
| 5 | LRURec | — | 0.3570 | 0.1967 | — |
| 6 | BSARec | — | 0.3406 | 0.1908 | — |
| 7 | Mamba4Rec | — | 0.3289 | 0.1836 | — |
| 8 | GRU4Rec | — | 0.2913 | 0.1635 | — |
| 9 | SASRec | — | 0.2480 | 0.1502 | — |
| 10 | TiSASRec | — | 0.2344 | 0.1445 | — |
| 11 | DuoRec | — | 0.2205 | 0.1387 | — |
| 12 | LinRec | — | 0.1821 | 0.1100 | — |
| 13 | BPRMF | — | 0.1447 | 0.0806 | — |
| — | Popularity | n/a | n/a | n/a | n/a |
| — | ItemKNN | n/a | n/a | n/a | n/a |
| — | SeqRules | n/a | n/a | n/a | n/a |
| — | BERT4Rec | n/a | n/a | n/a | n/a |
| — | NRMS | n/a | n/a | n/a | n/a |
| — | LSTUR | n/a | n/a | n/a | n/a |
MIND-large — frozen Qwen content vectors
Ranked by nDCG@10 on the held-out test set. All runs finished.
| # | Model | HR@1 | HR@10 | nDCG@10 | nDCG@20 |
|---|---|---|---|---|---|
| 1 | Mamba4Rec | — | 0.7710 | 0.4242 | — |
| 2 | BSARec | — | 0.7700 | 0.4225 | — |
| 3 | HSTU | — | 0.7626 | 0.4113 | — |
| 4 | DuoRec | — | 0.7544 | 0.4105 | — |
| 5 | LRURec | — | 0.7616 | 0.4090 | — |
| 6 | NRMS | — | 0.7607 | 0.4067 | — |
| 7 | FWPRec (dense) | — | 0.7527 | 0.4056 | — |
| 8 | GRU4Rec | — | 0.7557 | 0.4036 | — |
| 9 | FWPRec (rank-16) | — | 0.7496 | 0.4025 | — |
| 10 | SASRec | — | 0.7460 | 0.3964 | — |
| 11 | TiSASRec | — | 0.7444 | 0.3945 | — |
| 12 | LSTUR | — | 0.7473 | 0.3943 | — |
| 13 | FPMC | — | 0.7132 | 0.3782 | — |
| 14 | BPRMF | — | 0.6995 | 0.3600 | — |
| 15 | LinRec | — | 0.6632 | 0.3228 | — |
| 16 | ItemKNN | — | 0.6243 | 0.3028 | — |
| 17 | SeqRules | — | 0.6095 | 0.2960 | — |
| 18 | Popularity | — | 0.6011 | 0.2910 | — |
| — | BERT4Rec | n/a | n/a | n/a | n/a |
How it was run
177 of 177 runs finished so far. Each one records the code version, a checksum of the data it read, the exact settings, the GPU it used and how long it took, and each re-checks its own scores from its saved predictions before being counted.
Two seeds per model, reported as the mean; we do not quote a standard deviation from two numbers. The three datasets are scored against different-sized candidate lists, so a column is only comparable down its own length, never across. Rows marked n/a could not be run and say why in the record: NRMS and LSTUR need item text the three ID datasets do not carry (they do run natively on MIND-large), ItemKNN's memory grows with the square of a user's history, and FPMC's three embedding tables over 4.4 million videos exceed the cards we have. The frozen-Qwen columns are reported separately from the ID columns and never merged: same models, different information. A handful of MIND-large and KuaiRand control runs are still finishing.