learn-sales-pipeline-analytics-with-phoebe / Analyst session 2 of 6
Learn B2B Sales Pipeline Analytics with Phoebe · Analyst session 2 of 6

Conversion done honestly

"What is our conversion rate?" sounds like one number. It is at least two, and on the same real rows they can differ by a factor of two in the same month. Tonight: the cohort rate and the period rate and why they disagree, the date a table starts and how it quietly kills a whole year of leads, conversion by origin, and the denominator that a won-only table never had. The rows are real Olist B2B funnel rows (Brazilian marketplace seller acquisition) standing in for Kettle's history; Kettle & Co's examples are constructed and labelled.

🟢 Analyst Data analysts who build pipeline reporting and forecasts Hands-on in the browser 45 min
0-3 · Welcome 3-18 · Cohort vs period, the logging lag, origin and survivorship 18-40 · Build-along: conversion two ways 40-45 · Q&A
Part 0

Where we start

Last session you learned to rebuild the pipeline as it stood on any date. Tonight that discipline meets the most quoted number in sales: conversion. Every rate is a fraction, and every honest question about it is a question about the denominator. Which leads are in it? Did they all have the same time to convert? Was the table that records the wins even switched on when they arrived? You will answer all three on 8,000 real leads and 842 real won deals, in your browser.

🎫 Clear all three quiz questions to stamp your passport Live = presented in the 45 minutes Self-study = the full depth, after class ★ Build-along = everyone builds it

★ What you walk out with tonight. A cohort conversion query you can write from memory, a habit of checking when each table starts before you trust a rate, and one sentence you can say to a sales leader when a won-only report claims a segment "wins more": we have the numerator, not the denominator.

Part 1 · covers cohort vs period

Two rates with the same name

5 min live

The cohort rate follows a group of leads: of everyone who entered in month m, what share ever won? The period rate looks at a calendar month: wins dated in m, divided by leads that arrived in m. The period rate is quicker to compute and appears on most dashboards, but its numerator and denominator are different people. The wins dated in January came from leads that arrived in December, October, and January; the January leads mostly win later.

ONE GRID, TWO WAYS TO READ IT rows: month of first contact · columns: month won · real Olist rows Jan Feb Mar Apr May Jun on 2017 cohorts 2018-01 2018-02 2018-03 2018-04 2018-05 COHORT: read along the row 152 won ever / 1,141 leads = 13.3% faint cells: before the lead arrived PERIOD: read down the column 73 wins dated Jan / 1,141 Jan leads = 6.4% The Jan column holds wins from 2017 cohorts too: the period rate divides one group by another.
🔍 Click to zoom - a cohort reads along a row, a period reads down a column, and only the row keeps the same people on top and bottom
LiveThe same month, two answers3 min▶

January 2018. 1,141 leads made first contact. 152 of them eventually won: a cohort rate of 13.3%. But only 73 wins carry a January date, so the period rate is 6.4%. The January leads were not worse; most of them simply won in February, March or later.

April 2018. 1,352 leads, 183 eventually won: 13.5%. Wins dated April: 207, a period rate of 15.3%. Now the period rate is the higher one, because April's wins include the deals that January, February and March leads closed in April.

The rule. When the arrival rate of leads changes month to month, the period rate swings for reasons that have nothing to do with how well anyone sells. Use the cohort rate to judge selling; use wins dated in the month only when the question is cash or capacity in that month, and then do not divide by that month's leads.

Self-studyWhen the period rate is the right tool2 min▶

Wins dated in a month are the right count for "how much did we book in April" and "did the team have capacity for April's closes". What breaks is the ratio: April's wins over April's leads. If you need a monthly ratio quickly, report the cohort rate with a fixed window instead, for example "won within 60 days of first contact", so every cohort gets the same amount of time. Analyst session 3 shows why the window matters and how to handle cohorts that have not had it yet.

Real world

Constructed Kettle & Co example. Kettle's BD lead sees conversion "jump" in April and asks Ben what changed. Constructed arithmetic: 100 offices contacted in March, 12 of them ever win (2 sign in March, 10 in April); 100 contacted in April, 12 ever win (5 in April, 7 in May). April's period rate is (10 + 5) / 100 = 15%. Both cohorts converted at 12 / 100 = 12%. Nothing changed but the calendar: March's tasting trials happened to land in April.

Part 2 · covers the logging lag and censoring

Check when each table starts

5 min live

Olist's lead table starts on 14 June 2017. Its closed-deal table starts on 5 December 2017. A lead that arrived in July 2017 and won in, say, October would never appear as won, because the log of wins did not exist yet. So the 2017 cohorts look dead: July 2017 converts at 0.8%, October at 3.4%, December at 5.5%, against 13.0% for the 2018 cohort. That is a logging artefact, not a buyer who said no.

TWO TABLES, TWO START DATES real Olist rows · one tick per six months Lead table: first contact 2017-06-14 to 2018-05-31 Closed-deal table: won 2017-12-05 to 2018-11-14 2017 cohorts fall here 2017-06 2017-12 2018-06 2018-12 2017-07 0.8% 2017-10 3.4% 2017-12 5.5% 2018 cohort 13.0% 2018-05 10.0% least time to convert The early 2017 wins happened, if at all, before anyone was writing wins down.
🔍 Click to zoom - the copper band is a hole in the log, not a hole in demand
LiveThree dates to write down before any rate3 min▶

