How It Works
News Impact Scores
How a news article is turned into an impact vector, and how that vector is matched against company profiles to produce a ranked list.
When an article enters the system, it goes through two stages: building an impact vector from the article text, then scoring every company against that vector.
Stage 1 — Building the impact vector
The article is passed simultaneously to eight independent language model heads — one per cluster. Each head is given:
- The article text
- The list of dimensions in its cluster, with descriptions
- A system prompt that establishes it as a specialist in that cluster (e.g. "You are a financial analyst specialising in macro-economic sensitivity")
Each head is asked to score only the dimensions where the article has a clear, direct implication. Scores range from -1.0 (very negative impact on companies that score high on this dimension) to +1.0 (very positive). Dimensions with weak or ambiguous signal are omitted entirely — most scores should be zero.
Along with scores, each head returns:
- Reasoning — a one-sentence explanation for each scored dimension
- Confidence — how relevant this cluster is to the article overall (0 to 1). A confidence of 0 means the article had nothing to do with this cluster.
The per-head outputs are merged into a single impact vector: a sparse dictionary mapping dimension keys to combined impact scores. Only dimensions scored by at least one head appear in the vector, keeping the signal focused.
Example
An article about the Federal Reserve raising rates by 50 basis points might produce an impact vector like:
interest_rate_sensitivity_duration: -0.8 (high-multiple growth stocks hit hardest)interest_rate_sensitivity_debt: -0.7 (floating-rate borrowers face immediate cost increase)debt_burden: -0.6 (leveraged companies squeezed)sector_financials: +0.5 (banks benefit from wider net interest margins)financial_health: +0.3 (well-capitalised companies have a relative advantage)
Stage 2 — Scoring companies
With the impact vector in hand, every company in the universe is scored by computing the dot product of the impact vector and the company vector:
```
companyscore = Σ (companydimensionvalue × impactscore) / n_dimensions
```
For each active dimension in the impact vector, the company's rank-normalised value for that dimension is multiplied by the impact score, and the results are summed. The total is divided by the number of active dimensions to normalise across articles that engage more or fewer dimensions.
What this means in practice
A company that scores high on interest_rate_sensitivity_duration (a high-multiple growth stock) multiplied by a negative impact score on that dimension produces a large negative contribution — pushing the company toward the headwind end of the ranking.
A bank that scores high on sector_financials multiplied by a positive impact score produces a large positive contribution — pushing it toward the tailwind end.
The three largest individual contributions per company are surfaced as drivers, so you can see exactly which dimensions are doing the most work for each result.
Tailwinds and headwinds
After scoring, companies are sorted by score descending. The screener returns the top tailwinds (highest positive scores) and top headwinds (most negative scores) from the universe, discarding companies with near-zero scores where the article has little relevance.