1.6 Fine-Tuning the TCG Sportsbook Model

Before we move on to simulating a TCG world tournament, there are a few issues that our working model needs to have addressed.

These issues are:

  1. How to account for new decks that enter the competitive format for which we have no previous data.
  2. How the sportsbook will manage the liabilities it owes to winning bettors on either side of a match.
  3. How to predict the winner of the entire tournament from the outset and how bet prices are placed on this outcome.

These three issues will become more central when we move into the next post in this series. For now, let’s grapple with how to deal with these issues.

“Rogue” Decks

In the previous post, we determined how much a competitor’s selection of deck contributes to his or her win probability. This parameter, called “gamma” (represented by the Greek letter of the same name: Γ) works with our Glicko2 algorithm to determine this.

We noted that over time, the metagame (or the competitive environment) evolves. New decks emerge to beat existing decks, making older decks obsolete as time goes on. This is a natural process in trading card games and a big part of their draw and fun.

But what gamma do we assign to a brand new deck that’s never been seen before? If the current metagame landscape supports 15 decks, and an 16th deck enters the field, how will that deck compare to the other 15 and vice versa?

Consider the following:

The table above shows which decks existed in the format during each period by marking those that were used in each period with a “Yes” (and those that weren’t used in a period with a “No”). For example, we can see that in Period 1, only Decks 1, 2, 3, and 4 existed. In Period 2, Deck 5 entered the format. In Period 3, Deck 6 entered the format, but Deck 1 left, etc.

The World Tournament will occur in a future period, Period 13. What if a new deck, Deck 16, which no one has ever seen before in a tournament setting and for which we have no data, enters the format?

Certainly, given time, we’ll know this. But as the sportsbook, we have to be ready to give bet prices (and rate the underlying probabilities) before this data is available.

How do we rate these newcomers, or “rogue” decks?

Rating New Decks

To the synthetic tournament data from the regular season, we’ve added new columns to indicate whether a deck used by a competitor is “Old” (meaning existing prior to that period) or “New” (meaning that it debuted during that period).

To keep things making sense, all decks (Decks 1 through 4) that existed in Period 1 were rated as “Old”, since these decks would have been presumed to exist before the start of the season.

Those added details look like the below:

The revised .csv file can be seen here.

Using this additional detail, we can see how well each of the 15 unique decks used during the tournament season fared against any new deck. This is summarized on the table below. A new row and column titled “New” has been added.

Deck123456789101112131415New
10.50000.56180.54340.50500.6029----------0.6029
20.43820.50000.50470.49690.52880.52710.4783--------0.5088
30.45660.49530.50000.53260.49070.49610.52160.52450.5357------0.5121
40.49500.50310.46740.50000.47360.50530.47930.48060.43300.50630.4286----0.4268
50.39710.47120.50930.52640.50000.51110.45470.48320.52530.47600.55950.48210.6136--0.5227
6-0.47290.50390.49470.48890.50000.50950.52410.54330.50850.52240.50450.51370.42860.71050.5368
7-0.52170.47840.52070.54530.49050.50000.51160.40360.54520.58910.44940.45190.53060.47730.5392
8--0.47550.51940.51680.47590.48840.50000.55030.54440.47950.58040.56670.36840.63890.5273
9--0.46430.56700.47470.45670.59640.44970.50000.54020.50390.44910.48650.54390.72920.5364
10---0.49380.52400.49150.45480.45560.45980.50000.50000.45920.55650.50000.44120.4970
11---0.57140.44050.47760.41090.52050.49610.50000.50000.47450.47220.39090.62500.4964
12----0.51790.49550.55060.41960.55090.54080.52550.50000.50830.65380.44120.5421
13----0.38640.48630.54810.43330.51350.44350.52780.49170.50000.46490.32350.4667
14-----0.57140.46940.63160.45610.50000.60910.34620.53510.50000.58330.5341
15-----0.28950.52270.36110.27080.55880.37500.55880.67650.41670.50000.5000
New0.39710.49120.48790.57320.47730.46320.46080.47270.46360.50300.50360.45790.53330.46590.50000.5000

This seems, however, an unsatisfactory solution. Yes, we know how each deck fared against a new entrant, but are all new entrants alike?

Does each existing deck have the same potential against each existing deck? Intuition tells us that this isn’t correct, that some deck types or strategies fare better against others because of their qualities. For instance, an “Aggro” deck may do very well against a “Mid Range” deck, but fare poorly against a “Control” deck.

We need to consider these “deck styles”.

Rating Deck Styles

Our season tournament data contains fifteen unique decks, numbered 1 through 15.

To these we added one of five deck styles: Aggro, Combo, Control, Mid Range, and Mill. These were assigned randomly.

The outcome of this assignment is as follows:

Deck Style
1 Control
2 Combo
3 Aggro
4 Combo
5 Mid Range
6 Mid Range
7 Control
8 Combo
9 Control
10 Control
11 Mill
12 Mill
13 Combo
14 Mid Range
15 Aggro

To the same season tournament data, we add the style detail to each deck for each matchup.

Those details look like the below:

The revised .csv file can be seen here.

Using this added detail, we can now see how well each deck style does against each deck style and vice versa. We’ve also kept the detail for matchups against “new” decks.

The data are summarized on the table below:

Deck123456789101112131415NewAggroComboControlMid RangeMill
10.50000.56180.54340.50500.6029----------0.60290.54340.53240.50000.6029-
20.43820.50000.50470.49690.52880.52710.4783--------0.50880.50470.49850.44900.5282-
30.45660.49530.50000.53260.49070.49610.52160.52450.5357------0.51210.50000.51840.49130.4931-
40.49500.50310.46740.50000.47360.50530.47930.48060.43300.50630.4286----0.42680.46740.49810.47950.48760.4286
50.39710.47120.50930.52640.50000.51110.45470.48320.52530.47600.55950.48210.6136--0.52270.50930.50250.47380.50520.5286
6-0.47290.50390.49470.48890.50000.50950.52410.54330.50850.52240.50450.51370.42860.71050.53680.51830.50330.51920.49110.5142
7-0.52170.47840.52070.54530.49050.50000.51160.40360.54520.58910.44940.45190.53060.47730.53920.47830.51090.48650.51710.5361
8--0.47550.51940.51680.47590.48840.50000.55030.54440.47950.58040.56670.36840.63890.52730.50000.51330.52350.48450.5233
9--0.46430.56700.47470.45670.59640.44970.50000.54020.50390.44910.48650.54390.72920.53640.56060.49090.54070.47520.4788
10---0.49380.52400.49150.45480.45560.45980.50000.50000.45920.55650.50000.44120.49700.44120.48450.47300.50420.4828
11---0.57140.44050.47760.41090.52050.49610.50000.50000.47450.47220.39090.62500.49640.62500.51380.46940.44870.4893
12----0.51790.49550.55060.41960.55090.54080.52550.50000.50830.65380.44120.54210.44120.45060.54740.53860.5129
13----0.38640.48630.54810.43330.51350.44350.52780.49170.50000.46490.32350.46670.32350.47250.50000.46380.5114
14-----0.57140.46940.63160.45610.50000.60910.34620.53510.50000.58330.53410.58330.57370.47450.53490.4813
15-----0.28950.52270.36110.27080.55880.37500.55880.67650.41670.50000.50000.50000.51430.43650.35140.4595
New0.39710.49120.48790.57320.47730.46320.46080.47270.46360.50300.50360.45790.53330.46590.50000.50000.48870.52080.46500.47030.4850
Aggro0.45660.49530.50000.53260.49070.48170.52170.50000.43940.55880.37500.55880.67650.41670.50000.51130.50000.51820.48380.48450.4595
Combo0.46760.50150.48160.50190.49750.49670.48910.48670.50910.51550.48620.54940.52750.42630.48570.47920.48180.50000.49380.49310.5118
Control0.50000.55100.50880.52050.52620.48080.51350.47650.45930.52700.53060.45260.50000.52550.56350.53500.51620.50620.50000.50520.4978
Mid Range0.39710.47180.50690.51240.49480.50890.48290.51550.52480.49580.55130.46140.53620.46510.64860.52970.51550.50690.49480.50000.5112
Mill---0.57140.47140.48580.46390.47670.52120.51720.51070.48710.48860.51870.54050.51500.54050.48820.50220.48880.5000

This is more satisfactory. We can theorize which new decks might enter the format and use these styles as comparisons for our gamma parameter.

For instance, looking at Period 12, which precedes the upcoming Period 13 in which the world tournament will occur, we can see only the following decks in the format (with their corresponding styles):

Deck Style
6 Mid Range
7 Control
8 Combo
9 Control
10 Control
11 Mill
12 Mill
13 Combo
14 Mid Range
15 Aggro

We can theorize that some of the older decks might drop out of the format by the time the world tournament occurs and about which new decks and deck styles will enter to fill the vacuum.

If by the time of the world tournament, Decks 6 through 10 drop out (because perhaps they are uniquely week to Deck 15, the latest entrant, which was designed to beat the old “best” decks), our format would look like this:

Deck Style
11 Mill
12 Mill
13 Combo
14 Mid Range
15 Aggro

What new decks will emerge to exploit the power vacuum left in such a competitive environment?

We now have the tools to consider this and give probabilities.

Sportsbook Risk Management

If the house does not carefully manage its risk, an upset outcome of an event can ruin it.

Book makers try to keep the liability, that is, the amount of money it will pay out to winners of one side, as equal as possible on both sides of an event.

Three Scenarios & Six Outcomes

Consider the following:

We have Player A vs. Opponent B in a match under three different scenarios.

  1. In Scenario 1, the liability for both players is completely independent.
  2. In Scenario 2, the liability for both players is identical.
  3. In Scenario 3, the liability for both players is managed to be within a narrow margin of one another.

As can be seen in the outcomes in the lower part of the table, unmanaged risk can ruin the house. A loss of 53.7% is simply catastrophic and absolutely unacceptable in outcome 1B (that is, in Scenario 1 if Player B wins). This potential loss, no matter how probable or improbable, is not weighed evenly by the potential upside (that is, in Scenario 1 if Player A wins), which gets up a GGR margin of 37.3%. We can see that we should expect, either way, a long run margin of -8.2%. Also unacceptable.

In Scenario 2, the liabilities on both sides are identical, and so, too are the payouts to players. This is ideal and lands us a tidy profit. But reality is never so good to us.

In Scenario 3, the sportsbook is managing its risk by limiting bets on either side so that that were within some close margin to one another. The fact that the profit in Scenario 3 is higher than in Scenario 2 is the result of randomness; we should expect perfect parity to be the best option, and with risk management, we’re trying to get as close to perfect parity as possible.

If the liability is equal on both sides, the house is indifferent to the outcome of the game. No matter which side wins, the house gets its cut. We’re happy with that. It this ideal—perfect parity of liability—that we’re seeking.

How We’ll Model Risk Management

So how do we put this into practice in our model?

In our next post in which we model the outcome of a world tournament, we’ll assume that our traders are managing risk by limiting bets on either side so that they are roughly equal.

In each simulated game, we will apply the following rules:

  1. The handle on “Player A” will be a random dollar amount between $5,000 and $10,000. This creates an independent variable.
  2. The handle on “Player B” will be based on the handle for Player A as follows:
      • The handle will be randomly determined to be that of Player A within -10% and +10%.
      • If our calculated win probability for Player B is less than 0.5, we will apply a divisor to the handle we take for the player (see below).
      • If our calculated win probability for Player B is greater than 0.5, we will not further modify the handle for Player B.

The divisor applied to a Player B with a less than 0.5 win probability is:

[math] Divisor = \frac{Moneyline (Player A)}{100} [/math]

