General formula summary — data includes…

Reference definitions used in the home run model.

HR Formula Table

CareerR

(CareerHR + 150 × LgHRRate) / (CareerPA + 150)

Y1R

(HR_365 + 80 × LgHRRate) / (PA_365 + 80)

L10R

(HR_10 + 50 × LgHRRate) / (PA_10 + 50)

SplitR

(HR_vsHand + 100 × LgHRRate) / (PA_vsHand + 100)

TimeR

(HR_daynight + 100 × LgHRRate) / (PA_daynight + 100)

BvPR

(HR_vsSP + 150 × LgHRRate) / (PA_vsSP + 150)

HitterBaseRaw

0.18 × (CareerR) + 0.42 × (Y1R) + 0.10 × (L10R) + 0.22 × (SplitR) + 0.05 × (TimeR) + 0.03 × (BvPR)

FBIndex

(HitterFBpct / LeagueFBpct) ^ 0.4

BarrelIndex

(HitterBarrelPct / LeagueBarrelPct) ^ 0.7

HitterSkill

HitterBaseRaw × FBIndex × BarrelIndex

StarterSplitHRFactor

(StarterHRAllowedRate_split / LeagueHRAllowedRate) ^ 0.5

PitcherFBFactor

(PitcherFBAllowedPct / LeagueFBAllowedPct) ^ 0.30

BullpenFactor

(BullpenHRAllowedRate / LeagueHRAllowedRate) ^ 0.25

PitchingFactor

(StarterSplitHRFactor ^ 0.7) × (PitcherFBFactor ^ 0.3) × (BullpenFactor ^ 0.2)

WindFactor

1 + (0.012 × WindOutMPH) − (0.010 × WindInMPH)

TempFactor

1 + 0.003 × (TempF − 70)

HumidityFactor

1 + 0.001 × (HumidityPct − 50)

GameEnv

ParkFactor × WindFactor × TempFactor × HumidityFactor × RoofFactor

AdjHRRate_PA

HitterSkill × PitchingFactor × GameEnv × ConfirmedLineupFactor

HRProb_Game

1 − (1 − AdjHRRate_PA) ^ ExpectedPA

NBA — games

Games are read from the ESPN scoreboard API one Eastern calendar day at a time, then stored in nba_game. Automatic update: on the first normal page load on or after 4:00 AM Central each calendar day, this page runs one ESPN sync (up to 120 days per run). If no one visits until later, that sync runs then instead. For a pull at exactly 4:00 AM CT regardless of traffic, schedule HTTP access to this URL (e.g. cron + curl). Backfill for 2025-26 starts at 2025-10-20 Eastern through 2026-06-30. After you close that season, the live table is cleared and sync resumes from 2026-10-01 for 2026-27. Use ?since=YYYY-MM-DD to override the empty-table anchor. Manual sync uses at most 45 days per run (?days=1–120). Archived 2025-26 rows appear on games-25-26.php (after the July rollover; games-2026.php redirects there).

NBA index · 2025-26 archive · 300 before 4

Routine refreshes happen once per Central day after 4:00 AM when someone loads this page. Use Manual sync now only for backfill or if you need an immediate pull (walks up to days Eastern dates per run). Team #1 and Team #2 limit the table to the current season in the live table (same season_label as the newest stored game). With one team chosen, you see every game that team played (home or away). With two different teams, you see only head-to-head games between them. Column headers sort the full filtered list; Q1Full and Total use the sum of away + home values in that column (largest first when you first sort that column). Use Load more for the next 100 rows. A caret (^) after Total means the game had overtime (more than four periods in stored linescores). NEXT uses the full live nba_game table first (ignores Team #1/#2 filters), then the ESPN scoreboard for up to 45 future Eastern days for matchups still missing a row — same schedule JSON as sync, not the news feed (stories only, no slate). Eligible: later calendar day than today (US Eastern), or today if the game is not completed. - if neither source has a qualifying game. Linescores require quarter_scores_json (run mysql_migration_nba_game_archive.sql ALTERs if needed).