Methodology

Model v9.2.70 · Last updated 12 May 2026

Model output, not investment advice. NairAlpha is not a licensed investment advisor. Every score, signal, ranking, and verdict on this platform is a quantitative model output for informational and educational use, governed by the conventions documented below and the Terms of Service. Past performance and walk-forward results do not guarantee future returns.

1. Universe

The model scores a canonical 33-ticker NGX universe defined in code asSECTOR_MAP. Membership is intentionally narrow: each ticker must have ≥ 60 days of liquid price history, a verifiable sector classification, and an active listing on the Nigerian Exchange as of the most recent ingestion run. Tickers that delist, get acquired, or fall outside the liquidity floor are removed from SECTOR_MAPand their per-ticker rows are atomically purged across nine downstream tables to prevent stale rows surfacing in any read path.

The 33-ticker boundary reflects deliberate selectivity, not technical constraint. Frontier markets carry meaningful idiosyncratic risk per name; concentration on the well-covered, deeply-traded subset of NGX produces more defensible signals than blanket coverage.

2. Factor stack

The composite alpha score is a weighted blend of nine factors. Weights were rescaled uniformly by 0.9× in v9.0.0 to make room for two alternative-data signals; the residual 10pp of weight is allocated to MD&A NLP scoring and an earnings-surprise factor. The full set sums to 1.000.

FactorWeightSource
Momentum22.5%12-month price trajectory with skip-month
Relative strength18.0%Cross-sectional rank vs NGX universe
Value13.5%Sector-aware P/E, P/B, dividend yield vs NTB hurdle, two-stage DDM for banks
Liquidity13.5%20-day median NGN volume
Volatility10.8%20-day Garman-Klass realised volatility
Quality9.0%Six-component sector-aware composite + EPS-trajectory gate
MD&A NLP8.0%120-phrase Nigeria-tuned lexicon, section-weighted
Mean reversion2.7%Short-horizon excess-return reversal
Earnings surprise2.0%Post-earnings drift from BEAT/MISS events

Sector-aware components mean a bank's P/B is scored against the banks median, not the consumer-staples median. The two-stage dividend discount model is applied only to the Banking sector, where the Gordon-growth denominator goes pathological at the ROE × retention levels Nigerian banks routinely produce. Damodaran two-stage DDM is the standard remedy.

3. Overlay pipeline

After the factor composite is computed, alpha is adjusted by six overlay layers exposed at /api/factors.overlays:carry, fx_direction, mie,pai, regime, and seasonal. Each layer captures information the underlying factor inputs cannot. The pipeline is strictly sequenced and the cumulative absolute adjustment across all six layers is capped at 20 percentage points.

  1. Carry penalty (0 to −8pp) — applied uniformly when NTB 364D exceeds the model's dynamic hurdle threshold. Reflects the bar that risk assets must clear to justify substitution away from a risk-free yield. Live values exposed at/api/factors.overlays.carry.{ntb_364d, threshold_pct, penalty_pp}.
  2. FX direction overlay (±10pp) — applied uniformly to the universe from a seven-signal NGN composite (NAFEM trajectory, reserves drift, NTB / NAFEM divergence, oil-led FX pressure, remittance shocks, IMF / fiscal posture, regime carry). Asymmetric: depreciation penalty is steeper than appreciation premium because NGN weakness historically hurts equity multiples more than strength helps them. Exposed at /api/factors.overlays.fx_direction.
  3. Macro Intelligence Engine (MIE) — five sub-signals (FAAC allocations, NIBSS payment activity, MPC outcome surprise, INSIDER director-dealings disclosures, BPP procurement activity) blended into a per-ticker composite. Confidence-gated: when completeness is low across sub-signals, MIE's contribution decays toward zero rather than fabricating a signal. Exposed at/api/factors.overlays.mie withactive_signals and confidence_gated fields.
  4. Port Activity Index (PAI) — AIS vessel tracking (aisstream.io), freight cost (FRED Brent), NPA throughput, CBN FX utilisation, and news sentiment (RSS feeds). Dynamic confidence ceiling based on per-source freshness; PAI cannot exceed its ceiling regardless of raw signal strength. Exposed at/api/factors.overlays.pai.
  5. Regime gating — final signal labels (HIGH CONVICTION / OVERWEIGHT / NEUTRAL / UNDERWEIGHT) are reassigned per the current HMM regime after all alpha adjustments complete. Three regimes (BULL / TRANSITION / BEAR) carry distinct conviction thresholds (table below). Exposed at/api/factors.overlays.regime.{active, thresholds}.
  6. Seasonal — per-month return distribution from the available NGX history applied as a uniform tilt. Disclosed withdata_years and methodology fields so consumers can see how many history years feed the current month's tilt. Exposed at /api/factors.overlays.seasonal.

4. Regime gating

Final signal labels (HIGH CONVICTION / OVERWEIGHT / NEUTRAL / UNDERWEIGHT) are reassigned per current HMM regime after all overlay adjustments complete. The regime is computed monthly from a three-state hidden Markov model trained on NGX market breadth + ASI return observations.

RegimeHIGH CONVICTIONOVERWEIGHTNEUTRAL
BULL≥ 72≥ 57≥ 38
TRANSITION≥ 75≥ 60≥ 40
BEAR≥ 82≥ 65≥ 45

