GlassBallAI: a live, time-locked dataset of Gemini forecasts for studying LLM behaviour

Edit (2026-07-25): The confidence field measures evidential certainty, not P(direction correct) — ECE framing below was therefore imprecise. Resolved in v2.6 with a new probability_of_correctness field. See John6666’s reply and the changelog for full context.

Posting to share and get feedback on a dataset I’ve been running: louidev/glassballai.

The core idea: capture an LLM’s forecasting behavior before the outcome is known, rather than testing on resolved historical data. Each day (for a period of time), Gemini (2.5 Flash, 2.5 Pro, 2.5 Flash Lite, 3.0 Flash Preview, with 3.5 Flash forecasts currently being collected for a future release) generates a 10-trading-day lookahead for price direction, sentiment, confidence and full reasoning traces.
Time-locked, so there’s no retrofitting the answer.

90+ days of runs so far (Feb 17 – May 19, 2026 for the Flash subset), ~3,655 rows total across all model configs. Dataset card includes full schema docs, a Colab quickstart for hydrating ground truth, and an explicit non-financial-advice / legal framework since this touches market data.

One finding I’d like feedback on: accuracy drops to its second-lowest point (~28%) exactly in the model’s highest-confidence bin (0.8–0.9) — a confidence/accuracy inversion. Global ECE is 0.217. Sample size in that bin is small, so I’m not overclaiming, but curious if others have seen similar patterns in grounded-LLM calibration work.

There’s also a companion site with a dashboard, methodology writeup and results (glassballai.com/results).

Note Evaluation: Some tickers have very low run counts due to interrupted tracking or individual tracking runs that are not part of the fixed set of tracked stocks. They are included for full transparency and factor into the global metrics, but their individual ticker-level stats should be ignored due to high variance.

Note Custom Tracing Run: the “run your own session” feature is temporarily off while I sort out API costs at scale.

Dataset: huggingface.co/datasets/louidev/glassballai (CC-BY-NC-4.0)

Open to feedback on the dataset structure, or ideas on what additional metadata would make this more useful for calibration/hallucination research.

Hmm… I think this could be much easier to develop further if the link between the data and the claims were strengthened a little:


My short read

The live, time-locked collection is already the strongest part of this project. Recording forecasts, prompts, retrieved context, confidence, sentiment, rationales, model configuration, and timestamps before the outcome exists creates a useful longitudinal archive that retrospective prompting cannot fully reproduce. This is broadly aligned with the motivation behind future-only systems such as ForecastBench, although the prediction target and data structure here are quite different.

For the confidence/accuracy inversion specifically:

  • I found related work showing that verbalized LLM confidence can be strongly dependent on the model, task, prompt, output format, and measurement protocol.
  • There are also examples of models assigning high confidence to incorrect but plausible answers.
  • I did not find a close independent replication of the exact pattern described here: a search-grounded financial forecaster whose 0.8–0.9 verbal-confidence bin falls to roughly 28% directional accuracy.

So I would currently treat the 28% result as an interesting exploratory observation, rather than evidence of a general grounded-LLM failure mode. There are still several explanations that can be separated with relatively small additions to the evaluation artifacts.

The route I would take is:

  1. Define exactly what the confidence field measures.
  2. Make the 28% calculation reproducible from a small evaluation export.
  3. Freeze the analysis definition now and test it prospectively on newly collected forecasts.

That would allow other people to move from suggesting possible explanations to actually testing them.


The first fork: what does confidence mean?

From the public prompts, the confidence scale appears to be framed approximately as a progression from speculative/no-data to fact-based/high-certainty, with confidence based on evidence density.

That sounds closer to evidential certainty than to an explicit probability that the predicted price direction will be correct.

Those are both useful quantities, but they lead to different analyses:

Intended meaning Natural question Appropriate analyses
Probability that the predicted direction is correct “Of forecasts assigned 0.8, are roughly 80% directionally correct?” Reliability diagram, Brier score, log score, calibration error
Strength/density of the supporting evidence “Do forecasts described as evidence-rich tend to be more accurate?” Accuracy by evidence score, ranking/AUROC, risk–coverage, source-quality analysis
General confidence mixing several concepts “Which latent property is this score responding to?” Separate elicitation fields and ablations

