Alarge direct-to-consumer fashion brand manages its programmatic advertising in-house — running campaigns directly on DSPs with a dedicated team handling strategy, pacing, and optimisation. Behind the campaigns sits a mature first-party data infrastructure: a loyalty programme, a website pixel capturing every customer interaction, and a CRM holding tens of millions of records. All of it unified through a CDP.
The infrastructure was sophisticated. The scoring it produced was not.
The brand’s CDP — Salesforce Data Cloud — includes a built-in propensity model. It ingests behavioural data and produces audience segments: high intent, medium intent, low intent. Each segment gets a flat bid multiplier applied in the DSP. The model is functional and it is where every brand of this size should start.
The problem is that the CDP’s propensity model is generic. It is trained on behavioural patterns aggregated across many brands and many customers, applying standard recency, frequency, and monetary value features. It does not know that for this specific brand, a customer who viewed the same style three times in seven days, searched by fit and size, and returned to the site within 48 hours without purchasing converts at six times the baseline ratewithin 72 hours. That behavioural sequence fingerprint is only visible in this brand’s own historical data. The generic model cannot see it.
The generic model also produces three coarse buckets. Everyone in the high-intent segment receives the same bid multiplier regardless of how their individual probability score differs within that bucket. A customer with an 80% purchase probability and one with a 55% purchase probability are treated identically. At the scale this brand operates — millions of active users scored daily — that imprecision has a material cost.
“The CDP told the DSP who to find. It did not tell it how much each person was actually worth.”
The DSP’s own optimisation algorithm — Koa AI on The Trade Desk — adjusts bids based on inventory-level factors: site, device, geography, ad format. It is good at those adjustments. What it cannot do is tell the brand how much a specific user is worth to bid on in the first place. That is a different question, and it requires a model trained on this brand’s own data to answer it.
Coral Tree built a custom conversion probability model trained exclusively on this brand’s data — five years of pixel behavioural events, CRM purchase history, and DSP campaign logs — unified into a single user-level dataset.
Identity Resolution.
Before any model can run, three data sources with three different user identifiers need to be connected. A single customer may exist across all three systems under different identifiers with no link between them.
- PixelCookie IDWebsite pixel.
Every customer interaction — page views, product views, search queries, add-to-cart, checkout initiations, return visits.
- CRMEmail addressCRM.
Tens of millions of customer records: purchase history, loyalty tier, category preferences, return behaviour.
- DSPDSP user IDDSP campaign logs.
Five years of impression, click, and conversion data tied to the DSP's own user identifier — a third, separate namespace.
The identity resolution layer stitches these together — mapping cookie IDs to email addresses when a user logs in, and syncing email addresses to DSP IDs through hashed email matching. The output is a unified user record with a complete behavioural history from all three sources joined together.
What the Model Learns.
Raw behavioural events are not useful model inputs directly. What the model learns from are the shapes of those behaviours and their relationships to each other — recency and session frequency, product page depth, search query patterns, checkout initiations without completion, return visit frequency, and category expansion from core to adjacent product lines.
Most importantly, the model learns the specific event sequence fingerprints that precede purchase for this brand’s customers — the combinations of behaviours in a specific order that consistently signal imminent conversion. These patterns are the most valuable signals in the system, and the ones no generic CDP model can produce, because they are only visible in behavioural history that belongs entirely to this brand.
Scoring, Tiering, and DSP Upload.
The model produces a continuous purchase probability score for every active user in the database on a daily schedule. Scores are bucketed into five tierswith bid multipliers calibrated to the brand’s actual margin and ROAS targets — not arbitrary thresholds, but boundaries set to reflect the real economic value of a user at each probability level.
Each tier becomes an audience list of hashed identifiers, uploaded to the DSP via API on a daily refresh cycle. From that point forward, every ad auction that fires for a known user applies the multiplier corresponding to their current tier.
Koa AI continues to run on top of this system, adjusting bids based on inventory-level factors within each tier. The two systems are complementary rather than competing: the custom model determines how much to bid for each person based on predicted purchase probability; Koa determines how to adjust that bid based on where and when the impression fires.
The Feedback Loop.
Every purchase outcome is captured and appended to the training dataset. The model retrains quarterly on the expanded dataset, incorporating the most recent behavioural and conversion data. A drift monitoring layer runs continuously between retraining cycles, tracking whether score distribution and prediction calibration remain stable — and triggering an unscheduled retraining run when significant drift is detected.
Each retraining cycle makes the next one sharper. The behavioural fingerprints the model learns become more specific as the dataset grows — and more current as the brand’s customer base and product range evolve.
+32% ROAS versus the CDP baseline — and a 3× conversion rate on the highest-scoring audience tier.
versus CDP baseline
top-tier users vs general audience
The ROAS improvement reflects what happens when bid allocation is driven by a model that understands this brand’s customers rather than a generic propensity score. The same budget, applied with greater precision, returns meaningfully more.
The 3× conversion rate on the top-scoring tier is the model’s predictive accuracy made visible. The customers it identifies as highest-probability buyers convert at three times the rate of the general audience — not because they were different customers, but because the model learned to identify them before they purchased rather than after.
Both outcomes improve over time. The model retrains quarterly on a dataset that grows with every campaign cycle, making future predictions more accurate as the behavioural history deepens.