Skip to content

[ENH] AutoETS numerical stability issues #3294

@TonyBagnall

Description

@TonyBagnall

Describe the feature or idea you want to propose

Several design choices were made to make AutoETS stable, and these may well make it less efficient. This is from @alexbanwell1, previously in the docstring but moving it here. We can discuss, recreate and try improvements on this thread

Attempts to make this forecaster stable:
- Issues with Zero division Errors:
    - If any data points are non-positive, multiplicative options are excluded.
    - With numba fastmath=true, the compiler moves the operations around. This means
      zero division guards are ineffective. As such I have tried putting the guards
      in a separate fastmath=false function, with inline=true. This slows it down a
      lot though.
    - Need to make sure initialisation function never assigns slices of the data
    array
    - fixed bug where the first few values were being changed in the seasonality
      calculation array
- Issues with the nelder mead not finding good parameters,
  usually ending up with alpha approx 1:
    - Tested updating the initial conditions (initial level, trend,
      seasonality array) to be heuristically calculated across the whole
      array at the start.
      This seemed to fix some issues, but cause others.
    - Tested optimising over the initial conditions in the nelder-mead array.
      This didn't really help, although is how statsmodels does it.
    - Added guards to the nelder-mead algorithm to reflect points back in when they
      go above or below (0,1) to ensure parameters stay valid.
    - Added sigmoid function to output of nelder-mead to ensure parameters stay
      in (0,1).
    - Initialised the simplex array with reasonable starting values
      (a=0.4, b=0.25, phi=0.95, g=0.35)
- The algorithms sometimes produce really extreme forecasts of the order of 1e100
  larger than the data. I assume this is due to the guards on the zero division,
  but haven't been able to work out how to fix it.

Describe your proposed solution

work around short comings to improve speed without catastrophic fails

Describe alternatives you've considered, if relevant

No response

Additional context

No response

Metadata

Metadata

Assignees

Labels

enhancementNew feature, improvement request or other non-bug code enhancementforecastingForecasting package

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions