learn-people-analytics-with-phoebe / Foundations session 1 of 6
Learn People Analytics with Phoebe · Foundations session 1 of 6

Headcount is a stock, attrition is a flow

Ask "how many people do we have" and the honest answer starts with "on which date". Ask "what is our attrition" and it starts with "divided by what". Every people number is either a stock, a count of people at an instant, or a flow, a count of people moving during a period, and the trouble begins where the two meet: a flow divided by a stock is a rate, and the same flow over three reasonable stocks gives three reasonable rates. Tonight is the grammar. One identity, start plus joiners minus leavers equals end, that every dashboard has to satisfy; the three bases and the 20.5, 22.3 and 24.4 percent they produce from one set of 210 leavers; and the photograph problem, which is that most HR exports contain only the people who survived long enough to be in them.

🟢 Foundations Leaders, HR partners, anyone who reads a people dashboard No code 45 min
0-3 · Welcome 3-18 · Stocks, flows, and the three bases 18-40 · Build-along: the Apex headcount bridge 40-45 · Q&A
Part 0

Where we start

People analytics has a reputation for being soft, and it is the opposite: it is the one domain where every number describes a person who can be counted exactly, so there is no excuse for a number that cannot be reconciled. The running company is Apex, a constructed group of four entities and 1,071 staff rows, built to look like the export any HR system produces. Every Apex figure is invented and the pages say so. What is real is the mechanism: the identity, the bases, and the survivor problem are the same in every company, and once you can see them you can read any people dashboard and know which numbers to believe.

🎫 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 works it through

★ What you walk out with tonight. The habit of asking "stock or flow, and on which date" before believing any people number, the identity you can check any dashboard against in ten seconds, the three bases and why each is defensible, and the question that catches the survivor problem: who is not in this table?

Part 1 · covers stocks, flows and the identity

The tank, and the identity

6 min live

Picture headcount as water in a tank. Joiners pour in, leavers drain out, and the level at any instant is the headcount on that date. The level is a stock: it needs a date. The pouring and draining are flows: they need a period. And the tank obeys one identity that no reporting convention can escape: the level at the end of a period equals the level at the start plus what poured in minus what drained out.

THE TANK a stock has a date, a flow has a period, and one identity ties them together joiners: a flow Jan to Jun 2026 49 1 January 2026 1,022 1 July 2026 861 the stock, on a date leavers: a flow Jan to Jun 2026 210 THE IDENTITY start, 1 January 1,022 plus joiners + 49 minus leavers - 210 equals end, 1 July 861 If a dashboard breaks this, it is counting somebody twice or not at all. Constructed Apex data. Two levels, two flows, one equation. Every people dashboard has to satisfy it, and most of them are never checked against it.
🔍 Click to zoom - the dashed line is the January level; the water is July's; the difference is exactly what flowed in and out
LiveStock or flow: the question to ask before any people number4 min▶

A stock is a count at an instant. Headcount, open positions, people on leave, people in a grade. It has no meaning without a date, and two stocks from different dates cannot be subtracted to give a flow unless nothing else moved between them, which it always did.

A flow is a count over a period. Joiners, leavers, promotions, transfers, hires, offers. It has no meaning without a start and end date, and a flow reported "for the year" in March is a different number from the same flow reported in December.

The identity is the only check that needs no judgement: start stock, plus every flow in, minus every flow out, equals end stock. At Apex, 1,022 on 1 January, 49 joiners and 210 leavers to the end of June, 861 on 1 July. It reconciles. When it does not, the usual reasons are a transfer counted as a leaver on one side and not as a joiner on the other, a contractor in one stock and not the other, or a leaver whose last day was entered in the wrong month.

The reason this matters beyond tidiness: every rate on a people dashboard is a flow divided by a stock, and if the two were not measured on consistent dates, the rate is a fraction of two unrelated numbers.

