Closing Line Value (CLV)

Overview

Closing line value (CLV) is the difference between the odds a bettor locked in when placing a bet and the final odds the sportsbook offered right before the game started. It is one of the most important validation metrics for sports betting models because the closing line is widely considered the most efficient market price — it incorporates all available information up to game time.

If a bettor consistently gets better odds than the closing line (positive CLV), it indicates their pre-game predictions are better than the market consensus. This is a stronger signal of genuine predictive ability than just checking win rates, because even a random bettor can get lucky over a small sample, but consistently beating the closing line requires real information advantage.

CLV is expressed as a percentage or in the same units as the odds (e.g., a bet at 2.10 that closes at 2.00 has positive CLV of +5%).

Why It Matters

CLV is the gold standard for model validation because:
1. Closing line is the most efficient price: It reflects all information available at game time — injuries, weather, lineup leaks, market consensus.
2. It's forward-looking: You can't know the closing line when placing a bet. CLV measures whether your pre-game estimate was better than what the market eventually concluded.
3. It filters luck from skill: A model that beats the closing line consistently has genuine predictive power; one that only shows positive ROI might just be lucky.
4. It's market-validated: Unlike model-reported probabilities, CLV is measured against real-money market prices.

Key Formula

CLV as decimal:

$$CLV = \frac{odds_{bet} - odds_{close}}{odds_{close}}$$

For decimal odds: bet at 2.10 closing at 2.00 → CLV = (2.10−2.00)/2.00 = +0.05

CLV from probabilities:

$$CLV = p_{model} - p_{close}$$

Where p_close = 1/closing_decimal_odds.

CLV from implied probabilities (alternative):

$$CLV = \frac{1}{p_{model}} - \frac{1}{p_{close}}$$

Worked Example

  • Model predicts 60% win probability → fair odds = 1/0.60 = 1.667
  • Bet placed at 1.75 (implied prob = 57.1%)
  • Closing odds = 1.65 (implied prob = 60.6%)

Odds-based CLV: (1.75 − 1.65) / 1.65 = +6.1%

Probability-based CLV: 0.60 − 0.606 = −0.006 (slight negative — model was slightly wrong)

Interpretation: The bettor got better odds than the market closed at, but the model's probability was slightly above the market's implied probability. The +EV bet lost because of random outcome variance.

Code Snippet

def closing_line_value(bet_odds, close_odds):
    """Calculate CLV from decimal odds."""
    return (bet_odds - close_odds) / close_odds

def clv_from_probabilities(model_prob, close_odds):
    """CLV using model probability vs closing implied probability."""
    prob_close = 1 / close_odds
    return model_prob - prob_close

def evaluate_model_clv(bets_df):
    """Evaluate model CLV across a set of bets."""
    bets_df['clv'] = (bets_df['bet_odds'] - bets_df['close_odds']) / bets_df['close_odds']
    bets_df['clv_prob'] = bets_df['model_prob'] - (1 / bets_df['close_odds'])
    return {
        'mean_clv': bets_df['clv'].mean(),
        'clv_winners': bets_df.loc[bets_df['result'] == 1, 'clv'].mean(),
        'clv_losers': bets_df.loc[bets_df['result'] == 0, 'clv'].mean(),
        'pct_positive_clv': (bets_df['clv'] > 0).mean()
    }

# Example
bets = [
    {'model_prob': 0.60, 'bet_odds': 1.80, 'close_odds': 1.75, 'result': 1},
    {'model_prob': 0.55, 'bet_odds': 2.00, 'close_odds': 2.10, 'result': 0},
    {'model_prob': 0.70, 'bet_odds': 1.50, 'close_odds': 1.48, 'result': 1},
]
import pandas as pd
df = pd.DataFrame(bets)
print(evaluate_model_clv(df))

Pitfalls

  • Small sample distortion: 64 World Cup matches is a small sample for CLV. Expect high variance; need multiple tournaments for reliable CLV estimates.
  • CLV is a validation tool, not a betting tool: You can't know the closing line when placing a bet — CLV is for post-hoc analysis.
  • Favorite-longshot bias: CLV is more reliable for favorites than underdogs; the market is less efficient for longshots but more volatile.
  • Pinnacle as benchmark: Pinnacle closing lines are the gold standard. Using Bet365 or soft book closing lines gives a less reliable CLV estimate.

See Also