Appearance
Predictions
Every price forecast the system has ever made, sorted with the most recent first.
How a Prediction Is Made
The system doesn't just ask the AI for a number. It follows a multi-step process:
1. Thesis First
Before any price prediction, the LLM produces a qualitative thesis — a reasoning document that answers:
- Direction: Is the stock likely to go up or down?
- Conviction: How strong is the evidence? (0–100 scale)
- Regime: Is the stock trending, mean-reverting, volatile, or range-bound?
- Scenarios: What are the bull case and bear case, with probabilities?
- Falsifiable hypotheses: Specific, testable predictions like "If RSI crosses below 30, the thesis is wrong"
The thesis is the foundation. Everything else builds on it.
2. Tiered Pricing
Once the thesis is set, the system picks the best available method to produce a numeric price:
| Tier | What's Used | When Available |
|---|---|---|
| Tier 1 | Your personal quantile ML model (5 models predicting q10/q25/q50/q75/q90 of returns) | After ~100+ resolved snapshots |
| Tier 2 | Pooled model trained across all users (single q50 median model) | After enough data accumulates |
| Tier 3 | Sector-transfer model (from a similar company, single q50 median model) | When another ticker in the same sector is trained |
| Tier 4 | Thesis heuristic (direction + rough magnitude from the thesis) | Always available — no training needed |
Tier 3 details: Sector-transfer has a three-level internal fallback:
- Models from other tickers in the same GICS sector (model type
sector_quantile_q50) - A pooled model (
pooled_quantile_q50) trained for this specific ticker - Any pooled model across all tickers
Because only a single q50 model is available at Tier 3, the remaining quantile bands (q10/q25/q75/q90) are estimated from volatility. Tier 3 predictions also receive a 30% confidence penalty compared to Tier 1–2.
Each tier is automatically performance-gated: if a model's recent coverage drops below 40% or its Winkler score exceeds 10, it's downgraded one level. You never see a bad model's output.
How Predictions Improve Over Time
When you first add a ticker, predictions start at Tier 4 — the system has no historical data to learn from, so it relies on the thesis heuristic (direction + rough magnitude from the LLM). These predictions are immediately available, but their accuracy improves as the system accumulates experience.
The first retrain cycle triggers a backfill — historical snapshots are reconstructed from existing stock price data and resolved with their known outcomes. This can generate hundreds of resolved snapshots in a single run, moving the system to Tier 1 (your personal quantile ML model) on the same cycle. From there, every new prediction the system makes and every accuracy check it runs adds another resolved snapshot to the training pool. Models are retrained automatically, incorporating the latest patterns.
The result: predictions are useful from day one, tighten over the first few weeks, and continue improving as more data accumulates.
Prediction Sources
Each prediction is tagged with a prediction source — a label that tells you exactly which method produced the price. This helps you understand the quality and origin of any given forecast:
| Source | Tier | What It Means | Quality |
|---|---|---|---|
| quantile_gbm | 1–3 | A trained ML model produced the price. This is the best-case scenario — the system has enough historical data to make data-driven forecasts. | Best |
| heuristic_override | 4 | No trained model was available, so the system derived a price from the thesis. It looked at the LLM's conviction, probability skew, and direction to estimate a numeric target. This only happens when the thesis is confident enough to produce a material move (above ±0.1%). | Good (with trained thesis) |
| llm_numeric | 4 fallback | The thesis heuristic decided the expected move was too small to be meaningful (below the ±0.1% materiality guard), so it stepped aside and the LLM's original numeric estimate was kept as-is. Think of it as "the system didn't have a strong enough signal to override the baseline." | Baseline (backward compat) |
In practice: Tier 1–3 predictions always use quantile_gbm. Tier 4 predictions use either heuristic_override (confident thesis) or llm_numeric (immaterial move). As more tickers accumulate training data, you'll see fewer Tier 4 sources and more quantile_gbm over time.
3. Self-Critique
A second LLM pass reviews the thesis for:
- Direction consistency — Does the direction match the technical regime?
- Scenario plausibility — Do the bull/bear probabilities add up?
- Falsifiability — Are the hypotheses actually testable?
- Horizon alignment — Does the narrative fit the prediction timeframe?
If the critique finds issues, the thesis is revised before the prediction is saved.
4. Feature Snapshots
Every prediction run saves a complete feature snapshot — all the raw data that went into it:
- Technical indicators (RSI, ATR, trend, volatility)
- Sentiment scores
- Psychology bias scores
- Fundamental data (P/E, earnings growth, etc.)
- Market context (beta, correlation vs SPY)
- Options data (put/call ratios, implied volatility)
- The thesis features (conviction, regime probabilities, etc.)
When the target date passes, the accuracy tracker resolves the snapshot with the actual outcome. Resolved snapshots become training data for the ML models — which means the system gets smarter over time.
What's in the Table
| Column | What It Means |
|---|---|
| Date | When the prediction was made |
| Target Date | The future date the prediction is for |
| Current Price | The stock price at the time of prediction |
| Predicted | What the system thinks the price will be on the target date |
| Diff | Difference between predicted and current price. Up arrow (↑) = predicted to rise, down (↓) = predicted to fall |
| Band | The confidence range [low, high] — the system expects the price to land somewhere in this range |
| Confidence | How sure the system is (0 to 1). Higher numbers = more confident |
| Horizon | Short (1–2 days), medium, or long (~10 days) |
| Type | Final = complete prediction / Intermediate = rough update during the day |
| Reasoning | Click "View" to see the AI's explanation for this prediction |
| After | Which step of the pipeline produced this prediction (Thesis, Critque, etc.) |
How to Read a Prediction
A good prediction has:
- A clear direction — the Diff should show a meaningful gap (up or down), not tiny noise
- A narrow band — a tight price range shows confidence
- A high confidence score — above 0.7 is strong
- A detailed reason — the reasoning text should make sense given the current news
Filtering Options
- Horizon tabs (short / medium / long): Focus on predictions for a specific timeframe
- Time range picker: Show predictions from the last 1 day up to the last year
Prediction Gating
FIN uses a MAPE-based gating system to automatically withhold predictions when recent accuracy is poor, preventing false outputs from reaching the dashboard.
How It Works
Each prediction horizon (short / medium / long) is gated independently:
- MAPE is computed — a rolling mean of the absolute percentage error over the most recent 20 accuracy-validation records, within a configurable time window (default 60 days).
- If MAPE exceeds the threshold (default 8.0%), that horizon enters gated mode — predictions are skipped and recorded as NULL-valued rows with the reason
MAPE exceeds confidence threshold. - A cooldown mechanism prevents permanent lockout: after a configurable number of consecutive skips (default 5), the system forces a retry. This gives accuracy a chance to recover.
- When MAPE drops back below the threshold (because new low-error predictions age out the old high-error ones), gating lifts automatically.
What You'll See
- Gating banner at the top of the Predictions page — green when inactive, yellow when gating is disabled, red when any horizon is actively gated. The red banner shows each gated horizon, current MAPE vs. threshold, and a cooldown progress bar.
- Skipped predictions in the table display a label like "MAPE 12.3% > 8%".
Configuration
Gating can be tuned per ticker in the Prompt Config page:
| Setting | Default | Range | Description |
|---|---|---|---|
| Master toggle | On | On/Off | Enables or disables gating entirely |
| MAPE threshold | 8.0% | 1–50% | MAPE above this triggers gating per horizon |
| Skip cooldown | 5 | 1–30 | Consecutive skips before a forced retry |
| Accuracy window | 60 days | 7–365 | Rolling window for MAPE computation |
Stale-Data Gating
In addition to MAPE gating, if no OHLCV price data has been received in 3+ days (accounting for weekends/holidays), predictions are withheld with a stale_data reason.

