How to Maths: The Food Club Edition
What is ROI? What does TER mean? Stephanie interviews Phoenix, the Food Club pro.
Food Club, as many Neopians know, is a betting game that runs daily. There are five arenas of four pirates each. Every afternoon, the pirates compete to see who can eat the most. One pirate emerges victorious in each arena. Players bet on the pirates to try and win NP. If a pirate priced at 2:1 wins and you put 1000 NP on him, for example, you win back 2 times of what you bet, in this case 2 x 1000 = 2000 NP.1 If your pirate is priced at 13:1 and he wins, then you get 13000 NP. You can also mix and match pirates from different arenas such that if all of the pirates in your bet win, then you get, for example, 2:1 x 13:1 = 26:1 = 26000 NP. If one or more of the pirates in your bet loses, then you get nothing. Generally, 2:1 pirates win more often than pirates priced at 3:1 or higher.
Placing bets in Food Club. Here, Shipwreck has odds of 2-6-7-13.
Each day, players may place a maximum of ten bets. Some people use their bets to cover a variety of possible outcomes, such that regardless of which outcome "comes true," they can get a profit. Others bet in a riskier way and go all-in on just the pirates with the best expected return each day (more on this later!). Risky strategies bust more often, but can come out equally as profitable or more profitable than safe strategies in the long run.2
Today, I have the privilege of interviewing Phoenix, a famous "shadowy genius who makes us NP" (in the words of my guildmate Janice), to try to understand a little of the math behind Food Club!
Phoenix is a longtime bettor who shares his bets on the Neoboards every day.
Phoe, how long have you been playing Food Club, and what got you into it?
Almost 9 years. What got me into it was definite arbitrage... if you play well and play for a long period of time, you can nearly double your NP. Take a look at the Lifetime ROI3 on /~Yehoodi. And it has taken me years to perfect the mathematical model that generates my bets.
Was it scary to compete with the other bettors when you started posting your bets for the first time?
Nope, not at all. It wasn't a competition at first -- it was about trying to see how much I could win for myself.
Why is it mathematically possible to make NP from Food Club?
It's because of how the game is designed, whether intentionally or not.4 As an aside, Grarrl Keno has a design flaw: a typical Keno game will choose 20 numbers out of 80 per draw. But here, they only select 10; this makes the odds of winning anything decent astronomical.
Interesting! Can you tell us a little about how your model works?
My current model uses a function fitting neural network5 trained on over 8 years' worth of data... so that, given an arena like 2-6-13-13, it'll generate a probability of each pirate winning. Once I have that, I run through all possible 3124 bets, within a given range, and select the 10 best ones.
How do you determine which bets are best?
Say we have a single arena with odds of 2-4-10-13. And my model gives a probability of 0.7-0.2-0.08-0.02 for that arena. I just multiply it through to get 1.4-0.8-0.8-0.26. Here, the 2:1 has the best expected return, so that's what I choose. Except it isn't that simple. For each arena I have a random number generator that picks its winner based on that arena's probabilities... and then I average over thousands of simulated rounds to pick the 10 best bets in terms of expected wins.
Do you put the new data for each round back into your model?
No, I just use the same data set. I don't re-train it every day. The full data set can be found on /~Thoricanian. I'm using MATLAB's function fitting neural network, although I'm sure an equivalent can be found in scikit-learn.
Each time you post your bets on the boards, you include a number like 1.33 or 2.03. What does it mean?
This is the expected return6 for today's bets. If a day like today (with similar odds) happened over and over again, this is your expected return over the long run. An average day has an expected return of around 1.91, according to my model running through 8 years' worth of data.
Okay so, just to make sure I'm understanding 'expected return' correctly. XD Basically, when you're given the odds for a new round, you pretend like these are the same opening odds for thousands of rounds. Each of the thousands of rounds has a different outcome (some will be wins and some will be losses), but if you keep repeating the same bets over and over, in the end you'll make back 1.91 times of what you put in. Do I have the right idea?
Pretty close. Firstly, if you average all my "magic numbers" over a long period of time, they'll converge to something close to 1.9. Now, when I say "1.3" it means that the odds aren't that great across the arenas. But, given a large enough collection of days with similarly bad odds, you'll end up close to 1.3 with those.
What do you do if the expected return is less than 1 on a given day?
I do what I call 104-rage. I tell my program to generate only bets that would end up with me winning 1M or more. This was introduced way back when I really needed a bet of 104:1 or more to win 1M. That number has since fallen to 70.
You post two sets of bets each day, one on /~ColdBlackWind and one on /~CrimsonWaters. What is the difference between the two? What should people consider when they are trying for a high score with your bets?
ColdBlackWind has bets ranging from 12:1 to 70:1, based on starting odds. CrimsonWaters has bets ranging from 12:1 to 184:1. When going for a high score, choose the page that best matches your account age! If you really want bets greater than 184:1, I can make super-unlimited bets too. Well, all the way up to 13^5, of course.7
You mentioned once on the boards that your 2019 bets had a 60% bust rate, and that half of your returns came from the top 34 days out of 365. How do you deal with such a high bust rate? :P Do you get emotional at all about winning millions one day and then busting several days in a row?
There's no emotion at all, because I have the one-year return of close to 2:1, and a bunch of trophies to prove it. It's better to bust here and there and pull in 100:1+ from time to time than be dabbling around with 8:1 bets.
So to you, daily wins and losses are just interesting data points? xd
They are all interesting data points. Let us assume that we come across a data point that is not interesting. The fact that it is not interesting is in and of itself interesting. Therefore, all data points are interesting.
Would you ever release the source code that generates your bets?
I'd have to port it to Python first so that anyone could use it. More than happy to collaborate with people on that!
Is there anything else you would like to say to people who are interested in Food Club?
Follow my bets. But also be prepared for up to 2 weeks in a row of losses. This can happen once every few years.
1. The base amount for each person is different; here, the 1000 NP is just an example. The max you're allowed to put into each bet is calculated based on account age, 50 + 2 for every day you have been playing Neopets. Not everyone chooses to bet their max amount as well. This is why people discuss their bets using ratios instead of the actual amount of NPs they bet.
2. Maxwell, a longtime follower of Food Club bets, compiled four years' worth of daily results from different bettors on /~Yehoodi. According to his data, Garet, who bets quite conservatively most days, does about equally as well in the long run as Phoenix, who has a much riskier style of betting.
3. ROI stands for "return on investment," and is expressed as a ratio. For example, if you place 10 bets of 1000 NP each on a given day and you win back 16000 NP, your ROI for the day is 16:10. A month's ROI could look something like 552:310, meaning you placed 310 bets of ____ NP each for that month, and you won back 552 times of the base amount you bet. If you divide 552 by 310, you get 1.78 as the ROI for that month, meaning you got back 1.78 times of the total amount you bet. Any ROI above 1 is profitable. Phoenix's 2019 ROI of 1.9 is considered very good.
4. To expand on Phoenix's comment, from what I understand, the way the pirates are priced doesn't correspond to their actual chance of winning. If a 2:1 pirate only had a 1 in 2 chance of winning, for example, and you put 1000 NP on him every time, you'd lose 1000 NP on one coin-flip, and win 2000 NP on another coin-flip. Repeat this thousands of times and you don't end up making any NP in the long run. However, in Food Club, 2:1 pirates actually win much more often than 1 in 2. The way the game is designed allows you to make NP from it.
5. A neural network is a computing system that "learns" to perform tasks from being given a set of "training" data. "Function fitting" means "training" the neural network to produce the results that you want. For example, in image recognition, if you give the neural network tons of images that are labelled as "Wocky" and "not Wocky," over time it can learn to correctly identify Wockies in other images, based on patterns from the sample images it was given to process. Phoenix has basically been feeding years of Food Club data into his mathematical model to "train" it to generate probabilities.
6. People sometimes use the term TER, or "total expected return," to refer to this idea.
7. This is because the highest odds for a single pirate in Food Club is 13:1, and there are 5 arenas.