How this calculator is built
This calculator is based on Dean Oliver's Four Factors Revisited by Dr. Jirka Poropudas and Topi Halme. Thank you to them for publishing the paper and laying out a possession-extension view of offense that is much easier to test interactively than a black-box rating.
The paper's core idea is that offensive rating can be decomposed into a turnover-survival term, an efficiency term, and a possession-extension term. This page keeps that same structure, then adapts a few pieces so it matches the inputs we actually track in databallr and the controls we want users to manipulate directly.
The paper builds offense from possession mechanics. We keep that idea, but because databallr already works with actual possession-rate style turnover inputs, we do not need to reconstruct turnovers from box-score proxies inside the calculator.
In practice that means the live page uses xSHOT = 1 - TOV%. Total turnover rate is treated as the possession-ending tax, and this sandbox does not separately back out second-chance turnovers before applying that term.
The field-goal recycle term is split into missed-two and missed-three branches. Instead of one undifferentiated offensive rebound input, we expose 2P OREB% and 3P OREB% separately.
Overall FG OREB% is still available as a convenience dial, but it is derived from the current shot mix, miss rates, and the split rebound inputs. That lets the rebound value move correctly when the user changes shot profile.
We also model FT OREB% explicitly. Missed possession-ending final free throws create their own recycle term, implemented as FT OREB% x (1 - FT%), while the free-throw possession-ending weight stays on the paper-style 0.43 term.
EFG% and TS% are derived readouts, but the page also exposes them as master controls so users can move cleaner concepts instead of only raw sub-inputs.
In the UI, EFG% writes back as +1.0 2P% and +0.6667 3P%. That preserves the made-three premium while keeping the control intuitive.
TS% is also derived from the current FT Rate and FT%, but the master dial is intentionally handled as a simple control rule: +1.0 2P%, +0.6667 3P%, and +1.0 FT%. Direct edits to FT Rate or FT% still flow back into the live TS readout dynamically.
The goal of this page is not to reproduce every line of the paper one-for-one. The goal is to keep the paper's decomposition logic visible while turning it into a hands-on lab with inputs that are easy to scan and easy to perturb.
So the page follows the paper on the big structural idea, then makes implementation choices where databallr has richer tracked stats or where a cleaner UI control is more useful than a fully implicit solve. That is why you see split 2P / 3P rebound controls, explicit FT ORB handling, possession-rate turnovers, and convenience master dials for EFG% and TS%.
