A handful of sellers are taking everything: is it the ranker or the market?
In short
Re-rank the same queries with every history-derived signal removed, then compare the share distribution against what actually happened. If concentration largely survives, the market genuinely is concentrated and the repair is recruitment. If it collapses, the ranker has been compounding its own past, and the repair is in the signals and the click data feeding them.
Key takeaways
- Concentration is not evidence of a broken ranker until a counterfactual says the ranker caused it.
- Measure share of leads against share of eligible supply per query class, not against total seller count.
- History-weighted signals make ranking a feedback loop: yesterday's winner is today's default answer.
- Position bias means click data grades the ranker's own past choices, so it cannot audit them.
- A market with 40 sellers and 6 postcodes of coverage is concentrated by geography, and no re-ranking fixes it.
There are two very different situations behind the same complaint, and they need opposite responses. Either the ranking function built the concentration — it weights past volume, past volume came from past ranking, and the loop has been running for a year — or the market really does have five sellers who are better, faster and more available than everyone else, and the distribution is honest. A counterfactual re-rank distinguishes them in an afternoon. Opinions do not, and the argument recurs every quarter until somebody measures it.
Whether to cap a dominant seller's share is a separate question with its own answer, argued in capping how much one seller can win. Decide what caused the concentration before deciding whether to intervene in it.
Measure the shape before arguing about its cause
Most concentration arguments run on an anecdote: a supply manager notices the same names in every result. Replace it with two numbers per query class — a query class being a category-and-area pair such as deep cleaning in one postcode district. Take the share of accepted leads held by the top 5 sellers, and the share of eligible supply those 5 represent. A top-5 share of 62% is unremarkable if only 7 sellers are eligible and alarming if 180 are.
The counterfactual: yesterday's queries, without the memory
- Replay a fixed window of real requests — a week is usually enough, and use the eligibility filter as it was at the time, not as it is now.
- Score each request twice. Once with the live scoring function. Once with every history-derived signal set to a neutral constant: completed jobs, acceptance rate, review count, review score, response-time averages, badges earned from volume.
- Keep the non-history signals in both runs. Distance, availability, price, verification state, category fit and language are properties of the seller today, not echoes of what the ranker did last year.
- Compare the top-5 share of the two result sets over the same requests, and the rank correlation between them. A concentrated market with a neutral ranker still concentrates, because distance and availability alone favour whoever covers the most ground.
- Read the split. Concentration that survives the neutral run is structural. Concentration that collapses to near-uniform was manufactured by the signals you just switched off.
This is an offline job over logged requests, so it is cheap to run and safe to repeat, and it belongs in a scheduled harness rather than a notebook somebody has to rediscover. Building that harness is ordinary automation work — the sort of thing we ship under AI agents and automation — but note the volume: if the replay takes a scoring call per candidate per request, its cost grows with your candidate sets, which is the same arithmetic that governs which stage of matching stopped being linear.
Four mechanisms that manufacture a winners' circle
| Mechanism | How it compounds | Signature in the re-rank |
|---|---|---|
| History-weighted signals | Jobs completed raises rank, rank raises jobs completed. New supply never accumulates the evidence the score demands. | Concentration collapses when history signals go neutral; rank correlation between runs is low |
| Position bias in the click data | Signals trained on clicks inherit the old ranking, so the model learns which sellers the ranker used to promote | Concentration survives a neutral re-rank but collapses when positions are randomised in a live test |
| Eligibility that excludes most supply | Concentration is set before ranking runs, by filters on radius, verification or category | Median eligible-seller count per request is single digit; both runs look the same |
| Genuine coverage scarcity | Five sellers cover the whole city and everyone else covers two districts each | Both runs concentrate; top-5 share tracks share of area-hours covered |
The first two are ranking defects and are fixable inside the scoring function. The last two are not ranking problems at all, and every hour spent tuning weights against them is wasted. Before concluding that the mid-tier is being starved, confirm the mid-tier was actually reached: leads recorded as sent are not leads anyone saw, and the difference is the subject of what sent, delivered and read actually prove. Sellers who never received the offer look identical in the acceptance data to sellers who lost on rank — the four-way split traced in requests that reach sellers and nobody takes.
Click data cannot audit the ranker that produced it
A seller in position 1 is clicked more than an equally good seller in position 6 for reasons that have nothing to do with quality: buyers read from the top and stop early. So any signal derived from clicks or bookings encodes the previous ranking, and feeding it back trains the model to agree with itself. This is why a counterfactual with history removed can still under-report the problem — the remaining signals may themselves be contaminated.
- Estimate the bias rather than assuming a curve. Randomly swap adjacent positions on a small share of traffic and measure the click difference between a seller shown at 2 versus 3. That difference is your position effect, measured on your buyers rather than borrowed from someone else's.
- Weight logged interactions by the inverse of the chance that result was shown at all. Interactions from rarely-shown sellers count for more, which is what stops the log from being a record of your own past decisions.
- Give new supply a bounded exploration budget so evidence exists to weight — the mechanism argued in giving a listing with no history a chance.
- Keep seller-level performance data inside your own boundary when you can. It is commercially sensitive in a way listing text is not, and shipping it to a third-party ranking service is a decision that deserves the scrutiny set out in private and on-premises model deployment.
A ranker trained on its own clicks is not learning what buyers prefer. It is learning what it showed them.
When the honest answer is that you need more sellers
If both runs concentrate and the eligible-seller count per request is small, the market is thin and the concentration is a description of your supply, not a bug in your code. In a thin, time-constrained market the binding constraint is usually coverage and travel time rather than match quality at all, which is the whole argument in dispatching forty cleaners across one city. Redistributing demand across a pool that cannot serve it produces late arrivals and cancellations, and the buyer side pays for the fairness gesture.
The lever that does work here is the allocation rule rather than the score: rotation with a quality gate spreads demand deliberately, an auction concentrates it on whoever can pay, and the two behave very differently when supply is scarce — compared directly in auction or round-robin for handing out demand. Change the rule knowingly, or recruit. Do not do it by re-weighting review counts and hoping.
Signals, logging, or recruitment
- Does concentration survive the neutral re-rank? If it collapses, the fix is in the signals: cap the influence of cumulative counts, prefer rates over totals, decay history so a year-old streak stops deciding today's result.
- Does it survive the neutral run but collapse under randomised positions? Your training data is biased. Fix the logging and the weighting before touching the model, because retraining on the same log reproduces the same winners.
- Is the median eligible-seller count 3 or fewer? Stop. This is a filter and coverage problem, and ranking is reordering a list that barely exists.
- Do both runs concentrate with a wide eligible pool? The distribution is real. Decide whether you want it — sometimes concentrating demand on the best sellers is exactly right — and if you do not, change the allocation rule rather than the score.
- Whatever you change, re-run the counterfactual monthly. Concentration returns quietly, because every ranking function that uses history is a loop with a slow time constant.
The rest of this silo sits under matching, ranking and dispatch, inside our marketplace and two-sided platform practice.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
How much seller concentration is normal in a marketplace?
There is no threshold worth quoting, because the honest comparison is against your own eligible supply rather than against other platforms. A top-5 share of 60% is expected where only 8 sellers can serve the request and is a warning where 200 can. Compute the ratio per query class — category and area — and track its change over time; a share that climbs while eligible supply also climbs is the signal that matters.
What is a counterfactual re-rank, in practice?
It is a replay of real requests scored twice: once with the live function, once with every history-derived signal held at a neutral value. You are asking what the results would have looked like if the ranker had no memory of its own past decisions. Comparing the two share distributions over the same requests tells you how much of the concentration your scoring function created.
Should we just cap how many leads one seller can receive?
Not as a first move, because a cap treats the symptom and can cost you coverage. Establish the cause first: a cap applied to genuine coverage scarcity redirects work to sellers who cannot do it, while a cap applied to a feedback loop hides a defect you could have fixed in the signals. The case for and against a visibility cap is a separate argument with its own conditions.
Can we fix this by removing reviews and job counts from ranking?
Removing them outright usually makes results worse, because those signals do carry real quality information. Cap their influence instead: use rates rather than cumulative totals, apply diminishing returns above a modest volume, and decay old evidence so a seller cannot coast on last year's activity. The counterfactual tells you how much influence to remove rather than leaving it to taste.
- ranking
- supply side
- position bias
- measurement
The work behind this page
Builds from our portfolio that this page draws on.
HaulBoard
An AI freight load board that matches every open load to the best-fit carrier, prices each lane on live spot-rate data, and tracks broker margin on every move.
LogisticsFieldRoute
An AI field-service platform that auto-dispatches the best-matched technician, optimizes routes, and tracks first-time-fix against every SLA.
OperationsRead next
- Matching got slower as supply grew: which stage stopped being linearPlot each stage's duration against candidate-set size on log-log axes. The slope names the stage that stopped being linear, and each stage has a structurally different repair.diagnostic
- Acceptance rate: what it measures, and when it measures the platformAccepted over offered sounds like a measure of a seller. The platform chooses the denominator, so an uncorrected acceptance rate is partly a measure of your own targeting.definition
- Dispatch radius: a travel-time boundary that only looks like a circleThe circle on the map is a proxy. The real boundary is however far a provider can travel in an acceptable time, which is different in every direction and at every hour.definition
- Lead distribution: the four shapes a request can reach sellers inBroadcast, sequential offer, shortlist, exclusive assignment. The shapes differ in who pays when nobody answers, which is also the question that identifies yours.definition
- Signal, score and sort order: three layers people keep collapsingA signal is a measurement, a score is policy and a sort is a product rule that can ignore both. Most ranking arguments are two people proposing changes at different layers.definition
- Availability: a set of intervals, not a grid of day cellsAvailability is not a stored fact. It is the answer to a question, computed from recurring rules, exceptions and what has already been consumed — and a day-cell table is a cache of that answer.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation