Finance
Ohlson O-Score: Nine-Factor Logit Calculation in a Spreadsheet
Calculate a commonly reproduced Ohlson nine-factor linear score and its logistic transform, while distinguishing historical model output from a calibrated current bankruptcy forecast.
A historical model calculation, not an exact current risk forecast
This example evaluates the commonly reproduced Ohlson coefficient set beginning -1.32 -0.407*SIZE. The literature includes different model horizons and specifications; do not relabel this calculation as an exact two-year default probability. The example uses the displayed rounded coefficients, including 0.0757 for CL/CA.
A logistic transform maps the score into 0..1. That mathematical range does not establish calibration for a modern company, industry, country or accounting regime. The two supplied factor vectors are hypothetical arithmetic scenarios, not verified solvent or insolvent issuers.
There is no automatic low-risk, safe or acute-distress classification here. A decision threshold requires validation for the intended population, horizon and error costs. Neither 3.8% nor 50% is a universal credit decision rule.
The input ratios must be prepared consistently from financial statements. This worksheet does not derive them from filings or validate their accounting definitions. In particular, changing asset currency units or the price-index base changes SIZE and therefore the score unless the original model scaling is preserved.
Prepare the nine factors before entering them
B2 is SIZE: the natural log of total assets divided by the GNP price-level index, using the original monetary scale and index convention (1968=100). It is not simply the log of an arbitrary assets figure expressed in millions.
B3=total liabilities/total assets; B4=working capital/total assets; B5=current liabilities/current assets. For this worksheet total assets, total liabilities and current assets must be positive and current liabilities nonnegative. A zero-liability company has undefined FFO/TL in this specification.
B6=OENEG, 1 if total liabilities exceed total assets, otherwise 0. B7=net income/total assets. B8=funds from operations/total liabilities, using the model-specific funds-from-operations definition rather than casually substituting EBITDA or a different cash-flow metric.
B9=INTWO, 1 if both the current and preceding year have negative net income, otherwise 0. B10=CHIN=(NI_current-NI_prior)/(ABS(NI_current)+ABS(NI_prior)). Its defined values lie between -1 and 1. If both incomes are zero the ratio is undefined; any imputation convention must be chosen and documented before using this model.
Unrounded linear score in D2
The guards check numeric entries, basic ratio domains and indicators. OENEG must agree with TL/TA; a two-year-loss flag cannot coexist with nonnegative current NI/TA. They do not replace verification of the underlying statements.
=IF(COUNT(B2:B10)<>9,"Enter all nine numeric factors",IF(OR(B3<=0,B5<0,ABS(B10)>1),"Check leverage, liquidity and income-change domains",IF(OR(AND(B6<>0,B6<>1),AND(B9<>0,B9<>1)),"Indicators must be 0 or 1",IF(OR(B6<>IF(B3>1,1,0),AND(B9=1,B7>=0)),"Indicators conflict with supplied ratios",-1.32-0.407*B2+6.03*B3-1.43*B4+0.0757*B5-1.72*B6-2.37*B7-1.83*B8+0.285*B9-0.521*B10))))Stable logistic transform in D3
Use unrounded D2. Separate positive and negative branches avoid EXP overflow at extreme finite scores. Floating-point results can round to 0 or 1; that is numerical saturation, not certainty of survival or failure. The scenarios produce approximately 0.0383 and 0.6018.
=IF(NOT(ISNUMBER(D2)),D2,IF(D2>=0,1/(1+EXP(-D2)),EXP(D2)/(1+EXP(D2))))Try the example
Use the original values or change them to test your understanding.