This risk management model can thus be summarized as follows:

The more than Player A is favorited over Player B (or the more than Player B is an underdog) the more handle is limited for Player B. This is because, as in our example scenarios and outcomes above, an upset win by an underdog can wipe out the house.

The noise in the model (the -10 to +10% differential) helps keep things from being perfect. We shouldn’t expect perfect liability parity. This model helps bring us within striking distance of perfection and, I think, is reasonable for a real world application.

Predicting the Winner of a World Tournament

What is the probability that a given player invited to the world tournament will win the entire event? What place do we think each competitor will get? Can we set bet prices for these outcomes?

The Bradley-Terry Model (BTM) allows us to find reasonable outcomes.

BTM uses a “preference” algorithm that allows for a comparison between each competitor based on their relative strengths, then gives us a win probability (all of which, by the way, sum to 1, which means that these are probabilities for each competitor to win the whole shebang).

Without giving away too much about the next post, in which we simulate a world tournament, we can assume that we have the following players for which we wish to compute a win probability to win the entire event: Players A through H.

For all players, we calculate their win probabilities against one another (arbitrarily chosen for the sake of this example):

ABCDEFGH
A0.50000.50150.51750.68420.51530.65290.57010.6023
B0.49860.50000.45820.68610.51410.60010.57010.6028
C0.48260.54180.50000.66960.55550.63750.55280.5860
D0.31580.31400.33050.50000.32620.46630.37510.4124
E0.48480.48590.44450.67390.50000.58670.55610.5895
F0.34720.39990.36250.53390.41330.50000.40930.4461
G0.42990.43010.44730.62490.44410.59090.50000.5361
H0.39770.39730.41410.58760.41060.55400.46390.5000

To make life easy for us, we’ll employ the BTM with an excellent Excel plugin from Charles Zaiontz at Real Statistics.

With this table and the =BT_MODEL() function from this plug in, we get the following:

Player Probability
A 0.1420
B 0.1384
C 0.1414
D 0.0950
E 0.1350
F 0.1066
G 0.1251
H 0.1164

This means, for example, that Player A is estimated to have a 14.2% probability of winning the tournament between these 8 players. Likewise, Player B has a 13.84% probability.

We can assign bet prices to these probabilities using our previously established methods. We’ll assume an “overround” of 10% on the real computed probabilities of winning to bake in our bookmaker’s profit.

Doing so, we get the following moneyline odds:

PlayerProbabilityOverroundMoneyline
A0.14200.16+540
B0.13840.15+557
C0.14140.16+543
D0.09500.10+857
E0.13500.15+573
F0.10660.12+753
G0.12510.14+627
H0.11640.13+681

This means that, for example, a bet placed on Player A to win the tournament would win a total of $640 for a $100 stake.

These probabilities, and their corresponding prices, relate to each player at the outset of the tournament, before any games have been played. After each update (e.g., after games occur and players either win or lose), the field will shrink as players are eliminated and any new bets placed on the winner of the whole event will need updated prices. The BTM can still do this for us.

Suppose, after Round One, Players C, D, F, and H are eliminated, leaving only Players A, B, E, and G.

Any new bets placed on the ultimate winner would be based on these matchup probabilities:

ABEG
A0.50.5015260910.5153097260.570093835
B0.4986008490.50.5140529120.570052391
E0.4848170540.4859470880.50.556053431
G0.4299061650.4300757840.444075620.5

Applying the same methods, we come to updated moneyline odds of:

PlayerProbabilityOverroundMoneyline
A0.26080.2869+283
B0.26030.2864+284
E0.25330.2787+295
G0.22550.2480+344

A bet on Player A now to win the tournament will yield $383 for a $100 stake. As the outcomes become more certain, the odds become shorter, and the payouts smaller.

We’ll quote prices like these and track their profitability for the house in our simulation of the world tournament.

Next: Simulating the World Tournament

In the next post, we’ll select the top 32 players from the tournament season and invite them to play in a World Tournament.

These players will go head-to-head in a single round elimination tournament that will last five rounds until a winner is declared.

We’ll take bets on each match and track our profitability along the way.

We’ll simulate this 1,000 times and analyze the results.

Finally, we’ll put everything we’ve discussed in this project together and see if our model proves viable and where there might be opportunities for improvement.

1.5 Building a Strategy Model: Deck Quality and the Metagame

In the last post, we discussed assigning skill ratings to competitors in trading card games. These ratings can be used to make predictions between competitors about which side we believe would win or lose in a match.

This time, we take deck strategy into account.

Unlike with games like chess, trading card games are asymmetric in that each competitor brings different cards to the match. Some strategies have an edge on others. We’ll have to take this into account for our working model.

Why Deck Strategy Matters

In games like chess, both players sit down with the same game pieces. All the game pieces are completely symmetrical in their game abilities and positional states. There are no surprises that can’t already been seen from the start of the game. A player can’t pull out a special piece from a hidden part of the board to use, or sacrifice three pieces to give another one some special, hidden power, until the end of turn.

Trading card games, however, are exactly like this.

They are asymmetrical. Your deck isn’t like my deck, and even if it is, the exact cards and the order in which they are drawn are different.

Chess is a game that sees both players come to the game with pistols. It’s fair in this way.

Trading card games allow players to pick different kinds of weapons: swords, baseball bats, pistols, explosives, etc.

Some weapons to well against another (a sword vs. a baseball bat, for example), while others do less well against another (a sword vs. an automatic rifle).

Trading card games are unfair in this way, but it is something that deck building tries to take into account: if I can’t beat another strategy outright, how can I upset the opponent’s strategy or undermine it to make my win more likely.

Ultimately, all trading card game players know that the deck they choose has some great matchups and some bad ones. We need a way to take this reality into account in a way that games like chess, on which so much of the probability modelling is based, don’t.

Adding Deck Detail to Match Data

In the last post, we evaluated a .csv file that contained synthetic data on 500 competitors playing a total of 12,000 games over a tournament season.

To this data, we now add the deck used by each competitor in each match, as shown below:

You can see the revised .csv file here.

There are a total of 15 decks, numbered 1 through 15, randomly assigned to each competitor in each match.

The randomization is such that as the tournament season continues, older decks fall out of use as new decks come into use. This simulates a change in metagame over the course of the season.

Deck Matchup Probabilities

With the deck detail added to the seasonal tournament data, we can assess how well each deck does against each other deck, independent of the competitors that use these decks.

Comparing decks in Excel, we get the following:

Deck123456789101112131415
10.50000.56180.54340.50500.6029----------
20.43820.50000.50470.49690.52880.52710.4783--------
30.45660.49530.50000.53260.49070.49610.52160.52450.5357------
40.49500.50310.46740.50000.47360.50530.47930.48060.43300.50630.4286----
50.39710.47120.50930.52640.50000.51110.45470.48320.52530.47600.55950.48210.6136--
6-0.47290.50390.49470.48890.50000.50950.52410.54330.50850.52240.50450.51370.42860.7105
7-0.52170.47840.52070.54530.49050.50000.51160.40360.54520.58910.44940.45190.53060.4773
8--0.47550.51940.51680.47590.48840.50000.55030.54440.47950.58040.56670.36840.6389
9--0.46430.56700.47470.45670.59640.44970.50000.54020.50390.44910.48650.54390.7292
10---0.49380.52400.49150.45480.45560.45980.50000.50000.45920.55650.50000.4412
11---0.57140.44050.47760.41090.52050.49610.50000.50000.47450.47220.39090.6250
12----0.51790.49550.55060.41960.55090.54080.52550.50000.50830.65380.4412
13----0.38640.48630.54810.43330.51350.44350.52780.49170.50000.46490.3235
14-----0.57140.46940.63160.45610.50000.60910.34620.53510.50000.5833
15-----0.28950.52270.36110.27080.55880.37500.55880.67650.41670.5000

Here we assume that ties are valued at 0.5 wins.

Taking an example from the table, we can see that Deck 8 has a historical win percentage against Deck 10 of ~55%. Likewise, Deck 10 won against Deck 8 ~45% of the tine.

And as expected, each deck has precisely a 50% win probability against itself. A deck playing against itself will either win, lose, or draw, meaning that the opposing deck, itself, has the opposite outcome.

Half of all wins (win = 1), half of all losses (loss = 0), and half of all draws (draw = 0.5) come out to half of all outcomes. Thus, 50% win probability.

Gamma (Γ) & the Gamma Curve

The deck matchup win/loss percentages can serve in helping us determine how much of an edge to assign to competitors that use these decks.

The PlayerRatings package in R (that we’ve been using to calculate Glicko2 scores and predict win/loss probabilities), provides an open variable called gamma (abbreviated Γ).

  • Assigning Γ=0 gives neither competitor an edge.
  • If Γ<0, the “Player” (vs. “Opponent”) suffers a negative edge, one that subtracts from his or her probability of winning.
  • If Γ>0, the “Player” (vs. “Opponent”) gets a positive edge, one that adds to his or her probability of winning.

But how much Γ should be applied between competitors in a given match?

To help answer this, let’s turn to R with the following code:

# Step 1: Load the PlayerRatings package
library(PlayerRatings)

# Step 2: Set up two competitors with same rating, deviation, and  # volatility
startrate <- data.frame(Player=c("A", "B"), Rating=c(1500,1500), 
Deviation=c(350,350), Volatility=c(0.6,0.6))

# Step 3: Set up a match between these two equivalent players
samplematch <- data.frame(Period=1, Player="A", Opponent="B", Result=0.5)

# Step 4: Determine final ratings for both players  in this match
samplefinals <- glicko2(samplematch, status=startrate, tau=0.6)

# Step 5: Predict the win probabilities for the first player
# with gamma from -1000 to 1000 in 0.1 increments
gammacurve <- predict(samplefinals, newdata=data.frame(Period=2, Player="A", Opponent="B"), tng=1, gamma=seq(-1000, 1000, 0.1))

# Step 6: Convert output from Step 5 to a data frame (this will be 
# useful later)
as.data.frame(gammacurve)

What we’ve done, highlighted in Step 5, above, is predict the win probability between two evenly matched competitors.

We didn’t do this just once, but 20,001 times.

Each time we’ve used a different Γ, starting at -1000 and building to 1000 in increments of 0.1. In this range is also included Γ=0, which favors neither side.

We can now visualize this on a plot using R and the ggplot2 package.

# Plot the gamma curve from -1000 to 1000 with the ggplot2 package.

library(ggplot2)
ggplot(data=gammacurve2, mapping=aes(x=Gamma, y=Win_Prob))+geom_line(color="red", linewidth=1.25)+geom_line(data=gammacurve2, mapping=aes(x=0))+labs(title="Gamma & Win Probability", subtitle="NicholasABeaver.com", caption="Note: Assumes both players have identitical Glicko2 Ratings, Deviations, and Volatility.")

We get the following plot:

As expected, Γ=0 does not favor one competitor or another. The lower Γ gets, the more the “opponent” is favored. The higher Γ gets, the more the “player” is favored.

If we look carefully (and think about what Γ is measuring), the win probability can never reach as low as 0 or as high as 1. Γ closer to 0 has a larger effect than Γ farther away from it.

Γ is logarithmic in a way similar to that of Glicko2 ratings. Each increment of Γ close to 0 has a larger effect than the same increment further away from 0, and increasingly (or decreasingly) so, such that Γ can never reach 0 or 1. Just like win probabilities never reach 0 or 1.

We can export this data as a .csv file, which can serve us as a useful table.

To do that in R, we use the following code:

write.csv(gammacurve, "gamma_curve_1_to_1000_by_0.1.csv")

We can see the output .csv file here.

We’ll use this in the next section to illustrate how Γ helps us account for deck-vs-deck quality.

Putting Glicko2 and Deck Gamma Together

Let’s tie win probabilities and deck quality together to illustrate how they work.

We’ll make the following assumptions:

  • Player A uses Deck 9
  • Player B uses Deck 7
  • Both players have Glicko2 Ratings of 1500
  • Both players have Deviations (σ) of 350
  • Both players have Volatility (τ) of 0.6

Using our Deck Matchup Probabilities table, we can see that Player A’s Deck 9 has a 59.64% probability of beating Player B’s Deck 7, as shown below:

 

Looking up a Γ = ~0.5964 on out Γ output table from R, we see the following:

For the matchup of these two decks (9 vs. 7), our Γ = 113.5.

We can now use this in the predict function in R, setting “gamma” equal to 82.

predict(samplefinals, newdata=data.frame(Period=2, Player="A", Opponent="B"), tng=1, gamma=113.5)

The out put is:

[1] 0.5964414

This is what we expect, because, both players have exactly the same skill, the same deviation, and the same volatility.

The only variable that is different is the deck in use by either player (Deck 9 vs. Deck 11). Since Deck 9 has a ~59.64% probability against Deck 11, it makes perfect sense that given this matchup, the probability for Player A to beat Player B is ~59.64%. Everything else about the two competitors is the same.

We can carry out this same process for any two competitors using any two decks by doing the following:

  1. Find the Ratings, deviation (σ), and volatility (τ) for two given players.
  2. Find the Decks to be used by each player and consult the Deck Matchup Probability Chart for the decks’ win probabilities.
  3. Use the decks’ win probabilities to consult the Gamma (Γ) Chart and find the correct Γ to apply to the match.
  4. Set the predict function with the players’ skill details and correct Γ to find the win probability.

This is a somewhat manual process, which could be automated with software.

But this is another important step in our proof-of-concept.

Next, we’ll add some fine-tuning to our basic model, putting it’s various parts together into a cohesive whole.

Project 2: Trading Card Game Sportsbook Financial Calculator

Websites abound with information about how to translate moneyline prices into the bookmaker’s implied probabilities.

These webpages also include some discussion about how moneyline prices are read and what they mean. A few also have discussions about the concept of a vig or vigorish (the “over rounding” that a bookmaker does to the probabilities to bake in a profit for itself).

All of these websites speak to bettors.

In keeping with the project to theoretically model a sportsbook that takes bets on trading card game events, we want to model such variables as the house.

If we’re the sportsbook, we want to know the probable outcomes of different over round percentages, splits in the over round, competitor win probabilities, total money wagered on either side, and what our expected financial outcomes should be.

In this project, we accomplish all of these things with an Excel Calculator.

The Excel TCG Sportsbook Financial Calculator

If you’d prefer to see the Excel calculator first and skip (or save for later) the discussion on how it works and why, you can find it below:

Excel TCG Sportsbook Financial Calculator

Breaking Down the Tunable Parameters

The Excel Calculator gives us five parameters that can be changed. These are found under the Assumptions heading.

Let’s take a look at each of them.

Vig

The vigorish, or “over round”, is the markup the house puts on the probabilities it uses to quote the bettors its bet prices.

This can be viewed as the long term profit margin the house expects on the outcomes of events with similar probabilities.

For most popular sporting events, the over round hovers a bit below 5%.

The Excel Calculator allows a vig of between 0 and 25%.

(We should expect that if trading card game bet prices were set, the vig would be on the higher side, as they are more thinly traded.)

Matches Played

Here, the user can set the number of matches played between competitors.

This is a simplification, for illustrative purposes, because the probabilities are identical for each match played (whereas, in real life, we’d wish to go further into developing a Bayesian predictive model to account for changes in win probabilities for either side given a series of matches).

A more complex model deserves its own project, which will come soon enough.

These are tunable between 1 and 1,000,000 matches.

Vig Split

This allows the user to split the vig between the two competitors.

Often times, the book maker will not apply the vig equally to both, so as to help limit liability on one side of the event. Placing more of the over round weight to one side (one competitor) over another can make that side seem less attractive than the other, enticing bettors to place their money elsewhere.

Only the vig split on Player A is tunable. The vig split on Player B is automatically updated based on the input for Player A.

The Vig split for Player A can be between 1 and 100% (with Player B having the remainder).

Win Probability

The Calculator assumes that we know the win probabilities for either player.

How to arrive at these win probabilities in trading card games, at least, is the subject of another project. Here, we assume that we know them.

Only the win probability for Player A is tunable. The win probability for Player B is automatically updated based on the input for Player A.

The win probability for Player A can be between 0 and 1, inclusive (with Player B having the remainder).

Total Money Wagered

The parameters for total money wagered for either side of the matches played can be set to any amount between $1 and $1,000,000 in even dollar increments.

As noted in the Calculator, the total money wagered on either side is per match played. 

Reading Financial Outcomes

After the five tunable parameters have been set, we can see the financial outcomes of the selected series of matches.

Let’s assume we set our assumptions as follows:

  • Vig: 10%
  • Matches Played: 50
  • Vig Split: 70%/30%
  • Win Probability: 0.674/0.326
  • Total Money Wagered: $24,500/$47,850

Fair Probability & Over Round Probability

The fair probabilities are carried over from the Assumptions we placed in the Calculator.

Note that the sum of these probabilities will always sum to 1. There are fair probabilities, because they reflect our true beliefs about the winner of the matches.

The over round probabilities apply the vig and the vig split to each probability.

Since we placed the vig at 10% and weighted 70% of that vig on Player A and 30% on Player B, the Calculator applies those figures to each side accordingly.

Note that the probabilities sum to 1.1, meaning the fair probability sum of 1, plus the vig of 10%.

Moneyline

The Calculator gives us the moneyline for the players.

As we discussed in the post about setting odds and betting prices for trading card games, these prices use the American moneyline system for bet prices.

We see that Player A has a price of -291 (meaning that a bettor must bet $291 to win $100), while Player B has a price of +181 (meaning that betting $100 will win the player $181; plus the staked $100, in both cases).

Player A, as we should expect from our probabilities, is the favorite (with a negative quoted price), and Player B is our underdog (with a positive quoted price).

Money Wagered & Bettors to Win

The Calculator gives us the total money wagered on both sides for all events (remember, we put $24,500 on Player A and $47,850 on Player B on each of 50 matches).

It also gives us the bet liability for each side, or what bettors stand to win if they’re right.

The Bettors to Win calculation takes the total money wagered for each side and applies the moneyline price for each side to arrive at the liability figures.

Wins

The wins for each side simply applies the fair probability for each player as a proportion of the total number of matches we input.

Since we selected 50 matches, given probabilities of 0.674 for Player A and 0.326 for Player A, we expect Player A to win 34 matches and Player B to win 16 matches.

Financial Outcomes

Finally, given all of our assumptions, we have the expected financial outcomes for our venture.

With 50 matches, assuming our probabilities are correct, we expect to pay out the bettors on Player A a total of $1,109,379 and the winners on Player B a total of $2,191,674.

Our total handle, or the total money wagered by bettors, came to $3,617,500, on which we paid out $3,301,052.

That leaves us, the sportsbook, with a gross gaming revenue (GGR) of $316,448 for a profit margin of 8.7%.

Not too shabby!

Conclusions

Our Calculator allows us to model some basic assumptions about the financial viability of our sportsbook.

We can tune a number of parameters about each competitor and how we choose to price the bets we offer to bettors. We can experiment with how much money we’d need on either side to maintain profitability given these assumptions.

We’ve seen that, if it all works out more-or-less according to plan, the bookmaking business is good to us.

Please let me know if you have any questions or comments in the comments section below!

————

You can find a link to the completed Excel TCG Sportsbook Financial Calculator below:

Excel TCG Sportsbook Financial Calculator

1.2 Modelling Competitor + Strategy Probabilities in Trading Card Games

In the previous post, we discussed our decision to use Bayesian Inference as the preferred method to compute the win probabilities for different players and decks.

We will now expand on how Bayes’ Theorem can help us do this.

We’re going to take for granted that the probabilities here are examples only and that, given this demonstration, we’re also taking for granted that someway, somehow, all the probabilities have been provided to us.

In later parts of this project, we’ll tackle actually getting to the point where we can create such matchups with our own computed proabilities.

The Competitor + Strategy Matrix

Assume we have 8 Competitors (C1…C8) and 8 Strategies (S1…S8).

We might have a table that looks like this:

C1C2C3C4C5C6C7C8
S10.3310.5290.4500.6260.1830.6490.2570.151
S20.5070.2710.5370.2000.2580.5130.1190.330
S30.5120.2420.2870.2530.6130.3930.1790.574
S40.6770.5400.6940.6100.4060.1380.2090.395
S50.6540.2220.4920.6300.5690.1190.1440.397
S60.2970.5440.5340.2620.2430.4320.6960.352
S70.3510.6000.7050.1190.3650.7190.3990.518
S80.4150.3420.4770.1100.2050.4320.4930.134

This table tells us how probable a given Competitor, using a given Strategy is to win, in general. This would be a probability against a disembodied opponent: the probability isn’t conditioned on facing another person or deck. It’s most likely the long term average for the Competitors and their Strategies (wins/losses) expressed as a ratio.

Reading the table, above, we can see that Competitor 2 using Strategy 4 has a .540 probability of winning any game.

But what is this Competitor using this Strategy’s probability of winning against another Competitor and Strategy combination?

Computing Win Probabilities

Last time, we reviewed Bayes’ Theorem in the abstract:

[math] P(A|B)=\frac{P(A)P(B|A)}{P(B)} [/math]

We decided that the win probability for Player A against Player B was a conditional probability, or that this probability was conditioned on the circumstances of these two opponents facing one another.

It wouldn’t make sense for us simply to give a probability of Player A (or Player B) winning in isolation. This is what our table, above, does.

It doesn’t, however, give us a probability of a Competitor + Strategy combination against another Competitor + Strategy combination, which is what we want.

Let’s take the case of Competitor 3 using Strategy 5 (C3+S5) playing against Competitor 7 using Strategy 2 (C7+S2).

How do we calculate the probability that C3+S5 win a match against C7+S2?

We set up our equation thusly:

[math] P(C3+S5|C7+S3)=\frac{P(C3+S5)P(C7+ S3|C3+S5)}{C7+ S5} [/math]

Let’s examine each of the variables in turn.

P(C3+S5 | C7 + S3)

This is the win probability of C3+S5 against C7+S3, which is what we’re looking for.

We won’t know this until the end!

P(C3+S5)

Referring to our table above, we find that the probability of C3+S5 winning any match is 0.492.

Thus, the value of P(C3+S5) is 0.492 in our formula.

P(C7+S3|C3+S5)

This one is a little trickier. This is the probability that C7+S3 win against C3+S5.

And if we think about it, is the opposite of what we’re looking for, P(C3+S5|C7+S3)!

If we knew this now, we’d be done, because to find the other probability, we simply subtract it from 1. This is something we’ll return to shortly.

For now, let’s leave this as a mystery.

P(C7+S3)

This is simply the probability that C7+S3 win any match.

Consulting our table, we see that this is 0.179.

So we’ll use that.

Missing Information

So far, our revised formula looks like this:

[math] P(C3+S5| C7+ S3)= \frac{0.492*P(C7+ S3|C3+S5)}{P(0.179)}[/math]

But what about that pesky P(C7+S3|C3+S5)?

If we could calculate that, we’d know P(C3+S5 | C7+ S3), our desired answer, too.

Let’s find an easier way to make this calculation.

Using Excel and Basic Algebra

