{"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/multivariate-time-series-anomaly-detection-5","title":"Multivariate Time-Series Anomaly Detection based on Enhancing Graph Attention Networks with Topological Analysis","arxiv_id":"2408.13082","date":"2024-08-23","proceeding":null,"authors":["Zhe Liu","Xiang Huang","Jingyun Zhang","Zhifeng Hao","Li Sun","Hao Peng"],"abstract":"Unsupervised anomaly detection in time series is essential in industrial applications, as it significantly reduces the need for manual intervention. Multivariate time series pose a complex challenge due to their feature and temporal dimensions. Traditional methods use Graph Neural Networks (GNNs) or Transformers to analyze spatial while RNNs to model temporal dependencies. These methods focus narrowly on one dimension or engage in coarse-grained feature extraction, which can be inadequate for large datasets characterized by intricate relationships and dynamic changes. This paper introduces a novel temporal model built on an enhanced Graph Attention Network (GAT) for multivariate time series anomaly detection called TopoGDN. Our model analyzes both time and feature dimensions from a fine-grained perspective. First, we introduce a multi-scale temporal convolution module to extract detailed temporal features. Additionally, we present an augmented GAT to manage complex inter-feature dependencies, which incorporates graph topology into node features across multiple scales, a versatile, plug-and-play enhancement that significantly boosts the performance of GAT. Our experimental results confirm that our approach surpasses the baseline models on four datasets, demonstrating its potential for widespread application in fields requiring robust anomaly detection. The code is available at https://github.com/ljj-cyber/TopoGDN.","url_abs":"https://arxiv.org/abs/2408.13082v1","url_pdf":"https://arxiv.org/pdf/2408.13082v1.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":"multivariate-time-series-anomaly-detection-5","repo_url":"https://github.com/ljj-cyber/topogdn","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"graph-attention","task_name":"Graph Attention"},{"task_slug":"time-series-1","task_name":"Time Series"},{"task_slug":"time-series-anomaly-detection","task_name":"Time Series Anomaly Detection"},{"task_slug":"unsupervised-anomaly-detection","task_name":"Unsupervised Anomaly Detection"}],"methods":[{"method_slug":"attention","method_name":"Attention"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"focus","method_name":"Focus"},{"method_slug":"gat","method_name":"GAT"},{"method_slug":"softmax","method_name":"Softmax"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2408.13082","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2408.13082"}},"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/ljj-cyber/topogdn","reach":{"status":"ok"}}],"summary":{"ran":7,"ran_draft_wrong":1,"unverified":4},"by_repo_kind":{"official":{"samples":12,"ran":8,"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":12,"samples":[{"code_sha256_prefix":"64aec54ddc35a2db","entry":"eval_mseloss","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/data.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"64aec54ddc35a2db"}},{"code_sha256_prefix":"f4ab9d3cda5fb122","entry":"eval_scores","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/data.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f4ab9d3cda5fb122"}},{"code_sha256_prefix":"44a835969019c18f","entry":"fake_persistence_computation","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"models/topoPooling.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/models/topoPooling.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"44a835969019c18f"}},{"code_sha256_prefix":"9e1b6c2e3450ea55","entry":"get_attack_interval","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/data.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9e1b6c2e3450ea55"}},{"code_sha256_prefix":"a5070b5a5d3a66f9","entry":"get_batch_edge_index","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"models/GDN.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/models/GDN.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a5070b5a5d3a66f9"}},{"code_sha256_prefix":"bb51eec4951c977f","entry":"get_fc_graph_struc","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/net_struct.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/net_struct.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bb51eec4951c977f"}},{"code_sha256_prefix":"f37562b53f346467","entry":"get_feature_map","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/net_struct.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/net_struct.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f37562b53f346467"}},{"code_sha256_prefix":"afa96e68dd9b9282","entry":"get_prior_graph_struc","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"util/net_struct.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/util/net_struct.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"afa96e68dd9b9282"}},{"code_sha256_prefix":"a5495ebb1d60c00f","entry":"batch_to_tensor","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"models/coord_transforms.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/models/coord_transforms.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a5495ebb1d60c00f"}},{"code_sha256_prefix":"e0cd32473e7aabbf","entry":"get_err_scores","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"evaluate.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e0cd32473e7aabbf"}},{"code_sha256_prefix":"91a5a7ffed0d8bab","entry":"get_final_err_scores","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"evaluate.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"91a5a7ffed0d8bab"}},{"code_sha256_prefix":"2cf34b296f990785","entry":"get_full_err_scores","repo":"ljj-cyber/topogdn","repo_kind":"official","path":"evaluate.py","file_url":"https://github.com/ljj-cyber/topogdn/blob/HEAD/evaluate.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2cf34b296f990785"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}