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.
Maturity factor
Recency alone is not enough. When a new expansion launches, players immediately include its cards in decks — not because those cards are necessarily staples, but because they are new. To counteract this day-1 hype, we apply a maturity factor to each (deck, card) pair: a card that was brand-new when the deck was built contributes less than one that had been in the pool for months.
The formula
Recency weight of a deck:
recency_weight(deck) = e−λ × days_ago
Maturity factor of a card within a deck:
maturity_factor(deck, card) = 1 − e−card_age_at_deck / MATURITY_DAYS
Affinity score of a card:
score(card) = Σ(in_deck × recency_weight × maturity_factor) / Σ(recency_weight) × 100
where λ = ln(2) / 90 (recency decay) and MATURITY_DAYS = 60. card_age_at_deck = days between pack release and deck creation. Cards with unknown release dates are treated as fully mature.
Current parameters
| Recency half-life | 90 days — A deck created 90 days ago contributes half as much as one created today. |
|---|---|
| Maturity half-life | 60 days — A card included in a deck 60 days after its pack release contributes 63% of full weight; after 180 days, 95%. |
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), the three basic resources (Energy, Genius, Strength), and campaign cards are excluded from the ranking. Identity cards and basic resources appear in every deck by default, so they carry no information about deck-building choices. Campaign cards are scenario-specific and are never chosen freely by players.
Often Paired
For each card we compute a co-play score against every other card: how often do the two appear together in the same deck? If 80% of decks that include Nick Fury also include Avengers Mansion, their co-play score is 0.80. This is measured globally across all heroes and all decks.
Co-play score of card B relative to card A:
co_score(A→B) = decks_with_both(A, B) / decks_with(A)
This is a directional score: co_score(A→B) can differ from co_score(B→A). The top 10 pairs are stored per card; 5 are shown by default on each card's detail page under Often Paired.
Exclusive Cards
Each hero page shows the top 5 cards with the highest exclusivity ratio — cards this hero uses disproportionately more than other heroes. A card is "exclusive" not because only this hero can play it, but because this hero plays it far more often than the average.
Exclusivity ratio of a card for a hero:
exclusivity(card, hero) = frequency(card, hero) / avg_frequency(card, active_other_heroes)
Active other heroes are those who include the card in at least 5% of their decks. Cards used by the target hero in fewer than 5% of decks are excluded. The ranking uses the pure exclusivity ratio.