Let’s take another look at our Competitor and Strategy table:

We know that C3+S5 has an overall win probability of 0.492 and that C7+S3 has an overall win probability of 0.179.

To make our life easier, we will constrain the probability space to the universe that contains only these two match ups. That is, to say, that 1 (or 100%) will be the combined total probabilities for these two Competitors + Strategies.

We can think of this as a ratio:

[math] Win Probability= \frac{P(C3+C5)}{P(C3+C5) + P(C7+ S3)}[/math]

This pits the probability of C3+C5 against the combined probability of C3+C5 and C7+ S3.

We get the following:

[math]  \frac{0.492}{0.492+0.179}=0.733[/math]

This works because the probability that C3+C5 win any match is a fraction of the combined probabilities that C3+C5 win any match and C7+S3 win any match.

In fact, we can put all of this back into Bayes’ Theorem to prove our case.

Remember, that if the P(C3+C5|P(C7 + S3)) = 0.733, then the probability that the other player win is exactly 1 – this amount, or P(C7= + S3|C3+C5) = 1 – 0.733 = 0.267.

This is because all probabilities must sum to 1 (absolute certainty). All potential outcomes represent the whole of possible outcomes. 

[math]P(C3+S5| C7+ S3)=\frac{0.492*0.267}{0.179} =0.733[/math]

All we have to do is divide Cn+Sn by Cn+Sn combined with Ck+Sk.

This is much easier.

What we’ve done here is normalize the probabilities of the two competitors such that their conditional probabilities sum to 1, like this:

The Expanded Cn+Sn Matrix

To carry this theory into action, we pit each and every combination of Competitors + Strategies (Cn+Sn) against each other in the same way as we did above for C3+C5 against C7+S3.

Our previous win probability table has 8 rows and 8 columns. This one has 64 rows and 64 columns.

