A privacy-preserving Graph Neural Network framework for financial fraud detection using federated learning. FGI enables organizations to collaboratively train fraud detection models on their transaction graphs without sharing raw data.
- Federated Learning — Train models collaboratively across multiple clients with privacy-preserving aggregation
- Temporal Graph Neural Networks — Capture temporal dynamics in transaction networks with decay-aware convolutions
- Dual-Head Risk Scoring — Entity-level and transaction-level fraud risk assessment
- Privacy & Security — Differential privacy, secure aggregation, and cryptographic verification
- Feature Engineering — Node and edge feature extraction with temporal windowing and missing data handling
- Robust Aggregation — Multiple strategies including FedAvg, robust aggregation, and trust-weighted
- Model Validation — Canary generators, conformance checking, and model contract validation
- Score Calibration — Isotonic regression-based calibration with cold-start fallback
- Multiple Backends — In-process, HTTP, and gRPC communication options
- Compliance Ready — Built-in audit trails, SAR support, and serialization for regulatory requirements
pip install fgiOptional extras:
pip install fgi[grpc] # gRPC communication backend
pip install fgi[redis] # Redis-based embedding store
pip install fgi[scoring] # Score calibration with scikit-learn
pip install fgi[dev] # Development tools
pip install fgi[all] # Everythingimport torch
from torch_geometric.data import Data
from fgi import FGIConfig
from fgi.models import FGIModel
# Create configuration
config = FGIConfig()
# Initialize model
model = FGIModel(in_channels=10, config=config.model)
# Prepare graph data
x = torch.randn(100, 10)
edge_index = torch.randint(0, 100, (2, 500))
# Forward pass returns embeddings and risk scores
embeddings, entity_scores, txn_scores = model(x, edge_index)from fgi.federation import FederationServer, FederationClient
server = FederationServer(
num_rounds=config.federation.num_rounds,
min_clients=config.federation.min_clients,
)
client = FederationClient(client_id="client_1", model=model, config=config)FGI uses Pydantic-based configuration with sensible defaults:
from fgi import FGIConfig
config = FGIConfig.from_yaml("config.yaml")
config.to_yaml("config_output.yaml")MIT