Background: In mathematical finance, Markov chains are used to model the default risk of a company or country (more specifically, the default of a company's or country's liability like a corporate or government bond.
Rating agencies (like Standard& Poor's, Moody's, Fitch) rate the financial stability of a company and classify them according to different classes. A possible classification may range from 'AAA for debitors with a very good credit rating to 'CCC for debitors which are very likely to delay in paying a debt; and 'D' for those debitors which can't satisfy their financial labilies anymore (in other words, they are default).
The yearly credit rating of a company can be modeled as a Markov chain (X,)-0,1,2.... with state space
S = AAA, AA, A, BBB, BB, B, CCc, D)
where Xn represents the credit rating class of a company in the n-th year. The transition probabilities are given by
AAA AA A BBB BB B CCC D
92.07 7.09 0.63 0.15 0.06 0.00 0.00 0.00
AA 0.62 90.84 7.76 0,59 0.06 0.10 0.02 0.01
A 0.05 2.09 91.38 5.79 0.44 0.16 0.04 0.05
BBB 0.03 0.2 4.10 89.37 4.82 0.86 0.24 0.37
BB 0.03 0.08 0.40 5.54 83.24 8.15 1.1 1.45
B 0.00 0.08 0.27 0.34 5.398 2.41 4.92 6.59
CCC 0.10 0.00 0.29 0.58 55 10.54 52.80 34.14
D 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0
Remark: For your implementations below, you can label the different states from 0 to 7, where 0 represents state AAA, 1 represents state AA, and so on.
Write a function called simulateRating(...) which simulates the Markov chain.
Input:
startRating: Initial state of the Markov chain at time 0
numberOfSteps: Number of steps nn
P: Transition matrix
Output:
samplePath: An array of length n+1n+1 (!) with the values X0, X1.....Xn.
def simulateRating(startRating, numberofSteps, P):
## WRITE YOUR OWN CODE HERE
## HINT: USE np.randon.choice()
return samplePath In [ ]:
耕TEST YOUR FUNCTION HERE
simulateRating startRating - 0, numberofSteps10, PP)

Respuesta :

Answer: Provided in the explanation section

Explanation:

All  explanation to the code below are provided in the code comments

Code:

import numpy as np

# transition probability matrix

# copy all the values given

P = np.array([[92.07, 7.09, 0.63, 0.15, 0.06, 0.00, 0.00, 0.00],

[0.62, 90.84, 7.76, 0.59, 0.06, 0.10, 0.02, 0.01],

[0.05, 2.09, 91.38, 5.79, 0.44, 0.16, 0.04, 0.05],

[0.03, 0.21, 4.10, 89.37, 4.82, 0.86, 0.24, 0.37],

[0.03, 0.08, 0.40, 5.54, 83.24, 8.15, 1.11, 1.45],

[0.00, 0.08, 0.27, 0.34, 5.39, 82.41, 4.92, 6.59],

[0.10, 0.00, 0.29, 0.58, 1.55, 10.54, 52.80, 34.14],

[0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 100.0]])

print('Transition probability matrix:')

print(P)

print()

# probability transition for state 3

# extract 4th row for index 3

P3 = P[3]

print('Probability transition for state 3:')

print(P3)

print()

# probability that AAA company will not default in next 8 years

# for next 8 years, transition probabilities = P^8

P_next8 = np.linalg.matrix_power(P, 8)

# now get probability for transition from AAA to D

# and subtract it from 100 to get not default

P_next8_not_default = (100**8 - P_next8[0][7]) * 100 / 100**8

print('Probability that company rated AAA will not default in next 8 years:', P_next8_not_default)

cheers i hope this helps !!!

ACCESS MORE