Aggregating and Decaying Sentiment Scores
A single news article's sentiment score isn't a trading signal by itself — how you combine many scores over time, and how fast you let old ones fade, is what turns raw sentiment into something usable.
Prerequisites: Sentiment Signals, Ornstein-Uhlenbeck Mean Reversion
A single news article about a company gets scored as +0.6 sentiment (on a −1 to +1 scale) by a text model. On its own, that's a snapshot with a very short shelf life: is this the fifth positive article in a week, reinforcing an established trend, or an isolated positive story following three negative ones? Should an article from three weeks ago still matter as much as one from this morning? A usable sentiment signal has to answer both questions — how to combine many individual scores into one number, and how much weight to give older scores relative to newer ones — and both choices materially change what the resulting signal actually captures.
Aggregation: combining many scores into one
The simplest aggregation is a plain average of all sentiment scores in a window, but this treats a single throwaway mention the same as a detailed analyst report, and treats five separate articles about the same underlying event as five independent pieces of evidence when they're really one. Better aggregation schemes weight each score by source credibility (a wire-service headline versus a detailed research note), by article length or specificity, and — importantly — collapse duplicate coverage of the same story into one contribution rather than letting republished or lightly-rewritten articles inflate the count (see news deduplication).
Decay: how much the past should still matter
A sentiment score from this morning is more informative about the current mood than one from three weeks ago, so most aggregation schemes apply exponential decay, weighting a score from days ago by
where controls how fast old information fades — in plain English, each additional day multiplies the article's remaining weight by the same fraction, so old news never disappears entirely but its influence shrinks geometrically. A small keeps a long memory (useful for slow-moving reputational sentiment); a large makes the signal react almost entirely to the last day or two (useful for short-horizon trading signals reacting to breaking news).
Worked example: decayed sentiment across a week
Suppose five articles about a stock arrived with these ages and raw sentiment scores: 0 days ago, +0.6; 1 day ago, +0.2; 3 days ago, −0.4; 5 days ago, +0.5; 7 days ago, +0.3. Using per day, the weights are , , , , . The decayed weighted average is
Compare that to the plain unweighted average of the same five scores, . The decayed version sits higher because it correctly gives today's strongly positive article far more say than the older, mildly negative one from three days ago — exactly the behavior you'd want from a signal meant to track current sentiment rather than sentiment averaged uniformly over the whole week.
What this means in practice
The decay rate is itself a parameter worth tuning against the strategy's actual holding horizon: a signal meant to trade on multi-week reputational drift should decay slowly, while one meant to react to same-day news should decay fast, and using the wrong speed either drowns a genuine short-term reaction in stale history or throws away real information about a slower-moving trend.
Raw sentiment scores need both aggregation (combining many articles into one number, accounting for duplicates and source quality) and decay (weighting recent articles more than old ones, typically via ) before they're usable as a signal. The decay rate should match the strategy's actual time horizon, not be picked arbitrarily.
Related concepts
Practice in interviews
Further reading
- Loughran and McDonald, Textual Analysis in Accounting and Finance: A Survey