Where this sits in the analyst track
Sessions 1 to 3 built the estate, the conformed orders and the identity gate. Session 4 wrote the per-minute event spec for Pasar Live as a contract between eight teams. Tonight is the first session that turns that contract into a number somebody will be judged on, which is exactly when definitions start to matter. All Pasar Live data on this page is constructed: the marketplace, the channel, the hosts and the eight streams are invented to teach the shape of the problem, and your numbers will differ. The platform's own four stages, and every livestream method that reads a room minute by minute (survival curves, change-points, fixed effects, SHAP, host clustering, difference-in-differences), are taught in the live commerce analytics course, starting from the stream as data. This page takes the enabler's side: many brands' streams on one scorecard, two host types, and a comparison fair enough to sell.
★ What you walk out with tonight. A stage dictionary where every ratio names its numerator and its denominator in one place, a pooled host scorecard in pandas and in SQL that match, and the sentence that ends most scorecard arguments before they start: "this is the ratio of sums, so it answers the channel's question, not the typical stream's".
Five ratios, five denominators
6 min liveA stage metric is two counts and a slash. The slash is where the arguments live, because the denominator decides whose work is being graded. Pasar Live's naming, constructed for this story, writes five ratios plus the North Star, and each one says out loud what it divides by. Underneath there are only four distinct counts: Hold, Love and the North Star all divide by room entries.
LiveThe stage definitions, each with its denominator3 min▶
| Stage | Numerator / denominator | The question it answers | Whose work it grades |
|---|---|---|---|
| Stop | room entries / live card impressions | Did the cover pull people in from the feed? | Traffic ops, the brand's set-up, the face on the card |
| Hold | completers / room entries | Did the room keep the people it got? | The host, minute by minute |
| Love | replays / room entries | Did anyone come back or watch the replay? | The host and the content team |
| Buy, click rate | product card clicks / product card impressions | When a card was shown, was it tapped? | The host's ask, the assortment |
| Buy, click to order | orders / product card clicks | Once tapped, did it sell? | Price, stock, the product page |
| North Star | orders / room entries | Of the people in the room, how many bought? | The whole room, with reach taken out |
Buy is two ratios because a card can fail in two places: nobody taps it, or people tap it and do not buy. Its first denominator is not entries. Product card impressions fire every time a card is shown in the room, so a host who shows the card often gets more chances to be tapped, and the click rate grades what happened on each showing. Add to cart sits in the minute table too, and stays a diagnostic rather than a stage: it tells you where between the click and the order the sale died.
LiveHold's constructed rule, and why it has to be one rule2 min▶
A completer, on Pasar Live, is a viewer who stays past minute 10. The rule is constructed for this story, and so is every rule like it on a real channel: somebody picked the minute. Hold then divides completers by room entries, every person who walked in, including the ones who left in the first ten seconds. That is the point of the ratio. Divide by the viewers still present at minute 10 instead and Hold becomes close to 100 percent by construction, because you have counted only the survivors.
The enabler's twist is that Serai scores many brands' streams on one sheet, and their streams do not look alike. A 30-minute flash sale and a three-hour brand night both meet the same minute-10 line, and that is fine as long as it is the same line for every stream and the sheet says so. The moment one brand team counts "stayed past 5 minutes" because its streams are short, Hold stops being comparable across brands and nobody can see it. Write the rule once, in the stage dictionary, and let every report import it.
Self-studyWhy not one denominator for everything3 min▶
A single "orders per live card impression" would be tidy and would grade the wrong people. It folds Stop into the result, so the host with the famous face wins before saying a word. That number is fair for the traffic team, who own the impression, and unfair for a brand's product expert, who owns the room.
Each stage divides by the count the previous team handed over. Traffic hands over impressions, the card turns them into entries, the host turns entries into completers and clicks, the product page turns clicks into orders. A denominator is a handover. Choosing one is choosing which team's output you start counting from, which is why the stage dictionary is a cross-team document before it is code.
Two brand teams, two Holds, one stream shape (constructed). In Serai's first month on Pasar Live, one brand team divided completers by room entries and another divided them by the viewers present at minute 10. The second team's host looked like the best on the channel for three weeks. Nothing in the dashboard was wrong except the slash, and the fix was not a better chart but one line in a shared dictionary. The case is constructed; the failure is the most common one in any multi-team funnel.
Ratio of sums or mean of ratios
6 min liveAsk "what is Pasar Live's conversion" of the constructed eight-stream table and you can get two honest answers from the same rows. Add up all orders and divide by all entries: 437 / 45,720 = 0.96 percent. Or compute each stream's conversion and average the eight: 1.71 percent. Neither is a mistake. Printing either one without saying which is.
LiveTwo numbers, two questions3 min▶
- Ratio of sums, 0.96 percent, answers the channel's question: of every person who walked into a Pasar Live room Serai ran, how many ordered? It weights every stream by its entries, so the four platform rooms, holding 38,830 of the 45,720 entries, set most of the answer. Finance, the brand's quarterly review and anything that multiplies by traffic want this one.
- Mean of ratios, 1.71 percent, answers the typical stream's question: if you pick one of these eight streams, how does it tend to convert? Every stream gets one vote, whatever its size. A host coach planning next week, or a brand asking "what should a normal stream of ours do", wants this one.
The rule is short: say which, every time. Put "pooled" or "average of streams" in the column name, not in a footnote. The two can differ by almost a factor of two on the same eight rows, and the reader cannot tell from the number which one you meant.
LivePool within host type, and the gap disappears2 min▶
Split the eight streams by host type and compute both averages inside each group. In the build-along below, the code prints the same value both ways for each type: platform 0.63 percent either way, brand 2.79 percent either way. Inside a host type the rooms are similar in size and in conversion, so the weighting hardly matters. The whole gap between 0.96 and 1.71 came from mixing two populations that behave differently.
That is the practical rule for a scorecard: pool with the ratio of sums, and pool within the groups that are meant to be compared, host type first. A channel-wide number is still worth printing for the channel's own question. It is not a benchmark for any host.
Self-studyWhere each average misleads3 min▶
The ratio of sums can be captured by one room. Add a single platform stream with ten times S3's traffic to the table and the channel's conversion would sit almost exactly on that one stream's rate, whatever the other eight did. When one row dominates the denominator, a pooled number is mostly a report on that row.
The mean of ratios has the opposite weakness: a tiny room gets the same vote as a huge one. A hypothetical test stream with 40 entries and 3 orders would convert at 7.5 percent and pull the mean up on its own. The usual defence is a minimum room size for a stream to count in the mean, and that threshold is one more definition to write down once. Both failure modes are why the stage dictionary carries the aggregation rule next to the ratio. Breaking a metric into its parts to see which one moved is taught in the metric decomposition course.
Every headline number is a choice of numerator and denominator. Sea Limited's annual report for fiscal 2019 defines Shopee's GMV as the value of orders on the marketplace and says its calculation "includes shipping and other charges"; an order counts "regardless of whether the transaction is settled or if the item is returned". That is a listed company writing its choices down in public, which is the whole lesson of this Part at the scale of a stage ratio: the definition is part of the number. Sea Limited, Annual Report on Form 20-F for the fiscal year 2019, "Conventions" definitions. How an enabler's own GMV should be defined is taught in the ecommerce metrics course, and session 7 writes it into the registry.
GMV ranks the rooms, the North Star ranks the hosts
4 min liveSort the eight constructed streams by orders and the platform hosts win: 245 orders against 192. Sort them by the North Star and the brand hosts win: 2.79 percent against 0.63, 4.4 times better per person in the room. Both sorts are correct arithmetic. Only one of them is about the host.
LiveWhy orders rank the room, not the host2 min▶
Orders are entries times conversion. Entries come mostly from work the host did not do: the traffic push, the slot, the brand's following, the face on the card. S3 had the biggest room of the eight, 11,880 entries, and sold the most, 71 orders, while converting at 0.60 percent, the lowest on the table (S3 and S4 both print 0.60; S3 is lower in the third decimal). A GMV-only table books S3's host into prime slots, which makes the room bigger, which makes the GMV bigger. The loop feeds itself and never asks whether the host sold.
The North Star divides the room out. It is not "better" than orders; it answers a different question. Orders answer "which room made money", and the brand's finance team is right to ask it. The North Star answers "who turns a room into buyers", and that is the question a host scorecard exists for.
LiveFair comparison across brands: within first, across only with a label1 min▶
Serai sees what no single brand sees: many brands' streams on one channel. That is the value and the trap. A beauty brand's host and a kitchenware brand's host face different baskets, prices and buyers; a platform host and a brand host face different rooms. The practice for a fair host comparison:
- Compare within host type and within brand first. Rank a brand's hosts against each other, then platform hosts against platform hosts.
- Across brands, stay within a category, and pool with the ratio of sums inside it.
- Never rank across host type, brand or category without saying so on the chart. "Across host types" is a legitimate view for the channel; it is not a verdict on a person.
Holding brand and category fixed properly, rather than by splitting the table, is a fixed-effects model and belongs to the live commerce analytics course linked at the top of the page.
Self-studyThe scorecard as the thing Serai sells3 min▶
A brand running its own streams sees its own rooms. Serai, running streams for 12 brands on Pasar Live (constructed), can tell a brand what a normal Hold looks like for a brand host in its category, which stage its host is losing, and which minute the room drained. That per-host scorecard, pooled within host type and category, with every stage's denominator on the sheet, is a service line, not a report. It is the "knowing" that the leader track prices.
It only sells if it survives the brand manager's first question: "why does my host rank seventh?" The answer has to be one sentence about a named ratio and a named comparison group, for example "your host's Hold is below the pooled Hold for brand hosts in your category, and here is the minute the room drained", and never "the model says so". Every scorecard row should carry its comparison group as a column. Benchmarks across brands also carry an obligation: show a brand only pooled figures from others, never another brand's own rows.
The swap request (constructed). After a quarter of GMV-only weekly reports, one of Serai's brands asked to replace its own host with a platform host, because the platform hosts' streams "sold more". The analyst's reply was the two columns in the figure: the platform streams sold more because they had about 5.6 times the entries (38,830 against 6,890), and the brand's host converted the people in her room 4.4 times better. The brand kept its host and bought a traffic push for her slot instead. The story is constructed; the arithmetic is the eight-stream table above.
The scorecard in pandas and SQL
★ 22 min · everyone buildsEight rows, ten columns, constructed. Build the stream table, write the stage dictionary once, pool by host type with the ratio of sums, print both averages, rank the streams two ways, then run the same pooled scorecard in SQL through duckdb. Every output below is what the code printed when run on pandas 2.1 and duckdb 1.5; the data is constructed, so on your own channel your numbers will differ.
Build the stream table from the constructed eight-stream table. In production this is the minute table from session 4, summed by stream. Keep it as counts: every column is something that fired and can be added.
Write the stage dictionary once, then compute every stage per stream. Each stage is a name, a numerator and a denominator, in one place. The function divides; nothing else in the codebase is allowed to.
Pool by host type with the ratio of sums. Sum the counts first, divide second, and reuse the same function: the pooled scorecard cannot drift from the per-stream one because they share the dictionary.
Print both averages, and label them. The channel's conversion and the typical stream's conversion, side by side, then both again inside each host type. The last table is the argument for pooling within host type.
Rank the streams by orders and by the North Star. Rank on the unrounded rate, so S3 and S4, which both print 0.60, still sort correctly.
Run the same pooled scorecard in SQL. Most brand teams will read this through a warehouse view, not a notebook. In SQL the ratio of sums is SUM(x) / SUM(y) and the mean of ratios is AVG(x / y): one bracket apart, which is why the column name has to say which. pip install duckdb if you do not have it; with sqlite3 from the standard library, load the table with streams.to_sql("streams", con) and the same query runs unchanged.
Keep the stage dictionary in the estate registry. Session 1's registry declared tables and grains; the stage dictionary is its first metric entry, and session 7 turns both into a registry with tests. If the SQL view and the notebook each carry their own copy of Hold, they will disagree the week somebody changes the minute-10 rule in one of them.
Before session 6
30 min- Find three rate metrics on a dashboard you use weekly. For each, write the numerator, the denominator, and whether the total row is a ratio of sums or a mean of ratios. If the dashboard does not say, find out from the query.
- Add a ninth, constructed stream to the table: a platform host with 30,000 entries converting at 0.50 percent. Re-run steps 3 and 4 and write one sentence on what happened to each average, and why.
- Add a
brandand acategorycolumn to the stream table (invent them) and change step 3 to pool by host type within category. Print a scorecard where every row carries its comparison group. - Write the one-sentence answer you would give a brand manager whose host ranks last on the North Star but first on orders. Name the ratio and the comparison group.
Three questions
Clear all three and Analyst session 5 gets stamped in your passport.
1 · On the constructed eight streams, conversion is 0.96 percent as a ratio of sums and 1.71 percent as a mean of the eight rates. Which question does each answer?
The ratio of sums divides all orders by all entries, so the four big platform rooms dominate it. The mean of ratios gives every stream one vote. Both are correct arithmetic for different questions, and within each host type they agree, which is why the scorecard pools within host type and names the method.
2 · Why does a GMV-only table mis-rank Pasar Live's hosts?
S3 had the biggest room, 11,880 entries, and the most orders, 71, while converting at 0.60 percent, last of eight. Orders rank the rooms; orders per room entry rank the hosts. The other options may be true of some GMV definition, but none of them explains the ranking.
3 · Pasar Live's Hold counts completers, viewers who stay past minute 10. What does it divide by?
Hold grades whether the room kept the people it got, so its denominator is everyone the room got. Dividing by the viewers present at minute 10 counts only survivors and pushes Hold towards 100 percent by construction.
What this session teaches, and where it came from
Every fact on this page, and its verification tier, is recorded in the course's source map.
Analyst session 5 cheat sheet · pin this
You can now score a stream. Session 6 follows the other chain from session 1: content Serai produces, tagged with a persistent id, joined back to the orders it sold, and paid out on settled rather than attributed GMV. It is the same lesson about denominators, with money on the line: which creator actually sells, per follower, once the returns come back.