The method evaluated in our public benchmarks — see benchmark evidence →

A hands-on course — build a calibrated win-probability model

Polymarket bot course:
build a trading bot in Python.

Learn to collect ESPN data, build Elo ratings, estimate win probabilities, and evaluate calibration and backtests. Public benchmarks document selected evaluations; they do not guarantee the results of the model you build.

6 Jupyter notebooks of working code for NBA, NCAAMB, NHL, NFL and CFB (plus MLB in the modelling notebook). Beginner-friendly — works alongside any AI assistant.

★ Try Module 1 free — the full course is $49

Same method evaluated in public benchmarks; our filtered public results ledger includes losses. see benchmark evidence →

One-time $49. 6 notebooks you keep forever. 30-day conditional guarantee.

Illustrative probability display
Example values; not live prices
NBA Lakers vs Celtics
71%
model win prob
NHL Rangers vs Bruins
62%
model win prob
NCAAMB Duke vs UNC
78%
model win prob
Probabilities are model estimates Evaluate calibration on held-out data
ZenHodl edge finder showing calibrated win probabilities and the best price across Polymarket, Kalshi, and the sportsbooks

The course teaches the method. Want to see it running? Our Edge Finder displays model estimates and available venue prices. Public benchmark artifacts cover defined evaluation windows; the filtered public ledger separately reports recorded outcomes.

Open the Edge Finder →

Free to browse model estimates and available prices. Coverage and quote age vary by sport and source. No credit card.

268
Notebook cells
8,010
Lines of working code
6
End-to-end modules
5
Sports with scraper/bot code
This is the method we evaluate in public

The model you build in this course is the same kind we run live. Public benchmark artifacts document selected evaluations, and our filtered public results ledger includes wins and losses. The results page separately reports measured execution-identifier and direct-transaction-hash coverage.

Works with AI assistants

An AI coding assistant can help explain a cell or error. Include the relevant definitions and test its suggestions. The notebooks still require Python setup, ordered execution and evaluation; adding a new sport requires additional work.

Paste & ask
"Explain this code"
Customize
"Add soccer support"
Debug
"Why is this error?"

How to evaluate your model

The course teaches calibration, probability error and ranking on held-out data. Metric values depend on the sport, prediction time, outcome prevalence and test sample; the course does not promise a universal target.

Metric What it measures How to compare
ECE Calibration gap State bins and sample size
Brier Probability error Compare on the same test rows
AUC Ranks winners Measure ranking on held-out rows
vs sharp books Pinnacle / Poly Use a dated paired benchmark

The linked NBA 2026 playoff benchmarks compare paired pregame forecasts under their published timing and inclusion rules. They do not establish universal market parity, current trading profit or the performance of a student model. Full statistical validation · Benchmark evidence

Public audit trail Measured evidence

Public benchmark artifacts document selected model evaluations, while the filtered public results ledger shows resolved wins and losses under its published inclusion rules.

  • ✓ Public benchmark artifacts and methodology
  • ✓ Filtered public results include losses, not just wins
  • ✓ Measured execution-ID and direct-tx-hash coverage disclosed

Start with evidence, not promises.

What you'll build — module by module

Six Jupyter notebooks cover the pipeline from data collection to deployment. The display below is an illustrative excerpt and example output, not a recorded notebook run or a guaranteed training result.

Module 3 concept — illustrative excerpt
In [3]
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.calibration import CalibratedClassifierCV

# Train on your scraped games (NBA, NCAAMB, NHL, NFL, CFB)
model = GradientBoostingClassifier(n_estimators=200)
model.fit(X_train, y_train)

# Isotonic calibration for reliable probabilities
calibrated = CalibratedClassifierCV(model, method="isotonic")
calibrated.fit(X_cal, y_cal)

print(f"Brier: {brier_score(y_test, calibrated.predict_proba(X_test)[:, 1]):.4f}")
Illustrative output — not a recorded run
Brier: 0.1395 (illustrative value)

ECE = how far our stated probabilities sit from reality (lower is better); AUC = how well the model ranks winners; Brier = overall probability error.

1

Scraping ESPN

  • Build an async data scraper for ESPN play-by-play
  • Handle rate limits, retries, and API pagination
  • Collect available historical games across NBA, NCAAMB, NHL, NFL and CFB
  • Store as efficient Parquet files

Historical data collection in one notebook

Try free ↓ · AI prompt: "Explain how this async scraper works"

2

Elo Ratings

  • Implement Elo from scratch (no libraries)
  • Home advantage, K-factor tuning, season resets
  • Team-keyed ratings for the included sports
  • Validate against known rankings

The simplest feature that matters most

AI prompt: "Help me add season-decay to my Elo system"

3

WP Models

  • Train LR+Spline and XGBoost+Isotonic
  • Isotonic calibration for probability accuracy
  • Why a simpler, well-calibrated model often ranks best
  • Sport-specific feature engineering

Measure probability error on held-out games

AI prompt: "Explain isotonic calibration like I'm a beginner"

4

Backtesting

  • Time-split validation (train on N-1, test on N)
  • Adverse selection and underdog traps
  • Execution cost modeling (fees, slippage)
  • Deduplication and subsampling

Check leakage, duplicates and execution assumptions

AI prompt: "Help me add a new sport to this backtest"

5

