Velocity is the most consequential number on Steek. It decides whether a trend appears in the rising bucket on the live index, what its rank is in the top-20 list, and whether it shows up in weekly briefings. This page documents how that number is produced.
The intuition
Velocity answers one question: are new corroborating signals arriving faster than this trend's own baseline? A positive score means yes; a negative score means no. The score is normalized to -100..+100 so that trends in different signal-density regimes can be compared on the same axis.
The formula
For a trend T at time t:
velocity(T, t) = clip(
100 * (W_recent(T, t) - W_baseline(T, t)) / W_baseline(T, t),
-100, +100
)where:
W_recent(T, t)is the weighted sum of signals attributed toTin the trailing 7 days.W_baseline(T, t)is the weighted, 7-day-equivalent average over the trailing 90 days.cliptruncates to the visible range without obscuring extreme acceleration.
Per-signal weight
Each contributing signal s contributes:
w(s, t) = base_weight[type(s)]
* source_authority(s)
* recency_decay(s, t)
* entity_diversity_bonus(s)Base weight
Set by signal type. Pricing changes, regulatory documents, and earnings disclosures carry the heaviest base weights because they require organizational alignment to ship and are rarely undone. Single research papers carry the lightest base weight because their predictive power for trend persistence is historically low. Full per-type table on the taxonomy page.
Source authority
A primary-source URL — a frontier-lab release page, an arXiv paper, a 10-Q filing, an EU Commission document — gets source_authority = 1.0. A reputable secondary report gets a fraction. Aggregator content gets near zero. The model assumes that the further you are from the source, the more compression bias has been introduced.
Recency decay
Signals decay with a 30-day half-life:
recency_decay(s, t) = 0.5 ^ ((t - observed_at(s)) / 30 days)A signal one month old contributes half as much to current velocity as one observed today. After three months its contribution is approximately 12%. The half-life is calibrated against the observed persistence of historically promoted trends.
Entity-diversity bonus
Three signals from one entity are not the same as one signal each from three entities. The diversity bonus rewards the latter and penalizes the former. Operationally:
entity_diversity_bonus(s) = sqrt(unique_new_entities_in_window(s) / total_signals_in_window)This caps the contribution of any single noisy entity and surfaces trends that are spreading across actors.
Baseline calibration
The 90-day baseline is the trend's own historical signal arrival rate, normalized to a 7-day equivalent. Using the trend's own baseline rather than a global one lets a slow-moving structural trend (e.g. AI safety & policy) and a fast-moving capability trend (e.g. computer use) be compared on equal footing.
How the score is presented
- +50 to +100 — strong acceleration. Trend is producing signals at 1.5–2× its own baseline.
- +10 to +50 — meaningful acceleration. Worth attention.
- -10 to +10 — steady-state. Trend is real but not changing pace.
- -50 to -10 — measurable decay. Often a sign of consolidation rather than failure.
- -100 to -50 — collapse. Pre-cursor to the trend being retired.
What velocity does not measure
- Importance. A trend with low velocity may already be the dominant force in its category.
- Investability. Velocity is observation, not recommendation. Capital decisions require human judgment.
- Sentiment. Velocity does not look at how people feel about the signals — only that they exist.
Auditing a velocity score
Every trend page lists the signals contributing to its current velocity, with their per-signal weights visible. If a velocity number on Steek looks wrong, the right diagnostic is to inspect the underlying signal weights and source authority assignments — not to argue about the formula.
The end-to-end pipeline that feeds these scores is documented in The AI Signals Report.