Skip to content
All library documents

Inferring CDS Default Probabilities from Spreads

Article Quant Q&A · Author: ExplicitVolatility

Summary

This answer shows how to infer a constant default intensity from a CDS spread by building the contract’s expected premium and protection cash flows over time and solving for the intensity that makes their present values balance. It includes accrued premium paid upon default and discounts cash flows at their payment times. A numerical example for the stated spread, recovery assumption, maturity, and zero rate produces an implied intensity; the resulting survival probabilities are then differenced to obtain unconditional default probabilities for each year.

To obtain a conditional probability for a later period, the answer divides that period’s unconditional default probability by the probability of surviving through the preceding periods. This distinguishes the probability of default during a year as viewed at inception from the probability conditional on survival to that year. The calculation relies on a flat term structure and constant hazard rate, along with the example’s annual payment schedule and midpoint timing for default-related cash flows; other contract conventions can change the result.

Key ideas

  • A CDS-implied hazard rate can be found by equating the present values of expected premium and protection payments.
  • Accrued premium at default should be included when the contract convention requires it.
  • Survival probabilities under a constant hazard rate yield unconditional period default probabilities by differencing.
  • A conditional period default probability is the unconditional probability divided by survival to the start of that period.
  • Payment timing, recovery, and hazard-rate assumptions affect the inferred probabilities.

Tags

Full text
# Implied probability of default (CDS spread)


# Implied probability of default (CDS spread)












After some googling, I have made some progress but not enough to come to a conclusion, so here we go:

Given that the CDS spread of a counterparty is 100bp (flat across time) and that the risk free interest rate is 0% (also flat), what is the annual implied probability of default, assuming that as the counterparty defaults, we have paid half of our annual spread? The maturity of the contract is 5 years and the expected recovery rate is 40%.

My try:

The present value of the CDS contract for us (the protection buyer) is:

$P(d)*Protection\ leg + (1-P(d))*Premium\ leg=0$,

where

$Protection\ leg= (1-R)*Notional-0.5*Spread*Notional$ and

$Premium\ leg= Spread*Notional$.

From this I solved that

$P(d)=\frac{Spread}{(1-R)+0.5*Spread}$.

In this case, I'm assuming this is the hazard rate $\lambda$, which is constant since the CDS term structure is flat. Now, following Hull, we can use the formula

$P(0,t)=1-e^{(-\lambda*t)}$

to obtain the (approximate) implied probability of default happening during the time period $(0,t)$.

Now, what if I want to obtain the probability of default happening during, for example, $(1,2)$ or $(2,3)$? How do I properly condition the probabilities?

Thank you!

## Answer by Sandu Ursu (score 1, accepted)

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

There is a bit of stuff here so I will incrementally add details if there are any questions. The analysis is pretty much done as in Appendix K from Hull, J. (2012). Risk management and financial institutions,+ Web Site (Vol. 733). John Wiley & Sons.

Python imports:

```
import numpy as np
import pandas as pd
from scipy.optimize import brentq
```

`TABLE` function to construct a table with with all the information we need:

```
def TABLE(PD, s=0.01, r=0):
    table = pd.DataFrame({'Time': np.arange(1,6)}).set_index('Time')
    table['SurvivingProb'] = np.exp(-PD*table.index)
    table['DefaultProb'] = -np.diff(table['SurvivingProb'], prepend=1)
    table['DF1'] = np.exp(-r*table.index)
    table['PV/ExpPMT'] = table['SurvivingProb']*table['DF1'] # * s
    table['DF2'] = np.exp(-r*(table.index-0.5))
    table['PV/ExpPayoff'] = 0.6*table['DefaultProb']*table['DF2'] # * s
    table['PV/AccrualPMT'] = 0.5*table['DefaultProb']*table['DF2'] # * s
    return table
```

For instance if we assume a probability of default (hazard rate) of 0.02 we would get the following table:

To compute the precise probability of default implied by the CDS spread we will use the following function:

```
def defaultProb(PD, s=0.01, r=0):

    table = TABLE(PD, s, r)

    return s*(np.sum(table['PV/ExpPMT'] + table['PV/AccrualPMT'])) \
                - np.sum(table['PV/ExpPayoff'])
```

Next, use the Brent method to solve for the probability of default:

```
PD = brentq(defaultProb, 0, 1)
```

The result is `0.016667`.

If we now want to see the updated `TABLE`:

```
TABLE(PD)
```

From here we can directly read the unconditional probabilities of default (`DefaultProb` column), i.e. the probability of default during a specific year as seen at time zero.

To compute the conditional probability of default just divide to the previous entry in the first column. For instance, if you want the probability of default in the 3rd year conditional on no earlier default:

$$0.015987/0.967215=0.01652893$$

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.