Live Bot

  • Polymarket CLOB API integration
  • ESPN adaptive polling (5s/15s)
  • Comparing fair value to live market prices
  • Order execution with shadow mode (paper-first)

Run it in shadow mode before risking a dollar

AI prompt: "Help me add Discord alerts to this bot"

6

Deployment

  • FastAPI server with HTTPS
  • Discord alert webhooks
  • Cron scheduling and monitoring
  • Cloudflare Tunnel for secure access

From laptop to 24/7 production

AI prompt: "Help me deploy this to a $7/mo VPS"

Want to see the actual code before buying?

Preview the first 8 cells of every module — real teaching, real code, not marketing copy.

Preview All Modules

Try Module 1 free

Scraping ESPN: build an async historical-data pipeline with retries and Parquet output. Enter your email to download the full Module 1 notebook.

No spam. Unsubscribe anytime.

Before and after

Before

  • "I don't know Python but want to build a bot"
  • Watching tutorials that stop at theory
  • Buying picks from Discord that lose money
  • No systematic edge, just gut feel
  • No way to measure if a strategy works

After

  • Your own probability-model pipeline to train and evaluate
  • AI-assisted coding — paste any cell and ask for help
  • A dataset and evaluation workflow you can inspect
  • The skill to measure a model honestly (ECE, Brier, AUC)
  • A backtest framework that tells you the truth before you risk a dollar

Built by a trader, not a marketer

These notebooks teach the data, modeling, backtesting and deployment workflow behind ZenHodl. Production models and risk rules evolve separately. The public benchmarks document specific evaluation windows, and the filtered public results ledger reports recorded outcomes under its inclusion rules.

I built this because I couldn't find a prediction market course that showed real code and measured itself honestly. I wanted a course that continued beyond a confusion matrix. This one starts at the data pipeline and ends with a calibrated model you can deploy and audit yourself.

6
Notebooks included
Parquet
Data storage format
5
Sports with working code

See live results at /results. Read the methodology at /methodology. Read our research paper.

Frequently asked questions

What do I need to get started? +
Python 3.10+, pandas, numpy, scikit-learn, xgboost, aiohttp, matplotlib. A Polymarket account is only needed for Module 5 (live trading). Everything else works locally.
What skill level is this for? +
Beginner-oriented notebooks. Expect to install Python packages, run cells in order, troubleshoot data downloads and learn the code. An AI assistant can help explain a cell or error; check its suggestions against the notebook and your output. Preview Module 1 to judge the level before buying.

What you DO need: A computer (Mac, Windows, or Linux), an internet connection, and the willingness to follow instructions and experiment. You will still need to follow setup steps and check the results.
Is there a refund policy? +
30-day conditional guarantee. Complete all 6 modules, follow the instructions, and if you can't get a working bot with a positive backtest within 30 days, email [email protected] with your notebook outputs and we'll issue a full refund.

The public benchmarks document specific model versions and evaluation windows; they do not guarantee the performance of a student bot. You can try Module 1 completely free before buying to make sure you like the teaching style.

Note: Refund requires demonstrated completion of all modules. Dataset purchases are non-refundable. Backtests are historical and optimistic — live results run lower and you can lose money. The course teaches the method; it is not a guarantee of profit.
How do I use AI with this course? +
Run notebook cells in order. If you need help, include the relevant cell and the preceding definitions:
  1. Copy the cell into Claude, ChatGPT, or any AI assistant
  2. Ask: "Explain this code line by line" or "What does this function do?"
  3. To customize: "Help me modify this to track soccer instead of NBA"
  4. To debug: paste the error message and ask "How do I fix this?"

Use AI explanations as suggestions, then test them against the notebook and your output. Extending to a new sport requires its own data, features and evaluation.

How long does it take to complete? +
Work at your own pace. Completion time depends on your Python experience, data downloads and setup; an AI assistant can help explain code and troubleshoot errors. Each module is a self-contained notebook designed to run end-to-end.
Will this work for my sport? +
The notebooks carry working code for five sports: NBA, NCAAMB, NHL, NFL and CFB (the Module 3 model also handles MLB; the Module 5 bot does not). Module 6 describes how our production system models soccer and esports, but there is no hands-on code for them. The techniques generalize to other sports with prediction markets.
What's the difference between the course and the Edge Finder? +
The course teaches you to build a calibrated win-probability model yourself, end to end. The Edge Finder is our live fair-value tool, with available prices across Polymarket, Kalshi and sportsbooks. Public benchmark artifacts document selected evaluations, while our filtered public results ledger includes wins and losses and reports measured execution-identifier coverage.

What can go wrong

Model drift. Markets adapt. A calibrated fair-value reference can become stale and may need retraining as market efficiency improves.

Execution costs. Use the cost assumptions stated by each notebook or benchmark. Actual fees, slippage and available liquidity depend on the venue and order.

Small samples. Backtests are historical and optimistic. Our filtered public results ledger, including losses, is on /results — a model being well-calibrated does not mean it beats the market or turns a profit.

Regime change. Rule changes, new market participants, or structural shifts can invalidate historical patterns.

Past performance does not guarantee future results. This is a tool for informed decision-making, not a guaranteed profit machine.

Build a model you can trust

6 notebooks. Working code. The same method evaluated in our public benchmark artifacts.

Price: $49

or try the Starter Pack for $19 · browse datasets

Get the Course
$49 · 30-day conditional guarantee
Buy Now