← All projects

Data Analysis

Tennis Betting Strategy Analysis

Exploring whether consistently backing tennis favorites can generate positive returns.

SQL · Sportsbook Analytics · Historical Project (2022)

Source SQL on GitHub

Business Question

Does consistently backing the favorite in a tennis match produce a profit? In this 2022 project, I used historical match results and bookmaker odds to examine that assumption through four fixed betting rules.

A favorite can win frequently without producing a positive return. The analysis therefore compares total stakes with total winnings, rather than judging a strategy by how often its selections win.

Dataset

I used ATP tennis match data from 2010–2021, sourced from Tennis-Data. The records include tournaments, players, rankings, match results, and decimal odds from Bet365 and Pinnacle.

Coverage
2010–2021
Matches in the analysis
29511
SQL dialect
MySQL-style SQL
Original SQL resultSQL COUNT result showing total_matches of 29511.

Data Preparation

I combined twelve annual tables into atp_matches using UNION ALL. The preparation script standardizes dates and bookmaker odds, then applies match-status and data-availability rules.

  • Parse dates with STR_TO_DATE and replace decimal commas in odds fields.
  • Remove walkovers and records marked Disqualified, Sched, or Awarded.
  • Exclude rows with missing Pinnacle winner odds or Bet365 winner odds.
  • Correct the misspelled retirement status and remove selected cases where the first set was incomplete.

These exclusions define the match population used for the historical comparison.

Analysis Methodology

Each qualifying selection uses a fixed stake of 10. Winnings include the returned stake; profit is winnings minus total stake. Pinnacle prices are used for the four strategies, after the bookmaker comparison below.

  1. Favorite at odds ≤ 1.30

    Back the favorite only when either Pinnacle price is 1.30 or lower.

  2. Favorite at odds ≤ 1.10

    Apply the same approach with a tighter price threshold of 1.10.

  3. Favorite at any odds

    Back the lower-priced player without a threshold; equal-price matches are excluded.

  4. Top 10 versus rank 20 or worse

    Back a player ranked in the top 10 against an opponent ranked 20 or worse.

In the SQL, PSW and PSL hold Pinnacle prices for the match winner and loser. WRank and LRank hold their respective rankings.

From rules to queries

SQL Analysis

Selected original queries show how the comparisons and strategy rules were expressed in SQL.

Compare bookmaker margins

Average the sum of the implied probabilities for each bookmaker. A lower combined percentage indicates a smaller pricing margin.

SELECT
	ROUND(AVG((100 / B365W) + (100 / B365L)),2) AS bet365_margin,
    ROUND(AVG((100 / PSW) + (100 / PSL)),2) AS pinnacle_margin
FROM atp_matches;

Calculate Strategy 1 returns

Count qualifying bets at a fixed stake, sum the returns from winning selections, and subtract the total stake.

SELECT
	10 * COUNT(CASE WHEN PSW <= 1.30 OR PSL <= 1.30 THEN 1 ELSE NULL END) AS total_stake,
    ROUND(SUM(CASE WHEN PSW <= 1.30 THEN 10 * PSW ELSE NULL END),2) AS total_winnings,
    ROUND(SUM(CASE WHEN PSW <= 1.30 THEN 10 * PSW ELSE NULL END),2) - (10 * COUNT(CASE WHEN PSW <= 1.30 OR PSL <= 1.30 THEN 1 ELSE NULL END)) AS profit
FROM atp_matches;

Group Strategy 1 by year

Use YEAR(match_date) to examine how the same strategy performed across individual seasons.

SELECT
    YEAR(match_date) AS yr,
    10 * COUNT(CASE WHEN PSW <= 1.30 OR PSL <= 1.30 THEN 1 ELSE NULL END) AS total_stake,
    ROUND(SUM(CASE WHEN PSW <= 1.30 THEN 10 * PSW ELSE NULL END),2) AS total_winnings,
    ROUND(SUM(CASE WHEN PSW <= 1.30 THEN 10 * PSW ELSE NULL END),2) - (10 * COUNT(CASE WHEN PSW <= 1.30 OR PSL <= 1.30 THEN 1 ELSE NULL END)) AS profit
