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:

  • player_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(PRIMARY METRIC):

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 player_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 ZPrimary Metric

  • Mythic bosses (M1, M2) count 2x as much as Legendary bosses
  • Best for: Recognizing that guild progression depends on Mythic performance
  • Why we weight this way: Mythic bosses are progression gates. A relatively high damage hit into mythic is not easy to replace, but into L1 it is.
  • We can tailor the weights to our preferences. This table treats Mythic as x2 weight.
  • 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.)

Recommendation: Use Tier-Weighted Z as the primary ranking metric, with the others providing additional context.

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: 13 × 5
##    user            rank_unwtd rank_tier_wtd tier_vs_unwtd mythic_tokens
##    <chr>                <int>         <int>         <int>         <int>
##  1 aeneas                  14            11            -3             8
##  2 smokey                   7             5            -2            13
##  3 dmbrandonfanboy          4             3            -1             6
##  4 olwhiskeyboots           5             4            -1             9
##  5 rubberduck99             8             7            -1             9
##  6 varjj                    9             8            -1             6
##  7 magicbit                11            10            -1             3
##  8 atincan                 15            14            -1             4
##  9 ulysseys                17            16            -1            11
## 10 fragxy                  20            19            -1             1
## # ℹ 3 more rows
## 
## Biggest Losers (hurt by mythic weighting):
## # A tibble: 8 × 5
##   user          rank_unwtd rank_tier_wtd tier_vs_unwtd mythic_tokens
##   <chr>              <int>         <int>         <int>         <int>
## 1 vick427                3             9             6             4
## 2 roguemodron           12            15             3             4
## 3 fettfan13             10            12             2             6
## 4 zez                   16            17             1             2
## 5 deathwing⌜sl⌟         19            20             1            11
## 6 catupiroska           21            22             1             2
## 7 irae                  23            24             1             6
## 8 addywhatson           25            26             1             1
## 
## === DAMAGE-WEIGHTED VS UNWEIGHTED ===
## 
## Biggest Gainers (benefit from high-damage tiers):
## # A tibble: 9 × 5
##   user        rank_unwtd rank_dam_wtd dam_vs_unwtd total_damage
##   <chr>            <int>        <int>        <int>        <dbl>
## 1 addywhatson         25           13          -12     13133696
## 2 zez                 16            9           -7     21480946
## 3 yavin               28           21           -7     15208096
## 4 varjj                9            3           -6     24355768
## 5 smokey               7            4           -3     28641974
## 6 ulysseys            17           14           -3     21003262
## 7 aeneas              14           12           -2     18026963
## 8 smagmata            18           16           -2     25034739
## 9 farsight            27           25           -2     16526726
## 
## Biggest Losers (hurt by damage weighting):
## # A tibble: 14 × 5
##    user            rank_unwtd rank_dam_wtd dam_vs_unwtd total_damage
##    <chr>                <int>        <int>        <int>        <dbl>
##  1 fettfan13               10           18            8     17108650
##  2 ttoobii                 13           19            6     21102608
##  3 dmbrandonfanboy          4            8            4     18220532
##  4 justpie                 24           28            4      8276959
##  5 irae                    23           27            4     12757697
##  6 roguemodron             12           15            3     15559321
##  7 catupiroska             21           24            3      8802686
##  8 olwhiskeyboots           5            7            2     27410486
##  9 rubberduck99             8           10            2     24499435
## 10 vick427                  3            5            2     14113637
## # ℹ 4 more rows