Skip to content

Passing kwargs to the underlying fitting function #2438

Open
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions