Implementation of the Nelson-Siegel-Svensson interest rate curve model.
Project description
Nelson-Siegel-Svensson Model
Implementation of the Nelson-Siegel-Svensson interest rate curve model in Python.
from nelson_siegel_svensson import NelsonSiegelSvenssonCurve
import numpy as np
from matplotlib.pyplot import plot
y = NelsonSiegelSvenssonCurve(0.028, -0.03, -0.04, -0.015, 1.1, 4.0)
t = np.linspace(0, 20, 100)
plot(t, y(t))
Free software: MIT license
Documentation: https://nelson-siegel-svensson.readthedocs.io.
Features
Python implementation of the Nelson-Siegel curve (three factors)
Python implementation of the Nelson-Siegel-Svensson curve (four factors)
Methods for zero and forward rates (as vectorized functions of time points)
Methods for the factors (as vectorized function of time points)
Calibration based on ordinary least squares (OLS) for betas and nonlinear optimization for taus
Simple command line interface (CLI) for evaluating, calibrating and plotting curves
Calibration
In order to calibrate a curve to given data you can use the calibrate_ns_ols and calibrate_nss_ols functions in the calibrate module:
import numpy as np
from nelson_siegel_svensson.calibrate import calibrate_ns_ols
t = np.array([0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0])
y = np.array([0.01, 0.011, 0.013, 0.016, 0.019, 0.021, 0.026, 0.03, 0.035, 0.037, 0.038, 0.04])
curve, status = calibrate_ns_ols(t, y, tau0=1.0) # starting value of 1.0 for the optimization of tau
assert status.success
print(curve)
which gives the following output:
NelsonSiegelCurve(beta0=0.04201739383636799, beta1=-0.031829031569430594, beta2=-0.026797319779108236, tau=1.7170972656534174)
Command Line interface
nelson_siegel_svensson provides basic functionality using a command line interface (CLI):
Usage: nelson_siegel_svensson [OPTIONS] COMMAND [ARGS]...
Commandline interface for nelson_siegel_svensson.
Options:
--help Show this message and exit.
Commands:
calibrate Calibrate a curve to the given data points.
evaluate Evaluate a curve at given points.
plot Plot a curve at given points.
In order to calibrate a curve to given data points on the command line, try
nelson_siegel_svensson calibrate -t '[0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0]' -y '[0.01, 0.011, 0.013, 0.016, 0.019, 0.021, 0.026, 0.03, 0.035, 0.037, 0.038, 0.04]' --nelson-siegel --initial-tau1 1.0
which gives
{"beta0": 0.042017393764903765, "beta1": -0.03182903146166806, "beta2": -0.026797320316066128, "tau": 1.717097232403383}
This curve can then be evaluated on the command line using
nelson_siegel_svensson evaluate -c '{"beta0": 0.042017393764903765, "beta1": -0.03182903146166806, "beta2": -0.026797320316066128, "tau": 1.717097232403383}' -t '[0, 1, 2, 3]'
resulting in
[0.010188362303235707, 0.012547870204470839, 0.01574855552855885, 0.01897955804146046]
And finally, the curve can be plotted with
nelson_siegel_svensson plot -o cli_plot_example.png -c '{"beta0": 0.042017393764903765, "beta1": -0.03182903146166806, "beta2": -0.026797320316066128, "tau": 1.717097232403383}'
Note that the quoting in the above commands prevents bash from evalutating the JSON-based parameters. Depending on your shell, you may require a different quoting mechanism.
Credits
Main developer is luphord.
This package was prepared with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
History
0.4.0 (2019-07-08)
Simple command line interface (CLI) supporting curve evaluation, calibration and plotting
Added more documentation
0.3.0 (2019-03-17)
Added type annotations
0.2.0 (2019-02-20)
Ordinary least squares based calibration of Nelson-Siegel-Svensson
Ordinary least squares based calibration of Nelson-Siegel
A little bit of usage documentation
0.1.0 (2019-02-13)
First release on PyPI.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for nelson_siegel_svensson-0.4.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90a4fb0d6d3398d77a7b76754a883be036fff4fab82e3764d7ff9505cafa4a1a |
|
MD5 | 6e50e3bec07fb902529fd64aa76d656a |
|
BLAKE2b-256 | bb8e9959bbfe60f299d4343240d0a0b1dc72ec5ae16b6a8f36dd1628f10ff643 |
Hashes for nelson_siegel_svensson-0.4.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b4f16fa47120d99cf7388da65f3c7acdbb812ef3fd27ae6fee4ae296ec8afe6 |
|
MD5 | d92243315bff67553e2b2616b9850549 |
|
BLAKE2b-256 | 61e10281ba0d9586ff79cf6fb0e56832ddc7a525de2cb560f4f8b8e7432d9526 |