{"id":37667637,"url":"https://github.com/timeeval/timeeval-algorithms","last_synced_at":"2026-01-16T12:00:30.764Z","repository":{"id":42474639,"uuid":"444747816","full_name":"TimeEval/TimeEval-algorithms","owner":"TimeEval","description":"Time series anomaly detection algorithm implementations for TimeEval (Docker-based)","archived":false,"fork":false,"pushed_at":"2025-05-09T13:49:11.000Z","size":1900,"stargazers_count":149,"open_issues_count":14,"forks_count":32,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-09T14:58:26.336Z","etag":null,"topics":["benchmarking","docker","time-series","time-series-analysis","time-series-anomaly-detection"],"latest_commit_sha":null,"homepage":"https://timeeval.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TimeEval.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-01-05T09:45:29.000Z","updated_at":"2025-05-09T13:49:16.000Z","dependencies_parsed_at":"2023-12-22T16:46:48.192Z","dependency_job_id":"eb9e7b53-03af-49e1-b6a4-9d888b4edd3f","html_url":"https://github.com/TimeEval/TimeEval-algorithms","commit_stats":null,"previous_names":["timeeval/timeeval-algorithms","hpi-information-systems/timeeval-algorithms"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TimeEval/TimeEval-algorithms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimeEval%2FTimeEval-algorithms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimeEval%2FTimeEval-algorithms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimeEval%2FTimeEval-algorithms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimeEval%2FTimeEval-algorithms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TimeEval","download_url":"https://codeload.github.com/TimeEval/TimeEval-algorithms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimeEval%2FTimeEval-algorithms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmarking","docker","time-series","time-series-analysis","time-series-anomaly-detection"],"created_at":"2026-01-16T12:00:20.710Z","updated_at":"2026-01-16T12:00:30.743Z","avatar_url":"https://github.com/TimeEval.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"130px\" src=\"./timeeval-algorithms.png\" alt=\"TimeEval logo\"/\u003e\n\u003ch1 align=\"center\"\u003eTimeEval Algorithms\u003c/h1\u003e\n\u003cp\u003e\n  Time Series Anomaly Detection Algorithms for TimeEval.\n\u003c/p\u003e\n\u003c/div\u003e\n\n## Description\n\nThis repository contains a collection of containerized (dockerized) time series anomaly detection methods that can easily be evaluated using [TimeEval](https://github.com/TimeEval/TimeEval).\nSome of the algorithm's source code is access restricted and we just provide the TimeEval stubs and manifests.\nWe are happy to share our TimeEval adaptations of excluded algorithms upon request, if the original authors approve this.\n\nEach folder contains the implementation of an algorithm that is built into a runnable Docker container using GitHub Actions.\nWe host the algorithm Docker images on GitHub.\nThus, the namespace prefix (repository) for the Docker images is `ghcr.io/timeeval/`.\n\n## Overview\n\n| Algorithm (folder) | Image | Language | Base image | Learning Type | Input Dimensionality |\n| :----------------- | :---- | :------- | :--------- | :------------ | :------------------- |\n| [arima](./arima) (_restricted access_) | [`ghcr.io/timeeval/arima`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/arima) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [autoencoder](./autoencoder) | [`ghcr.io/timeeval/autoencoder`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/autoencoder) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [bagel](./bagel) | [`ghcr.io/timeeval/bagel`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/bagel) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [baseline_increasing](./baseline_increasing) | [`ghcr.io/timeeval/baseline_increasing`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/baseline_increasing) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [baseline_normal](./baseline_normal) | [`ghcr.io/timeeval/baseline_normal`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/baseline_normal) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [baseline_random](./baseline_random) | [`ghcr.io/timeeval/baseline_random`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/baseline_random) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [cblof](./cblof) | [`ghcr.io/timeeval/cblof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/cblof) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [cof](./cof) | [`ghcr.io/timeeval/cof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/cof) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [copod](./copod) | [`ghcr.io/timeeval/copod`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/copod) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [dae](./dae) (DeNoising Autoencoder) | [`ghcr.io/timeeval/dae`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/dae) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [damp](./damp) | [`ghcr.io/timeeval/damp`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/damp) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [dbstream](./dbstream) | [`ghcr.io/timeeval/dbstream`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/dbstream) | R 4.2.0 | [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | unsupervised | multivariate\n| [deepant](./deepant) | [`ghcr.io/timeeval/deepant`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/deepant) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [deepnap](./deepnap) | [`ghcr.io/timeeval/deepnap`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/deepnap) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [donut](./donut) | [`ghcr.io/timeeval/donut`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/donut) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [dspot](./dspot) | [`ghcr.io/timeeval/dspot`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/dspot) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [dwt_mlead](./dwt_mlead) | [`ghcr.io/timeeval/dwt_mlead`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/dwt_mlead) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [eif](./eif) | [`ghcr.io/timeeval/eif`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/eif) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [encdec_ad](./encdec_ad) | [`ghcr.io/timeeval/encdec_ad`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/encdec_ad) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [ensemble_gi](./ensemble_gi) | [`ghcr.io/timeeval/ensemble_gi`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/ensemble_gi) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [fast_mcd](./fast_mcd) | [`ghcr.io/timeeval/fast_mcd`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/fast_mcd) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [fft](./fft) | [`ghcr.io/timeeval/fft`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/fft) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [generic_rf](./generic_rf) | [`ghcr.io/timeeval/generic_rf`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/generic_rf) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [generic_xgb](./generic_xgb) | [`ghcr.io/timeeval/generic_xgb`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/generic_xgb) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [grammarviz3](./grammarviz3) | [`ghcr.io/timeeval/grammarviz3`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/grammarviz3) | Java| [`ghcr.io/timeeval/java-base`](./0-base-images/java-base) | unsupervised | univariate |\n| [grammarviz3_multi](./grammarviz3_multi) | [`ghcr.io/timeeval/grammarviz3_multi`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/grammarviz3_multi) | Java| [`ghcr.io/timeeval/java-base`](./0-base-images/java-base) | unsupervised | multivariate |\n| [hbos](./hbos) | [`ghcr.io/timeeval/hbos`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/hbos) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [health_esn](./health_esn) | [`ghcr.io/timeeval/health_esn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/health_esn) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [hif](./hif) | [`ghcr.io/timeeval/hif`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/hif) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | supervised | multivariate |\n| [hotsax](./hotsax) | [`ghcr.io/timeeval/hotsax`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/hotsax) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [hybrid_knn](./hybrid_knn) | [`ghcr.io/timeeval/hybrid_knn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/hybrid_knn) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [if_lof](./if_lof) | [`ghcr.io/timeeval/if_lof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/if_lof) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [iforest](./iforest) | [`ghcr.io/timeeval/iforest`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/iforest) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [img_embedding_cae](./img_embedding_cae) | [`ghcr.io/timeeval/img_embedding_cae`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/img_embedding_cae) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [kmeans](./kmeans) | [`ghcr.io/timeeval/kmeans`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/kmeans) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [knn](./knn) | [`ghcr.io/timeeval/knn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/knn) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [laser_dbn](./laser_dbn) | [`ghcr.io/timeeval/laser_dbn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/laser_dbn) | Python 3.7 |[`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [left_stampi](./left_stampi) | [`ghcr.io/timeeval/left_stampi`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/left_stampi) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [lof](./lof) | [`ghcr.io/timeeval/lof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/lof) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [lstm_ad](./lstm_ad) | [`ghcr.io/timeeval/lstm_ad`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/lstm_ad) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [lstm_vae](./lstm_vae) | [`ghcr.io/timeeval/lstm_vae`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/lstm_vae) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [median_method](./median_method) | [`ghcr.io/timeeval/median_method`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/median_method) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [mscred](./mscred) | [`ghcr.io/timeeval/mscred`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/mscred) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [mstamp](./mstamp) | [`ghcr.io/timeeval/mstamp`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/mstamp) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [mtad_gat](./mtad_gat) | [`ghcr.io/timeeval/mtad_gat`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/mtad_gat) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [multi_hmm](./multi_hmm) | [`ghcr.io/timeeval/multi_hmm`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/multi_hmm) | Python 3.7 |[`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | supervised | multivariate |\n| [multi_norma](./multi_norma) (_restricted access_) | [`ghcr.io/timeeval/multi_norma`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/multi_norma) | Python 3.7 |[`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [multi_subsequence_lof](./multi_subsquence_lof) | [`ghcr.io/timeeval/multi_subsequence_lof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/multi_subsequence_lof) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [mvalmod](./mvalmod) | [`ghcr.io/timeeval/mvalmod`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/mvalmod) | R 4.2.0 | [`ghcr.io/timeeval/tsmp`](./1-intermediate-images/tsmp) -\u003e [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | unsupervised | multivariate |\n| [norma](./norma) (_restricted access_) | [`ghcr.io/timeeval/norma`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/norma) | Python 3.7 |[`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [normalizing_flows](./normalizing_flows) | [`ghcr.io/timeeval/normalizing_flows`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/normalizing_flows) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | supervised | multivariate |\n| [novelty_svr](./novelty_svr) | [`ghcr.io/timeeval/novelty_svr`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/novelty_svr) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [numenta_htm](./numenta_htm) | [`ghcr.io/timeeval/numenta_htm`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/numenta_htm) | Python 2.7 |[`ghcr.io/timeeval/python2-base`](./0-base-images/python2-base) | unsupervised | univariate |\n| [ocean_wnn](./ocean_wnn) | [`ghcr.io/timeeval/ocean_wnn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/ocean_wnn) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [omnianomaly](./omnianomaly) | [`ghcr.io/timeeval/omnianomaly`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/omnianomaly) | Python 3.6 |[`ghcr.io/timeeval/python36-base`](./0-base-images/python36-base) | semi-supervised | multivariate |\n| [pcc](./pcc) | [`ghcr.io/timeeval/pcc`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/pcc) | Python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [pci](./pci) | [`ghcr.io/timeeval/pci`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/pci) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [phasespace_svm](./phasespace_svm) | [`ghcr.io/timeeval/phasespace_svm`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/phasespace_svm) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [pst](./pst) | [`ghcr.io/timeeval/pst`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/pst) | R 4.2.0 | [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | |\n| [random_black_forest](./random_black_forest) | [`ghcr.io/timeeval/random_black_forest`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/random_black_forest) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [robust_pca](./robust_pca) | [`ghcr.io/timeeval/robust_pca`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/robust_pca) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [sand](./sand) (_restricted access_) | [`ghcr.io/timeeval/sand`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/sand) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [sarima](./sarima) | [`ghcr.io/timeeval/sarima`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/sarima) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [series2graph](./series2graph)  (_restricted access_) | [`ghcr.io/timeeval/series2graph`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/series2graph) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [s_h_esd](./s_h_esd) | [`ghcr.io/timeeval/s_h_esd`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/s_h_esd) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [sr](./sr) | [`ghcr.io/timeeval/sr`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/sr) | Python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [sr_cnn](./sr_cnn) | [`ghcr.io/timeeval/sr_cnn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/sr_cnn) | Python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [ssa](./ssa) (_restricted access_) | [`ghcr.io/timeeval/ssa`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/ssa) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [stamp](./stamp) | [`ghcr.io/timeeval/stamp`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/stamp) | R 4.2.0 | [`ghcr.io/timeeval/tsmp`](./1-intermediate-images/tsmp) -\u003e [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | unsupervised | univariate |\n| [stomp](./stomp) | [`ghcr.io/timeeval/stomp`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/stomp) | R 4.2.0 | [`ghcr.io/timeeval/tsmp`](./1-intermediate-images/tsmp) -\u003e [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | unsupervised | univariate |\n| [subsequence_fast_mcd](./subsequence_fast_mcd) | [`ghcr.io/timeeval/subsequence_fast_mcd`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/subsequence_fast_mcd) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [subsequence_knn](./subsequence_knn) | [`ghcr.io/timeeval/subsequence_knn`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/subsequence_knn) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [subsequence_if](./subsequence_if) | [`ghcr.io/timeeval/subsequence_if`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/subsequence_if) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [subsequence_lof](./subsequence_lof) | [`ghcr.io/timeeval/subsequence_lof`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/subsequence_lof) | python 3.7 | [`ghcr.io/timeeval/pyod`](./1-intermediate-images/pyod) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [tanogan](./tanogan) | [`ghcr.io/timeeval/tanogan`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/tanogan) | python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-torch) -\u003e [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [tarzan](./tarzan) | [`ghcr.io/timeeval/tarzan`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/tarzan) | Python 3.7 | [`ghcr.io/timeeval/python3-torch`](./0-base-images/python3-base) | semi-supervised | univariate |\n| [telemanom](./telemanom) | [`ghcr.io/timeeval/telemanom`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/telemanom) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | semi-supervised | multivariate |\n| [torsk](./torsk) | [`ghcr.io/timeeval/torsk`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/torsk) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | multivariate |\n| [triple_es](./triple_es) | [`ghcr.io/timeeval/triple_es`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/triple_es) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [ts_bitmap](./ts_bitmap) | [`ghcr.io/timeeval/ts_bitmap`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/ts_bitmap) | python 3.7 | [`ghcr.io/timeeval/python3-base`](./0-base-images/python3-base) | unsupervised | univariate |\n| [valmod](./valmod) | [`ghcr.io/timeeval/valmod`](https://github.com/TimeEval/TimeEval-algorithms/pkgs/container/valmod) | R 4.2.0 | [`ghcr.io/timeeval/tsmp`](./1-intermediate-images/tsmp) -\u003e [`ghcr.io/timeeval/r4-base`](./0-base-images/r4-base) | unsupervised | univariate |\n\n## Usage\n\n### Use the published algorithm images\n\nPlease always use a version-tagged Docker image for your algorithms to ensure reproducibility!\n\nYou can pull the TimeEval algorithm images directly from the GitHub registry.\nThis registry does not require authentication.\n\n```bash\ndocker pull ghcr.io/timeeval/\u003calgorithm_name\u003e:0.3.0\n```\n\n### Build the algorithm images\n\nEach algorithm in this repository is bundled in a self-contained Docker image so that it can be executed with a single command and no additional dependencies must be installed.\nThis allows you to test the algorithm without installing its dependencies on your machine.\nThe only requirement is a (x86-)Docker runtime.\n\nIn the following, we assume that you want to build the Docker image for the [`lof`](./lof)-algorithm.\n\n\u003e :warning: **Use correct version tags!**\n\u003e\n\u003e Please tag the base and intermediate images with the correct version.\n\u003e You can find the required version for each algorithm image in its `Dockerfile`.\n\u003e E.g. for [`lof`](./lof/Dockerfile) the version for `pyod` must be `0.3.0` (as of 2023-12-16):\n\u003e\n\u003e ```Dockerfile\n\u003e FROM ghcr.io/timeeval/pyod:0.3.0\n\u003e ```\n\n#### Prerequisites\n\nYou need the following tools installed on your development machine:\n\n- git\n- docker\n- access to this repository\n- (optionally) Docker BuildKit\n\nPlease make yourself familiar with the [concepts of TimeEval](https://timeeval.readthedocs.io/en/latest/concepts), and read the [TimeEval documentation](https://timeeval.readthedocs.io) and this document carefully!\n\n#### 1. Prepare base image\n\nYou'll need the required base Docker images to build your algorithm's image.\nYou can either pull the base image from the registry or build it yourself.\nIn this guide, we assume that you want to build all Docker images locally.\n\n1. Clone this repository and change to its root folder\n\n   ```bash\n   git clone https://github.com/TimeEval/TimeEval-algorithms.git\n   cd TimeEval-algorithms\n   ```\n\n2. Change to the `0-base-images` folder:\n\n   ```bash\n   cd 0-base-images\n   ```\n\n3. Build your desired base image:\n\n   ```bash\n   docker build -t ghcr.io/timeeval/python3-base:0.3.0 python3-base\n   ```\n\n#### Prepare intermediate image (optional)\n\nBecause the algorithm `lof` depends on an intermediate image, we, first, need to build the required intermediate image `pyod`.\nPlease see the table in this repository's README for the dependencies.\n\nYou can build the intermediate image `pyod` using these commands:\n\n```bash\ncd ../1-intermediate-images\ndocker build -t ghcr.io/timeeval/pyod:0.2.5 pyod\n```\n\n#### Build algorithm image\n\nOnce you have built all dependent images, you can build your algorithm image from the base image(s):\n\n1. Change to the repository's root directory:\n\n   ```bash\n   cd ..\n   ```\n\n2. Build the Docker image for your algorithm (`lof` in this case):\n\n   ```bash\n   docker build -t ghcr.io/timeeval/lof:0.3.0 ./lof\n   ```\n\n### Testing an algorithm and its TimeEval integration\n\nTesting an algorithm locally can be done in two different ways:\n\n1. Test the algorithm's code directly (using the tools provided by the programming language)\n2. Test the algorithm within its docker container\n\nThe first option is specific to the programming language, so we won't cover it here.\n\nEach algorithm in this repository will be bundled in a self-contained Docker image so that it can be executed with a single command and no additional dependencies must be installed.\nThis allows you to test the algorithm without installing its dependencies on your machine.\nThe only requirement is a (x86-)Docker runtime.\nFollow the below steps to test your algorithm using Docker (examples assume that you want to build the image for the LOF algorithm):\n\n1. **Pull or build the algorithm image**\n   We refer the reader to the previous section for detailed instructions.\n\n2. **Train your algorithm (optional)**\n   If your algorithm is supervised or semi-supervised, execute the following command to perform the training step (_not necessary for LOF_):\n\n   ```bash\n   mkdir -p results\n   docker run --rm \\\n       -v $(pwd)/data:/data:ro \\\n       -v $(pwd)/results:/results:rw \\\n   #    -e LOCAL_UID=\u003ccurrent user id\u003e \\\n   #    -e LOCAL_GID=\u003ccurrent groupid\u003e \\\n     ghcr.io/timeeval/\u003cyour_algorithm\u003e:latest execute-algorithm '{\n       \"executionType\": \"train\",\n       \"dataInput\": \"/data/dataset.csv\",\n       \"dataOutput\": \"/results/anomaly_scores.ts\",\n       \"modelInput\": \"/results/model.pkl\",\n       \"modelOutput\": \"/results/model.pkl\",\n       \"customParameters\": {}\n     }'\n   ```\n\n   Be warned that the result and model files will be written to the `results`-directory as the root-user if you do not pass the optional environment variables `LOCAL_UID` and `LOCAL_GID` to the container.\n\n3. **Execute your algorithm**\n   Run the following command to perform the execution step of your algorithm:\n\n   ```bash\n   mkdir -p results\n   TIMEEVAL_ALGORITHM=lof\n   docker run --rm \\\n       -v $(pwd)/data:/data:ro \\\n       -v $(pwd)/results:/results:rw \\\n   #    -e LOCAL_UID=\u003ccurrent user id\u003e \\\n   #    -e LOCAL_GID=\u003ccurrent groupid\u003e \\\n     ghcr.io/timeeval/${TIMEEVAL_ALGORITHM}:latest execute-algorithm '{\n       \"executionType\": \"execute\",\n       \"dataInput\": \"/data/dataset.csv\",\n       \"dataOutput\": \"/results/anomaly_scores.ts\",\n       \"modelInput\": \"/results/model.pkl\",\n       \"modelOutput\": \"/results/model.pkl\",\n       \"customParameters\": {}\n     }'\n   ```\n\n   Be warned that the result and model files will be written to the `results`-directory as the root-user if you do not pass the optional environment variables `LOCAL_UID` and `LOCAL_GID` to the container.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimeeval%2Ftimeeval-algorithms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimeeval%2Ftimeeval-algorithms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimeeval%2Ftimeeval-algorithms/lists"}