Share Class Evolution
Check each share class against a reference class and flag unexpected drift.
Share Class Evolution checks each share class's NAV return against a chosen reference share class of the same sub-fund, flagging share classes that drift in statistically unexpected ways. It spots the anomaly without needing to fully recalculate every impact. It answers: is this share class moving out of line with its reference class after accounting for FX, fees, and hedging?
How it works
It looks for pricing errors at the share-class level by studying how each share class's NAV return deviates from a single reference class in the same sub-fund. Rather than fully recalculating every impact, it uses regression and time-series analysis to account for the legitimate reasons two classes diverge (FX and hedging, fees, distribution and flow policy), then examines the residual deviation. It sets robust statistical bounds on the NAV-per-share return and flags a breach when the return falls outside them.
What you get
- The deviation over time between a share class's return and its reference class's return.
- Analysis that accounts for the usual sources of legitimate difference (FX and hedging, fees, distribution and flow policy).
- Statistical bounds for an acceptable NAV-per-share return, also expressed as a NAV-per-share price corridor.
- A breach flag when the return falls outside its bounds, with a model status and its reason, and the fit's R² score.
In SPARK
The results arrive in a Share Class Evolution Signals data object (slug ngt_share_class_evolution_signals), created from the Share Class Evolution Signal template, version 1.0.0, in the template picker's Analytics group. Each row is one share class on one date, linked to its Share Class; reach the sub-fund through the share class. Every return column is in the share class's local currency.
| Column | Slug | What it holds |
|---|---|---|
| Is breach | is_breach | True when the return is outside its bounds |
| Model status, Model status reason | model_status, model_status_reason | How reliable the row's model is, and why |
| NAV per share return | return | The day's NAV-per-share return |
| Return lower / upper bound | return_lower_bound, return_upper_bound | The acceptable return range |
| Return deviation | return_deviation | The return's deviation from the peer-implied reference |
| Predicted deviation | predicted_deviation | The deviation the model predicted |
| NAV per share total return, Total return deviation | total_return, total_return_deviation | The same, including the dividend effect |
| Bounds width | bounds_width | How wide the range is |
| NAV per share price lower / upper bound | nav_per_share_price_lower_bound, nav_per_share_price_upper_bound | The range as NAV-per-share price levels |
| R2 score | r2_score | The model fit, shown to 4 decimals |
| AUM group | aum_group | The share class's AUM bucket |
Return columns show as percentages by default. There is no separate major breach any more: the earlier template's major bounds, NAV impact and model-error diagnostics were removed as fit output rather than signal output.
The Exception Framework raises events on this object with NGT's rules sce.nav_breach (any breach) and sce.return_deviation (a total return deviation beyond 20 bp), and its SCE Potential NAV Breach exception turns the two together into a task. Track the rows in a data view or on a canvas.