If the present field is intentionally evidential certainty, I would preserve it. It may support a particularly interesting question:

Does an LLM’s expressed sense that a forecast is fact-based and well-supported predict whether its forward price direction is actually correct?

In that framing, a negative or flat relationship would still be meaningful. It would describe a mismatch between evidence-rich narrative formation and eventual correctness.

However, I would avoid interpreting the score as a calibrated probability unless the prompt explicitly defines it as something like:

What probability, from 0 to 1, do you assign to the predicted
direction being correct on the specified target date?

A useful future schema could therefore retain the current value while adding separate fields:

{
  "evidence_confidence": 0.85,
  "direction_correct_probability": 0.62,
  "price_interval_80": [190.0, 207.0]
}

This would preserve the behavioral signal already being collected while making standard probabilistic evaluation possible.

This distinction seems especially important because verbalized confidence is not necessarily a direct readout of one fixed internal uncertainty variable. On Verbalized Confidence Scores for LLMs finds that reliability varies substantially across models, datasets, and prompting methods. Asking Is Not Enough further argues that confidence comparisons are protocol-sensitive behavioral measurements; in one of its analyses, plausible wrong answers received confidence close to supplied correct answers.


The smallest addition that would unlock much more useful feedback

I think a small evaluation manifest would be more useful than adding many new dataset fields immediately.

For the reported confidence curve, the following would probably be enough:

  • Dataset commit SHA
  • Model subset or subsets included
  • Forecast date range
  • Unit of analysis:
    • checkpoint,
    • session,
    • or one end-to-end trajectory
  • Definition of the starting/reference price
  • Definition of directional correctness
  • Treatment of same-day checkpoints
  • Treatment of zero returns or unchanged prices
  • Confidence aggregation, if the unit is a session
  • Exact bin intervals:
    • [0.8, 0.9),
    • (0.8, 0.9],
    • or something else
  • Number of observations and correct predictions in each bin
  • Missing/error exclusion rules
  • Evaluation-code commit or a small evaluated CSV

A derived evaluation file could be sufficient even if the underlying licensed market data cannot be redistributed:

session_id
checkpoint_id
ticker
model_id
forecast_origin
target_date
horizon
pipeline_version
confidence
reference_price_timestamp
predicted_direction
actual_direction
correct
confidence_bin

The public dataset card explains that realized market data is intentionally not redistributed and must be rehydrated from another source. That is understandable, but it also means that two researchers can silently construct different outcomes depending on:

  • raw close versus adjusted close,
  • the reference-price timestamp,
  • market timezone,
  • holidays and non-trading dates,
  • stock splits,
  • target-date resolution,
  • and later data-provider corrections.

An evaluation manifest would turn those choices into an explicit outcome contract.

Hugging Face Datasets also supports loading a specific tag, branch, or commit hash through the revision parameter, so each published result can remain reproducible while the live dataset continues to grow.


A practical default route

If the goal is to turn this into a first focused behavioral result without redesigning the whole project, my default route would be:

1. Keep the present archive format

The nested session records are useful for preserving the original relationship between:

  • forecast origin,
  • shared context,
  • multiple target dates,
  • prompt,
  • search material,
  • and generated rationale.

I would not flatten away that structure in the canonical archive.

2. Publish an analysis view

Add generated tables or Parquet views for:

  • sessions,
  • checkpoints,
  • retrievals,
  • attempts/errors,
  • outcomes,
  • and pipeline versions.

This gives researchers a convenient analysis surface while keeping the original event record intact.

3. Rename or document the current confidence construct

For example:

  • evidence_confidence,
  • expressed_evidential_certainty,
  • or the existing confidence field with a precise definition in the card.

This is not merely terminology. It determines which scoring rules and comparisons are meaningful.

4. Add explicit directional probability prospectively

Keep the existing confidence field and add a separate probability of directional correctness in future runs.

5. Treat the current inversion as hypothesis generation

