{"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/ecgn-a-cluster-aware-approach-to-graph-neural","title":"ECGN: A Cluster-Aware Approach to Graph Neural Networks for Imbalanced Classification","arxiv_id":"2410.11765","date":"2024-10-15","proceeding":null,"authors":["Bishal Thapaliya","Anh Nguyen","Yao Lu","Tian Xie","Igor Grudetskyi","Fudong Lin","Antonios Valkanas","Jingyu Liu","Deepayan Chakraborty","Bilel Fehri"],"abstract":"Classifying nodes in a graph is a common problem. The ideal classifier must adapt to any imbalances in the class distribution. It must also use information in the clustering structure of real-world graphs. Existing Graph Neural Networks (GNNs) have not addressed both problems together. We propose the Enhanced Cluster-aware Graph Network (ECGN), a novel method that addresses these issues by integrating cluster-specific training with synthetic node generation. Unlike traditional GNNs that apply the same node update process for all nodes, ECGN learns different aggregations for different clusters. We also use the clusters to generate new minority-class nodes in a way that helps clarify the inter-class decision boundary. By combining cluster-aware embeddings with a global integration step, ECGN enhances the quality of the resulting node embeddings. Our method works with any underlying GNN and any cluster generation technique. Experimental results show that ECGN consistently outperforms its closest competitors by up to 11% on some widely studied benchmark datasets.","url_abs":"https://arxiv.org/abs/2410.11765v1","url_pdf":"https://arxiv.org/pdf/2410.11765v1.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":"ecgn-a-cluster-aware-approach-to-graph-neural","repo_url":"https://github.com/anonymous753341/ecgn","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"imbalanced-classification","task_name":"imbalanced classification"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2410.11765","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2410.11765"}},"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/anonymous753341/ecgn","reach":{"status":"ok"}}],"summary":{"ran_honours":1,"ran":7,"ran_draft_wrong":1,"unverified":2},"by_repo_kind":{"official":{"samples":11,"ran":9,"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":11,"samples":[{"code_sha256_prefix":"18557871f0c93b3f","entry":"accuracy","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/SMOTE/utils.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/SMOTE/utils.py","link_basis":"plan_row","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":"18557871f0c93b3f"}},{"code_sha256_prefix":"5638f745f3bd76e6","entry":"add_onehot_features","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/train_clusters/add_onehot_features_original.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/train_clusters/add_onehot_features_original.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":"5638f745f3bd76e6"}},{"code_sha256_prefix":"948e1ec354cd206b","entry":"filter_indices","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/train_clusters/add_onehot_features.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/train_clusters/add_onehot_features.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":"948e1ec354cd206b"}},{"code_sha256_prefix":"b78133d80f2cdeb2","entry":"graph_to_adjacency_list","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/train_clusters/locality_hashing.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/train_clusters/locality_hashing.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":"b78133d80f2cdeb2"}},{"code_sha256_prefix":"711d3d512a5c27d4","entry":"normalize","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/datasets/data_load.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/datasets/data_load.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":"711d3d512a5c27d4"}},{"code_sha256_prefix":"77b09a0653554f87","entry":"refine_label_order","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/datasets/data_load.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/datasets/data_load.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":"77b09a0653554f87"}},{"code_sha256_prefix":"d59e098657f23759","entry":"split_arti","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/SMOTE/utils.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/SMOTE/utils.py","link_basis":"plan_row","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":"d59e098657f23759"}},{"code_sha256_prefix":"8d709f384e2f3ca7","entry":"split_arti","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/datasets/utils.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/datasets/utils.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":"8d709f384e2f3ca7"}},{"code_sha256_prefix":"bbb466e5948c17ee","entry":"split_genuine","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/SMOTE/utils.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/SMOTE/utils.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":"bbb466e5948c17ee"}},{"code_sha256_prefix":"7bfdf9fd1510eef1","entry":"add_onehot_features","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/train_clusters/add_onehot_features.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/train_clusters/add_onehot_features.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":"7bfdf9fd1510eef1"}},{"code_sha256_prefix":"1b57b88c3a4628db","entry":"load_data","repo":"anonymous753341/ecgn","repo_kind":"official","path":"ECGN/datasets/data_load.py","file_url":"https://github.com/anonymous753341/ecgn/blob/HEAD/ECGN/datasets/data_load.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":"1b57b88c3a4628db"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}