Wins? ↓C1+S1C1+S2C1+S3C1+S4C1+S5C1+S6C1+S7C1+S8C2+S1C2+S2C2+S3C2+S4C2+S5C2+S6C2+S7C2+S8C3+S1C3+S2C3+S3C3+S4C3+S5C3+S6C3+S7C3+S8C4+S1C4+S2C4+S3C4+S4C4+S5C4+S6C4+S7C4+S8C5+S1C5+S2C5+S3C5+S4C5+S5C5+S6C5+S7C5+S8C6+S1C6+S2C6+S3C6+S4C6+S5C6+S6C6+S7C6+S8C7+S1C7+S2C7+S3C7+S4C7+S5C7+S6C7+S7C7+S8C8+S1C8+S2C8+S3C8+S4C8+S5C8+S6C8+S7C8+S8
C1+S10.50.3949880670.3926453140.3283730160.3360406090.5270700640.4853372430.4436997320.3848837210.5498338870.5776614310.3800229620.5985533450.3782857140.3555316860.4918276370.4238156210.3813364060.5355987060.3229268290.402187120.382658960.3194980690.4096534650.3458725180.6233521660.5667808220.3517534540.3444328820.5581787520.7355555560.7505668930.6439688720.561969440.3506355930.4491180460.3677777780.5766550520.4755747130.6175373130.3377551020.3921800950.457182320.705756930.7355555560.4338138930.3152380950.4338138930.562925170.7355555560.6490196080.6129629630.6968421050.3222979550.4534246580.4016990290.6867219920.500756430.3657458560.4559228650.454670330.4846266470.3898704360.711827957
C1+S20.6050119330.50.4975466140.4282094590.4366925060.6305970150.5909090910.549891540.4893822390.6516709510.6769025370.4842406880.6954732510.4823977160.457994580.5971731450.5297805640.4856321840.6385390430.422148210.5075075080.48703170.4183168320.5152439020.4474845540.7171145690.6671052630.453894360.445910290.6592977890.8099041530.821717990.7347826090.6627450980.4526785710.5553121580.4711895910.6760.5814220180.7120786520.4385813150.4970588240.5633333330.7860465120.8099041530.5399361020.4135399670.5399361020.6636125650.8099041530.7390670550.7081005590.7788018430.4214463840.5596026490.5070.7705167170.6057347670.4690101760.5620842570.5608407080.5902211870.4946341460.790951638
C1+S30.6073546860.5024533860.50.4306139610.4391080620.6328800990.5932792580.552319310.4918347740.6538952750.6790450930.4866920150.6975476840.4848484850.4604316550.5995316160.5322245320.4880838890.6408010010.4245439470.5099601590.4894837480.4207066560.5176946410.4499121270.7191011240.6692810460.4563279860.4483362520.6614987080.811410460.8231511250.7366906470.6649350650.4551111110.5577342050.4736355230.6781456950.5838084380.7140864710.4409991390.4995121950.5657458560.7876923080.811410460.5423728810.4159220150.5423728810.665799740.811410460.7409551370.7101248270.7804878050.423841060.5620197590.5094527360.772247360.608076010.471454880.5644983460.5632563260.5925925930.4970873790.792569659
C1+S40.6716269840.5717905410.5693860390.50.508640120.6950718690.6585603110.619963370.5613598670.7141350210.7366702940.5562859490.7530589540.5544635540.5301487860.664376840.6007098490.5576606260.7022821580.4938001460.5791274590.5590421140.4898697540.5866551130.5195702230.7719498290.7279569890.5260295260.5179801070.7209797660.8505025130.8602287170.7872093020.7240641710.5248062020.625115420.5433386840.7358695650.6497120920.7675736960.5105580690.5689075630.632710280.8306748470.8505025130.6104598740.484957020.6104598740.72483940.8505025130.790887850.7641083520.8246041410.4930808450.6291821560.5786324790.817632850.6722939420.5411670660.6315298510.6303538180.6579203110.5665271970.834771887
C1+S50.6639593910.5633074940.5608919380.491359880.50.6876971610.6507462690.6117867170.5528317840.7070270270.7299107140.5477386930.7465753420.545909850.52153110.6566265060.5923913040.5491183880.6950053130.4851632050.5706806280.5505050510.4812362030.5782493370.51093750.7658079630.7210584340.5174050630.5093457940.7139737990.8460543340.8560209420.7813620070.7171052630.5161799530.6169811320.5347506130.729096990.6418056920.7613504070.5019186490.5604113110.6246418340.8257575760.8460543340.6022099450.4763292060.6022099450.7178924260.8460543340.7851140460.7578215530.8195488720.4844444440.6210826210.5701830860.812422360.6646341460.532573290.6234509060.622264510.6500994040.5580204780.829949239
C1+S60.4729299360.3694029850.3671199010.3049281310.3123028390.50.4583333330.4171348310.3595641650.5228873240.5510204080.354838710.5722543350.3531510110.3311036790.4647887320.3975903610.3561151080.5085616440.2996972750.3764258560.3574007220.2964071860.383720930.3217768150.5975855130.540.3274531420.320388350.5313059030.7139423080.729729730.618750.5351351350.3263736260.4224751070.342956120.550.4486404830.5916334660.3139534880.3666666670.4304347830.6827586210.7139423080.4074074070.2923228350.4074074070.5361010830.7139423080.623949580.5869565220.6734693880.2990936560.4267241380.3759493670.6629464290.4736842110.3409873710.4291907510.427953890.4576271190.3644171780.689095128
C1+S70.5146627570.4090909090.4067207420.3414396890.3492537310.5416666670.50.4582245430.3988636360.5643086820.5919055650.3939393940.6125654450.3921787710.3690851740.5064935060.4382022470.395270270.550156740.3358851670.4163701070.3966101690.3323863640.4239130430.359263050.6370235930.5811258280.3652445370.3577981650.5725938010.7468085110.7613882860.6573033710.576354680.3641078840.4636723910.3815217390.5909090910.4902234640.6312949640.3510.406250.4717741940.7177914110.7468085110.4482758620.3280373830.4482758620.5773026320.7468085110.6622641510.6267857140.7090909090.3352435530.4680.4158767770.6992031870.5154185020.3794594590.4705093830.4692513370.4992887620.4039125430.72371134
C1+S80.5563002680.450108460.447680690.380036630.3882132830.5828651690.5417754570.50.4396186440.6049562680.6316590560.4345549740.6514913660.432742440.4088669950.5482166450.4797687860.435924370.5911680910.3742110010.457552370.4373024240.3705357140.4652466370.3986551390.6747967480.6212574850.4048780490.3971291870.6129985230.7771535580.790476190.6939799330.6166419020.4036964980.5054811210.4217479670.6306990880.5320512820.6693548390.3900375940.4471982760.5136138610.750452080.7771535580.4899645810.3659611990.4899645810.6175595240.7771535580.6986531990.6650641030.7423971380.3735373540.509828010.4570484580.7332155480.557046980.4196157740.5123456790.5110837440.54106910.4448017150.755919854
C2+S10.6151162790.5106177610.5081652260.4386401330.4471682160.6404358350.6011363640.5603813560.50.661250.686121920.4948550050.7043941410.4930102520.4685562440.6073478760.5403472930.4962476550.6482843140.4325429270.5181194910.4976481660.4286871960.525844930.4580086580.7256515780.6764705880.4644424930.4564279550.6687737040.8163580250.8278560250.7429775280.6721728080.4632224170.5657754010.4817850640.6852331610.5917225950.7207084470.4490662140.5076775430.5737527110.7931034480.8163580250.5504682620.4238782050.5504682620.673027990.8163580250.7471751410.7168021680.7860326890.4318367350.5700431030.5176125240.7779411760.6158323630.4796010880.5725108230.5712742980.600454030.5052531040.797888386
C2+S20.4501661130.3483290490.3461047250.2858649790.2929729730.4771126760.4356913180.3950437320.338750.50.5282651070.3341553640.549695740.3325153370.3111366250.4420880910.3758668520.335396040.4856630820.2808290160.3551769330.3366459630.2776639340.3622994650.3021181720.575371550.5171755730.3076049940.3007769150.5084427770.6948717950.7112860890.59691630.5122873350.3065610860.4002954210.3226190480.5272373540.4261006290.5693277310.2945652170.3456632650.408132530.6625916870.6948717950.3854907540.2737373740.3854907540.5132575760.6948717950.6022222220.5645833330.6530120480.280248190.4044776120.3547120420.6421800950.4509151410.3207100590.4069069070.4056886230.4349919740.343472750.669135802
C2+S30.4223385690.3230974630.3209549070.2633297060.2700892860.4489795920.4080944350.3683409440.313878080.4717348930.50.3094629160.5215517240.3078880410.2874109260.4143835620.3497109830.3106546850.4574669190.2585470090.3297002720.311855670.2555438230.3365785810.2788018430.5475113120.4888888890.2840375590.2775229360.480158730.6703601110.68750.5694117650.4840.2830409360.373456790.2983970410.4989690720.3986820430.5413870250.2716049380.3205298010.3811023620.6368421050.6703601110.3590504450.251821020.3590504450.484969940.6703601110.5748218530.5365853660.6269430050.2579957360.3775351010.3292517010.6157760810.4230769230.2965686270.3799058080.3787167450.4074074070.3184210530.643617021
C2+S40.6199770380.5157593120.5133079850.4437140510.4522613070.645161290.6060606060.5654450260.5051449950.6658446360.6905370840.50.7086614170.4981549820.4736842110.6122448980.5454545450.5013927580.6529625150.4376012970.5232558140.5027932960.433734940.5309734510.4631217840.729729730.6809583860.4695652170.4615384620.6733167080.8194233690.8307692310.7468879670.6766917290.4683434520.5708245240.4869251580.6896551720.5966850830.7248322150.4541631620.5128205130.5787781350.7964601770.8194233690.5555555560.4289118350.5555555560.6775407780.8194233690.7510431150.7209612820.7894736840.4368932040.5750798720.5227492740.7814761220.6206896550.4847396770.5775401070.5763073640.6053811660.5103969750.801186944
C2+S50.4014466550.3045267490.3024523160.2469410460.2534246580.4277456650.3874345550.3485086340.2956058590.450304260.4784482760.2913385830.50.2898172320.2700729930.3936170210.3303571430.2924901190.4361493120.2423580790.310924370.2936507940.2394822010.3175965670.2617924530.5260663510.4673684210.2668269230.260563380.4586776860.6510263930.6686746990.5481481480.46250.2658682630.3535031850.2806573960.4774193550.3781942080.5199063230.2548794490.3020408160.360975610.6166666670.6510263930.3394495410.2359192350.3394495410.4634655530.6510263930.553615960.5150812060.6065573770.2418300650.3574879230.310489510.5951742630.4021739130.2788944720.3598055110.3586429730.3867595820.30.623595506
C2+S60.6217142860.5176022840.5151515150.4455364460.454090150.6468489890.6078212290.567257560.5069897480.6674846630.6921119590.5018450180.7101827680.50.4755244760.6139954850.5472837020.5032377430.6546329720.4394184170.5250965250.5046382190.4355484390.532810970.4649572650.7311827960.6825595980.4714038130.4633730830.6749379650.8205128210.8318042810.7482806050.6783042390.4701815040.5726315790.4887690930.6912325290.5984598460.7263017360.4559932940.5146641440.5805763070.7976539590.8205128210.5573770490.4307205070.5573770490.6791510610.8205128210.752420470.7224435590.7906976740.4387096770.5768822910.5245901640.7827338130.6224256290.4865831840.5793397230.5781083950.6071428570.5122410550.802359882
C2+S70.6444683140.542005420.5395683450.4698512140.47846890.6688963210.6309148260.5911330050.5314437560.6888633750.7125890740.5263157890.7299270070.5244755240.50.6369426750.5714285710.5277044850.676437430.4636785160.5494505490.5291005290.4597701150.5571030640.4893964110.750.7033997660.4958677690.4878048780.6960556840.834492350.8450704230.7662835250.6993006990.4946413850.5964214710.5132591960.7117437720.6217616580.7453416150.4803843070.5390835580.6042296070.813008130.834492350.5813953490.4548900680.5813953490.7001166860.834492350.7702182280.7416563660.8064516130.4629629630.6006006010.548947850.7989347540.645161290.5110732540.6030150750.6018054160.6302521010.536672630.817438692
C2+S80.5081723630.4028268550.4004683840.335623160.3433734940.5352112680.4935064940.4517833550.3926521240.5579119090.5856164380.3877551020.6063829790.3860045150.3630573250.50.4318181820.3890784980.5437201910.330115830.4100719420.3904109590.3266475640.4175824180.3533057850.630996310.5747899160.3592436970.3518518520.5662251660.741865510.7566371680.6514285710.570.3581151830.4572192510.3754116360.5846153850.4837340880.6252285190.3451059540.40.4653061220.71250.741865510.4418604650.3223374180.4418604650.5709515860.741865510.6564299420.6206896550.7037037040.3294797690.4615384620.4095808380.6937119680.5089285710.3733624450.4640434190.4627875510.4927953890.3976744190.718487395
C3+S10.5761843790.4702194360.4677754680.3992901510.4076086960.6024096390.5617977530.5202312140.4596527070.6241331480.6502890170.4545454550.6696428570.4527162980.4285714290.5681818180.50.4559270520.6105834460.3933566430.4777070060.4573170730.389610390.4854368930.4182156130.6923076920.6401137980.4245283020.4166666670.6320224720.790861160.8035714290.7109004740.635593220.4233301980.5257009350.4416094210.6493506490.5521472390.6870229010.4094631480.467289720.5338078290.7653061220.790861160.5102040820.3849443970.5102040820.6364922210.790861160.7154213040.6828528070.7575757580.3926701570.5300353360.4772004240.748752080.5769230770.4394531250.5325443790.5312868950.5610972570.4648760330.770547945
C3+S20.6186635940.5143678160.5119161110.4423393740.4508816120.6438848920.604729730.564075630.5037523450.664603960.6893453150.4986072420.7075098810.4967622570.4722955150.6109215020.5440729480.50.6516990290.4362307070.5218658890.501400560.432367150.5295857990.4617368870.7286295790.6797468350.4681778550.4601542420.6720901130.8185975610.8299845440.7458333330.6754716980.4669565220.5694591730.4855334540.6884615380.5953436810.7237196770.4527824620.5114285710.5774193550.7955555560.8185975610.5541795670.4275477710.5541795670.6763224180.8185975610.750.7198391420.7885462560.4355231140.5737179490.5213592230.7805232560.6193771630.4833483350.5761802580.5749464670.6040494940.5090047390.800298063
C3+S30.4644012940.3614609570.3591989990.2977178420.3049946870.4914383560.449843260.4088319090.3517156860.5143369180.5425330810.3470374850.5638506880.3453670280.323562570.4562798090.3894165540.3483009710.50.2925586140.3684210530.3495736910.2893145160.375654450.3143483020.5893223820.5314814810.3199554070.3129770990.522768670.7068965520.7229219140.6106382980.5266055050.3188888890.4141414140.3352803740.5415094340.4401840490.5833333330.3066239320.358750.4220588240.6752941180.7068965520.3991655080.285288270.3991655080.5275735290.7068965520.6158798280.5786290320.6658932710.2919633770.4183673470.3679487180.6552511420.4651539710.3333333330.4208211140.4195906430.449139280.3565217390.681710214
C3+S40.6770731710.577851790.5754560530.5061998540.5148367950.7003027250.6641148330.6257889990.5674570730.7191709840.7414529910.5623987030.7576419210.5605815830.5363214840.669884170.6066433570.5637692930.7074413860.50.5851602020.565146580.496068620.592655850.5257575760.7762863530.7328405490.5322085890.5241691840.7259414230.8536285360.863184080.7913340940.7289915970.5309869930.6309090910.5494853520.7406616860.6553352220.7719688540.5167535370.5749792870.6384544620.8341346150.8536285360.616341030.4911535740.616341030.7297581490.8536285360.7949599080.768549280.8281622910.4992805760.634949680.5846672280.8213017750.6777343750.5473186120.637281910.6361136570.6634799240.5726072610.838164251
C3+S50.597812880.4924924920.4900398410.4208725410.4293193720.6235741440.5836298930.542447630.4818805090.6448230670.6702997280.4767441860.689075630.4749034750.4505494510.5899280580.5222929940.4781341110.6315789470.4148397980.50.4795321640.4110275690.5077399380.4400715560.7109826590.6604026850.446460980.4385026740.6525198940.8052373160.8172757480.7288888890.6560.4452488690.5478841870.4637134780.6693877550.5740956830.7058823530.4312007010.4895522390.5559322030.7809523810.8052373160.5324675320.4062758050.5324675320.6568758340.8052373160.7332339790.7018544940.7735849060.4141414140.5521885520.4994923860.7651632970.5985401460.4615384620.5546786920.5534308210.5829383890.4871287130.785942492
C3+S60.617341040.51296830.5105162520.4409578860.4494949490.6425992780.6033898310.5626975760.5023518340.6633540370.688144330.4972067040.7063492060.4953617810.4708994710.6095890410.5426829270.498599440.6504263090.434853420.5204678360.50.4309927360.5281899110.4603448280.7275204360.6785260480.4667832170.4587628870.6708542710.8177641650.8291925470.7447698740.6742424240.4655623370.5680851060.484134180.6872586870.5939933260.7225981060.4513947590.5100286530.576051780.7946428570.8177641650.5527950310.4261771750.5527950310.6750948170.8177641650.7489481070.7187079410.7876106190.4341463410.5723472670.5199610520.7795620440.6180555560.4819494580.5748116250.5735767990.6027088040.5076045630.799401198
C3+S70.6805019310.5816831680.5792933440.5101302460.5187637970.7035928140.6676136360.6294642860.5713128040.7223360660.7444561770.566265060.7605177990.5644515610.5402298850.6733524360.610389610.567632850.7106854840.503931380.5889724310.5690072640.50.5964467010.5296769350.7790055250.7359081420.5361216730.5280898880.7290589450.8555825240.8650306750.7939189190.7320872270.5349013660.6345634560.5533751960.7436708860.6588785050.7747252750.5206794680.5788177340.6420765030.8362989320.8555825240.620052770.495084270.620052770.7328482330.8555825240.7975113120.7713347920.8303886930.5032119910.6385869570.5884808010.8235981310.681159420.5512118840.6409090910.6397459170.6669820250.5764513490.840286055
C3+S80.5903465350.4847560980.4823053590.4133448870.4217506630.616279070.5760869570.5347533630.474155070.6377005350.6634214190.4690265490.6824034330.467189030.4428969360.5824175820.5145631070.4704142010.624345550.407344150.4922600620.4718100890.4035532990.50.4324569360.7045790250.6534246580.4388224470.4308943090.6454668470.800335570.8126064740.7227272730.6489795920.4376146790.5402038510.4560229450.66250.5665083140.699413490.4236234460.4818181820.5482758620.7756097560.800335570.5247524750.3988294310.5247524750.649863760.800335570.7271341460.6953352770.7681159420.4066496160.5445205480.4917525770.759554140.5910780670.4538534730.5470183490.545766590.5753920390.4793969850.780687398
C4+S10.6541274820.5525154460.5500878730.4804297770.48906250.2186379930.640736950.6013448610.5419913420.6978818280.7211981570.5368782160.7382075470.5350427350.5106035890.6466942150.5817843870.5382631130.6856516980.4742424240.5599284440.5396551720.4703230650.5675430640.50.7578692490.7121729240.5064724920.4984076430.7049549550.8402684560.8505434780.7737948080.7081447960.5052461660.6065891470.5238493720.7203682390.6316851660.7533092660.4909803920.5496049170.6143277720.8193717280.8402684560.591682420.4654275090.591682420.7089467720.8402684560.7776397520.7497005990.8129870130.4735249620.6107317070.5594280610.8056628060.6548117150.5216666670.6131243880.6119257090.64008180.5472027970.823684211
C4+S20.3766478340.2828854310.2808988760.2280501710.2341920370.2828947370.3629764070.3252032520.2743484220.424628450.4524886880.270270270.4739336490.2688172040.250.369003690.3076923080.2713704210.4106776180.2237136470.2890173410.2724795640.2209944750.2954209750.2421307510.50.4415011040.246913580.2409638550.4329004330.6269592480.645161290.5221932110.4366812230.246002460.3300330030.2600780230.4514672690.3539823010.493827160.235571260.2805049090.3372681280.5917159760.6269592480.3164556960.2176278560.3164556960.4376367610.6269592480.5277044850.4889975550.5813953490.2232142860.3338898160.2886002890.569800570.3773584910.2583979330.3361344540.3350083750.3623188410.2785515320.598802395
C4+S30.4332191780.3328947370.3307189540.2720430110.2789415660.4838200470.4188741720.3787425150.3235294120.4828244270.5111111110.3190416140.5326315790.3174404020.2966002340.4252100840.3598862020.3202531650.4685185190.2671594510.3395973150.3214739520.2640918580.3465753420.2878270760.5584988960.50.2931633840.2865232160.4912621360.6801075270.6969696970.5802752290.4951076320.2921478060.3839150230.3077858880.5100806450.4093851130.5524017470.2804878050.3302872060.3916408670.6470588240.6801075270.3693430660.2602880660.3693430660.4960784310.6801075270.5856481480.5476190480.6372795970.2665964170.388036810.3391420910.6262376240.4339622640.305925030.3904320990.3892307690.4181818180.3281452660.65374677
C4+S40.6482465460.546105640.5436720140.4739704740.4825949370.3830188680.6347554630.5951219510.5355575070.6923950060.7159624410.5304347830.7331730770.5285961870.5041322310.6407563030.5754716980.5318221450.6800445930.4677914110.553539020.5332167830.4638783270.5611775530.4935275080.753086420.7068366160.50.4919354840.6995412840.8367626890.8472222220.7692307690.7027649770.4987735080.6003937010.5173876170.7151230950.6256410260.7484662580.4845115170.543187890.6081754740.8155080210.8367626890.5854126680.4589917230.5854126680.7035755480.8367626890.7731305450.7448107450.8090185680.4670750380.6045589690.5530371710.8015768730.648936170.5152027030.6069651740.6057596820.6340956340.5407801420.819892473
C4+S50.6555671180.554089710.5516637480.4820198930.4906542060.4652493870.6422018350.6028708130.5435720450.6992230850.7224770640.5384615380.739436620.5366269170.5121951220.6481481480.5833333330.5398457580.6870229010.4758308160.5614973260.5412371130.4719101120.5691056910.5015923570.7590361450.7134767840.5080645160.50.7062780270.8411214950.8513513510.7749077490.7094594590.5068382940.6081081080.5254378650.7216494850.6331658290.7544910180.4925723220.5511811020.6158357770.82031250.8411214950.5932203390.4670126020.5932203390.7102593010.8411214950.7787391840.7508939210.8139534880.4751131220.6122448980.5609973290.8066581310.656250.5232558140.6146341460.6134371960.6415478620.5487804880.82460733
C4+S60.4418212480.3407022110.3385012920.2790202340.2860262010.270903010.4274061990.3870014770.3312262960.4915572230.519841270.3266832920.5413223140.3250620350.3039443160.4337748340.3679775280.3279098870.477231330.2740585770.3474801060.3291457290.2709410550.3545331530.2950450450.5670995670.5087378640.3004587160.2937219730.50.6876640420.7043010750.5887640450.5038461540.2994285710.3922155690.3152827920.5188118810.4178628390.5610278370.2875960480.3380645160.40.6550.6876640420.3775216140.2670744140.3775216140.5048169560.6876640420.5941043080.556263270.6453201970.273486430.3963691380.3470198680.6343825670.4425675680.3133971290.3987823440.3975720790.4267100980.3358974360.661616162
C4+S70.2644444440.1900958470.188589540.1494974870.1539456660.3581943080.2531914890.2228464420.1836419750.3051282050.3296398890.1805766310.3489736070.1794871790.165507650.258134490.209138840.1814024390.2931034480.1463714640.1947626840.1822358350.1444174760.199664430.1597315440.3730407520.3198924730.1632373110.1588785050.3123359580.50.5196506550.3940397350.3156498670.1625683060.2266666670.1729651160.3287292820.2458677690.3672839510.1549479170.1882911390.2324218750.4630350190.50.2159709620.1420047730.2159709620.3164893620.50.3993288590.3628048780.4524714830.146012270.229729730.1944444440.4407407410.2650334080.1717171720.231517510.2306201550.2526539280.1868131870.470355731
C4+S80.2494331070.178282010.1768488750.1397712830.1439790580.2386495930.2386117140.209523810.1721439750.2887139110.31250.1692307690.3313253010.1681957190.1549295770.2433628320.1964285710.1700154560.2770780860.136815920.1827242520.1708074530.1349693250.1873935260.1494565220.354838710.3030303030.1527777780.1486486490.2956989250.4803493450.50.3754266210.2989130430.1521438450.2131782950.1620029460.3116147310.2315789470.3492063490.1449275360.1765650080.2186878730.4435483870.4803493450.202952030.1326899880.202952030.299727520.4803493450.3806228370.3448275860.4330708660.1364764270.216110020.1824212270.4214559390.250.1608187130.2178217820.2169625250.2380952380.1751592360.450819672
C5+S10.3560311280.2652173910.2633093530.2127906980.2186379930.2186379930.3426966290.3060200670.2570224720.40308370.4305882350.2531120330.4518518520.2517193950.2337164750.3485714290.2890995260.2541666670.3893617020.2086659060.2711111110.2552301260.2060810810.2772727270.2262051920.4778067890.4197247710.2307692310.2250922510.4112359550.6059602650.6245733790.50.4149659860.2298994970.3106960950.2433510640.4295774650.3339416060.4716494850.2199519230.2629310340.3177083330.5700934580.6059602650.2975609760.2028824830.2975609760.4159090910.6059602650.5055248620.4668367350.5596330280.2081911260.314432990.2707100590.5479041920.3567251460.2417437250.3166089970.3155172410.3420560750.2610556350.577287066
C5+S20.438030560.3372549020.3350649350.2759358290.2828947370.2828947370.423645320.3833580980.3278271920.4877126650.5160.3233082710.53750.3216957610.3006993010.430.364406780.3245283020.4733944950.2710084030.3440.3257575760.2679127730.3510204080.2918552040.5633187770.5048923680.2972350230.2905405410.4961538460.6843501330.7010869570.5850340140.50.2962112510.3885542170.3119709790.514970060.4141252010.5572354210.2844542450.334630350.3963133640.6515151520.6843501330.3739130430.2640736950.3739130430.5009708740.6843501330.5903890160.5524625270.6417910450.2704402520.3926940640.3435419440.6308068460.438775510.3100961540.3950995410.393893130.422950820.3324742270.658163265
C5+S30.6493644070.5473214290.5448888890.4751937980.4838200470.4838200470.6358921160.5963035020.5367775830.6934389140.7169590640.5316565480.7341317370.5298184960.5053586150.6418848170.5766698020.5330434780.6811111110.4690130070.5547511310.5344376630.4650986340.5623853210.4947538340.753997540.7078521940.5012264920.4931617060.7005714290.8374316940.8478561550.7701005030.7037887490.50.6015701670.5186125210.7161214950.6267893660.7493887530.4857369260.5444049730.6093439360.8162450070.8374316940.5866028710.460210210.5866028710.7045977010.8374316940.7739898990.7457420920.8097754290.4682964090.6057312250.5542495480.8023560210.6500530220.516427970.6081349210.6069306930.6352331610.5419982320.820615797
C5+S40.5508819540.4446878420.4422657950.374884580.3830188680.3830188680.5363276090.4945188790.4342245990.5997045790.626543210.4291754760.6464968150.4273684210.4035785290.5427807490.4742990650.4305408270.5858585860.3690909090.4521158130.4319148940.3654365440.4597961490.3934108530.6699669970.6160849770.3996062990.3918918920.6077844310.7733333330.7868217050.6893039050.6114457830.3984298330.50.4164102560.6255778120.5265888460.6644844520.3848341230.4417845480.5081351690.7463235290.7733333330.4844868740.3608888890.4844868740.6123680240.7733333330.6940170940.6601626020.7381818180.3684210530.5043478260.4516129030.7289048470.5516304350.4142857140.5068664170.5056039850.5356200530.4393939390.751851852
C5+S50.6322222220.5288104090.5263644770.4566613160.4652493870.4652493870.6184782610.5782520330.5182149360.6773809520.7016029590.5130748420.7193426040.5112309070.4867408040.6245883640.5583905790.5144665460.6647196260.4505146480.5362865220.515865820.4466248040.5439770550.4761506280.7399219770.6922141120.4826123830.4745621350.6847172080.8270348840.8379970540.7566489360.6880290210.4813874790.5835897440.50.7007389160.6092077090.7351421190.4671592780.5258780040.5914760910.8048090520.8270348840.5684315680.4417701860.5684315680.6888619850.8270348840.7606951870.7313624680.7980364660.4498023720.5878099170.5357815440.7902777780.6329254730.4978127730.5902489630.5890269150.6178067320.5234590620.809388336
C5+S60.4233449480.3240.3218543050.2641304350.270903010.270903010.4090909090.3693009120.3147668390.4727626460.5010309280.3103448280.5225806450.3087674710.2882562280.4153846150.3506493510.3115384620.4584905660.2593383140.3306122450.3127413130.2563291140.33750.2796317610.5485327310.4899193550.2848769050.2783505150.4811881190.6712707180.6883852690.5704225350.485029940.2838785050.3744221880.2992610840.50.3996710530.5424107140.2724215250.3214285710.3820754720.6377952760.6712707180.360.2525987530.360.4860.6712707180.5758293840.5376106190.6279069770.2587859420.3785046730.3301630430.6167512690.424083770.2974296210.3808777430.37968750.4084033610.3193166890.644562334
C5+S70.5244252870.4185779820.4161915620.3502879080.3581943080.3581943080.5097765360.4679487180.4082774050.5738993710.6013179570.4033149170.6218057920.4015401540.3782383420.5162659120.4478527610.4046563190.5598159510.3446647780.4259043170.4060066740.3411214950.4334916860.3683148340.6460176990.5906148870.3743589740.3668341710.5821371610.7541322310.7684210530.6660583940.5858747990.3732106340.4734111540.3907922910.6003289470.50.6403508770.3599605520.415717540.4815303430.7256461230.7541322310.4579673780.3367158670.4579673780.586816720.7541322310.6709558820.6358885020.7170923380.344015080.4777486910.4254079250.7073643410.5251798560.3887113950.4802631580.4790026250.5090655510.4133635330.731462926
C5+S80.3824626870.2879213480.2859135290.2324263040.2386495930.2386495930.3687050360.3306451610.2792915530.4306722690.4586129750.2751677850.4800936770.2736982640.2546583850.3747714810.3129770990.2762803230.4166666670.2280311460.2941176470.2774018940.2252747250.300586510.2466907340.506172840.4475982530.2515337420.2455089820.4389721630.6327160490.6507936510.5283505150.4427645790.2506112470.3355155480.2648578810.4575892860.3596491230.50.2400468380.285515320.3428093650.5976676380.6327160490.3218210360.2218614720.3218210360.4437229440.6327160490.5338541670.4951690820.587392550.2275249720.3394039740.2936962750.5758426970.383177570.2631578950.3416666670.3405315610.3680430880.2835408020.604719764
C6+S10.6622448980.5614186850.5590008610.4894419310.4980813510.4980813510.6490.6099624060.5509337860.7054347830.7283950620.5458368380.7451205510.5440067060.5196156930.6548940460.5905368520.5472175380.6933760680.4832464630.5687992990.5486052410.4793205320.5763765540.5090196080.764428740.7195121950.5154884830.5074276780.7124039520.8450520830.8550724640.7800480770.7155457550.5142630740.6151658770.5328407220.7275784750.6400394480.7599531620.50.5585197930.6228406910.8246505720.8450520830.6003700280.4744152050.6003700280.7163355410.8450520830.7838164250.7564102560.8184110970.4825278810.6192748090.5683012260.811250.6629213480.5306623060.621647510.6204588910.6483516480.5561268210.828863346
C6+S20.6078199050.5029411760.5004878050.4310924370.4395886890.4395886890.593750.5528017240.4923224570.6543367350.6794701990.4871794870.6979591840.4853358560.4609164420.60.532710280.4885714290.641250.4250207130.5104477610.4899713470.4211822660.5181818180.4503950830.7194950910.6697127940.456812110.4488188980.6619354840.8117088610.8234349920.7370689660.665369650.4555950270.5582154520.4741219960.6785714290.584282460.714484680.4414802070.50.5662251660.7880184330.8117088610.5428571430.4163961040.5428571430.6662337660.8117088610.741329480.7105263160.7808219180.4243176180.56250.5099403580.7725903610.6085409250.4719411220.5649779740.5637362640.5930635840.497575170.792890263
C6+S30.542817680.4366666670.4342541440.367289720.3753581660.3753581660.5282258060.4863861390.4262472890.591867470.6188976380.4212218650.639024390.4194236930.3957703930.5346938780.4661921710.4225806450.5779411760.3615455380.4440677970.423948220.3579234970.4517241380.3856722280.6627318720.6083591330.3918245260.3841642230.60.7675781250.7813121270.6822916670.6036866360.3906560640.4918648310.4085239090.6179245280.5184696570.6571906350.3771593090.4337748340.50.7401129940.7675781250.4763636360.3534172660.4763636360.6046153850.7675781250.6870629370.652823920.7318435750.3608815430.4962121210.4435665910.7224264710.5435684650.4064115820.4987309640.4974683540.5275167790.4313940720.74573055
C6+S40.294243070.2139534880.2123076920.1693251530.1742424240.1742424240.2822085890.249547920.2068965520.3374083130.3631578950.2035398230.3833333330.2023460410.186991870.28750.2346938780.2044444440.3247058820.1658653850.2190476190.2053571430.1637010680.2243902440.1806282720.4082840240.3529411760.1844919790.17968750.3450.5369649810.5564516130.4299065420.3484848480.1837549930.2536764710.1951909480.3622047240.2743538770.4023323620.1753494280.2119815670.2598870060.50.5369649810.2421052630.1610268380.2421052630.3493670890.5369649810.435331230.3976945240.4893617020.1654676260.256983240.2187004750.4775086510.2948717950.1938202250.258911820.2579439250.2816326530.2103658540.507352941
C6+S50.2644444440.1900958470.188589540.1494974870.1539456660.1539456660.2531914890.2228464420.1836419750.3051282050.3296398890.1805766310.3489736070.1794871790.165507650.258134490.209138840.1814024390.2931034480.1463714640.1947626840.1822358350.1444174760.199664430.1597315440.3730407520.3198924730.1632373110.1588785050.3123359580.50.5196506550.3940397350.3156498670.1625683060.2266666670.1729651160.3287292820.2458677690.3672839510.1549479170.1882911390.2324218750.4630350190.50.2159709620.1420047730.2159709620.3164893620.50.3993288590.3628048780.4524714830.146012270.229729730.1944444440.4407407410.2650334080.1717171720.231517510.2306201550.2526539280.1868131870.470355731
C6+S60.5661861070.4600638980.4576271190.3895401260.3977900550.3977900550.5517241380.5100354190.4495317380.6145092460.6409495550.4444444440.6605504590.4426229510.4186046510.5581395350.4897959180.4458204330.6008344920.383658970.4675324680.4472049690.379947230.4752475250.408317580.6835443040.6306569340.4145873320.4067796610.6224783860.7840290380.797047970.7024390240.6260869570.4133971290.5155131260.4315684320.640.5420326220.6781789640.3996299720.4571428570.5236363640.7578947370.7840290380.50.3753258040.50.6269956460.7840290380.7070376430.6739469580.750.3829787230.5198555960.4670270270.7409948540.5669291340.4294234590.5223700120.5211097710.5510204080.4547368420.763250883
C6+S70.6847619050.5864600330.5840779850.515042980.5236707940.5236707940.6719626170.6340388010.5761217950.7262626260.748178980.5710881650.7640807650.5692794930.5451099320.6776625820.6150556030.5724522290.714711730.5088464260.5937241950.5738228250.504915730.6011705690.5345724910.7823721440.7397119340.5410082770.5329873980.7329255860.8579952270.8673100120.7971175170.7359263050.539789790.6391111110.5582298140.7474012470.6632841330.7781385280.5255847950.5836038960.6465827340.8389731620.8579952270.6246741960.50.6246741960.7366803280.8579952270.8006681510.7747844830.8331402090.5081272080.6431127010.5932343230.8264367820.6854146810.5560711520.6454219030.6442652330.6713352010.5812449470.842907386
C6+S80.5661861070.4600638980.4576271190.3895401260.3977900550.3977900550.5517241380.5100354190.4495317380.6145092460.6409495550.4444444440.6605504590.4426229510.4186046510.5581395350.4897959180.4458204330.6008344920.383658970.4675324680.4472049690.379947230.4752475250.408317580.6835443040.6306569340.4145873320.4067796610.6224783860.7840290380.797047970.7024390240.6260869570.4133971290.5155131260.4315684320.640.5420326220.6781789640.3996299720.4571428570.5236363640.7578947370.7840290380.50.3753258040.50.6269956460.7840290380.7070376430.6739469580.750.3829787230.5198555960.4670270270.7409948540.5669291340.4294234590.5223700120.5211097710.5510204080.4547368420.763250883
C7+S10.437074830.3363874350.334200260.27516060.2821075740.2821075740.4226973680.3824404760.326972010.4867424240.515030060.3224592220.5365344470.3208489390.2998833140.4290484140.3635077790.3236775820.4724264710.2702418510.3431241660.3249051830.2671517670.350136240.2910532280.5623632390.5039215690.2964244520.2897406990.4951830440.6835106380.700272480.5840909090.4990291260.2954022990.3876319760.3111380150.5140.413183280.5562770560.2836644590.3337662340.3953846150.6506329110.6835106380.3730043540.2633196720.3730043540.50.6835106380.5894495410.5515021460.6408977560.2696747110.3917682930.3426666670.6299019610.4378194210.3092659450.3941717790.3929663610.4220032840.3316129030.657289003
C7+S20.2644444440.1900958470.188589540.1494974870.1539456660.1539456660.2531914890.2228464420.1836419750.3051282050.3296398890.1805766310.3489736070.1794871790.165507650.258134490.209138840.1814024390.2931034480.1463714640.1947626840.1822358350.1444174760.199664430.1597315440.3730407520.3198924730.1632373110.1588785050.3123359580.50.5196506550.3940397350.3156498670.1625683060.2266666670.1729651160.3287292820.2458677690.3672839510.1549479170.1882911390.2324218750.4630350190.50.2159709620.1420047730.2159709620.3164893620.50.3993288590.3628048780.4524714830.146012270.229729730.1944444440.4407407410.2650334080.1717171720.231517510.2306201550.2526539280.1868131870.470355731
C7+S30.3509803920.2609329450.2590448630.209112150.2148859540.2148859540.3377358490.3013468010.2528248590.3977777780.4251781470.2489568850.446384040.247579530.2297817720.3435700580.2845786960.250.3841201720.2050400920.2667660210.2510518930.2024886880.2728658540.2223602480.4722955150.4143518520.2268694550.2212608160.4058956920.6006711410.6193771630.4944751380.4096109840.2260101010.3059829060.2393048130.4241706160.3290441180.4661458330.2161835750.258670520.3129370630.564668770.6006711410.2929623570.1993318490.2929623570.4105504590.6006711410.50.4613402060.5541795670.2045714290.3096885810.2663690480.5424242420.3516699410.2377158030.311846690.3107638890.3370998120.2568149210.571884984
C7+S40.3870370370.2918994410.2898751730.2358916480.2421784470.2421784470.3732142860.3349358970.2831978320.4354166670.4634146340.2790387180.4849187940.2775564410.2583436340.3793103450.3171471930.2801608580.4213709680.231450720.2981455060.2812920590.2286652080.3046647230.2502994010.5110024450.4523809520.2551892550.2491060790.443736730.6371951220.6551724140.5331632650.4475374730.2542579080.3398373980.2686375320.4623893810.3641114980.5048309180.2435897440.2894736840.347176080.6023054760.6371951220.3260530420.2252155170.3260530420.4484978540.6371951220.5386597940.50.5920679890.2309392270.343750.2977207980.5805555560.3877551020.2669220950.346026490.3448844880.372549020.2874828060.609329446
C7+S50.3031578950.2211981570.2195121950.1753958590.1804511280.1804511280.2909090910.2576028620.2139673110.3469879520.3730569950.2105263160.3934426230.2093023260.1935483870.2962962960.2424242420.2114537440.3341067290.1718377090.2264150940.2123893810.1696113070.2318840580.1870129870.4186046510.3627204030.1909814320.1860465120.3546798030.5475285170.5669291340.4403669720.3582089550.1902245710.2618181820.2019635340.3720930230.2829076620.412607450.1815889030.2191780820.2681564250.5106382980.5475285170.250.1668597910.250.3591022440.5475285170.4458204330.4079320110.50.1714285710.265193370.2260596550.4881355930.3037974680.2005571030.267161410.2661737520.2903225810.2175226590.517985612
C7+S60.6777020450.5785536160.576158940.5069191550.5155555560.5155555560.6647564470.6264626460.5681632650.719751810.7420042640.5631067960.7581699350.5612903230.5370370370.6705202310.6073298430.5644768860.7080366230.5007194240.5858585860.5658536590.4967880090.5933503840.5264750380.7767857140.7334035830.5329249620.5248868780.726513570.853987730.8635235730.7918088740.7295597480.5317035910.6315789470.5501976280.7412140580.655984920.7724750280.5174721190.5756823820.6391184570.8345323740.853987730.6170212770.4918727920.6170212770.7303252890.853987730.7954285710.7690607730.8285714290.50.6356164380.5853658540.8217237310.6783625730.5480314960.6379468380.6367795060.6641221370.5733113670.838554217
C7+S70.5465753420.4403973510.4379802410.3708178440.3789173790.3789173790.5320.490171990.4299568970.5955223880.6224648990.4249201280.6425120770.4231177090.3993993990.5384615380.4699646640.4262820510.5816326530.365050320.4478114480.4276527330.3614130430.4554794520.3892682930.6661101840.611963190.3954410310.3877551020.6036308620.770270270.783889980.685567010.6073059360.3942687750.4956521740.4121900830.6214953270.5222513090.6605960260.3807251910.43750.5037878790.743016760.770270270.4801444040.3568872990.4801444040.6082317070.770270270.6903114190.656250.734806630.3643835620.50.4473094170.7254545450.5473251030.4100719420.5025188920.5012562810.5312916110.4351145040.748592871
C7+S80.5983009710.4930.4905472640.4213675210.4298169140.4298169140.5841232230.5429515420.4823874760.6452879580.6707482990.4772507260.689510490.4754098360.451052150.5904191620.5227995760.4786407770.6320512820.4153327720.5005076140.4800389480.4115191990.5082474230.4405719390.7113997110.6608579090.4469628290.4390026710.6529801320.8055555560.8175787730.7292899410.6564580560.4457504520.5483870970.4642184560.6698369570.5745920750.7063037250.4316987740.4900596420.5564334090.7812995250.8055555560.5329729730.4067656770.5329729730.6573333330.8055555560.7336309520.7022792020.7739403450.4146341460.5526905830.50.765527950.5990279470.4620431120.555180180.5539325840.5834319530.4876360040.786283892
C8+S10.3132780080.2294832830.227752640.182367150.187577640.187577640.3007968130.2667844520.2220588240.3578199050.3842239190.2185238780.4048257370.2172661870.2010652460.3062880320.251247920.2194767440.3447488580.1786982250.2348367030.2204379560.1764018690.240445860.1943371940.430199430.3737623760.1984231270.1933418690.3656174330.5592592590.5785440610.4520958080.3691931540.1976439790.2710951530.2097222220.3832487310.2926356590.4241573030.188750.2274096390.2775735290.5224913490.5592592590.2590051460.1735632180.2590051460.3700980390.5592592590.4575757580.4194444440.5118644070.1782762690.2745454550.234472050.50.3139293140.2082758620.2765567770.2755474450.3001988070.2257100150.529824561
C8+S20.499243570.3942652330.391923990.3277060580.3353658540.3353658540.4845814980.442953020.3841676370.5490848590.5769230770.3793103450.5978260870.3775743710.354838710.4910714290.4230769230.3806228370.5348460290.3222656250.4014598540.3819444440.318840580.4089219330.3451882850.6226415090.5660377360.351063830.343750.5574324320.7349665920.750.6432748540.561224490.3499469780.4483695650.3670745270.575916230.4748201440.616822430.3370786520.3914590750.4564315350.7051282050.7349665920.4330708660.3145853190.4330708660.5621805790.7349665920.6483300590.6122448980.6962025320.3216374270.4526748970.4009720530.6860706860.50.3650442480.4551724140.453920220.4838709680.3891509430.711206897
C8+S30.6342541440.5309898240.528545120.4588329340.467426710.467426710.6205405410.5803842260.5203989120.6792899410.7034313730.5152603230.7211055280.5134168160.4889267460.6266375550.5605468750.5166516650.6666666670.4526813880.5384615380.5180505420.4487881160.5461465270.4783333330.7416020670.694074970.4847972970.4767441860.6866028710.8282828280.8391812870.7582562750.6899038460.483572030.5857142860.5021872270.7025703790.6112886050.7368421050.4693376940.5280588780.5935884180.8061797750.8282828280.5705765410.4439288480.5705765410.6907340550.8282828280.7622841970.7330779050.7994428970.4519685040.5899280580.5379568880.7917241380.6349557520.50.5923632610.5911431510.619870410.5256410260.810734463
C8+S40.5440771350.4379157430.4355016540.3684701490.3765490940.3765490940.5294906170.4876543210.4274891770.5930930930.6200941920.4224598930.6401944890.4206602770.3969849250.5359565810.4674556210.4238197420.5791788860.362718090.4453213080.4251883750.3590909090.4529816510.3868756120.6638655460.6095679010.3930348260.3853658540.6012176560.768482490.7821782180.6833910030.6049004590.3918650790.4931335830.4097510370.6191222570.5197368420.6583333330.378352490.4350220260.5012690360.741088180.768482490.4776299880.3545780970.4776299880.6058282210.768482490.688153310.653973510.732838590.3620531620.4974811080.444819820.7234432230.5448275860.4076367390.50.4987373740.5287817940.432639650.746691871
C8+S50.545329670.4391592920.4367436740.3696461820.377735490.377735490.5307486630.4889162560.4287257020.5943113770.6212832550.4236926360.6413570270.4218916050.3981945840.5372124490.4687131050.4250535330.5804093570.3638863430.4465691790.4264232010.3602540830.454233410.3880742910.6649916250.6107692310.3942403180.3865628040.6024279210.7693798450.7830374750.6844827590.606106870.3930693070.4943960150.4109730850.62031250.5209973750.6594684390.3795411090.4362637360.5025316460.7420560750.7693798450.4788902290.3557347670.4788902290.6070336390.7693798450.6892361110.6551155120.7338262480.3632204940.4987437190.4460674160.7244525550.546079780.4088568490.5012626260.50.5300400530.4338797810.747645951
C8+S60.5153733530.4097788130.4074074070.3420796890.3499005960.3499005960.5007112380.45893090.399545970.5650080260.5925925930.3946188340.6132404180.3928571430.3697478990.5072046110.4389027430.3959505060.550860720.3365200760.4170616110.3972911960.3330179750.4246079610.35991820.6376811590.5818181820.3659043660.3584521380.5732899020.7473460720.7619047620.6579439250.577049180.3647668390.4643799470.3821932680.5915966390.4909344490.6319569120.3516483520.4069364160.4724832210.7183673470.7473460720.4489795920.3286647990.4489795920.5779967160.7473460720.6629001880.627450980.7096774190.3358778630.4687083890.4165680470.6998011930.5161290320.380129590.4712182060.4699599470.50.4045977010.724279835
C8+S70.6101295640.5053658540.5029126210.4334728030.4419795220.4419795220.5960874570.5551982850.4947468960.656527250.6815789470.4896030250.70.4877589450.463327370.6023255810.5351239670.4909952610.6434782610.4273927390.5128712870.4923954370.4235486510.5206030150.4527972030.7214484680.6718547340.4592198580.4512195120.6641025640.8131868130.8248407640.7389443650.6675257730.4580017680.5606060610.4765409380.6806833110.5866364670.7164591980.4438731790.502424830.5686059280.7896341460.8131868130.5452631580.4187550530.5452631580.6683870970.8131868130.7431850790.7125171940.7824773410.4266886330.5648854960.5123639960.7742899850.6108490570.4743589740.567360350.5661202190.5954022990.50.794478528
C8+S80.2881720430.2090483620.2074303410.1652281130.1700507610.1700507610.276288660.2440801460.2021116140.3308641980.3563829790.1988130560.3764044940.1976401180.1825613080.2815126050.2294520550.1997019370.3182897860.1618357490.2140575080.2005988020.1597139450.2193126020.1763157890.4011976050.346253230.1801075270.175392670.3383838380.5296442690.5491803280.4227129340.3418367350.1793842030.2481481480.1906116640.3554376660.2685370740.3952802360.1711366540.2071097370.254269450.4926470590.5296442690.2367491170.1570926140.2367491170.3427109970.5296442690.4281150160.3906705540.4820143880.1614457830.2514071290.2137161080.4701754390.2887931030.1892655370.2533081290.2523540490.2757201650.2055214720.5

