title: History¶
0.4.1 (unreleased)¶
predict()andexplain()taketuned=Trueto usetuned_models_, with the same NumPy-to-DataFrame conversion as the benchmarked models (#631)datetime64andtimedelta64feature columns are used (as days since 1970 and seconds) instead of being dropped or breaking every model (#632)tune_timeoutalso limitstune_backend="sklearn": no new candidate starts after it (#632)- Seasonal period detection is about 2-3x faster, with identical results (#636, thanks to dexhunter)
0.4.0 (2026-10-30)¶
The v0.3.1 GitHub release was created on a commit still versioned 0.3.0, so it never reached PyPI. Its changes (documentation on Material for MkDocs and GitHub Pages, the JOSS paper files, the model-name filtering fix and Python 3.14 support) are released as part of 0.4.0.
Breaking changes¶
- Python 3.10 or newer is required (3.9 is end-of-life). The minimum versions are now scikit-learn 1.2, pandas 1.5, NumPy 1.23 and click 7.0
import lazypredictno longer callssklearnex.patch_sklearn(). To use scikit-learn-intelex, callpatch_sklearn()yourself before importing lazypredict.INTEL_EXTENSION_AVAILABLEonly reports whether it is installed- Unknown names in
classifiers=,regressors=andforecasters=raise aValueErrorwith a close-match suggestion instead of being ignored, and a single string selects exactly that model LazyClassifierraises aValueErrorfor continuous targetsLazyForecaster.ensemble()no longer needsy_true(passing it emits aFutureWarning);ensemble_stacking()requirespred_testtuned_scores_: "Best Params" holds dicts and a "Status" column reports each model's outcome; the forecaster table's always-NaN "Best Score" column is gone (its score column is "Best") - The MLflow integration no longer calls
mlflow.autolog()or registers a model version for every model; each model is logged in a nested run - Metrics that cannot be computed are
NaNinstead ofNone, so score columns stay numeric
Release and packaging¶
- The publish workflow checks that the release tag matches
lazypredict.__version__, runs the tests, smoke-tests the built wheel, can be re-run for an existing tag and attaches the files to the GitHub release. The release-please and auto-release workflows, which could not trigger it, are removed (#577) - The conda recipe builds again with conda 26.3.1 and later (#578)
- PEP 639 license metadata and a single-sourced version; new
encoders,testanddevextras replacerequirements*.txt; thefoundationextra installstimesfm[torch](#581) - CI tests the installed package on Python 3.10 and 3.14 for every pull request, the OS × Python 3.10–3.14 matrix on dev and weekly, and the declared dependency floors; mypy is blocking (#580)
- The docs preview no longer fails for pull requests from forks, and the API reference renders NumPy-style parameter sections (#579)
- An optional library that is installed but fails to load, such as XGBoost or
LightGBM on macOS without
libomp, is skipped with a warning instead of makingimport lazypredictfail (#611) - Merging a pull request no longer cancels the docs deployment, and PR previews are removed when the PR is closed (#612)
- Running the publish workflow manually for a pushed tag creates the GitHub release once the upload to PyPI has succeeded (#613)
Fixes: LazyClassifier and LazyRegressor¶
- pandas
categorycolumns are encoded instead of silently dropped, andstringcolumns no longer rely on deprecated pandas behaviour (#582) - Cross-validation metrics for classifiers without
predict_proba(#584), and multiclass ROC AUC when the test split lacks a class (#585) fit()starts from a clean state, and every pipeline gets its own preprocessor (#586)- Prediction DataFrames keep the index of
X_test(#588, contributed by AryanRG in #575) - Mixed NumPy/DataFrame inputs to
fit(),predict()andexplain()(#589) timeoutinterrupts slow models (on POSIX, in the main thread) and lists them inerrors(#590)- The CLI exits with status 2 when it fails (#592)
tune=Trueno longer crashesfit(); the scikit-learn backend works for every model with a search space and the FLAML backend for the models FLAML has a learner for; tuning is seeded, usescv, and exposestuned_params_andtuned_models_(#604, #605)- Adjusted R² is
NaNinstead of dividing by zero or inverting the ranking on small test sets; regressors are ranked by adjusted R², then R² (#606) explain(method="shap")returns SHAP values (#607)- MLflow logging works inside an active run (#608)
Fixes: LazyForecaster¶
- Tuned hyperparameters are applied to the refitted models, and tuning is reproducible (#594)
- The direct and multi-output horizon strategies forecast the right steps;
horizon_strategyandn_jobsare honoured (#595) - AutoARIMA uses exogenous variables and the seasonal period (#596)
- Rolling-std features are computed the same way for training and forecasting (#597)
- Misaligned exogenous data and NaN targets raise errors (#598)
predict()accepts exogenous variables (X_history,X_test) and no longer overwrites the fitted models (#599)- Seasonal period detection is robust to trends and noise (#600)
- Weighted-average and stacking ensembles learn from a validation window of the training data instead of the test data (#601)
- Forecasters are selected by exact name,
fit()starts from a clean state, andtimeoutapplies to forecasters (#602) - One-column DataFrame targets,
functools.partialcustom metrics and case-insensitivesort_bywork; options are validated (#603)
Fixes from the pre-release review¶
- Holt-Winters models selected by name are skipped with a reason in
errorswhen there is no seasonal period, instead of raising "unknown name" (#615) timeout=float("inf")means no limit, and the SIGALRM handler is always restored (#616);n_jobs=0is rejected (#617); ensembles work for a one-step test horizon (#618)- Seasonal-period detection finds seasonality from three cycles and no longer reports periods for curved trends (#623)
- The direct and multi-output strategies use every future exogenous row (#624); the stacking ensemble no longer depends on the series' units (#625)
- Equal numeric category codes match across splits (1 vs 1.0) (#620); object NumPy arrays keep numeric columns numeric, and integer column labels work (#621)
- The FLAML backend reports defaults as a valid result, keeps CatBoost and
LightGBM parameters, and the
flamlextra installsflaml[automl](#622) - MLflow tracking problems no longer change benchmark results, and the estimator's hyperparameters are logged (#626)
explain(method="shap")explains classifiers through their probabilities (#627)- Forecaster tuning works for every horizon strategy and metric (#628)
- Smaller fixes: one-column targets, DataFrames after a NumPy fit, the CLI
exit status and seed, forecast indexes,
sort_byvalidation, the publish workflow's re-runs and smoke test (#619, #629); documentation (#630)
Documentation¶
- Fixed examples and API references, regenerated the README result tables and added the missing 0.3.0 changelog entries (#609)
- YAML issue forms and a pull request template; removed stale planning documents (#610)
0.3.0 (2026-03-15)¶
- First stable release of the 0.3 series: time series forecasting, hyperparameter tuning, explainability, GPU support and the integrations listed in the pre-release notes below
- Import
torchandtimesfmlazily to avoid OpenMP deadlocks with scikit-learn
0.3.0a5 (2026-03-14)¶
- Added time series visualization (
LazyForecaster.plot_results(),lazypredict.ts_visualization) and residual diagnostics (LazyForecaster.diagnose(),lazypredict.ts_diagnostics) - Forecaster tuning refits the tuned models (
tuned_models_) - Raised test coverage to 67%; fixed flake8 and CI failures
0.3.0a4 (2026-03-10)¶
- Implemented explainability:
explain()method with permutation importance and SHAP - Added Optuna/sklearn/FLAML hyperparameter tuning backends (
tune=True) - Added search spaces for 30+ supervised models and 20+ forecasting models
- Added forecasting optimization: direct/multi-output horizon strategies, ensemble methods
- Added seasonal period tuning and forecast loss function selection
- Added EBM (ExplainableBoostingMachine) from InterpretML
- Added PySpark/Dask DataFrame auto-conversion
- Added Dask joblib backend for distributed cross-validation
- Added Spark MLlib integration:
LazySparkClassifier/LazySparkRegressor - Added FLAML as optional tuning backend
- New optional extras:
tune,explain,interpret,flaml,spark
0.3.0a3 (2026-03-10)¶
- Added
use_gpuparameter to classification and regression advanced options docs - Added
foundation_model_pathparameter to LazyForecaster for offline/air-gapped environments - Added CatBoost to
boostinstall extras (pip install lazypredict[boost]) - Updated all documentation examples to include GPU acceleration and local model weights
- Fixed Sphinx documentation build pipeline (RST formatting, myst_parser migration)
- Updated ReadTheDocs and GitHub Actions docs workflow configuration
0.3.0a1 (2026-03-10)¶
- New: Time Series Forecasting —
LazyForecasterbenchmarks 26+ forecasting models in one call - Statistical models: Naive, SeasonalNaive, SimpleExpSmoothing, Holt, HoltWinters (additive & multiplicative), Theta, SARIMAX, AutoARIMA
- ML models: LinearRegression, Ridge, Lasso, ElasticNet, KNN, SVR, DecisionTree, RandomForest, GradientBoosting, AdaBoost, Bagging, ExtraTrees, XGBoost, LightGBM, CatBoost
- Deep learning models: LSTM, GRU (via PyTorch)
- Foundation model: Google TimesFM 2.5 (200M-parameter zero-shot pretrained transformer)
- GPU acceleration via
use_gpu=True: XGBoost (device="cuda"), LightGBM (device="gpu"), CatBoost (task_type="GPU"), cuML (RAPIDS) auto-discovery, LSTM/GRU/TimesFM CUDA device placement - Automatic seasonal period detection via autocorrelation (ACF)
- Exogenous variable support for SARIMAX, AutoARIMA, and ML models
- Cross-validation with expanding window (TimeSeriesSplit)
- New forecasting metrics: MAPE, SMAPE, MASE
- New install extras:
pip install lazypredict[timeseries],[deeplearning],[foundation] - Added
categorical_encoderparameter to LazyClassifier and LazyRegressor - Added CatBoost models (CatBoostClassifier, CatBoostRegressor) to supervised and time series
- Added cuML (RAPIDS) GPU-native scikit-learn model auto-discovery when
use_gpu=True - Refactored Supervised.py with type hints, logging, and input validation
0.2.15 (2025-04-06)¶
- Added MLflow integration for experiment tracking
- Added support for Python 3.13
- Updated all dependencies to latest versions
- Improved model logging and tracking capabilities
- Added automatic model signature logging with MLflow
0.2.11 (2022-02-06)¶
- Updated the default version to 3.9
0.2.10 (2022-02-06)¶
- Fixed issue with older version of Scikit-learn
- Reduced dependencies sctrictly to few
0.2.8 (2021-02-06)¶
- Removed StackingRegressor and CheckingClassifier.
- Added provided_models method.
- Added adjusted r-squared metric.
- Added cardinality check to split categorical columns into low and high cardinality features.
- Added different transformation pipeline for low and high cardinality features.
- Included all number dtypes as inputs.
- Fixed dependencies.
- Improved documentation.
0.2.7 (2020-07-09)¶
- Removed catboost regressor and classifier
0.2.6 (2020-01-22)¶
- Added xgboost, lightgbm, catboost regressors and classifiers
0.2.5 (2020-01-20)¶
- Removed troublesome regressors from list of CLASSIFIERS
0.2.4 (2020-01-19)¶
- Removed troublesome regressors from list of REGRESSORS
- Added feature to input custom metric for evaluation
- Added feature to return predictions as dataframe
- Added model training time for each model
0.2.3 (2019-11-22)¶
- Removed TheilSenRegressor from list of REGRESSORS
- Removed GaussianProcessClassifier from list of CLASSIFIERS
0.2.2 (2019-11-18)¶
- Fixed automatic deployment issue.
0.2.1 (2019-11-18)¶
- Release of Regression feature.
0.2.0 (2019-11-17)¶
- Release of Classification feature.
0.1.0 (2019-11-16)¶
- First release on PyPI.