scikit-surprise
An easy-to-use library for recommender systems.
What it is and what it does
Scikit-surprise is a Python library for building and analyzing recommender systems that work with explicit rating data. It provides a collection of ready-to-use prediction algorithms—including SVD, matrix factorization variants (PMF, SVD++, NMF), k-NN methods, baseline algorithms, and co-clustering—along with built-in similarity measures and tools for cross-validation and hyperparameter tuning. The library is designed to give users control over experiments through clear documentation and easy dataset handling, supporting both built-in datasets (Movielens, Jester) and custom data.
The package depends on joblib, numpy, and scipy for its core numerical and parallelization operations. It is actively maintained, supports Python 3.10 through 3.14, and is distributed as precompiled wheels for macOS, Linux, and Windows. The library does not support implicit ratings or content-based information, focusing instead on explicit rating prediction tasks.
Use it for:
- Evaluate and compare different collaborative filtering algorithms on rating datasets using cross-validation and standard metrics (RMSE, MAE).
- Prototype and tune recommender systems with grid search over algorithm hyperparameters before deploying to production.
- Analyze algorithm performance on Movielens or Jester datasets to understand baseline behavior and algorithm trade-offs.
- Build custom recommendation algorithms by extending the library's base classes and integrating them into the evaluation framework.
- Benchmark matrix factorization and neighborhood-based methods on your own explicit-rating datasets.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Scikit-surprise builds and evaluates recommender systems that predict explicit ratings using algorithms like SVD, matrix factorization, k-NN, and baseline methods.
Yes. Scikit-surprise is a mature, actively maintained library (Production/Stable status, 6806 stars, recent release) with no known security vulnerabilities, permissive licensing, and solid support for modern Python versions. It is the standard choice for explicit-rating recommender system research and prototyping. Install it if you need to build, evaluate, or compare collaborative filtering algorithms; skip it only if you require implicit feedback or content-based methods.
Install
scikit-surprise on PyPI
pip
pip install scikit-surpriseuv
uv add scikit-surprisepoetry
poetry add scikit-surpriseInstalling scikit-surprise
Before you install
Medium install friction due to compiled wheels for multiple Python versions (3.10–3.14) and platforms. Active maintenance with recent release (76 days ago) and 6806 repository stars indicate solid ongoing support.
License in practice
BSD 3-Clause license is permissive; you can use, modify, and distribute the package freely in commercial and private projects with attribution and liability disclaimers.
Quickstart
from surprise import SVD, Dataset
from surprise.model_selection import cross_validate
data = Dataset.load_builtin('ml-100k')
algo = SVD()
cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5)
Requires Python 3.10 or later; joblib, numpy, and scipy must be installed as runtime dependencies.
Verify before relying
- Whether the package supports implicit feedback or content-based filtering (description states it does not, but confirmation of scope limits would help).
- Performance characteristics on datasets larger than Movielens 1M or with sparse rating matrices.
Package facts
| License | Copyright (c) 2016, Nicolas Hug All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1.… (full text in the JSON record) (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 3 — joblib, numpy, scipy |
| Maintenance | actively maintained — 76 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 119,875/month — #12,052 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: scikit_surprise-1.1.5-cp310-cp310-macosx_11_0_arm64.whl; scikit_surprise-1.1.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; scikit_surprise-1.1.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; scikit_surprise-1.1.5-cp310-cp310-win_amd64.whl; scikit_surprise-1.1.5-cp311-cp311-macosx_11_0_arm64.whl; scikit_surprise-1.1.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; scikit_surprise-1.1.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; scikit_surprise-1.1.5-cp311-cp311-win_amd64.whl; scikit_surprise-1.1.5-cp312-cp312-macosx_11_0_arm64.whl; scikit_surprise-1.1.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; scikit_surprise-1.1.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; scikit_surprise-1.1.5-cp312-cp312-win_amd64.whl; scikit_surprise-1.1.5-cp313-cp313-macosx_11_0_arm64.whl; scikit_surprise-1.1.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; scikit_surprise-1.1.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; scikit_surprise-1.1.5-cp313-cp313-win_amd64.whl; scikit_surprise-1.1.5-cp314-cp314-macosx_11_0_arm64.whl; scikit_surprise-1.1.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl; scikit_surprise-1.1.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl; scikit_surprise-1.1.5-cp314-cp314t-macosx_11_0_arm64.whl
Keywords: recommender, recommendation system
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
tensorflow-recommendersTensorFlow Recommenders provides a Keras-based…
permissive · top 15,000 on PyPI
implicitImplicit provides fast Python implementations…
permissive · top 15,000 on PyPI
imbalanced-learnProvides re-sampling techniques to address…
permissive · top 5,000 on PyPI
trueskillImplements the TrueSkill rating algorithm to…
permissive · top 15,000 on PyPI
recboleRecBole provides a unified framework for…
permissive · top 15,000 on PyPI
phikPhi_K computes a correlation coefficient that…
permissive · top 5,000 on PyPI
spark-sklearnDistributes scikit-learn model training and…
permissive · top 15,000 on PyPI
forestciComputes confidence intervals and variance…
permissive · top 15,000 on PyPI
treeinterpreterDecomposes scikit-learn decision tree and…
permissive · top 15,000 on PyPI
scikit-learn-extraExtends scikit-learn with additional machine…
permissive · top 15,000 on PyPI