Self-studyTransfers, contractors and leave: the flows that are not exits3 min▶

Apex has four entities and 291 of its 1,071 rows carry a transfer flag: somebody who moved from Apex Retail to Apex Logistics is a leaver on Retail's dashboard and a joiner on Logistics', and neither on the group's. Whether a transfer counts as attrition depends entirely on whose tank you are looking at, and a group-level attrition figure built by adding up entity-level figures will count every transfer as a loss.

The same applies to people on long leave (in the stock or not?), contractors converting to staff (a joiner or not?), and rehires (a joiner, but not a new person). None of these has a universal answer. Each has to be written down once, in the definition of the stock, so that the identity can be checked with the same rules on both sides.

Real world

Two headcounts for the same company. Finance reports 1,022 full-time equivalents; HR reports 1,071 people. Neither is wrong. One counts hours, the other counts heads, and 49 people on part-time contracts explain the gap. The meeting that spends twenty minutes arguing about which is "right" has skipped the only useful question, which is what each number is a stock of. Constructed example; the mechanism is not.

Part 2 · covers the three bases

One count of leavers, three attrition rates

5 min live

Apex lost 210 people between January and June. What is its attrition rate? Divide by the January headcount and it is 20.5 percent. Divide by the average of January and July and it is 22.3. Divide by July's and it is 24.4. All three are defensible, all three appear in real reports, and a four-point spread from the same 210 people is what happens when the base is not written down.

THE SAME 210 LEAVERS, THREE BASES Apex, January to June 2026, constructed · every base is one somebody uses start base 210 1,022 headcount 1 January 20.5% average base 210 941.5 (1,022 + 861) / 2 22.3% end base 210 861 headcount 1 July 24.4% Four points of spread and nothing about the people changed. The moss card is the one most standards use; the other two are not wrong, they are undeclared. Write the base under the rate, every time. A rate without its base is a numerator wearing a percent sign.
🔍 Click to zoom - the hatched block is the same 210 people in all three cards; only the number under the line moved
LiveWhich base, and why the average is the usual answer3 min▶

The start base asks "of the people we had in January, what share left". Clean, but it ignores the 49 who joined and were also at risk of leaving, and it understates the rate in a growing company. The end base asks the question backwards: it divides by a headcount that is smaller because people left, so the more people leave, the more the rate inflates. The average base approximates the number of people who were exposed to the risk of leaving during the period, which is what an attrition rate is trying to measure, and it is why most standards use it.

None of this makes the average base right in every case. A company that doubled in size in a month has an average that describes nobody. The point is narrower: the base is a decision, it moves the rate by points, and it goes under the number in writing. Foundations session 2 takes the same 210 leavers by department and by entity, where the base problem gets worse because the bases get small.

Self-studyAnnualising, and the assumption it smuggles in2 min▶

Apex's 22.3 percent covers six months. Doubled, it is 44.6 percent a year, and that is the number that will be quoted. The doubling assumes the second half repeats the first, which for a company that lost 54 of 108 salespeople in six months is a guess in either direction: the exodus may be over or may be halfway. Annualised figures should carry the word "annualised" and the period they were built from, and a half-year figure compared with last year's full-year figure is not a comparison.

Part 3 · covers the survivor table

The export is a photograph of survivors

4 min live

Open the Apex table and every one of its 1,071 rows is either somebody employed on 1 January 2026 or somebody who left in the six months after. Nobody who left in 2025 is there. Nobody who joined in 2019 and quit in 2020 is there. The table is a photograph taken on one date, plus a short film of what happened next, and anything you compute about "how long people stay" from it will describe the survivors, not the staff.

WHO IS IN THE TABLE each line is one person's employment · the photograph is taken on 1 January 2026 2012 2019 1 JAN 2026 JUN faint: joined and left before the photograph not one of them is in the table dark: in the table dots: the 210 leavers Compute "how long do people stay" from the dark lines only and the answer describes the people who stayed long enough to be photographed.
🔍 Click to zoom - the faint lines are the leavers you will never see, and there are more of them than there are dots
LiveWho is not in this table, and what that does to every tenure number4 min▶