Freeze the following now:

  • target metric,
  • bin boundaries,
  • model subset,
  • date range,
  • exclusion rules,
  • clustering unit,
  • and outcome contract.

Then apply that unchanged definition to the next unseen collection period.

Because the project is live, it has an unusually natural confirmation set: forecasts that have not yet been generated or resolved. The 28% pattern becomes much more informative if it reappears under a preregistered analysis definition.


What I found in a small public-data sanity check

I tried a small checkpoint-level check using a pinned revision of the public dataset.

The procedure was:

  1. Load all four published configurations.
  2. Expand the 3,655 session records into individual checkpoints.
  3. Rehydrate daily closing prices using a public market-data convenience source.
  4. Compare several explicit reference-price and target-date contracts.
  5. Exclude non-positive horizons in the main slice.
  6. Analyze [0.8, 0.9) as the primary high-confidence interval.
  7. Repeat uncertainty estimates using session, ticker, calendar week, and target-date clusters.

The public data expanded to approximately:

  • 3,655 sessions
  • 29,647 checkpoints
  • 2,086 same-day checkpoints

Under a conservative proxy contract using the latest available close before forecast creation as the reference and the exact target-date close as the outcome:

  • evaluable positive-horizon checkpoints: approximately 27,532
  • overall directional accuracy: approximately 56.6%
  • [0.8, 0.9) checkpoints: 1,756
  • directional accuracy in that interval: approximately 55.5%
  • AUROC of confidence for distinguishing correct from incorrect forecasts: approximately 0.507

Cluster bootstrap estimates for the high-confidence interval remained broadly in the low-to-high 50% range, depending on whether the resampling unit was session, ticker, week, or target date.

So I could not reproduce the reported approximately 28% value from the public artifact under those explicit proxy definitions.

I do not think this is evidence that the reported result is incorrect.

The public dataset does not expose the exact numeric reference price that was supplied to the model in a directly reusable form, and realized outcomes are intentionally omitted. I also do not know whether the published curve uses:

  • individual checkpoints,
  • one confidence value per session,
  • the final checkpoint,
  • average or maximum confidence,
  • an end-to-end trajectory metric,
  • a particular model subset,
  • or different bin boundaries.

This makes the sanity check a different, explicitly documented measurement—not a replication of the private/dashboard evaluation.

The non-reproduction is therefore useful mainly because it identifies the smallest missing information:

  • the analysis unit,
  • exact reference-price contract,
  • exact target/outcome contract,
  • bin membership,
  • and the list of evaluated cases.

One additional observation is that confidence values are quite discrete rather than smoothly distributed. A large number of checkpoints sit exactly at 0.80, so these intervals can contain very different populations:

[0.8, 0.9)
(0.8, 0.9]
[0.8, 0.9]

In the proxy analysis, some very narrow high-confidence values had low accuracy, but their sample sizes were tiny. For example, a low result at a value represented by only a few dozen observations should not automatically be interpreted as the behavior of the entire 0.8–0.9 interval.

A per-value table before binning would make this immediately visible:

confidence | n | correct | accuracy
Checks that would distinguish the main explanations

There seem to be several plausible explanations, and fortunately they imply different checks.

A. Sparse-bin variation

Possible observation: The highest bin contains few forecasts or a few discrete confidence values.

Useful outputs:

  • bin count,
  • correct count,
  • Wilson or bootstrap interval,
  • exact confidence-value distribution,
  • minimum sample threshold for displayed bins.

If the result disappears under equal-mass bins or a slightly different interval, the shape may be mainly a binning artifact rather than a stable inverse relationship.

Binning-based ECE is known to depend on finite-sample and binning choices. Mitigating Bias in Calibration Error Estimation reports that equal-mass bins can have lower bias than equal-width bins in common settings.

B. Composition effect

Possible observation: The 0.8–0.9 interval is disproportionately composed of one model, ticker, horizon, week, or pipeline version.

Useful breakdowns:

  • model,
  • ticker,
  • horizon,
  • forecast-origin week,
  • target date,
  • realized volatility,
  • earnings-event window,
  • pipeline version,
  • search success/error state.

Useful robustness checks:

  • leave one ticker out,
  • leave one week out,
  • leave one model out,
  • leave one pipeline version out.

