Towards an Intelligent Bidding Agent in QuiBids ... - Brown University
Towards an Intelligent Bidding Agent in QuiBids ... - Brown University
Towards an Intelligent Bidding Agent in QuiBids ... - Brown University
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Towards</strong> <strong>an</strong> <strong>Intelligent</strong> <strong>Bidd<strong>in</strong>g</strong> <strong>Agent</strong> <strong>in</strong> <strong>QuiBids</strong> Penny Auctions<br />
David Storch ∗<br />
dstorch@cs.brown.edu<br />
<strong>Brown</strong> <strong>University</strong> Department of Computer Science<br />
May 2, 2013<br />
Abstract<br />
Empirical data shows that penny auctions on <strong>QuiBids</strong><br />
are profitable for the auctioneer at the expense of the<br />
bidders. We seek to determ<strong>in</strong>e whether it is possible<br />
to design a bidd<strong>in</strong>g algorithm which outperforms actual<br />
<strong>QuiBids</strong> users, capable of consistently mak<strong>in</strong>g a<br />
profit <strong>in</strong> <strong>QuiBids</strong> auctions over time. The ideal bidd<strong>in</strong>g<br />
strategy would w<strong>in</strong> the item while m<strong>in</strong>imiz<strong>in</strong>g<br />
the total number of bids placed over the course of the<br />
auction—that is, it should only bid when the auction<br />
is on the verge of end<strong>in</strong>g. We use data scraped from<br />
<strong>QuiBids</strong> <strong>in</strong> order to tra<strong>in</strong> a hierarchical supervised<br />
learn<strong>in</strong>g algorithm capable of predict<strong>in</strong>g the end of<br />
novel <strong>QuiBids</strong> auctions. The results show that we c<strong>an</strong><br />
predict the end of the auction <strong>in</strong> most cases with<strong>in</strong> a<br />
resolution of a few hundred bids.<br />
1 Introduction<br />
A penny auction is a form of ascend<strong>in</strong>g auction <strong>in</strong><br />
which each bidder must pay a fixed fee for each bid it<br />
places. The w<strong>in</strong>ner must also pay its bid <strong>in</strong> order to<br />
acquire the good up for auction, although the bid fees<br />
are often orders of magnitude larger th<strong>an</strong> the good<br />
price. Furthermore, each bid causes the good price<br />
to <strong>in</strong>crease by a small, fixed <strong>in</strong>crement, usually one<br />
cent. Penny auctions are all-pay auctions—the bid<br />
fees must be paid by both w<strong>in</strong>ners <strong>an</strong>d losers—<strong>an</strong>d<br />
hence c<strong>an</strong> be immensely profitable for the auctioneer<br />
(Krishna <strong>an</strong>d Morg<strong>an</strong>, 1997 [6]). Profitability for the<br />
auctioneer is the consequence of penny auction bid-<br />
∗ I would like to th<strong>an</strong>k my advisor, Amy Greenwald, <strong>an</strong>d<br />
my collaborator, Eric Sodomka, for m<strong>an</strong>y hours of helpful discussion.<br />
I also credit Eric Sodomka for his contributions to<br />
the section def<strong>in</strong><strong>in</strong>g penny auctions. Th<strong>an</strong>ks also to Jeff <strong>an</strong>d<br />
Eric Stix for their help with the <strong>in</strong>itial stages of this project.<br />
F<strong>in</strong>ally, I would like to th<strong>an</strong>k my parents for their support <strong>in</strong><br />
all corners of life.<br />
ders dramatically overbidd<strong>in</strong>g <strong>in</strong> aggregate (Augenblick,<br />
2012 [1], W<strong>an</strong>g <strong>an</strong>d Xu, 2012 [10], H<strong>in</strong>nosaar,<br />
2010 [5]).<br />
The penny auction website <strong>QuiBids</strong> 1 advertises the<br />
possibility for outrageous sav<strong>in</strong>gs on retail items. It is<br />
certa<strong>in</strong>ly the case that some auctions result <strong>in</strong> items<br />
be<strong>in</strong>g sold to <strong>QuiBids</strong> users far below their actual<br />
retail value. But is it really possible to consistently<br />
make a profit by participat<strong>in</strong>g <strong>in</strong> onl<strong>in</strong>e penny auctions?<br />
Or is it more accurate to categorize penny<br />
auctions as a form of gambl<strong>in</strong>g, <strong>in</strong> which the auction<br />
house will <strong>in</strong>evitably come out ahead over time?<br />
Our past work uses empirical data scraped from<br />
<strong>QuiBids</strong> to demonstrate that the auctioneer achieves<br />
profit marg<strong>in</strong>s on the order of 30%, at the expense of<br />
most bidders (Stix et al., 2013 [8]). The vast majority<br />
of bidders take at least a small loss, <strong>an</strong>d very few end<br />
up profit<strong>in</strong>g. The implication is that it is difficult<br />
to make a profit <strong>in</strong> <strong>QuiBids</strong> auctions with a naive<br />
strategy.<br />
We <strong>in</strong>vestigate whether a mach<strong>in</strong>e learn<strong>in</strong>g-based<br />
bidd<strong>in</strong>g agent is capable of reliably turn<strong>in</strong>g a profit <strong>in</strong><br />
<strong>QuiBids</strong> auctions. At the very least, <strong>QuiBids</strong>’ advertis<strong>in</strong>g<br />
campaign is mislead<strong>in</strong>g <strong>in</strong> the sense that naive<br />
bidd<strong>in</strong>g behavior is unlikely to lead to large sav<strong>in</strong>gs<br />
on retail items. We wish to prove, however, that a<br />
more sophisticated agent is <strong>in</strong> theory capable of atta<strong>in</strong><strong>in</strong>g<br />
the advertised sav<strong>in</strong>gs.<br />
2 Def<strong>in</strong><strong>in</strong>g Penny Auctions<br />
2.1 Auction Model<br />
At <strong>an</strong>y po<strong>in</strong>t <strong>in</strong> time, a penny auction is characterized<br />
by three state variables: the current highest bid p,<br />
the current highest bidder w, <strong>an</strong>d the time rema<strong>in</strong><strong>in</strong>g<br />
on the auction clock t. The auction beg<strong>in</strong>s with some<br />
1 www.quibids.com<br />
1
<strong>in</strong>itial bid price p := p <strong>an</strong>d <strong>an</strong> <strong>in</strong>itial clock time of t :=<br />
t. The high bidder is <strong>in</strong>itially null (w := ∅). The clock<br />
time t beg<strong>in</strong>s decreas<strong>in</strong>g, <strong>an</strong>d while t > 0, <strong>an</strong>y bidder<br />
b may place a bid at some fixed <strong>in</strong>cremental amount<br />
δ above the current highest bid. In order to place<br />
its bid, however, bidder b must pay the auctioneer <strong>an</strong><br />
immediate bid fee φ. The highest bidder is then set<br />
to w := b, <strong>an</strong>d the new bid price becomes p := p + δ.<br />
If the time rema<strong>in</strong><strong>in</strong>g on the clock when the bid is<br />
placed is lower th<strong>an</strong> the reset time t reset , then the<br />
clock is set to t := t reset . Equivalently, when a bid<br />
is placed, the clock is set to t := max(t, t reset ) <strong>in</strong><br />
order to ensure that other bidders have at least t reset<br />
to place <strong>an</strong> additional bid. The auction ends when<br />
t = 0, at which po<strong>in</strong>t the current highest bidder w<br />
w<strong>in</strong>s the item <strong>an</strong>d pays the current bid price p (<strong>in</strong><br />
addition to <strong>an</strong>y bid fees paid along the way). Note<br />
that both the w<strong>in</strong>n<strong>in</strong>g bidder <strong>an</strong>d the los<strong>in</strong>g bidders<br />
have to pay the bid fee for every bid they place.<br />
2.2 <strong>QuiBids</strong>’ Rules<br />
<strong>QuiBids</strong> acts as the auctioneer for multiple penny<br />
auctions that happen both simult<strong>an</strong>eously <strong>an</strong>d sequentially<br />
across the day. For each of its auctions,<br />
<strong>QuiBids</strong> follows with the above model where p = $0,<br />
φ = $0.60, <strong>an</strong>d δ = $0.01. The reset time t reset is a<br />
function with r<strong>an</strong>ge {20, 15, 10} seconds whose output<br />
decreases as the auction progresses. The start<strong>in</strong>g<br />
clock time t varies depend<strong>in</strong>g on the auction, but is<br />
on the order of hours.<br />
<strong>QuiBids</strong> adds some vari<strong>an</strong>ts to the st<strong>an</strong>dard penny<br />
auction, <strong>in</strong>clud<strong>in</strong>g Buy-Now, voucher bids, <strong>an</strong>d the<br />
BidOMatic. We describe these these additional auction<br />
rules below for completeness, but will not <strong>an</strong>alyze<br />
them <strong>in</strong> greater detail <strong>in</strong> this work (see (E. Stix<br />
et al., 2013 [8]) for a more thorough discussion). The<br />
Buy-Now feature allows <strong>an</strong>y bidder who has lost <strong>an</strong><br />
auction to buy a duplicate version of that good at<br />
a fixed price m. If a bidder uses Buy-Now, <strong>an</strong>y bid<br />
fees the bidder <strong>in</strong>curred <strong>in</strong> the auction are subtracted<br />
from m. The Buy-Now price is usually marked up<br />
from the actual retail value of the good, with <strong>an</strong> average<br />
markup of approximately 21% (E. Stix et al.,<br />
2013 [8]).<br />
Voucher bids are a special type of good auctioned<br />
<strong>in</strong> packs by <strong>QuiBids</strong>. When a bidder w<strong>in</strong>s a pack of N<br />
voucher bids, it is able to place N subsequent bids <strong>in</strong><br />
future auctions for a bid fee of $0 <strong>in</strong>stead of the usual<br />
fee φ. The Buy-Now price for a pack of N voucher<br />
bids is always m = φN. Voucher bids are identical to<br />
st<strong>an</strong>dard bids with one exception: whereas each st<strong>an</strong>dard<br />
bid reduces the Buy-Now price by φ, voucher<br />
bids c<strong>an</strong>not be used to reduce the Buy-Now price. If<br />
a bidder has won a voucher bid pack, it c<strong>an</strong> choose<br />
at <strong>an</strong>y time whether to use these voucher bids or to<br />
use st<strong>an</strong>dard bids <strong>in</strong> subsequent auctions.<br />
The BidOMatic tool allows a bidder to specify a<br />
number of bids between 3 <strong>an</strong>d 25 that will be automatically<br />
submitted on the bidder’s behalf, start<strong>in</strong>g<br />
at a particular price p. The BidOMatic will submit<br />
each bid at a r<strong>an</strong>dom time between the reset time<br />
t reset <strong>an</strong>d zero seconds. Whether or not a bid is<br />
placed with the BidOMatic is public <strong>in</strong>formation.<br />
3 Data<br />
The dataset used <strong>in</strong> this paper consists of the complete<br />
bid histories for over 6,000 <strong>QuiBids</strong> auctions. 2<br />
The auctions took place between February 21st, 2013<br />
<strong>an</strong>d March 19th, 2013. For each bid <strong>in</strong> each of these<br />
auctions we record the follow<strong>in</strong>g <strong>in</strong>formation:<br />
1. Auction ID: a unique auction identifier assigned<br />
by <strong>QuiBids</strong>.<br />
2. Buy-Now Price: <strong>QuiBids</strong>’ listed price m for the<br />
good be<strong>in</strong>g auctioned.<br />
3. Item Name: the name of the good be<strong>in</strong>g auctioned.<br />
4. Highest Bid: the new highest bid price p of the<br />
good after this bid is placed.<br />
5. Bidder: a unique identifier for the user who<br />
placed the bid.<br />
6. Bid Type: a flag which is 1 if the bid was placed<br />
by the BidOMatic, or 0 if the bid was a s<strong>in</strong>gle<br />
bid.<br />
7. Recent Bidders: the number of dist<strong>in</strong>ct bidders<br />
who placed a bid <strong>in</strong> the previous five m<strong>in</strong>utes.<br />
8. Clock Time: the amount of time rema<strong>in</strong><strong>in</strong>g on<br />
the auction clock when the bid was placed, <strong>in</strong><br />
seconds.<br />
9. Reset Time: the time t reset , <strong>in</strong> seconds, to which<br />
the clock was reset follow<strong>in</strong>g this bid (either 20,<br />
15, or 10).<br />
10. Date: the date on which the bid was placed.<br />
2 The dataset was collected with a scraper written <strong>in</strong> Ruby<br />
us<strong>in</strong>g the Watir framework for web application test<strong>in</strong>g (www.<br />
watir.com).<br />
2
11. Time: the time of day, measured to the second,<br />
at which this bid was placed.<br />
Voucher bid auctions are excluded from the dataset.<br />
With the exception of voucher bid auctions, the<br />
complete auction histories constitute a representative<br />
sample of <strong>QuiBids</strong> auctions. There are roughly<br />
even numbers of recorded bids placed on items <strong>in</strong> each<br />
price category ($0–$50, $50–$100, <strong>an</strong>d so on) <strong>an</strong>d <strong>in</strong><br />
each retail category (e.g. electronics, home <strong>an</strong>d garden,<br />
gift cards). Only bids placed while t ≤ t reset<br />
were recorded.<br />
The raw data consists of a matrix R with the eleven<br />
columns described above. Each row <strong>in</strong> R corresponds<br />
to a particular bid. We c<strong>an</strong> also th<strong>in</strong>k of the raw data<br />
as comprised of a set A of auctions. For <strong>an</strong> auction<br />
a ∈ A we notate by R a the matrix of raw data for<br />
that particular auction. The rows of each such R a are<br />
sorted <strong>in</strong> ascend<strong>in</strong>g chronological order (i.e. the bids<br />
are sorted by the time at which they were placed).<br />
The f<strong>in</strong>al row of R a therefore identifies the w<strong>in</strong>ner of<br />
the auction a, the bid price at which the good was<br />
sold, <strong>an</strong>d the time at which the auction ended.<br />
4 Design<strong>in</strong>g An <strong>Agent</strong><br />
Our goal is to design <strong>an</strong> automated bidd<strong>in</strong>g agent<br />
for <strong>QuiBids</strong> penny auctions, rely<strong>in</strong>g on the data R<br />
scraped from <strong>QuiBids</strong> as tra<strong>in</strong><strong>in</strong>g data. From the bidder’s<br />
perspective, the ideal outcome of a penny auction<br />
is w<strong>in</strong>n<strong>in</strong>g the auction with a s<strong>in</strong>gle bid. Plac<strong>in</strong>g<br />
a bid is costly, so a rational bidder will refra<strong>in</strong><br />
from bidd<strong>in</strong>g until the auction would otherwise end.<br />
This, of course, is a drastic simplification s<strong>in</strong>ce a bidder<br />
c<strong>an</strong>not be sure about others’ <strong>in</strong>tentions <strong>an</strong>d c<strong>an</strong><br />
never be certa<strong>in</strong> whether <strong>an</strong> auction is about to end.<br />
Furthermore, the very act of bidd<strong>in</strong>g when the auction<br />
would otherwise end may <strong>in</strong>fluence the behavior<br />
of the other bidders, potentially caus<strong>in</strong>g the auction<br />
to cont<strong>in</strong>ue.<br />
The realization that the actions of <strong>an</strong> automated<br />
bidd<strong>in</strong>g agent alter the behavior of the other bidders<br />
poses a profound problem. The tra<strong>in</strong><strong>in</strong>g data, needless<br />
to say, does not <strong>in</strong>corporate the effects of the automated<br />
agent’s behavior. Consequently, the tra<strong>in</strong><strong>in</strong>g<br />
data might no longer be predictive of the auction<br />
outcome as soon as the agent places a bid. Proper<br />
evaluation of <strong>an</strong> automated agent, therefore, c<strong>an</strong>not<br />
be done with tra<strong>in</strong><strong>in</strong>g data alone, but rather would<br />
require active experiments with real hum<strong>an</strong> particip<strong>an</strong>ts.<br />
In order to sidestep this problem, we focus on design<strong>in</strong>g<br />
a method which, by passive observation of<br />
<strong>an</strong> auction a ′ , c<strong>an</strong> accurately predict the number of<br />
bids ŷ rema<strong>in</strong><strong>in</strong>g <strong>in</strong> the auction. The agent should<br />
produce a revised estimate of the number of bids rema<strong>in</strong><strong>in</strong>g<br />
after each successive bid is observed, so that<br />
it produces a vector of predictions ŷ a ′. The prediction<br />
made after observ<strong>in</strong>g the first i bids is denoted<br />
ŷ a ′[i]. For the purposes of evaluation, we presume<br />
that the bidd<strong>in</strong>g agent takes no action, <strong>an</strong>d therefore<br />
has no impact on the course of the auction. However,<br />
the predictions ŷ a ′ could <strong>in</strong> theory be basis for<br />
a profitable bidd<strong>in</strong>g strategy. We suggest three bidd<strong>in</strong>g<br />
strategies that c<strong>an</strong> be implemented on top of<br />
end-of-auction prediction:<br />
• Def<strong>in</strong>e a threshold ɛ. Do noth<strong>in</strong>g while ŷ a ′[i] > ɛ.<br />
As soon as ŷ a ′[i] ≤ ɛ, beg<strong>in</strong> bidd<strong>in</strong>g aggressively<br />
with the BidOMatic. Stop bidd<strong>in</strong>g aggressively<br />
only if the agent’s total expended bid fees equal<br />
the Buy-Now price m of the item, at which po<strong>in</strong>t<br />
Buy-Now should be <strong>in</strong>voked, or when the agent<br />
w<strong>in</strong>s the auction. Aggressive bidd<strong>in</strong>g behavior<br />
at the end of <strong>an</strong> auction has been shown to be<br />
associated with auction w<strong>in</strong>ners (J. Stix, 2012<br />
[9]). This f<strong>in</strong>d<strong>in</strong>g suggests that aptly timed aggressive<br />
bidd<strong>in</strong>g behavior might be capable of<br />
w<strong>in</strong>n<strong>in</strong>g, despite refra<strong>in</strong><strong>in</strong>g from submitt<strong>in</strong>g bids<br />
for the majority of the auction.<br />
• As before, def<strong>in</strong>e a threshold ɛ, but also def<strong>in</strong>e a<br />
clock time threshold t thresh . Instead of bidd<strong>in</strong>g<br />
aggressively with the BidOMatic, place a s<strong>in</strong>gle<br />
bid only when observ<strong>in</strong>g that ŷ a ′[i] ≤ ɛ <strong>an</strong>d t ≤<br />
t thresh . This is <strong>an</strong> extension of the “const<strong>an</strong>ttime”<br />
strategy proposed by (J. Stix, 2012 [9]).<br />
• Store the prediction ŷ start := ŷ a ′[1] associated<br />
with the first bid of the auction. Whenever the<br />
auction clock drops below t thresh seconds, bid<br />
with probability m<strong>in</strong>(1, max(0, ŷ a ′[i]/ŷ start )).<br />
4.1 A Hierarchical Method for Predict<strong>in</strong>g<br />
the Auction End<br />
We take a two-level hierarchical approach for predict<strong>in</strong>g<br />
the auction end. Given a novel auction a ′ , the first<br />
step is to compare a ′ to all tra<strong>in</strong><strong>in</strong>g auctions a ∈ A.<br />
The aim of this step is to identify a set of auctions<br />
S ⊂ A that are most similar to a ′ .<br />
The second step is to use each of the similar auctions<br />
s ∈ S <strong>in</strong> order to predict the number of bids<br />
3
ŷ a ′ rema<strong>in</strong><strong>in</strong>g <strong>in</strong> auction a ′ . Consider mak<strong>in</strong>g a prediction<br />
ŷ a ′[i] after a particular number of bids i has<br />
already elapsed. For each similar auction we obta<strong>in</strong><br />
a prediction ŷ s . The f<strong>in</strong>al prediction is the average of<br />
the <strong>in</strong>dividual predictions from the auctions <strong>in</strong> S:<br />
ŷ a ′[i] = 1<br />
|S|<br />
∑<br />
ŷ s (1)<br />
s∈S<br />
We develop the details of both steps of the two-level<br />
method <strong>in</strong> the follow<strong>in</strong>g sections. See Figures 1 <strong>an</strong>d<br />
2 for a summary of the method.<br />
4.2 Generat<strong>in</strong>g Feature Vectors<br />
The first step <strong>in</strong> the pipel<strong>in</strong>e <strong>in</strong>volves preprocess<strong>in</strong>g<br />
the raw bid histories <strong>in</strong> order to generate a tra<strong>in</strong><strong>in</strong>g<br />
set of feature vectors. We need to generate two<br />
types of feature vectors: per-auction feature vectors<br />
<strong>an</strong>d bid history feature vectors. Per-auction feature<br />
vectors are based on auction-level features such as<br />
the Buy-Now price of the good be<strong>in</strong>g auctioned <strong>an</strong>d<br />
the retail category of the good. The per-auction feature<br />
vectors are used <strong>in</strong> order to determ<strong>in</strong>e the set S<br />
of similar auctions. In contrast, bid history feature<br />
vectors are computed us<strong>in</strong>g more gr<strong>an</strong>ular bid-level<br />
<strong>in</strong>formation such as the time at which each bid was<br />
placed <strong>an</strong>d the user that placed each bid. The bid history<br />
feature vectors are used to make the predictions<br />
ŷ s . The process used to compute both per-auction<br />
feature vectors <strong>an</strong>d bid history feature vectors is described<br />
below.<br />
We wish to construct a s<strong>in</strong>gle per-auction feature<br />
vector x a for each a ∈ A. The per-auction feature<br />
vector should be a function of the very first bid<br />
recorded <strong>in</strong> the complete auction history. This me<strong>an</strong>s<br />
that after the bidd<strong>in</strong>g agent observes the first bid of<br />
a novel auction, it has enough <strong>in</strong>formation to map<br />
that auction <strong>in</strong>to the per-auction feature space <strong>an</strong>d<br />
compute the set S. Let the R a,i,j denote the submatrix<br />
of R a which conta<strong>in</strong>s rows i through j of the full<br />
matrix (<strong>in</strong>clusive). The per-auction feature vector x a<br />
for auction a is some function f of the open<strong>in</strong>g bid:<br />
x a = f(R a,1,1 ) (2)<br />
We make use of the rema<strong>in</strong><strong>in</strong>g rows of R a <strong>in</strong> order<br />
to compute the bid history feature vectors. For each<br />
auction <strong>in</strong> the raw data, the matrix R a will be converted<br />
<strong>in</strong>to the correspond<strong>in</strong>g matrix of feature vectors<br />
X a . Each row <strong>in</strong> X a is a bid history feature<br />
vector. Let the ith bid history feature vector (i.e.<br />
the ith row of X a ) be denoted by X a [i].<br />
The ith feature vector for auction a is a function of<br />
the first i bids <strong>in</strong> the recorded history. This design,<br />
aga<strong>in</strong>, has the bidd<strong>in</strong>g agent <strong>in</strong> m<strong>in</strong>d—the ith feature<br />
vector c<strong>an</strong> only depend on the bids that the agent will<br />
have seen so far. The rema<strong>in</strong><strong>in</strong>g bids are <strong>in</strong> the future<br />
<strong>an</strong>d are hence hidden. The ith feature vector c<strong>an</strong> now<br />
be written as a function g of the submatrix comprised<br />
of the first i rows of raw data:<br />
X a [i] = g(R a,1,i ) (3)<br />
Although f <strong>an</strong>d g are left unspecified here, we def<strong>in</strong>e<br />
particular a f <strong>an</strong>d a particular g <strong>in</strong> order to evaluate<br />
our method.<br />
Each bid history feature vector X a [i] has <strong>an</strong> associated<br />
tra<strong>in</strong><strong>in</strong>g label y a [i]. Equivalently, the tra<strong>in</strong><strong>in</strong>g<br />
data X a for auction a has <strong>an</strong> associated vector of labels<br />
y a . Suppose that the bid history for auction a<br />
conta<strong>in</strong>s n a bids. The label correspond<strong>in</strong>g to the ith<br />
feature vector is the number of succeed<strong>in</strong>g bids:<br />
y a [i] = n a − i (4)<br />
Each tra<strong>in</strong><strong>in</strong>g example is thus paired with a ground<br />
truth giv<strong>in</strong>g the number of bids rema<strong>in</strong><strong>in</strong>g <strong>in</strong> the auction.<br />
For evaluation, we compare our predictions ŷ a<br />
aga<strong>in</strong>st the ground truth y a .<br />
4.3 F<strong>in</strong>d<strong>in</strong>g Similar Auctions<br />
Our goal is, given a new auction a ′ , to f<strong>in</strong>d a set<br />
S ⊂ A of auctions which we will use to make a prediction<br />
of the number of bids rema<strong>in</strong><strong>in</strong>g. In order<br />
to do so, we make use of the set of per-auction feature<br />
vectors: {x a : a ∈ A}. We determ<strong>in</strong>e S us<strong>in</strong>g<br />
k-nearest neighbor where k is some predeterm<strong>in</strong>ed<br />
small <strong>in</strong>teger. Namely, the problem is to f<strong>in</strong>d a subset<br />
of auctions S such that |S| = k <strong>an</strong>d for <strong>an</strong>y s ∈ S:<br />
||x s − x a ′|| ≤ ||x a − x a ′|| ∀a ∈ A \ S (5)<br />
This S is not guar<strong>an</strong>teed to be unique; we choose a<br />
solution S uniformly at r<strong>an</strong>dom among all possible<br />
solutions. We efficiently f<strong>in</strong>d a solution that satisfies<br />
Equation 5 by us<strong>in</strong>g the set of per-auction feature<br />
vectors {x a } to construct a kd-tree, <strong>an</strong>d then query<strong>in</strong>g<br />
the kd-tree for the k vectors nearest to x a ′ (see<br />
e.g. (Yi<strong>an</strong>ilos, 1993 [11]) <strong>an</strong>d (Cormen et al., 2009<br />
[4])). The metric is Euclide<strong>an</strong> dist<strong>an</strong>ce.<br />
4.4 Predict<strong>in</strong>g Rema<strong>in</strong><strong>in</strong>g Bids<br />
Suppose that we are try<strong>in</strong>g to compute a particular<br />
ŷ s —we have identified <strong>an</strong> auction s which looks similar<br />
to the novel auction a ′ <strong>an</strong>d, by comparison to s,<br />
4
<strong>QuiBids</strong>Tra<strong>in</strong>(A tra<strong>in</strong> , R)<br />
1 E ← ∅<br />
2 models ← {}<br />
3 for a ∈ A tra<strong>in</strong> do<br />
4 x a ← f(R a,1,1 )<br />
5 E ← E ∪ x a<br />
6 n a ← length(R a )<br />
7 X a ← new matrix with n a rows<br />
8 y a ← new vector of length n a<br />
9 for i = 1, . . . , n a do<br />
10 X a [i] ← g(R a,1,i )<br />
11 y a [i] ← n a − i<br />
12 models[a] ← Tra<strong>in</strong>Model(X a , y a )<br />
13 output KDTreeConstruct(E), models<br />
Figure 1: Given the raw data for the set of tra<strong>in</strong><strong>in</strong>g auctions A tra<strong>in</strong> , the generic procedure shown here is<br />
used to tra<strong>in</strong> the hierarchical model. The procedure returns two data structures: a kd-tree constructed<br />
from the set of per-auction feature vectors, <strong>an</strong>d <strong>an</strong> associative data structure that maps from <strong>an</strong> auction to<br />
the correspond<strong>in</strong>g tra<strong>in</strong>ed model. Depend<strong>in</strong>g on whether we are runn<strong>in</strong>g knn-knn, knn-l<strong>in</strong>, or knn-poi, the<br />
Tra<strong>in</strong>Model procedure might <strong>in</strong>volve construct<strong>in</strong>g a kd-tree, comput<strong>in</strong>g parameters for a l<strong>in</strong>ear regression<br />
model, or comput<strong>in</strong>g parameters for a Poisson regression model. For details on notation, see the glossary of<br />
symbols (Figure 3).<br />
Symbol<br />
A tra<strong>in</strong><br />
A test<br />
a<br />
f<br />
g<br />
n a<br />
R<br />
R a<br />
R a,i,j<br />
S<br />
X a<br />
X a[i]<br />
x a<br />
y a<br />
y a[i]<br />
ŷ a<br />
z a<br />
δ<br />
ɛ<br />
φ<br />
θ<br />
Description<br />
the set of auctions <strong>in</strong> the full auction<br />
bid histories<br />
the set of auctions <strong>in</strong> the end auction data<br />
generic particular auction<br />
per-auction feature vector function<br />
bid history feature vector function<br />
the number of recorded bids <strong>in</strong> auction a<br />
matrix of all raw data<br />
matrix of raw data for auction a<br />
submatrix of R a consist<strong>in</strong>g of rows<br />
i through j, <strong>in</strong>clusive<br />
set of similar auctions found by the first<br />
step of the hierarchical method<br />
matrix conta<strong>in</strong><strong>in</strong>g feature vectors<br />
ith feature vector for auction a<br />
per-auction feature vector for auction a<br />
vector of tra<strong>in</strong><strong>in</strong>g labels for auction a<br />
ith tra<strong>in</strong><strong>in</strong>g label for auction a<br />
vector of predicted bids rema<strong>in</strong><strong>in</strong>g<br />
actual number of rema<strong>in</strong><strong>in</strong>g bids upon<br />
predict<strong>in</strong>g the auction end<br />
bid <strong>in</strong>crement<br />
bid threshold for comput<strong>in</strong>g z a<br />
bid fee<br />
vector of model parameters<br />
Figure 3: Glossary of symbols.<br />
we wish to determ<strong>in</strong>e the number of bids rema<strong>in</strong><strong>in</strong>g<br />
<strong>in</strong> a ′ . In order to accomplish this task, we harness the<br />
tra<strong>in</strong><strong>in</strong>g data X s <strong>an</strong>d the associated labels y s . If the<br />
first i bids of the novel auction have elapsed, then the<br />
most up-to-date bid history feature vector is X a ′[i].<br />
Our approach is to tra<strong>in</strong> a model with X s <strong>an</strong>d y s ,<br />
<strong>an</strong>d then to use X a ′[i] as test data which yields the<br />
model prediction ŷ s . We compare three models for<br />
solv<strong>in</strong>g this problem: 1) s<strong>in</strong>gle-nearest neighbor, 2)<br />
l<strong>in</strong>ear regression, <strong>an</strong>d 3) Poisson regression.<br />
In the s<strong>in</strong>gle-nearest neighbor case, we tra<strong>in</strong> a<br />
model for each a ∈ A by build<strong>in</strong>g a kd-tree conta<strong>in</strong><strong>in</strong>g<br />
the feature vectors <strong>in</strong> X a . In order to compute ŷ s , we<br />
first lookup the kd-tree correspond<strong>in</strong>g to auction s.<br />
Then we use this kd-tree to f<strong>in</strong>d the <strong>in</strong>dex j of the<br />
feature vector that is closest to X a ′[i] accord<strong>in</strong>g to a<br />
Euclide<strong>an</strong> dist<strong>an</strong>ce metric. If the tra<strong>in</strong><strong>in</strong>g data X s<br />
consists of n s bids:<br />
j = arg m<strong>in</strong><br />
1≤v≤n s<br />
||X s [v] − X a ′[i]|| (6)<br />
Although evaluat<strong>in</strong>g Equation 6 by brute force would<br />
require O(|S|) time, the time complexity of the kdtree<br />
query is logarithmic <strong>in</strong> the length of the auction<br />
history. Once we determ<strong>in</strong>e <strong>in</strong>dex j, we set<br />
ŷ s := y s [j]. After follow<strong>in</strong>g this process for each s, we<br />
5
<strong>QuiBids</strong>Test(A test , R, k, kdtree, models)<br />
1 Y ← ∅<br />
2 Ŷ ← ∅<br />
3 for a ∈ A test do<br />
4 x a ← f(R a,1,1 )<br />
5 S ← KDTreeQuery(kdtree, k, x a )<br />
6 n a ← length(R a )<br />
7 X a ← new matrix with n a rows<br />
8 y a ← new vector of length n a<br />
9 ŷ a ← new vector of length n a<br />
10 for i = 1, . . . , n a do<br />
11 X a [i] ← g(R a,1,i )<br />
12 y a [i] ← n a − i<br />
13 ŷ a [i] ← 0<br />
14 for s ∈ S do<br />
15 ŷ s ← Predict(models[s], X a [i])<br />
16 ŷ a [i] ← ŷ a [i] + ŷ s /k<br />
17 Ŷ ← Ŷ ∪ ŷ a<br />
18 Y ← Y ∪ y a<br />
19 output Y, Ŷ<br />
Figure 2: The procedure which is used to make predictions for all test auctions. Given the kd-tree <strong>an</strong>d<br />
tra<strong>in</strong>ed models generated by the <strong>QuiBids</strong>Tra<strong>in</strong> procedure, it returns the set of all prediction vectors,<br />
{ŷ a : a ∈ A test }, <strong>an</strong>d the set of all tra<strong>in</strong><strong>in</strong>g labels for the test data, {y a : a ∈ A test }. Depend<strong>in</strong>g on<br />
whether we are runn<strong>in</strong>g knn-knn, knn-l<strong>in</strong>, knn-poi, the Predict procedure could query a kd-tree for the<br />
s<strong>in</strong>gle-nearest neighbor, use a tra<strong>in</strong>ed l<strong>in</strong>ear regression model to make a prediction, or use a tra<strong>in</strong>ed Poisson<br />
regression model to make a prediction. For details on notation, see the glossary of symbols (Figure 3).<br />
6
compute the f<strong>in</strong>al estimate ŷ a ′[i] accord<strong>in</strong>g to Equation<br />
1.<br />
A general problem with nearest neighbor techniques<br />
is that Euclide<strong>an</strong> dist<strong>an</strong>ce loses its me<strong>an</strong><strong>in</strong>g<br />
<strong>in</strong> a high-dimensional space (Beyer et al., 1999 [2]).<br />
The s<strong>in</strong>gle-nearest neighbor strategy thus limits us<br />
to us<strong>in</strong>g a small number of features (on the order of<br />
10). This “curse of dimensionality” problem motivates<br />
us<strong>in</strong>g ord<strong>in</strong>ary least squares l<strong>in</strong>ear regression<br />
as <strong>an</strong> alternative approach. L<strong>in</strong>ear regression is also<br />
among the simplest of regression models, so it provides<br />
a basel<strong>in</strong>e for comparison aga<strong>in</strong>st other regression<br />
techniques.<br />
L<strong>in</strong>ear regression solves the “curse of dimensionality”<br />
problem, but suffers from a new problem: it<br />
yields negative predictions. The number of bids rema<strong>in</strong><strong>in</strong>g<br />
is always a nonnegative <strong>in</strong>teger. We therefore<br />
explore Poisson regression as a third technique<br />
for comput<strong>in</strong>g the estimates ŷ s . The Poisson regression<br />
model is tailored for mak<strong>in</strong>g predictions on<br />
count data. It is <strong>an</strong> <strong>in</strong>st<strong>an</strong>ce of a generalized l<strong>in</strong>ear<br />
model with a logarithmic l<strong>in</strong>k function (Cameron <strong>an</strong>d<br />
Trivedi, 1998 [3]). The model assumes that the data<br />
follows<br />
P (y a [i] | X a [i], θ) = Poisson(e θT X a[i] ) (7)<br />
where θ is a vector of the model parameters<br />
<strong>an</strong>d Poisson(λ) is the probability mass function of<br />
the Poisson distribution with me<strong>an</strong> λ. Equivalently,<br />
the labels are Poisson-distributed with me<strong>an</strong>s<br />
E[y a ] = exp(X a θ). Tra<strong>in</strong><strong>in</strong>g the model requires<br />
maximum-likelihood parameter estimation—f<strong>in</strong>d<strong>in</strong>g<br />
arg max θ L(θ|X a , y a ). There is no closed-form solution<br />
for the MLE, but good estimates c<strong>an</strong> be obta<strong>in</strong>ed<br />
by st<strong>an</strong>dard gradient descent algorithms.<br />
5 Results <strong>an</strong>d Evaluation<br />
We have described three hierarchical methods for<br />
end-of-auction prediction: k-nearest neighbor followed<br />
by s<strong>in</strong>gle-nearest neighbor (knn-knn), k-nearest<br />
neighbor followed by l<strong>in</strong>ear regression (knn-l<strong>in</strong>), <strong>an</strong>d<br />
k-nearest neighbor followed by Poisson regression<br />
(knn-poi). Our implementation uses the k-nearest<br />
neighbor <strong>an</strong>d regression packages provided by Scikitlearn<br />
(Pedregosa et al., 2011 [7]) along with MAT-<br />
LAB’s generalized l<strong>in</strong>ear model toolbox. Here we<br />
present <strong>an</strong>d compare the results for these three methods.<br />
The set of auctions A was split <strong>in</strong>to a tra<strong>in</strong><strong>in</strong>g<br />
set A tra<strong>in</strong> <strong>an</strong>d a test set A test by r<strong>an</strong>domly select<strong>in</strong>g<br />
auctions. Approximately 20% of the auctions are<br />
<strong>in</strong> A test , with the rema<strong>in</strong><strong>in</strong>g 80% <strong>in</strong> A tra<strong>in</strong> . For each<br />
auction a ∈ A test , we have <strong>an</strong> associated vector of<br />
labels y a . Our goal is to use the tra<strong>in</strong><strong>in</strong>g set A tra<strong>in</strong><br />
to compute the correspond<strong>in</strong>g vector of estimates ŷ a .<br />
The predictions ŷ a are plotted aga<strong>in</strong>st the true labels<br />
y a for <strong>an</strong> example auction <strong>in</strong> Figure 4.<br />
Predicted bids rema<strong>in</strong><strong>in</strong>g<br />
800<br />
700<br />
600<br />
500<br />
400<br />
300<br />
200<br />
100<br />
knn−poi Predictions for Auction 529632804<br />
0<br />
0 500 1000 1500 2000 2500 3000 3500<br />
Actual bids rema<strong>in</strong><strong>in</strong>g<br />
Figure 4: Predicted bids rema<strong>in</strong><strong>in</strong>g ŷ a versus actual<br />
bids rema<strong>in</strong><strong>in</strong>g y a for auction a = 529632804. The<br />
auction was for a Cuis<strong>in</strong>art FP-14DC Elite Food Processor<br />
with a Buy-Now price of $283.99.<br />
The results use k = 20 for k-nearest neighbor. The<br />
Buy-Now price is the sole per-auction feature, so that<br />
f(R a,1,1 ) simply returns the Buy-Now price conta<strong>in</strong>ed<br />
<strong>in</strong> the first row of the the raw data matrix. Furthermore,<br />
g is def<strong>in</strong>ed to compute the follow<strong>in</strong>g bid-level<br />
features for each X a [i]:<br />
1. Time Elapsed: the time elapsed between the<br />
placement of the auction’s open<strong>in</strong>g bid <strong>an</strong>d the<br />
placement of the ith bid.<br />
2. Absolute Time: the absolute time of day at<br />
which the ith bid was placed, measured <strong>in</strong> seconds.<br />
3. Highest Bid: the new highest bid price p of the<br />
good after this bid is placed.<br />
4. Unique Bidders: the number of unique bidders<br />
that have bid so far <strong>in</strong> the auction.<br />
7
5. Unique Bidders Last 50: the number of unique<br />
bidders <strong>in</strong> the last 50 bids.<br />
6. Bids Placed: the total number of bids placed<br />
thus far by the current highest bidder.<br />
7. BidOMatic Bids: the total number of BidOMatic<br />
bids placed thus far <strong>in</strong> the auction.<br />
The first evaluation metric is the residual sum of<br />
squares (RSS):<br />
RSS =<br />
∑<br />
a∈A test ||ŷ a − y a || 2 (8)<br />
The smaller the RSS, the more closely ŷ a predicts<br />
y a . The results show that knn-l<strong>in</strong> has the largest<br />
squared residuals; knn-knn’s RSS is 41.3% that of<br />
knn-l<strong>in</strong>, <strong>an</strong>d knn-poi’s RSS is 5.9% that of knn-l<strong>in</strong>.<br />
By this measurement, knn-poi is the favored method.<br />
The RSS <strong>in</strong>dicates how well the method predicts<br />
the number of bids rema<strong>in</strong><strong>in</strong>g at <strong>an</strong>y po<strong>in</strong>t <strong>in</strong> the auction.<br />
But for the purposes of a bidd<strong>in</strong>g agent, it is<br />
not strictly necessary to always generate <strong>an</strong> accurate<br />
prediction of the number of rema<strong>in</strong><strong>in</strong>g bids. What<br />
is more import<strong>an</strong>t is whether the predictions accurately<br />
<strong>in</strong>dicate when the end of the auction is imm<strong>in</strong>ent.<br />
Figure 4, for example, shows large errors between<br />
the predicted <strong>an</strong>d actual numbers of rema<strong>in</strong><strong>in</strong>g<br />
bids—when there are 3,000 bids rema<strong>in</strong><strong>in</strong>g, knn-poi<br />
suggests that there are only 500. This is nevertheless<br />
a “good” case <strong>in</strong> the sense that the graph lies close<br />
to the orig<strong>in</strong> towards the end of the auction. When<br />
there are a small number of bids rema<strong>in</strong><strong>in</strong>g, the prediction<br />
<strong>in</strong>deed recovers that few bid rema<strong>in</strong>.<br />
The preference for accuracy specifically when the<br />
end of the auction is impend<strong>in</strong>g requires <strong>an</strong> end-ofauction<br />
aware evaluation scheme. We use the follow<strong>in</strong>g<br />
algorithm to produce <strong>an</strong> end-of-auction prediction<br />
for each a ∈ A test : f<strong>in</strong>d the first bid <strong>in</strong> the<br />
test auction whose associated prediction ŷ a [i] falls<br />
below some threshold ɛ. After comput<strong>in</strong>g the smallest<br />
j such that ŷ a [j] ≤ ɛ, the correspond<strong>in</strong>g label<br />
y a [j] gives the actual number of bids rema<strong>in</strong><strong>in</strong>g at<br />
this po<strong>in</strong>t. Let z a := y a [j] so that z a c<strong>an</strong> be <strong>in</strong>terpreted<br />
as the actual number of bids rema<strong>in</strong><strong>in</strong>g when<br />
we predict the end of auction a. If ŷ a [i] > ɛ ∀i then<br />
the prediction is never sufficiently low. In this case,<br />
z a does not exist <strong>an</strong>d the method has failed to predict<br />
the end of a.<br />
We use the end-of-auction predictions z a for three<br />
evaluation metrics:<br />
Me<strong>an</strong> bids rema<strong>in</strong><strong>in</strong>g<br />
Medi<strong>an</strong> bids rema<strong>in</strong><strong>in</strong>g<br />
Auction recall<br />
1. The me<strong>an</strong> bids rema<strong>in</strong><strong>in</strong>g, or the me<strong>an</strong> z a taken<br />
over the auctions a ∈ A test . The auctions for<br />
which z a does not exist are excluded from this<br />
calculation.<br />
2. The medi<strong>an</strong> bids rema<strong>in</strong><strong>in</strong>g, or the medi<strong>an</strong> z a<br />
taken over a ∈ A test . Together, the me<strong>an</strong> <strong>an</strong>d<br />
medi<strong>an</strong> z a <strong>in</strong>dicate precision. The lower they are,<br />
the more precise the end-of-auction predictions.<br />
3. The auction recall. This is the fraction of the<br />
auctions <strong>in</strong> A test for which z a exists.<br />
These evaluation metrics are shown as a function of<br />
the threshold ɛ <strong>in</strong> Figure 5.<br />
300<br />
250<br />
200<br />
150<br />
knn−knn<br />
knn−l<strong>in</strong><br />
knn−poi<br />
100<br />
0 50 100 150 200 250 300 350 400<br />
End−of−auction threshold, epsilon<br />
110<br />
100<br />
90<br />
80<br />
70<br />
knn−knn<br />
knn−l<strong>in</strong><br />
knn−poi<br />
60<br />
0 50 100 150 200 250 300 350 400<br />
End−of−auction threshold, epsilon<br />
1<br />
0.8<br />
0.6<br />
0.4<br />
0.2<br />
knn−knn<br />
knn−l<strong>in</strong><br />
knn−poi<br />
0<br />
0 50 100 150 200 250 300 350 400<br />
End−of−auction threshold, epsilon<br />
Figure 5: Evaluation metrics as a function of the<br />
threshold ɛ: the me<strong>an</strong> z a (top), medi<strong>an</strong> z a (middle),<br />
<strong>an</strong>d the auction recall (bottom). Results for knn-knn<br />
are shown <strong>in</strong> blue, with knn-l<strong>in</strong> shown <strong>in</strong> green <strong>an</strong>d<br />
knn-poi shown <strong>in</strong> red.<br />
8
For nearly <strong>an</strong>y choice of ɛ, knn-knn performs best <strong>in</strong><br />
terms of the me<strong>an</strong> <strong>an</strong>d medi<strong>an</strong> z a metrics—there tend<br />
to be the fewest bids rema<strong>in</strong><strong>in</strong>g <strong>in</strong> the test auction history<br />
when knn-knn predicts the impend<strong>in</strong>g end of the<br />
auction. The knn-poi method performs second best,<br />
with knn-l<strong>in</strong> perform<strong>in</strong>g worst (Figure 5, top <strong>an</strong>d center<br />
p<strong>an</strong>els). These results are consistent with the RSS<br />
<strong>in</strong> that knn-knn <strong>an</strong>d knn-poi outperform knn-l<strong>in</strong>. Although<br />
knn-knn is better at identify<strong>in</strong>g the auction<br />
end th<strong>an</strong> knn-poi, the Poisson regression method has<br />
considerably better recall, especially for low values<br />
of ɛ (Figure 5, bottom p<strong>an</strong>el). Poisson regression offers<br />
perhaps the best bal<strong>an</strong>ce between precision <strong>an</strong>d<br />
recall.<br />
The knn-knn <strong>an</strong>d knn-poi hierarchical methods are<br />
capable of predict<strong>in</strong>g the end of the auction with<strong>in</strong> a<br />
resolution of a few hundred bids. For example, sett<strong>in</strong>g<br />
the threshold to ɛ = 2 <strong>an</strong>d us<strong>in</strong>g knn-poi, the error<br />
is 149.9 bids as measured by me<strong>an</strong> z a . The medi<strong>an</strong><br />
z a more conservatively suggests <strong>an</strong> error of 73 bids.<br />
The recall for knn-poi with ɛ = 2 is 60.2%.<br />
6 Conclusion<br />
Although (J. Stix, 2012, [9]) suggests several rulebased<br />
strategies for a <strong>QuiBids</strong> bidd<strong>in</strong>g agent, to our<br />
knowledge no prior research has attempted to apply<br />
mach<strong>in</strong>e learn<strong>in</strong>g techniques for end-of-auction<br />
prediction <strong>in</strong> penny auctions. Given the dearth of<br />
research on automated agents for onl<strong>in</strong>e penny auctions,<br />
we <strong>an</strong>ticipate that this work will set a basel<strong>in</strong>e<br />
for supervised learn<strong>in</strong>g-based penny auction agents.<br />
Our results demonstrate the promise beh<strong>in</strong>d a hierarchical<br />
strategy which tra<strong>in</strong>s a model for each auction<br />
<strong>in</strong>dividually. The evaluation suggests that the<br />
hierarchical method is capable of obta<strong>in</strong><strong>in</strong>g end-ofauction<br />
predictions that err, on average, by less th<strong>an</strong><br />
200 bids. There is a tradeoff between end-of-auction<br />
prediction precision <strong>an</strong>d recall, but depend<strong>in</strong>g on the<br />
desired level of precision, knn-knn <strong>an</strong>d knn-poi c<strong>an</strong><br />
achieve between 60% <strong>an</strong>d 90% recall.<br />
One direction for future work is to design a loss<br />
function which properly penalizes error at the end<br />
of a tra<strong>in</strong><strong>in</strong>g auction more th<strong>an</strong> error at the beg<strong>in</strong>n<strong>in</strong>g<br />
of a tra<strong>in</strong><strong>in</strong>g auction when comput<strong>in</strong>g the model<br />
parameters θ. This would ensure that each auction<br />
model closely fits the data at the end of the auction,<br />
<strong>an</strong>d therefore makes accurate predictions when the<br />
end of the auction is imm<strong>in</strong>ent. A second direction<br />
for future work is to explore regression models for<br />
count data aside from Poisson regression. In particular,<br />
negative b<strong>in</strong>omial regression might provide <strong>an</strong><br />
improvement over knn-poi.<br />
We believe that the discrim<strong>in</strong>ative models presented<br />
here for end-of-auction prediction could form<br />
the foundation for implement<strong>in</strong>g a profitable <strong>QuiBids</strong><br />
bidd<strong>in</strong>g agent. An alternative avenue which may<br />
be <strong>in</strong>terest<strong>in</strong>g to pursue is develop<strong>in</strong>g a generative<br />
model capable of model<strong>in</strong>g the underly<strong>in</strong>g auction<br />
dynamics. A hidden Markov model might be applicable<br />
for this purpose given that the full bid histories<br />
are sequential data. Potentially of use here is a hidden<br />
semi-Markov model (HSMM) <strong>in</strong> which tr<strong>an</strong>sition<br />
probabilities are not static, but rather depend on the<br />
time elapsed s<strong>in</strong>ce entry <strong>in</strong>to the hidden state.<br />
References<br />
[1] Augenblick, N. 2012. Consumer <strong>an</strong>d producer behavior<br />
<strong>in</strong> the market for penny auctions: A theoretical<br />
<strong>an</strong>d empirical <strong>an</strong>alysis. Unpublished m<strong>an</strong>uscript.<br />
Available at http://faculty.haas.berkeley.edu/<br />
ned/Penny_Auction.pdf.<br />
[2] Beyer, K., Goldste<strong>in</strong>, J., Ramaskrishn<strong>an</strong>, R., <strong>an</strong>d<br />
Shaft, U. 1999. When Is “Nearest Neighbor” Me<strong>an</strong><strong>in</strong>gful?<br />
7th International Conference Jerusalem, Israel,<br />
J<strong>an</strong>uary 10–12, 1999 Proceed<strong>in</strong>gs, 217–235: International<br />
Conference on Database Technology.<br />
[3] Cameron, A. C. <strong>an</strong>d Trivedi, P. 1998. Basic Count<br />
Regression. In Regression Analysis of Count Data, 61–<br />
69. New York: Cambridge <strong>University</strong> Press.<br />
[4] Cormen, T., Leiserson, C., <strong>an</strong>d Rivest, R. 2009. 3rd<br />
ed. Introduction to Algorithms. Cambridge, MA: MIT<br />
Press.<br />
[5] H<strong>in</strong>nosaar, T. 2010. Penny auctions are unpredictable.<br />
Unpublished m<strong>an</strong>uscript. Available at http:<br />
//toomas.h<strong>in</strong>nosaar.net/pennyauctions.pdf.<br />
[6] Krishna, V. <strong>an</strong>d Morg<strong>an</strong>, J. 1997. An Analysis of the<br />
War of Attrition <strong>an</strong>d the All-Pay Auction. Journal of<br />
Economic Theory 72(2): 343–362.<br />
[7] Pedregosa, F. et al. 2011. Scikit-learn: Mach<strong>in</strong>e<br />
Learn<strong>in</strong>g <strong>in</strong> Python. Journal of Mach<strong>in</strong>e Learn<strong>in</strong>g Research<br />
12: 2825–2830.<br />
[8] Stix, E., Stix, J., Storch, D., Sodomka, E., <strong>an</strong>d Greenwald,<br />
A. 2013. Empirical Analysis of Auctioneer Profitability<br />
<strong>in</strong> <strong>QuiBids</strong> Penny Auctions. Association for<br />
the Adv<strong>an</strong>cement of Artificial Intelligence. Proceed<strong>in</strong>gs:<br />
AAAI-13 Workshop on Trad<strong>in</strong>g <strong>Agent</strong> Design<br />
<strong>an</strong>d Analysis. Forthcom<strong>in</strong>g.<br />
[9] Stix, J. 2012. Design<strong>in</strong>g a <strong>Bidd<strong>in</strong>g</strong> Algorithm<br />
for Onl<strong>in</strong>e Penny Auctions. Available at<br />
http://cs.brown.edu/research/pubs/theses/<br />
ugrad/2012/jstix.pdf.<br />
9
[10] W<strong>an</strong>g, Z. <strong>an</strong>d Xu, M. 2012. Learn<strong>in</strong>g <strong>an</strong>d<br />
Strategic Sophistication <strong>in</strong> Games: The Case<br />
of Penny Auctions on the Internet. Unpublished<br />
m<strong>an</strong>uscript. Available at http://www.economics.<br />
neu.edu/zw<strong>an</strong>g/Penny%20auction.pdf.<br />
[11] Yi<strong>an</strong>ilos, P. 1993. Data Structures <strong>an</strong>d Algorithms<br />
for Nearest Neighbor Search <strong>in</strong> General Metric Spaces.<br />
Proceed<strong>in</strong>gs, 311–321: ACM-SIAM Symposium on<br />
Discrete Algorithms.<br />
10