Duolingo replaces rule-based ad logic with BigQuery ML and XGBoost, driving tens of millions in annual revenue
Duolingo's ad decision logic had become too complex to optimize after years of A/B testing created a tangled web of rules fragmented across systems, making the codebase difficult to reason about, improve, or maintain without introducing bugs and tech debt.
Two early ML iteration problems emerged: a dedicated holdout group for retraining introduced data drift by training on a different learner population than the one served by the model, and the initial model objective of predicting baseline subscription probability cannibalized revenue from other channels rather than growing it.
The ML model delivered millions of dollars in incremental annual revenue in its first few months, grew to tens of millions per year after refinement, and now drives roughly a quarter of Duolingo's year-over-year revenue growth.
Frequently asked questions
What did this team achieve with this AI workflow?
The ML model delivered millions of dollars in incremental annual revenue in its first few months, grew to tens of millions per year after refinement, and now drives roughly a quarter of Duolingo's year-over-year reven…
What tools did this team use?
dbt, BigQuery ML, XGBoost, dbt_ml.
What results were reported?
Incremental annual revenue (initial months): millions of dollars in incremental annual revenue; Incremental annual revenue (after refinement): tens of millions per year; Share of year-over-year revenue growth: roughly a quarter of our year-over-year revenue growth; Daily active user growth: substantial daily active user (DAU) wins (source-reported, not independently verified).
What failed first in this deployment?
Two early ML iteration problems emerged: a dedicated holdout group for retraining introduced data drift by training on a different learner population than the one served by the model, and the initial model objective o…
How is this marketing ops AI workflow structured?
User completes learning session → Dbt processes fresh data → BigQuery ML trains and evaluates model → SQL inference decides ad type → Decision stored in prod database → Random exploration for retraining → XGBoost contextual bandit uplift.