Skip to main content

Nelson-Siegel-Svensson Model

https://img.shields.io/pypi/v/nelson_siegel_svensson.svg https://github.com/luphord/nelson_siegel_svensson/actions/workflows/python-package.yml/badge.svg Documentation Status

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))
docs/_static/an_example_nelson-siegel-svensson-curve.png

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)
docs/_static/calibrated_nelson-siegel-curve.png

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}'
docs/_static/cli_plot_example.png

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.5.0 (2022-11-13)

  • Drop support for Python 3.7

  • Add support Python 3.9 and 3.10

  • Reformat code with black

  • Upgrade dependencies

  • Upgrade development status to beta

0.4.3 (2022-03-15)

  • Migrate to GitHub Actions

0.4.2 (2020-02-04)

  • Support Python 3.8

  • Upgrade flake8 (test requirement) as prior version did not support Python 3.8

0.4.1 (2019-11-14)

  • Added return type annotations for core modules

  • Added some example notebooks

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nelson_siegel_svensson-0.5.0.tar.gz (141.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nelson_siegel_svensson-0.5.0-py2.py3-none-any.whl (9.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file nelson_siegel_svensson-0.5.0.tar.gz.

File metadata

  • Download URL: nelson_siegel_svensson-0.5.0.tar.gz
  • Upload date:
  • Size: 141.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.13

File hashes

Hashes for nelson_siegel_svensson-0.5.0.tar.gz
Algorithm Hash digest
SHA256 cc1ed8ba0d12f236490da5bc5eadf846e0baeb92f4935223cc99dfbd44c018e2
MD5 ae45dd2dada85fb649f30c234bad7a88
BLAKE2b-256 4918b0889a14db20f21f4164196661d8714e9f09797ab0e2788b550d7574cfc1

See more details on using hashes here.

File details

Details for the file nelson_siegel_svensson-0.5.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for nelson_siegel_svensson-0.5.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cd33414a5348e6640858de011b493ab06e4af25e8d572cec214ba63599dd04d2
MD5 9606e1b564ea26047bd4d1ed1fd301aa
BLAKE2b-256 208e775d07576b015e79d7aae476cda14e98c1c562b4d4b4e20ff6a93b106e4e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page