Actually, this is precisely how the current P123 AI Factor works. A trained AI Factor returns a predicted return for each stock, which is then used in a ranking system as FRank("AI Factor"). More specifically, each individual tree outputs a predicted return for a stock, and the final AI Factor value is simply the average of all those trees (for RF and ET models).
My post was focused more on the transparency and interpretability perspective. From that angle, you can think of each individual tree as a stand-alone factor.
For example, the simple "factor" below (based on a Depth 2 tree) returns only 4 discrete values (expected returns): [4, -2, -3, -13]
f1 = Eval($16<=41,Eval($12<=8,-13,-2),Eval($2<=41,-3,4))
If you apply FRank(f1), the output will not be very granular—it will simply group stocks into 4 large buckets.
To solve this, the idea is to increase max_depth. If you increase it to, say, 6, you get a maximum of 64 unique outcomes per tree. This creates a much smoother distribution.
Then, the factor FRank(f1) behaves like a regular factor that can be used in a ranking system or screener. Once you have converted each tree into a proper factor, you can handle them just like traditional metrics—for example, by combining all trees [FRank(f1), FRank(f2) ... FRank(f100)] into one composite ranking system.
Furthermore, you might be interested in whether such a factor preserves a proper monotonic relationship with returns. With a max_depth of 6 or higher, the rules can become complicated to read manually. However, analyzing the splits allows us to check for economic sanity. Below is the additional Gemini output regarding the model (max_depth=2) in my previous post (this analysis can also be done deterministically using Python code).
GEMINI OUTPUT BELOW:
2. Monotonicity & Directionality (The Sanity Check)
A common risk in Machine Learning models is "curve fitting," where the model learns that "Medium Growth is good" but "High Growth is bad."
However, an analysis of the split points in this specific model reveals 100% Positive Monotonicity across all factors. In every single decision node (30 out of 30 splits), a higher Rank resulted in a higher predicted return.
-
No Mean Reversion Logic: The model never bets on mean reversion (e.g., buying oversold industries).
-
No "Goldilocks" Zones: There are no cases where the model prefers "middle" values. It strictly prefers Higher Sentiment, Higher Growth, and Higher Industry Momentum.
This suggests the underlying economic drivers are robust and linear, even though the decision structure is non-linear.
3. Feature Importance & Monotonicity Statistics
The table below highlights which factors drive the decisions. The "Pos. Monotonicity" column indicates the proportion of splits where a higher factor value resulted in a higher expected return.
| Rank | Factor ID | Factor Name | Role in Model | Times in Root Node | Pos. Monotonicity |
|---|---|---|---|---|---|
| 1 | $12 | Industry RSI (Momentum) | The "Kill Switch" | 0 of 10 | 100% (9/9) |
| 2 | $2 | Forecasted EPS Growth | The "Buy" Confirmation | 0 of 10 | 100% (8/8) |
| 3 | $20 | Core Sentiment | Primary Filter | 6 of 10 | 100% (6/6) |
| 4 | $16 | Op. Income Growth (PYQ) | Secondary Filter | 4 of 10 | 100% (5/5) |
| 5 | $26 | Median Daily Total | Liquidity Filter | 0 of 10 | 100% (2/2) |
Note: 100% Positive Monotonicity means that for every split using this factor, the "Higher" branch always had a higher predicted return than the "Lower" branch.