The bear-regime bar is the highest. Asymmetric thresholds reflect that conviction in a contracting tape requires more evidence than the same conviction in an expanding tape. When the HMM's breadth coverage falls below 50%, a confidence haircut is applied and the regime uncertainty flag fires; clients should treat regime-conditional labels with appropriately reduced weight when this flag is visible.

5. Source authority — CFA V(A) / V(B) compliance

Every factual datapoint displayed on the platform carries a machine-classified source authority tier. The classification is shared across the codebase (see scrapers/source_authority.py) and surfaced as a coloured badge on every research-grade panel.

  • PRIMARY — direct exchange filing (NGX X-Filings, issuer IR page, regulator publication). Satisfies CFA Standard V(A) reasonable basis without further corroboration.
  • SECONDARY — verified news outlet (Nairametrics, Punch, Vanguard, BusinessDay, Reuters, Bloomberg, others on a maintained trusted-outlet registry). Satisfies V(A) when the value corroborates a primary source.
  • PROMOTED — hand-curated override from offline verification. Reviewed by the operator and accepted into the override registry; subject to periodic re-verification.
  • TERTIARY — single intel-feed mention without corroboration. Routed to the corroboration staging table and quarantined from the display surface until a SECONDARY-or-higher source agrees within 5% tolerance.
  • SEEDED — bootstrap hardcoded value pending primary capture. Flagged in the UI; will be replaced when the auto-capture pipeline ingests the underlying release.

Ratio metrics (P/E, ROE, P/B, net margin) inherit the weakest authority of their constituent inputs. A ROE computed from FY2025 P&L tagged TERTIARY against FY2024 balance sheet tagged PROMOTED renders as TERTIARY, with the mixed-period amber pill explaining the cross-period mismatch.

6. Audit trail — CFA III(D)

Every supersession of a factual value is preserved in the earnings_actuals_history table via a database trigger. When a captured value is corrected, restated, or superseded by a higher-authority source, the prior row is copied into history with the superseding source, timestamp, and reason recorded. The trigger fires on every UPDATE and DELETE; no application-level code path can bypass the audit trail.

This satisfies CFA Standard III(D) Performance Presentation by guaranteeing that any prior value displayed on the platform on a given date can be reconstructed from the audit trail on request.

7. Rebalancing cadence

The rebalancing engine runs on a three-tier policy:

  • Tier 1 — Full rebalance: quarterly (March / June / September / December). 30% per-name turnover cap, cost gate requiring alpha > 1.5× round-trip transaction cost.
  • Tier 2 — Tactical: monthly (second Tuesday). 10% turnover cap, momentum-delta threshold of 15 points. A 10-day quarterly blackout around the Tier 1 window prevents whipsaw.
  • Tier 3 — Event-triggered: 24-to-48-hour response window for CBN MPC moves ≥ 50bps, HMM regime flips, Global Macro Flag (GMF) red flags, Brent ± 15%, sovereign rating actions, and circuit-breaker clusters.

Continuous monitors flag positions for the next eligible window when absolute score drift exceeds 20 points or position weight drifts more than 5pp from target. Drift signalling does not auto-rebalance; it surfaces flags for operator review.

8. Data integrity guards

Several architectural guards constrain the data the model can ingest:

  • Circuit breaker on factor-engine availability with a last-known-good cache and three-tier degradation (CLOSED → OPEN → EMERGENCY → CATASTROPHIC). API responses include a_circuit_breaker field whenever stale or degraded data is served, so the UI can render the appropriate banner.
  • Data anomaly detector pre-validates every price and macro write against historical bounds (price range, daily-return cap, volume-spike threshold, macro-series sanity range). Anomalous values are rejected at the boundary, not flagged after persistence.
  • Corroboration gate at the earnings-capture entry point routes TERTIARY-tier captures into a staging table that never feeds the display surface. Promotion requires either a SECONDARY+ source agreement within 5% or explicit operator action.
  • Anti-broadcast guard on the intel-feed parser rejects single-value-to-multiple-ticker attribution and validates per-ticker proximity in the source text before any write.

9. Backtest disclosure

Walk-forward backtest results published on the Track Record page report full error history including exception periods. Returns are computed net of frictional cost assumptions and benchmarked against the All-Share Index (ASI). Backtest construction uses point-in-time universe data drawn from the sector_map_history audit table to avoid survivorship bias. Backtest annualised metrics carry a ±300% sanity bound; cumulative metrics are uncapped on the grounds that legitimate multi-year frontier-market alpha can and does exceed 100%.

10. Disclaimers

Model labels follow strict regulatory conventions: NairAlpha uses HIGH CONVICTION / OVERWEIGHT / NEUTRAL / UNDERWEIGHT. The platform does not publish BUY / SELL / HOLD recommendations, price targets, or any language that constitutes investment advice. All quantitative outputs are model-derived; they are not personalised, do not consider an individual's circumstances, and are not a substitute for a licensed adviser. See the Terms of Service for the full disclosure framework.

Versioning

Methodology version tags this document follows the same version sequence as the production model. See the changelog for the full release history of material methodology changes.