Appearance
DuPont Decomposition
Return on equity is the most-watched single-line summary of capital efficiency, but it obscures more than it reveals. A company can expand ROE by becoming more profitable, by sweating its asset base harder, or by adding financial leverage — and these have very different implications for durability. DuPont decomposition unwraps the number into its driving components so that each lever can be studied separately.
ROE: the three-factor decomposition
The classic three-factor identity expresses ROE as the product of net margin, asset turnover, and the equity multiplier:
The identity holds exactly: Revenue and Assets cancel when the three fractions are multiplied out, leaving Net Income / Avg Equity — the definition of ROE.
Reading the three factors:
- Net Margin — how many cents of profit survive each dollar of sales. Pricing power, cost discipline, and tax efficiency all flow here.
- Asset Turnover — how many dollars of revenue each dollar of assets generates. Asset-light businesses (software, consulting) score high; capital-intensive ones (utilities, semiconductors) score low.
- Equity Multiplier — assets per dollar of equity, i.e., one plus the debt-to-equity ratio. High multipliers amplify both profits and losses; leverage-driven ROE expansions are structurally fragile.
EqtyTrk surfaces ROE alongside its two independently computable components — net margin and total asset turnover — in the DuPont card. The equity multiplier is derived from the other two and the headline ROE.
ROIC: a leverage-neutral view
ROE rewards leverage mechanically, which makes it hard to compare a balance-sheet-light company against a leveraged one. Return on invested capital strips out financing choices:
Where:
NOPAT uses operating income (EBIT) as the pre-tax proxy so that the numerator is independent of the capital structure. EqtyTrk applies a statutory tax rate of
The ROIC formula implies a two-factor decomposition:
Both factors are available as standalone metrics. Together they identify whether ROIC strength comes from margin (pricing and cost) or from capital velocity (lean asset management).
The lever tree
Combining both framings produces a lever tree:
ROE
├── Net Margin (income quality)
│ └── Gross Margin (pricing power)
│ └── EBITDA Margin (operating efficiency)
├── Asset Turnover (balance-sheet productivity)
└── Equity Multiplier (financial leverage)
ROIC (leverage-neutral parallel)
├── NOPAT Margin (operating + tax efficiency)
└── Capital Turnover (invested-capital velocity)The DuPont card in the Attribution view presents roe, net_margin, and total_asset_turnover as the headline levers (income levers), and roic, roa, and roce as the returns-on-capital levers (balance levers).
Peer context
Lever values in isolation say little. EqtyTrk computes each lever for the subject company and for every peer in the selected peer set, then shows the subject value alongside the peer-set median and top quartile. The gap between subject and peer median reveals which levers are below industry norms and therefore the highest-potential improvement opportunities.
Limitations
- Single fiscal year. The DuPont snapshot uses the latest completed fiscal year. Margin and turnover can shift significantly intra-year for seasonal businesses; cyclical companies should be assessed over a full cycle.
- DEFAULT_TAX_RATE = 0.21. EqtyTrk uses the U.S. statutory rate as a universal default. Foreign-domiciled companies, companies with significant deferred-tax assets, and companies that benefited from tax-loss carryforwards may have effective rates far from 21%. The resulting NOPAT, and thus ROIC, will be over- or understated for those companies.
- Negative equity. When average equity is negative (common in heavily leveraged or share-repurchase-heavy companies), the ROE formula produces a result that is arithmetically correct but directionally misleading. ROIC, which uses invested capital rather than book equity, is the more informative metric in these cases.
- Invested capital with no cash. The formula subtracts cash from invested capital as an approximation of "operational" capital. For financial-sector companies, cash is an operating asset, not idle float; ROIC will be overstated for banks, brokers, and insurers.
Implementation notes
roe(),roa(),roic(),net_margin(),total_asset_turnover()insrc/eqtytrk/metrics/ratios.pyDEFAULT_TAX_RATE = Decimal("0.21")defined at module level in the same fileroic()averages invested capital over the current and prior FY end using_prior_fy_end("equity", ...)as the anchor; the prior-year lookup allows a ±60-day windowDuPontResponseschema and/v1/companies/{ticker}/attributionendpoint insrc/eqtytrk/api/routers/companies.py- Frontend rendering:
frontend/src/components/AttributionView.tsx