Back to projects
3 min read

FinCheck

Confidence-Aware Cheque Validation

FinCheck started from a simple question: what should a system do when it is not confident about its prediction?

For something like a cheque, getting an answer wrong can be much worse than refusing to give one. So instead of treating handwritten digit recognition as a normal classification problem, I built FinCheck around the idea of confidence and risk.

The system takes handwritten digits from financial documents, processes them through multiple CNN models, and looks beyond just the predicted class. It considers confidence, entropy, stability, FAR and FRR to decide whether a prediction is safe enough to accept. When the result is ambiguous, the system can reject it rather than blindly guessing.

I also wanted to understand how different model compression techniques behave when the data becomes more difficult. I experimented with knowledge distillation, pruning, quantization, low-rank factorization and weight sharing, comparing their behavior on MNIST and CIFAR. MNIST gives me a controlled environment for digit recognition, while CIFAR helps expose how these compressed models behave when the visual distribution becomes more complex.

One of the more interesting parts of the project was the Evolutionary Risk Optimization system. Instead of simply fixing the balance between FAR and FRR at something like 0.5 / 0.5, I experimented with learning the risk-weighting parameter using an evolutionary approach. The population evolves through selection, crossover, mutation and elitism until the risk function stabilizes.

The project also includes stress testing with blur, rotation, noise and erasing to simulate some of the imperfections that can appear in real scanned or photographed documents.

On the engineering side, I built the backend with FastAPI and PyTorch, using OpenCV for preprocessing and MongoDB for experiment logging. The frontend is built with Next.js, TypeScript and Tailwind CSS, where the results, model comparisons and evaluation metrics can be explored interactively.

What I like most about FinCheck is that it sits somewhere between machine learning research and backend engineering. It isn’t just about making a model predict a digit. It is about asking whether that prediction should actually be trusted.

The main idea I took away from the project is simple:

A good system should know when it doesn’t know.