Guild Performance Aggregation Logic

Starting Point: Token-Level Data

Each record represents a single token (attack) with:

  • user - player name
  • boss_tier - (L1, L2, L3, L4, L5, M1, M2)
  • season - season number
  • damage - damage dealt on this token

Step 1: Calculate Z-Index at Token Level

For each boss tier in each season:

  1. Calculate the mean damage across all tokens: tier_mean_damage
  2. Calculate the standard deviation of damage: tier_sd_damage
  3. For each token, calculate its Z-index:

\[z\_index = 50 + \frac{(damage - tier\_mean\_damage)}{tier\_sd\_damage} \times 10\]

What this means:

  • Z = 50 means you dealt average damage for that boss tier
  • Z = 60 means you dealt 1 standard deviation above average
  • Z = 40 means you dealt 1 standard deviation below average

Step 2: Aggregate Tokens to Boss-Tier Level

For each player, for each boss tier, for each season:

Calculate:

  • damage = sum of all damage across their tokens on this boss tier
  • player_tokens = count of tokens they used on this boss tier
  • avg_z_index = mean Z-index of all their tokens on this boss tier

Step 3: Aggregate Boss-Tiers to Season Level

For each player in each season:

Primary Metrics:

1. Unweighted Z (simple average):

\[unwtd\_z = mean(avg\_z\_index \text{ across all boss tiers})\]

2. Tier-Weighted Z:

For each boss tier:

  • If boss tier is M1 or M2: weight = 2.0
  • Otherwise: weight = 1.0

\[tier\_wtd\_z = \frac{\sum(avg\_z\_index \times weight)}{\sum(weight)}\]

This is a weighted average where mythic bosses count twice as much.

3. Damage-Weighted Z:

\[dam\_wtd\_z = \frac{\sum(avg\_z\_index \times player\_damage)}{\sum(player\_damage)}\]

This weights each boss tier’s Z-score by how much total damage the player dealt to that tier.

Context Metrics:

  • total_damage = sum of damage across all boss tiers
  • total_tokens = sum of player_tokens across all boss tiers
  • mythic_tokens = sum of player_tokens where boss_tier is M1 or M2
  • mythic_z = mean of avg_z_index where boss_tier is M1 or M2
  • n_boss_tiers = count of distinct boss tiers the player attacked

Step 4: Aggregate Multiple Seasons

For each player across all seasons:

Same formulas as Step 3, but now you’re aggregating across:

  • Multiple boss tiers
  • Multiple seasons

The weights still apply:

  • Tier-weighted: M1/M2 get weight = 2.0, others get weight = 1.0
  • Damage-weighted: each boss-tier-season combination weighted by total damage dealt

Aggregation Methods: Why Multiple Scores?

Boss level z-scores are great, but we need to aggregate to the season, or multiple seasons to see our relative ranking at a glance. Bosses differ in potential damage per token, and Legendary/Mythic tiers have lower/higher importance. Here are three ways to look at the aggregate Z score:

1. Unweighted Z (Simple Average)

  • Treats every boss tier equally
  • Best for: Measuring consistency across all content
  • Doesn’t distinguish between performing well on L1 vs M2
  • Limitation: Without flagging and removing low damage finishing hits, this is overly punishing

2. Tier-Weighted Z

  • Apply a multipler for tokens into higher tier bosses
  • Best for: Recognizing that guild progression depends on Mythic performance
  • We can tailor the weights to our preferences. This table treats Mythic as x1.5 weight and L4-L5 as 1.25x
  • Example: A player with Z=60 on M2 and Z=50 on L5 scores higher than someone with Z=50 on M2 and Z=60 on L5

3. Damage-Weighted Z

  • Weights each boss-tier’s Z-score by the total damage you dealt to that tier
  • How it works: If you dealt 10M total damage to L2 (tier Z=55) and 2M total damage to M1 (tier Z=65), your L2 performance counts 5x as much in your season average
  • Best for: Emphasizing performance on boss tiers where you made the biggest absolute damage contribution
  • Limitation: Can overvalue easier bosses where damage-per-token is naturally higher (e.g., I hit screamer and ghaz all season so my average damage is high, and my one bad hit into Magnus is weighed much less. Someone else hit Cawl and Magnus and their one bad hit into Dorn is not covered-up as well.)

4. Combined Tier + Damage Weighted Z(PRIMARY METRIC)

\[combined\_wtd\_z = \frac{\sum(avg\_z\_index \times player\_damage \times tier\_multiplier)}{\sum(player\_damage \times tier\_multiplier)}\]

