← All Heroes

How scores work

Each card is assigned an affinity score for each hero — a number between 0 and 100 that expresses how relevant that card is in current deck-building for that hero.

The problem with raw frequency

A naive approach would count what percentage of decks include a card. But this disadvantages newer cards: a card from the Core Set (2019) has had years to accumulate appearances, while a card released last month has barely any. A simple count would always rank old cards higher, regardless of current meta relevance.

Exponential time decay

We weight each deck by how recently it was created. A deck from today counts fully; a deck from 90 days ago counts half as much; a deck from 180 days ago counts a quarter, and so on.

The formula

Weight of a deck:

w(deck) = e−λ × days_ago

Affinity score of a card:

score(card) = Σ(card_in_deck × w(deck)) / Σ(w(deck)) × 100

where λ = ln(2) / 90, so a deck created 90 days ago has weight 0.5.

Current parameters

Half-life 90 days — A deck created 90 days ago contributes half as much as one created today.

The "X / Y decks" shown below each score is the raw count — how many decks out of the total actually include the card, regardless of weighting. It gives context to the score.

What is excluded

Hero identity cards (the hero's own cards, always present in every deck) are excluded from the ranking, as their inclusion is mandatory and carries no information.