Senior Data Scientist — Monte Carlo Sports Prediction Engine (Python, Statistics)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Part Time

SALARY

12

HOURS PER WEEK

15

DATE UPDATED

Aug 17, 2026

JOB OVERVIEW

Australian sports-analytics company. We run a true native-joint Monte Carlo simulation engine — 100,000 correlated simulation paths per game — publishing daily player-prop and game-line predictions across WNBA, MLB and AFL, with NFL and NBA launching in September. The system already has automated calibration, closing-line-value tracking, Brier/reliability reporting and a fully graded public track record. We need a very senior data scientist to make it the most accurate engine in the market.

WHAT YOU'LL DO
- Audit our v3.8 engine end-to-end and put findings in writing
- Build and backtest the NFL model before launch (backtest-before-deploy is law here)
- Own the calibration loop: bias correction, confidence rescaling, category-level performance auditing
- Extend the prediction side: opponent positional-defence modelling, schedule/rest effects, correlation-aware exposure
- Explain everything in plain English to a non-technical founder

YOU MUST HAVE — WITH PROOF
- You have BUILT AND SHIPPED a probabilistic simulation or pricing model in sports betting, quant trading, bookmaking or similar. On our call you will walk through one such model end-to-end: data, joint structure, validation, real-world results, and one way it failed.
- Deep Monte Carlo + joint-distribution craft (copulas, hierarchical/Bayesian structures, correlated outcomes)
- Working fluency in calibration: Brier score, reliability curves, closing-line value, de-vigging
- Small-sample discipline — you know why a 10-2 streak usually means nothing
- Strong Python/NumPy; strong written English; AEST overlap

We screen hard against overclaiming: "my model hits 65%" without sample size, odds and CLV context ends the conversation.

PROCESS: CV review ? technical call ? short PAID trial task (1–3 hrs, no code, tests judgement) ? decision within the week.

TO APPLY: send (1) your CV and (2) one paragraph describing the most similar system you have personally built, including how you validated it. Applications without the paragraph will not be reviewed. Start your reply with the word JOINT so we know you read this.

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0011
Controller Execution Time ( Jobseekers / Job )  0.0175
Total Execution Time  0.0194
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,488,488 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Data-Scientist-Monte-Carlo-Sports-Prediction-Engine-Python-Statistics-1710625
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0101 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0008   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1710625
 LIMIT 1 
0.0009   SELECT *
FROM `employers`
WHERE `employer_id` = 595307
 LIMIT 1 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1710625
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-09-24',ej.date_added) duration_daysDATEDIFF('2026-09-24',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-09-24',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1710625' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1710625 
0.0010   UPDATE employer_jobs SET hit_counts '***Aug-17-2026=763***Aug-18-2026=36***Aug-19-2026=21***Aug-20-2026=16***Aug-21-2026=14***Aug-22-2026=6***Aug-23-2026=5***Aug-24-2026=15***Aug-25-2026=7***Aug-26-2026=8***Aug-27-2026=10***Aug-28-2026=5***Aug-29-2026=6***Aug-30-2026=4***Aug-31-2026=10***Sep-01-2026=7***Sep-02-2026=10***Sep-03-2026=5***Sep-04-2026=3***Sep-05-2026=1***Sep-06-2026=2***Sep-07-2026=2***Sep-08-2026=3***Sep-09-2026=3***Sep-10-2026=1***Sep-11-2026=2***Sep-12-2026=5***Sep-13-2026=2***Sep-14-2026=4***Sep-15-2026=5***Sep-16-2026=2***Sep-17-2026=2***Sep-18-2026=1***Sep-19-2026=3***Sep-24-2026=1' WHERE job_id'1710625'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Aug-2026=925***Sep-2026=64' WHERE job_id'1710625'  
0.0007   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1710625' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1710625 
0.0027   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '595307'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)