Explore more topics
News sentiment research

A news classifier can be 96% accurate and miss most relevant stories

Our GDELT probe reached 95.90% overall ticker-array agreement while matching only 7 of 20 relevant headlines. The denominator explains the difference.

As of October 15, 2026

Jump to a section

TL;DR

Our news classifier matched the saved company lists for 421 of 439 eligible GDELT headlines, or 95.90%. But it matched only 7 of the 20 headlines whose saved answers contained a tracked stock. The other 419 answers were empty, so saying "none" often looked correct.

Always saying "none" would score 95.44% overall and miss all 20 headlines with a tracked asset. A useful evaluation shows those counts beside accuracy. These references contain known errors, so the results measure agreement with the saved answer key.

Which headlines should return a stock?

Real Apple and Hamilton traffic headlines illustrate a company answer and an empty answer. The animation then separates 419 empty and 20 nonempty GDELT references and compares always saying none with the actual system.
The teaching inputs are real saved records: Apple comes from Massive/Zacks, while the Hamilton traffic story comes from GDELT. The later measured GDELT test contains 439 eligible headlines in a 100-stock-plus-SPY benchmark. The system matched 7 of the 20 complete nonempty reference lists.
Read the explanation

AAPL is Apple's stock-market code, called a ticker. For the real Apple earnings headline in this animation, the saved model output and reference both contain AAPL within the nine-security teaching test. For the local Hamilton traffic headline, both saved outputs are empty: []. These two examples explain what a match means.

The company example is the saved Zacks Apple headline. It is separate from the later GDELT evaluation. The real traffic example is "Rush-hour crash on key Hamilton route slows traffic". Its June 15, 2021 timestamp is when GDELT observed the record; the publisher's publication time is unknown in our saved sample.

In the measured GDELT test, we tracked 100 stocks plus SPY, a fund representing the broad US stock market. A correct answer had to match the complete saved ticker list. Seven matches out of 20 nonempty lists gives 35% agreement on that group. That metric asks whether the entire list matched; it is different from counting individual tickers recovered.

An empty answer is limited to the assets in the benchmark. News about another company, oil or a sector can matter financially even when this answer key contains no tracked ticker.

The arithmetic behind the impressive number

The broad probe contained 500 headlines. Of those, 439 had references marked clear, complete and inside our 100-stock-plus-SPY benchmark. The remaining 61 had unresolved identities, outside-benchmark targets or other excluded status combinations.

Within the 439 eligible headlines, 419 had empty reference arrays and 20 had one or more targets. The system correctly returned an empty array for 414 of the 419 empty cases. It matched the complete ticker arrays on seven of the 20 relevant cases.

That gives 421 correct arrays out of 439: (414 + 7) / 439 = 95.90%. The relevant-only result is 7 / 20 = 35%. Both calculations describe the same saved predictions.

A system that returned an empty array for every eligible headline would score 419 / 439 = 95.44% overall and recover zero relevant stories. Our measured system exceeded that overall agreement by about 0.46 percentage points.

Step 1 of 3

The test denominator

439 eligible headlines = 419 empty reference arrays + 20 nonempty reference arrays.

What you should see

The 20 relevant headlines contribute about 4.6% of the overall denominator.

Step 2 of 3

The measured pipeline

414 correct empty arrays + 7 correct nonempty arrays = 421 correct arrays.

What you should see

421 / 439 = 95.90% overall agreement. The relevant-only result is 7 / 20 = 35.00%.

Step 3 of 3

The always-empty comparator

Return [] for all 439 eligible headlines. All 419 empty references match; all 20 relevant references are missed.

What you should see

419 / 439 = 95.44% overall agreement, with zero relevant stories recovered.

Show the table · 3 rows, 4 columns

Scroll sideways to compare all columns. Select a heading to sort.

Empty within the benchmark41941498.81%
One or more benchmark targets20735.00%
Combined eligible population43942195.90%

Exact arrays require the full predicted security set to equal the saved reference set. These labels include known errors discussed below.

What the relevant-news misses contained

Twelve of the 20 relevant references received an empty prediction. The other failed exact-array case named Berkshire Class B, and the system returned both Berkshire share classes. Finding the issuer still failed the exact-security contract.

Several empty predictions were clear coverage problems: Sam's Club to Walmart, Hummer to GM, and Cash App to Block. Others relied on entertainment-property relationships or macroeconomic interpretation. Their difficulty and relevance differ, which is why a cohort breakdown is useful.