Where: - Tier multiplier for M1/M2 = 1.5 - Tier multiplier for L1-L3 = 1.25 - Tier multiplier for L1-L3 = 1.0

What this captures: - ✅ Mythic performance matters more (tier multiplier) - ✅ Damage weight - ✅ Doing high damage ON mythic bosses matters most (multiplicative effect)

Recommendation: Use Combined Tier + Damage Weighted Z as the primary ranking metric, with the others providing diagnostic context.


Step 4: Aggregate Multiple Seasons

For each player across all seasons:

Same formulas as Step 3, but now you’re aggregating across:

  • Multiple boss tiers
  • Multiple seasons

Cumulative Player Score Across Seasons

Player rankings aggregated across both Season 96 and Season 97. Remember, Primes are not in the data, so low token counts can indicate high prime targeting.


Aggregate Player Score (Season 96)


Aggregate Player Score (Season 97)

Aggregation Method Rank Impact (S96)

My notes:
1. Gainers from mythic weight = not a lot of impact
2. Losers from mythic weight = admech. This is a season with Lav teams blowing up M1 Sza
3. Gainers from damage weight = last hits. I think addy, zez, yav are punished for some low damage finishing hits in simple average and the damage weight fixes this.
4. Losers from damage weight = admech gamers. Same thing I described in limitation section of this aggregation method.

## === TIER-WEIGHTED VS UNWEIGHTED ===
## 
## Biggest Gainers (benefit from mythic performance):
## # A tibble: 19 × 5
##    user            rank_unwtd rank_tier_wtd tier_vs_unwtd mythic_tokens
##    <chr>                <int>         <int>         <int>         <int>
##  1 aeneas                  16            14            -2             1
##  2 decimusfelix            46            44            -2             1
##  3 olwhiskeyboots           4             3            -1             1
##  4 dmbrandonfanboy          5             4            -1             1
##  5 northlaine               6             5            -1             1
##  6 feruu                    7             6            -1             1
##  7 smokey                   8             7            -1             1
##  8 magicbit                14            13            -1             1
##  9 ttoobii                 17            16            -1             1
## 10 atincan                 18            17            -1             1
## # ℹ 9 more rows
## 
## Biggest Losers (hurt by mythic weighting):
## # A tibble: 12 × 5
##    user          rank_unwtd rank_tier_wtd tier_vs_unwtd mythic_tokens
##    <chr>              <int>         <int>         <int>         <int>
##  1 vick427                3             8             5             1
##  2 roguemodron           15            18             3             1
##  3 fettfan13             13            15             2             1
##  4 siedhe                33            35             2             1
##  5 grandmasterb          44            46             2             1
##  6 ulysseys              20            21             1             1
##  7 deathwing⌜sl⌟         22            23             1             1
##  8 catupiroska           26            27             1             1
##  9 diablo2               30            31             1             1
## 10 nammi                 36            37             1             1
## # ℹ 2 more rows
## 
## === DAMAGE-WEIGHTED VS UNWEIGHTED ===
## 
## Biggest Gainers (benefit from high-damage tiers):
## # A tibble: 22 × 5
##    user        rank_unwtd rank_dam_wtd dam_vs_unwtd total_damage
##    <chr>            <int>        <int>        <int>        <dbl>
##  1 addywhatson         31           13          -18     13133696
##  2 yavin               41           25          -16     15208096
##  3 zez                 19           10           -9     21480946
##  4 varjj               11            4           -7     24355768
##  5 smokey               8            3           -5     28641974
##  6 farsight            34           29           -5     16526726
##  7 cainthar            52           47           -5      5984360
##  8 spooply             21           17           -4     22305741
##  9 ulysseys            20           16           -4     21003262
## 10 smagmata            24           20           -4     25034739
## # ℹ 12 more rows
## 
## Biggest Losers (hurt by damage weighting):
## # A tibble: 29 × 5
##    user          rank_unwtd rank_dam_wtd dam_vs_unwtd total_damage
##    <chr>              <int>        <int>        <int>        <dbl>
##  1 neruxo                12           22           10     15942593
##  2 fettfan13             13           21            8     17108650
##  3 ttoobii               17           23            6     21102608
##  4 irae                  28           34            6     12757697
##  5 grimscrub             32           38            6     10915571
##  6 decimusfelix          46           51            5      7173567
##  7 roguemodron           15           19            4     15559321
##  8 fragxy                23           27            4      9570915
##  9 deathwing⌜sl⌟         22           26            4     17980702
## 10 catupiroska           26           30            4      8802686
## # ℹ 19 more rows