Take the median tenure of Apex's active staff: 5.01 years. It sounds like "people stay about five years". It is not that. It is the median tenure of the people who were still there on 1 January, which is a group that by construction excludes everyone who left earlier, and people who leave tend to leave early. The 210 who left in the first half of 2026 had a median tenure at exit of 1.52 years, and 61 percent of them had been at Apex under two years. Two very different pictures of the same company, and both are computed correctly from the table; the table itself is the problem.

The question that catches it: what would a person have to have done to be missing from this table? For Apex, the answer is "left before 2026". Any statistic about how long people stay, how many leave in their first year, or which cohort is loyal has to be read knowing that the early leavers of every year before 2026 are absent. Deep-dive session 2 measures exactly how far this pushes a survival curve, and what kind of table fixes it, which is an event log rather than a photograph.

Self-studyThe other photographs: surveys, reviews, and exit interviews2 min▶

Every people dataset is a photograph of who was around to be measured. Engagement surveys measure the people who filled them in, which excludes the disengaged in proportion to their disengagement. Performance reviews measure the people who stayed to the review date. Exit interviews measure the leavers who agreed to talk, and the reason they give is the reason they were willing to give. None of these are useless. Each has a missing group whose shape can be guessed, and the guess belongs in the sentence that reports the number. Foundations session 5 is the survey version of this problem.

Build-along

The Apex headcount bridge, on paper

★ 22 min · everyone works it through

No code tonight. Six worksheet steps that turn "we lost a lot of people this year" into a bridge that reconciles, a rate with its base written under it, and one sentence a board can use. Every Apex number is constructed; the deep-dive track's first session rebuilds each of them from the table in pandas. Work each step for your own company as we go.

THE BRIDGE, THEN THE BASES BY ENTITY constructed Apex · bar heights to scale from 800 · rates on the start base 1,022 1 Jan +49 joiners -210 leavers 861 1 Jul Apex Digital 124 start · 31 left 25.0% Apex Logistics 221 start · 52 left 23.5% Apex Manufacturing 440 start · 85 left 19.3% Apex Retail 237 start · 42 left 17.7% The bridge reconciles: 1,022 + 49 - 210 = 861. The four entity rates use the start base and sum to 210 leavers over 1,022 starters. Digital reads worst and has the smallest base: 124 people, so one leaver is 0.8 of a point. Foundations session 2 is about what a small base does to a rate.
🔍 Click to zoom - the moss bar is a fifth the height of the wine bar, which is the whole story of Apex's first half in one glance

Step 1 · Fix the two dates. A bridge needs a start and an end. Write both, and write what counts as "in the headcount" on those dates: employees on payroll, excluding contractors, including people on leave. Apex's are 1 January and 1 July 2026.

★ Step 1 · dates and the definition of the stockstart date: ______________ end date: ______________ in the stock: ________________________________________ not in the stock: ________________________________________

Step 2 · Count the two stocks. Headcount on each date, by the definition in step 1. Apex: 1,022 and 861. If the two come from different systems, say which.

★ Step 2 · the stocksheadcount at start: 1,022 (Apex, constructed) headcount at end: 861 yours: ______ and ______

Step 3 · Count the two flows. Joiners and leavers between the dates, by the same definition. Transfers between entities count on entity bridges and not on the group bridge. Apex: 49 and 210.

★ Step 3 · the flowsjoiners: 49 leavers: 210 (Apex) yours: ____ ____ transfers handled how: ________________________________

Step 4 · Check the identity. Start plus joiners minus leavers should equal end. If it does not, the difference is the number of people counted twice or not at all, and finding them is the next task, before any rate is computed.

