How it works
Rates Intelligence, in plain English
Two probability models read where rates are heading. An asymmetric-risk recommendation tells you what to do today. A borrower-impact panel converts the difference into dollars on a real loan. Plus a 7-factor bond market conditions index for context.
What the dashboard does
The page answers two separate questions, side by side, every time you load it:
- Action (left) — a LOCK / FLOAT call from a 6-factor asymmetric-risk rule (mortgage-rate level, momentum, MBS spread, Fed cycle, vol term structure, credit stress). It is a cost-of-regret default, not a forecast, with its own action-confidence badge.
- What each choice costs (right, since September 9, 2026) — for your closing date, loan amount and product, the measured cost of locking now, floating to close, locking with a float-down, or floating with a trigger: expected, bad case (P95) and best case (P5), in basis points and dollars, from every daily-issued window of actual Optimal Blue lock rates over the trailing ~2 years, under disclosed lender terms. No model.
- Rate-moving events — the real Fed decision days, CPI/jobs/GDP/PCE release dates and 10/20/30-year Treasury auctions inside a 45-day lock window, from the official schedules.
- Model internals (collapsed) — the two direction models (V1.2 calibrated, V1.5 regime-conditional) and the rule engine’s factor panel. Demoted from the hero after the pre-registered 90-day check found no demonstrated live skill; published for transparency only.
Below those, you’ll find detailed breakdowns of each model and a supplementary 7-factor Bond Market Conditions Index (the legacy RLI score) for analysts who want to drill in. The Direction + Action + Impact zones are the borrower-facing primary surface; everything below is detail for those who want it.
Why direction and action can disagree
The dashboard answers two questions, separately. They can — and sometimes should — point opposite ways.
Question 1 · Direction
Where are rates heading in the next 30 days? The V1.2 and V1.5 probability models read this from current bond-market context. A reading like 54% chance lower is a slight directional lean — useful but not a high-conviction call. A reading like 67% chance higher is a high-conviction call.
Question 2 · Action
What should you do today? The LOCK / FLOAT recommendation weighs asymmetric risk — the cost of being wrong on FLOAT vs the cost of being wrong on LOCK. When bond vol is breaking out, MBS spreads can widen 25–50 bps even if Treasury yields drop. That asymmetry can override a low-conviction directional read.
Worked example — when they disagree
V1.2 says 54% chance rates drop. V1.5 says 52% chance rates drop. Both lean DOWN, but conviction is low (both probabilities are within 15 points of 50/50). Meanwhile, bond volatility is breaking out — the 5-day vol is 1.5× the 20-day vol. In that regime, the historical asymmetry shows: when vol spikes, MBS spreads widen further on a wrong-FLOAT than they tighten on a right-FLOAT. So the recommendation is LOCK with high action confidence, even though the model has low directional confidence in the LOCK direction. The Borrower Impact panel converts the asymmetry into dollar terms — that’s the proof, not philosophy.
Model health & abstention (updated September 9, 2026 · v1.5.3)
The 90-day check ran on September 9, 2026 (45 days late — the reminder fired 33 times). Verdict: fails to establish live skill.
Across 70 scored 30-day calls (only 3 independent windows) V1.2 and V1.5 each hit 21.4%against validated baselines of 57.7% / 58.0%, in a period when rates rose 85.7% of the time — the constant down-caller diagnosed on July 2 persisted. V1.2’s probabilities still beat a constant forecast (Brier 0.295 vs 0.314); V1.5’s did not (0.385). The action tier emitted LOCK on 70 of 70 briefs — identical to always-lock, 0.000 bps of measured value-add. On 3 independent windows that is not a rigorous disproof, but it is not evidence of skill either, and the instrument could not mature (~1 independent window per 43 days). So: the models stay frozen (a successor is a NEW pre-registration, never an edit), the direction tier moved to the collapsed “model internals”, the headline became the measured cost of each choice, scoring moved to the daily lock-rate index with an explicit independent-window count, and the next review is an evidence gate (10 independent windows per horizon), never a calendar date again.
Our public commitment is that the track record builds in public — including when it’s bad. The first ~10 weeks of live scoring ran well below the models’ validated baselines (details on the dashboard’s track-record tile and in the accuracy feed), in a specific, mechanically identifiable regime: the models select their coefficients from the Fed’s trailing 12-month path, and since spring 2026 that trailing read (“cutting”) has conflicted with what the forward futures market prices (hike risk). Three things changed as a result — none of them the models themselves, which stayed frozen through the review above:
- Abstention. While the trailing and forward Fed reads conflict, the Direction zone and the daily brief stop headlining a calibrated probability and say why. Abstention cuts both ways — it is not a prediction that rates rise. Raw model values remain in the machine-readable feeds for transparency.
- Harder scoring. The accuracy feed now publishes the honest independent sample size (daily predictions score against overlapping 30-day windows, which overstates the raw count), Brier probability scores against trivial-baseline benchmarks, corrected bucket calibration, and a realized-regret score for every LOCK/FLOAT recommendation against always-lock and always-float baselines.
- Measured asymmetry. We backtested the lock/float regret trade-off across 2003–2026. At a 30-day horizon, the bad-tail cost of floating (~41–48bps at the 95th percentile) exceeds the bad-tail cost of locking early (~29–34bps) by about 1.4×; at 45–60 day horizons in rising-rate regimes the float tail exceeds 100bps. Earlier copy quoted the long-horizon number as if it applied at 30 days — it doesn’t, and the framing here and in the daily brief now matches the measurement.
Full detail — including what the investigation found, what we explicitly do not claim, and the September 9 verdict — is in the public model changelog (v1.5.2 and v1.5.3 entries).
Two kinds of confidence
We show confidence twice on the dashboard. They measure different things:
Directional conviction
High = both V1.2 and V1.5 give a probability past 65% in the same direction.
Medium = one model passes 65%, the other is near 50/50.
Low = both models read close to 50/50. The model isn’t calling rates either way with conviction.
Action confidence
High = a hard asymmetric-risk override is firing (vol breakout, credit stress, or a strong ensemble tilt).
Medium = one strong factor or a moderate ensemble.
Low = no edge; the asymmetric-risk default LOCK applies but quietly.
When you see Direction: low conviction · Action: high confidence, that’s the asymmetric-risk override case. The model is unsure, but the math says the cost of being wrong is lopsided.
Inside the Direction zone
We run two independent probability models and show both. Showing both is the honest move: when they agree, the read is stronger; when they disagree, uncertainty is elevated and you should weight neither too heavily.
V1.2 · calibrated logistic
A flat logistic regression on 10 bond-market features (yield slope, vol percentiles, mortgage level, momentum, etc.). Trained on 2003–2018, walk-forward out-of-sample tested on 2019–2026. Reports a single calibrated probability that mortgage rates rise over the next 30 days. Out-of-sample hit rate 57.7% overall, 62.3% on high-conviction calls (|p − 0.5| > 0.15). Best at the 65%+ bucket where it’s within 2.7 percentage points of realized.
V1.5 · regime-aware + convexity
Three phase-conditional logistic models (Fed cutting / on hold / hiking) plus a convexity-zone interaction between MOVE and MBS spread that captures the non-linear regime where mortgage rates above ~5.5% behave differently. Best high-conviction hit rate (67.3%) and rescued the 2021–22 inflation surge bucket (48.1% vs V1.4’s 45.2%). Same out-of-sample window as V1.2.
Probabilities are reported on the side of the call (e.g. “54% lower” rather than “46% higher”) so retail readers can scan direction without translating. High conviction = probability past 65% in either direction. See the live track record below for accumulated post-launch performance and the model changelog for the full disconfirmed-versions log (V1.3, V1.6, V1.7, V1.8 all walk-forward-tested and rejected).
Inside the Action zone
The LOCK / FLOAT recommendation is not a directional forecast. It’s an asymmetric-risk read: which choice has the lower regret given how the market is set up today?
LOCK by default — and why
The base rate from 23 years of mortgage history: rates moved DOWN over a 30-day window 58% of the time and UP 42% of the time. The asymmetric piece: when rates move against a borrower (up), the cost materializes as monthly payment for the life of the loan. When rates move with a borrower (down) and you locked early, the cost is opportunity (you could have refi’d later). The two costs aren’t the same shape. Most days, the lower-regret default is LOCK.
The recommendation can override LOCK and call FLOAT when a 6-factor ensemble votes strongly for it (float-score ≥ 2.5 of a possible 3.0). The factors:
- Mortgage rate level — high in 1yr range = compressed downside, room to drop
- 4-week mortgage momentum — already-falling streak suggests continuation
- MBS spread + percentile — wide spread = MBS cheap, room to compress
- Fed cycle phase — cutting vs hiking changes the rate-trajectory base case
- Vol term structure — 5d/20d ratio > 1.2 is a hard LOCK override (vol breakout)
- IG credit OAS — credit stress widens MBS spreads independent of Treasuries
The action confidence pill reflects which of these is firing: HIGH when a hard override is firing or multiple factors align, MEDIUM when one strong factor is present, LOW when the asymmetric-risk default applies but quietly. Action confidence is not directional confidence.
Inside the “what each choice costs” panel
This replaced the Borrower Impact panel on September 9, 2026. That panel scaled a 20-day Treasury vol by √21 and a 1.5× “asymmetry multiplier” — a heuristic our own July 2 backfill could not support at a 30-day horizon. The new panel contains no formula of that kind: it is the measured distribution.
How the numbers are built
- Take the daily Optimal Blue 30-year conforming lock-rate index (FRED
OBMMIC30YF, ~35% of US locks) for the trailing 504 sessions (~2 years). - From every business day, look forward 15, 30, 45 and 60 calendar days (the rate on or before the target date — the lock-expiry convention) and record the whole daily path.
- On each path, compute what each choice would have cost under the lender terms shown on the panel: lock now (the lock-period pricing), float to close (the close-date rate plus a short lock), lock + float-down (the option premium, exercised once if rates fell at least the minimum), float with a trigger (float, but lock the remaining period the day the rate rises past the trigger).
- Report each choice’s expected, 5th- and 95th-percentile cost in basis points of rate, then convert to 30-year P+I dollars on your loan amount. The product menu swaps in that product’s own current rate.
“Lowest-regret” rule (no tuned numbers): among the choices that do not cost more on average than locking now, pick the one with the smallest bad case; ties go to locking. Anchored on locking because, under zero drift, locking and floating tie on average and only fees and the width of the outcome separate them.
Why a trailing window rather than all history: the scale of rate moves is not stable — 2022 was roughly twice as wide as 2025 — so a 2-year window tracks the current regime honestly. The panel prints how many windows sit behind the numbers and roughly how many are independent (a 30-day window overlaps its neighbors).
Lender terms are industry-typical defaults until replaced by an actual rate sheet; every published decision object and every scored row carries the hash of the terms it used, so history can never be silently re-scored. DSCR / investor rates run 75–100 bps higher than residential; ARMs and prepayment penalties are not modeled. This is a measured cost distribution, not a forecast and not a quote — talk to your loan officer for a binding lock.
Data sources & freshness
Every number on the dashboard traces back to one of four sources, each dated separately. The freshness panel at the top of /rates shows each source’s latest data point and a state pill (Live / Lagging / Stale) — the headline anchors on the freshest, not the slowest. We don’t collapse different cadences into one misleading “updated X ago” line.
FRED · Daily Treasury Yields
DGS2, DGS10, DGS30, DFF (Fed Funds Effective).
Cadence: business days, T+1 publish (~5pm ET). “1d ago” on a weekday morning is the healthy state.
Freddie Mac · Primary Mortgage Market Survey
MORTGAGE30US — the 30-year conventional rate.
Cadence: weekly, Thursdays. Up to 7 days old is the normal state until the next print.
FRED · Credit Stress Proxy
BAMLC0A0CM — ICE BofA US Corporate IG OAS. Co-moves ~0.85 with MBS spreads.
Cadence: business days, T+1.
Yahoo Finance · MOVE Index
^MOVE — ICE BofAML MOVE Index. The bond-market VIX. Used as informational context (not a model input directly).
Cadence: daily close-of-day.
Internal · Bond Conditions Index (gundlach_rli)
The supplementary 7-factor 0–100 score (described in the next section). Computed every business day at ~21:00 UTC and stored in our database. The freshness panel surfaces this as “Bond Conditions Index” with its own age + cadence so a stale daily cron immediately shows up red.
Every source row also carries a 30-day inline sparkline (rising = emerald, falling = blue, flat = gray) so you can scan four trends visually rather than parse four numbers. The “?” icon next to each label opens a publish-cadence tooltip in plain English.
Supplementary detail
7-Factor Bond Conditions Index (legacy RLI)
The original Rate Lock Index (GUNDLACH) — a 0–100 read of current bond-market conditions distilled from seven independent factors. It’s a snapshot of conditions, not a 30-day prediction. Above 65 = lean LOCK on conditions alone. Below 35 = lean FLOAT. The middle is noise. Star rating (1–5) reflects how strongly the seven factors agree. Surfaced on /rates as a collapsible panel below the primary tools — useful for analysts who want to see what bond markets are doing today.
The scale
| Score | Band | Stars | What it means |
|---|---|---|---|
| 0–15 | MAX FLOAT | ★★★★★ | Rates likely to drop — wait on every deal you can |
| 15–35 | FLOAT | ★★★★★ | Bullish bonds — float >21-day deals, keep lock list warm |
| 35–45 | NEUT-BULL | ★★★★★ | Lean float, no strong conviction |
| 45–55 | NEUTRAL | ★★★★★ | No edge — let closing date drive lock timing |
| 55–65 | NEUT-BEAR | ★★★★★ | Lean lock, no strong conviction |
| 65–85 | LOCK | ★★★★★ | Bearish bonds — lock anything closing in 30 days |
| 85–100 | MAX LOCK | ★★★★★ | Rates likely to rise — lock every lockable deal |
The seven factors
Each outputs a value between −1 (strong FLOAT) and +1 (strong LOCK). We multiply by the weight, add them up, and convert to the 0–100 scale.
Path Deviation
weight 25%“Is the 10-year Treasury stretched away from its recent trend?”
If the 10y yield is unusually high vs the last 60 days, it's likely to mean-revert down → float. Unusually low → expect a bounce back up → lock.
Event Risk
weight 20%“What's on the Fed / inflation calendar in the next 14 days?”
Fed meetings (1.0×), CPI (0.85×), NFP (0.70×), PCE (0.55×), Treasury auctions (0.30–0.35×). Multiple big events in the window → don't gamble through them → lock.
Primary–Secondary Spread
weight 15%“How much margin are lenders currently baking into the rate?”
Gap between the 30y mortgage and the 10y UST (historical mean ~180 bps). Wide AND tightening = lenders about to pass a rally through → float. Tight = no more buffer left → lock.
Volatility Regime
weight 15%“How jittery are bonds right now?”
MBB's 20-day realized volatility. High vol = unpredictable tape = hedge the event risk → lock. Normal vol = no signal.
OAS Momentum
weight 10%“Is the MBS market richening or cheapening?”
IG Corporate OAS is a clean proxy for mortgage-bond credit spreads (they co-move ~0.85). Tightening → MBS getting bid → rates should follow down → float. Widening → lock.
Dealer Flow
weight 8%“Are Wall Street dealers long or short MBS?”
Regression of MBB returns against duration-matched IEF. When MBB persistently underperforms → dealers long-axis (supply overhang) → eventual compression → float.
Technical
weight 7%“Where is the 10y on its own chart?”
14-day RSI on the 10-year yield. Overbought (RSI > 70) → expect pullback → float. Oversold (RSI < 30) → expect bounce → lock.
How the final number is built
Factor values are normalized to [−1, +1] before weighting, so a score of 50 means “all signals washed.” 75 means “three-quarters of the way to a strong lock signal.” The dashboard shows every factor’s contribution in bps-of-points so you can see which pulled the score where.
How the star rating works
Stars are a confidence signal, not a magnitude. Two conditions must both be true for 5 stars:
| Stars | Requirement |
|---|---|
| ★★★★★ | Score ≥ 85 or ≤ 15, ≥70% weight aligned — rare, high-conviction |
| ★★★★★ | Score ≥ 75 or ≤ 25, ≥60% aligned |
| ★★★★★ | Score ≥ 65 or ≤ 35, ≥50% aligned |
| ★★★★★ | Score moderately away from 50 |
| ★★★★★ | Score near 50 — no edge |
A 5-star LOCK means seven independent signals all pointing the same way. That’s rare and worth acting on. A 1-star NEUTRAL means the market is giving you no edge — let the customer’s closing date lead.
Track record — V1.2 / V1.5 (primary models)
Both probability models are walk-forward out-of-sample tested across 23 years (2003-2018 train / 2019-2026 test window). 381 historical predictions per model scored against realized 30-day mortgage moves. These are the historical out-of-sample numbers. The live record contradicts them (see the model-health section above): in the first 129 days of public predictions the high-conviction calls hit 20.5% on 3 independent windows. Back-test scores are context, not a promise; the live ledger is the test.
V1.5 high-conviction OOS
67.3%
hit rate when |p − 0.5| > 0.15
25.3 pp above the 42% base rate for “rates UP in 30d”
V1.2 high-conviction OOS
62.3%
hit rate when |p − 0.5| > 0.15
20.3 pp above the 42% base rate
Calibration
✓
high-conviction > low-conviction
The integrity test: the model “knows” when it knows something. 65%+ bucket within 2.7pp on V1.2 / 6.0pp on V1.5.
V1.2 · calibrated logistic
- Overall OOS hit: 57.7% (n=381)
- High-conviction subset: 62.3%
- 65%+ bucket: within 2.7 pp of realized
- Walk-forward train 2003–2018, test 2019–2026
V1.5 · regime-conditional + convexity
- Overall OOS hit: ~58% (n=381)
- High-conviction subset: 67.3%
- 65%+ bucket: within 6.0 pp
- 2021–22 inflation surge held: 48.1% (vs V1.4 45.2%)
Public commitment: V1.2 and V1.5 are frozen. The 90-day check ran September 9, 2026 and found no demonstrated live skill; a successor is a new pre-registration, never an edit. The next review opens at 10 independent scored windows per horizon on the daily lock-rate index — an evidence gate, not a date.
The live tile renders “accumulating” until 30 days after the first brief, then switches to a scored-vs-baseline view automatically. The discipline is showing the OOS baseline alongside the live number so a regression to the mean — or a real degradation — is visible immediately.
What we tested and rejected (in public)
V1.2 and V1.5 didn’t become primary by default. They beat four other architectures we tested in the same walk-forward OOS window — and the disconfirmed versions stay publicly logged in the changelog. The point isn’t that the rejected versions were bad ideas; the point is that the surviving versions earned their place by outperforming attempts to displace them.
V1.3 · flat MOVE
Added MOVE Index as a flat 7th feature to V1.2’s logistic. Improved overall hit modestly but over-shot the 65%+ bucket calibration. Disconfirmed. MOVE shipped as page context only.
V1.6 · ensembling
Stacked V1.2 + V1.5 outputs into a meta-learner. Tested two architectures (logistic + isotonic). Neither beat V1.5 standalone on either overall or high-conviction OOS. Disconfirmed.
V1.7 · rule-based blend
Hand-coded phase weights blending V1.2 (cutting/hold) + V1.5 (hiking) by Fed cycle. Lost the calibration property V1.5 holds across phases. Disconfirmed.
V1.8 · isotonic recalibration
Pool-adjacent-violators on V1.5 raw output. Tightened bucket calibration but flattened high-conviction precision (the headline 67.3%). Net negative. Disconfirmed.
Why this matters for trust: a model that survives four serious attempts to displace it is a model worth trusting. Every disconfirmation is logged with what we tested, what we rejected, and why — full detail in the model changelog on /rates.
Why we pivoted — the 7-factor RLI’s track record
Before V1.2 and V1.5 existed, /rates was a single 0–100 score from the legacy 7-factor RLI tested as a directional forecasting tool. We backfilled its 14- and 30-day directional hit rates against realized mortgage moves — here are the live, ongoing scores. Below 50% on the 14d horizon was the data point that reframed /rates from forecasting to asymmetric-risk recommendation. The 7-factor RLI now lives on the dashboard as a conditions snapshot (collapsible, supplementary), not a directional bet.
14-day horizon · n=114
43%
direction hit rate
Brier: 0.257 (0.25 = coin flip)
Calibration: 1.2★ right vs 1.2★ wrong ✓
30-day horizon · n=103
32%
direction hit rate
Brier: 0.279 (0.25 = coin flip)
Calibration: 1.1★ right vs 1.3★ wrong
We keep the 7-factor scores live and dated for full transparency — if a system claims it’s honest, the disconfirmed numbers should still be visible. The 7-factor index isn’t a directional model now; it’s a conditions snapshot used as one of six factors in the asymmetric-risk recommendation.
Share with a client
“Our rates dashboard answers two questions every morning. First: where are mortgage rates likely heading over the next 30 days? Two probability models — one calibrated, one regime-aware — read live bond-market data and report a 0–100% probability with their own conviction badge. Second: what should you do today? A LOCK / FLOAT recommendation weighs the asymmetric cost of being wrong — when bond volatility is elevated, locking is usually the lower-regret call even if rates lean slightly lower. A borrower-impact panel converts the difference into dollars on a real $500K loan. It’s research, not advice, but it’s the same framework an institutional MBS trader uses, translated for rate-lock timing.”
Research only · not investment advice. Consult your loan officer for binding rate quotes.
Powered by Chad Investor Lending · NMLS #2636410