Expected lowest cost, expected price and winner's margin in a second-price reverse auction with uniform costs

A purchaser buys from the lowest of N bidding suppliers whose unit costs are independent draws from a uniform distribution on the interval [c_low, c_high]. Under the second-price rule each supplier bids its cost and the winner is paid the second-lowest bid, so the expected price is the expected second-lowest cost. Klemperer prints the expected k-th highest of n uniform draws as v_low + ((n + 1 minus k) / (n + 1)) (v_high minus v_low); the lowest cost is the N-th highest and the second-lowest the (N minus 1)-th highest, which give E_c1 and E_p. By revenue equivalence the first-price rule has the same expected price (HE-FM-AUCT-002). The winner's expected margin is the gap between the two, (c_high minus c_low) / (N + 1) (derived), and both the price and the margin fall towards c_low and zero as N rises.

Signature

E_c1 = c_low + (c_high - c_low) / (N + 1); E_p = c_low + 2 * (c_high - c_low) / (N + 1); M_w = E_p - E_c1
Inputs
InputsDefinitionUnit
c_lowLower end of the range from which each supplier's unit cost is drawncurrency per unit, for example GBP per pack
c_highUpper end of the cost range, at least c_lowcurrency per unit
NNumber of suppliers that submit bids, at least 2count
Output
E_c1Expected value of the lowest of the N unit costs, the expected cost of the winning suppliercurrency per unit
E_pExpected price per unit paid by the purchaser, the expected second-lowest of the N unit costscurrency per unit
M_wExpected price less the expected cost of the winning suppliercurrency per unit

Function

Expected price and equilibrium bids of a single-winner reverse auction with independent uniform costs

Maps the lowest and highest possible unit costs c_low and c_high, the number of bidding suppliers N and, for a bid, one supplier's own cost c to the expected lowest cost E_c1, the expected price E_p the purchaser pays, the winner's expected margin M_w, the symmetric equilibrium bid b of a first-price (pay-as-bid) tender and the expected winning bid E_b, for a single-winner procurement auction in which each supplier knows only its own cost. HE-FM-AUCT-001 gives the expected costs, price and margin under the second-price rule, which by revenue equivalence is also the expected price under the first-price rule, and HE-FM-AUCT-002 gives the first-price bid and checks that its expected winning bid equals HE-FM-AUCT-001's price. HE-CF-AUCT-001 runs one tender under both rules and checks the closed forms by a seeded simulation. Both closed forms take the affine form of the Nash bargaining price HE-FM-BARG-001, a lower limit plus a weight times a range, but the weights 2 / (N + 1) and 1 / N come from order statistics of the cost draws, not from bargaining power (derived). The article's supply-risk comparison of one winner against two is an expected cost over delivery branches, HE-FM-CHN-001, with branch probabilities such as 0.81 that both suppliers deliver given by path products, HE-FM-CHN-002, so it is not restated here. The two-type screening of one supplier with a hidden cost is HE-FN-MECH-001, and the Medicare DMEPOS single payment amount, a median, maximum or 75th percentile of winning bids, is a programme rule and has no record here. Notation follows the Auction Theory article, with c_low and c_high for its lowest and highest possible unit costs.

