Ad Revenue Optimization
“Which ad slot maximizes revenue without increasing churn?”
Book a demo and get a free trial of the full platform: research agent, fine-tune capabilities, and forward-deployed engineer support.
By submitting, you accept the Terms and Privacy Policy.

Loved by data scientists, ML engineers & CXOs at

A real-world example
Which ad slot maximizes revenue without increasing churn?
Ad-supported streaming tiers must balance revenue per viewer against ad fatigue that drives cancellations. Too many ads and subscribers downgrade or leave; too few and revenue per viewer drops. For a platform with 15M ad-supported subscribers generating $8 ARPU, a 10% improvement in ad load optimization adds $144M in annual revenue without increasing churn.
Quick answer
Graph neural networks optimize ad placement and frequency per subscriber by modeling the revenue-churn tradeoff individually. The model learns each subscriber's ad tolerance based on viewing patterns, engagement depth, and content type, enabling platforms to show 4 ads to tolerant viewers and 1 ad to at-risk subscribers. For a platform with 15M ad-supported subscribers, this optimization adds $144M in annual revenue without increasing churn.
Approaches compared
4 ways to solve this problem
1. Fixed ad load rules (X ads per hour)
Set a uniform number of ads per content hour or per session, regardless of subscriber behavior. The simplest approach.
Best for
Easy to implement and manage. Ensures consistent advertiser delivery commitments.
Watch out for
Treats all subscribers the same. Some subscribers abandon after 2 ads while others tolerate 5. A uniform load either leaves revenue on the table (too few ads for tolerant viewers) or drives churn (too many ads for sensitive viewers).
2. Segment-based ad capping
Define subscriber segments (heavy viewer, light viewer, high-risk, etc.) and set different ad load rules per segment.
Best for
Better than uniform rules. Captures the broad differences between subscriber types.
Watch out for
Segments are coarse. Within 'light viewers,' some are light because they are disengaging (ad-sensitive) and others are light because they only watch one show per week (ad-tolerant). Same segment, opposite ad strategies needed.
3. A/B testing ad loads
Run experiments with different ad loads across subscriber cohorts and measure the impact on revenue and retention.
Best for
Ground-truth measurement of the revenue-churn tradeoff. Good for validating model predictions.
Watch out for
Slow -- each test takes 4-8 weeks for meaningful retention signals. Can only test a few load levels at a time. Cannot personalize at the individual subscriber level.
4. KumoRFM (relational graph ML)
Connect subscribers, ad impressions, content, and watch sessions into a graph that models the revenue-churn tradeoff per subscriber. The GNN predicts optimal ad slots per session, balancing incremental revenue against individual churn risk.
Best for
Per-subscriber optimization that maximizes total revenue across the base. Learns that SUB303 tolerates 4 ads per session while SUB302 should see at most 1. Captures how ad tolerance varies by content type and viewing context.
Watch out for
Requires subscriber-level ad interaction data with session completion signals. Churn outcome data takes 30-60 days to materialize, so the model needs historical depth.
Key metric: Per-subscriber ad load optimization adds $144M in annual revenue for a 15M ad-supported subscriber base without increasing churn rates.
Why relational data changes the answer
Ad tolerance is not a subscriber attribute -- it is a function of the subscriber, the content, the session context, and the cumulative ad exposure this week. Subscriber SUB302 tolerates a pre-roll ad during a movie they are excited about, but abandons if shown a mid-roll during a casual browse session. The same subscriber's tolerance drops further after seeing 6 ads across sessions this week. This interaction between subscriber, content, session, and cumulative exposure lives across four tables. A flat model that predicts ad tolerance from subscriber-level features misses all of this context.
Relational models connect subscribers to their sessions, sessions to content, and sessions to ad impressions, learning the full context of ad tolerance. They discover that the revenue-optimal strategy is not to find the 'right' ad load per subscriber, but the right ad load per subscriber-content-session combination. On the RelBench benchmark, relational models score 76.71 vs 62.44 for single-table approaches. For ad revenue optimization, that accuracy gap means the difference between a $144M revenue gain and a strategy that either leaves money on the table or drives valuable subscribers to cancel.
Uniform ad loads are like a restaurant that serves the same portion size to everyone regardless of appetite. Some diners leave hungry (revenue left on the table), others leave feeling stuffed and never return (churn). Graph-based ad optimization reads the full dining context -- the diner's history, what they ordered tonight, how long they have been at the table -- and adjusts the portion (ad load) accordingly.
How KumoRFM solves this
Graph-powered intelligence for media platforms
Kumo connects subscribers, ad impressions, content, and watch sessions into a graph that models the revenue-churn tradeoff per subscriber. The GNN learns each subscriber's ad tolerance based on viewing patterns, engagement depth, content type, and historical responses to ad load changes. PQL predicts optimal ad slots per session, balancing incremental revenue against churn risk for each individual subscriber.
From data to predictions
See the full pipeline in action
Connect your tables, write a PQL query, and get predictions with built-in explainability — all in minutes, not months.
Your data
The relational tables Kumo learns from
SUBSCRIBERS
| subscriber_id | plan | ad_tier | avg_session_min |
|---|---|---|---|
| SUB301 | Ad-supported | Standard | 55 |
| SUB302 | Ad-supported | Light | 32 |
| SUB303 | Ad-supported | Standard | 78 |
AD_IMPRESSIONS
| impression_id | subscriber_id | ad_slot | revenue | timestamp |
|---|---|---|---|---|
| AI501 | SUB301 | Pre-roll | $0.045 | 2025-03-01 20:00 |
| AI502 | SUB301 | Mid-roll-1 | $0.038 | 2025-03-01 20:15 |
| AI503 | SUB302 | Pre-roll | $0.042 | 2025-03-01 14:30 |
CONTENT
| content_id | type | genre | duration_min |
|---|---|---|---|
| SER401 | Series | Drama | 48 |
| MOV501 | Movie | Comedy | 95 |
WATCH_SESSIONS
| session_id | subscriber_id | content_id | ads_shown | completed |
|---|---|---|---|---|
| WS701 | SUB301 | SER401 | 3 | True |
| WS702 | SUB302 | MOV501 | 2 | False |
| WS703 | SUB303 | SER401 | 4 | True |
Write your PQL query
Describe what to predict in 2–3 lines — Kumo handles the rest
PREDICT SUM(AD_IMPRESSIONS.revenue, 0, 1, days) FOR EACH SUBSCRIBERS.subscriber_id WHERE BOOL(SUBSCRIBERS.is_cancelled, 0, 30, days) = False
Prediction output
Every entity gets a score, updated continuously
| SUBSCRIBER_ID | OPTIMAL_ADS_PER_SESSION | PREDICTED_DAILY_REV | CHURN_RISK |
|---|---|---|---|
| SUB301 | 3 | $0.128 | Low |
| SUB302 | 1 | $0.042 | High |
| SUB303 | 4 | $0.172 | Low |
Understand why
Every prediction includes feature attributions — no black boxes
Subscriber SUB302 -- Ad-supported Light tier
Predicted: Optimal: 1 ad per session ($0.042 daily, churn risk: High)
Top contributing features
Session abandonment after 2+ ads
68% rate
33% attribution
Average session duration
32 min
24% attribution
Days since plan downgrade consideration
12 days
19% attribution
Content type engagement depth
Low
14% attribution
Similar subscribers' churn rate at 2+ ads
22%
10% attribution
Feature attributions are computed automatically for every prediction. No separate tooling required. Learn more about Kumo explainability
PQL Documentation
Learn the Predictive Query Language — SQL-like syntax for defining any prediction task in 2–3 lines.
Python SDK
Integrate Kumo predictions into your pipelines. Train, evaluate, and deploy models programmatically.
Explainability Docs
Understand feature attributions, model evaluation metrics, and how to build trust with stakeholders.
Frequently asked questions
Common questions about ad revenue optimization
How do you optimize ad revenue on a streaming platform without increasing churn?
Model the revenue-churn tradeoff at the individual subscriber level rather than applying uniform ad load rules. Graph models learn each subscriber's ad tolerance based on viewing patterns, session context, and content type, enabling per-subscriber ad load decisions that maximize total revenue without pushing sensitive subscribers toward cancellation.
How many ads can you show on a streaming platform before subscribers churn?
There is no single answer -- it varies by subscriber. Heavy, engaged viewers tolerate 4-5 ads per session with minimal churn risk. Light viewers with declining engagement may abandon after 1-2 ads. The key is predicting tolerance at the individual level rather than setting a platform-wide cap.
How do you balance ad revenue and subscriber retention?
Use a model that explicitly predicts both incremental revenue and incremental churn risk for each additional ad shown per subscriber-session. The optimal ad load maximizes revenue subject to a churn-risk constraint. Graph models handle this naturally because they see the full subscriber behavioral context.
What data do you need for ad revenue optimization?
Subscriber profiles, session-level viewing data with ad impression logs, session completion signals (did the subscriber finish the content or abandon), and churn outcome data (30-60 day lookback). Content metadata helps the model learn that ad tolerance varies by content type and genre.
What is the revenue impact of per-subscriber ad optimization?
A platform with 15M ad-supported subscribers at $8 ARPU adds $144M in annual revenue by optimizing ad load individually. The gain comes from two sources: increasing ad load for tolerant subscribers (50-60% of the base) and preventing churn-driven revenue loss from over-exposing sensitive subscribers.
Bottom line: A platform with 15M ad-supported subscribers adds $144M in annual revenue by optimizing ad load per subscriber. Kumo balances revenue against individual churn risk, showing some subscribers tolerate 4 ads while others leave after 2.
Related use cases
Explore more media & entertainment use cases
Topics covered
One Platform. One Model. Infinite Predictions.
KumoRFM
Relational Foundation Model
Turn structured relational data into predictions in seconds. KumoRFM delivers zero-shot predictions that rival months of traditional data science. No training, feature engineering, or infrastructure required. Just connect your data and start predicting.
For critical use cases, fine-tune KumoRFM on your data using the Kumo platform and Research Agent for 30%+ higher accuracy than traditional models.
Book a demo and get a free trial of the full platform: research agent, fine-tune capabilities, and forward-deployed engineer support.




