TSGM is an open-source framework for synthetic time series generation.
The framework can be used for:
- creating synthetic data, using historical data, black-box models, or a combined approach,
- researching new approaches for synthetic data generation,
- comparison of different generative methods for time series.
We provide:
- Documentation where we give complete overview of the implemented methods,
- Tutorials with tutorials that describe practical use-cases of the framework.
git clone github.com/AlexanderVNikitin/tsgm
cd tsgm
make install
Run tests:
make test
To check static typing:
mypy
We provide two CLIs for convenient synthetic data generation:
tsgm-gd
generates data by a stored sample,tsgm-eval
evaluates the generated time series.
Use tsgm-gd --help
or tsgm-eval --help
for documentation.
Here, we provide the gist of the framework, for the completed examples see our tutorials.
import tsgm
# ... Define hyperparameters ...
# dataset is a tensor of shape n_samples x seq_len x feature_dim
# Zoo contains several prebuilt architectures: we choose a conditional GAN architecture
architecture = tsgm.models.architectures.zoo["cgan_base_c4_l1"](
seq_len=seq_len, feat_dim=feature_dim,
latent_dim=latent_dim, output_dim=0)
discriminator, generator = architecture.discriminator, architecture.generator
# Initialize GAN object with selected discriminator and generator
gan = tsgm.models.cgan.GAN(
discriminator=discriminator, generator=generator, latent_dim=latent_dim
)
gan.compile(
d_optimizer=keras.optimizers.Adam(learning_rate=0.0003),
g_optimizer=keras.optimizers.Adam(learning_rate=0.0003),
loss_fn=keras.losses.BinaryCrossentropy(from_logits=True),
)
gan.fit(dataset, epochs=N_EPOCHS)
# Generate 100 synthetic samples
result = gan.generate(100)
TSGM provides API for convenient use of many time-series datasets. The comprehensive list of the datasets in the documentation
We appreciate all contributions. To learn more, please check CONTRIBUTING.md.