Possible problem with industry in ranking vs frank (GICS vs RBICS)

Hi Yuval, P123 or advanced users,

I cannot make sense of this - but maybe I am just tired

This is the first node of the P123 core value Rking → https://www.portfolio123.com/app/ranking-system/371009
Use the PRussell 1000 and look at the top 10. Screenshot attached

Here is its equivalent in a universe / screen → https://www.portfolio123.com/app/universe/summary/244387?st=1&mt=7
Use the PRussell 1000 and look at the top 10. Screenshot attached

You will see a difference between the 2 e.g. BAP or CTL

I do not understand where the pb is coming from:

  1. Not a matter of 16 July vs 17 July date. Note a matter of exclude prelim or not
  2. I note that PEExclXorTTM = 0 for both these stocks but still the rank within the industry should be the same
  3. I note that when I rank both using the universe (ie #all) rather then industry, then the top 10 match exactly

#3 is why I wonder if RBICS has been implemented fully in both Frank and in ranking systems

Thank you for investigating

Jerome


Ranking in industry.pdf (234 KB)

I see the same as you. There is a significant discrepancy between the RS ranking and the screen. But for the RS ranking I noticed that JCOM and EWBC are reversed.

Steve


The answer to this conundrum is as follows. There are 91 industries in RBICS. 84 of those are represented in the PRussell 1000. Each of them has one stock with the lowest PE. That stock gets a rank of 100 according to FRank(“PEExclXorTTM”,#industry,#asc). But in a one-node ranking system based on the same rule, it doesn’t. In a ranking system, it gets a rank according to the number of stocks in the industry. So a company that had the lowest PE in an industry with only three stocks in it (in the PRussell1000) would have a significantly lower rank than a company with the lowest PE in an industry with a hundred stocks in it. For example, in the ranking system BIIB and UTHR both make the top 50, even though they’re in the same industry–it’s a crowded industry, after all. But with FRank, UTHR barely makes the top 100, and ranks below all the other 84 100-ranked stocks.

Thank you Yuval for your quick response. Allow me to rephrase in my own way to see if I understand this correctly

  • The ranking system takes the entire universe (~9000 stocks or more now with Factset), group them into the 91 industries (say industry X has 80 stocks), then rank within each industry, then keep those stocks that belong to the PR1000 but with the %rank they had relative to all the other stocks in industry X for the entire universe. So, say 10 stocks of the 80 are in the R1000, they will appear in the ranking system with the %rank relative to the total 80 stocks.

  • The screen starts from the R1000 (in my example), groups the R1000 stocks into the 91 industries (it turns out there are only 84 industries in the R1000) which gives 10 stocks (using my prior example) which are then %ranked 0-100.

Is that right?

Thank you

Jerome

At the risk of adding confusion, here’s my interpretation of how a ranking system works.

I’m not sure of this really answers you question, Jerome, but I was curious enough to check it out after reading Yuval post. And I think it adds another facet to consider when examining simulation differences under the new industrial classification system.

The maximum numerical rank value depends on the number of constituents within the cross-section.

Assuming no NAs or ties,

  1. an Industry cross-section with three constituents will assign rank values of 66.66/33.33/0
  2. an Industry cross-section with four constituents will assign rank values of 75/50/25/0

So, again, the highest rank value achievable depends on the number of constituents in the cross-section!

Consequently, changing Industry cross-sections will also change rankings - when using Industry scoped rank.

You can play with this by setting up two Universes. Make one S&P500 filtered with Industry=Bizsupport. That will have three constituents.
Make the other Universe, S&P500 filtered with Industry=Delivery. That will have four constituents.

Then make a rank system that ranks by SalesA and check the rank scores.

I’m not sure why things were done that way. I think making the highest rank value 100 and the lowest 0 irrespective of the number of constituents should be feasible.

Walter

Jerome -

Walter is correct. The difference between a ranking system and FRank is simply this: The output of a ranking system is 100 times the number of stocks ranked minus the rank, divided by the number of stocks ranked. The output of FRank is the same but adds one to the numerator. As a result, all stocks that rank at the top of their industries will get 100 with FRank and all stocks that rank at the bottom of their industries will get 0 with a ranking system. Conversely, no stocks get exactly 100 on a ranking system and no stocks get exactly 0 with FRank. I really like Walter’s illustration of this phenomenon. Try it in a screen with FRank and compare.

When using Industry scoped rank, a corner case is when there’s one company in an industry. When that occurs, each company will get the rank of zero irrespective of the actual factor value.

As an example, make a ranking system that uses SalesA w/ Industry scope and run it against the Nasdaq 100 universe. In that universe both ALGN and CMCSA are industry singletons. But even with greatly differing annual sales, they’re assigned the same rank value. From of the point of view of the ranker, they are identical.

There are other consequences of Industry singletons, too.

I’m looking at adding a test for the number of constituents that will fallback to either Sector or Universe scope whenever an Industry has fewer than 5 or 10 stocks.

Walter