logo
All case studies
Sports

Pricing a Saturday of college football

104 college football games in five kickoff waves: researched, predicted, and assigned to portfolios.

A prediction market quotes a price for every team in every game. The question for a trader is not who will win a single game but where the market is wrong, by how much, and how to spread a budget across all of those disagreements at once.

On Saturday, October 17, 2026 we ran that workflow end to end for a full day of college football. We split the slate into five waves by kickoff time so each wave could be priced and placed before its first game started. For each wave we researched every team, asked Chronulus for a pre-game win probability, built a diversified portfolio from only the teams where we saw an edge, reviewed the result game by game, and cut the positions we did not believe in.

Across the day, Chronulus priced 104 games for about $43 in total, roughly $0.41 per game.

The day at a glance

Each wave started with the same budget, allocated independently. A game has two sides, so the 104 games were 208 markets. Only 55 of them received any money.

Wave (ET kickoffs)GamesIncluded after reviewPositionsLargest positionPrediction cost
Noon1817839%$7.34
1:00 PM1311726%$5.28
1:30 to 3:00 PM18171324%$7.44
3:30 to 6:30 PM25231317%$10.21
7:00 PM onward30291419%$12.28
Total1049755$42.55

How we did it

  1. Research every team. For each game we built a matchup report from college football data: schedule-adjusted team ratings, how each team ranks against its peers on offense, defense, turnovers and third downs, game-by-game results with opponent quality, and head-to-head history. We then searched for quarterback and injury news, looked up the weather forecast at the stadium for the local kickoff time (skipping indoor venues), and noted the venue, travel and who was at home. Where we could not find availability news for a team, we said so in the inputs instead of leaving a silent gap.
  2. Ask Chronulus for the pre-game win probability. Everything we found went to a Chronulus Binary Predictor as plain text. We deliberately held back the model win probabilities in the reports and any betting lines, so the answer is an independent view and not an echo of the market. Each game was asked twice with the two teams swapped, five experts per framing, and the two answers were combined to cancel the bias of whichever team is named first. The result is a win probability with a 90% interval for each team.
  3. Apply portfolio theory for a first allocation. We compared each Chronulus probability with the market’s price, including fees, and gave the whole wave to a Kelly-criterion optimizer. It treats the two teams in a game as mutually exclusive, carries Chronulus’s uncertainty into the allocation, and puts money only where the probability beats the price. Where there is no edge, the allocation is exactly zero.
  4. Review the allocation using the explanations. A first allocation is a starting point. For every large position we went back to the Chronulus explanations to see why the panel saw an edge, and checked whether that reasoning rested on something real, such as a quarterback change or a mismatch in the numbers, or only on ratings and home field with no availability news. We also checked whether a position would be a large share of the capital or of the market’s open interest.
  5. Cut what we did not believe in, then allocate. We removed seven games across the five waves and re-ran the optimizer on what remained. The final allocation for each wave is the portfolio we would stand behind, with every position weighed against the others.

Why we only held teams with an edge

A prediction is only useful relative to a price. A team with a 90% chance of winning is a bad position at a 95% price and a good one at 80%. Of the 208 markets on the day, most were priced about where Chronulus saw them, and holding those adds fees and variance without adding expected value.

Concentrating on the disagreements also made the portfolios different from a list of favorites. Many of the positions were underdogs priced well below their probability, and many of the favorites we liked were ones the market had priced too low.

What the review caught

The reviews were short, and they changed the portfolios. Across the five waves we removed seven games. The reasons came back to how much we trusted the inputs behind an edge, not to the size of the edge:

  1. A big edge on thin research. A 20-point disagreement with the market that rested only on ratings and home field, with no availability news, is more likely a gap in what we know than a gap in the market.
  2. One position carrying too much of the capital. In one wave a single position would have taken 29% of the capital on that kind of evidence.
  3. Thin markets. Two positions were large relative to everything on offer in the market. Real orders would have moved the price.
  4. Teams on different scales. A lower-division team against a major-conference team: the ratings for the two levels are not directly comparable, so the apparent edge was not trustworthy.
  5. Inputs Chronulus had not been told. A first-year program with no history, and a game where we had not yet searched for availability news, were removed instead of being priced on an incomplete picture.

The five waves

Wave 1: Noon

Binary Predictor · 18 requests

The earliest wave kicked off at noon Eastern. Eighteen games were researched and predicted. After review we removed one, a two-cent longshot on a road team, and built the portfolio from the remaining 17.

Eight positions came out of the optimizer. With few games and a few large disagreements with the market, the portfolio was concentrated: the largest position was 39% of the capital, and the three largest together were 83%.

What we ranCost
Game prediction: both framings, 10 expert opinions × 18$7.34
Average prediction time per game9.9 s

Wave 2: 1:00 PM

Binary Predictor · 13 requests

The smallest wave: 13 games. We removed two after review. One was a game where we had not searched for availability news and the visiting team was a first-year program that Chronulus had not been told about. The final portfolio held seven positions across the remaining 11 games.

What we ranCost
Game prediction: both framings, 10 expert opinions × 13$5.28
Average prediction time per game10.9 s

Wave 3: 1:30 to 3:00 PM

Binary Predictor · 18 requests

Every one of this wave’s injury searches returned only earlier-season news, so none of the 18 games had availability reports. That made the review stricter. We cut one game, an outsized position that rested only on ratings and home field and would have taken 29% of the capital. The remaining 17 games produced 13 positions, the most spread-out portfolio of the early waves, with the largest position at 24%.

What we ranCost
Game prediction: both framings, 10 expert opinions × 18$7.44
Average prediction time per game8.5 s

Wave 4: 3:30 to 6:30 PM

Binary Predictor · 25 requests

None of the afternoon games were played indoors, so each got a weather forecast at its stadium for the local kickoff time. We cut two games in which our edge came only from team ratings plus home field, the market disagreed by more than 20 points, and the market was thin enough that taking the position would have been a large share of everything on offer. The 23 remaining games produced 13 positions and the largest, at 17%, was smaller than in any earlier wave.

What we ranCost
Game prediction: both framings, 10 expert opinions × 25$10.21
Average prediction time per game8.5 s

Wave 5: 7:00 PM onward

Binary Predictor · 30 requests

The evening wave was the biggest: 30 games from 7:00 PM onward. One matchup, a Big Ten game, was run twice. We re-ran it after finding the conference’s full availability reports, with a refreshed stadium forecast.

We cut one game that pitted a lower-division team against a major-conference team, where the ratings for the two levels are not on a comparable scale. The 29 remaining games produced 14 positions, the largest at 19%.

What we ranCost
Game prediction: both framings, 10 expert opinions × 30$12.28
Average prediction time per game8.4 s