You’ll notice that starting with Row 1, Column 1 (position [1,1]) and following along a perfect diagonal (positions [2,2], [3,3], [4,4], etc.) all the probabilities are 0.5, or dead even. This is because due to the way the table is set up, each Cn+Sn is pitted against itself exactly once.

There are also 448 other instances of the same Competitor facing itself with a different Strategy.

These 512 matchups notwithstanding, our table does give us the win probabilities for every real combination of Cn+Sn.

This is Bayes’ Theorem at work.

We’re on to a start.

Project 1: What if a Sportsbook Offered Odds on Trading Card Games?

Background

I’ve been a lifelong fan of trading card games.

Ever since the Star Wars CCG (Customizable Card Game) in 1995 and later, Pokémon TCG (Trading Card Game) in 1999 (in the U.S.), I’ve been hooked.

Trading card games are games of skill where two competitors construct decks of cards from those available in the game and play against one another.

One player wins and another loses. (Sometimes, there is a draw.) These games are “zero-sum” in this way.

Working in the gambling industry, as I have, for 10 years now led me to ask: “What if a sportsbook placed betting prices on the outcome of trading card game events like they do for professional sports events?”

Basically: what if you can bet on games like Pokémon and Magic: the Gathering or Yu-Gi-Oh?

What would this take to make work? What are the theoretical concepts than underpin such an endeavor? What kind of profit could the sportsbook expect?

