← back to portfolio
case study · product ML · contextual bandits · simulation

Arc: Can a Dating App Stop Pretending to Predict Chemistry?

Profile content barely predicts who people will be attracted to, yet every major dating app ranks and matches on it. I designed Arc end-to-end on the opposite premise: don't predict chemistry, engineer the situations where it forms and learn from every outcome. Then I tested the matching engine and the business model in simulation.

13% → 43%
happy-date rate: swipe-leaderboard policy vs Arc's Thompson-sampling bandit (agent-based simulation)
0.86 → 0.27
Gini of attention received: the swipe "winner-take-all" market vs Arc's floor-based matching
3.98×
median LTV/CAC, 20k-member Monte Carlo; modeled single-city breakeven at month 9

/// the problem

In speed-dating data, machine learning trained on 100+ profile measures could not predict who would desire whom (Joel, Eastwick & Finkel, 2017). A meta-analysis of 43 datasets and 11,000+ couples found relationship quality is driven by dynamics that emerge through interaction, not partner traits (Joel et al., PNAS 2020). Swipe apps optimize the part of the problem that isn't predictable, and they concentrate attention on a few consensus-attractive profiles.

/// the product

/// testing the matching engine

I built a 300×300 agent simulation over 26 weeks. Ground-truth date outcomes have a small predictable component (idiosyncratic taste × features, format fit, a little consensus attractiveness) and a large irreducible one, calibrated to the attraction-unpredictability literature. Arc observes taste only noisily. Three policies, all respecting dealbreakers:

Happy-date rate by week for three matching policies
Fig 1. The bandit learns; the leaderboard wastes intros on competitive rejection.

The leaderboard does worse than random (13.1% vs 29.5%) because most of its intros end in rejection. The bandit reaches 42.7% without predicting chemistry at all: it learns which observable structure (floor, format fit) matters from revealed outcomes and allocates exploration accordingly.

Gini of intros and share of users with a happy date
Fig 2. Attention inequality (Gini 0.855 vs 0.271) and share of users with at least one happy date.

/// the business model

Revenue comes from Arc+ ($39/mo), a ~$6 referral per seated partner-venue date, and ticketed events. Member lifetimes are short on purpose (median ~5.5 months), because a couple leaving the app is the product working. The Monte Carlo draws lifetimes from a Weibull, usage from venue and event distributions, and CAC from the go-to-market channel mix.

LTV/CAC Monte Carlo
Fig 3. LTV/CAC and lifetime contribution across 20,000 simulated members. Median LTV $253; P(LTV/CAC > 3) = 62%; payback ~1.3 months.

The venue-referral line is what makes short lifetimes pay: it earns on dates rather than time-on-app, so the incentive to help people leave holds up in the P&L. Sensitivity analysis sets two guardrails: CAC under ~$85 and at least 1.5 seated dates per member per month.

Single-city P&L
Fig 4. Single-city P&L, mid case: breakeven around month 9.

/// caveats

These are modeled scenarios, not observations. The size of the bandit's advantage depends on the assumed share of predictable variance; the ordering (bandit > random > leaderboard) held across seeds. Funnel rates and pricing are hypotheses to replace with beta-cohort data, and the code is parameterized for that.

/// stack

Python NumPy Matplotlib Thompson sampling Bayesian linear models active learning Monte Carlo agent-based simulation HTML/CSS/JS prototyping Chart.js