|
9 | 9 | import matplotlib as mpl |
10 | 10 | import numpy as np |
11 | 11 | import optuna |
| 12 | +import inspect |
12 | 13 | import pandas as pd |
13 | 14 | from joblib import Parallel, delayed |
14 | 15 |
|
@@ -39,6 +40,22 @@ def _add_unit(num, unit): |
39 | 40 | return f"{num} {unit}" |
40 | 41 |
|
41 | 42 |
|
| 43 | +def _extract_parameter(model): |
| 44 | + """ |
| 45 | + extract Prophet initialization parameters |
| 46 | + """ |
| 47 | + from prophet import Prophet |
| 48 | + sig = inspect.signature(Prophet.__init__) |
| 49 | + param_names = list(sig.parameters.keys()) |
| 50 | + params = {} |
| 51 | + for name in param_names: |
| 52 | + if hasattr(model, name): |
| 53 | + value = getattr(model, name) |
| 54 | + if isinstance(value, (int, float, str, bool, type(None), dict, list)): |
| 55 | + params[name] = value |
| 56 | + return params |
| 57 | + |
| 58 | + |
42 | 59 | def _fit_model(data, params, additional_regressors): |
43 | 60 | from prophet import Prophet |
44 | 61 |
|
@@ -96,16 +113,17 @@ def _train_model(self, i, series_id, df, model_kwargs): |
96 | 113 | data = self.preprocess(df, series_id) |
97 | 114 | data_i = self.drop_horizon(data) |
98 | 115 | if self.loaded_models is not None and series_id in self.loaded_models: |
99 | | - model = self.loaded_models[series_id] |
| 116 | + previous_model = self.loaded_models[series_id]["model"] |
| 117 | + model_kwargs.update(_extract_parameter(previous_model)) |
100 | 118 | else: |
101 | 119 | if self.perform_tuning: |
102 | 120 | model_kwargs = self.run_tuning(data_i, model_kwargs) |
103 | 121 |
|
104 | | - model = _fit_model( |
105 | | - data=data, |
106 | | - params=model_kwargs, |
107 | | - additional_regressors=self.additional_regressors, |
108 | | - ) |
| 122 | + model = _fit_model( |
| 123 | + data=data, |
| 124 | + params=model_kwargs, |
| 125 | + additional_regressors=self.additional_regressors, |
| 126 | + ) |
109 | 127 |
|
110 | 128 | # Get future df for prediction |
111 | 129 | future = data.drop("y", axis=1) |
|
0 commit comments