{"schemaVersion":"premier-league-btts-over-2-5-benchmark/1.0.0","releaseDate":"2026-07-18","title":"Premier League BTTS and over 2.5 goals: a 3,800-match benchmark","description":"Reproducible aggregate BTTS, over 2.5 goals, joint-event and scoreline counts for every completed English Premier League match from 2016/17 through 2025/26. Ten source snapshots are SHA-256 pinned; raw match rows are not redistributed.","league":{"code":"E0","name":"English Premier League","country":"England"},"evaluation":{"seasons":["2016/17","2017/18","2018/19","2019/20","2020/21","2021/22","2022/23","2023/24","2024/25","2025/26"],"matchCount":3800,"matchesPerSeason":380,"temporalCoverageStart":"2016-08-13","temporalCoverageEnd":"2026-05-24"},"definitions":{"btts":"BTTS yes means both teams scored at least one regulation-time goal (FTHG > 0 and FTAG > 0).","over25":"Over 2.5 means at least three combined regulation-time goals (FTHG + FTAG >= 3).","under25":"Under 2.5 means at most two combined regulation-time goals (FTHG + FTAG <= 2).","jointTable":"Every match belongs to exactly one of BTTS yes/over 2.5, BTTS yes/under 2.5, BTTS no/over 2.5, or BTTS no/under 2.5.","goalCounting":"Only completed regulation-time full-time goals in Football-Data FTHG and FTAG are counted; extra time and penalties are outside the dataset.","resultConsistency":"Every source FTR value is recomputed from FTHG and FTAG and must match or generation fails.","uncertainty":"Wilson score interval at 95% for each published binary proportion; descriptive only and not adjusted for match dependence or multiple comparisons.","rounding":"Published rates, means and interval bounds are rounded to 8 decimal places after aggregation from integer counts."},"headline":{"matchCount":3800,"bttsYes":2005,"bttsRate":0.52763158,"bttsWilson95":{"lower":0.51173855,"upper":0.54346879},"over25":2067,"over25Rate":0.54394737,"over25Wilson95":{"lower":0.52807504,"upper":0.55973093},"bttsYesOver25":1591,"bttsYesUnder25":414,"bttsNoOver25":476,"bttsNoUnder25":1319,"over25GivenBtts":{"numerator":1591,"denominator":2005,"rate":0.79351621,"wilson95":{"lower":0.7752451,"upper":0.81066475}},"bttsGivenOver25":{"numerator":1591,"denominator":2067,"rate":0.76971456,"wilson95":{"lower":0.75107421,"upper":0.78735427}},"meanGoalsPerMatch":2.835},"groups":{"overall":{"matchCount":3800,"bttsYes":2005,"bttsNo":1795,"bttsRate":0.52763158,"bttsWilson95":{"lower":0.51173855,"upper":0.54346879},"over25":2067,"under25":1733,"over25Rate":0.54394737,"over25Wilson95":{"lower":0.52807504,"upper":0.55973093},"bttsYesOver25":1591,"bttsYesUnder25":414,"bttsNoOver25":476,"bttsNoUnder25":1319,"bttsYesOver25Rate":0.41868421,"bttsYesOver25Wilson95":{"lower":0.40308828,"upper":0.43444439},"totalGoals":10773,"homeGoals":5910,"awayGoals":4863,"meanGoalsPerMatch":2.835,"over25GivenBtts":{"numerator":1591,"denominator":2005,"rate":0.79351621,"wilson95":{"lower":0.7752451,"upper":0.81066475}},"bttsGivenOver25":{"numerator":1591,"denominator":2067,"rate":0.76971456,"wilson95":{"lower":0.75107421,"upper":0.78735427}}},"seasons":[{"season":"2016/17","matchCount":380,"bttsYes":193,"bttsNo":187,"bttsRate":0.50789474,"bttsWilson95":{"lower":0.45780208,"upper":0.55782938},"over25":206,"under25":174,"over25Rate":0.54210526,"over25Wilson95":{"lower":0.49183994,"upper":0.59152781},"bttsYesOver25":155,"bttsYesUnder25":38,"bttsNoOver25":51,"bttsNoUnder25":136,"bttsYesOver25Rate":0.40789474,"bttsYesOver25Wilson95":{"lower":0.35964405,"upper":0.45798899},"totalGoals":1064,"homeGoals":607,"awayGoals":457,"meanGoalsPerMatch":2.8},{"season":"2017/18","matchCount":380,"bttsYes":186,"bttsNo":194,"bttsRate":0.48947368,"bttsWilson95":{"lower":0.43957018,"upper":0.53958788},"over25":194,"under25":186,"over25Rate":0.51052632,"over25Wilson95":{"lower":0.46041212,"upper":0.56042982},"bttsYesOver25":141,"bttsYesUnder25":45,"bttsNoOver25":53,"bttsNoUnder25":141,"bttsYesOver25Rate":0.37105263,"bttsYesOver25Wilson95":{"lower":0.3239981,"upper":0.42068816},"totalGoals":1018,"homeGoals":582,"awayGoals":436,"meanGoalsPerMatch":2.67894737},{"season":"2018/19","matchCount":380,"bttsYes":195,"bttsNo":185,"bttsRate":0.51315789,"bttsWilson95":{"lower":0.46302354,"upper":0.56302889},"over25":204,"under25":176,"over25Rate":0.53684211,"over25Wilson95":{"lower":0.48658818,"upper":0.58635861},"bttsYesOver25":163,"bttsYesUnder25":32,"bttsNoOver25":41,"bttsNoUnder25":144,"bttsYesOver25Rate":0.42894737,"bttsYesOver25Wilson95":{"lower":0.38014115,"upper":0.47917576},"totalGoals":1072,"homeGoals":596,"awayGoals":476,"meanGoalsPerMatch":2.82105263},{"season":"2019/20","matchCount":380,"bttsYes":194,"bttsNo":186,"bttsRate":0.51052632,"bttsWilson95":{"lower":0.46041212,"upper":0.56042982},"over25":198,"under25":182,"over25Rate":0.52105263,"over25Wilson95":{"lower":0.47086603,"upper":0.57081785},"bttsYesOver25":145,"bttsYesUnder25":49,"bttsNoOver25":53,"bttsNoUnder25":133,"bttsYesOver25Rate":0.38157895,"bttsYesOver25Wilson95":{"lower":0.33415298,"upper":0.43137521},"totalGoals":1034,"homeGoals":576,"awayGoals":458,"meanGoalsPerMatch":2.72105263},{"season":"2020/21","matchCount":380,"bttsYes":186,"bttsNo":194,"bttsRate":0.48947368,"bttsWilson95":{"lower":0.43957018,"upper":0.53958788},"over25":190,"under25":190,"over25Rate":0.5,"over25Wilson95":{"lower":0.44998018,"upper":0.55001982},"bttsYesOver25":146,"bttsYesUnder25":40,"bttsNoOver25":44,"bttsNoUnder25":150,"bttsYesOver25Rate":0.38421053,"bttsYesOver25Wilson95":{"lower":0.33669545,"upper":0.43404323},"totalGoals":1024,"homeGoals":514,"awayGoals":510,"meanGoalsPerMatch":2.69473684},{"season":"2021/22","matchCount":380,"bttsYes":190,"bttsNo":190,"bttsRate":0.5,"bttsWilson95":{"lower":0.44998018,"upper":0.55001982},"over25":205,"under25":175,"over25Rate":0.53947368,"over25Wilson95":{"lower":0.48921337,"upper":0.5889439},"bttsYesOver25":148,"bttsYesUnder25":42,"bttsNoOver25":57,"bttsNoUnder25":133,"bttsYesOver25Rate":0.38947368,"bttsYesOver25Wilson95":{"lower":0.34178486,"upper":0.43937479},"totalGoals":1071,"homeGoals":575,"awayGoals":496,"meanGoalsPerMatch":2.81842105},{"season":"2022/23","matchCount":380,"bttsYes":196,"bttsNo":184,"bttsRate":0.51578947,"bttsWilson95":{"lower":0.46563633,"upper":0.56562658},"over25":200,"under25":180,"over25Rate":0.52631579,"over25Wilson95":{"lower":0.47610123,"upper":0.57600361},"bttsYesOver25":158,"bttsYesUnder25":38,"bttsNoOver25":42,"bttsNoUnder25":142,"bttsYesOver25Rate":0.41578947,"bttsYesOver25Wilson95":{"lower":0.36731975,"upper":0.46594475},"totalGoals":1084,"homeGoals":621,"awayGoals":463,"meanGoalsPerMatch":2.85263158},{"season":"2023/24","matchCount":380,"bttsYes":234,"bttsNo":146,"bttsRate":0.61578947,"bttsWilson95":{"lower":0.56595677,"upper":0.66330455},"over25":246,"under25":134,"over25Rate":0.64736842,"over25Wilson95":{"lower":0.59807295,"upper":0.69371418},"bttsYesOver25":196,"bttsYesUnder25":38,"bttsNoOver25":50,"bttsNoUnder25":96,"bttsYesOver25Rate":0.51578947,"bttsYesOver25Wilson95":{"lower":0.46563633,"upper":0.56562658},"totalGoals":1246,"homeGoals":684,"awayGoals":562,"meanGoalsPerMatch":3.27894737},{"season":"2024/25","matchCount":380,"bttsYes":218,"bttsNo":162,"bttsRate":0.57368421,"bttsWilson95":{"lower":0.5234676,"upper":0.62242597},"over25":215,"under25":165,"over25Rate":0.56578947,"over25Wilson95":{"lower":0.51554175,"upper":0.61472036},"bttsYesOver25":173,"bttsYesUnder25":45,"bttsNoOver25":42,"bttsNoUnder25":120,"bttsYesOver25Rate":0.45526316,"bttsYesOver25Wilson95":{"lower":0.40588967,"upper":0.5055321},"totalGoals":1115,"homeGoals":575,"awayGoals":540,"meanGoalsPerMatch":2.93421053},{"season":"2025/26","matchCount":380,"bttsYes":213,"bttsNo":167,"bttsRate":0.56052632,"bttsWilson95":{"lower":0.5102649,"upper":0.60957625},"over25":209,"under25":171,"over25Rate":0.55,"over25Wilson95":{"lower":0.49972799,"upper":0.59927121},"bttsYesOver25":166,"bttsYesUnder25":47,"bttsNoOver25":43,"bttsNoUnder25":124,"bttsYesOver25Rate":0.43684211,"bttsYesOver25Wilson95":{"lower":0.38785099,"upper":0.48709738},"totalGoals":1045,"homeGoals":580,"awayGoals":465,"meanGoalsPerMatch":2.75}]},"scorelines":{"0-0":{"homeGoals":0,"awayGoals":0,"count":231,"rate":0.06078947,"wilson95":{"lower":0.05362675,"upper":0.06883931}},"0-1":{"homeGoals":0,"awayGoals":1,"count":259,"rate":0.06815789,"wilson95":{"lower":0.06057337,"upper":0.07661465}},"0-2":{"homeGoals":0,"awayGoals":2,"count":206,"rate":0.05421053,"wilson95":{"lower":0.04745091,"upper":0.06187054}},"0-3":{"homeGoals":0,"awayGoals":3,"count":107,"rate":0.02815789,"wilson95":{"lower":0.02335589,"upper":0.03391292}},"0-4":{"homeGoals":0,"awayGoals":4,"count":47,"rate":0.01236842,"wilson95":{"lower":0.00931422,"upper":0.01640753}},"0-5":{"homeGoals":0,"awayGoals":5,"count":18,"rate":0.00473684,"wilson95":{"lower":0.00299843,"upper":0.00747557}},"0-6":{"homeGoals":0,"awayGoals":6,"count":5,"rate":0.00131579,"wilson95":{"lower":0.00056215,"upper":0.00307666}},"0-7":{"homeGoals":0,"awayGoals":7,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"0-8":{"homeGoals":0,"awayGoals":8,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"0-9":{"homeGoals":0,"awayGoals":9,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"1-0":{"homeGoals":1,"awayGoals":0,"count":333,"rate":0.08763158,"wilson95":{"lower":0.07905267,"upper":0.09704338}},"1-1":{"homeGoals":1,"awayGoals":1,"count":414,"rate":0.10894737,"wilson95":{"lower":0.09943301,"upper":0.11925157}},"1-2":{"homeGoals":1,"awayGoals":2,"count":265,"rate":0.06973684,"wilson95":{"lower":0.06206556,"upper":0.07827716}},"1-3":{"homeGoals":1,"awayGoals":3,"count":114,"rate":0.03,"wilson95":{"lower":0.02503286,"upper":0.03591644}},"1-4":{"homeGoals":1,"awayGoals":4,"count":55,"rate":0.01447368,"wilson95":{"lower":0.01113704,"upper":0.01879098}},"1-5":{"homeGoals":1,"awayGoals":5,"count":17,"rate":0.00447368,"wilson95":{"lower":0.00279509,"upper":0.00715313}},"1-6":{"homeGoals":1,"awayGoals":6,"count":4,"rate":0.00105263,"wilson95":{"lower":0.00040942,"upper":0.0027036}},"1-7":{"homeGoals":1,"awayGoals":7,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"2-0":{"homeGoals":2,"awayGoals":0,"count":290,"rate":0.07631579,"wilson95":{"lower":0.06829548,"upper":0.08519185}},"2-1":{"homeGoals":2,"awayGoals":1,"count":315,"rate":0.08289474,"wilson95":{"lower":0.07454371,"upper":0.09208822}},"2-2":{"homeGoals":2,"awayGoals":2,"count":202,"rate":0.05315789,"wilson95":{"lower":0.04646538,"upper":0.06075293}},"2-3":{"homeGoals":2,"awayGoals":3,"count":78,"rate":0.02052632,"wilson95":{"lower":0.01647861,"upper":0.02554245}},"2-4":{"homeGoals":2,"awayGoals":4,"count":21,"rate":0.00552632,"wilson95":{"lower":0.00361747,"upper":0.00843389}},"2-5":{"homeGoals":2,"awayGoals":5,"count":8,"rate":0.00210526,"wilson95":{"lower":0.00106716,"upper":0.004149}},"2-6":{"homeGoals":2,"awayGoals":6,"count":2,"rate":0.00052632,"wilson95":{"lower":0.00014435,"upper":0.00191711}},"3-0":{"homeGoals":3,"awayGoals":0,"count":168,"rate":0.04421053,"wilson95":{"lower":0.0381221,"upper":0.05121954}},"3-1":{"homeGoals":3,"awayGoals":1,"count":191,"rate":0.05026316,"wilson95":{"lower":0.04375924,"upper":0.05767544}},"3-2":{"homeGoals":3,"awayGoals":2,"count":89,"rate":0.02342105,"wilson95":{"lower":0.0190722,"upper":0.02873249}},"3-3":{"homeGoals":3,"awayGoals":3,"count":32,"rate":0.00842105,"wilson95":{"lower":0.00597145,"upper":0.01186354}},"3-4":{"homeGoals":3,"awayGoals":4,"count":9,"rate":0.00236842,"wilson95":{"lower":0.00124655,"upper":0.00449539}},"3-6":{"homeGoals":3,"awayGoals":6,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"4-0":{"homeGoals":4,"awayGoals":0,"count":74,"rate":0.01947368,"wilson95":{"lower":0.01554096,"upper":0.02437697}},"4-1":{"homeGoals":4,"awayGoals":1,"count":71,"rate":0.01868421,"wilson95":{"lower":0.01483985,"upper":0.02350073}},"4-2":{"homeGoals":4,"awayGoals":2,"count":37,"rate":0.00973684,"wilson95":{"lower":0.00707244,"upper":0.01339147}},"4-3":{"homeGoals":4,"awayGoals":3,"count":23,"rate":0.00605263,"wilson95":{"lower":0.00403664,"upper":0.00906628}},"4-4":{"homeGoals":4,"awayGoals":4,"count":4,"rate":0.00105263,"wilson95":{"lower":0.00040942,"upper":0.0027036}},"4-5":{"homeGoals":4,"awayGoals":5,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"5-0":{"homeGoals":5,"awayGoals":0,"count":42,"rate":0.01105263,"wilson95":{"lower":0.00818749,"upper":0.01490534}},"5-1":{"homeGoals":5,"awayGoals":1,"count":20,"rate":0.00526316,"wilson95":{"lower":0.00340973,"upper":0.00811584}},"5-2":{"homeGoals":5,"awayGoals":2,"count":11,"rate":0.00289474,"wilson95":{"lower":0.00161717,"upper":0.00517634}},"5-3":{"homeGoals":5,"awayGoals":3,"count":4,"rate":0.00105263,"wilson95":{"lower":0.00040942,"upper":0.0027036}},"5-4":{"homeGoals":5,"awayGoals":4,"count":2,"rate":0.00052632,"wilson95":{"lower":0.00014435,"upper":0.00191711}},"6-0":{"homeGoals":6,"awayGoals":0,"count":5,"rate":0.00131579,"wilson95":{"lower":0.00056215,"upper":0.00307666}},"6-1":{"homeGoals":6,"awayGoals":1,"count":7,"rate":0.00184211,"wilson95":{"lower":0.00089261,"upper":0.00379777}},"6-2":{"homeGoals":6,"awayGoals":2,"count":2,"rate":0.00052632,"wilson95":{"lower":0.00014435,"upper":0.00191711}},"6-3":{"homeGoals":6,"awayGoals":3,"count":3,"rate":0.00078947,"wilson95":{"lower":0.00026853,"upper":0.00231871}},"7-0":{"homeGoals":7,"awayGoals":0,"count":4,"rate":0.00105263,"wilson95":{"lower":0.00040942,"upper":0.0027036}},"7-2":{"homeGoals":7,"awayGoals":2,"count":2,"rate":0.00052632,"wilson95":{"lower":0.00014435,"upper":0.00191711}},"8-0":{"homeGoals":8,"awayGoals":0,"count":1,"rate":0.00026316,"wilson95":{"lower":0.00004646,"upper":0.00148922}},"9-0":{"homeGoals":9,"awayGoals":0,"count":2,"rate":0.00052632,"wilson95":{"lower":0.00014435,"upper":0.00191711}}},"source":{"publisher":"Football-Data.co.uk","landingPage":"https://www.football-data.co.uk/data.php","notes":"https://www.football-data.co.uk/notes.txt","snapshotDate":"2026-07-14","rawRowsRedistributed":false,"files":[{"season":"2016/17","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/1617/E0.csv","sha256":"9625a7652b5f98fbd3e2e4d378c851fc246693f3343e34a72428d5b6e864d3e0","completedMatchRows":380},{"season":"2017/18","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/1718/E0.csv","sha256":"4f3389365ef3f7ac966764ed8ba67cf3b79f5aebed18dd224099c4b2c98bc67b","completedMatchRows":380},{"season":"2018/19","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/1819/E0.csv","sha256":"7c096b3c2ecd54c6993d22eeea73450c2bde11e3457238b226b8f43c62dfc35e","completedMatchRows":380},{"season":"2019/20","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/1920/E0.csv","sha256":"100037618b94f94057400bb02bf6bac4ef74ddaa58cde4b38370839c39caee61","completedMatchRows":380},{"season":"2020/21","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2021/E0.csv","sha256":"5afe63f69401457b8354eaacee24f9a3e520b3c3af6329564a9783e20d789c62","completedMatchRows":380},{"season":"2021/22","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2122/E0.csv","sha256":"335afcbabeb2939fa10ab39ba3e8215072d0b577cb8d0705c1e44c56e934e703","completedMatchRows":380},{"season":"2022/23","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2223/E0.csv","sha256":"8442792d3b614c94ea3cf381bd2736805889cc1713169035368fff19c3d02380","completedMatchRows":380},{"season":"2023/24","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2324/E0.csv","sha256":"b2e057b0ed959f198b0f63d2391c01239f3608e6de5db68edab3f88e04d07ff3","completedMatchRows":380},{"season":"2024/25","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2425/E0.csv","sha256":"d0c8ce4a96d886cf60cf101f570f4a3893844226f91c7bd769eb568c49edbfa4","completedMatchRows":380},{"season":"2025/26","role":"analysis","url":"https://www.football-data.co.uk/mmz4281/2526/E0.csv","sha256":"3e3a8352f9ada6789c508d6ca184424421fed56a30400904a4a327c583407e62","completedMatchRows":380}]},"validation":{"status":"passed","sourceSha256":"10 of 10 exact matches","completedMatches":"380 in every season; 3,800 overall","resultGoalConsistency":"3,800 of 3,800 FTR values matched FTHG/FTAG","frozenCountChecks":"overall and all 10 season count vectors matched","identityChecks":["BTTS yes = BTTS yes/over 2.5 + BTTS yes/under 2.5","BTTS no = BTTS no/over 2.5 + BTTS no/under 2.5","Over 2.5 = BTTS yes/over 2.5 + BTTS no/over 2.5","Under 2.5 = BTTS yes/under 2.5 + BTTS no/under 2.5","BTTS yes/under 2.5 = 1-1 scoreline count = 414"],"upstreamSourceRegistry":{"path":"/research/football-1x2-scoring-benchmark/empirical-1.0.0-manifest.json","sha256":"801f8c6c23e30f945dcba38e4c256fd4e9f3652f7e2ea965e4788f0e7cf9014a","status":"exact match after normalising source role to analysis"}},"rights":{"aggregateLicense":"https://creativecommons.org/licenses/by/4.0/","rawRowsRedistributed":false},"limitations":["This is a single-league descriptive benchmark, not a universal football scoring rate.","The categories describe historical outcomes and are not predictions, betting advice, evidence of profitability or causal estimates.","Wilson intervals describe binomial sampling uncertainty only and do not establish match independence, future stability or significance across the displayed comparisons.","Season differences can reflect teams, tactics, schedules, rules, attendance conditions and chance; the aggregate data do not identify causes.","Football-Data.co.uk makes the source CSVs publicly downloadable, but this release does not assert a redistribution licence for raw match rows and publishes aggregates only."]}