This talk covers three major ML problems Stripe faced (and solved!) in building its credit card fraud detection system: choosing labels for fraud that work across all merchants, addressing class imbalance (legitimate charges greatly outnumber fraudulent ones), and performing counterfactual evaluation (to measure performance and obtain training data when the ML system is changing outcomes itself).
As a company that processes billions of dollars of transactions for hundreds of thousands of merchants across the globe, it is imperative for Stripe to protect our merchants from as much fraud as possible. However, machine learning models that fight credit card fraud have real-world implications for merchants when they get a decision wrong: false positives result in lost revenue and customer churn, while false negatives lead to the loss of the sold items.
In order to effectively protect our merchants from fraud, Stripe must constantly retrain our transaction fraud models and evaluate their performance in the real world. We have encountered three major challenges in this process:
In this talk, I’ll first focus on how Stripe decided on what labels to use for fraudulent charges. Then, I’ll talk about techniques we use to boost signal of fraudulent charges in the imbalanced data set (and thus improve overall model performance) during our training process. Once we’ve discussed how to handle labeling and class imbalance, I’ll dive into the most challenging aspect of our model pipeline: developing an effective counterfactual evaluation technique that we use to both gauge how well our model is doing in the real world, as well as generate unbiased training data. I’ll describe two different approaches we have employed for counterfactual evaluation, and why we ultimately decided that one of them was more effective.