Signature Verification for Fraud Detection
TL;DR: Siamese CNN trained on handwritten signatures deployed at Vakifbank R&D for cheque fraud detection — 95% accuracy on internal data, 88% on the public CEDAR benchmark.
Overview
Handwritten signature verification is a key fraud prevention mechanism in banking: detecting whether a signature on a cheque or document matches the account holder’s reference signature. Classical rule-based systems are brittle under natural signing variability; the challenge is distinguishing genuine intra-personal variation from skilled forgeries.
This project, completed as a part-time ML engineer in Vakifbank’s R&D and Innovation department, delivered a deep learning–based signature verification system from data pipeline through deployment evaluation.
Approach
Model: A Siamese Convolutional Neural Network — two weight-sharing CNN branches that each encode a signature image into a fixed-length embedding, with a contrastive loss that pulls genuine-pair embeddings together and pushes forged-pair embeddings apart.
Why Siamese networks: Traditional classifiers require retraining when a new account holder is enrolled. A Siamese network learns a similarity metric that generalizes to previously unseen signers at test time, making it practical for a banking system where the customer base grows continuously.
Pipeline:
- Preprocessing: binarization, noise removal, and size normalization of raw signature scans
- Training: contrastive loss with margin, Adam optimizer
- Inference: threshold on embedding distance to classify genuine vs. forged
Results
| Dataset | Accuracy |
|---|---|
| Vakifbank internal test set | 95% |
| CEDAR public benchmark | 88% |
The CEDAR benchmark (Cherry, Eaddy, and Dupont Advanced Research) is a standard public dataset for offline handwritten signature verification, providing an independent measure of generalization beyond the bank’s own data distribution.
Skills Applied
Python · TensorFlow 2 · Keras · Convolutional Neural Networks · Siamese Networks · Contrastive Learning · Image Preprocessing · OpenCV