{"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/unigad-unifying-multi-level-graph-anomaly","title":"UniGAD: Unifying Multi-level Graph Anomaly Detection","arxiv_id":"2411.06427","date":"2024-11-10","proceeding":null,"authors":["Yiqing Lin","Jianheng Tang","Chenyi Zi","H. Vicky Zhao","Yuan YAO","Jia Li"],"abstract":"Graph Anomaly Detection (GAD) aims to identify uncommon, deviated, or suspicious objects within graph-structured data. Existing methods generally focus on a single graph object type (node, edge, graph, etc.) and often overlook the inherent connections among different object types of graph anomalies. For instance, a money laundering transaction might involve an abnormal account and the broader community it interacts with. To address this, we present UniGAD, the first unified framework for detecting anomalies at node, edge, and graph levels jointly. Specifically, we develop the Maximum Rayleigh Quotient Subgraph Sampler (MRQSampler) that unifies multi-level formats by transferring objects at each level into graph-level tasks on subgraphs. We theoretically prove that MRQSampler maximizes the accumulated spectral energy of subgraphs (i.e., the Rayleigh quotient) to preserve the most significant anomaly information. To further unify multi-level training, we introduce a novel GraphStitch Network to integrate information across different levels, adjust the amount of sharing required at each level, and harmonize conflicting training goals. Comprehensive experiments show that UniGAD outperforms both existing GAD methods specialized for a single task and graph prompt-based approaches for multiple tasks, while also providing robust zero-shot task transferability. All codes can be found at https://github.com/lllyyq1121/UniGAD.","url_abs":"https://arxiv.org/abs/2411.06427v1","url_pdf":"https://arxiv.org/pdf/2411.06427v1.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":"unigad-unifying-multi-level-graph-anomaly","repo_url":"https://github.com/lllyyq1121/unigad","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"graph-anomaly-detection","task_name":"Graph Anomaly Detection"}],"methods":[{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2411.06427","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2411.06427"}},"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":"deterministic:regex_extraction","url":"https://github.com/lllyyq1121/UniGAD","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/lllyyq1121/unigad","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":2,"ran_honours":1,"unverified":10},"by_repo_kind":{"official":{"samples":13,"ran":3,"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":"b59e82bc048376e0","entry":"ASM","repo":"lllyyq1121/unigad","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/unigad/blob/HEAD/src/e2e_models.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b59e82bc048376e0"}},{"code_sha256_prefix":"cb875357b44a3298","entry":"calculate_theta2","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/edcoders.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/edcoders.py","link_basis":"plan_row","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cb875357b44a3298"}},{"code_sha256_prefix":"fe569ec9c507448d","entry":"get_best_f1","repo":"lllyyq1121/unigad","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/unigad/blob/HEAD/src/e2e_models.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fe569ec9c507448d"}},{"code_sha256_prefix":"0ec085ddee672579","entry":"ASM","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/Pareto_fn.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/Pareto_fn.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":"0ec085ddee672579"}},{"code_sha256_prefix":"423532caf6b167b4","entry":"UnifyMLPDetector","repo":"lllyyq1121/unigad","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/unigad/blob/HEAD/src/e2e_models.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":"423532caf6b167b4"}},{"code_sha256_prefix":"dc12e2810d822a2f","entry":"apply_edges_distance","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/predictors.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/predictors.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":"dc12e2810d822a2f"}},{"code_sha256_prefix":"67d792fb28595133","entry":"get_best_f1","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/e2e_models.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":"67d792fb28595133"}},{"code_sha256_prefix":"35dd55beb4b42fbc","entry":"obtain_act","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/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":"35dd55beb4b42fbc"}},{"code_sha256_prefix":"4c8fe0a8460d3b5c","entry":"obtain_norm","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/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":"4c8fe0a8460d3b5c"}},{"code_sha256_prefix":"215676227231e70e","entry":"pareto_fn","repo":"lllyyq1121/unigad","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/unigad/blob/HEAD/src/e2e_models.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":"215676227231e70e"}},{"code_sha256_prefix":"5d6d091d68784a71","entry":"pareto_fn","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/Pareto_fn.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/Pareto_fn.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":"5d6d091d68784a71"}},{"code_sha256_prefix":"f99c31ca2a255056","entry":"pareto_step","repo":"lllyyq1121/unigad","repo_kind":"official","path":"src/e2e_models.py","file_url":"https://github.com/lllyyq1121/unigad/blob/HEAD/src/e2e_models.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":"f99c31ca2a255056"}},{"code_sha256_prefix":"914e644f6f8e2161","entry":"pareto_step","repo":"lllyyq1121/UniGAD","repo_kind":"official","path":"src/Pareto_fn.py","file_url":"https://github.com/lllyyq1121/UniGAD/blob/HEAD/src/Pareto_fn.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":"914e644f6f8e2161"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}