yieldcurveml.interpolatecurve
class
CurveInterpolator(yieldcurveml.stripcurve.bootstrapcurve.RateCurveBootstrapper, yieldcurveml.stripcurve.stripcurve.CurveStripper):
27class CurveInterpolator(RateCurveBootstrapper, CurveStripper): 28 """Yield curve interpolator. 29 30 Parameters 31 ---------- 32 estimator : sklearn estimator, default=None 33 Scikit-learn estimator to use for fitting. If None, uses Ridge. 34 lambda1 : float, default=2.5 35 First lambda parameter for NSS function 36 lambda2 : float, default=4.5 37 Second lambda parameter for NSS function 38 type_regressors : str, default="laguerre" 39 Type of basis functions, one of "laguerre", "cubic" 40 """ 41 def __init__( 42 self, 43 estimator=None, 44 lambda1: float = 2.5, 45 lambda2: float = 4.5, 46 type_regressors: Optional[Literal["laguerre", "cubic", "kernel"]] = "cubic", 47 kernel_type: Optional[Literal['matern', 'rbf', 'rationalquadratic', 'smithwilson']] = None, 48 interpolation: Literal['linear', 'cubic'] = 'linear', 49 **kwargs 50 ): 51 self.estimator = estimator 52 self.lambda1 = lambda1 53 self.lambda2 = lambda2 54 self.type_regressors = type_regressors 55 self.kernel_type = kernel_type 56 self.interpolation = interpolation 57 self.maturities = None 58 if self.type_regressors != "kernel": 59 self.kernel_type = None 60 self.maturities = None 61 self.swap_rates = None 62 self.tenor_swaps = None 63 self.T_UFR = None 64 self.kernel_params_ = kwargs # Store kernel parameters 65 self.coef_ = None 66 self.cashflows_ = None 67 self.maturities = None 68 self.curve_rates_ = None 69 70 def fit( 71 self, 72 maturities: np.ndarray, 73 yields: np.ndarray, 74 T_UFR: Optional[float] = None, 75 **kwargs 76 ) -> "CurveInterpolator": 77 """Fit the curve Interpolator model. 78 79 Parameters 80 ---------- 81 maturities : np.ndarray 82 Maturities of the swap rates 83 yields: np.ndarray 84 Yields to interpolate 85 T_UFR : float, default=None 86 UFR to use for the Smith-Wilson method 87 88 Returns 89 ------- 90 self : CurveInterpolator 91 Fitted curve Interpolator model 92 """ 93 assert len(maturities) == len(yields), "Maturities and yields must have the same length" 94 self.maturities = np.asarray(maturities) 95 self.yields = np.asarray(yields) 96 self.T_UFR = T_UFR 97 # Store inputs 98 self.rates_ = YieldsContainer(maturities=self.maturities, yields=self.yields) 99 # Calculate discount factors from actual yields 100 V = np.exp(-self.maturities * self.yields) 101 # Get basis functions 102 X = self._get_basis_functions(self.maturities) 103 if X.ndim == 1: 104 X = X.reshape(-1, 1) 105 # Use actual discount factors to calculate target values 106 y = (1 - V) / self.maturities 107 # Fit the model 108 self.estimator.fit(X=X, y=y, **kwargs) 109 predictions = self.estimator.predict(X) 110 self.residuals_ = predictions - y 111 return self 112 113 def predict(self, maturities: np.ndarray) -> np.ndarray: 114 """Predict interpolated rates at given maturities.""" 115 check_is_fitted(self) 116 X = self._get_basis_functions(maturities) 117 if X.ndim == 1: 118 X = X.reshape(-1, 1) 119 # Model predicts (1-V)/T values 120 y_pred = self.estimator.predict(X) 121 # Convert back to spot rates 122 spot_rates = -np.log(1 - y_pred * maturities) / maturities 123 discount_factors = np.exp(-maturities * spot_rates) 124 forward_rates = self._calculate_forward_rates(maturities, spot_rates, discount_factors) 125 126 return CurveRates( 127 maturities=maturities, 128 spot_rates=spot_rates, 129 forward_rates=forward_rates, 130 discount_factors=discount_factors 131 )
Yield curve interpolator.
Parameters
estimator : sklearn estimator, default=None Scikit-learn estimator to use for fitting. If None, uses Ridge. lambda1 : float, default=2.5 First lambda parameter for NSS function lambda2 : float, default=4.5 Second lambda parameter for NSS function type_regressors : str, default="laguerre" Type of basis functions, one of "laguerre", "cubic"
def
fit( self, maturities: numpy.ndarray, yields: numpy.ndarray, T_UFR: Optional[float] = None, **kwargs) -> CurveInterpolator:
70 def fit( 71 self, 72 maturities: np.ndarray, 73 yields: np.ndarray, 74 T_UFR: Optional[float] = None, 75 **kwargs 76 ) -> "CurveInterpolator": 77 """Fit the curve Interpolator model. 78 79 Parameters 80 ---------- 81 maturities : np.ndarray 82 Maturities of the swap rates 83 yields: np.ndarray 84 Yields to interpolate 85 T_UFR : float, default=None 86 UFR to use for the Smith-Wilson method 87 88 Returns 89 ------- 90 self : CurveInterpolator 91 Fitted curve Interpolator model 92 """ 93 assert len(maturities) == len(yields), "Maturities and yields must have the same length" 94 self.maturities = np.asarray(maturities) 95 self.yields = np.asarray(yields) 96 self.T_UFR = T_UFR 97 # Store inputs 98 self.rates_ = YieldsContainer(maturities=self.maturities, yields=self.yields) 99 # Calculate discount factors from actual yields 100 V = np.exp(-self.maturities * self.yields) 101 # Get basis functions 102 X = self._get_basis_functions(self.maturities) 103 if X.ndim == 1: 104 X = X.reshape(-1, 1) 105 # Use actual discount factors to calculate target values 106 y = (1 - V) / self.maturities 107 # Fit the model 108 self.estimator.fit(X=X, y=y, **kwargs) 109 predictions = self.estimator.predict(X) 110 self.residuals_ = predictions - y 111 return self
Fit the curve Interpolator model.
Parameters
maturities : np.ndarray Maturities of the swap rates yields: np.ndarray Yields to interpolate T_UFR : float, default=None UFR to use for the Smith-Wilson method
Returns
self : CurveInterpolator Fitted curve Interpolator model
def
predict(self, maturities: numpy.ndarray) -> numpy.ndarray:
113 def predict(self, maturities: np.ndarray) -> np.ndarray: 114 """Predict interpolated rates at given maturities.""" 115 check_is_fitted(self) 116 X = self._get_basis_functions(maturities) 117 if X.ndim == 1: 118 X = X.reshape(-1, 1) 119 # Model predicts (1-V)/T values 120 y_pred = self.estimator.predict(X) 121 # Convert back to spot rates 122 spot_rates = -np.log(1 - y_pred * maturities) / maturities 123 discount_factors = np.exp(-maturities * spot_rates) 124 forward_rates = self._calculate_forward_rates(maturities, spot_rates, discount_factors) 125 126 return CurveRates( 127 maturities=maturities, 128 spot_rates=spot_rates, 129 forward_rates=forward_rates, 130 discount_factors=discount_factors 131 )
Predict interpolated rates at given maturities.