{"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/privacy-preserving-graph-based-machine","title":"Privacy-Preserving Graph-Based Machine Learning with Fully Homomorphic Encryption for Collaborative Anti-Money Laundering","arxiv_id":"2411.02926","date":"2024-11-05","proceeding":null,"authors":["Fabrianne Effendi","Anupam Chattopadhyay"],"abstract":"Combating money laundering has become increasingly complex with the rise of cybercrime and digitalization of financial transactions. Graph-based machine learning techniques have emerged as promising tools for Anti-Money Laundering (AML) detection, capturing intricate relationships within money laundering networks. However, the effectiveness of AML solutions is hindered by data silos within financial institutions, limiting collaboration and overall efficacy. This research presents a novel privacy-preserving approach for collaborative AML machine learning, facilitating secure data sharing across institutions and borders while preserving privacy and regulatory compliance. Leveraging Fully Homomorphic Encryption (FHE), computations are directly performed on encrypted data, ensuring the confidentiality of financial data. Notably, FHE over the Torus (TFHE) was integrated with graph-based machine learning using Zama Concrete ML. The research contributes two key privacy-preserving pipelines. First, the development of a privacy-preserving Graph Neural Network (GNN) pipeline was explored. Optimization techniques like quantization and pruning were used to render the GNN FHE-compatible. Second, a privacy-preserving graph-based XGBoost pipeline leveraging Graph Feature Preprocessor (GFP) was successfully developed. Experiments demonstrated strong predictive performance, with the XGBoost model consistently achieving over 99% accuracy, F1-score, precision, and recall on the balanced AML dataset in both unencrypted and FHE-encrypted inference settings. On the imbalanced dataset, the incorporation of graph-based features improved the F1-score by 8%. The research highlights the need to balance the trade-off between privacy and computational efficiency.","url_abs":"https://arxiv.org/abs/2411.02926v2","url_pdf":"https://arxiv.org/pdf/2411.02926v2.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":"privacy-preserving-graph-based-machine","repo_url":"https://github.com/fabecode/GraphML-FHE","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"computational-efficiency","task_name":"Computational Efficiency"},{"task_slug":"graph-neural-network","task_name":"Graph Neural Network"},{"task_slug":"privacy-preserving","task_name":"Privacy Preserving"},{"task_slug":"quantization","task_name":"Quantization"}],"methods":[{"method_slug":"graph-neural-network","method_name":"Graph Neural Network"},{"method_slug":"pruning","method_name":"Pruning"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2411.02926","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2411.02926"}},"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/fabecode/GraphML-FHE","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":10},"by_repo_kind":{"official":{"samples":10,"ran":0,"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":"5eea9480b7d2c8c5","entry":"evaluate_homo","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/train_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/train_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5eea9480b7d2c8c5"}},{"code_sha256_prefix":"e4225f0d81ea9f84","entry":"extract_param","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/train_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/train_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e4225f0d81ea9f84"}},{"code_sha256_prefix":"3c9131016f155a74","entry":"generate_enriched_df_colnames","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gfp_xgb_fhe_pipeline/gfp.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gfp_xgb_fhe_pipeline/gfp.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3c9131016f155a74"}},{"code_sha256_prefix":"c8cbc17dea127fea","entry":"get_dict_val","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gfp_xgb_fhe_pipeline/format_kaggle_files.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gfp_xgb_fhe_pipeline/format_kaggle_files.py","link_basis":"plan_row","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c8cbc17dea127fea"}},{"code_sha256_prefix":"7a4b3977f9af49ca","entry":"get_loaders","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/train_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/train_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7a4b3977f9af49ca"}},{"code_sha256_prefix":"26cb49da0831ef34","entry":"ports","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/data_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/data_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"26cb49da0831ef34"}},{"code_sha256_prefix":"f1bd775590b8f468","entry":"split_data","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gfp_xgb_fhe_pipeline/data_split.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gfp_xgb_fhe_pipeline/data_split.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f1bd775590b8f468"}},{"code_sha256_prefix":"6f73ce4a15dc2e3c","entry":"split_data_with_val","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gfp_xgb_fhe_pipeline/data_split.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gfp_xgb_fhe_pipeline/data_split.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"6f73ce4a15dc2e3c"}},{"code_sha256_prefix":"3dfdbb7a7e0eace8","entry":"to_adj_edges_with_times","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/data_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/data_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3dfdbb7a7e0eace8"}},{"code_sha256_prefix":"2b6032f43601d891","entry":"to_adj_nodes_with_times","repo":"fabecode/GraphML-FHE","repo_kind":"official","path":"gnn_fhe_pipeline/data_util.py","file_url":"https://github.com/fabecode/GraphML-FHE/blob/HEAD/gnn_fhe_pipeline/data_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2b6032f43601d891"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}