In an investment banking data warehouse, we have an instrument dimension (aka security dimension). This instrument dimension is used in many fact tables such as trade, risk, valuation, P&L, and performance.
In this instrument dimension we have rating attributes (columns), from the 3 agencies (S&P, Moody, Fitch), an in-house rating and many combination between them. We may have the ratings at both the issuer/obligor level, and at instrument/issue level. We could also have a hierarchy of ratings, e.g. AA+, AA and AA- are grouped into AA. There are separate ratings for cash instruments.
The usual design is to put all ratings attribute in the instrument dimension. This is because the granularity of rating is at instrument level. In other words, rating is an attribute of an instrument.
Issues with the Usual Design
The issues with doing that are:
- Cash and FX may not be created as an intrument but they can have ratings.
- Some fact tables requires the rating outside the context of an instrument.
An example for point 1 is a USD bank balance (settled cash) in a GBP portfolio, which is given a rating of AAA. In the instrument dimension there is no instrument called USD bank balance. The other example is USD cash proceeds which is an unsettled cash.
An example for point 2 is a fact table used for analysing the average ratings of a portfolio across different date. This is called Portfolio Credit Quality analysis. On any given day, a credit portfolio has 3 attributes: highest rating, lowest rating and average rating. The average rating is calculated by converting the rating letter to a number (usually 1 to 27, or using Moody’s rating factor, link), multiply the rating number with the weight of each position, and sum them up. There can be several different criteria, for example: including or excluding debt derivatives, funds, cash, or equity, and doing lookthrough or not.
For example, portfolio X on 16th Sep could have these different attributes:
- Average rating: AA+
- Highest rating: AAA
- Lowest rating: BB-
- Average rating excluding cash: AA
- Average rating excluding cash and derivatives: BBB+
- Average rating excluding cash, derivatives and equity: BBB-
- Average rating including funds: AA-
- Average rating with lookthrough: A+
So the fact table grain is at portfolio level and date. We therefore cannot use instrument dimension in this fact table, and therefore it is necessary to have rating in its own dimension.
Another example of a fact table which requires rating not at instrument dimension is sectoral credit quality. A credit portfolio consists of many bonds and credit derivatives. Each of these bonds (or CDS) are of certain industry sector. A bond issued by BP is in Energy sector. A bond issued by Santander is in Financial sector. The average rating for each sector is calculated by converting each rating to a number, then multiplying it by the weight and sum up for all positions in that sector.
If we use GICS (link) as an example, and government, on any given day a credit portfolio can have sectoral credit quality like this: (usually excluding cash and equity, but including credit derivatives and debt funds)
- Consumer Discretionary: AA+
- Consumer Staples: AA-
- Energy: A+
- Health Care: BB-
- Industrials: BBB-
- Information Technology
- Materials: BBB+
- Telecommunication Services: AA
- Utilities: BB+
- Real Estate: B+
- Government: AAA
Above is the average rating for each sector, for a given day, for a particular portfolio.
Design Choices for Rating Dimension
To satisfy the above requirement (fact tables which analyse rating at a level higher than instrument, e.g. at sector level or portfolio level), we can design the rating dimension in several ways:
- Rating schemes and hierarchies are created as attributes
- Rating schemes are created as rows, with hierarchies as attributes
- Rating schemes and hierarchies are created as rows
Before we dive into the details I’d like emphasize that we should not try to find out which approach is the best one, because different projects will require different approaches. So instead of asking “What is the best approach” we should ask “What is the most suitable approach for my project?”
And secondly I’d like to remind us that if the rating data is always used at instrument level than it should reside in the instrument dimension, not in a rating dimension on its own.
Approach 1. Rating schemes and hierarchies are created as attributes
Of course we should always have RatingKey 0 with description = Unknown. This row is distinctly difference to NR (No Rating). NR means S&P gives the bond a rating of NR. RatingKey 0 means that we don’t have any info about the rating of this bond.
The distinct advantage of this approach is that we have a mapping between different rating schemes. Moody’s Baa3 for example corresponds to S&P’s BBB-.
The Grade column is either Investment Grade (AAA down to BBB-) and High Yield (HY, from BB+ down to D).
Approach 2. Rating schemes are created as rows, with hierarchies as attributes
The distinct advantage of approach 2 over approach 1 is RatingKey 33 means Aa3, we don’t have to tell it that we meant Moody’s, like in approach 1. In Approach 1, RatingKey 4 can means Aa3 or AA-, depending whether we meant Moody’s or S&P.
The distinct disadvantage of approach 2 compared to approach 1 is we lost the mapping between S&P and Moody’s. In Approach 1 we know that Aa3 in Moody’s corresponds to AA- in S&P, but in Approach 2 we don’t know that. In the majority of the circumstances, this is not an issue, because an instrument with Moody’s rating of Aa3, may not have an S&P rating of AA- any way. Instead, its S&P rating could be AA or BBB+. So the mapping between S&P and Moody’s are the book standard, academic assumption, not the reality in the real world. In the above example, nobody cares whether the corresponding S&P rating for Aa3 is AA-. What the fund managers and analysts want to know is what Moody’s really assigned to that bond.
Approach 3. Rating schemes and hierarchies are created as rows
The distinct advantage of Approach 3 over Approach 1 and 2 is that RatingKey 31 means AA tier, it is clear and not ambiguous. In Approach 1 and 2, RatingKey 2,3,4 all means AA tier.
The other advantage of Approach 3 is the ability to create short term rating and cash rating, because they are simply different schemes.
Why do we need to keep the Tier column in Approach 3? Because we still need to convert AA+, AA and AA- to AA.
Rating Value (aka Rating Number)
In some projects we need to convert the rating letters to numbers. For this we can create an attribute in the above rating dimension (any of the 3 approaches) called Rating Value. It is usually AAA = 1, AA+ = 2, AA = 3, AA- = 4, and so on. NR (No Rating) and WR (Withdrawn Rating) got 0 rather than 23.
Note that in unlike in S&P and Moody’s schemes, in Fitch scheme the D rating is differentiated into 3: DDD, DD, and D. So DDD = 22, DD = 23, D = 24.
A common mistake is that people assume there is CC+ and CC- rating. There isn’t. Only CCC is split into 3 (CCC+, CCC, CCC-), but CC and C are not.
Moody’s rating of Ca corresponds to 2 ratings in S&P scheme: CC and C. This is why approach 1 is tricky, because the rating does not have one to one relationship between 1 scheme and another. Another example is as I mentioned above, the D rating in S&P corresponds to 3 ratings in Fitch: DDD, DD and D.