Attrition root-cause attribution
Links exits to manager, team, compensation, and role signals to attribute drivers quantitatively rather than anecdotally.
HR processPlanSourceSelectHireOnboardDevelopRewardExit
By Don, DoneThat’s AI coach · updated
Cite the exit file, the signal vintage, and the grouping rule
An attribution is a cell you can audit. Before a driver name appears in a pack for HRBP or a director, the cell must cite three things: which exit file rows it used, the vintage of every signal in the join, and the grouping rule that put those rows together. Missing any of the three means the cell is not an attribution. Hold it back.
Vintage is the as-of date of the fact, not the date the pipeline ran. Manager assignment in the resignation week, a compensation snapshot from the last cycle, and a pulse that closed after the person had already accepted another offer are different objects. An attribution with no vintage is the first failure mode: it looks quantitative and cannot be reconstructed. If you cannot stamp vintage, drop the signal. Do not quietly use "latest."
Do not invent an attrition percent to complete a slide. A rate is allowed only when the grouping rule says a rate is in scope and the cell is not thin. Otherwise the rate field stays blank. People analytics still briefs from the cites that remain.
Load the exit file, then join signals at a declared vintage
Load exits first. You need identity, last day or resignation date, org node, manager of record at a stated assignment vintage, role family and level, location or work pattern, and any existing regrettable flag. Keep regrettable as a filter or a parallel tag, not as a root cause. If that flag comes from a separate model, require that model's own cites before you use it; regrettable-attrition classifier is a sibling job, not a driver column.
Then load the four signal families you will attribute against. Each field carries a vintage.
Manager: who the manager was at the assignment vintage you declared, span at that date, tenure in the seat, and whether the manager changed during notice. Do not default to current manager in the HRIS. Current is a different person than the manager of record at exit.
Team: membership at a dated roster, headcount movement before the resignation window, new-hire mix, and any survey or pulse item whose close date is before the exit. Items that closed after the exit are out. They describe the aftermath, not the decision.
Compensation: band, range position, last increase, and the cycle snapshot dated to the decision window. A snapshot taken after the counteroffer conversation is contaminated. When pay is the hypothesis, hold role and location as close to constant as the grouping rule allows, and treat compensation flight-risk model as another dated signal source, not as a verdict.
Role: job family, level, time in role, and mobility constraints that were true before resignation.
Workday, Visier, Culture Amp, and Lattice, as a class, are where these fields usually live: assignment and pay in the HRIS, workforce analytics extracts, and engagement or performance surveys. Pull fields, stamp vintage, and stop. Do not accept a vendor driver or blended index that has no as-of date and no grouping rule you can restate.
Do not paste a risk score from predictive attrition forecasting into the attribution cell. Forecasting ranks people who have not left. Attribution explains exits that already happened, under a grouping rule, with cites. Mixing the two turns a probability into a fake root cause.
Write the grouping rule so a cell can be reproduced
The grouping rule is the sentence that defines the cell: same manager of record at assignment vintage, same team roster date, same compensation band, same role family, or a declared intersection. Put the rule in the cell, including the minimum n for showing a rate or a ranked driver list.
Intersections go thin immediately. Manager by team by band by role will produce many cells with one or two exits. Those cells may still list cited facts per exit. They may not rank drivers or print a rate. If the rule does not say that, change the rule before you publish.
Keep grouping and signal distinct. If the cell is same role family and location, compensation is a signal inside the cell. If the cell is same manager, role held constant, the manager ID is the grouping key, not the finding. Writing the manager's name in the title of the chart is how auto-blame starts.
Themes from exit interview thematic analysis can sit next to a cell as narrative. They need a join to the same exit file rows. A theme with no row IDs and no interview vintage is not an attribution. It is a quote pile.
Leave thin cells blank
A cell is thin when you cannot defend a comparison: n below the rule's floor, a required signal with no vintage, manager assignment that flipped during notice and was not declared, or a pay snapshot from after the offer was accepted.
Empty stays empty. Do not fill the rate from the company average. Do not reuse last year's percent. Do not average neighboring teams to smooth a small n. Each of those moves invents an attrition percent the exit file does not support.
What a thin cell can still carry: pointers to the exit rows, the vintages you do have, the grouping rule, and blanks where rate and driver rank would go. Blank is a valid output. A filled cell with no cite is not.
If engagement vintage fails, the engagement driver is blank even if pay and time-in-role cites are complete. Partial attribution is allowed. Completeness theater is not.
People analytics briefs; the model does not issue a manager verdict
Do not auto-blame a manager. A grouping key that happens to be a manager ID is not a performance conclusion. Span, team churn, pay mix, and role structure can occupy the same cell. The brief has to separate what was cited from what was absent.
Treating the model as a manager verdict is the second failure mode. The moment a slide says the manager is the root cause, the conversation leaves analytics and enters performance and legal. Your artifact should say: these exits, this assignment vintage, this grouping rule, these cited signals, these blanks. It should not name a person as the cause.
People analytics still briefs. The pack is evidence: file pointers, vintages, rule, blanks, and the questions those blanks create. Judgment (skip-level, span review, pay action, or no action) belongs in the brief, with HRBP, not in a ranked root-cause column.
One team, cited drivers, blanks where the join fails
A people-analytics lead takes a year of exits in one product org. The grouping rule is written first: director held constant, role family held constant, cells by manager of record as of the resignation week. Cells below the stated floor show facts only, never a rate.
In one manager cell, several exits sit in the same role family. Compensation snapshots exist with a cycle vintage that predates notice, so range position and last increase can be cited. Team pulse items for that group closed after two of the resignations, so engagement is dropped from the cell rather than mixed. Time-in-role is dated to resignation week and can be cited. The cell leaves the engagement driver blank because vintage fails. It does not print a team attrition percent, because the cell is under the floor in the rule.
In the next manager cell there is a single exit. The row lists exit file ID, assignment vintage, compensation vintage, and role. Driver rank is blank. The pack does not present that manager as the cause.
The lead walks HRBP through the pack: what is cited, what was left empty, and which sentences are off-limits in the business review. That is operational attribution. If a cell cannot show the exit file, the signal vintage, and the grouping rule, it does not ship.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first