Computational function

  • Computational function for one tender under both pricing rules and a seeded check of the uniform-cost closed forms

    Runs one tender under both pricing rules and checks the closed forms of HE-FM-AUCT-001 and HE-FM-AUCT-002 by simulating many tenders with a fixed seed. In one tender the second-price rule pays the winner the second-lowest cost, since every supplier bids its cost, and the first-price rule pays the lowest equilibrium bid. The lowest of the bids is the min form used for observed prices in HE-FM-BOC-003, and the scalar line writes the second-lowest of three costs as the median of three. The simulation draws N uniform costs per tender, sorts them, and averages the lowest cost, the second-lowest cost and the winning first-price bid, which converge to E_c1, E_p and E_b.

    Inputs and outputs: c_1, c_2 and c_3 are three suppliers' unit costs and c_high the top of the cost range (currency per unit), N the number of bidders (3 in the scalar line). The chain returns the bids b_1, b_2 and b_3, the first-price price p_FP, the second-price price p_SP and their difference d (currency per unit). The R and Python functions take c_low, c_high, N, the number of simulated tenders S and a seed, and return the mean lowest cost, the mean second-price price, the mean first-price price and the closed-form price.

    Assumption: As in HE-AS-AUCT-001 to HE-AS-AUCT-006. The calculator line is for exactly three suppliers; the code handles any N of 2 or more. Equal costs are allowed in the scalar line and give a price equal to that cost under the second-price rule.

    Worked example (the article's draw): With c_1 = 2.60; c_2 = 3.20; c_3 = 4.40; c_high = 5; N = 3 the bids are b_1 = 3.40; b_2 = 3.80; b_3 = 4.60, so p_FP = 3.40, p_SP = 3.20 and d = 0.20; the same supplier wins under both rules.

    Worked example (seeded simulation, for reading against the R and Python code): With c_low = 2; c_high = 5; N = 3; S = 100000 and seed 2026, Python's random module returns a mean lowest cost of 2.7485, a mean second-price price of 3.4959 and a mean first-price price of 3.4990, and R returns 2.7488, 3.5005 and 3.4992, against the closed forms 2.75 and 3.50. The standard error of the second-price mean is about 0.0021 at this S (derived from the variance of the second-lowest of three uniforms), so the two second-price means lie 1.95 and 0.25 standard errors from 3.50. The scalar worked example above is the one that runs in the calculator.

    Excel: With costs in cells named CostSupplierA, CostSupplierB and CostSupplierC, the range top in CostTopCF and the bidder count in BiddersCF, enter =CostSupplierA+(CostTopCF-CostSupplierA)/BiddersCF and the same for B and C in BidSupplierA, BidSupplierB and BidSupplierC, then =MIN(BidSupplierA,BidSupplierB,BidSupplierC) in PriceFirstPrice and =MEDIAN(CostSupplierA,CostSupplierB,CostSupplierC) in PriceSecondPrice, the second-lowest of three costs. For the simulation with three bidders and a range bottom in CostBottomCF, paste 100,000 rows of uniform draws as values (not live RAND) into the range A2:C100001, named UniformDraws, enter =CostBottomCF+(CostTopCF-CostBottomCF)*A2 in E2 and copy it across to G2 and down, then =SMALL(E2:G2,1) in H2, =SMALL(E2:G2,2) in I2 and =H2+(CostTopCF-H2)/BiddersCF in J2, copied down. =AVERAGE(H2:H100001), =AVERAGE(I2:I100001) and =AVERAGE(J2:J100001) give MeanLowestSim, MeanSecondPriceSim and MeanFirstPriceSim, and =STDEV(I2:I100001)/SQRT(ROWS(UniformDraws)) gives SESecondPriceSim. More bidders need more draw and cost columns.

    R: tender_sim <- function(cl, ch, N, S, seed) { if (N < 2 || ch < cl || S < 2) stop("needs N >= 2, c_high >= c_low and S >= 2"); set.seed(seed); m <- matrix(runif(S*N, cl, ch), S, N); srt <- t(apply(m, 1, sort)); lo <- srt[, 1]; sp <- srt[, 2]; fp <- lo+(ch-lo)/N; c(lowest = mean(lo), second_price = mean(sp), first_price = mean(fp), closed = cl+2*(ch-cl)/(N+1)) } tender_sim(2, 5, 3, 100000, 2026) returns 2.748819, 3.500529, 3.499212 and 3.5; tender_sim(2, 5, 5, 100000, 2026) returns 2.500546, 2.999899, 3.000437 and 3. With cl equal to ch every output is that cost, and N of 1 stops with the message.

    Python: import random then def tender_sim(cl, ch, N, S, seed): assert N >= 2 and ch >= cl and S >= 2, "needs N >= 2, c_high >= c_low and S >= 2"; rng = random.Random(seed); T = [sorted(rng.uniform(cl, ch) for _ in range(N)) for _ in range(S)]; return dict(lowest=sum(t[0] for t in T)/S, second_price=sum(t[1] for t in T)/S, first_price=sum(t[0]+(ch-t[0])/N for t in T)/S, closed=cl+2*(ch-cl)/(N+1)) Standard library only; tender_sim(2, 5, 3, 100000, 2026) returns lowest 2.74854, second_price 3.49587, first_price 3.49903 and closed 3.5; tender_sim(2, 5, 5, 100000, 2026) returns 2.49980, 2.99660, 2.99984 and 3.0. Equal cl and ch return that cost for every output, and N of 1 raises AssertionError.

    Test (the article's draw): With the costs 2.60, 3.20 and 4.40, a top of 5 and three bidders typed in, PriceFirstPrice is compared with 3.40 and PriceSecondPrice with 3.20, the article's hand values, at a tolerance of 0.005. Expected result TRUE. FALSE shows a second-price rule that pays the lowest cost (2.60), and doubling either price cell (6.80 or 6.40) or halving it (1.70 or 1.60) also gives FALSE. Excel check =AND(ABS(PriceFirstPrice-3.4)<0.005,ABS(PriceSecondPrice-3.2)<0.005)

    Test (simulation against the closed form): With a fixed table of draws, MeanSecondPriceSim is compared with the closed-form price CostBottomCF + 2 (CostTopCF minus CostBottomCF) / (BiddersCF + 1) and must lie within 4 standard errors. Expected result TRUE. FALSE shows the helper column taking the lowest cost in place of the second-lowest, which with S = 100000 sits about 410 of its own standard errors below 3.50, and doubling or halving the MeanSecondPriceSim cell also gives FALSE. Excel check =ABS(MeanSecondPriceSim-(CostBottomCF+2*(CostTopCF-CostBottomCF)/(BiddersCF+1)))<4*SESecondPriceSim

    Common error (fresh random draws in the check): Using live RAND() in the draw table changes the simulated means at every recalculation, and with a 4 standard error band a correct sheet then fails about 6 times in 100,000 recalculations (normal approximation, derived), so the table is pasted as values or the seed is fixed in R and Python.

    Source: Klemperer P. Auction theory: a guide to the literature. Author's copy dated May 1999, posted on the author's Nuffield College page (full text read), which states that it is published in Journal of Economic Surveys 1999;13(3):227-286, doi:10.1111/1467-6419.00083 (journal version not seen; page numbers below are the author's copy's). Appendix D, page 57, for the expected order statistics and the bids; Royal Swedish Academy of Sciences. Improvements to auction theory and inventions of new auction formats. Scientific background on the Sveriges Riksbank Prize in Economic Sciences in Memory of Alfred Nobel 2020. 12 October 2020 (full text read). Section 2.2 (Private Values) for the second-price and first-price rules.

    b_1 = c_1 + (c_high - c_1) / N; b_2 = c_2 + (c_high - c_2) / N; b_3 = c_3 + (c_high - c_3) / N; p_FP = min(min(b_1, b_2), b_3); p_SP = max(min(c_1, c_2), min(max(c_1, c_2), c_3)); d = p_FP - p_SP

Try this function

Implementations

  • Excel

    Excel expected lowest cost, price and margin of a uniform-cost reverse auction

    With the cost range in cells named CostLowest and CostHighest and the number of bidders in NumberOfBidders, the formulas return the expected lowest cost in a cell named ExpLowestCost, the expected price in ExpWinningPrice and the winner's margin in WinnerMargin, in that order.

    =CostLowest+(CostHighest-CostLowest)/(NumberOfBidders+1); =CostLowest+2*(CostHighest-CostLowest)/(NumberOfBidders+1); =ExpWinningPrice-ExpLowestCost

Assumptions

  • Independent uniform private costs on a common range in a reverse auction

    Each supplier's unit cost is an independent draw from the same uniform distribution on the interval [c_low, c_high] and is known only to that supplier, the independent private-values setting of Vickrey described in section 2.2 of the 2020 Nobel scientific background and the uniform case of Klemperer's Appendix D. Costs that are correlated, such as a shared input price, or drawn from different ranges for an incumbent and an entrant, break the closed form.

  • Truthful second-price bidding with no binding price ceiling and at least two bidders

    Each supplier bids its own cost, its dominant strategy under the second-price rule (the mirror for a reverse auction of the statement in section 2.2 of the Nobel background that each bidder's dominant strategy is to bid her value). One supplier wins the whole contract, there is no reserve price below c_high that could bind, and N is at least 2 so that a second-lowest bid exists.

  • Risk-neutral symmetric suppliers for the first-price equality of the expected price

    The statement that the first-price rule yields the same expected price rests on revenue equivalence, which section 2.2 of the Nobel background reports for risk-neutral, ex-ante symmetric bidders, and which Vickrey proved first for a uniform distribution of values. The second-price result for E_p does not need risk neutrality, since Klemperer's section 5 (Risk Aversion) states that risk aversion has no effect on a bidder's optimal second-price strategy.

Worked examples

  • Three suppliers with unit costs uniform on [2.00, 5.00] GBP per pack

    The article's illustrative tender. The expected lowest cost is 2.00 plus 3.00 / 4, which is 2.75, the expected price is 2.00 plus 6.00 / 4, which is 3.50, and the winner's expected margin is 0.75 per pack, GBP 750,000 on 1,000,000 packs.

    c_low = 2; c_high = 5; N = 3; E_c1 = 2.75; E_p = 3.5; M_w = 0.75
  • Two suppliers bidding for the same uniform-cost tender

    The article's evaluation section. With only two bidders the expected price rises to GBP 4.00 per pack and the winner's expected margin to GBP 1.00.

    c_low = 2; c_high = 5; N = 2; E_c1 = 3; E_p = 4; M_w = 1
  • Five suppliers bidding for the same uniform-cost tender

    The article's evaluation section. Five bidders bring the expected price down to GBP 3.00 per pack, with an expected margin of GBP 0.50.

    c_low = 2; c_high = 5; N = 5; E_c1 = 2.5; E_p = 3; M_w = 0.5
  • Ninety-nine suppliers approach the lowest possible cost

    Limiting case with illustrative inputs. With 99 bidders the expected price is 2.06 and the margin 0.03 per pack, close to c_low and zero, since the gap (c_high minus c_low) / (N + 1), which E_c1 adds to c_low once and E_p twice, shrinks as N grows (derived).

    c_low = 2; c_high = 5; N = 99; E_c1 = 2.03; E_p = 2.06; M_w = 0.03

Common errors

  • Selling-auction weight applied to procurement costs

    Klemperer's expected revenue of a selling auction, v_low + ((n minus 1) / (n + 1)) (v_high minus v_low), is the expected second-highest value. Copying it to costs gives the expected second-highest cost, not the second-lowest. With three suppliers the two coincide at 3.50, so the article's example does not reveal the slip, but with five suppliers it gives GBP 4.00 in place of GBP 3.00 and it rises, rather than falls, as bidders are added (computed here).

  • Expected lowest cost taken as the tender price

    The purchaser pays the second-lowest cost under the second-price rule, or a bid above cost under the first-price rule, never the winner's cost. Budgeting at the expected lowest cost of 2.75 in place of the price of 3.50 understates spend by 0.75 per pack, GBP 750,000 on the article's 1,000,000 packs (computed here).

  • Number of rivals used in place of the number of bidders

    N counts every bidding supplier, the winner included. Entering the two rivals of a three-supplier tender gives an expected price of 4.00 in place of 3.50 and a margin of 1.00 in place of 0.75 (computed here).

Sources

  • Klemperer on expected order statistics of uniform values and second-price revenue

    Klemperer P. Auction theory: a guide to the literature. Author's copy dated May 1999, posted on the author's Nuffield College page (full text read), which states that it is published in Journal of Economic Surveys 1999;13(3):227-286, doi:10.1111/1467-6419.00083 (journal version not seen; page numbers below are the author's copy's). Appendix D (Examples Using the Uniform Distribution), page 57, states that the expected k-th highest value among n values independently drawn from the uniform distribution on [v_low, v_high] is v_low + ((n + 1 minus k) / (n + 1)) (v_high minus v_low), and, under the heading Bidding with Independent Private Values, Revenue Equivalence, and Marginal Revenues, for risk-neutral bidders with independent private values, that everyone bids her true value in a second-price auction, so the seller's expected revenue is the expected second-highest value, v_low + ((n minus 1) / (n + 1)) (v_high minus v_low). Section 5 (Risk Aversion) states that risk aversion has no effect on a bidder's optimal second-price strategy. The procurement forms E_c1 and E_p are the printed fact with k = N and k = N minus 1; the reverse-auction reading is derived here.

    View source →

  • Nobel 2020 background on independent private values, truthful second-price bids and revenue equivalence

    Royal Swedish Academy of Sciences. Improvements to auction theory and inventions of new auction formats. Scientific background on the Sveriges Riksbank Prize in Economic Sciences in Memory of Alfred Nobel 2020. 12 October 2020 (full text read). Section 2.2 (Private Values) describes Vickrey's model of statistically independent private valuations with risk-neutral, ex-ante symmetric bidders, states that in the second-price auction each bidder's dominant strategy is to bid exactly what the object is worth to her, and that all four standard formats yield the same expected revenue, the revenue-equivalence theorem. Under the heading Extensions and Further Research in the same section it states that Vickrey proved the theorem for a uniform distribution of values in 1961, and section 2.1 (A General Framework) states that first-price auctions are common vehicles for procuring goods and services and for awarding public contracts.

    View source →

Canonical Identity