When does the denominator table start? Here, the lead table: 14 June 2017.

When does the numerator table start? The closed-deal table: 5 December 2017. Any cohort that arrived well before this date is undercounted, and the further back, the worse.

When was the data cut? Leads stop on 31 May 2018 and wins on 14 November 2018. The May 2018 cohort (10.0%) had the least time to convert of any 2018 cohort. Some of that gap is slower buyers and some is simply less time: this is right-censoring, and Analyst session 3 handles it properly with a survival curve.

Self-studyThe closed-lost logging lag2 min▶

Wins get logged fast, because someone is paid on them. Losses get logged late or never: the buyer goes quiet, the rep keeps the deal open "just in case", and months later a cleanup marks it lost in bulk. So "open" deals quietly include losses, and any rate computed as won / (won + lost) looks better than it is, because the quiet losses sit in neither column.

Olist is the extreme case: it logs no losses at all. Every lead that did not win is simply a lead with no closed-deal row. That is why every rate tonight is won / all leads in the cohort, never won / (won + lost). In your own CRM, count deals with no activity for twice your median cycle and ask whether they are open or lost-but-unlogged. The rep's side of that cleanup is in AI Sales, CRM hygiene.

Real world

A year of leads that "never converted". On the real Olist rows, the July 2017 cohort has 239 leads and 2 logged wins; October has 416 leads and 14. Show those months on a conversion trend and it reads as a sales team that learned to sell in December. The honest chart starts the trend at the first cohort the win log could fully see, and says so in a footnote.

Part 3 · covers origin and survivorship

Rates by origin, and the missing denominator

5 min live

Split the 2018 cohort by where each lead came from and the rates spread out: paid search 14.8%, organic search 14.7%, referral 11.4%, social 6.3%, email 4.0%. The best-converting group is "unknown" at 20.7%. A channel called unknown is not a channel; it is a tracking question. Then there is a second trap that no amount of splitting fixes: a table that only describes the winners.

2018 COHORT CONVERSION BY ORIGIN, DENOMINATOR PRINTED real Olist rows · rate = won / leads in that origin unknown paid_search organic_search direct_traffic referral social email 20.7% · 168 of 813 14.8% · 175 of 1,182 14.7% · 255 of 1,736 14.2% · 54 of 380 11.4% · 24 of 211 6.3% · 66 of 1,051 4.0% · 14 of 347 a tracking question Not drawn: four origins under 120 leads each (blank, other, display, other_publicities).
🔍 Click to zoom - the copper bar wins the chart and loses the argument: nobody knows what "unknown" is
LiveWhy "unknown" tops the chart3 min▶

An origin is a field someone or something fills in. Web forms fill it automatically; a lead a rep adds by hand after a phone call or a meeting often gets no origin at all. Those hand-entered leads are frequently the warmest ones, which would explain a high rate. It is a hypothesis, not a finding: the rows cannot tell you who left the field blank.

Before ranking channels, find out how origin gets set and what share of leads lack it. Here 813 of 5,998 leads in the 2018 cohort are "unknown", and the even smaller blank group (48 leads) converts at 27.1%. Small groups produce the most extreme rates; always print the denominator next to the rate, as the figure does.

Marketing reads this same funnel for budget and cost per acquired seller in Marketing, the funnel bench. Here the angle is narrower: is the rate honest enough to rank anything?

Self-studySurvivorship in a won-only table3 min▶

Olist's closed-deal table carries business segment and lead type, but only for the won deals. The leads table has no segment. So you can count which segments the winners came from, and you cannot compute a win rate by segment, because the losing and still-open leads of each segment were never described.

"Most of our won deals are segment X" then says nothing about whether segment X wins more often. It may simply be the segment you pitch most. A segment you rarely pitch can win most of its few chances and still look small among the winners. Without the denominator, the counts describe where you spent effort, not where effort pays.

The fix is upstream: capture segment at first contact, on every lead, so the denominator exists. Until then, say "we have the numerator, not the denominator" and refuse to rank.

Real world

Constructed Kettle & Co example. Kettle's signed-contract sheet records office size for every signed customer, and most are mid-size offices. Chiara proposes focusing on mid-size. The sheet has no row for the offices that took a tasting trial and did not sign, so there is no rate to compare. The first data request is not a new chart; it is an office-size field on the contact form.

Build-along

Conversion two ways, on real rows

★ 22 min · everyone builds

The widget holds real Olist B2B funnel rows (Brazilian marketplace seller acquisition) standing in for Kettle's history: every lead's first-contact month and origin, and every won deal's date. It computes both rates in your browser. Work the five steps, copy what the widget prints, and then write the query yourself.

