Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/static covs #966

Merged
merged 29 commits into from
Jun 5, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
125c078
added methods ``from_longitudinal_dataframe` and `add_static_covariates`
dennisbader Apr 13, 2022
fde974e
dataset adaption for static covs
dennisbader Apr 23, 2022
d6d4885
extended datasets for static covariates support and unified variable …
dennisbader May 19, 2022
4717ff1
adapted PLXCovariatesModules with static covariates
dennisbader May 19, 2022
5b6b781
adapted TFTModel for static covariate support
dennisbader May 20, 2022
55eaf3b
added temporary fix for static covariates with scalers
dennisbader May 20, 2022
3ced3da
Merge branch 'master' into feat/static_covs
dennisbader May 20, 2022
29924f4
unittests for from_longitudinal_dataframe() and set_static_covariates
dennisbader May 24, 2022
079d969
updated dataset tests
dennisbader May 24, 2022
3511b81
fixed all downstream issues from new static covariates in datasets
dennisbader May 27, 2022
eacaf3b
added check for equal static covariates between fit and predict
dennisbader May 28, 2022
55c5090
added tests for passing static covariates in TimeSeries methods
dennisbader May 28, 2022
cc07f5f
added static covariate support for stacking TimeSeries
dennisbader May 28, 2022
0aacd5a
transpose static covariates
dennisbader May 29, 2022
2845f86
added method `static_covariates_values()`
dennisbader May 29, 2022
2ac58e4
updated docs
dennisbader May 29, 2022
a6fa4fb
static covariate support for concatenation
dennisbader May 30, 2022
a4ba617
static covariate support for concatenation
dennisbader May 30, 2022
0586b7d
static covariates are now passed to the torch models
dennisbader May 30, 2022
c18e806
non-numerical dtype support for static covariates
dennisbader May 31, 2022
a048ecc
added slicing support for static covariates
dennisbader May 31, 2022
3661385
multicomponent static covariate support for TFT
dennisbader May 31, 2022
5b9258b
Merge branch 'master' into feat/static_covs
dennisbader May 31, 2022
3a9ad83
added arithmetic static covariate support
dennisbader May 31, 2022
d00c08d
Merge branch 'master' into feat/static_covs
dennisbader Jun 3, 2022
f5fa989
updated all timeseries methods/operations with static cov transfer
dennisbader Jun 4, 2022
41adf3f
applied suggestion from PR review part 1
dennisbader Jun 4, 2022
6dc7ff8
apply suggestions from code review part 2
dennisbader Jun 4, 2022
d001e17
fix black issue from PR suggestion
dennisbader Jun 4, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
dataset adaption for static covs
  • Loading branch information
dennisbader committed Apr 23, 2022
commit fde974e68908282ecdea0caa87ce14107a944306
7 changes: 4 additions & 3 deletions darts/models/forecasting/tft_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
logger = get_logger(__name__)

MixedCovariatesTrainTensorType = Tuple[
torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor
torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor
]


Expand Down Expand Up @@ -415,7 +415,7 @@ def forward(self, x: Tuple[torch.Tensor, Optional[torch.Tensor]]) -> torch.Tenso

# Embedding and variable selection
if static_covariates is not None:
# TODO: impelement static covariates
# TODO: implement static covariates
# # static embeddings will be constant over entire batch
# static_embedding = {name: input_vectors[name][:, 0] for name in self.static_variables}
# static_embedding, static_covariate_var = self.static_covariates_vsn(static_embedding)
Expand Down Expand Up @@ -775,6 +775,7 @@ def _create_model(self, train_sample: MixedCovariatesTrainTensorType) -> nn.Modu
historic_future_covariate,
future_covariate,
future_target,
static_covariates,
) = train_sample

# add a covariate placeholder so that relative index will be included
Expand All @@ -800,7 +801,7 @@ def _create_model(self, train_sample: MixedCovariatesTrainTensorType) -> nn.Modu
axis=1,
)

static_covariates = None # placeholder for future
# static_covariates = None # placeholder for future

self.output_dim = (
(future_target.shape[1], 1)
Expand Down
2 changes: 1 addition & 1 deletion darts/models/forecasting/torch_forecasting_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,7 @@ def fit_from_dataset(
train_sample = train_dataset[0]
if self.model is None:
# Build model, based on the dimensions of the first series in the train set.
self.train_sample, self.output_dim = train_sample, train_sample[-1].shape[1]
self.train_sample, self.output_dim = train_sample, train_sample[-2].shape[1]
self._init_model(trainer)
else:
# Check existing model has input/output dims matching what's provided in the training set.
Expand Down
32 changes: 26 additions & 6 deletions darts/utils/data/sequential_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,22 @@ def __len__(self):

def __getitem__(
self, idx
) -> Tuple[np.ndarray, Optional[np.ndarray], Optional[np.ndarray], np.ndarray]:
past_target, past_covariate, future_target = self.ds_past[idx]
_, future_covariate, _ = self.ds_future[idx]
return past_target, past_covariate, future_covariate, future_target
) -> Tuple[
np.ndarray,
Optional[np.ndarray],
Optional[np.ndarray],
np.ndarray,
Optional[np.ndarray],
]:
past_target, past_covariate, future_target, static_covariate = self.ds_past[idx]
_, future_covariate, _, static_covariate = self.ds_future[idx]
return (
past_target,
past_covariate,
future_covariate,
future_target,
static_covariate,
)


class MixedCovariatesSequentialDataset(MixedCovariatesTrainingDataset):
Expand Down Expand Up @@ -322,16 +334,24 @@ def __getitem__(
Optional[np.ndarray],
Optional[np.ndarray],
np.ndarray,
Optional[np.ndarray],
]:

past_target, past_covariate, future_target = self.ds_past[idx]
_, historic_future_covariate, future_covariate, _ = self.ds_dual[idx]
past_target, past_covariate, future_target, static_covariate = self.ds_past[idx]
(
_,
historic_future_covariate,
future_covariate,
_,
static_covariate,
) = self.ds_dual[idx]
return (
past_target,
past_covariate,
historic_future_covariate,
future_covariate,
future_target,
static_covariate,
)


Expand Down
11 changes: 9 additions & 2 deletions darts/utils/data/shifted_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,9 @@ def __init__(
def __len__(self):
return self.ideal_nr_samples

def __getitem__(self, idx) -> Tuple[np.ndarray, Optional[np.ndarray], np.ndarray]:
def __getitem__(
self, idx
) -> Tuple[np.ndarray, Optional[np.ndarray], np.ndarray, Optional[np.ndarray]]:
# determine the index of the time series.
ts_idx = idx // self.max_samples_per_ts
ts_target = self.target_series[ts_idx]
Expand Down Expand Up @@ -598,4 +600,9 @@ def __getitem__(self, idx) -> Tuple[np.ndarray, Optional[np.ndarray], np.ndarray
f"target series.",
)

return past_target, covariate, future_target
static_covariate = (
ts_target.static_covariates.values
if ts_target.static_covariates is not None
else None
)
return past_target, covariate, future_target, static_covariate