{"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/fast-and-attributed-change-detection-on","title":"Fast and Attributed Change Detection on Dynamic Graphs with Density of States","arxiv_id":"2305.08750","date":"2023-05-15","proceeding":null,"authors":["Shenyang Huang","Jacob Danovitch","Guillaume Rabusseau","Reihaneh Rabbany"],"abstract":"How can we detect traffic disturbances from international flight transportation logs or changes to collaboration dynamics in academic networks? These problems can be formulated as detecting anomalous change points in a dynamic graph. Current solutions do not scale well to large real-world graphs, lack robustness to large amounts of node additions/deletions, and overlook changes in node attributes. To address these limitations, we propose a novel spectral method: Scalable Change Point Detection (SCPD). SCPD generates an embedding for each graph snapshot by efficiently approximating the distribution of the Laplacian spectrum at each step. SCPD can also capture shifts in node attributes by tracking correlations between attributes and eigenvectors. Through extensive experiments using synthetic and real-world data, we show that SCPD (a) achieves state-of-the art performance, (b) is significantly faster than the state-of-the-art methods and can easily process millions of edges in a few CPU minutes, (c) can effectively tackle a large quantity of node attributes, additions or deletions and (d) discovers interesting events in large real-world graphs. The code is publicly available at https://github.com/shenyangHuang/SCPD.git","url_abs":"https://arxiv.org/abs/2305.08750v1","url_pdf":"https://arxiv.org/pdf/2305.08750v1.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":"fast-and-attributed-change-detection-on","repo_url":"https://github.com/shenyanghuang/scpd","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":null},{"paper_slug":"fast-and-attributed-change-detection-on","repo_url":"https://github.com/shenyangHuang/LAD","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}}],"tasks":[{"task_slug":null,"task_name":"CPU"},{"task_slug":"change-detection","task_name":"Change Detection"},{"task_slug":"change-point-detection","task_name":"Change Point Detection"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2305.08750","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2305.08750"}},"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/shenyanghuang/scpd","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/shenyangHuang/LAD","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":4,"ran_honours":3},"by_repo_kind":{"official":{"samples":7,"ran":7,"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":7,"samples":[{"code_sha256_prefix":"b875e52780238724","entry":"SPOTLIGHT","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/spotlight.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/spotlight.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b875e52780238724"}},{"code_sha256_prefix":"bc30cf5dc7698236","entry":"average_typical_behavior","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/Anomaly_Detection.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/Anomaly_Detection.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bc30cf5dc7698236"}},{"code_sha256_prefix":"b8b7e41956b62f3e","entry":"find_anomalies","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/Anomaly_Detection.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/Anomaly_Detection.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b8b7e41956b62f3e"}},{"code_sha256_prefix":"cbfd8eda7d721d16","entry":"load_graph","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/dos.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/dos.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cbfd8eda7d721d16"}},{"code_sha256_prefix":"96d7dc8493e0eb5a","entry":"make_src_dict","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/spotlight.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/spotlight.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"96d7dc8493e0eb5a"}},{"code_sha256_prefix":"5ace44834b00d4d9","entry":"matrix_normalize","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/dos.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/dos.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5ace44834b00d4d9"}},{"code_sha256_prefix":"518330245433e858","entry":"principal_vec_typical_behavior","repo":"shenyanghuang/scpd","repo_kind":"official","path":"subroutines/Anomaly_Detection.py","file_url":"https://github.com/shenyanghuang/scpd/blob/HEAD/subroutines/Anomaly_Detection.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"518330245433e858"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}