Repository navigation
Releases
Releases · winedarksea/AutoTS
1.0.5
Thanks to AI, you actually get proper release notes this time:
1.0.5 🇺🇦 🇺🇦 🇺🇦
- Saved-template compatibility: fixes and new defaults below can change forecasts when refitting templates from 1.0.4 or earlier.
- Linear models: replaced inverse/Gram least-squares coefficient fits with direct solves and objective-preserving augmented least-squares fallback. BasicLinearModel now fits finite observations per series and computes normal observation intervals from the training fit, including short histories and trend damping. Cassandra skips redundant condition-number checks.
- Feature detection and trend forecasting: Added joint detection of slope changes and level shifts; improved changepoint handling around missing data; added adaptive seasonality fitting, trend damping, slope shrinkage, and wider intervals for possible future trend changes.
- TVA: Added forecast origin anchoring and a configurable internal fit_horizon for factor and torch-free modes. With fit_horizon=None, the internal horizon is now capped at max(28, T // 4), changing long forecasts in factor and 'none' modes. Expanded factor forecasting, covariance estimation, and reconciliation behavior.
- Cassandra: Fixed ridge penalties to exempt the intercept instead of the first feature, changing explicit lambda and automatic regularization fits; x_scaler=True now fits an intercept. Revised level autoregression changes forecasts from 1.0.4 templates. Fixed autoregressive forecasting on detrended residuals. Fixed max_colinearity to use maximum absolute pairwise correlation instead of a triangular minimum that could never exceed a positive threshold. The filter now drops aliased Fourier columns when enabled (default 0.998; None disables it), changing refits of existing templates. Changed the separate max_multicolinearity eigenvalue filter default from 0.001 to None (off); 1.0.4 get_params omitted this key, so saved Cassandra templates without it now refit with the filter off. General template 45 explicitly retains 0.001.
- Anomaly detection: Added calibrated Gaussian mixture anomaly scores and improved handling of univariate and multivariate anomaly outputs. (why do LLMs like calibration so much?) med_diff now scales by the median absolute difference rather than the median signed difference, changing scores. For nonparametric with output='univariate' across multiple input columns, corrected flattened-index mapping changes which rows are flagged; scores now report the fraction of anomalous columns (higher means more anomalous) instead of its complement, and return a one-column DataFrame instead of a Series.
- Changepoints: CUSUM now uses a robust noise scale when normalized, changing threshold/drift semantics and detections (especially on trends); get_new_params still samples thresholds of 5–30, so existing settings may need retuning. PELT and L0 now honor min_segment_length. L1 applies a spacing filter in the batch path used by aggregate_method='individual', but the mean/median path only collapses adjacent detections and does not enforce minimum spacing; segment_length controls the scoring window in noise mode; bottom_up treats max_changepoints as a cap instead of a floor; ED-PELT removed its ×5 penalty calibration and can find fewer changepoints. L1/L0 trend extraction now uses offset ceil(order / 2) instead of order, reporting order 2+ changepoints floor(order / 2) steps earlier; adjacent detections collapse to their strongest position for all orders in the default 'relative' mode. EWMA now starts at lambda * x[0] instead of x[0], changing detections near the start of a series. half_yr_spacing now uses elapsed rather than calendar years, changing default spacing in BasicLinearModel and transformers.
- Time-series utilities and transformations: fixed hourly Fourier features to include hours, changing hourly forecasts; FastICA now passes integer column labels (0..k-1) to subsequent transformers instead of series names. infer_frequency now returns None for fewer than two points; exactly two timestamps infer a frequency from their interval, preserving calendar month-start/month-end spacing for midnight pairs. Improved probabilistic outputs and short-history handling. Fixed the HistoricValues transformation key in the AlignLastValue + HistoricValues horizontal post-processor to match its parameters, changing its application. Halved FFTDecomposition's transformer search weight from 0.01 to 0.005.
- PWA dependencies: Updated the Rust dependency lockfile.
- LevelShiftMagic bug fixes that change outputs at the defaults: per-column selection (shift ids were shared across columns, a row-0 group stalled selection, one extra shift was kept), one flag per step (exact ties on integer data flagged both sides), detection windows need max(3, window_size // 3) points so series edges are no longer flagged and the last row can't leak an offset into forecasts, univariate mode combines per-series squared scores so opposite shifts no longer cancel and only individually significant series are corrected. Also: diff_overlap sizing (was ~0), remove_at_shift now sizes from raw data and fills only the removed points.
- LevelShiftMagic: opt-in window_method="linear_gap" (detrended multiscale MOSUM with robust z, bump test spike rejection), plus scales (default [14, 30, 60]), deseasonalize, anomaly_window, tail_scan (default on, linear_gap only), alignment "median"/"linear_robust" and correction_mode="auto" (safe ratio for non-negative series). Its alpha is a robust z threshold (3-6), not the legacy std multiplier. alignment defaults per method (None: "average" legacy, "linear_robust" linear_gap); linear_gap accepts only "linear_robust", "median" or "gap" and raises otherwise. No slower than "overlap" at the defaults; benchmark in examples/level_shift_benchmark.py.
- Also: tail_scan only fills free max_level_shifts slots; univariate shared scores average over series with a valid score at each date (missing series no longer dilute a shared shift).
- TimeSeriesFeatureDetector (and so TVA): default level shift params changed to linear_gap (alpha 3.5, scales [14, 30, 60], linear_robust, tail_scan). The old default (window 364, alpha 1.8, rolling_diff) relied on the LevelShiftMagic bugs and gave ~2.1 validated false shifts per 2-year noise series once they were fixed; the new default measured recall 1.00 at 0.10-0.15.
- TimeSeriesFeatureDetector: new prelim_level_shift (default 'auto' = on for linear_gap params) runs level shift detection before the final seasonality fit, which otherwise absorbs steps near year boundaries.
- TimeSeriesFeatureDetector compatibility: older templates inherit trend_damping='auto', rather than undamped trends. New detector settings are not serialized into saved templates, so refits use their defaults. general_transformer_params={} now disables the transform instead of selecting the default. Explicit level_shift_validation relative_threshold and absolute_threshold values are now used as given; 1.0.4 capped them at per-series adaptive thresholds. Omitted or None thresholds retain adaptive behavior.
- TimeSeriesFeatureDetector seasonality: adaptive_fourier now uses recurring rather than simple_3 date features. components['seasonality'] is now mean-zero, with its level/intercept moved into the residual for trend fitting, changing component attribution and downstream fits. seasonality_strength retains its existing formula but now uses seasonal fits that exclude a trend prior, with trend added back to the residual before scoring; values can fall on trending series. The score compares residual/seasonal variance with original-series variance and includes squared correlation with the original series, so it remains sensitive to trend share rather than measuring seasonality on detrended data.
- Holiday attribution: corrected lunar calendar horizon/start-range dependence; added opt-in Easter rules (
holiday_params={'use_easter_holidays': True}) and per-series suppression (global_holiday_anomaly_suppression=None) with annual holiday peers and an exceptional-outage escape hatch. True retains batch suppression; False disables it. Detector defaults (including those used by TVA) are unchanged: attribution improved, but forecast error and synthetic precision regressed in validation. See examples/holiday_attribution_report.md.- Fixed holiday name lookup keys dom_10_31 and dom_11_11 so Halloween and ArmisticeDay receive their intended names.
- New get_new_params search options and their draw rates: BasicLinearModel linear_model='huber' (2%, not in fast; huber_iterations fixed at 50), ChangepointDetector l1_fused_lasso/l1_total_variation threshold_mode='noise' (20%) with threshold_multiplier, LevelShiftMagic window_method='linear_gap' (~13%), TVAModel origin_anchor (last_value 55%, deseasonalized 20%) and continuation_force='constant' (50%).
- RadiusNeighbors regression: features are standardized and each query's radius is a multiple of its own nearest-neighbor distance (sampled 1.1-5, capped at 50 neighbors), so it is never empty and adapts to series of different scale. At 1.0.4 the absolute radius returned NaN for most predictions on load_daily/load_monthly (RollingRegression failed outright), and the RadiusNeighbors-specific pchip fills in Window/DatepartRegression are removed; the general non-finite guards in the recursive models stay. Saved templates change meaning: radius < 1 now means the single nearest row, and large radii (5, 10) reach the 50-neighbor cap.
- DatepartRegression transformer search: corrected RadiusRegressor to RadiusNeighbors, enabling radius-specific parameter sampling for about 6.25% of draws in the default regressor pool (excluding fast/all/deep modes).
- General templates 29 and 37: replaced sokalmichener with rogerstanimoto for SciPy compatibility (sokalmichener was deprecated in SciPy 1.15 and removed in 1.17; see the SciPy release notes).
- TVA...
1.0.4
1.0.4 🇺🇦 🇺🇦 🇺🇦
- more tuning of MCP download install
- TVA optimizations and new features
- Synthetic data minor new options
- Feature detector and associated transformer bug fixes
Sounds the same as 1.0.3! But actually is more work on the same lines
1.0.3
1.0.3 🇺🇦 🇺🇦 🇺🇦
- more tuning of MCP download install
- TVA optimizations
- Synthetic data minor new options
- Feature detector and associated transformer bug fixes
1.0.2
1.0.2 🇺🇦 🇺🇦 🇺🇦
- more tuning of MCP download install
- more optimization of MultivariateRegression
- MLFlow logging function added (limited testing done)
- MCP server breaking changes, async setup
- MambaSSM enhanced (still slow and mediocre)
- TVA model added
- significant changes to optimizer for Feature Detection with synthetic, refactor of feature detector code
1.0.1
1.0.1 🇺🇦 🇺🇦 🇺🇦
- fixed issue with how MCP server is loaded
- fixed issue with python 3.9
- tuning and optimization of MultivariateRegression
- expanded ConvolutionFilter
1.0.0
1.0.0 🇺🇦 🇺🇦 🇺🇦
- added ReconciliationTransformer
- updated cointegration code, replaced Cointegration with CointegrationTransformer
- added mocks for dependency fallbacks
- added variational autoencoder anomaly detection method
- some fixes for breaking changes in dependencies
- adjustment to how custom_metric is scaled so it can work with negatives
- improvements to the calendars, Hindu calendar should be working now
- changes to HistoricValues which hopefully makes it more reliable
- added pMLP and MambaSSM models (painfully slow)
- deleted old models ComponentAnalysis, TFPRegression, TensorflowSTS, Greykite, NeuralProphet, UnivariateRegression
- improvements to model_interrupt
- synthetic data generation and feature extractor new, very much in beta
- updated weather data to CDO v2 (requires API key)
- added NASA solar data to load_live_daily
- new methods to LevelShiftTransformer
- created the seasonal_linear interpolation which is quite promisiing for seasonal data
- added apply_adjustments
- added G726Filter and G711Scaler
- created an MCP server for AutoTS (tool naming and pattern still in beta)
- many bug fixes, tweaks, reorganizations, and added unittests
0.6.21
0.6.21 🇺🇦 🇺🇦 🇺🇦
- Prophet and Cassandra bug fixes
0.6.20
0.6.20 🇺🇦 🇺🇦 🇺🇦
- transformer bug fixes
- Prophet package adjustments
- linear model singular matrix handling
0.6.19
0.6.19 🇺🇦 🇺🇦 🇺🇦
- bug fix for transformer_list="all"
0.6.18
0.6.18 🇺🇦 🇺🇦 🇺🇦
- minor tweaks and bug fixes
- updated python version required to 3.9 to allow more typing options
- validation_indexes can now be a list of tuples with mixed forecast lengths
- "mixed_length" validation option, for limited testing of longer forecast lengths
- kalman method for ensemble aggregation (ala sensor fusion)
- UpscaleDownscaleTransformer added
- PreprocessingExperts model added (experimental)