Inspiration

We wish to launch an online betting platform for everybody and for all kinds of contests and events beyond traditional sports.

What it does

  • Website:
    • Client:
      • Account sign-up and log-in
      • Browse existing game lines
      • Functioning search bar and pagination
      • Select contest, contestant, set risk, and place bet
      • Check personal and only personal purchase history
    • Admin:
      • Create, update and remove contests, contestants, and odds
      • Toggle accepting/not accepting bets for each contest
      • Release contest results
  • Odds generator:
    • Takes in and analyzes relevant data to generate most suitable odds for professional/amateur (e)sports tournaments and other events. We've currently displayed on our webpage the odds that we generated for this year's International Mathematical Olympiad as a sample contest.

How we built it

The web application is constructed using the MEAN stack (i.e. Angular+typescript for the front-end and Express.js+Node.js+MongoDB Atlas for the back-end). I developed the entire CRUD API but, in order to save time, found and utilized an online RESTful API which leverages Javascript Web Token (JWT) for user registration and authentication.

The generator leverages data and machine learning frameworks: The original dataset consisted of the contest results for the past 10 IMO contests, the data included the rankings of each team, number of team members and overall scores on the 6 problems. Through feature engineering various additional predictors were defined using pandas and numpy. To give a measure of overall past team performance, cumulative win totals, average placement rankings were calculated, to give a measure of more recent performance multiple dynamic metrics were used that indicate recent team performance. A total of 38 features were defined in the feature engineering step, principal component analysis was performed on the data to avoid the curse of dimensional. Preprocessing was done via min-max normalization. Using keras a neural net classifier was built. The NN was trained on the past data in order to make final predictions. Hyper-parameter optimization was done using a grid search with parameter selection done based on the cross-validation score. The final cross-validation score of the optimized NN model was 99.1%.

Business objective

We are acting as both 1. a "consulting" company and 2. a gambling company:

  • We'd like owners/organizers ask us about how to set bets for their contests (e.g. local amateur esports leagues, university debating tournaments). They will send us data so that we can help calculate the best odds. The receivers of our service will then bring those odds to the attention of other people they know (i.e. spectators of their contest). Those people will then place bets and eventually the organizers will not only add a lot of excitement to their events but also be able to rewarded monetarily.
  • We also do what typical gambling companies do, which is to offer bets on major events that involve competition. However, our focus is set on a different type of them.

Challenges we ran into

  • No specialized UI/UX designer or engineer for the project
  • Interfacing with the REST sever written by another person wasn't smooth; spent a lot of time debugging small errors; eventually ended up trying three different authentication APIs
  • We at first couldn't agree on which sample contest to work with or how to collect a proper dataset for it.
  • First ever hackathon participation for both of us (unfamiliar with everything)

Accomplishments that we're proud of

  • I as the sole developer created quite a lot of functionalities for the website and they are almost completely bug-free.
  • The ML strategies that Tyler adopted help achieved very high accuracy for generating probabilities and odds.

What's next for Handicap

  • We hope to set odds for more academic competitions such as ACM-ICPC, Citadel Data Open, Putnam, Terminal Live, MLH season breakdown, etc. by collecting and parsing suitable and sizeable data.
Share this project:

Updates