Themes & evidence
2 min readPulseBitFor Quants & portfolio managers

Why most sentiment alerts are noise (and how to tell)

A topic moving 0.6 in a day means nothing on its own. The corroboration signals underneath the number are what separate a market event from one outlet repeating itself.

methodologyalertsquant

Most sentiment APIs hand you a number and leave you to trust it. A topic moved +0.57 in twenty-four hours. Is that a market event, or is it one publication running the same story five times?

Without corroboration data you cannot tell, and acting on the difference is expensive.

The signals underneath the score

Every PulseBit alert carries the evidence behind the move, not just the move:

Field What it tells you
article_count How much coverage the move is built on
unique_source_count How many independent outlets are reporting it
volume_ratio Coverage now versus the topic's normal baseline
top_source_share What fraction of coverage comes from a single outlet
signal_strength Model confidence in the aggregate

A move with article_count: 1 and top_source_share: 1.0 is a lead. The same move with thirty articles across eight outlets and a volume_ratio of 12× is an event.

The gates we use internally

Our own automated publishing pipeline will not act on an alert unless it clears every one of these:

  • momentum at least 0.10
  • at least 4 articles
  • at least 2 independent sources
  • signal strength at least 0.30
  • volume at least 1.0× baseline
  • no single outlet above 85% of coverage

We publish the same gates on the alerts dashboard so you can see which alerts clear them and which do not, rather than being handed a filtered list and asked to trust it.

Why we show the ones that fail

It would be easy to display only the alerts that pass and look impressive. We show all of them, graded, because a single-source alert is genuinely useful — as a lead to investigate, forty minutes before it is corroborated. It is only dangerous when you mistake it for a confirmed signal.

That distinction is the product.

curl 'https://pulsebit-news-sentiment-api.p.rapidapi.com/news_stats/alerts?threshold=0.05&days=7' \
  -H 'x-rapidapi-key: YOUR_KEY' \
  -H 'x-rapidapi-host: pulsebit-news-sentiment-api.p.rapidapi.com'

Try it against live data

Context