Treasury rates / Curve factors
Test whether three factors really describe the Treasury curve
Three coefficients summarise the shape of the whole Treasury par curve on a given day. This page fits the Nelson-Siegel three-factor form to Treasury's published daily par yields on each of 9,151 trading days from Jan 2, 1990 to Jul 31, 2026, holding the decay constant at the same 1.394092 years on all of them after Diebold and Li (2006), and then shows how well that curve actually fits rather than asserting that it does.
Data as of Jul 31, 2026 (last date in the fitted factor file, built from the U.S. Treasury daily par yield curve)
Treasury curve shape
The curve was inverted on fewer than one in ten trading days
Arrow keys: observations · Home/End: first/last · Esc: dismiss
Source: U.S. Department of the Treasury, daily par yield curve rates | NBER recession chronology via FRED USREC Fitted from the observed par yields by this repository's engine; the chart is thinned to the last print of each ISO week, and the extremes quoted above are computed from the full daily series of 9,151 dates. Methodology
Do they read as their names?
Each factor is scored against an observed feature of the same curve, over the whole sample with no screening of any kind. The fixed-decay factors track the features they are named for; the free-decay fit, which chooses its own decay constant date by date and therefore fits each day better, does not. The date counts differ because the 30Y quote is absent over its discontinuation and the 3M quote is missing on a handful of days.
| Factor | Observed benchmark | Fixed decay | Free decay | Dates |
|---|---|---|---|---|
| Level | Observed 30Y par yield | +0.9962 | +0.5851 | 8,157 |
| Level | Observed 10Y par yield | +0.9701 | +0.5658 | 9,151 |
| Slope | Observed 3M minus 10Y | +0.9944 | +0.4572 | 9,148 |
| Curvature | 2 × 2Y minus 3M minus 10Y | +0.9789 | +0.2933 | 9,148 |
Source: U.S. Department of the Treasury, daily par yield curve rates Pearson correlation over every date carrying the benchmark, computed at render time from the fitted coefficients and the observed par yields. The curvature benchmark is centred on the two-year point because that is where the fixed loading peaks. Methodology
Treasury curve fit
Free decay fits the latest Treasury curve more closely
Source: U.S. Department of the Treasury, daily par yield curve rates Residual is the observed par yield minus the fitted one. Both fitted curves are rebuilt at render time from the coefficients and decay constants stored in the factor file; the root mean squared residual so recomputed agrees with the stored value to 5.6e-17 percentage points on all 9,151 dates for the fixed fit and 1.6e-14 for the free fit. Methodology
| Tenor | Maturity (yr) | Observed (%) | Fitted, fixed (%) | Residual (pp) | Fitted, free (%) | Residual (pp) |
|---|---|---|---|---|---|---|
| 1M | 0.083 | 3.78 | 3.8541 | −0.0741 | 3.8550 | −0.0750 |
| 1.5M | 0.125 | 3.80 | 3.8576 | −0.0576 | 3.8623 | −0.0623 |
| 2M | 0.167 | 3.85 | 3.8613 | −0.0113 | 3.8696 | −0.0196 |
| 3M | 0.250 | 3.83 | 3.8696 | −0.0396 | 3.8840 | −0.0540 |
| 4M | 0.333 | 3.92 | 3.8788 | +0.0412 | 3.8982 | +0.0218 |
| 6M | 0.500 | 3.98 | 3.8997 | +0.0803 | 3.9263 | +0.0537 |
| 1Y | 1.000 | 4.08 | 3.9763 | +0.1037 | 4.0066 | +0.0734 |
| 2Y | 2.000 | 4.28 | 4.1546 | +0.1254 | 4.1523 | +0.1277 |
| 3Y | 3.000 | 4.34 | 4.3256 | +0.0144 | 4.2801 | +0.0599 |
| 5Y | 5.000 | 4.45 | 4.5904 | −0.1404 | 4.4917 | −0.0417 |
| 7Y | 7.000 | 4.59 | 4.7613 | −0.1713 | 4.6571 | −0.0671 |
| 10Y | 10.000 | 4.75 | 4.9117 | −0.1617 | 4.8427 | −0.0927 |
| 20Y | 20.000 | 5.28 | 5.0982 | +0.1818 | 5.1684 | +0.1116 |
| 30Y | 30.000 | 5.27 | 5.1608 | +0.1092 | 5.3056 | −0.0356 |
Treasury curve fit
A fixed decay makes factors comparable but less exact
Arrow keys: observations · Home/End: first/last · Esc: dismiss
Source: U.S. Department of the Treasury, daily par yield curve rates | NBER recession chronology via FRED USREC Root mean squared residual is the square root of the residual sum of squares divided by the number of tenors quoted that day, in percentage points. The chart is thinned to the last print of each ISO week, so a single extreme day appears only when it ends its week; every quantile and worst day quoted above is computed from the full daily series. Methodology
Factor identification
Free decay produces economically impossible negative level factors
Arrow keys: observations · Home/End: first/last · Esc: dismiss
Source: U.S. Department of the Treasury, daily par yield curve rates | NBER recession chronology via FRED USREC Both series are the same model on the same observed yields, differing only in whether the decay constant is estimated per date or held at 1.394092 years. Methodology
Factor identification
The latest fitted curves differ by at most 7.8 basis points, at 10Y
| Fit | Date | Level | Slope | Curvature | Decay (yr) | RMSE (pp) |
|---|---|---|---|---|---|---|
| Fixed decay | Jul 30, 2026 | 5.2219 | −1.3654 | −1.3308 | 1.3941 | 0.1119 |
| Fixed decay | Jul 31, 2026 | 5.2860 | −1.4380 | −1.2562 | 1.3941 | 0.1087 |
| Free decay | Jul 30, 2026 | 5.5819 | −1.7408 | −3.2e-8 | 5.6640 | 0.0689 |
| Free decay | Jul 31, 2026 | 5.5929 | −1.7526 | −1.1e-7 | 4.9285 | 0.0707 |
Source: U.S. Department of the Treasury, daily par yield curve rates Coefficients as stored in the factor file. A curvature magnitude below 1e-4 is printed in exponent form rather than rounded to zero. The free fit searches the decay constant over a bracket of 0.05 to 30 years and is flagged when it lands within 0.1% of either end. Methodology
Those two days are not a special case. Across the 9,150 consecutive-day pairs in the sample, the absolute one-day change in the level factor has a median of 0.0365 percentage points under the free fit but a 99th percentile of 5.5581 and a maximum of 21.3792 (Apr 2, 2008). Under the fixed fit the median is barely different at 0.0340, but the 99th percentile is 0.1730 and the maximum 0.3903 (Mar 18, 2009). The gap in the tail is the basin flipping, and it is why the published series fixes the decay constant.
Methodology
The model, in words
The fitted par yield at maturity tau is a constant plus two decaying terms. Write x = tau / lambda. The level loading is one at every maturity. The slope loading is (1 − exp(−x)) / x, which equals one at the front of the curve and decays to zero at the long end. The curvature loading is that same expression minus exp(−x), which is zero at both ends and humped in between. The fitted yield is the level coefficient plus the slope coefficient times its loading plus the curvature coefficient times its loading.
Because the slope loading tends to one and the curvature loading to zero as maturity tends to zero, and both tend to zero as maturity tends to infinity, the fitted curve satisfies y(0) = level + slope and y(infinity) = level. The level therefore reads as the long-rate level and the slope as SHORT MINUS LONG, which is negative for an upward-sloping curve and positive for an inverted one. The convention follows Svensson's equation (11) with the fourth factor set to zero, as restated by Drudi and Violi; the four-factor Svensson extension is implemented in this repository's engine but is not used for this dataset.
The decay constant, derived rather than copied
Diebold and Li fix the decay constant so that the curvature loading peaks at 30 months, the midpoint of the two- and three-year maturities conventionally used for a medium-term factor. That condition has an exact solution. The curvature loading depends on maturity only through x, and setting its derivative to zero reduces, after clearing a strictly positive factor, to x squared plus x plus one equals exp(x). The root is located here by bisection on a bracket of 1 to 3 at 1.7932821329007607, so the decay constant that puts the peak at 2.5 years is 1.394091846527279 years. Rebuilding the curvature loading at the constant stored in the factor file and locating its maximum again returns 30.000 months, which is the check that the shipped constant is the one it claims to be. It is identical on all 9,151 rows (1 distinct value in the file).
Diebold and Li print 0.0609 for that constant, and this build does not use their number. Theirs is a rate per month against a maturity in months, while this engine carries a time constant in years against a maturity in years, so the exact map is one over twelve times the rate. That makes their 0.0609 equal to 1.3683634373 years, which places the curvature peak at 29.446340 months rather than the 30 they state. Rounding does not account for it: the exact 30-month constant expressed their way is 0.0597760711, which rounds to 0.0598 and not to 0.0609. What does account for it is that the curvature loading is very flat near its maximum, so a loosely converged numerical search lands anywhere in a wide neighbourhood. The consequence of using their printed value would be a curvature peak 0.55 months early, and this build avoids it by deriving its own.
Fitting
Each date is fitted on exactly the tenors Treasury published that day, located by name and never by column position, because the tenor set grows over eras: the thinnest day in this sample carries 9 tenors and the richest 14. With the decay constant fixed the model is linear in the three coefficients, so every date is one closed-form ordinary least squares with a unique solution, no optimiser and no basin to flip out of. The free-decay benchmark instead profiles the residual sum of squares over the decay constant with a multi-start search across the bracket 0.05 to 30 years, because a single local minimisation on this data is trapped away from the best in-bracket optimum on a large minority of dates. The build requires at least five quoted tenors so that at least one residual degree of freedom survives; with 9 tenors on the thinnest day that floor never binds.
Root mean squared error is the square root of the residual sum of squares divided by the number of tenors used that day, in percentage points, and it is the residual against the observed par yields rather than against any interpolation of them. Yields, the level factor and the fitted curves are in percent per annum; the slope factor, the curvature factor, the residuals and the root mean squared error are in percentage points; the decay constant is in years. Nothing on this page is screened, weighted or smoothed: the observed curve file carries 9,161 trading days, the factor file carries 9,151 rows, and the count of source dates with no fitted row is 10, so the statistics above cover 9,151 of the 9,161 dates Treasury published a curve on.
Sources
- U.S. Department of the Treasury, Daily Treasury Par Yield Curve Rates. The observed yields, a US federal government work. This module reads them as published and fits them; it does not restate or interpolate them.
- Nelson, C. R., and A. F. Siegel (1987), “Parsimonious Modeling of Yield Curves”, The Journal of Business 60(4), 473–489. The three-factor functional form.
- Svensson, L. E. O. (1994), “Estimating and Interpreting Forward Interest Rates: Sweden 1992–1994”, NBER Working Paper 4871. The parameterisation and loading convention used here, with the fourth factor set to zero; see also Drudi and Violi, BIS Papers No. 25, p. 12, which states the same equation.
- Diebold, F. X., and C. Li (2006), “Forecasting the term structure of government bond yields”, Journal of Econometrics 130(2), 337–364. The fixed decay constant, and the 30-month curvature-peak condition this build re-derives.
- NBER business-cycle chronology via the FRED USREC series. The shaded bands, derived from the series rather than typed in.
Back to the Treasury curve itself, or the rates methodology for Treasury’s own par-curve description and the tenor-set eras. The NY Fed ACM term-premium decomposition, which does work on the zero-coupon curve, sits on the rates page.