I attempt to answer these and more during the course of this project.

I aim for this project to change and evolve as its proceeds, knowing that the final conclusions I draw may be very different from my starting assumptions.

I hope also to get some comment from readers to help improve what’s being done here.

This project is both a demonstration and also some food for thought.

Objectives

My objectives for this project are:

  1. Demonstrate how Bayesian Inference can help us construct a predictive model for two-player, winner-take-all events (card games).
  2. Demonstrate how, given the probabilities assumed by these inferences, odds and betting prices by a fictional sportsbook (“TCGBook”) can be set.
  3. Model the outcomes of fictional and real matchups in a trading card game tournament setting.
  4. Model the profit and loss of our fictional sportsbook (“TCGBook”).
  5. Open these ideas to the public for comment, critique, and improvement.

Limitations

Before starting on this quest to model our TCGBook endeavor, it is important that I acknowledge a few key limitations.

We compare our subject, trading card games, to the tried-and-true professional sports leagues on which our sports betting idea and models are largely based.

Data Availability

The data for card game events can be very hard to come by.

Most of the data sources are compiled by fans of the games and not the hosts or producers of the games themselves. The “big dogs”, as it were, do not wish to disclose their proprietary information. Or at least, not all of it. Maybe they never thought to or they not in a place to do this regularly.

