book-recommender-mf

Matrix-factorization book recommender trained on 3M Goodreads review ratings (52110 users, 369349 books, 32 latent factors). Predicts a 1-10 star rating a user would give any book and ranks unseen books to recommend.

Model details

  • Artifact: book-recommender-mf-v3
  • Version: v3-full-3m
  • Content hash: sha256:2f2aa3038c443856e14e74ac13d6914b86178b0e78df0d8341e9988c5a53d716

Intended use

Ranking book recommendations for a known user: load the latent factors, score all books the user has not rated, take the top-N. Also usable to estimate a rating for a (user, book) pair. The ids are Goodreads book ids; resolve titles/descriptions separately (e.g. via a Goodreads metadata dump).

Evaluation

User-wise 20% holdout on the 3M-row training set: best val RMSE 0.8995 (at epoch 4 of 20). Hit@10 on 200 held-out users was 0.0 — the model did not place a >=4-star held-out rating in the top 10 of 369k unrated books; treat ranking quality as unverified at this scale. Runtime is a plain NumPy dot product; no framework needed.

Usage

python -m venv .venv && .venv/bin/pip install numpy; then: python scripts/recommend.py --bundle (ships in scripts/recommend.py). The bundle contains model.npz (user_factors, book_factors, user_bias, book_bias, global_mean), users.json, books.json, id2book.json, meta.json.

Limitations

Trained on a popularity-filtered subset (books/users with >=5 ratings) of 3 Goodreads shard slices; cold-start users/books are not represented. Rating-only signal: no title, author or genre features, so it cannot recommend by content. Full 32-shard Goodreads data (7.4GB, license 'other') is the source; check dataset terms before redistribution. val RMSE reflects rating prediction, not recommendation quality.

Provenance

Published by Mill from an immutable artifact. The content hash above identifies the exact approved model payload.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support