We load the data and display the columns. Also display the number of data points.
Total number of data points is 5745
Names of the collumns are
[1] "S.No" "Date"
[3] "ISIN" "Security.Name"
[5] "Instrument.Type" "Maturity.Date"
[7] "ICRA.Yield" "CRISIL.Yield"
[9] "Rating.CRISIL" "MIM"
[11] "CRISIL.Macaulay.duration" "ICRA.Macaulay.duration"
[13] "CRISIL.Modified.duration" "ICRA.Modified.duration"
[15] "ZCYC...." "Spread..bps."
[17] "Bucket.Spread" "Breaches.90th.Percentile"
[19] "Breaches.95th.Percentile" "Z.Score"
MIM stands for “Maturity in Months” which is the horizontal axis for all plots.
There are 6 types of instruments given in the data as displayed below.
[1] "T-Bill" "CP" "CD" "Bond" "SDL" "G-Sec"
There are 12 types of ratings given in the data including “Unrated” as displayed below.
[1] "Sov" "A1+" "AA" "AA+" "AA-" "AAA" "Unrated"
[8] "A" "A+" "A-" "BBB" "BBB+"
There are 88 such securities all with “Sov” rating. ANd all Maturities lie between 0.02 and 1.
Number of T-bills given 88
All are of rating = Sov
Summary of maturities (in months)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0200 0.1500 0.3200 0.3811 0.5650 1.0000
Below we plot Yield curve with CRISIL Yield on Y-axis
Below we plot Yield Curve with ICRA Yield.
For T-bills we conclude that Treasury Bills do not have any extreme outlier behaviour and follow parabolic shape of government bond quite well
Now for G-Sec type securities. There are 149. All with “Sov” rating.
Number of G-Sec bonds given 149
All are of rating = Sov
Summary of maturities (in months)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.010 1.580 4.010 7.484 9.730 40.120
We plot yield Curve with CRISIL Yield on y-axis
We now plot the Yield Curve with ICRA Yield on y-axis
For G-Sec’s we see 4 outliers which have zero yield which we indicate below. It could be some error in the data. Otherwise we get parabolic shape as expected
S.No Date ISIN Security.Name Instrument.Type
1 884 2020-11-12 IN0020160084 GOI FRB 2024 G-Sec
2 2289 2020-11-12 IN0020130046 1.44% INFLATION INDEX GS 2023 G-Sec
3 4530 2020-11-12 IN0020200120 GOI FRB 2033 G-Sec
4 4531 2020-11-12 IN0020180041 GOI FRB 2031 G-Sec
Maturity.Date ICRA.Yield CRISIL.Yield Rating.CRISIL MIM
1 2024-11-07 0 0 Sov 3.99
2 2023-06-05 0 0 Sov 2.56
3 2033-09-22 0 0 Sov 12.87
4 2031-12-07 0 0 Sov 11.07
CRISIL.Macaulay.duration ICRA.Macaulay.duration CRISIL.Modified.duration
1 3.989041 3.989041 3.989041
2 2.509345 0.000000 2.509313
3 12.868493 12.868493 12.868493
4 11.073973 11.073973 11.073973
ICRA.Modified.duration ZCYC.... Spread..bps. Bucket.Spread
1 3.989041 4.987475 -498.75 29.336629
2 0.000000 4.400763 -440.08 24.904497
3 12.868493 6.541796 -654.18 5.501754
4 11.073973 6.401692 -640.17 5.501754
Breaches.90th.Percentile Breaches.95th.Percentile Z.Score
1 FALSE FALSE NA
2 FALSE FALSE NA
3 FALSE FALSE NA
4 FALSE FALSE NA
There are 1950 of them. All of “Sov” rating.
Number of SDP type bonds given 1950
All are of rating = Sov
Summary of maturities (in months)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.020 2.498 5.040 5.553 7.947 34.080
Yield Curve with CRISIL Yield on y-axis.
Yield Curve with ICRA Yield on y-axis.
We see no outliers and shape is as expected.
There 136 securities with two kinds of ratings in CD. Only one is of AAA type.
Number of CD bonds given 136
All ratings are of type A1+ or of type AAA
We summarise the bonds based on the two rating types and find that there is only one bond of type AAA so we leave that out and focus on the remaining 135 of type A1+
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 2
`df1$Rating.CRISIL` counts
<chr> <int>
1 A1+ 135
2 AAA 1
We mark below the security which is an outlier in the sense of having a different Rating than all others of CD type securities.
ISIN Security.Name MIM CRISIL.Yield
1 INE514E16BS2 EXIM BANK OF INDIA CD MD 19-May-2023 2.52 4.47
ICRA.Yield
1 4.57
For the A1+ rating. We plot Yield curve with ICRA and CRISIL Yield as usual in the two plots below.
These plots don’t follow parabola shape and are scattered. There are no extreme outliers but we can try to identify the company names that give yield above 4% or some desired level.
Security.Name CRISIL.Yield
1 AU SMALL FINANCE BANK LIMITED CD 11NOV21 4.75
2 EQUITAS SMALL FINANCE BANK LIMITED CD 25FEB21 4.55
3 EQUITAS SMALL FINANCE BANK LIMITED CD 28DEC20 4.38
4 AU SMALL FINANCE BANK LIMITED CD 25FEB21 4.25
5 AU SMALL FINANCE BANK LIMITED CD 24FEB21 4.25
6 AU SMALL FINANCE BANK LIMITED CD 03MAR21 4.25
7 RABOBANK CD (M+110) 27NOV2020 4.24
8 AU SMALL FINANCE BANK LIMITED CD 12FEB21 4.15
9 AU SMALL FINANCE BANK LIMITED CD 09FEB21 4.13
10 AU SMALL FINANCE BANK LIMITED CD 29JAN21 4.12
11 AU SMALL FINANCE BANK LIMITED CD 28JAN21 4.12
12 AU SMALL FINANCE BANK LIMITED CD 02DEC20 4.08
13 AU SMALL FINANCE BANK LIMITED CD 17NOV20 4.06
14 RBL BANK LIMITED CD 21JAN21 4.01
There are 744. All of A1+ rating. Maturities lie between zero and 1.
Number of CP type bonds given 744
All are of rating = A1+
Summary of maturities (in months)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.0600 0.1300 0.2053 0.2600 1.0000
Here are the plots.
These plots don’t follow parabola shape and are scattered. There are no extreme outliers but we can try to identify the company names that give yield above 6% or some desired level.
Security.Name CRISIL.Yield
1 TIME TECHNOPLAST LIMITED 90D CP 30DEC20 8.10
2 Raymond Limited CP 22JAN2021 7.93
3 BIRLA GROUP HOLDINGS PVT LTD 25AUG21 CP 7.50
4 BIRLA GROUP HOLDINGS PVT LTD 19AUG21 CP 7.50
5 BIRLA GROUP HOLDINGS PVT LTD 13AUG21 CP 7.50
6 PILANI INVST & IND CORP LTD 24AUG21 CP 7.40
7 PILANI INVST & IND CORP LTD 17AUG21 CP 7.40
8 Piramal Enterprise Limited CP 03DEC2020 7.27
9 Piramal Capital & Housing Finance Limited C.P 19NOV2020 7.12
10 PIRAMAL ENTERPRISES LIMITED 91D CP 23NOV20 7.11
11 Piramal Enterprises Ltd CP (MD 19/11/2020) 7.11
12 PHOENIX ARC PVT LTD 20-Jul-2021 7.00
13 BOMBAY BURMAH TRADING CP MD 16-Nov-2020 6.60
14 JM FINANCIAL PRODUCTS 07-May-2021 6.26
15 IIFL WEALTH MANAGEMENT LIMITED 91D CP 20JAN21 6.18
16 JM FINANCIAL PRODUCTS LIMITED 258D CP 30MAR21 6.17
The last type. It has all ratings except “Sov” as displayed below.
Number of data points of Bond type securities 2678
Ratings in the Bonds are of following types
[1] "AA" "AA+" "AA-" "AAA" "Unrated" "A" "A+"
[8] "A1+" "A-" "BBB" "BBB+"
Number of unique ISIN in the data 2628
Although there are 2678 entries but only 2628 unique ISIN ids. So we will remove duplicates and create a new data frame with unique 2628 ISIN and plot the Yield Curve with different colours for different Rating types.
We see that the x-axis range is making the plot difficult to interpret. We can limit ourselves to a maximum x level of 50 to better analyse the plot.
Warning: Removed 56 rows containing missing values (geom_point).
Most colours seem to be following the parabolic shape. To get a better idea we will plot separately for each rating type. We will proceed in increasing order of ratings. But first we check the counts of each Rating level present in the data.
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 11 x 2
`df2$Rating.CRISIL` counts
<chr> <int>
1 A 44
2 A- 15
3 A+ 94
4 A1+ 1
5 AA 250
6 AA- 126
7 AA+ 152
8 AAA 1268
9 BBB 7
10 BBB+ 9
11 Unrated 662
We see that there is only one Bond of A1+ level so we can’t make much use of the data point so we see which one it is and remove it.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 1 x 4
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISIL` Security.Name MIM CRISIL.Yield
<chr> <chr> <dbl> <dbl>
1 A1+ Aurous Trust PTC (Series A1) 15-Jan-2~ 0.18 7.1
For BBB and BBB+ thereare few data points. We can see which one’s they are and and make a combined plot of them to analyse.
Some of the BBB Rated bonds have high yield. We can list these few bonds for manual perusal.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 16 x 5
# Groups: df2$Rating.CRISIL [2]
`df2$Rating.CRIS~ Security.Name MIM CRISIL.Yield Rating.CRISIL
<chr> <chr> <dbl> <dbl> <chr>
1 BBB Sunny View Estates 10.50%~ 0.41 28.8 BBB
2 BBB Yes Bank 09.90% (Lower Ti~ 1.37 20 BBB
3 BBB Yes Bank 10.30% (Lower Ti~ 0.7 20 BBB
4 BBB Yes Bank 09.90% (Lower Ti~ 1.97 20.0 BBB
5 BBB Shriram Properties 13.20%~ 0.96 14.9 BBB
6 BBB+ Sadbhav Infrastructure Pr~ 1.62 11.4 BBB+
7 BBB+ Sadbhav Infrastructure Pr~ 1.42 11.4 BBB+
8 BBB+ Sadbhav Infrastructure Pr~ 0.62 10.6 BBB+
9 BBB+ Sadbhav Infrastructure Pr~ 0.56 10.6 BBB+
10 BBB+ Sadbhav Infrastructure Pr~ 0.42 10.6 BBB+
11 BBB+ Sadbhav Infrastructure Pr~ 0.44 10.6 BBB+
12 BBB Yes Bank 08.85% 24-Feb-20~ 4.29 10.2 BBB
13 BBB Yes Bank 08.00% 30-Sep-20~ 5.88 10.2 BBB
14 BBB+ Sadbhav Engineering 09.00~ 0.61 8.65 BBB+
15 BBB+ Sadbhav Engineering 09.00~ 0.61 8.63 BBB+
16 BBB+ Sadbhav Engineering 09.00~ 0.61 8.63 BBB+
One bond of abnormally high yield and another of high Maturity are influencing the plot so we list those two and plot wihtout them.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 2 x 5
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRIS~ Security.Name MIM CRISIL.Yield Rating.CRISIL
<chr> <chr> <dbl> <dbl> <chr>
1 A- SD Corporation Pvt. Ltd. 1~ 0.43 28.3 A-
2 A- Punjab & Sind 10.90% (Base~ 96.6 10.9 A-
Plotting the rest.
We still observe two bonds with high yield of above 13% so we list them as well.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 2 x 4
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISIL` Security.Name MIM CRISIL.Yield
<chr> <chr> <dbl> <dbl>
1 A- Vivriti Capital 11.00% 19-Mar-2021 0.35 13.5
2 A- Vivriti Capital 11.50% 16-Aug-2021 0.76 14.0
Again we remove the two bonds with exceptionally high Maturity to get a better picture.
Warning: Removed 6 rows containing missing values (geom_point).
Although the points with Yield greater than 11.5% may not be outliers but we can list them for manual perusal as they have greater yield than the one bond with Maturity close to 6 months.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 13 x 4
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISI~ Security.Name MIM CRISIL.Yield
<chr> <chr> <dbl> <dbl>
1 A Indian Receivable Trust Series A3 PTC ~ 11.4 15.7
2 A Reliance Gen.Insurance 09.10% (RGICL F~ 5.76 15.4
3 A Indian Receivable Trust Series A2 PTC ~ 5.21 15.2
4 A Indian Receivable Trust Series A2 PTC ~ 0.87 14.4
5 A Five Star Business 10.21%(Tranche IV) ~ 2.37 12.2
6 A Five Star Business 12.64% (SERIES I) ~ 0.46 12.2
7 A Five Star Business 12.64% (SERIES 2) 1~ 0.46 12.2
8 A Five Star Business 12.64% (SERIES 4) 2~ 0.6 12.2
9 A Five Star Business 12.64% (SERIES 3) 2~ 0.53 12.2
10 A Five Star Business 10.21%(Tranche III)~ 2.37 12.0
11 A Five Star Business 10.21%(Tranche I) 2~ 2.37 11.7
12 A Five Star Business 10.21%(Tranche II) ~ 2.37 11.7
13 A Ess Kay Fincorp 12.00% 01-Aug-2023 P 3~ 1.88 11.6
Again we can remove points with very high Maturity for a clear picture if required.
Again we can list Bonds above a certain Yield for manual perusal.
We remove the bonds with high Maturity.
One bond with yield more than 16% looks like an outlier. We list it.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 1 x 2
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISIL` Security.Name
<chr> <chr>
1 AA- Edelweiss Rural & Corporate Services 10.05% (SBI 1 Yr MCL~
We remove the bonds with maturity greater than 50 for clarity.
Bonds with yield greater than 20 can be considered outliers. We list them.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 3 x 2
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISIL` Security.Name
<chr> <chr>
1 AA Indiabulls Housing finance 08.35% (Option I) 06-Sep-2024
2 AA Indiabulls Housing finance 08.35% (Option II) 08-Sep-2027
3 AA Indiabulls Housing finance 09.30% 29-June-2026
We remove the bonds with maturity greater than 50 for clarity.
No extreme outliers visible.
This class of bonds is now approaching the parabolic shape. Thee are some bonds of AAA with high rating which can be listed.
The last class of bonds which are unrated have a strong linear trend.
We can list the four bonds which do not follow the linear trend and are outliers in this sense.
Adding missing grouping variables: `df2$Rating.CRISIL`
# A tibble: 6 x 2
# Groups: df2$Rating.CRISIL [1]
`df2$Rating.CRISIL` Security.Name
<chr> <chr>
1 Unrated Amantha Healthcare 04.50% 31-Mar-2024
2 Unrated Amanta Healthcare 09.50% 31-Mar-2024
3 Unrated Mariposa Agri Ventures & Hospitalities 02% (Series 1) 17-~
4 Unrated Mariposa Agri Ventures & Hospitalities 02.00% (Series 2) ~
5 Unrated Kalpataru Properties (Thane) 11.51% 30-Apr-2021 C 25-Sep~
6 Unrated Vineha Enterprises 0% 11-Apr-2021 C12-Apr-2019