/soccer-predictor

A JS library that predicts soccer match outcomes using basic mathematics

Primary LanguageJavaScript

Soccer Predictor

Latest npm version Build Status Dependency Status devDependency Status Test Coverage

A JS library that predicts soccer match outcomes using basic mathematics.

Installation

Use yarn or npm to install.

yarn add soccer-predictor           # yarn
npm install soccer-predictor --save # npm

Install locally

git clone https://github.com/CookPete/soccer-predictor.git
cd soccer-predictor
yarn # or npm install
npm run build

Testing locally

npm test # Run tests

Usage

import { analyseResults, calculateProbabilities } from 'soccer-predictor'

// Some basic example data
const results = [
  { homeTeam: 'Team A', awayTeam: 'Team B', homeGoals: 1, awayGoals: 0 },
  { homeTeam: 'Team B', awayTeam: 'Team C', homeGoals: 2, awayGoals: 1 },
  { homeTeam: 'Team C', awayTeam: 'Team A', homeGoals: 1, awayGoals: 3 }
]

// Function to map match data to soccer-predictor data
function getMatchDetails (match) {
  return {
    homeTeamName: match.homeTeam,
    awayTeamName: match.awayTeam,
    homeGoals: match.homeGoals,
    awayGoals: match.awayGoals
  }
}

// Parse results into an array of teams with calculated stats
const teams = analyseResults(results, getMatchDetails)

// Use calculateProbabilities to calculate the chance of
// various outcomes of a match between two teams
const probabilities = calculateProbabilities(teams[0], teams[1])

console.log(probabilities.result) // Probability of a home win, away win or draw
// {
//   home: 0.657541673613264,
//   draw: 0.252533180170396,
//   away: 0.089924594462736
// }

console.log(probabilities.scores[1][0]) // Probability of a 1-0 result
// 0.2300324502673927

console.log(probabilities.over['2.5']) // Probability of over 2.5 goals
// 0.2895346409101279

console.log(probabilities.btts.yes) // Probability of both teams to score
// 0.2429353553660894

For more examples, see examples.

FAQ

How does it work?

There are plenty of articles available that go into depth about basic poisson prediction. Essentially the library parses a series of match results and provides functions to return a rough percentage likelyhood of various outcomes of a match between two teams.

Further reading:

Isn’t it called football?

Yes, but football-predictor seems too ambigious. Everyone knows what soccer is.