AutoTS: Genetic AutoML for Pandas Time Series
Automated Time Series Forecasting
At a glance
- What is it?
- AutoTS wraps dozens of forecasting models and over 30 time series transforms into a scikit-learn style API, then searches over them with genetic algorithms. It is aimed at teams that want many series forecast without hand-picking a model per series.
- Who is it for?
- Adopt AutoTS if you have many related Pandas series and want the model, preprocessing and ensembling chosen for you, and you accept that the search itself costs compute. Do not adopt it if you need a single auditable model you can explain line by line, or if your series are too few for a subset-based search to generalise.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 21 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem AutoTS targets: picking a model per series at scale
Forecasting a handful of series is a modelling exercise. Forecasting tens of thousands is an operations problem. Someone has to decide, for each series, whether a naive baseline, a statistical model, a machine learning model or a deep learning model is appropriate, and then decide what preprocessing that model needs. AutoTS exists to move that decision into a search. The README describes models designed for integration in an AutoML feature search that automatically finds the best models, preprocessing and ensembling for a given dataset through genetic algorithms. That is the whole pitch: you supply a Pandas DataFrame, the library runs generations of candidate configurations, and you get back point forecasts plus upper and lower bounds. The audience is Python teams already working in Pandas who would otherwise write per-series model selection by hand. It is not aimed at someone forecasting one series who wants to understand every parameter. The README also notes that several other projects share similar names, so confirming you are reading the right documentation is a real first step.
Long and wide input, and why the distinction matters beyond convenience
AutoTS accepts two shapes. The wide format is a pandas.DataFrame with a pandas.DatetimeIndex, where each column is a distinct series. The long format has three columns: a date, a series ID and a value, with the series ID allowed to be None for a single series. For long data you pass date_col, id_col and value_col to .fit(); wide data needs no such parameters. The README adds a constraint that is easy to miss: lower-level functions are only designed for wide style data. So if you plan to use the transformers independently of the AutoML loop, you are working in wide format whether or not your source data arrives that way. The library's own sample loaders, load_daily and its variants such as _hourly, _monthly, _weekly, _yearly and _live_daily, accept a long flag so you can try either shape without reshaping by hand. All models work directly on Pandas Dataframes, per the README, with no conversion to proprietary objects. That is a deliberate design choice, and it means your existing Pandas pipeline stays intact around the forecasting step.
How the search actually runs: generations, validation and ensembles
The mechanism visible in the README is a genetic search over model and transformer combinations, bounded by max_generations and scored with num_validations rounds of validation_method, which the basic example sets to backwards. The example configures forecast_length, frequency, prediction_interval and drop_most_recent, then calls .fit() and .predict(). Two results objects come back: model.results() gives accuracy for all tried model results, and model.results("validation") gives the cross-validated aggregate. Ensembling is the part the README singles out, describing horizontal and mosaic style ensembles as the flagship types, with the stated goal that each series receives the most accurate possible models while scalability is maintained. That per-series assignment is the interesting claim: rather than one global winner, different series can end up on different models. The README also lists probabilistic forecasts, exogenous regressors for many models, simulation forecasting mode, event risk forecasting and template import and export. Templates matter operationally, because the README suggests importing a pretrained template as a starting point when distributing work across batches.
Getting it running: install, the basic call, and the speed knobs
Installation is pip install autots. The README is explicit that this covers basic models, and that additional packages are required for some models and methods, pointing at the extended tutorial for dependency versioning. The basic example constructs AutoTS with forecast_length=21, frequency="infer", prediction_interval=0.9, ensemble=None, model_list="superfast", transformer_list="fast", drop_most_recent=1, max_generations=4, num_validations=2 and validation_method="backwards". Note that the example disables the ensemble, so the flagship ensembling is something you turn on rather than get by default. For larger data the README gives a specific set of levers. model_list accepts superfast (simple naive models), fast (more complex but still faster models, optimized for many series), and fast_parallel or parallel when many CPU cores are available, with n_jobs usually getting close with "auto". The list named scalable is described as the best to avoid crashing when many series are present, and there is a matching transformer_list="scalable". A dict of predefined lists is available via from autots.models.model_list import model_lists. The subset parameter is the other main lever: subset=100 will often generalize well for tens of thousands of similar series, and passing weights for series biases subset selection toward higher priority series. If RAM is the binding constraint, the README suggests running multiple AutoTS instances on different batches, having first imported a template pretrained as a starting point.
Interruption, checkpointing and the cost of a long search
Two operational details in the README are worth more attention than their placement suggests. First, model_interrupt=True skips only the current model when you press Ctrl+C; a second Ctrl+C within 1.5 seconds ends the entire run, and you can pass something like model_interrupt={"mode": "skip", "double_press_window": 1.2} to tighten or loosen that window. That is a thoughtful design for a search that can run for a long time, and it is a tacit admission that runs do get long. Second, result_file on .fit() saves progress after each generation, and import_results recovers it. Combined with the batching suggestion for RAM-limited environments, the picture is of a tool whose main cost is search time and memory, not the forecast call itself. The README does not publish per-model runtime figures, so the honest position is that you should size model_list, subset and max_generations against your own data rather than trusting a default. The predefined lists exist precisely because the default search is not the right trade-off for every dataset size.
Where AutoTS is the wrong tool
The search is the product, and that is also the limitation. If your requirement is a single model whose coefficients or rules you can defend in a review, a genetic search over models, transformers and ensembles gives you a configuration that won on validation, not an explanation. The README's own framing supports this: results come back as accuracy tables from model.results() and cross-validation aggregates, which is an empirical argument rather than a structural one. A second boundary is data volume. The subset parameter is recommended for many similar series, and the README's phrasing implies the mechanism relies on similarity across series; if you have a small number of genuinely dissimilar series, subsetting has little to work with and you are paying search cost for a search space you could enumerate yourself. Third, dependency surface. pip install autots covers basic models only, so a model_list that reaches into deep learning or other advanced methods pulls in packages the base install does not provide. A team that cannot add those dependencies is effectively restricted to a subset of the advertised model space, and the README does not enumerate which models need what.
Compared with statsmodels and Prophet-style single-model workflows
The natural alternative is the statsmodels route: choose an ARIMA or exponential smoothing specification per series, fit it, inspect the residuals, and move on. The difference in approach is not accuracy on any one series, it is where the human decision sits. With statsmodels you specify the model and the library estimates it; with AutoTS you specify a search space and the library selects the model. That makes statsmodels the better fit when the series count is small, when the model form carries domain meaning, or when you need to hand a specification to someone else. AutoTS is the better fit when the series count is large, the series are similar enough that a subset generalises, and nobody has the time to specify thousands of models. The README's own emphasis on predefined model lists, subsetting, batching and templates all points at that scale regime. A middle path the README enables is using the transformer library on its own, since the over 30 time series transforms follow the scikit-learn .fit(), .transform() and .inverse_transform() pattern and can be used independently of the AutoML framework, though only on wide data.
Licence, maintenance and what to check before you commit
AutoTS is MIT licensed, which permits commercial use and modification subject to the licence terms; this is a description of the licence identifier, not legal advice, and you should read the licence text yourself. Maintenance signals visible here are a steady release cadence, with 1.0.4 in August 2026 following 1.0.3 in April and 1.0.2 in March, and a last push in the same month as the latest release. The README references an M6 forecasting competition win in 2023, which is a documented result about a specific competition rather than a general accuracy claim, and it should be read that way. The practical upgrade cost is the dependency question: because the base install covers basic models only, a version bump can change which optional packages your chosen model_list needs, and the README defers that detail to the extended tutorial. Before adopting, the concrete checks are: confirm whether your data is long or wide and pass date_col, id_col and value_col accordingly; confirm which extra packages your model_list requires; and run one fit with result_file set so that model.results() and model.results("validation") are available for inspection. If those tables do not beat the naive models in the superfast list on your data, the search is not earning its runtime.
Editorial conclusion
Adopt AutoTS if you have many related Pandas series and want the model, preprocessing and ensembling chosen for you, and you accept that the search itself costs compute. Do not adopt it if you need a single auditable model you can explain line by line, or if your series are too few for a subset-based search to generalise. Before committing, verify the input shape your data actually has (long with date_col, id_col and value_col, or wide with a DatetimeIndex), check which extra packages your chosen models need beyond pip install autots, and run one fit with result_file set so you can inspect model.results() before trusting a forecast.
Community notes