WHAT THE WIDGET DOES WHEN YOU SWITCH THE VIEW Show month or origin By month: cohort vs period leads, won ever, cohort rate, period rate By origin: 2018 cohort origin, leads, won, rate verdict: 2018 cohort 5,998 leads, 781 won, 13.0% verdict: best vs worst more than five-fold apart Both views read the same 8,000 real leads; only the grouping and the denominator change.
🔍 Click to zoom - the copper line is the one number to quote; the tables are how you check it

Step 1 · Read the default verdict. The widget opens on "By month: cohort vs period". Copy the verdict line: it is the cohort rate for every lead that arrived January to May 2018, after the win log was running.

★ Step 1 · what the widget prints2018 cohort (January to May): 5,998 leads, 781 won, 13.0%.

Step 2 · Compare January's two rates. Find the 2018-01 row. Read the cohort rate and the period rate side by side, then do the same for 2018-04, where the order flips.

★ Step 2 · two rows, cohort vs periodFirst contact Leads Won ever Cohort Dated this month Period 2018-01 1141 152 13.3% 73 6.4% 2018-04 1352 183 13.5% 207 15.3%

Step 3 · Find the 2017 rows and explain them. Three of them below. The widget marks cohort rates under 6% in red. Write one sentence on why, using the date the closed-deal log starts.

★ Step 3 · the cohorts the win log could not see2017-07 239 2 0.8% 0 0.0% 2017-10 416 14 3.4% 0 0.0% 2017-12 200 11 5.5% 3 1.5% my sentence: ____________________________________________ (log starts 2017-12-05)

Step 4 · Switch to "By origin". Copy the new verdict line, then find the top and bottom rows that have more than 300 leads. Check that the "five-fold" claim survives when you ignore the tiny groups.

★ Step 4 · the origin verdictSame 2018 cohort, split by where the lead came from. Best and worst differ by more than five-fold. unknown 813 168 20.7% email 347 14 4.0%

Step 5 · Write the cohort query. Group leads by their entry month, count the ones that ever won, divide by all leads in that month. Run it on your own tables; do not trust a number until it matches the widget's logic on yours.

★ Step 5 · cohort conversion in SQLSELECT DATE_TRUNC('month', l.first_contact_date) AS entry_month, COUNT(*) AS leads, COUNT(w.lead_id) AS won_ever, COUNT(w.lead_id) * 1.0 / COUNT(*) AS cohort_rate FROM leads l LEFT JOIN won_deals w ON w.lead_id = l.lead_id -- one row per won lead WHERE l.first_contact_date >= DATE '2017-12-05' -- only cohorts the win log can see GROUP BY 1 ORDER BY 1;

LEFT JOIN, never INNER. An inner join to the won table drops every lead that did not win, and the "rate" becomes won / won. The left join keeps the denominator; COUNT on the won side counts only matches.

Homework

Before Analyst session 3

30 min
  1. Find your conversion dashboard and decide whether it shows a cohort rate or a period rate. Write down which, and where its numerator and denominator come from.
  2. Write down three start dates: when your lead table starts, when your won (or closed) table starts, and when lost deals began to be logged consistently.
  3. Run the cohort query from Step 5 on your own data for the last twelve months, and mark the cohorts too young to compare fairly.
  4. List every field you only have for won deals (segment, size, industry, deal type). For each, note where it would need to be captured so the denominator exists.
Check yourself

Three questions

Clear all three and Analyst session 2 gets stamped in your passport.

1 · January 2018's leads have a cohort rate of 13.3% and a period rate of 6.4%. Why do they differ?

The cohort rate follows the same 1,141 leads along their row. The period rate divides January-dated wins, from several cohorts, by January's leads.

2 · The July 2017 cohort converts at 0.8% against 13.0% for 2018. What is the most likely cause?

The 2017 cohorts had the most time, not the least. They look dead because the numerator table was not running yet: a logging artefact.

3 · A table describes segment only for won deals, and most won deals are in one segment. What can you conclude about win rate by segment?

A won-only table holds the numerator. Most winners in one segment may just mean most effort went there.

Sources covered

What this session teaches, and where it came from

✓Olist's lead and closed-deal tables, their start and end dates, no lost dealsOlist, "Marketing Funnel by Olist", Kaggle dataset, CC BY-NC-SA 4.0, read at source (both files opened)
✓Cohort and period rates by month, and conversion by origin for the 2018 cohortComputed by the widget on this page from the real rows; the same counts as the source map
◐Segment and lead type exist only for won deals, so no win rate by segmentMechanism from the table structure; no segment counts are quoted
◐Kettle & Co's April jump and signed-contract sheetConstructed and labelled; arithmetic shown on the page

Every fact on this page, and its verification tier, is recorded in the course's source map.

Analyst session 2 cheat sheet · pin this

Cohort rateOf leads that entered in month m, the share that ever won. Read along the row.
Period rateWins dated in m over leads arriving in m. Two groups in one fraction.
Check start datesOlist leads from 2017-06-14, wins from 2017-12-05: every 2017 cohort looks dead.
Young cohorts2018-05 at 10.0% had the least time. Right-censoring: Analyst session 3.
Print the denominator"unknown" 20.7% is 168 of 813, and a tracking question before a channel.
Won-only fieldsA numerator without a denominator. Capture the field at first contact.