Skip to content
All library documents

Regularizing Underspecified SOFR Curves with Pseudo-Instruments

Article Quant Q&A · Author: Chris_Sun

Summary

The document addresses short-end SOFR curve construction when daily forward-rate jumps are desired at FOMC dates but available three-month futures do not provide enough independent instruments to identify every node. This creates an underspecified calibration system, with many possible curves and potentially unbounded solutions. The answer frames the issue as regularization: additional information is needed to constrain the curve.

Several approaches are discussed, including imposing smoothness, removing nodes, adding market quotes, or adding lower-weight pseudo-instruments. The author favors pseudo-instruments with interpretable risk, such as spreads or butterflies targeting specified prices. Outright instruments correspond roughly to curve levels, spreads to gradients, and butterflies to curvature; enough lower-weight constraints can make calibration better determined without forcing every target exactly. The answer also suggests adding a spread instrument when fine control of a jump is required. Weight and placement still require judgment, testing, and analysis, and the proposed constraints can affect reported risks.

Key ideas

  • More curve nodes than calibrating instruments leave the calibration system underspecified and allow multiple solutions.
  • Regularization adds information to bound or select among possible curves.
  • Lower-weight pseudo-instruments can express desired curve structure while retaining interpretable secondary risks.
  • Spreads represent gradient-like behavior, while butterflies can constrain curvature.
  • Pseudo-instrument selection and weighting require practical analysis and can influence risk reporting.

Tags

Full text
# Answer by Attack68 (score 1, accepted)


# In rateslib curve construction, how to control the jump size in step daily forward (log_linear), when i have 2 nodes on 1 instrument?












I have recently been trying to build a SOFR curve using SOFR 3 month futures. The issue I am facing is that when constructing a SOFR curve in the short-end, market convention is to use step forward in the daily forward space, and the jump points are the FOMC dates. Normally, FOMC takes place almost every month, so I need to model the jumps to locate at the FOMC dates too. However, as SOFR 3M futures are 3 months in length, inevitably I would run into situations where I have to use 1 SOFR future to control more than 1 node dates. (I have also considered using the SOFR 1M futures to control the node points, but I feel it is just a work around of the actual issue, and the solution is also not perfect. as FOMC doesn't happen exactly once every month, whereas SOFR 1M futures have).

For the sake of technicality, is there a way to control the jump size, when number of node dates is more than the number of instruments?

## Answer by Attack68 (score 1, accepted)

https://quant.stackexchange.com/a/80409

If you have a copy of my book: "Pricing and Trading Interest Rate Derivatives" (2022, 3rd edition) there is a chapter called 12. Advanced Curve Building, and within that a section, 12.6 A practical curveset. This gives a concrete example of how to approach this problem, using underweighted, pesudo instruments in the form of meeting period Spreads and Butterflies.

The scenario you are faced with is one of an underspecified system: you have more parameters in your system then the calibrating instruments you are solving for. This means many (technically, infitite) solutions exist to your curves and the solutions may often be unbounded.

How do you bound your solutions (also termed regularisation)? You must add information. I have seen many things proposed:

- Add curvature constaints directly to the curve, e.g. minimise second derivative.

- Remove offending nodes, i.e. reduce the information in the curve to match the instruments.

- Add new market prices available (your current method).

- Add lower weighted pseudo-instruments.

#### Why I, personally, dont like 1-2-3

- is a hard coded solution and model hyper-parameter decision. Risk managing this is possible but it requires that the hyper-parameter doesn't change. It is more difficult to generically write into solvers and it is more difficult to ensure the propagatuon of automatic differentiation.

- Is a bit of a cop out. It might be practical for simplistic circumstances where the curves produced will be accurate enough, but with a bit of knowledge and restructuring one can do better.

- Might create complications with risk representations. It is also not always desirable to have to add less liquid or ad hoc instruments just to produce a valid curve.

#### Why I use 4

The instruments you actually want to use are well defined. The instruments that you have to add in have lower weights in the solver and can be classed as secondary risks in the risk report. The pseudo-instruments you create have physical meaning. Any changes to values of the pseudo-instruments create PnL that is captured in the PnL Explain by multiplying the delta-risk with the instrument value chg.

As an example, suppose you want to replicate 1) with minimising curvature (which is commonly what I do). Curvature is a second derivative property and note that:

- an outright instrument represents the function value of a curve, i.e. its level.

- a spread of two consecutive instruments mirrors a gradient metric of a curve.

- a butterfly of three consecutive instruments is a spread of spreads and mirrors the gradient of gradient, i.e. second derivative.

Creating pseudo-instruments of Butterfly of consecutive Instruments and targeting a price of zero basis points will create regularisation. You dont actually have to have prices available (this is why they are pseudo) you just create any instrument you like and set it to target a specific price. If you have sufficiently many of these that the curves transition from underspecified to overspecified then it wont necessarily solve to the target price - it will just act as a regulariser.

If you want your risk report to look good, you should try and add in just the right amount of these in just the right places. Usually trial, error, and analysis allows one to figure this out.

#### Specific Answer

For debugging, or for very fine grained short end curve control and you want to control the exact jump size for a spead, just create a Spread Instrument and add it to the `instruments` of the `Solver` with your objective price.

E.g.

```
from rateslib import IRS, Spread  # version > 1.0.0

args = dict(termination="1b", spec="usd_irs", curves="sofr")
spread = Spread(
    IRS(effective=dt(2024, 9, 5), **args),
    IRS(effective=dt(2024, 10, 17), **args)  # different meeting periods
)
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.