SSB rate projection — methodology
This page explains exactly how our next-issue rate projection is computed, what it gets right, and what it doesn't.
Not financial advice.
We reproduce MAS's published SSB rate-setting formula on public SGS yield data to estimate the next issue's rate before MAS officially announces it. Our numbers can differ from MAS's final published rate — always verify against the official MAS announcement before acting.
The MAS formula, step by step
The full specification is in MAS's own SSB Technical Specifications (PDF) . We implement it verbatim:
- Reference yields. Take the simple average of daily
closing SGS benchmark yields for the 1-year, 2-year, 5-year, and
10-year tenors across the calendar month preceding the issue
announcement. Our pipeline scrapes MAS's daily benchmark CSV from
their public ASP.NET page (same data MAS publishes on
/bonds-and-bills). - Yield-curve interpolation (MAS Para 4.2). MAS interpolates the missing 3y/4y/6y/7y/8y/9y yields using a shape- preserving cubic Hermite spline. We use a Hermite variant fitted to MAS's historical output by regression — reproducing their interpolation exactly 81% of the time to the 2-decimal-place precision MAS publishes; the remaining ~19% miss by 1bp at the affected tenor due to the unknown internal interpolation rule (see Limitations).
- Par-bond bootstrap (MAS Para 4.3a). Convert the
10 annual par yields into 10 zero-coupon discount factors using
the standard par-bond identity: at each tenor
100 = Yn × Σ DFk + 100 × DFn. - Coupon derivation (MAS Para 4.3b). The step-up coupon schedule is chosen so that, at every tenor, the compounded average return equals the input par yield. This is the core MAS design principle: a 10-year-holder always earns the 10-year yield.
- Monotonicity adjustment (MAS Para 4.5). On an inverted yield curve the raw coupons would step down, which MAS does not allow. We solve a quadratic programme (SLSQP) that finds the minimum-adjustment monotone schedule while preserving the 10-year average return exactly.
- Rounding (MAS Para 4.6). Coupons rounded to 2dp; returns computed from the rounded coupons, also to 2dp.
The full implementation is in
ingest/projection.py. It
re-runs every 4 hours alongside the main MAS data ingest.
Backtest results
We ran the same projection code on every historical MAS SSB issue we could reconstruct — 128 issues from 2015-09 to 2026-04, split into 98 normal-curve and 30 inverted-curve regimes — and compared against the coupons MAS actually published.
| Metric | Mean abs error | Max error | ≤ 3bp | ≤ 5bp |
|---|---|---|---|---|
| All coupons (1280) | 0.47bp | 6bp | 99.2% | 99.8% |
| Normal-curve coupons | 0.38bp | 6bp | 99.2% | 99.8% |
| Inverted-curve coupons | 0.77bp | 4bp | 99.3% | 100.0% |
| Year-1 coupon | 0.09bp | 1bp | 100.0% | 100.0% |
| 10-year avg return | 0.16bp | 1bp | 100.0% | 100.0% |
1 basis point (bp) = 0.01 percentage points. MAS rounds coupons and returns to 2 decimal places (Para 4.6 of the Technical Specs ), implying a residual precision floor of a few basis points even from a perfectly-implemented version of the formula.
Worst-case historical issues
For transparency, here are the 5 issues where our projection drifted furthest from the MAS-published coupons. Errors are at the individual coupon level; the 10-year average return remained within a few basis points across all of them — the same precision floor implied by MAS's 2dp rounding rule (Para 4.6).
| Issue | Application open | Curve regime | Max coupon error |
|---|---|---|---|
| GX16040V | 2016-03-01 | normal | 6bp |
| GX15110T | 2015-10-01 | normal | 6bp |
| GX16030T | 2016-02-01 | normal | 5bp |
| GX16050Z | 2016-04-01 | normal | 5bp |
| GX16020F | 2016-01-04 | normal | 5bp |
Known limitations
- Only 1 month out. The projection only works for the issue whose reference-month SGS data has mostly or fully arrived. We deliberately do not project 2 or 3 months ahead — that would require forecasting the yield curve itself, which is a macro forecasting problem, not a formula-port.
- Inverted curves are harder. When 1-year yields exceed 10-year yields, MAS appears to apply a proprietary front-end smoothing rule we have not been able to reverse-engineer. Our step-up quadratic programme is our best approximation. Year-1 coupons on inverted curves have shown up to 4bp drift in backtest.
- Precision ceiling. MAS publishes SGS yields to 2 decimal places. This alone limits exact-match rate to ~88% even with a perfect algorithm; the remaining miss comes from the unknown internal interpolation rule.
- In-sample fit. Our Hermite interpolation parameters were calibrated by regression on historical MAS output, so backtest accuracy on that same period overstates true out-of-sample accuracy. We re-evaluate quarterly to detect drift but cannot guarantee future MAS issues will land in the same error band.
- MAS data revisions. SGS daily benchmark closes can be restated by MAS after publication. The projection re-runs on each ingest, so a revised yield will shift the published estimate.
- Methodology change risk. MAS could amend the SSB formula (last revision: Feb 2019). If they do, our projection will diverge from the published rate until we re-implement the new spec.
- Not updated in real time. Our ingest runs every 4 hours. The MAS feed itself publishes end-of-day, so on the first trading day of a new reference month our projection can briefly be a day stale — it self-corrects on the next ingest.
Why we don't use AI, and why only 1 month ahead
The SSB rate isn't a prediction problem — it's a calculation problem. MAS publishes the exact formula they use. Running that formula on the same public yield data MAS uses gives you the answer to within ±3bp, with no training data, no model, and nothing to tune.
An AI/ML approach would face three structural problems here:
- There isn't enough data to learn from. Only ~128 SSB issues have ever been published. After feature-engineering that collapses to far fewer independent observations. That is a handful of data points, not a training set — any model fitted to it would be overfitting by construction.
- It replaces certainty with noise. The formula is deterministic. Asking a neural network or LLM to estimate what deterministic math will output is strictly worse than just running the math: models of that kind output plausible-looking estimates with no calculable error bound, while running the formula yields a result whose deviation from MAS we can measure (see backtest above).
- It can't be audited. Every step of this pipeline is textbook fixed-income math: par-bond bootstrap, quadratic programming, cubic Hermite interpolation. You can read the code. You can't read the weights of a model and explain why it said 1.48% instead of 1.46%.
The same reasoning is why we stop at 1 month out. The formula needs the previous month's complete SGS yield average. For the next issue, we have (or are close to having) that data. For the issue after that, the reference month hasn't started — so projecting it requires forecasting the Singapore yield curve itself, which depends on the Fed, MAS policy, and global rate expectations. Short-horizon yield-curve forecasting is a well-known hard problem in the fixed-income literature, and we don't claim to have solved it.
One month, deterministic, auditable. That's what we can do honestly.
Not financial advice. Rates on /ssb/next are estimates derived from public SGS yield data and MAS's own published methodology. Always verify against MAS's official announcement before acting. Past accuracy is not a guarantee of future accuracy.