Data

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.

Types of Instruments in the data

There are 6 types of instruments given in the data as displayed below.

[1] "T-Bill" "CP"     "CD"     "Bond"   "SDL"    "G-Sec" 

Types of ratings in the data

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+"   

We look at all the Instrument Types one by one.

1. Instrument Type = Treasury Bills

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

2. Instrument Type = G-Sec

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

3. Instrument Type = SDL

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.

4. Instrument Type = CD

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

5. Instrument Type = CP

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

6. Instrument Type = Bond

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.

BBB and BBB+

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+         

Rating of A-

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

Rating of A

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

Rating of A+

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.

Rating is AA-

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~

Rating of AA

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           

Rating of AA+

We remove the bonds with maturity greater than 50 for clarity.

No extreme outliers visible.

Rating is AAA

This class of bonds is now approaching the parabolic shape. Thee are some bonds of AAA with high rating which can be listed.

“Unrated”

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           

End