LOGIN

Or, the Unexpected Virtue of Active Bidding…

Unlike a certain appendage of mine, I like to keep my intros short, so let’s get down to business. For those of you who were not with us last week, I spewed some thoughts on auction theory and expressed a desire to create a tool to simulate auctions. Seven days later, I have created such a tool. Or at least a basic, yet functional form of one…

GitHub of Code

Some Details on How the Code Works

In the program there is a list of players to bid on, there is a list of the owners, and there is also a list of what every owner values each player at. All of these values are input by the user.

How the bidding process works is like this. The bidding starts at 1. At this point the program checks to see if each of the owners value the player above the current bid price. If true for a specific owner, that owner becomes “primed” and submits a bid (the virtual equivalent to raising your hand shouting “I bid 11!”). Each owner is assigned a Bid Time by the program, chosen randomly from the uniform distribution, and the one with the smallest bid time becomes the new highest bidder. The high bid is now 2.

If the bidding goes above what an owner values a player for, that owner becomes “un-primed” and stop submitting bids. The rounds of bidding continue while at least more than one owner is “primed”, otherwise the current highest bidder wins the player for the current bid price.

A output of a quick auction where three owners are bidding on one player, whom they all value at $5 is printed below:

pauls-air-3:pyth paulsingman$ python multiaucsim.py
**********
The current bid is: 1
The highest bidder is: paul
**********
Bid times: {‘paul’: 100, ‘tortoise’: 1.258023, ‘hare’: 6.44192}
The current bid is: 2
The highest bidder is: tortoise
**********
Bid times: {‘paul’: 7.96800, ‘tortoise’: 100, ‘hare’: 4.67083}
The current bid is: 3
The highest bidder is: hare
**********
Bid times: {‘paul’: 6.48726, ‘tortoise’: 5.99945, ‘hare’: 100}
The current bid is: 4
The highest bidder is: tortoise
**********
Bid times: {‘paul’: 6.157037, ‘tortoise’: 100, ‘hare’: 3.58576}
The current bid is: 5
The highest bidder is: hare
**********
The results of the auction are: [[(‘hare’, 5)]]

That’s what it looks like. In this run the Hare won the player for, unsurprisingly, $5. No one bids above what they value a player for, and if you are the current highest bidder, you can’t bid. You should see that if an owner doesn’t submit a bid, what they are actually doing is getting assigned a bid time of 100, which will always be larger than the owners’ bid times who are submitting bids. In this run they have bids times selected at random between 1 and 10.

The program can handle bidding on more players. I can also easily add additional owners. The two biggest areas of a real auction that I don’t incorporate at the moment are budgets for owners and positions for players (and fitting those players on their winning owners teams based on those positions). There are numerous other areas I’d like to make the behavior of the agents more nuanced, but I won’t go into those in detail  here.

As always, all suggestions of ideas for future versions are welcome.

Test #1: The Importance of Active Bidding

If I had to categorize real people by their bidding behavior into two categories, I would divide them into Active Bidders and Passive Bidders. Simply put, Active Bidders are generally involved in the bidding on a larger percent of players, and they also place bids more frequently for a given player. Passive Bidders… well… don’t. Passive Bidders will observe how the bidding begins for a certain player and if it’s a player they like and the price is approaching their listed value, then and only then will they throw their hat in the ring, likely to the surprise of those involved earlier in the bidding. Passive Bidders also place more bids at the last second, right before a player is about to be “sold”.

While people are the complex, inconsistent, “teetering bulbs of dread and dream” that we are, during auctions we do generally fall into these two categories. Based on my experience, a typical 12 person auction will contain maybe 3 Active Bidders and 9 Passive Bidders. The Passives outnumber the Actives.

“Being There”

Time for a quote. During Tout weekend after the auction, I won’t needlessly name drop, but I was sitting at a table with some industry guys, one of whom is Jeff Erickson of Rotowire. (Side note: Jeff is the auctioneer of the Tout Mixed Auction, and a damn fine one at that.) We were discussing auctions and Jeff made a comment I thought was interesting. He said, “In auctions I try to be involved on almost every player because you never know when the bidding will stop, and being active allows you to be “there” when a bargain unexpectedly pops up.”

For my part, I agree with Jeff and believe his approach is the correct way to approach an auction. Allow me to expand.

Basically, auctions are overwhelming. The shipload of information to keep track of combined with the virtually unlimited possibilities of what could happen make it appealing to pursue a strategy that narrows your options.

For an auction amateur, this means targeting guys specific guys and to an extent, paying whatever the price is to land them. The amateur has one, maybe two two contingency plans, e.g. “If I miss out on Dozier, I’ll target Chase Utley or Brett Lawrie for a few bucks later.”

It shouldn’t be difficult to see why this type of strategy isn’t optimal. However, if a person truly isn’t able to process the entire mountain of information coming at him in an auction (nothing to be ashamed for the first few times), choosing a narrowing strategy that turns that mountain into a molehill could prevent him from making a huge blunder (as my backgammon app would say) and prove better.

An auction expert on the other hand, can be — to use an increasingly overused word in the corporate and entrepreneurial worlds — more nimble. If you try to freeze the room with a surprise $8 bid on Rusney Castillo, the expert won’t be fumbling through the bottom of his rankings; the expert will likely already know whether they value him above or below that, and either bid $9 or not bid $9 according. In this instance, a person’s expertise in auctions and knowledge of their bid values allowed them to act faster. What I’m asking is: How much does their quick behavior increase their odds of winning a player?

Enter the Simulator

So, let’s put this new tool of ours work, eh? To test this question, we will use the following parameters for the model.

Simulation Parameters

For this auction there will be only one player bid on, Mike Trout. There will be three agents (or owners) in the auction, Paul (myself), the Hare, and the Tortoise. All three value Mike Trout equally, at $40.

What separates our three agents is their bid times. The Hare’s bid time is a random number generated form the uniform distribution from 1 to 8. The Tortoise’s is generated from the uniform from 1 to 10. My range is in the middle, from 1 to 9. Even if you are no expert on the uniform distribution, you should be able to tell that the Hare will on average be the quickest bidder and the Tortoise the slowest. Since the number is random and re-generated at each bid point, sometimes the Tortoise will be faster than the Hare, but not always.

In the mini-simulation above the Hare ended up winning.  But the real power of simulation comes from repeating this process many, many times. How many times shall we try? 100? 1000? Still too timid for my tastes. Let’s go with 50,000 times. Instead of printing out the exact steps of each iteration, I’ll just have it output how many times each agent wins.

I’ve got the program set up to run, all that’s left is to hit… the… button… and BAM!. Results in not more than a few seconds.

pauls-air-3:pyth paulsingman$ python multiaucsim.py
Paul won the player 16647 times
The Hare won the player 18715 times
The Tortoise won the player 14638 times

From these results the Hare does win the most often. Winning percentage wise, that comes out to:

Owner Win %
Paul 33.3%
Hare 37.4%
Tort 29.3%

So, yes, the Hare does win the most, but all three win the player close to a third of the time. Is this more or less often than we should have expected?

The answer to that question is more complex than I originally thought, and since there’s already a lot to grasp in this article, I’ll save it for another time. Overall the main takeaway is the Auction Simulator is built, it works, and I’m looking forward to hearing all of your guys’ ideas on what we can include in this thing and what we can learn from it.