Skip to content
forked from IBM/Multi-GNN

Multi-GNN architectures for Anti-Money Laundering.

License

Notifications You must be signed in to change notification settings

fabecode/GNN-FHE

 
 

Repository files navigation

GNN-FHE

This repository stores the code for my Final Year Project. It is an adaptation of IBM's Multi-GNN code base. Fully Homomorphic Encryption (FHE) using Concrete-ML is applied to the base GIN model.

It contains all models and adaptations needed to run Multi-GNN for Anti-Money Laundering. The repository consists of four Graph Neural Network model classes (GIN, GAT, PNA, RGCN) and the below-described model adaptations utilized for financial crime detection in Egressy et al.. Note that this repository solely focuses on the Anti-Money Laundering use case.

Setup

To use the repository, you first need to install the conda environment via

conda env create -f env.yml python=3.9

Note that concrete-ml requires torch 1.13.1 to work.

Then, the data needed for the experiments can be found on Kaggle. To use this data with the provided training scripts, you first need to perform a pre-processing step:

python format_kaggle_files.py /path/to/kaggle-file/

Make sure to change the filepath at the beginning of the data_loading.py file to wherever you stored your formatted csv file generated by the pre-processing step.

Usage

To run the experiments you need to run the main.py function and specify any arguments you want to use. There are two required arguments, namely --data and --model.

For the --data argument, specify the file name, e.g --data Small_HI. The --model parameter should be set to any of the model classed that are available, i.e. to one of --model [gin, gin_fhe gat, rgcn, pna]. Thus, to run a standard GNN, you need to run, e.g.:

python main.py --data HI-Small_Formatted --model gin

To run a GNN on FHE, add the --fhe argument, e.g.:

python main.py --data HI-Small_Formatted --model gin_fhe --fhe

Then you can add different adaptations to the models by selecting the respective arguments from:

Column 1 Column 2
--emlps Edge updates via MLPs
--reverse_mp Reverse Message Passing
--ego Ego ID's to the center nodes
--ports Port Numberings for edges
Thus, to run Multi-GIN with edge updates, you would run the following command:
python main.py --data Small_HI --model gin --emlps --reverse_mp --ego --ports

Licence

Apache License Version 2.0, January 2004

About

Multi-GNN architectures for Anti-Money Laundering.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%