KYC pass rates were falling, and nobody knew why
A fintech company's KYC (Know Your Customer) pass rate had been declining substantially over a recent 6-month period. The verification process required users to pass both a document check and a facial similarity check to be marked as "clear." But the pass rate was dropping month-over-month, and the team had no clear diagnosis.
The raw data was available (document verification reports and facial similarity reports for thousands of KYC attempts), but no one had connected the dots between the two datasets to isolate exactly where and why failures were accelerating.
Without a root cause, the team was stuck: they couldn't prioritize a fix, couldn't estimate the impact, and couldn't communicate the problem to leadership with any confidence.
Six layers deep: systematic elimination using SQL
Rather than eyeballing dashboards or running surface-level queries, I treated this as a structured investigation with a clear methodology: start broad, narrow systematically, prove each hypothesis with data before moving to the next layer.
Step 1: Merge the datasets. I used an inner join on user_id to combine document and facial check reports into a single view, giving me 5,830 total KYC attempts to work with.
Step 2: Isolate failures. Filtered to only failed cases (where either document or facial result was not "clear"), surfacing 1,677 failure records.
Step 3: Document vs. facial: which is failing? Compared month-over-month failure rates for each check type independently. The result was stark: facial check failures were relatively stable (6 → 19 over 6 months), while document check failures exploded (7 → 748). The hypothesis was clear: document checks were the problem.
Step 4: Drill into document check variables. The document check API had multiple sub-checks: police_record, data_comparison, data_consistency, data_validation, visual_authenticity, image_integrity, and compromised_document. I tested each variable independently against the "consider" (failure) state.
Step 5: Isolate the culprit. Image_integrity was responsible for 81% of document check failures, and it was growing exponentially from September to October.
Step 6: Break down image_integrity. Drilled into its sub-components: supported_document, image_quality, conclusive_document_quality, and colour_picture. Image_quality was the dominant failure driver, followed by colour_picture.
Root cause identified: KYC pass rates were declining because users were submitting low-quality document images (blurry, poorly lit, low resolution), and the system had zero pre-validation. The problem wasn't fraud or process failure. It was a UX gap.
Two product interventions: prevention and education
Solution 1: Real-time image quality API. Introduce a pre-validation step before the KYC check runs. A lightweight API call that checks for resolution, blur, luminance, and bright spots, returning actionable feedback like "Image is too blurry, please retake" before the user even submits. Target: 50% reduction in image_integrity failures.
Solution 2: Sample document images. Show users an example of what a high-quality document upload looks like for the specific ID type they've selected. A simple visual reference that sets quality expectations upfront. Target: 20% increase in overall KYC pass rate.
Both solutions were designed to be validated via A/B testing: treatment groups seeing real-time quality feedback vs. control groups with the existing flow.
A look inside the full analysis
Here's a preview of what's covered in the complete breakdown:
Want the full breakdown?
Get the complete root cause analysis with all SQL queries, visualisations, solution designs, and the reusable RCA framework.
- Full SQL investigation
- Data visualisations
- Solution wireframes
- A/B test design
- Reusable RCA framework
Trusted by 50+ product managers