# Dynamic Scoring

Rank funds by a custom weighted blend of returns and risk metrics.

Source data: AMFI daily NAV (17,900+ schemes) + Nifty benchmark indices. Last updated: 2026-07-02. Interactive tool: https://mfpro.tigzig.com

## Overview



Dynamic Scoring lets you rank funds by a weighted combination of any available metrics.
 You choose which metrics matter, how much weight each gets, and whether higher or lower
 values are better. The system normalizes all metrics to a common 0-1 scale, applies your
 weights, and produces a final score from 0 to 100.


This is a fully transparent, configurable scoring system. Every step is shown below so you
 can reproduce it in Excel if needed.

 


## Step 1: Select Metrics and Weights



From the 15 available metrics (CAGR 1Y/3Y/5Y/10Y, Max DD 1Y/3Y, Sharpe, Sortino, Alpha,
 Beta, Info Ratio, Up Capture, Down Capture, Tracking Error, Win Rate), enable the ones you
 want and assign weights. Weights are entered as numbers (e.g. 33, 33, 34) and automatically
 normalized so they sum to 100%.


Example: 3-metric setup


CAGR 1Y: weight 40 | Sharpe: weight 30 | Alpha: weight 30


Normalized weights: 40/100 = 0.40, 30/100 = 0.30, 30/100 = 0.30

 
 


## Step 2: Direction - Higher or Lower is Better



