RasiliRasili

Methodology

Every number shows its work.

This page is the contract: the bands, weights and gates below are imported from the same code that computes every score, so what you read here is what runs. Scores are 0–100 integers by linear interpolation between the band edges. When a component's data is missing, it is shown as missing and the remaining weights are re-balanced — a score is never invented. Automated analysis for information & education; not investment advice.

Value — what you pay vs what you get

ComponentWeightScoring band (0 ←→ 100)
P/E vs absolute bands (loss-making scores 0, with the reason shown)25≥25 → 0 … ≤6 → 100
P/B vs absolute bands20≥3.0 → 0 … ≤0.8 → 100
Earnings yield minus the 364-day T-bill rate20spread ≤ −5pp → 0 … ≥ +5pp → 100
P/E vs the counter’s own 3-year average15≥1.5× → 0 … ≤0.6× → 100
Dividend yield vs the counter’s own 3-year average10≤0.5× → 0 … ≥1.5× → 100
Revenue/earnings growth, year on year10≤ −10% → 0 … ≥ +20% → 100

The distinctive component is the T-bill spread: a share's earnings yield must be judged against Kenya's risk-free alternative, taken from our own CBK series. The two own-history comparisons switch on as owned price history accumulates; until then they read "needs history".

Quality — is the business good

ComponentWeightScoring band (0 ←→ 100)
Return on equity250% → 0 … ≥25% → 100
Net profit margin (sector-class bands)20financial: 0 → 0 … ≥30% → 100 · other: 0 → 0 … ≥20% → 100
Net-margin trend over the observed window15≤ −5pp → 0 … ≥ +5pp → 100
Return on assets15−5% → 0 … ≥20% → 100
Debt/equity (financial sector judged on leverage bands of its own)15standard: ≥3.0× → 0 … 0 → 100 · financial: ≥12× → 0 … ≤4× → 100
Revenue stability (worst annual decline)10decline ≥30% → 0 … never declined → 100

Ratios are derived from raw statement lines — net income, equity, assets, revenue — never copied from published summaries. Banks are scored on financial-sector bands where the economics differ (margins, leverage); the page for each counter says which bands applied.

Financial health — will it survive

The Piotroski F-Score: nine binary checks across two consecutive annual statements — profitability (positive earnings, positive operating cash flow, improving returns, cash backing profits), balance-sheet direction (falling leverage, improving liquidity, no share dilution) and efficiency (improving margins and asset turnover). F/9 maps to 0–100 at weight 70; interest coverage (0× → 0 … ≥10× → 100) carries weight 30. Financial-sector counters skip interest coverage — interest is their revenue — and use a capital-adequacy variant of the leverage check. Signals that cannot be observed are excluded and the score normalizes over what was observable, marked as a shorter window.

Dividend reliability — the hero factor

ComponentWeightScoring band (0 ←→ 100)
Payout consistency — FYs paid ÷ FYs observed (design window 5)300/5 → 0 … 5/5 → 100
Current yield (capped — pairs with the Yield-Trap flag)200% → 0 … ≥8% → 100
Coverage — EPS ÷ DPS20≤0.8× → 0 … ≥2.5× → 100
DPS stability — worst annual cut observed15cut ≥50% → 0 … never cut → 100
Payout-ratio sustainability (both directions penalized)150% → 0 … 30–60% → 100 … ≥120% → 0

Nairobi is an income market, so consistency carries the top weight: a counter that has paid every observed year outranks one that paid big once. A high yield alone is not enough — the Yield-Trap flag fires at ≥8% yield with weak coverage or patchy consistency.

Liquidity — can you get out

ComponentWeightScoring band (0 ←→ 100)
Median daily turnover, 90-day window (log scale)40≤KES 10K/day → 0 … ≥KES 100M/day → 100
Share of days with zero trades30≥50% of days → 0 … 0% → 100
Median daily turnover ÷ market capitalisation300bp/day → 0 … ≥10bp/day → 100

Liquidity is also a gate: below 30, no model view is ever shown for the counter — only the fact "thinly traded". A bargain you cannot exit is not a bargain.

Momentum — switched off, honestly

Momentum activates only once we hold at least 182 days (~6 months) of our own daily price history. Until then every surface reads "Building history — since 2026-07-07" and the composite re-balances around it. We do not compute trend signals on history we do not hold.

Composite & sector weights

The composite is the weighted average of available pillars using the sector's profile below (weights re-balance around unavailable pillars). Profiles reflect what drives each sector: financial health for banks and insurers, dividends for REITs and agriculture, liquidity for ETFs.