FROM atp_matches
GROUP BY 1
ORDER BY 1 DESC;

Select top-10 ranking matchups

Use winner and loser rankings to identify qualifying matches, then calculate the return from the top-10 selection.

SELECT
	10 * COUNT(CASE WHEN (WRank <= 10 AND LRank >= 20) OR (WRank >= 20 AND LRank <= 10) THEN 1 ELSE NULL END) AS total_stake,
    ROUND(SUM(CASE WHEN WRank <= 10 AND LRank >= 20 THEN 10 * PSW ELSE NULL END),2) AS total_winnings,
    ROUND(SUM(CASE WHEN WRank <= 10 AND LRank >= 20 THEN 10 * PSW ELSE NULL END)
		- 10 * COUNT(CASE WHEN (WRank <= 10 AND LRank >= 20) OR (WRank >= 20 AND LRank <= 10) THEN 1 ELSE NULL END),2) AS profit
FROM atp_matches;

Historical results

Results

The figures below preserve the results published with this 2022 analysis.

Bookmaker comparison

The average combined implied probability was lower for Pinnacle.

Average implied-probability total
Bet365Pinnacle
106.56102.43
Original SQL resultBookmaker margin SQL output: bet365_margin 106.56 and pinnacle_margin 102.43.

Winner-known comparison

A hypothetical 10-stake bet on every eventual winner produced higher total winnings with Pinnacle. This comparison assumes advance knowledge of the winner; it is not a betting strategy.

Total winnings when every winner is known
Bet365Pinnacle
542824.75567634.54
Original SQL resultHypothetical winnings SQL output: Bet365 542824.75 and Pinnacle 567634.54.

Four strategies, four negative returns

Published strategy totals · fixed stake of 10 per selection
StrategyTotal stakeWinningsProfit
1. Favorite at odds ≤ 1.309692095819.70-1100.30
2. Favorite at odds ≤ 1.102642026159.98-260.02
3. Favorite at any odds293820288719.69-5100.31
4. Top 10 versus rank 20 or worse4752046662.74-857.26

Strategy 1

Original SQL resultStrategy 1 SQL output: total stake 96920, winnings 95819.70, profit -1100.30.

Strategy 2

Original SQL resultStrategy 2 SQL output: total stake 26420, winnings 26159.98, profit -260.02.

Strategy 3

Original SQL resultStrategy 3 SQL output: total stake 293820, winnings 288719.69, profit -5100.31.

Strategy 4

Original SQL resultStrategy 4 SQL output: total stake 47520, winnings 46662.74, profit -857.26.

Strategy 1 by year

The yearly breakdown shows a positive result in 2015, while every other displayed year is negative.

Favorite at odds ≤ 1.30 · annual results
YearTotal stakeWinningsProfit
202169706804.30-165.70
202037003684.59-15.41
201966706499.35-170.65
201868606725.10-134.90
201786408392.50-247.50
201692709124.90-145.10
201589809154.50174.50
201486608575.10-84.90
201392109111.00-99.00
201299609947.10-12.90
201193309255.50-74.50
201086708545.76-124.24
Original SQL resultOriginal Strategy 1 annual SQL results, showing all twelve years from 2021 to 2010 in the same order as the annual results table.

Key Findings & Conclusion

All four tested strategies produced a loss in the published results. Restricting selections to very short-priced favorites did not turn the approach profitable, and using a ranking gap did not produce a positive return either.

The bookmaker comparison also shows why price matters: the same hypothetical winning selections generated different returns with Bet365 and Pinnacle.

For this historical sample and these selection rules, consistently backing favorites was not profitable. A high likelihood of winning an individual match is not enough to establish a profitable betting approach.

Limitations

Back to projectsExplore Russian Learning Hub →