A global inversion can appear even if no comparable inversion exists inside the major subgroups.

C. Dependent observations

The checkpoints are not naturally IID rows.

Within one session, several target dates share:

  • the same creation time,
  • the same prompt,
  • much of the same retrieved evidence,
  • and the same market state.

Forecasts produced on adjacent days can also share target dates and market events.

I would therefore report at least one uncertainty estimate that resamples at a higher level:

  • session,
  • ticker,
  • forecast-origin week,
  • or target date.

The right cluster depends on the claim:

Claim Natural grouping
Repeated outputs from one generation session Session
Generalization across companies Ticker
Robustness across market periods Week or regime
Independence of realized outcomes Target date

D. Construct mismatch

Possible observation: Confidence follows evidence density or narrative coherence but not outcome correctness.

Useful checks:

  • confidence versus number of retrieved snippets,
  • confidence versus number of cited sources,
  • confidence versus source agreement,
  • confidence versus rationale length,
  • confidence versus correctness,
  • confidence versus absolute price error.

If confidence tracks retrieval richness but not correctness, that is not necessarily a failed measurement. It may reveal what the model operationally treats as “certainty.”

E. Ranking versus absolute calibration

Even if confidence is not calibrated as a probability, it may still rank predictions by likely correctness.

Useful metrics:

  • AUROC for correct versus incorrect forecasts,
  • accuracy of the top confidence decile,
  • risk–coverage curve,
  • selective accuracy at several thresholds.

If accuracy remains flat as the confidence threshold increases, the score has little value for failure prediction, even if its numerical calibration is not the intended research question.

If ranking improves but numerical calibration is poor, the field may still be useful for abstention or prioritization after recalibration.

F. Prompt-conditioned behavior

The dataset card already correctly notes that the outputs are prompt-conditioned and model-specific.

A small future control could compare:

  1. Current prompt and current confidence definition
  2. Current forecast prompt, but confidence elicited in a separate call
  3. Explicit probability of directional correctness
  4. Forecast without rationale generation
  5. Fixed retrieved context versus live search

This does not need to run over the whole dataset. A small matched set of tickers and dates would help determine whether the effect belongs mainly to:

  • the model,
  • the evidence,
  • the confidence instruction,
  • or the combined generation format.

G. Prospective confirmation

The cleanest confirmation is probably the cheapest:

  1. Use current data to define the hypothesis.
  2. Freeze the metric and evaluation code.
  3. Do not change the bin after looking at new outcomes.
  4. Run it on the next unseen model/time subset.

Possible outcomes are all informative:

  • The inversion repeats: stronger evidence for a stable pipeline-conditioned behavior.
  • It disappears: likely an exploratory slice or market-period effect.
  • It appears only in certain regimes: a conditional effect worth studying.
  • Evidence confidence stays uninformative while explicit direction probability works: the two confidence constructs were measuring different things.
Dataset and metadata additions that seem highest leverage

The existing schema already preserves considerably more context than many forecast datasets. I would prioritize fields that help distinguish system behavior from missingness or evaluation choices rather than adding metadata indiscriminately.

Highest priority

Confidence provenance

  • confidence construct name,
  • exact instruction text,
  • output schema version,
  • whether confidence was generated jointly with the answer or separately,
  • scale anchors,
  • whether the value applies to one checkpoint or the full trajectory.

Forecast provenance

  • exact model identifier,
  • API family and API version,
  • SDK name and version,
  • temperature and other sampling controls,
  • prompt hash,
  • schema hash,
  • pipeline version,
  • retry count.

Time and price contract

  • creation timestamp with timezone,
  • reference-price timestamp with timezone,
  • whether the reference value is live, open, previous close, or latest completed close,
  • exchange calendar,
  • target-date resolution rule.

Outcome provenance

  • provider identifier,
  • raw or adjusted price definition,
  • hydration timestamp,
  • corporate-action policy,
  • outcome-code version.

Attempt and failure log

Instead of storing only successful forecasts, preserve an attempt-level record:

{
  "attempt_id": "...",
  "search_attempted": true,
  "search_succeeded": true,
  "generation_succeeded": true,
  "schema_parse_succeeded": false,
  "retry_count": 1,
  "error_class": "structured_output_parse",
  "raw_response_preserved": true
}

This matters because missing forecasts may not be missing at random. They may cluster by:

  • model,
  • date,
  • prompt size,
  • search behavior,
  • or API version.

Grounding metadata

The current Gemini Google Search grounding documentation exposes search-call and citation information, including executed queries and mappings between answer spans and source URLs. Historical generateContent responses used a different groundingMetadata representation, so preserving the raw response alongside normalized fields would help future analysis survive SDK and API migrations.

Useful normalized fields include:

  • search attempted,
  • executed search queries,
  • retrieved source identifiers,
  • response-span/source mapping,
  • search error,
  • finish reason,
  • raw-response hash,
  • SDK/API version.

For hallucination or attribution research, it may help to distinguish:

  1. A search was executed.
  2. A retrieved source was relevant.
  3. A source supported a generated claim.
  4. The source causally influenced the forecast.

The first three can be partially studied from logs and annotations. The fourth generally requires an intervention such as removing, replacing, or perturbing the source context.

Canonical archive plus generated analysis views

A structure such as this could work without changing the original record format:

canonical_sessions/
analysis_views/
  sessions.parquet
  checkpoints.parquet
  retrievals.parquet
  attempts_errors.parquet
  outcomes.parquet
  pipeline_versions.parquet
evaluation_manifests/
  confidence_inversion_v1.json

The canonical archive remains the source of truth. The tables and manifests can be regenerated.

A wording distinction that may help future readers

The natural-language rationales are valuable, especially because they are frozen before outcomes are known.

I would describe them as:

  • time-stamped observable behavioral traces,
  • model-expressed narratives,
  • or generated rationales,

rather than assuming that they expose the complete causal process that produced the forecast.

This is not specific to GlassBallAI. Work such as Language Models Don’t Always Say What They Think shows that generated explanations can omit factors that affected an answer or rationalize an already selected answer.

That does not make the rationales unhelpful. It changes the research questions that can be supported directly:

  • Does the narrative change before the prediction changes?
  • Do high-confidence forecasts use more decisive language?
  • Are unsupported factual claims more common in incorrect forecasts?
  • Does source diversity change the explanation?
  • Does the rationale remain stable across repeated generations?
  • Does removing a cited source alter the prediction?

The dataset card already notes that rationales may be plausible rather than causal, which is a useful limitation to retain prominently.

Closest related work I found, with important differences

Future-only forecasting

ForecastBench is probably the closest high-level methodological relative.

Similarities:

  • predictions are collected before outcomes are known,
  • evaluation happens after resolution,
  • the benchmark can grow over time,
  • temporal leakage is reduced by using unresolved events.

Differences:

  • ForecastBench primarily uses clearly defined event probabilities,
  • GlassBallAI records price trajectories, rationales, sentiment, evidence, and search context,
  • the present GlassBallAI confidence field may not represent an event probability.

This makes ForecastBench useful as a reference for prospective evaluation and versioned forecast sets, but not a direct comparison for the 28% result.

Verbalized confidence

Just Ask for Calibration shows that verbalized confidence can sometimes be more calibrated than token-probability alternatives under particular elicitation methods and QA tasks.

On Verbalized Confidence Scores for LLMs finds that reliability depends strongly on the model, dataset, and prompting method.

Asking Is Not Enough emphasizes the sensitivity of conclusions to the full measurement protocol and reports that plausible wrong answers can receive confidence similar to correct answers.

Together, these papers suggest that “verbal confidence” is not one universally comparable measurement. The elicitation contract is part of the measured system.

Calibration estimation

Mitigating Bias in Calibration Error Estimation is useful for the finite-sample and binning side of the analysis.

For explicitly probabilistic forecasts, Strictly Proper Scoring Rules, Prediction, and Estimation provides the broader scoring-rule framework.

A partially similar HF Forum observation

There is also an HF Forum post reporting that a small LLM appeared more confident on incorrect answers than correct ones: “We found that small LLM is systematically more confident on wrong answers than right ones”.