SectorValueQualityMomentumFin. healthDividendLiquidity
Banking20251025155
Telecommunication202025151010
Manufacturing and Allied25201020205
Insurance20201030155
Agricultural25151020255
Energy and Petroleum20202020155
Construction and Allied25201525105
Commercial and Services202520151010
Investment30201015205
Investment Services202520151010
Real Estate Investment Trusts2510520355
Automobiles and Accessories25251520105
Exchange Traded Funds2510305525

Data confidence & the uncertainty gate

Every counter carries a grade built from three data checks — the grade is how many of them fail. Model views ("appears undervalued / fairly valued / richly priced") appear only at grade A or B and liquidity ≥ 30. Grade C replaces the view with "low data confidence"; grade D hides scores and shows facts only. Thin data or thin trading widens what a counter must clear before anything bullish-looking is displayed.

Confidence grades the DATA, never the investment. Every threshold shown is the exact value the engine uses.

The three checks: Fundamentals age ≤ 12 months · Fundamentals history ≥ 3 years · Price freshness ≤ 2 trading days

Grade A

Fundamentals age ≤ 12 months, Fundamentals history ≥ 3 years, Price freshness ≤ 2 trading days

Every input is current and complete: recent fundamentals, enough history, fresh prices. Nothing is missing or stale.

A grade on the data, not on the investment — it says our inputs are solid, nothing about whether the counter is a good buy.

Grade B

Exactly one of the three checks below fails

One of the three data checks falls short — one input is missing or stale. Everything else is current.

A grade on the data, not on the investment — it says our inputs are solid, nothing about whether the counter is a good buy.

Grade C

Exactly two of the three checks below fail

Two of the three data checks fall short. Model views are withheld and replaced with 'low data confidence' — the data isn't strong enough to support them.

Not a negative view of the counter — a statement that our data is too thin to say much.

Grade D

All three checks below fail, or no financial statements are on file at all

Three checks fall short, or no financial statements are on file at all. Scores are hidden; only raw facts are shown.

Not a warning about the company — it means we don't have enough reliable data to score it.

Archetypes — pattern labels, published thresholds

Archetypes describe patterns in the numbers. They are never recommendations. Every threshold below is the exact value the engine uses — the same number, shown here.

A counter can carry several labels at once. These are independent patterns, not ranked judgments — each simply describes something the data shows.

Income Fortress

Dividend score ≥ 75 AND Financial health score ≥ 60

This counter scores high on dividend strength and sits on financially healthy footing — the two together are what the label points to.

Not a recommendation to buy, and not a promise the dividend continues. It describes two scores being high at once, nothing about future payments.

Stretched Yield

Current yield ≥ 8% AND (Dividend coverage < 1× OR Consistency score ≤ 60)

The yield is unusually high (8%+), and either the company paid out more than it earned (coverage below 1) or its payout history is uneven. A high yield resting on thin support.

Not a warning to sell or avoid, and not a prediction the dividend will be cut. It flags that a high yield is currently backed by weak coverage or inconsistent history — a pattern to understand, then judge for yourself.

Sleeping Compounder

Quality score ≥ 70 AND Value score ≥ 60 AND Liquidity score < 50

Scores well on quality and value, but trades thinly — a counter that looks solid on the numbers yet doesn't change hands much.

Not a claim it will grow, and not advice to buy before others do. It describes strong quality/value scores paired with low trading activity, no more.

Thinly Traded

Liquidity score < 30

This counter trades in low volume — buying or selling meaningful amounts may be hard, and prices can move sharply on small trades.

Not a judgment on the company's worth. It's purely a statement about how much the counter trades.

Radar — pattern discovery, published thresholds

We do not predict. Radar states when a counter matches a named combination of published, factual criteria — nothing about tomorrow's price. Screens 1–3 apply the same uncertainty gate as verdict badges: no counter surfaces on confidence C or D data. Threshold changes are logged decisions (PIN updates), so a card's "why" stays reproducible after the fact.

ScreenPublished criteria
PIN-R-01 Quiet Qualitycomposite ≥ 65 AND confidence ∈ {A, B} AND liquidity below the universe median
PIN-R-02 Filing Divergencecomposite moved ≥ +8 after a processed filing AND price moved < ±2% over the following 5 sessions
PIN-R-03 Yield Trap Watchtrailing dividend yield in the top quartile AND (dividend reliability < 40 OR coverage < 1×)
PIN-R-04 Cross-Asset Arithmeticpublished fee-vs-net-yield and tax-crossover arithmetic across asset classes — no confidence gate (not a company-level score)

Limitations we publish

  • Fundamentals currently derive from a February 2026 research snapshot, labeled as such on every surface, refreshed per company filing as filings are processed.
  • Owned price history began 2026-07-07; history-dependent components state that instead of guessing.
  • Market capitalisation uses a shares-outstanding approximation (net income ÷ EPS), labeled wherever used.
  • A track record section will appear here once the model has one — published with dates, dividends included, costs stated, never as a headline return figure.