Each metric has a default direction. For example, higher CAGR is better (&#8593; Higher),
 while higher Max Drawdown means bigger loss so lower is better (&#8595; Lower). You can
 toggle this for any metric. The direction affects how the normalized value is oriented:

 
 If direction = "Higher is better": scaled value stays as-is
If direction = "Lower is better": scaled value = 1 - scaled value
 

This flip ensures that "good" always maps toward 1 and "bad" toward 0, regardless of
 whether the raw metric is naturally ascending or descending.

 


## Step 3: Normalization (Scaling to 0-1)



Raw metrics have different units and ranges (CAGR in %, Beta around 0-2, Sharpe around -1 to 3).
 We normalize each metric to a 0-1 scale so they can be compared. Three methods are available:

 


## 3a. Min-Max Normalization


 
 scaled = (value - min) / (max - min)
 

Takes the minimum and maximum values across all funds for that metric, and linearly maps
 the range to [0, 1]. The fund with the lowest value gets 0, the highest gets 1.


Example: CAGR 1Y for 3 funds


| Fund | Raw CAGR | Scaled (Higher=better) |
| --- | --- | --- |
| Fund A | 8% | (8-5)/(15-5) = 0.30 |
| Fund B | 15% | (15-5)/(15-5) = 1.00 |
| Fund C | 5% | (5-5)/(15-5) = 0.00 |


 

**Trade-off:** Simple and intuitive. However, a single outlier (e.g. one fund with
 50% CAGR) can compress all other funds into a narrow range near 0, making them hard to distinguish.

 


## 3b. Z-Score Normalization


 
 z = (value - mean) / standard deviation
clamped = clip z to [-3, +3]
scaled = (clamped + 3) / 6
 

Measures how many standard deviations each fund is from the group average. Values beyond
 ±3 standard deviations are clipped (capped), then the range [-3, +3] is mapped to [0, 1].
 The mean maps to 0.5.


Example: Sharpe Ratio for 4 funds


Values: 0.5, 1.0, 1.2, 2.8 | Mean = 1.375, Std Dev = 0.84


| Fund | Raw Sharpe | Z-Score | Scaled |
| --- | --- | --- | --- |
| Fund A | 0.50 | -1.04 | (-1.04+3)/6 = 0.33 |
| Fund B | 1.00 | -0.45 | (-0.45+3)/6 = 0.43 |
| Fund C | 1.20 | -0.21 | (-0.21+3)/6 = 0.47 |
| Fund D | 2.80 | +1.70 | (1.70+3)/6 = 0.78 |


 

**Trade-off:** Handles outliers well because ±3σ clipping prevents extreme values
 from dominating. The center of the distribution gets the most spread. However, it assumes
 roughly symmetric data - works best with 5+ funds.

 


## 3c. Percentile Rank


 
 Sort all funds by metric value
scaled = rank position / (number of funds - 1)
 

Ranks funds from lowest to highest. The bottom fund gets 0, the top gets 1, and others are
 evenly spaced regardless of how far apart their actual values are.


Example: Alpha for 4 funds


| Fund | Raw Alpha | Rank | Scaled (Higher=better) |
| --- | --- | --- | --- |
| Fund C | -2.0% | 0 | 0/(4-1) = 0.00 |
| Fund A | 1.5% | 1 | 1/(4-1) = 0.33 |
| Fund B | 4.0% | 2 | 2/(4-1) = 0.67 |
| Fund D | 12.0% | 3 | 3/(4-1) = 1.00 |


 

**Trade-off:** Most robust to outliers - a fund with 50% alpha is treated no
 differently than one with 5%, as long as both are "the best." This also means magnitude
 differences are lost. Best when you care about relative ranking, not absolute differences.


**Note:** This Percentile Rank normalization method is the same formula used
 by the standalone "% Rank" toggle in the returns table. The METRIC_DIRECTION configuration
 (which defines whether higher or lower is better for each metric) is the single source of
 truth for direction - both the scoring system and the % Rank column read from it. See the
 dedicated Percentile Rank tab for full details on how the standalone ranking works.

 


## Step 4: Compute Final Score



After normalizing each metric to 0-1 (with direction flip applied), we compute the
 weighted average and scale it to 0-100:

 
 For each enabled metric i with weight w_i and scaled value s_i:

normalized_weight_i = w_i / sum(all weights)

raw_score = sum(s_i × normalized_weight_i) / sum(normalized_weight_i for metrics that have data)

final_score = round(raw_score × 100)
 

The division by applied weights (not total weights) handles the case where a fund is missing
 data for some metrics. If Fund A has CAGR but no risk metrics (e.g. an index with no benchmark
 comparison), it is scored only on CAGR using the CAGR weight portion.

 


## Complete Worked Example



Setup: 3 metrics, Min-Max scaling, 3 funds.


| Metric | Direction | Weight | Fund A raw | Fund B raw | Fund C raw |
| --- | --- | --- | --- | --- | --- |
| CAGR 1Y | &#8593; Higher | 40 | 12% | 8% | 18% |
| Max DD 1Y | &#8595; Lower | 30 | -10% | -5% | -20% |
| Sharpe | &#8593; Higher | 30 | 1.2 | 0.8 | 1.5 |




Min-Max scaling:


| Metric | Min | Max | Fund A scaled | Fund B scaled | Fund C scaled |
| --- | --- | --- | --- | --- | --- |
| CAGR 1Y (&#8593;) | 8 | 18 | 0.40 | 0.00 | 1.00 |
| Max DD 1Y (&#8595;) | -20 | -5 | 0.67 | 1.00 | 0.00 |
| Sharpe (&#8593;) | 0.8 | 1.5 | 0.57 | 0.00 | 1.00 |




Weighted score (weights normalized: 40+30+30=100):

 
 Fund A = (0.40 × 0.40) + (0.67 × 0.30) + (0.57 × 0.30) = 0.16 + 0.20 + 0.17 = 0.53 → Score: 53
Fund B = (0.00 × 0.40) + (1.00 × 0.30) + (0.00 × 0.30) = 0.00 + 0.30 + 0.00 = 0.30 → Score: 30
Fund C = (1.00 × 0.40) + (0.00 × 0.30) + (1.00 × 0.30) = 0.40 + 0.00 + 0.30 = 0.70 → Score: 70
 

Fund C scores highest (70) due to best CAGR and Sharpe, despite the worst drawdown.
 Fund B scores lowest (30) - it had the best drawdown but worst CAGR and Sharpe.

 


## Score Color Coding





- **75-100 (green):** Top quartile - strong across selected metrics.

- **50-74 (light green):** Above average on your criteria.

- **25-49 (amber):** Below average on your criteria.

- **0-24 (red):** Bottom quartile - weakest on selected metrics.


 


## Important Notes





- Scores are **relative** - they depend on which funds are in the comparison set. Adding or removing funds changes all scores.

- Minimum 2 funds required. With only 1 fund, there is nothing to compare against.

- If a fund has no data for a metric (e.g. an index with no risk metrics), that metric is excluded from its score calculation, and the remaining weights are renormalized.

- All computation happens in the browser. No data is sent to any server for scoring.

- Scores are not saved - they are recomputed whenever you change metrics, weights, or fund selection.

## Related metrics

More Tools methodology from the MFPRO analytics tool:

- [Percentile Rank](/mfpro/percentile-rank)

---
Source: https://www.tigzig.com/mfpro/dynamic-scoring