Negotiation Assistant Technical Details
When a seller has something that a buyer is interested in, both parties must agree to a price. When supply exceeds demand and prices are low, stores typically take a simple approach to this: you either accept their price or there's no deal. This works fine when there are many sellers competing to sell the same item. But for rarer items, or even just more expensive ones (cars, houses, etc.), there's often an element of negotiation involved.
In a negotiation like this, you never want to truthfully provide your "best price", since the other person will then try to get you to agree to an even better one. Hyperbole, falsehoods, and nitpicking tend to be the way to go. In addition to the downsides of normalizing dishonesty, this can be very stressful for people who aren't used to adversarial negotiation. Just look at the Wikipedia page on negotiation strategies to get an idea of how complicated this can get when one is trying to play optimally.
In theory, the optimal solution is to choose the price that maximizes total utility across both players. But in the real world, we have no good way to determine a human's utility function.
People usually handle this via some form of sequential bargaining. This incentivizes dishonesty, emotional manipulation, artificial self-restrictions, and other undesirable behavior. It rewards people who have high charisma, have more knowledge of psychology and game theory, and/or are good at manipulating other people. It punishes those who are conflict-averse, empathetic, and/or have poor social skills.
Is there a better way? Yes! Some types of negotiations can be strategyproof; designed such that the optimal strategy is for each player to be truthful about their best price. For example in a Vickrey auction, there's no incentive to lie or bid less than your maximum; doing so would only put you at a disadvantage.
Unfortunately, in the bargaining game with one seller and one buyer, the only strategyproof solutions are ones like "pick a player at random and give them complete control over the price". This is an obviously terrible solution, since it has infinitely negative expected utility for both players. Whichever player is given dictatorial power will want to choose a price that's arbitrarily in their favor. Due to the diminishing marginal utility of money, this will cause the loser to lose more utility than the winner will gain.
So if there's no solution that will make a rational agent avoid lying, we instead want to come up with a solution that minimizes the chance that a real human will lie. Since real humans are not rational agents, this is a very different problem, and there may exist a good solution.
This negotiation assistant attempts to satisfy several criteria:
- Lower the relevance of manipulation/persuasion tactics. It does this by removing most of the communication that would normally be involved in a negotiation and limiting it to a one-time sharing of numbers. The participants will still want to share relevant information with each other, like past sale prices of similar items, but this is unavoidable, since there's no way around the fact that updating the other player's beliefs about a fair price in your direction will be advantageous. This tool just tries to take out all the non-informative communication, by removing the pressure to give the other person a number they want to hear.
- Discourage lying about what a fair price would be. We don't want a more knowledgeable buyer taking advantage of a seller who doesn't know the real value of their item, or vice versa. To achieve this, the "fair market value" field is shown to the other party. Inputting a grossly unfair price runs the risk of them noticing you were trying to rip them off, and levying whatever social penalties are the norm in that community for that behavior. (Of course this tool can't prevent lying abut other things, such as the quality of the item in question. Do your due diligence.)
- Discourage lying about their "best price". If the seller's lowest sale price is higher than the buyer's highest offer, no deal with occur and both people will be worse off. This encourages them to both report their true valuation, since doing so ensures that the deal will only fall through if there is no possible deal that both participants would prefer.
- Allow players to keep their best prices secret. In order to not be at a disadvantage in future negotiations, people often want to keep their true valuation of an item private. This tool accomplishes this by partially randomizing the final value, preventing the other player's number from being reverse-engineered. And if both parties are in agreement as to what a fair price would be, that's used instead, and the "best price" never comes into the picture.
The way we do this is by letting both people input their information independently, and having the server return a final price based on the input information. This allows both parties to safely enter their true best guess at a fair market value without the first-mover advantage that this usually entails, along with their true best price, without the last mover-advantage that that usually entails
If the seller's lowest price is higher than the buyer's highest price, no deal can be made. If the seller's lowest price equals the buyer's highest price, then a deal is made at that number. If the seller's fair price equals the buyer's fair price, and that price is within the valid interval, a deal is made at that number. If none of those are true, the server creates a probability distribution that's bounded by the "high" and "low" prices, which will be sampled from in order to get the final price. The specific distribution tries to satisfy the following constraints:
- The function assigns nonzero probability to all numbers in the interval, and has only a single peak.
- If the two fair prices are roughly "in agreement", meaning that they're close to each other relative to their magnitude
This breaks the symmetry between buyer and seller, since fair prices at the same distance from each other will have a tighter distribution near the top of the range than at the bottom. But I don't think this advantages either party, and it means that the tightness of the distribution is based on the proportional difference between the fair prices, which is obviously the correct way to do things. , probability concentrates around the midpoint of the fair prices. The more in agreement they are, the more strongly it concentrates.Notably, we don't limit the final price to being between the two fair prices, because this means that if one party provides a fair price way outside of the interval in their favor, the other party who provided a more "reasonable" fair price is at a disadvantage. We don't want to provide an easy way for players to game the system by inputting an unfair "fair price", so if both players don't agree on a fair price, we significantly downweight the relevance of the fair prices and use the more reliable indicators of the prices they're actually willing to pay. Ignoring social repercussions for dishonesty, this means that the optimal strategy for choosing a fair price is to try to guess the other party's fair price and pick one that's close to it but slightly in your favor. This should hopefully lead both players towards the actual fair price as focal point. Adding in the fact that they both get to see each other's fair prices afterwards means there will be punishment for having input an unfair price, which should further reinforce the true fair price as the optimal entry. - If the fair prices are not in agreement, probability concentrates around the midpoint of the low and high prices.
- It doesn't matter which fair price is which. Swapping the buyer's fair price for the seller's price won't change the distribution. There's no particular reason why this needs to be true, it's just nice and elegant.
Ideally we'd reward people for inputting a fair price that's further from their end of the interval, since that's more likely to be honest. But instituting such a reward means that players are incentivized to lie in that direction, and is therefore self-defeating. What we could do is try to make it such that a player moving their fair price away from their end of the interval hurts them less than it would have helped them to move it towards their end, but I think this is impossible given the constraints that the game must be zero-sum and the algorithm must treat both players equivalently. Not sure about this one though, and maybe there's a better way to do this. - If the fair prices are not in agreement but are both to one side of the range, we assume they're meaningless and skew back towards the midpoint of the center of the low and high prices.
- It's scale-invariant, so neither party is advantaged by choosing a different currency.
There are obviously an infinite number of probability distributions that satisfy these constraints, so the exact choice was rather arbitrary. Let a and b be the fair prices (doesn't matter which is which), l be the seller's lowest price, and h be the buyer's highest price. The distribution is then given by this construction, and you can see the exact code here.
You can explore the exact probability density function for a set of given input prices here:
(For simplicity, inputs are limited to integers in the range 1 - 1,000,000,000.)
This system is not completely immune to gaming; as mentioned above, that's impossible. The buyer can theoretically gain an advantage by guessing what the seller's best price will be and making their own best price only slightly higher than that. But the amount of money they can gained by doing this is pretty small, and if they guess wrong the whole deal could fall through unnecessarily, guaranteeing that no sale will ever be made.
There are also some potential meta-exploits:
- One person can find out the other's email address and fraudulently input their prices for them. This will be caught by the fact that the server received two copies of that party's data, and it will invalidate the negotiation and send them both a warning. If the attacker somehow manages to prevent the server from receiving the true submission, this can be caught by the victim noticing that the input prices confirmed in the email they received are not the same prices they actually input. (This would still be a bad exploit even without these safeguards, because the attacker could guess wrong and end up inputting a best price that's worse than the other party would actually accept, and they'd notice immediately.)
- A party receiving a final value they don't like can claim they mistyped their email address and didn't receive the results, and try to argue for a redo.
If you have concerns about this system or think you can improve on it, I'd love to hear about it. Various methods to contact me can be found on the homepage, or simply leave a comment below. I offer a competitive reward of $2.57 for any issues found in this system.
With thanks to Ryan Sears for helping me with some of the economics concepts, and to Jonathan King for coming up with the exact probability density function.