TimeEval / GutenTAG

GutenTAG is an extensible tool to generate time series datasets with and without anomalies; integrated with TimeEval.
MIT License
71 stars 13 forks source link
anomaly-detection dataset-generation datasets multivariate-timeseries time-series time-series-anomaly-detection univariate-timeseries
TimeEval logo

A good Timeseries Anomaly Generator.

[![CI](https://github.com/TimeEval/gutentag/actions/workflows/build.yml/badge.svg)](https://github.com/TimeEval/gutentag/actions/workflows/build.yml) [![codecov](https://codecov.io/gh/TimeEval/gutentag/branch/main/graph/badge.svg?token=6QXOCY4TS2)](https://codecov.io/gh/TimeEval/gutentag) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![PyPI package](https://badge.fury.io/py/timeeval-gutenTAG.svg)](https://badge.fury.io/py/timeeval-gutenTAG) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ![python version 3.7|3.8|3.9|3.10|3.11](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue) [![Downloads](https://pepy.tech/badge/timeeval-gutentag)](https://pepy.tech/project/timeeval-gutentag)

GutenTAG is an extensible tool to generate time series datasets with and without anomalies. A GutenTAG time series consists of a single (univariate) or multiple (multivariate) channels containing a base oscillation with different anomalies at different positions and of different kinds.

base-oscillations base-oscillations base-oscillations

base-oscillations

tl;dr

  1. Install GutenTAG from PyPI:

    pip install timeeval-gutenTAG

    GutenTAG supports Python 3.7, 3.8, 3.9, 3.10, and 3.11; all other requirements are installed with the pip-call above.

  2. Create a generation configuration file example-config.yaml with the instructions to generate a single time series with two anomalies: A pattern anomaly in the middle and an amplitude anomaly at the end of the series. You can use the following content:

    timeseries:
    - name: demo
     length: 1000
     base-oscillations:
     - kind: sine
       frequency: 4.0
       amplitude: 1.0
       variance: 0.05
     anomalies:
     - position: middle
       length: 50
       kinds:
       - kind: pattern
         sinusoid_k: 10.0
     - position: end
       length: 10
       kinds:
       - kind: amplitude
         amplitude_factor: 1.5
  3. Execute GutenTAG with a seed and let it plot the time series:

    gutenTAG --config-yaml example-config.yaml --seed 11 --no-save --plot

    You should see the following time series:

    Example unsupervised time series with two anomalies

Documentation

GutenTAG's documentation can be found here.

Citation

If you use GutenTAG in your project or research, please cite our demonstration paper:

Phillip Wenig, Sebastian Schmidl, and Thorsten Papenbrock. TimeEval: A Benchmarking Toolkit for Time Series Anomaly Detection Algorithms. PVLDB, 15(12): 3678 - 3681, 2022. doi:10.14778/3554821.3554873

@article{WenigEtAl2022TimeEval,
  title = {TimeEval: {{A}} Benchmarking Toolkit for Time Series Anomaly Detection Algorithms},
  author = {Wenig, Phillip and Schmidl, Sebastian and Papenbrock, Thorsten},
  date = {2022},
  journaltitle = {Proceedings of the {{VLDB Endowment}} ({{PVLDB}})},
  volume = {15},
  number = {12},
  pages = {3678 -- 3681},
  doi = {10.14778/3554821.3554873}
}

Contributing

We welcome contributions to GutenTAG. If you have spotted an issue with GutenTAG or if you want to enhance it, please open an issue first. See Contributing for details.