I would treat it only as a nearby anecdote, not a replication:

  • it uses a different task,
  • confidence is based on entropy/margin rather than the same verbalized scale,
  • it is not a grounded financial forecasting setup.

A possible first focused result

If I were trying to extract one initial paper-sized or report-sized question from the existing archive, I might phrase it as:

Does Gemini’s expressed evidential certainty predict the correctness of its forward price-direction forecasts?

That question seems well aligned with the prompt and current data.

It allows several outcomes without making the project depend on one unusual bin:

  • positive association,
  • no association,
  • negative association,
  • association only at certain horizons,
  • association only in certain market regimes,
  • variation across model or pipeline versions.

A second, prospective study could then ask:

Is an explicitly elicited probability of directional correctness calibrated?

Separating those questions would make both results easier to interpret.

Bottom line

I think the archive and collection design are already useful. The next improvement may not require substantially more data or a large redesign.

The highest-leverage additions appear to be:

  1. Clarify whether the existing confidence score is evidence certainty or correctness probability.
  2. Publish a minimal manifest/export that reproduces the 28% bin.
  3. Report the exact bin count and correct count before interpreting ECE.
  4. Account for shared sessions, target dates, tickers, and market periods in uncertainty estimates.
  5. Preserve the current result as an exploratory hypothesis.
  6. Test the frozen definition on the next unseen collection period.
  7. Add explicit directional probability as a separate future field rather than replacing the existing confidence signal.

That route would preserve what is distinctive about GlassBallAI while making it much easier for other researchers to reproduce, compare, and build on the observed behavior—even if the exact 28% pattern turns out to be specific to one slice or evaluation contract.

@John6666 —thank you for the extraordinary level of detail you put into this!

First and most importantly: I found what likely explains the non-reproduction. I mislabeled the confidence bin in my write-up as 0.8–0.9, when the actual bin my dashboard computes is 0.9–1.0. Your proxy analysis checked 0.8–0.9 specifically — a different and much larger slice (your n=1,756 vs. the 0.8–0.9 bin’s n=772, and the 0.9–1.0 bin’s n=114), so the divergence makes complete sense. Worth noting: the results and dashboard I presented reference the 2.5 Flash model dataset specifically — not the full multi-model dataset — so the relevant scope for reproducing the reported numbers is that subset alone.

Since I can’t edit the original post, I will add a top-level comment to this thread noting the correction. I will also adapt the visualization to show the exact bin boundaries more clearly so this can’t be misread again.

I haven’t worked through all your other points yet — there’s a lot there and I want to give them the attention they deserve rather than rushing a response. But I didn’t want to leave the non-reproduction hanging without addressing the most likely cause first.

Really sorry for the confusion the mislabeling caused — and grateful you ran the numbers rather than just commenting.

[CORRECTION TO ORIGINAL POST] Please note a mislabeling in the write-up above. The correct range for the highest confidence bin is 0.9–1.0, not 0.8–0.9 as stated.

Ah, got it! Re-running it with the corrected Gemini 2.5 Flash / 0.9–1.0 slice brings my proxy result down to about 44%:


That explains most of the earlier discrepancy. My first check used all published model subsets and the [0.8, 0.9) interval, so it was not a like-for-like comparison with the dashboard’s 2.5 Flash-only 0.9–1.0 bin (n=114).

With the corrected scope, the gap narrows substantially. I would no longer treat my original non-reproduction as evidence against the reported 28% result.

I still would not call the rerun an exact replication: it uses a public-data price proxy and remains above 28%. The remaining difference could plausibly come from the exact dataset revision or date range, bin endpoint handling, reference-price/outcome definition, or checkpoint-level versus session/end-to-end aggregation.

So my updated read is: the correction resolves the largest mismatch, and the 28% observation now looks materially more plausible. An evaluation manifest or the evaluated row IDs for that bin would probably make the remaining difference straightforward to localize.

Thanks for clarifying and documenting the correction so quickly.

@John6666 — really glad the corrected scope brought the numbers closer, and thank you for re-running it so quickly. 44% vs 28% with a public-data price proxy and potentially different aggregation unit is a much more plausible remaining gap than the original discrepancy — especially given the small n=114.