★ Step 4 · the identity1,022 + 49 - 210 = 861 reconciles (Apex) _____ + ___ - ____ = _____ yours difference: _____

Step 5 · Write the rate with its base under it. Three bases, three rates. Pick one, say which, and keep it. Apex on the average base: 22.3 percent for the half-year.

★ Step 5 · the rate and the baseleavers / start base: 210 / 1,022 = 20.5 percent leavers / average base: 210 / 941.5 = 22.3 percent (chosen) leavers / end base: 210 / 861 = 24.4 percent annualised (x2): 44.6 percent, assumes H2 repeats H1

Step 6 · The sentence. One line with the flow, the base, the period, and the annualising assumption if there is one. This is the line that goes on the slide.

★ Step 6 · the sentence"Between 1 January and 30 June, 210 people left against an average headcount of 941, 22.3 percent for the half-year; doubled, 44.6 percent annualised, if the second half repeats."

Keep the bridge as your standing check. Any people report that cannot be reconciled to start plus in minus out equals end is a report with a counting error in it, and the error is usually bigger than the trend the report is trying to show.

Homework

Before Foundations session 2

30 min
  1. Build the bridge for your own team or company for the last six months: two stocks, two flows, the identity checked. Write the difference if it does not reconcile; that number is your first finding.
  2. Compute the rate on all three bases and write the spread. If your organisation already reports a rate, find out which base it uses; if nobody knows, that is your second finding.
  3. Answer "who is not in this table" for the export you used, in one sentence.
  4. Bring the bridge. Session 2 splits the same leavers by department and the bases get small enough to lie.
Check yourself

Three questions

Clear all three and Foundations session 1 gets stamped in your passport.

1 · A dashboard shows headcount 1,022 in January, 861 in July, and 210 leavers for the half-year. What is the first thing to check?

The identity is the one check that needs no judgement. Every rate on the dashboard is a flow over a stock, and if the flows and stocks do not reconcile, the rates are fractions of unrelated numbers.

2 · The same 210 leavers give attrition of 20.5, 22.3 or 24.4 percent. Why, and which is usual?

The numerator never changed. The end base inflates because it shrinks as people leave; the start base ignores joiners who were also at risk. The base is a decision, and an undeclared base is the most common way a people number misleads.

3 · Apex's active staff have a median tenure of 5.01 years, and its recent leavers a median tenure at exit of 1.52 years. What does the table let you say about how long people stay?

Both numbers are computed correctly from a table that is a photograph of survivors. Deep-dive session 2 measures how far that biases a survival curve and what an event log fixes.

Sources covered

What this session teaches, and where it came from

✓Stocks, flows and the headcount identityStandard practice, no single source
✓The three bases: 20.5, 22.3, 24.4 percent; annualised 44.6Computed from the constructed Apex table for these pages; annualising is labelled as an assumption
✓The Apex bridge: 1,022, 49, 210, 861; entity rates 25.0 / 23.5 / 19.3 / 17.7; median tenures 5.01 and 1.52; 61 percent of leavers under two yearsComputed from the constructed table; Apex and everyone in it are invented
◐The survivor-table bias on a survival curveNamed here; measured in deep-dive session 2
◐Transfers, contractors, leave and rehiresNamed as definition decisions; no universal rule claimed

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

Foundations session 1 cheat sheet · pin this

Stock or flow?A stock needs a date. A flow needs a period. A rate is a flow over a stock.
The identityStart + joiners - leavers = end. Check it before any rate. Apex: 1,022 + 49 - 210 = 861.
Three basesStart 20.5, average 22.3, end 24.4 percent. Same 210 people. Write the base under the rate.
Annualised means assumed44.6 is 22.3 doubled, and doubling assumes the second half repeats.
Who is not in the table?An export is a photograph of survivors. Early leavers of every earlier year are missing.
Transfers are not exitsA leaver on one entity's bridge, a joiner on another's, neither on the group's.