Where we start
Deep-dive session 2 left the 210 exits on a curve and proved the curve too high. Tonight leaves the curve alone and asks two things of the same 210 rows: the reason column, and the department column with its base. Then it reaches outside the constructed company for the first time, to a real monthly series from the US Bureau of Labor Statistics, and spends most of its care on why that number and Apex's cannot be laid side by side without a sentence of arithmetic between them. Apex is constructed; JOLTS is real and fetched on the page's build date, 26 September 2026.
★ What you walk out with tonight. A regretted share whose list is printed beside it; department rates with the base under every one; a working call to the BLS public API in seven lines; the peak, the trough and two annual means of the US quits rate; and the two-line caveat that turns a monthly rate into a rough annual scale without pretending it is one.
Regretted is a list you chose
5 min liveApex's exits carry a free-text reason, already coded into eleven categories: Better Opportunity 33, Career Growth 33, Compensation 29, Management/Culture 23, Relocation 19, Work-Life Balance 19, Unknown 17, Personal/Health 15, Involuntary/Performance 10, Retirement 9, Further Study 3. None of those is "regretted". Regretted is a line drawn through the list, and where the line goes is a decision that deserves to be printed next to the share it produces.
LiveFour shares from one table, and which one is right3 min▶
The list these pages use ticks five categories as regretted: Better Opportunity, Career Growth, Compensation, Management/Culture and Work-Life Balance. The idea behind the line is "could we have kept them": those five are reasons an employer might have answered, and the rest are reasons it could not (Retirement, Further Study, Relocation), did not want to (Involuntary/Performance), or cannot classify (Unknown, Personal/Health). Five ticks give 137 of 210 = 65.2 percent.
Every one of those placements is arguable. Relocation is unavoidable unless remote work was on the table; Personal/Health is unknowable unless the exit interview said more. Tick both and the share is 171 of 210 = 81.4 percent. Decide that only the three market reasons count, the ones a counter-offer could have touched, and it is 95 of 210 = 45.2 percent. Keep the five but take the 17 Unknowns out of the base, because they might be anything, and it is 137 of 193 = 71.0 percent. All four are computed on the same constructed rows; none is wrong.
So the deliverable is not a share. It is a share with its list printed beside it, and the list is what a colleague can disagree with. "Regretted attrition is 65 percent" is an assertion; "65.2 percent, counting these five categories as regretted" is a finding, and it tells the reader exactly which tick to argue about.
Self-studyWhere the categories came from, and the row that says "offer I couldn't refuse"2 min▶
Apex's reason_category is itself a coding of a free-text column, and the free text is what the exit interview actually captured: "offer i couldnt refuse", "underpaid for the work", "bad manager", "no growth path here". A coding step sits between those phrases and the eleven categories, and it was a person or a rule that put "offer i couldnt refuse" under Better Opportunity rather than Compensation. Print the raw phrases under each category once a year. If the coding drifts, the regretted share drifts with it, and nobody will see the drift in the category counts. On a real table, the coding rule belongs in the six decisions from deep-dive session 1, as a seventh line.
The regretted rate that fell nine points in a quarter. A people team reported regretted attrition dropping from the high sixties to the high fifties and was congratulated. The list had changed: a new HR system shipped with "Relocation" and "Work-Life Balance" mapped to a non-regretted bucket by default, and nobody had ticked them back. The 210 exits were the same kind of exits. The line had moved. Constructed setting; the mechanism is the figure above.
Eight rates, eight bases, one start date
5 min liveCut the 210 exits by department and divide by each department's headcount on 1 January 2026: Sales 50.0 percent, Customer Service 37.6, Operations 25.2, Marketing 19.7, Engineering 11.3, HR 10.7, Finance 8.3, R&D 7.4. Eight numbers that look like one kind of thing. The base printed under each one shows they are not: Sales is 54 of 108, HR is 8 of 75, and one person leaving HR moves its rate by more than a point.
LiveThe base under every rate, and the rate that is one person wide3 min▶
All eight rates use the same recipe from deep-dive session 1: leavers in the window over headcount on the start date. That makes them comparable in construction. It does not make them comparable in precision. Sales at 50.0 percent is 54 exits over 108 people; one more exit would read 50.9. HR at 10.7 percent is 8 exits over 75; one more exit reads 12.0, one fewer reads 9.3. The HR rate is a number about one person wide, and a ranking that puts HR at 10.7 above Finance at 8.3 is a ranking of noise.
The habit is to print the base under the rate, every time, in the table and on the slide. "HR 10.7 percent (8 of 75)" lets the reader do the one-person arithmetic in their head; "HR 10.7 percent" invites them to compare it with Finance. On a dashboard the same discipline is one row per rate with the numerator and denominator visible, which Foundations session 6 builds without code.
The two big rates are the ones worth a meeting: Sales at 50.0 percent on a base of 108 and Customer Service at 37.6 on 93 are far from the rest and wide enough to survive a person or two. That is what a base tells you: which differences are worth a conversation and which are the arithmetic of small numbers.
Self-studyRegretted by department, and why the table gets thin fast2 min▶
Cross regretted with department and the cells shrink: HR has 8 exits in total, so its regretted count is at most 8 and its regretted share is a fraction of a handful. Two cuts on 210 rows produce a table where most cells are under ten, and a share computed on a cell under ten should be shown as the count, not the percentage. The same limit applies to reason categories by entity, by tenure band, by anything. A useful rule for a people table: below about 20 in the base, print the count and the base and no rate at all; the reader can divide, and will be reminded not to.
"HR attrition has risen 40 percent." The rate had gone from 10.7 to about 15 percent, from 8 exits to 11 on a base of 75. Three people. The headline was arithmetically correct and it triggered a retention programme for a department where three departures in six months is a normal spread. Printing "8 of 75" beside the 10.7 in the earlier report would have stopped the sentence before it was written. Constructed setting; the arithmetic is the figure above.
A benchmark is a rate with a different base and a different clock
5 min live"Is 44.6 percent high?" wants a comparison, and the only open, monthly, national one is the US Job Openings and Labor Turnover Survey. Its quits rate is quits during the month as a percent of employment, seasonally adjusted, all US employers, voluntary quits only. It peaked at 3.0 percent in November 2021, fell to 1.5 in April 2020, averaged 2.32 across 2019 and 2.02 across 2025, and stood at 2.0 in December 2025. Every one of those is a monthly number, and Apex's 44.6 is an annual one built by doubling a half year. They share a word and nothing else until the arithmetic is written down.
LiveMonthly is not annual, and the two-line caveat3 min▶
A quits rate of 2.0 percent means that in that month, quits equalled 2.0 percent of employment. Twelve such months are about 24 percent of employment in quits over a year, if the same people never quit twice and the base never moves. Neither holds exactly, so 24 is a rough scale, not an annual rate, and the honest sentence carries both conditions: "roughly 24 percent a year, multiplying the monthly rate by 12, which assumes no repeat quits and a fixed base". Written that way it is useful. Written as "the US annual quit rate is 24 percent" it is a number nobody measured.
Apex's side has the same shape with a different clock. 22.3 percent for the half year, times two, is 44.6 percent a year, if the second half repeats the first. Now the two numbers can sit on one line: "Apex roughly 45 percent a year (H1 doubled), the US roughly 24 (monthly times 12)". Both are labelled scales, and the labels say why a reader should not subtract one from the other and call it a gap.
Then the bases. JOLTS counts voluntary quits only, across every US employer, in every industry, on the employer's own employment count. Apex's 210 include involuntary exits, retirements and study leave, in one constructed group of four entities. Remove the 22 involuntary, retirement and study exits from Apex and the comparison is a little closer; it is still a different country, a different mix of industries, and a different definition of a person. The benchmark answers "is this order of magnitude unusual", and nothing finer.
Self-studyIndustries, and the cost figure that is not claimed2 min▶
The total hides a spread. In December 2025 the quits rate was 4.4 percent in leisure and hospitality, 1.9 in professional and business services, 1.9 in private education and health, 1.4 in manufacturing; across 2025 the means were 3.92, 2.34, 1.93 and 1.39. A company in hospitality comparing itself with the total is comparing itself with the wrong line, and the API returns the industry line for the same seven lines of code. Which industry Apex "is" is itself a choice: four entities, one of them retail and one logistics, and no single JOLTS series describes the group.
One number that does not appear on any page of the track is the cost of a departure. The figure that circulates, "replacing someone costs 1.5 to 2 times salary", has no measured source; it is attributed to an analyst rather than to a study, and the range SHRM itself publishes is 50 to 200 percent of salary, which is wide enough to mean anything. A cost model can be built for one employer from its own recruiting spend, ramp time and vacancy cover, and that is a finance exercise with the employer's own inputs. It is not a benchmark, and quoting the folk number as one is the fastest way to lose the room when someone asks where it came from.
"Our attrition is twenty times the national rate." The slide compared an annualised 44.6 with a monthly 2.0 and found a ratio of twenty-two. The audience included a finance director who asked what the unit of the 2.0 was, and the meeting did not recover. The same two numbers on the same clock, 44.6 against roughly 24, both labelled with their assumption, would have made a real point: about double, on a rough scale, with a different definition of an exit. Constructed setting; the arithmetic is the build-along's last step.
Apex reasons in pandas, and JOLTS from the BLS public API
★ 22 min · everyone buildsSeven steps: four on materials/apex-staff.csv, three on a live request to the BLS public API version 1, which needs no key and returns ten years of monthly data in one call. Every Apex number is what the code prints on the constructed table. The JOLTS numbers are what it printed on 26 September 2026; BLS revises recent months, so a later fetch can differ by a tenth, and the honest report carries its fetch date.
Load, keep the exits, count the reasons. The eleven categories with their counts are the data; nothing below this step is.
Regretted as a list, printed beside its share. Three lists, three shares, one table. The function takes the list as an argument so that the list is visible in every call.
Department rates with the base printed. The same headcount function as deep-dive session 1, and a table that carries the numerator and denominator on every row.
How wide is each rate? One exit more, one exit fewer. The width is the base talking, and it goes on the slide next to the rate.
Fetch JOLTS from the BLS public API, version 1, no key. One POST with the series ids. The total quits rate id is JTS followed by fifteen zeros and QUR; industry ids carry a six-digit code in place of the first six zeros. Ten years is the most version 1 returns in one call.
Peak, trough, two annual means, and the industries. The printed values are the fetch of 26 September 2026. Print the fetch date with them; BLS revises.
The two clocks on one line, and the number that stays uncomputed. Both annualisations carry their assumption in the string. The cost line prints a refusal, on purpose, so the script cannot be read as having a cost figure in it.
Keep the list in the function signature and the fetch date in the output. regretted_share(ex, FIVE) cannot be run without showing which five. A JOLTS printout with a date on it can be reproduced or explained a year later when the revised series says 2.1 where the slide said 2.0. Both habits cost one line and save a meeting.
Before deep-dive session 4
30 min- Write your own regretted list for your export, as a Python list with a one-line comment per category saying why it is in or out. Run
regretted_sharewith it and with the five-category list, and keep both numbers. - Print the base under every rate in your department table, then add the plus-one and minus-one columns. Mark every row whose width is over two points; those rates get a count on the slide, not a percentage.
- Fetch one more JOLTS series, the industry closest to yours, and re-run step 7 with it in place of the total. Write the comparison sentence with both assumptions in it.
- Bring a funnel. Deep-dive session 4 leaves the leavers and turns to the joiners: applicants, screens, interviews, offers, hires, and the one ratio in hiring that the law has an opinion about.
Three questions
Clear all three and deep-dive session 3 gets stamped in your passport.
1 · Regretted attrition on Apex is 65.2 percent with five categories ticked, 81.4 with seven, 45.2 with three. Which is the correct regretted rate?
All four shares on the figure are computed correctly on the same 210 rows. The number is not the analysis; the line through the eleven categories is.
2 · HR shows 10.7 percent and Finance 8.3. A slide ranks HR above Finance on attrition. What is wrong with the ranking?
The rates share a recipe, not a precision. Sales at 54 of 108 survives a person; HR at 8 of 75 does not. The base under the rate is what says which is which.
3 · The US quits rate was 2.0 percent in December 2025. Apex's annualised attrition is 44.6 percent. A colleague writes "Apex is 22 times the national rate". What is the honest version?
A monthly rate and an annual rate share a word and nothing else until the arithmetic is written. Option C is arithmetic on a different base and clock again; the assumptions still have to be said.
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.
Deep-dive session 3 cheat sheet · pin this
Three sessions on the people who leave; the next is about the people who arrive. Deep-dive session 4 builds a constructed hiring funnel, 400 applicants to 10 hires, computes the conversion at every stage with its base printed, and then the one ratio in hiring that has a regulation attached to it: the impact ratio between two groups' selection rates, the four-fifths rule of thumb from 29 CFR 1607.4(D), and what New York City's Local Law 144 asks an employer to publish about it.