Score distribution

Score Ticker Company Sector Pillars
Loading…

Methodology

What this is

The Warren Buffett Quality Score is a quantitative interpretation of modern Buffett's quality-investing criteria, applied uniformly to Oslo Børs stocks. The score ranges from 0 to 100 across five pillars: profitability, financial strength, earnings quality, capital allocation, and valuation. It is not a recommendation, not a complete analysis, not investment advice. It is a screen that highlights where a stock passes or fails specific quantitative thresholds Buffett himself has cited.

The framework

Stability rule: a year-over-year change strictly less than -25% breaks stability. A clean -25.00% decline still passes.
Risk-free rate currently used: 3.50% from data.json.referenceRates.bondYield10Y (the project's weekly-refreshed reference value). The actual source used is recorded in each record's metadata.

Design decisions and reasoning

Scope and approach

  1. Per-stock score, not the macro Buffett Indicator. User intent was screening individual stocks, not market-timing.
  2. Modern Buffett (quality compounders) over Graham-style deep value. Reflects what Berkshire actually does today.
  3. Absolute thresholds, not relative ranking. Faithful to Buffett's actual quoted numbers; avoids the "best of a bad universe" problem.

Data and universe

  1. Free yahooquery, no paid sources. Preserves the project's zero-cost setup.
  2. 4-year window (target was 10). Yahoo's data ceiling delivered 4 years reliably; we accepted rather than paying for FMP.
  3. Stocks with fewer than 4 complete years excluded entirely. Better to skip than score on partial data.
  4. Financials sector excluded entirely. Debt/Equity and gross margin are meaningless for banks and insurers; would need a separate formula.

Methodology

  1. Stability via max YoY decline ≤ -25%, rather than coefficient of variation. Simpler, easier to explain.
  2. BVPS-or-buyback for the capital-allocation pillar. Recognises buybacks as legitimate value return; matches how Buffett actually thinks about it.
  3. All-or-nothing per criterion. Matches Buffett's consistency ethic; binary checks are simpler to explain.
  4. Qualitative dimensions ignored or proxied. Cannot mechanise moat or management quality directly; gross margin stability and buyback/dividend discipline serve as imperfect proxies. Circle of competence and sector philosophy are not approximated at all.
  5. No DCF, no margin of safety. Too sensitive to assumed growth and discount rates; we use earnings yield versus risk-free bond as a simpler gate.

Inputs

  1. Norwegian 10Y bond yield as risk-free rate, three-tier fallback (Yahoo ^NO10YT-X, then data.json.referenceRates.bondYield10Y, then hardcoded 4.0%). Right reference for a Norwegian investor with graceful degradation.
  2. Reuse existing dividend metrics from data.json rather than recompute. Avoids divergence between subsystems.

Output and presentation

  1. Full per-criterion breakdown in buffett_scores.json. Transparency is the point; users should see why a stock scored what it did.
  2. Side button on main heatmap, no in-card badge. Subtle integration appropriate for an experimental subsection.
  3. Separate parallel pipeline (buffett_fetch.py, buffett_score.py). Can fail or run slowly without breaking the main heatmap.
  4. English-only for v1. Translation doubles content work; experimental status makes English-first defensible.
  5. Histogram, radar charts, and ranked table with expand-in-place drill-down. Visual storytelling for a methodology-heavy page; consistent with the main heatmap's behaviour.

Deviations from Buffett's actual approach

  1. 4-year window instead of Buffett's preferred 10+. Yahoo's free fundamentals API does not reliably return more. We cannot see consistency through a full economic cycle, which is central to his philosophy.
  2. The window itself is unusually distorted. 2022 to 2025 captures the Russia/Ukraine commodity spike, salmon price boom, defense ramp, and elevated shipping rates, all favorable phases for cyclicals. Names like Wallenius Wilhelmsen, Höegh Autoliners, and Mowi score high partly because the window catches the good half of their cycle. A longer window would likely produce very different scores.
  3. Qualitative dimensions approximated by quantitative proxies. Buffett assesses moat (brand, scale, network effects), management quality (capital allocation skill, integrity), and circle of competence through direct judgment. We approximate the first via gross margin stability, the second via buyback and dividend discipline. Circle of competence is not approximated at all; every business is scored uniformly.
  4. No DCF intrinsic value, no margin of safety. Buffett demands a margin of safety against estimated intrinsic value. We do not compute one. DCF is too sensitive to assumed growth and discount rates that drive the entire answer; we use earnings yield versus Norwegian 10Y bond as a simpler valuation gate.
  5. No sector philosophy. Buffett historically avoids commodity producers, airlines, and capital-intensive cyclicals on principle, regardless of how the metrics look. Our score does not apply this filter.
  6. Financials excluded entirely. Banks and insurers cannot be scored with this formula; D/E and gross margin are meaningless for them because their business model is leverage. Buffett invests in banks with great success; this is a data-pipeline limitation, not a Buffett-philosophy choice.
  7. All-or-nothing per criterion. Each criterion passes fully or scores zero, no partial credit. Matches Buffett's consistency ethic but is harsh on edge cases.
  8. Absolute thresholds from US large-cap norms applied to a Nordic universe. Buffett's rules (ROE ≥ 15%, GM ≥ 40%, net margin ≥ 10%, D/E ≤ 0.5) come from analyzing US large caps. We apply them unchanged. Most OSE names fail several criteria; this is by design, not by error.
  9. 19 names excluded by data availability. Tomra, Schibsted, Crayon, Volue, Pexip, and others did not return 4 complete years via Yahoo. Their absence is data, not judgment.

Coverage and exclusions

Of 128 candidate Oslo Børs stocks, 74 are scored. The other 54 fall in three buckets: