A federated learning system for phishing email detection, aggregating client model updates without transmitting raw data.
This one started as my graduation project, built around a single constraint: catch phishing emails without anyone's inbox ever leaving their device. Most phishing filters I looked at wanted the opposite: pool everyone's data centrally, train one big model, and hope people trust you with their inboxes along the way.
Each client trains locally on-device, computing only weight deltas, raw emails never leave the browser.
A FastAPI aggregation server runs FedAvg across client updates, weighted by local sample count.
The updated global model ships back down, and the Chrome extension flags phishing emails in real time.

Total flags, false positives, and false negatives tracked live across every connected client.
Detection Accuracy
F1 Score
Prediction Latency
Fine-tuned DistilBERT for phishing email detection, achieving 96.3% accuracy and 0.963 F1 on a held-out test set.
Implemented FedAvg in a custom FastAPI aggregation server, weighting client updates by local sample count and handling non-IID data distributions across clients.
Designed a hybrid threshold/timeout round-scheduling strategy to balance aggregation latency against client availability, with SQLAlchemy-backed persistence for round state and weight updates.
Engineered the on-device training loop to compute and transmit weight deltas only, eliminating raw data transmission and validating correctness with a pytest integration suite.
Built a Gmail-integrated Chrome MV3 extension with an admin dashboard, giving users live phishing warnings and letting them flag/correct predictions to feed local retraining.