The evaluation manifest is clearly the right next step to localize what’s left. I’ll work on that alongside your other recommendations now that the reproduction question is in a much better place.

@John6666 Thanks ! — this directly shaped a concrete pipeline change.

As of v2.6 (released yesterday) the construct mismatch is resolved. confidence was evidential certainty all along, not P(direction correct) — dense news coverage doesn’t guarantee predictable price movement. The two are now explicitly decoupled:

  • confidence — evidential certainty, retained for AUROC-style ranking
  • probability_of_correctness — new field, explicit prompt instruction to estimate true directional probability, decoupled from evidence volume. Correct input for ECE going forward.

Full details in the changelog at glassballai website and the updated dataset card on HuggingFace. Pipeline versioning is also tracked per-record via forecast_model_version and change_log fields in the dataset itself.

Treating the original inversion as exploratory. The prospective test on probability_of_correctness against new unseen data is now the clean confirmation path.

Thanks to the advice of John6666, I’ve updated the pipeline (v2.6) to explicitly capture probability_of_correctness. I am now formally freezing the hypothesis and methodology to test on the next unseen collection period.

For the sake of transparency and public timestamping, here is the locked evaluation contract:

Retrospective baseline: all Gemini 3.5 Flash (grounded) sessions tagged pipeline version 2.6, collected 2026-07-26 through 2026-09-14.
Freeze date: 2026-09-14
Frozen by: Loui, GlassBallAI
Status: Locked — no changes to definitions below permitted after this date for the purposes of this test.

Using probability_of_correctness, session-mean aggregation. Bin width: 0.1, right-closed intervals: [0.0, 0.1], (0.1, 0.2], (0.2, 0.3], …, (0.9, 1.0].
A value falling exactly on a boundary (e.g., 0.10, 0.80) is assigned to the lower bin.
This binning scheme is applied identically across all analyses in this test.
Sessions created from the freeze date onward serve as the prospective test set for Gemini 3.5 Flash
(grounded), checked against the retrospective curve above. The identical analysis (same field, aggregation, and binning) will also be applied to Gemini 2.5 Flash, and the resulting calibration patterns from both models will be compared.

Minor dataset maintenance note: while reviewing the published dataset, I found two small construction issues — (1) some session entries were left with zero checkpoints after date-range filtering, inflating the reported entry count, and (2) date-range filtering was applied per-checkpoint (target date) rather than per-session (creation date), which could leave boundary sessions with an incomplete checkpoint set. Both are fixed in v1.1, tagged and pushed; v1.0 remains accessible via revision tag for anyone who needs to reproduce earlier results. Full details in the dataset card changelog.

This is a really interesting dataset shape. The time-locking matters a lot, because otherwise it is too easy to accidentally evaluate the model on a world where the answer has already leaked into the surrounding text ecosystem.

The confidence / accuracy inversion is especially worth watching. I have been thinking about a related behavior in live multi-agent settings: models often become more confident when the conversational context gives them a strong narrative, even if the external evidence is weak. Forecasting traces make that much easier to inspect because you can separate “good explanation” from “correct world model” after the fact.

One metadata field I would be curious about is whether the model expressed uncertainty structurally, not just numerically: hedges, alternative scenarios, causal caveats, or explicit unknowns. Sometimes the numeric confidence and the language confidence tell different stories.

Great point, and it connects to something that wasn’t captured yet. Right now the schema separates cited evidence from uncited synthesis (Bear/Bull vs. Synthesis sections), but doesn’t structurally tag hedging language, alternative scenarios, or explicit uncertainty markers within that text — only the numeric confidence / probability_of_correctness scores. You’re right that these could diverge in interesting ways.

I can’t add this right now, since I’m mid-way through aggregating the v2.6 dataset and currently have a methodology freeze in place for a prospective validation test — adding a new field would mean touching the collection setup while that’s locked. But it’s a genuinely good idea, and once v2.6 is finalized and published, this is a natural next addition. Keeping this in mind for the next iteration — appreciate the suggestion.