Define Ultra success metrics and detect suspicious transactions
RevolutData Scientist · Technical ScreenLast updated
This question evaluates a data scientist's ability to define primary, diagnostic, and guardrail metrics for a product launch and to design rule-based suspicious-transaction detection using available schema, emphasizing metric definition, defensible proxy selection, SQL-based data modeling, and financial-crime domain knowledge.
You work on a fintech product with these existing tables (UTC timestamps). You may only use these tables/columns; if a metric cannot be measured directly, you must propose a defensible proxy using available data.
Tables
users
user_idBIGINT PRIMARY KEYcreate_dateTIMESTAMP- (optional if present)
countryVARCHAR
transactions
transaction_idBIGINT PRIMARY KEYuser_idBIGINT REFERENCESusers(user_id)transaction_timeTIMESTAMPproductVARCHAR -- includes values like'crypto', and may include'ultra'if the plan is represented as a productamount_gbpNUMERIC(18,2)statusVARCHAR --'completed'/'declined'- (optional if present)
ip_countryVARCHAR
activity
user_idBIGINT REFERENCESusers(user_id)event_timeTIMESTAMPproductVARCHAR -- may include'ultra'event_typeVARCHAR --'view'/'click'
Scenario A: Ultra subscription launch (open-ended)
A new Ultra subscription plan launches. In a 1-month evaluation window after launch:
- Define what “success” means with a primary metric, diagnostic metrics, and guardrail metrics.
- Describe key risks to validity (e.g., seasonality, marketing campaigns, selection bias) and how you’d mitigate them.
- Write example SQL (or pseudo-SQL) to compute your chosen metrics using only the tables above.
Scenario B: FinCrime—identify suspicious transactions (open-ended)
You partner with the Financial Crime team to flag suspicious behavior.
- Propose a rule-based detection approach that turns “suspicious” into actionable, testable rules using available data.
- Write example SQL (or pseudo-SQL) that outputs suspicious entities.
Required output for Scenario B (choose one and state which):
- A list of suspicious
user_ids with arisk_scoreand the reasons/rules triggered, or - A list of suspicious
transaction_ids with flags/reasons.
Call out false-positive/false-negative tradeoffs and how you would evaluate and iterate.
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.