# Graham Defensive

# Graham Defensive — scoring rules

Source: Benjamin Graham, *The Intelligent Investor*, chapter 14 ("Stock Selection for the Defensive Investor"), 1973 revised edition. Tested empirically in Oppenheimer (1984), *Financial Analysts Journal*.

Score 0–100 = sum of points below. "Passes all" = full points on every test.

| # | Test | Points | Scoring | Inputs (SEC XBRL concept unless noted) |
|---|---|---|---|---|
| 1 | Adequate size: revenue >= $1B (Graham's $100M, inflation-adjusted) | 5 | pass/fail | Revenues / RevenueFromContractWithCustomerExcludingAssessedTax, latest CY frame |
| 2a | Current ratio >= 2.0 | 15 | linear: 1.0 -> 0, 2.0 -> 15 | AssetsCurrent / LiabilitiesCurrent, latest instant |
| 2b | Long-term debt <= working capital | 15 | linear on LTD/WC: 1.0 -> 15, 2.0 -> 0; negative WC -> 0 | LongTermDebtNoncurrent (or LongTermDebt), AssetsCurrent - LiabilitiesCurrent |
| 2 (unclassified balance sheet) | Company reports no AssetsCurrent / LiabilitiesCurrent (homebuilders, some conglomerates). Fallback: long-term debt <= equity, replaces 2a+2b | 30 | linear: 1.0 -> 30, 2.0 -> 0 | LongTermDebt / StockholdersEquity |
| 2 (utilities) | Debt <= 2x equity, replaces 2a+2b per Graham's utility exception | 30 | linear: 2.0 -> 30, 4.0 -> 0 | LongTermDebt / StockholdersEquity |
| 3 | Positive net income in each of the last 10 fiscal years | 15 | 1.5 per positive year; all ten years must be reported, otherwise the test is insufficient | NetIncomeLoss (or ProfitLoss), CY frames |
| 4 | Dividends paid every year for 20 years | 15 | 0.75 per year with at least one ex-dividend | Yahoo Finance dividend history |
| 5 | EPS growth >= 33%: 3-year average now vs 3-year average 10 years earlier | 10 | linear: 0% -> 0, +33% -> 10 | EarningsPerShareDiluted, CY frames |
| 6 | P/E <= 15 on 3-year average EPS | 15 | linear: 15 -> 15, 25 -> 0 | last close (Yahoo) / mean(EPS last 3 FY) |
| 7 | P/B <= 1.5, or P/E x P/B <= 22.5 | 10 | max of: P/B linear 1.5 -> 10, 3.0 -> 0; product linear 22.5 -> 10, 40 -> 0; equity not positive -> 0 | StockholdersEquity / point-in-time shares outstanding (cover page or CommonStockSharesOutstanding, restated for verified splits after its date, as for market value); only for a filer with no point-in-time count at all, the latest diluted weighted average, flagged on the input row |

Not scored: SIC 60, 61, 63, 64 and 67 (banks, credit, insurers, REITs and holding companies); SIC 62 (brokers, exchanges, asset managers) is scored, so GS, MS and SCHW carry scores and should be read with that in mind. Graham's tests assume an industrial balance sheet.

Known limits: CY frames align fiscal years to calendar years (a FY ending in June 2025 appears under CY2025 or CY2024 per SEC's frame rule). Yahoo dividend history is the only dividend source in v0; XBRL dividends-per-share is loaded and will become the cross-check.

## Freshness, completeness and status (applies to every philosophy)
- A balance-sheet input counts only if its period end is within 18 months (550 days) of the snapshot. Older values mean the company stopped reporting that line; the test is reported as insufficient, never silently scored.
- Long-term debt evidence, in order: LongTermDebtNoncurrent; else LongTermDebt including current maturities (an upper bound); else total liabilities minus current liabilities (an upper bound). An upper bound can only pass the test (bound within the threshold); if it does not settle the test the test is insufficient. With no debt and no total-liabilities tag, insufficient. Zero is never assumed.
- Test 3 needs all ten fiscal years present; test 5 needs all three years on each side; test 6 needs the last three years. Missing years are listed in the component.
- EPS is split-adjusted to today's share count using the recorded split history (Yahoo Finance), and the as-reported value and factor are shown on the input row. EPS values that cannot be per-share USD (|EPS| > 500, or more than 5x away from net income / shares) are dropped as filer tagging errors.
- Status: `ok` = every test computed; `partial: <tests>` = score is the sum of computed tests, `passes_all` is false; `insufficient data (<reason>)` = no score. `data_as_of` is the oldest financial input used; `price_as_of` is separate.
- Test 4 cross-check: for every year with an XBRL `CommonStockDividendsPerShareDeclared` fact, a positive declaration must coincide with a Yahoo ex-dividend date in that year (and a zero declaration with none). Years agree / disagree / have no XBRL fact are listed on the test row; the Yahoo input row is marked verified, mismatch or unverified accordingly.

## Why so few companies pass all seven tests (dated analysis, snapshot 2026-10-15, full eligible universe)

This is a one-off analysis of the full eligible universe on 2026-10-15, before the public grid moved to the S&P 500 active
scope; its counts are not today's. Current counts: /q/stats.json (`graham_pass_all`, `graham_complete`, `graham_partial`
for the active scope; `full_universe.scored_by_philosophy` for the whole universe) and /q/pass-all/graham.json.

Of 4,470 scored companies, 857 have every test computable from fresh filings ("complete") and 4 pass all seven. This is the
classic screen behaving as designed, not a relaxed or broken one:

| Among the 857 complete scores, companies failing… | count |
|---|---|
| Test 6, P/E ≤ 15 on 3-year average EPS | 723 |
| Test 7, P/B ≤ 1.5 or P/E×P/B ≤ 22.5 | 596 |
| Test 4, 20 unbroken dividend years | 576 |
| Test 3, 10 positive earnings years | 489 |
| Test 2a / 2b, current ratio and debt vs working capital | 471 / 455 |
| Test 5, EPS growth ≥ 33 % over a decade | 412 |

Only 11 complete companies fail exactly one test. Graham's own 1970s screens produced similarly short lists; the thresholds
are kept at his values and are not tuned to raise the pass count.

**Partial, not failing.** 2,822 companies are "partial": a test could not be computed because a required year is absent.
The absent years cluster on 2014–2016 (test 5 base period) and on fewer than 10 fiscal years of net income (test 3): these
are mostly companies listed for less than 12 years. Long-listed filers (KO, PG, JNJ, IBM, CAT) hold all 13 years in our
data, so the gaps are in the companies' histories, not in the loader. Partial scores are hidden by default and flagged.

**Unmapped inputs, distinct from both.** 810 eligible companies have no US-GAAP net income fact: foreign private issuers
that tag IFRS (`ifrs-full:ProfitLoss`, e.g. HSBC, Shell), 20-F filers without XBRL financial facts (e.g. ASML), and a few
reorganised registrants whose history sits under a predecessor CIK (ExxonMobil Holdings). They are `insufficient data`
for Graham and Magic Formula; IFRS tags are not yet read. Momentum and Insider score them when prices or Form 4s exist.

## Date semantics, exactly
- **Hard freshness (550 days).** A balance-sheet instant (current assets, liabilities, equity, debt, cash, PP&E, share
  count) is used only if its period end is within 550 days (~18 months). Older → the test is `insufficient`, score `partial`.
- **Stale warning (120 days).** A used current-period input older than 120 days (a missed quarter) is marked `stale` on the
  input row, listed in `stale_inputs`, and the grid shows an amber "stale" word. It is still used.
- **History inputs** (10-year net income, EPS windows, dividend years) are deliberately old and never marked stale;
  `history_from` / `history_through` state the years used.
- **data_as_of** = the oldest current-period input the score depends on (never a history year).
- **price_as_of** = the close used; `price_stale` if older than 7 days. Momentum requires a trade within 10 days and 13
  months of history; its `data_as_of` is the last price date.
- **Insider coverage** = the date Form 4 data is loaded through (`coverage.through`); more than 3 missing days in the
  90-day window makes the score `complete: false`.


## Top 50 (2026-10-26)

- PHM Pultegroup Inc: 97.0 · https://theclaudetrader.com/s/PHM
- EIX Edison International: 96.2 · https://theclaudetrader.com/s/EIX
- ED Consolidated Edison Inc: 92.6 · https://theclaudetrader.com/s/ED
- PEG Public Service Enterprise Group Inc: 92.1 · https://theclaudetrader.com/s/PEG
- LEN Lennar Corp: 90.0 · https://theclaudetrader.com/s/LEN
- SRE Sempra: 89.5 · https://theclaudetrader.com/s/SRE
- OKE Oneok Inc: 88.1 · https://theclaudetrader.com/s/OKE
- CF CF Industries Holdings, Inc.: 86.8 · https://theclaudetrader.com/s/CF
- NKE Nike, Inc.: 86.8 · https://theclaudetrader.com/s/NKE
- PNW Pinnacle West Capital Corp: 86.4 · https://theclaudetrader.com/s/PNW
- CTSH Cognizant Technology Solutions Corp: 85.8 · https://theclaudetrader.com/s/CTSH
- DOV Dover Corp: 85.7 · https://theclaudetrader.com/s/DOV
- CMS CMS Energy Corp: 85.2 · https://theclaudetrader.com/s/CMS
- LULU lululemon athletica Inc.: 85.0 · https://theclaudetrader.com/s/LULU
- SNA Snap-on Inc: 84.5 · https://theclaudetrader.com/s/SNA
- AEE Ameren Corp: 83.5 · https://theclaudetrader.com/s/AEE
- ADM Archer-Daniels-Midland Co: 83.1 · https://theclaudetrader.com/s/ADM
- DTE DTE Energy Co: 83.1 · https://theclaudetrader.com/s/DTE
- AEP American Electric Power Co Inc: 82.3 · https://theclaudetrader.com/s/AEP
- ATO Atmos Energy Corp: 82.3 · https://theclaudetrader.com/s/ATO
- NUE Nucor Corp: 80.6 · https://theclaudetrader.com/s/NUE
- DUK Duke Energy Corp: 79.5 · https://theclaudetrader.com/s/DUK
- AOS Smith A O Corp: 79.3 · https://theclaudetrader.com/s/AOS
- XEL Xcel Energy Inc: 79.1 · https://theclaudetrader.com/s/XEL
- STLD Steel Dynamics Inc: 79.0 · https://theclaudetrader.com/s/STLD
- SO Southern Co: 78.4 · https://theclaudetrader.com/s/SO
- APTV Aptiv Plc: 78.0 · https://theclaudetrader.com/s/APTV
- BF-A Brown Forman Corp: 77.9 · https://theclaudetrader.com/s/BF-A
- CNP Centerpoint Energy Inc: 77.7 · https://theclaudetrader.com/s/CNP
- NI Nisource Inc.: 77.5 · https://theclaudetrader.com/s/NI
- AWK American Water Works Company, Inc.: 77.3 · https://theclaudetrader.com/s/AWK
- FSLR First Solar, Inc.: 76.8 · https://theclaudetrader.com/s/FSLR
- SMCI Super Micro Computer, Inc.: 76.2 · https://theclaudetrader.com/s/SMCI
- SWKS Skyworks Solutions, Inc.: 76.0 · https://theclaudetrader.com/s/SWKS
- AMAT Applied Materials Inc: 75.0 · https://theclaudetrader.com/s/AMAT
- FAST Fastenal Co: 75.0 · https://theclaudetrader.com/s/FAST
- GWW W.W. Grainger, Inc.: 75.0 · https://theclaudetrader.com/s/GWW
- KLAC KLA Corp: 75.0 · https://theclaudetrader.com/s/KLAC
- KMI Kinder Morgan, Inc.: 75.0 · https://theclaudetrader.com/s/KMI
- RSG Republic Services, Inc.: 75.0 · https://theclaudetrader.com/s/RSG
- SCHW Schwab Charles Corp: 75.0 · https://theclaudetrader.com/s/SCHW
- WST West Pharmaceutical Services Inc: 75.0 · https://theclaudetrader.com/s/WST
- EXC Exelon Corp: 74.6 · https://theclaudetrader.com/s/EXC
- TXN Texas Instruments Inc: 74.5 · https://theclaudetrader.com/s/TXN
- HRL Hormel Foods Corp: 74.4 · https://theclaudetrader.com/s/HRL
- ETR Entergy Corp: 74.3 · https://theclaudetrader.com/s/ETR
- EVRG Evergy, Inc.: 73.9 · https://theclaudetrader.com/s/EVRG
- TECH Bio-techne Corp: 73.5 · https://theclaudetrader.com/s/TECH
- ES Eversource Energy: 73.1 · https://theclaudetrader.com/s/ES
- LII Lennox International Inc: 72.7 · https://theclaudetrader.com/s/LII