Across all known associations, including known targets on partially annotated headlines, core target recall was 10 of 13 and contextual target recall was 5 of 20. Those denominators differ from the 20 complete relevant headlines. Keeping the populations explicit prevents a second misleading comparison.

High sentiment agreement can also cover a minority of targets

A separate Massive test of the same 100-stock-plus-SPY pipeline had 79.68% raw sentiment direction agreement on 443 clear reference pairs. With the confidence filter, 207 of 212 emitted scores agreed with their references, or 97.64%. Those 212 scores covered 41.41% of all 512 reference targets, leaving 300 without an emitted score.

For a strategy, the operational question includes how often a score exists when the rule needs it. A high-confidence score on a minority of articles creates different behavior from a score available on nearly every target.

The same filtered result recovered 31.82% of negative reference signals and 57.38% of positive reference signals. Those differences can matter to a rule designed to avoid bad news. A single combined agreement percentage hides the imbalance.

These sentiment figures were measured given reference target companies, independently of successful ticker extraction. An operational news pipeline must also recover the ticker before it can emit that ticker's score.

Step 1 of 2

Start with 512 reference targets

The confidence rule emits a sentiment score for 212 of them.

What you should see

The rule leaves 300 targets without an emitted score.

Step 2 of 2

Inspect the 212 emitted scores

207 agree with their sentiment references; 5 do not.

What you should see

Agreement is 207 / 212. Coverage is 212 / 512. The two percentages answer different questions.

Show the table · 6 rows, 3 columns

Scroll sideways to compare all columns. Select a heading to sort.

All reference target pairs512Denominator for coverage
Clear sentiment reference pairs443Denominator for raw clear-direction agreement
Uncertain sentiment reference pairs69Counted as disagreement if a score is emitted
Scores emitted at the fixed cutoff212212 / 512 = 41.41% coverage
Emitted scores agreeing with references207207 / 212 = 97.64% agreement
Reference targets without an emitted score300512 - 212

These are conditional sentiment results given reference target companies, across all known reference pairs. They do not assert successful ticker extraction on those pairs.

Review disagreement before treating it as model failure

The GDELT audit found a helicopter-crash headline labeled Berkshire Hathaway, with the reference explanation "Unrelated to this headline." Another reference linked Jerry Harris to Netflix, but the cached repeat returned an empty array.

One predicted SPY association counted as a false positive because the reference was empty: a headline about a falling dollar, weak US data and an impeachment inquiry. Under our intended economic-news policy, that case deserves review.

The target definition also limits the benchmark. An empty array among 100 stocks plus SPY can coexist with relevant news about another listed company, a commodity or a sector ETF. Empty within that universe cannot stand in for irrelevant to every tradable asset.

The right response is to preserve the original result, document disputed cases, and establish a reviewed reference policy for the next test. Quietly changing the labels after seeing predictions would make progress difficult to interpret.

The measurements I would want beside accuracy

Precision, recall and F-measures describe different aspects of classification; the definitions are collected in scikit-learn's model-evaluation documentation.

For this product, relevant-headline exact arrays show how often the full target list is right. Target recall shows how many supported associations survive. False nonempty outputs show how often unrelated stories acquire an asset. These answer different operational questions.

Sentiment direction agreement belongs beside emission coverage and separate negative, neutral and positive counts. The complete pipeline also needs a count of correct ticker-and-direction outputs, because a correct score attached to the wrong asset is unusable.

For repeatable comparisons, preserve the same article groups and reference definitions. Select thresholds on validation examples, then score the held-out examples. A new archive or publisher mix needs a separate source evaluation even when the earlier benchmark looks strong.

Turn missing coverage into explicit strategy behavior

A future news-driven backtest needs a declared rule for absent scores. It could leave a position unchanged, block an entry, or use a separately defined fallback. The choice belongs in the strategy, because the confidence filter changes when evidence is available.

Historical testing also needs a timestamp for when the signal became available to the system. Publisher time, archive capture, archive availability, ingestion and classification can occur at different times. The backtest should use an availability rule consistent with the actual collection process.

I paused the current model work with the experiments and error audit saved. The next useful result has to improve relevant-news recovery while controlling false assignments. The overall score already shows how easily an attractive number can survive weak coverage.

To inspect how I approach strategy research, open NexusTrade Explore.

Continue exploring

Discussion

Sign in or create a free account to join the discussion.

No comments yet.