Previously, I wrote about the pricing of booster card packs for Steam’s trading card market from mainly from the seller’s perspective. However, somewhat more interesting is how much should I pay for a certain booster pack considering I already have some cards of the set. How much am I willing to pay?
To make things simple, let’s assume that foil cards do not exist and that all cards for a set have the same price. There is some variance in card prices1, but under perfect market all cards of a set should have the same price2. The three things that affect a booster packs price are
- Amount of cards in a set (n). The more cards in a set, the less likely duplicates are.
- Amount of cards I already have (k). The more cards I have of a set, the likelier duplicates become.
- The price of a single card (p). Generally speaking the cost to buy a card is 0,02€ (or, $0.02) higher than the revenues I get from selling a card, ie. Steam’s transaction fees make getting duplicates a small risk.
In practice, the value of a booster pack is enhanced by the possibility of a foil card. Also, for a totally professional trader duplicates should not matter unless one is hitting the level cap (each set can be completed three times). However, in practice I would assume people are more interested in getting a new level 1 badges than leveling up an existing one.
There might also be a small advantage is trading in a currency which is the “weakest”, as Steam rounds transaction fees to the hundreth of a currency unit at least in US dollars and Euros. In this scenario, trader in US dollars can trade for cheaper as 0.02 USD is way less than 0.02 EUR. I’m not sure about this, but as Steam does currency conversions behind the scenes, there might also be some other currency arbitrages - however tiny.
Also, duplicates increase the amount of capital you have tied to the cards (ie. inventory cost) but I think it’s pretty safe to assume that the cost here is zero3.
The probabilities are pretty simple. I’ll denote Dx as the event for getting a duplicate (D1 = the first card is a duplicate, D2 = the second card is a duplicate, …). A nice decision tree could illustrate the process nicely, but for now let’s do with the math:
\[P(D_1) = \frac{k}{n} \\ P(D_2) = P(D_2|D_1) + P(D_2|\overline{D_1}) = \left(\frac{k}{n}\right)^2 + \frac{n-k}{n} \cdot \frac{\min(k+1,n)}{n} \\ P(D_3) = P(D_3|D_2 \& D_1) + P(D_3|D_2 \& \overline{D_1}) + P(D_3|\overline{D_2} \& D_1) + P(D_3|\overline{D_2} \& \overline{D_1}) \\ = \left(\frac{k}{n}\right)^3 + \frac{n-k}{n} \cdot \left(\frac{\min(k+1,n)}{n}\right)^2 \\ + \frac{k}{n} \cdot \frac{n-k}{n} \cdot \frac{\min(k+1,n)}{n} \\ + \frac{n-k}{n} \cdot \frac{\max(n-k-1,0)}{n} \cdot \frac{\min(k+2,n)}{n}\]The reason the second and third probability get a bit complicated looking is because each non-duplicate card increases k on the fly. From these probabilities we can calculate the expected number of duplicates from a booster pack,
\[E[D] = \sum P(D_x) = P(D_1) + P(D_2) + P(D_3)\]and the expected value value a of booster pack (c = the revenue from selling a duplicate, in most cases c = p − 0.02)
\[EV[B] = E[D]p + (3-E[D])c\]For handy reference, here’s a table of average ex-post booster pack values for card set sizes from 5 to 9 assuming that buying a card from the Community Market costs 0.12 currency units and Steam’s transaction fees are 0.02 currency units. You can see the dynamics of n and k in action and how they affect EV[B].
cards in set | cards owned | booster pack value | expected duplicates |
---|---|---|---|
5 | 0 | 0.35 | 0.56 |
5 | 1 | 0.34 | 1.05 |
5 | 2 | 0.33 | 1.54 |
5 | 3 | 0.32 | 2.02 |
5 | 4 | 0.31 | 2.51 |
5 | 5 | 0.3 | 3.0 |
6 | 0 | 0.35 | 0.47 |
6 | 1 | 0.34 | 0.89 |
6 | 2 | 0.33 | 1.31 |
6 | 3 | 0.33 | 1.74 |
6 | 4 | 0.32 | 2.16 |
6 | 5 | 0.31 | 2.58 |
6 | 6 | 0.3 | 3.0 |
7 | 0 | 0.35 | 0.41 |
7 | 1 | 0.34 | 0.78 |
7 | 2 | 0.34 | 1.15 |
7 | 3 | 0.33 | 1.52 |
7 | 4 | 0.32 | 1.89 |
7 | 5 | 0.31 | 2.26 |
7 | 6 | 0.31 | 2.63 |
7 | 7 | 0.3 | 3.0 |
8 | 0 | 0.35 | 0.36 |
8 | 1 | 0.35 | 0.69 |
8 | 2 | 0.34 | 1.02 |
8 | 3 | 0.33 | 1.35 |
8 | 4 | 0.33 | 1.68 |
8 | 5 | 0.32 | 2.01 |
8 | 6 | 0.31 | 2.34 |
8 | 7 | 0.31 | 2.67 |
8 | 8 | 0.3 | 3.0 |
9 | 0 | 0.35 | 0.32 |
9 | 1 | 0.35 | 0.62 |
9 | 2 | 0.34 | 0.92 |
9 | 3 | 0.34 | 1.21 |
9 | 4 | 0.33 | 1.51 |
9 | 5 | 0.32 | 1.81 |
9 | 6 | 0.32 | 2.11 |
9 | 7 | 0.31 | 2.4 |
9 | 8 | 0.31 | 2.7 |
9 | 9 | 0.3 | 3.0 |
The simple decision rule is to buy a booster pack if the booster pack price is equal or less to what the equation says. Note that these calculations do not account for foil cards, which supposedly do exist and can be even 10 times more valuable than a normal card, so if you are feeling lucky you might pay a litle bit of premium.
The biggest difference between the real-world market and the assumptions at the start of this article is that the prices for cards in a set can vary somewhat. In the previous post I noted how for example for Half-Life 2, the card prices had a range of 0,13€ - 0,15€. If you’re unlucky, you might have all the 0,13€ cards and be missing 0,15€ cards. Factoring in the prices of owned cards (which change the possible revenue from selling duplicates) and not owned cards (which change the value of a non-duplicate) might change the value of a booster pack by crucial cents. Caveat emptor
.
Other interesting questions that could be explained with raw access to Steam’s Community Market transaction data would be what explains the different prices for different card sets. In a sense, all a full set gives to a player is 100 XP, smilies and wallpapers (usually worhtless) and a discount coupon (equally worthless). This would imply, among other things, that a card in set of 15 should have a price of about one third of a card in set of 5. Also, a lot of the price difference seems to be explained by simple supply of cards: games featured in Humble Bundles seem to have cheaper cards than triple-A titles that haven’t had a massive sale.
Anyway, armed with this knowledge you can start buy booster packs with higher confidence. Do remember that averages are just that; in the short run luck plays a big role.