Why We Ignore Ambiguous Signals (And You Should Too)
A spread of 3 and a spread of 15 are not the same signal at different volumes. They're different categories of information. InDecision now gates on spread before injecting any directional bias. Here's why.

The Problem With Scaled Confidence
For most of InDecision's early architecture, spread was treated as a volume dial. A market with a bid-ask spread of 3 got a small directional bonus. A market with a spread of 15 got a larger one. Same direction, different magnitude. The assumption baked in was that spread was a continuous variable — more spread, more signal.
That assumption was wrong.
It took a series of bad calls on low-spread markets to expose it. Positions where the model said "lean bullish, light confidence" and the market moved sideways or reversed. Not because the direction was wrong — sometimes it was right — but because the signal itself had been fabricated. We'd injected a directional opinion into a market that hadn't formed one yet.
The fix wasn't about tuning the scale. It was about recognizing that below a certain threshold, spread stops being a weaker version of a signal and starts being the absence of one.
What Spread Actually Tells You
In a prediction market like Polymarket, the bid-ask spread is the gap between what buyers are willing to pay and what sellers are willing to accept. A tight spread means traders are aligned. They agree on the probability. There's conviction on both sides, and the market has done its job of aggregating information.
A wide spread means the opposite. Buyers and sellers are far apart. Either not enough participants have weighed in, the event hasn't generated enough real-world data to anchor beliefs, or the window is too early for the market to form a view. The spread is the market's way of saying: I don't know yet.
The critical insight is that this isn't a confidence dial — it's a readiness flag. A spread of 3 doesn't mean "slightly confident." It means "I haven't decided." A spread of 15 means "I have a position and I'm offering it at this price." These are categorically different states of a market.
When InDecision was treating both as inputs to the same directional bias function, it was effectively amplifying noise as if it were signal.
How Bias Injection Works (And Where It Broke)
InDecision's directional bonus is applied during the final scoring stage. After the six factors are computed — momentum, structure, funding, open interest delta, liquidation proximity, and sentiment alignment — the model aggregates them into a raw conviction score. Then it applies a spread-weighted directional adjustment: if the market leans long, the score tilts up. If short, it tilts down. The magnitude of the tilt was historically proportional to spread.
The intent was to amplify high-conviction reads where the market was already pricing in movement. A spread of 20 on a market moving toward 70% YES should reinforce that signal. The model should lean into it.
But the same logic applied to a spread of 4 produced a phantom tilt. A 4-point spread means the market hasn't cleared. There is no consensus to lean into. When we applied the directional bonus anyway, we were essentially predicting the prediction before the market made it. That's not edge — that's noise laundering.
The Gate: Spread < 8 Gets Nothing
The spread gate is a pre-condition that runs before any directional adjustment. If the market's bid-ask spread is below 8, the model returns a neutral baseline:
- Strategy score baseline: 6
- Momentum score baseline: 4
No directional tilt. No bias injection. The signal passes with no opinion attached.
If the spread is 8 or above, the standard directional bonus applies and the model proceeds normally.

The threshold of 8 was derived from back-testing against historical Polymarket data across the major crypto verticals — BTC, ETH, SOL. Below 8, directional calls showed no edge over baseline. The model was essentially flipping coins while appearing to reason. Above 8, the relationship between spread and directional accuracy held at the rates we expect from InDecision's factor stack.
Eight is not a universal constant. Different market types may require different thresholds. But for crypto prediction markets in the timeframes InDecision operates in, 8 is where the signal starts to exist.
What Changed After Shipping the Gate
The most immediate effect was a reduction in signal volume. Approximately 30% of the markets we'd been generating directional reads on now return neutral baselines. That number felt uncomfortable at first — fewer signals means less to act on.
But the signal-to-noise ratio improved sharply. The calls we do make are cleaner. The directional bets InDecision surfaces now come from markets where the spread has confirmed that real conviction exists. We're no longer in the business of generating directional opinions on markets that haven't formed their own.
Practically: win rate on directional calls went up after the gate shipped. Abstain rate went up. Position sizing decisions improved because every signal that came through was carrying an implicit attestation: this market has something to say.
The gate also simplified downstream logic. When a signal passes with no directional component, systems that consume it know they're looking at a neutral market — not a directional call with low confidence. That's a meaningful distinction for position sizing, for execution timing, and for how you mentally categorize the trade.
The Principle: Gate First, Scale Second
The broader design rule that emerged from this work: signal confidence is binary before it's scalar.
Before you ask "how much confidence?" you have to ask "is there signal at all?" These are different questions and they require different answers. The gating question is categorical. The scaling question is continuous. If you skip the gate and go straight to the scale, you end up treating noise as weak signal instead of recognizing it as a different category of information.
This is true in prediction markets. It's also true in any domain where you're aggregating probabilistic inputs: quant models, LLM outputs, risk scoring, anomaly detection. The instinct is to build a single confidence score and let it range from 0 to 1. The better architecture is to identify the threshold where input transitions from noise to signal, gate on that, and only then apply the continuous scaling function.
In InDecision's case: spread gate at 8. Below that, no opinion. At or above, proceed with the full directional model.
The rule is not "be less confident about low-spread markets." The rule is "don't have an opinion about them."
What This Means for How You Trade
If you're using InDecision signals, the spread gate changes one thing practically: a neutral baseline signal (Strategy: 6, Momentum: 4) is now a meaningful data point, not a weak directional call. It means the market hasn't formed conviction. That's information. It tells you to wait, not to size down.
When you see a neutral baseline, the right move is usually to hold off. The market will either develop a spread as new information comes in — and then InDecision will surface a real directional read — or it won't, which means there's nothing there to trade.
The goal is always to be in the market when the market has something to say. The spread gate is how InDecision knows when that is.
If you want to see how spread interacts with the other five factors in a live market read, the Signal Calculator at jeremyknox.ai/framework walks through the factor breakdown in real time. The gate is visible in the output — neutral baselines are labeled explicitly.
InDecision Framework is a proprietary 6-factor model for crypto prediction market analysis. The spread gate described here shipped in v2.3. All back-testing referenced in this post used Polymarket historical data from the 90 days preceding the gate's deployment.
Explore the Invictus Labs Ecosystem
// FOLLOW THE SIGNAL
Follow the Signal
Stay ahead. Daily crypto intelligence, strategy breakdowns, and market analysis.
Get InDecision Framework Signals Weekly
Every week: market bias readings, conviction scores, and the factor breakdown behind each call.
