In a previous post, I introduced the abstract idea of iterative prediction markets, but many of the comments I received offline as well as on hacker news and in the comments expressed common objections:
why not simply handle the problem with loans?
can’t we just reverse out the true probability from interest rates?
won’t this have the same distortions as the terminal market?
I’ll address those concerns in an upcoming post, but, in this post, I’d like to provide a concrete example of how they could work in practice1.
A Concrete Example
Disclaimer: this method is not without it’s own problems and distortions, but it can be a useful method for getting closer to the ground truth probability of a question. Even if markets are perfectly efficient, the method demonstrated below can cause distortions by as much as half a percent. I’ll get deeper into the potential issues in the next post.
Assumptions
Let’s start by assuming a risk-free rate of 0.1% per day2. Furthermore, let’s pretend we have a terminal market that opens at 50% and has a real underlying probability of resolving positively as 49% and will resolve in 10 days. For this example we’ll represent each day as ‘T’ followed by a number so ‘T10’ would be the end of the 10th day and the resolution of the terminal market, ‘T9’ would be the end of the 9th day and the resolution of the T9-MARKET, and so on back to ‘T0’.
The Terminal Market
Let’s take a look at the terminal market:
TERMINAL MARKET
resolves at T10
Will the following code output “True”?
If the following python prints "True" when it is run at the termination of this market, this market will resolve as YES. Otherwise, it will resolve as NO.
import random print(random.random() <= 0.49)
Given the risk-free interest rate, even though the ground truth probability for this market should be 49%, we shouldn’t expect it to move much right after it opens. While it’s great that we can easily reason about this market, clean markets like this can help us better understand techniques for getting closer to the ground truth probability for murkier markets.
Constructing Iterative Markets
For the next steps, it will be easier to follow if we work in reverse-chronological order, so we’ll start with the terminal market (the market we just described) and work backward. At closing, the market should be very close to the true underlying probability around 49%, but what about the day before? Given our risk-free rate, we might expect the market to be about a tenth of a percent higher. If we ask the penultimate market (T9-MARKET in the chart below), which resolves the day before the terminal market, to predict the exact probability from the terminal market at the termination of the T9-MARKET, we’d end up with 49.1% which wouldn’t get us anywhere useful since that would end up simply spitting back the exact probability of the terminal market at the time. However, if we ask that market to predict the nearest whole percentage value of the terminal market, that would provide the lift we need to make iterative markets work as we want them to.
Let’s take a look at the T9-MARKET:
T9-MARKET
resolves at T9
Will the following code output “True”?
If the following python prints "True" when it is run at the termination of this market, this market will resolve as YES. Otherwise, it will resolve as NO.
import random import constants import IterativeMarkets as im current_prediction = im().get_market_prediction(constants.TERMINAL_ID) print(random.random() <= round(current_prediction,2))
Because the T9-MARKET is rounded to the nearest whole percent, it will resolve as 49%, and, at time T8, it will be at 49.1% allowing the T8-MARKET to resolve as 49%.
For further clarification here is the T8-MARKET:
T8-MARKET
resolves at T8Will the following code output “True”?
If the following python prints "True" when it is run at the termination of this market, this market will resolve as YES. Otherwise, it will resolve as NO.
import random import constants import IterativeMarkets as im current_prediction = im().get_market_prediction(constants.T9_MARKET_ID) print(random.random() <= round(current_prediction,2))
Again, because the T8-MARKET is rounded to the nearest whole percent, it will resolve as 49%, and, at time T7, it will be at 49.1% allowing the T7-MARKET to resolve as 49%.
Results
We can continue tracing this all the way back to T0 which resolves as 49%. This method allows us to get a good read on the approximate probability of the terminal market on the day it opens.
The chart below shows the anticipated values at the closing of each time window (days in this example) assuming each market starts at 50%.
Conclusion
When other methods like loans are not available, iterative prediction markets can enhance our understanding of terminal market probabilities. Though not without their own distortions, their strategic application can offer more precise market insights.
I originally wanted to use manifold to demonstrate this, but, since they provide loans, it causes the markets to ignore interest rates and resolve to the correct probability quickly. Here is an example of one of the markets I created.
This could be any arbitrary unit of time, but we’ll use days to make this easier to think about.
What are the tradeoffs on making the rounding more/less fine-grained?
I'll add another issue: iterative markets can be highly manipulable, far more so than normal prediction markets.
Let's say I build up a large stake in one of the markets (e.g. T0) by making "bad" trades - buying YES at 50% for example even though I know the "fair" probability is 49%. Then just before T0 resolves, I manipulate the price of T1 up - perhaps to 60%. If I do this right, I might take a small loss on T1, but make a big gain on T0, for a large net profit.
This has been demonstrated in practice - for example, https://manifold.markets/harfe/will-white-win-in-manifold-plays-ch was a game that used iterative markets where the final market predicts the winner of the game, and there's a market for each move N that predicts the price of market N+1 (simplifying some details). And this exact type of manipulation worked profitably - even though the market design already included some attempted countermeasures.
In a normal prediction market, this sort of thing is far far less likely to work profitably. If you attempt to manipulate the price for profit, as in a pump-and-dump scheme, you need to convince someone else to buy from you, otherwise ultimately you lose when the market resolves. This is possible but much more limited than the sort of manipulation I described.
In general, whenever the resolution of a market depends on a metric which can be cheaply manipulated, that creates much more incentive for exploits like this. In most derivative prediction markets, the main/underlying market is much bigger than the derivative market, so manipulation is usually expensive and therefore not profitable. In iterative markets, all of the markets are both underlying and derivative and are about the same size, making them very exploitable.
Iterative predictions in a non-market context (e.g. Metaculus) are much less susceptible to manipulation problems, but there's also much less benefit to using iterative predictions because they don't suffer from discount rate distortions nearly as much as markets do.