Pipelines keep preprocessing attached to the model
Choose a classifier, then change it without rewriting how your application prepares the data. That's the reason I'd start with scikit-learn for a conventional prediction problem. Its estimators share methods such as fit and predict, while Pipeline connects transformations to the final model. You can compare a linear model with a random forest while keeping the surrounding workflow recognizable.
The lab environment occupied 208 MB after installing 42 packages. That buys access to a library covering classification, regression and clustering, alongside model selection tools. For a team predicting customer churn from a table, the appeal is having preprocessing and evaluation in the same vocabulary. You still write the application and decide what a useful prediction means.
What happened when we ran it
Our sandbox installed scikit-learn commit 6ad9bb9 in 863 seconds and built it successfully in 11 seconds. We ran it on October 2, 2026, using 3 CPUs and 8 GB of RAM in an unprivileged Debian container without secrets, based on ghcr.io/astral-sh/uv:python3.12-bookworm. The checkout contained 1,839 files, roughly 464,500 source lines, and occupied 24.7 MB before installation. This was a source checkout, so these timings describe that path.
The test step failed with exit code 4 after 7 seconds. The log shows the editable loader calling a rebuild, then Python raising FileNotFoundError for /work/home/.uv/builds-v0/.tmpbRRjbL/bin/ninja. The requested executable was missing at that path. The log doesn't explain why, and it supplies no passing-test count. Pip-audit reported 0 known vulnerabilities. Installation and build succeeded, but this environment never delivered a successful test result.
The pip command doesn't describe the source checkout
The README offers pip and conda commands for ordinary users, while directing contributors to a separate development guide. Its current dependency list starts at Python 3.12 and names NumPy and SciPy, among other libraries. Local modelling needs your data and Python code, without a hosted inference credential or an external model service. Plotting and some examples require additional libraries named in the README.
The scan found 22 CI workflow files, no Dockerfile and no tests directory. That last signal describes what the detector found, so it cannot establish that upstream lacks tests. The 863-second source installation and missing Ninja path are more useful warnings for contributors: reserve time to validate the development environment before relying on it for changes. Ordinary package users should assess the published-package route separately.
Preprocessing can contaminate your evaluation
The common-pitfalls guide explains a mistake that can make a weak model look convincing: learning a transformation from data that includes the evaluation rows. Fit scaling or feature selection on the training portion. A pipeline helps keep those operations inside each validation split, instead of leaving an earlier notebook cell to decide what information the model has already seen.
An 11-second successful build says nothing about prediction quality. For a churn model, I'd compare against a simple baseline and check whether the validation split resembles the customers the application will encounter. ColumnTransformer lets you apply different transformations to named columns, such as encoding categories while scaling numeric values. The composition guide makes that preparation explicit. This is useful engineering, provided you choose the split and metric carefully.
Deep learning is outside scope, and GPU coverage is selective
The project FAQ explicitly excludes deep learning and reinforcement learning from scikit-learn's scope. Its simple multilayer perceptron doesn't make it a framework for designing arbitrary neural networks. Choose PyTorch when the job requires custom neural architectures. For a table-based prediction task, scikit-learn's narrower interface is often a better starting point because the model can share an evaluation workflow with simpler alternatives.
The sandbox's 3 CPUs and 8 GB of RAM provide no evidence about GPU execution. Official Array API guidance describes experimental support that must be enabled, with coverage limited to supported estimators. Check your exact model before choosing hardware. CatBoost is worth comparing for categorical features and GPU tree training. XGBoost is a narrower choice when gradient-boosted trees, including distributed workloads, are the requirement. Neither comparison establishes a performance winner here.
Saved Python models require matching versions
The model-persistence guide says loading a model trained with a different scikit-learn version is unsupported. That rules out treating a saved Python object as an artifact you can carry through arbitrary upgrades. Pickle-based formats also require a trusted source because loading can execute code. Keep the training recipe and dependency versions alongside the model, and choose a deployment format deliberately.
The measured 208 MB environment is useful for planning the repository setup, but it doesn't size your deployed service. Your data and saved model add their own storage requirements. I'd package the preprocessing with the estimator and verify predictions in the environment that will serve them. A deployment that silently changes category handling can return plausible numbers while answering a different question from the training code.
October activity shows maintenance beyond the release tag
GitHub recorded the last push on October 10, 2026, with 67,553 stars and 2,166 open issues and PRs. Issue activity continued on October 11, including discussion of cross-validation dispatch and proposed fixes for clustering and estimator display. Release 1.9.1, published September 11, describes bug fixes and Python 3.15 support. The push and discussion dates show ongoing work, while the combined queue count doesn't tell you how many confirmed bugs exist.
I'd use scikit-learn for a conventional modelling workflow that benefits from consistent preprocessing and model comparison. Contributors have a separate decision: our 863-second installation ended in a built checkout whose test step couldn't launch the requested Ninja executable. Before making that checkout your development base, require a working test run in the environment you'll actually use.