The fans that do this tireless service for us should be acknowledged for their efforts, both for this project, and more importantly, for the fandom and playerbases of these games.

That being said, much of the data that we would like to have is simply unavailable or is, at best, incomplete.

In real sports betting, sportsbooks are able to rely heavily on data aggregators to compile every conceivable bit of data about sports, events, scores, goals, fouls, players, training, coaches, etc. This isn’t the case for trading card games. The interest and size of the market just isn’t the same. It’s much smaller.

We would love to see data on each major tournament, broken down by each round. We would love to see player data reported with unique ID keys to keep variations of a player’s name or misspellings from confusing the data. We’d love to see local, sanctioned tournament data, too. But these are not realities.

We will work within these limitations and show that, at least conceptually, our idea is possible.

We’ll focus only on the widely available data, namely that from major tournaments and the highest ranked players and best known strategies.

Nature of Trading Card Game Events

Trading card game events don’t work like professional sports matches.

In professional sports matches, we know which team will play against which team and on what date. This allows the sportsbook advance knowledge of these events and gives it time to compute odds and set prices. Season schedules for any major sport are announced well ahead of time.

This is not the case for card game tournaments.

At local tournaments, anyone can show up with a deck to sign up to play. At major events, any number of qualified players can show up (or not show up). Add to this the possibility of any given strategy (i.e. deck of cards) being used by any competitor, and the matchups are simply unknowable ahead of time.

In this project we will simply ignore this as a problem. We will make the assumption that the odds are set sometime in advance of the event taking place (maybe just minutes before). Making this assumption allows us to proceed to demonstrate our ideas.

Feasibility of Taking Bets

This project isn’t a serious attempt to find a way to start taking bets on trading card games.

This may or may not be legal in any jurisdiction, and what is proposed in this project is not legal advice nor an inducement to try and make this work outside of the law.

To complicate matters, the participants of many card game events are under the legal age to gamble in many places.

Nowadays, most jurisdictions (at least in the U.S.) allow betting on college sports, where the expectation is that competitors are least 18 years of age.

Whether or not taking bets on such events would fly with gaming regulators is not considered here. This is about proving a concept (and having fun while doing it).

Don’t take anything in this project too seriously as far as making money at gambling on trading card games goes.

This is a big “what if” sort of project.

Assumptions

With our objectives in mind, and our limitations outlined, we’ll make the following assumptions for this project:

  1. All probabilistic modelling will be based on Bayesian (not Frequentist) inference.
  2. We will briefly discuss, but largely ignore, the outcome of ties. We care only about win probabilities (and consequently, not win probabilities).
  3. Win probabilities are expected to describe the win probability of matches; that is, “best two-out-of-three” matches in which the first competitor to win two games, wins the match. (This is the circumstance which often contributes to a draw between players: a time limit for the match it met with neither player having a decisive, tie-breaking win).
  4. The outcomes we seek are not only probabilistic, but also commercial: this is about setting bet prices for potential bettors. As “the house”, we expect to make money in the long run. Our models, odds, and prices will reflect that desire.
  5. As mentioned previously, we assume that we know who is playing and which deck they are using before the match. We know the identities of players and the decks they each use beforehand, thus, giving rise to our probabilities for each player to win and the consequent bet prices for each side of the match.
  6. While I will take time to explain many of the theories and logic behind each step we take in this project, I will assume that readers have some familiarity with the mathematics of probability, statistical inference, the software systems we’ll use, and the games we are speaking about. Feel free to ask in the comments if you’re unsure about something!

Segments

The project is broken down into the following segments, each with its own dedicated page: