Zipline for Recommendation Systems & Search

Rank on what your users did seconds ago

Pinterest, Etsy, and Alibaba have all published what in-session signals are worth. Zipline computes these signals from your event streams and serves them in milliseconds, with training data that matches serving exactly.

What fresh signals are worth

A user's most recent actions — what they just searched, viewed, or added to cart — say more about the next click than any profile computed overnight, and three teams have put numbers on it.

+11.0%
repin volume at Pinterest, after adding realtime action sequences to Homefeed ranking1
+4.17%
ads GMS at Etsy, from a one-hour window of in-session actions2
+10.92%
GMV at Taobao, from closing a roughly one-minute delay in behavior signals3

Pinterest also ran the ablation, and dropping the realtime module hurt their metrics about 3.5 times more than dropping the daily-batch user embedding it sat alongside1.

The new architectures run on raw events

For a decade rankers consumed hand-engineered features computed in batch, and the current generation consumes the event stream itself. Meta's generative recommenders, trained on raw action sequences, lifted online metrics 12.4% at billions of users4, and its ads models picked up another 2 to 4% in conversions once they moved from hand-engineered features to learned sequences5. Kuaishou went further still, and its OneRec now serves a quarter of all traffic at roughly a tenth of the old cascade's operating cost6.

YouTube runs Semantic IDs in its production ranker7, and the same shift has reached search, where Etsy's unified embeddings lifted search purchase rate 5.58% on live traffic8. Underneath all of them sits the same requirement: event histories reconstructed point-in-time correct for training, and those same aggregates or sequences served fresh within seconds.

Why a feature takes a quarter to ship

Training features are usually written against the warehouse, while serving features run in a separate stack against live traffic, so a feature proven offline has to be rebuilt by another team before it reaches production, and the two copies drift apart in between.

We built Chronon at Airbnb after measuring what that cost us, which was months per feature and ML engineers spending most of their time on data plumbing rather than modeling9. Even a faithful reimplementation goes stale, and Google's engineering guide tells of a ranking table that sat unrefreshed for six months, where updating it alone was worth 2% of installs10.

How Zipline works

The feature set behind numbers like these is a few dozen lines of Python, defined once, and there is no separate serving job to write. Setting accuracy=TEMPORAL tells this one definition to backfill point-in-time correct training data and serve online from your streams, so every training row sees only what was knowable at that moment. Because a single definition produces both sides, the online and offline values cannot drift apart, and consistency holds without a monitoring dashboard to chase it.
view_sequence = GroupBy(
    sources=[item_view_events],
    keys=["user_id"],
    aggregations=[
        Aggregation(operation=Operation.LAST_K(128), input_column="item_id"),
        Aggregation(operation=Operation.COUNT, input_column="add_to_cart",
                    windows=["1h", "1d", "30d"]),
    ],
    accuracy=TEMPORAL,
)
From these few lines you get:
<1 s P99 freshness
on the user's sequence, updating on every event
<10 ms P95 fetch
for the full model input at serving time
Point-in-time backfills
over years of history, past 100B rows
Branching & versioning
so changes get tested end-to-end without touching production

Test a ranking idea the day you have it

A new signal idea becomes a training-data column in hours. You define it, backfill it point-in-time across years of events, retrain, and read the offline lift. Offline evaluation won't guarantee the online result, but it does tell you which ideas are worth an A/B slot, and at Airbnb this loop took feature development from months down to about a day.

Sequences and embeddings are first-class

Last-K sequences feed transformer rankers directly, and embeddings are features like any other. When you later reach for Semantic IDs or a generative ranker, the training data and serving path you built here carry over unchanged.
"Chronon let us explore thousands of features offline, rank them with feature importance, and deploy only the winners - saving engineering time, infrastructure costs, and complexity while confidently delivering the best possible features for models responsible for driving $100M+ in growth and cost savings"
Christopher Settles, ex-Uber Michelangelo ML Platform Engineer

Proof

Depop, an Etsy company, runs Zipline for ranking features. Underneath is Chronon, the engine we built at Airbnb, which Stripe co-maintains today and teams like Netflix, Uber, and OpenAI run in production.
See how a POC works →
Try it on your own events
A POC takes two to four weeks on a single use case. You connect your sources, define the features, backfill training data, stand up serving, and shadow-score against your current ranker. Zipline runs in your own cloud on AWS, GCP, or Azure, fully air-gapped if you need it, and your data never leaves.

Sources

  1. 1. TransAct (Pinterest), KDD 2023
  2. 2. adSformers (Etsy), 2023
  3. 3. EdgeRec (Alibaba), CIKM 2020
  4. 4. HSTU (Meta), ICML 2024
  5. 5. Sequence learning for ads (Meta), 2024
  6. 6. OneRec (Kuaishou), 2025
  7. 7. Semantic IDs (YouTube), RecSys 2024
  8. 8. Unified embeddings (Etsy), 2023
  9. 9. Chronon, Airbnb's ML feature platform (Airbnb), 2024
  10. 10. Rules of ML, Rule #10 (Google)