Skip to content

Passing kwargs to the underlying fitting function #2438

@DavidKleindienst

Description

@DavidKleindienst

Is your feature request related to a current problem? Please describe.
I wanted to pass some additional arguments to Prophet's fit function (from now on called fit_kwargs), but this is not currently supported by darts. The only current possibility for the user to achieve this, is to subclass Prophet and overwrite the ._fit function

In general, there are multiple different strategies (depending on the model) in darts how passing through of fit_kwargs is currently handled.
Looking through the code, I would summarize the current situation as follows (hope I haven't missed something):

  • RegressionModels support passing of fit_kwargs to the .fit function
  • TorchForecastingModels use the pl_trainer_kwargs argument in the constructor
  • ExponentialSmoothing supports passing of fit_kwargs to the constructor. It also allows passing of constructor_kwargs (that will be passed to the constructor of the underlying model) as a dict.
  • Prophet and AutoARIMA do not support passing of fit_kwargs (even though the underlying model has meaningful kwargs)
  • Other models do not support passing fit_kwargs, but that's fine since the underlying models do not support any meaningful additional arguments

Describe proposed solution
I propose to unify the behavior (except for TorchForecastingModels which makes sense be treated differently) to support passing of fit_kwargs through the .fit function, i.e.:

  • Add passing through of fit_kwargs to Prophet and AutoARIMA
  • Rework ExponentialSmoothing constructor and fit function signatures to the same style. This would be a breaking change.

I think having the argument passing in the .fit function rather than the constructor function is better for two reasons:

  1. Models often also support kwargs that are passed to the underlying models constructor, making a distinction between constructor_kwargs and fit_kwargs necessary. That means at least one of them has do be passed as a dict, which feels unintuive.
  2. I think the .fit method would be the more obvious place where users would look for the possibility to pass such kwargs.

Describe potential alternatives

  • Add passing through of fit_kwargs to Prophet and AutoARIMA but keep ExponentialSmoothing as it is
  • Add a fit_kwargs argument to the constructors of Prophet and AutoARIMA and pass those to the fit function.

Additional context
I'm happy to prepare a PR for this issue, once it is decided which of these solutions should be implemented

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions