skillfed

scikit-surprise

An easy-to-use library for recommender systems.

scikit-surprise v1.1.5 119.9K downloads/30d#12,052 on PyPI6,806
Permissive 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) Active released

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-surprise

uv

uv add scikit-surprise

poetry

poetry add scikit-surprise

Installing 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

Development Status :: 5 - Production/StableIntended Audience :: DevelopersIntended Audience :: EducationIntended Audience :: Science/ResearchLicense :: OSI Approved :: BSD LicenseProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Topic :: Scientific/Engineering

Tags

recommender system libraryrating prediction algorithmscollaborative filteringmatrix factorization SVDrecommendation enginecross-validation for recommendationsexplicit rating prediction
collaborative-filteringrecommender-systemsmachine-learning

More Scientific/Engineering packages