{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/an-evaluation-of-anomaly-detection-and","title":"An Evaluation of Anomaly Detection and Diagnosis in Multivariate Time Series","arxiv_id":"2109.11428","date":"2021-09-23","proceeding":null,"authors":["Astha Garg","Wenyu Zhang","Jules Samaran","Savitha Ramasamy","Chuan-Sheng Foo"],"abstract":"Several techniques for multivariate time series anomaly detection have been proposed recently, but a systematic comparison on a common set of datasets and metrics is lacking. This paper presents a systematic and comprehensive evaluation of unsupervised and semi-supervised deep-learning based methods for anomaly detection and diagnosis on multivariate time series data from cyberphysical systems. Unlike previous works, we vary the model and post-processing of model errors, i.e. the scoring functions independently of each other, through a grid of 10 models and 4 scoring functions, comparing these variants to state of the art methods. In time-series anomaly detection, detecting anomalous events is more important than detecting individual anomalous time-points. Through experiments, we find that the existing evaluation metrics either do not take events into account, or cannot distinguish between a good detector and trivial detectors, such as a random or an all-positive detector. We propose a new metric to overcome these drawbacks, namely, the composite F-score ($Fc_1$), for evaluating time-series anomaly detection. Our study highlights that dynamic scoring functions work much better than static ones for multivariate time series anomaly detection, and the choice of scoring functions often matters more than the choice of the underlying model. We also find that a simple, channel-wise model - the Univariate Fully-Connected Auto-Encoder, with the dynamic Gaussian scoring function emerges as a winning candidate for both anomaly detection and diagnosis, beating state of the art algorithms.","url_abs":"https://arxiv.org/abs/2109.11428v1","url_pdf":"https://arxiv.org/pdf/2109.11428v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"an-evaluation-of-anomaly-detection-and","repo_url":"https://github.com/astha-chem/mvts-ano-eval","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"time-series-1","task_name":"Time Series"},{"task_slug":"time-series","task_name":"Time Series Analysis"},{"task_slug":"time-series-anomaly-detection","task_name":"Time Series Anomaly Detection"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2109.11428","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2109.11428"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/astha-chem/mvts-ano-eval","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":1,"unverified":6},"by_repo_kind":{"official":{"samples":7,"ran":1,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"dc9eba4733cf0ef2","entry":"calc_point2point","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"src/algorithms/omni_anomaly/eval_methods.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/src/algorithms/omni_anomaly/eval_methods.py","link_basis":"plan_row","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dc9eba4733cf0ef2"}},{"code_sha256_prefix":"e9d1085c7f3570bf","entry":"adjust_predicts","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"src/algorithms/omni_anomaly/eval_methods.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/src/algorithms/omni_anomaly/eval_methods.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e9d1085c7f3570bf"}},{"code_sha256_prefix":"ffb9d8932a2a0060","entry":"calc_seq","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"src/algorithms/omni_anomaly/eval_methods.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/src/algorithms/omni_anomaly/eval_methods.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ffb9d8932a2a0060"}},{"code_sha256_prefix":"5cff0c62ca6be16c","entry":"get_best_config","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"configs.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/configs.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5cff0c62ca6be16c"}},{"code_sha256_prefix":"370f5ea00f912a03","entry":"get_sub_seqs","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"src/algorithms/algorithm_utils.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/src/algorithms/algorithm_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"370f5ea00f912a03"}},{"code_sha256_prefix":"cd2efafd2f0a09ba","entry":"get_thres_config","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"configs.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/configs.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cd2efafd2f0a09ba"}},{"code_sha256_prefix":"9e8f9ac953549d35","entry":"get_train_data_loaders","repo":"astha-chem/mvts-ano-eval","repo_kind":"official","path":"src/algorithms/algorithm_utils.py","file_url":"https://github.com/astha-chem/mvts-ano-eval/blob/HEAD/src/algorithms/algorithm_utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9e8f9ac953549d35"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}