Biometric authentication and alternative credit scoring at scale (GDP Labs)
A major Indonesian bank needed face-based identity checks that could handle national login peaks. It also wanted to assess borrowers with little credit bureau history for conventional scoring. Moreover, Indonesia’s regulator, OJK, requires deployed credit models to document how decisions work and whether they treat groups fairly.
Attackers use printed photos, replayed videos, and 3D masks to defeat face-based identity checks. Detection had to run on CPUs within strict response-time limits. Moreover, the service handled more than 1 million requests a day. The credit model also had to explain its decisions to OJK auditors without specialist knowledge. Therefore, it needed records of fairness across demographic groups.
I deployed MobileNet under Intel OpenVINO and optimised it for CPU inference. The service achieved 90% verification accuracy at 99.99% uptime through login peaks of 1M+ daily inferences. Then I designed JMeter tests for synchronous and asynchronous request loads. These covered requests that wait for responses and requests that allow other work to continue. These tests established production response-time benchmarks and found bottlenecks before deployment.
Moreover, I tested modules that detect fake faces and ask users to prove they are present. Both modules faced synchronous and asynchronous request loads.
I tracked all credit scoring experiments with MLflow. This recorded model settings, registered models, and versioned metrics. Then I shipped a scorecard that OJK auditors could interpret. I converted logistic regression, which estimates outcome probabilities, into a points-based format. Moreover, I documented SHAP feature importance for the fairness review. SHAP estimates how each input contributes to a model’s result.
The model used transaction patterns, behaviour records, and device signals. These supported borrowers with little credit history who had previously lacked access to formal credit markets. Then I validated the model against a 6-month window monitored by the client. Compared with the prior baseline, loan approval efficiency increased by 35%. Moreover, the default rate fell by 25%.
I set standards for repeatable results through fixed random seeds, pinned configurations, and benchmarks against earlier versions. These standards were adopted across 5+ products. Moreover, I built a scalable serverless clustering API on AWS using Kubernetes, scikit-learn, and MLflow. It grouped data for an analytics platform. The client reported a 40% increase in business leads.
I also set internal code-review standards and standards for automated ML pipelines. These reduced friction when teams moved research into production across the company.
I led an HR analytics project using PrestoDB and Metabase. This improved productivity measurement by 50% for the internal operations team.
The credit system expanded access for borrowers with too little bureau history while meeting OJK requirements. Moreover, the face-checking service protected millions of users from fake-face attacks at 99.99% availability. This matched the service availability commitment of a Tier 4 data centre for ML inference.