Skip to content
All worked examples

Live events and ticketing

GOIllustrative · 6 min read

The problem was economic, so the answer was too

A ticketing platform wanted an ML bot-detector. Every control that replaced it is standard anti-bot practice and none of it is proprietary; what the engagement decided was to refuse the classifier, and to start measuring whether any of it works.

The controls were off-the-shelf. The decision was refusing the model and finally measuring the thing everyone argued about.

Problem

High-demand on-sales were being drained in seconds by automated buyers, then resold. Fans complained, promoters threatened to leave, and the engineering team proposed a machine-learning classifier over request telemetry.

Context

A platform running scheduled on-sales with extreme, short traffic peaks and a long quiet tail.

Current architecture

A web front end, a queue at on-sale, a monolithic booking service, and rate limits by IP address.

Constraints

  • Adversarial: the other side is funded, motivated, and observes every change you make.
  • Accessibility: friction cannot exclude legitimate buyers using assistive technology or shared connections.
  • Latency: anything in the buy path must add negligible time at peak.
  • Legal: resale rules differ by territory and by promoter contract.

Evidence

Each statement placed on the ladder before it was used.

  • assumption

    Most inventory in the first minute goes to automated buyers. Believed from complaint volume; never measured against actual fulfilment data.

    No external source: stated for the example

  • fact

    Rate limiting is applied per IP address only. Residential proxy pools defeat it, and the platform had already seen this.

    No external source: stated for the example

  • constraint

    Any classifier must decide inside the buy path, where the added latency is itself a competitive disadvantage at peak.

    No external source: stated for the example

  • hypothesis

    A model over request telemetry could separate automated from human buyers well enough to act on.

    No external source: stated for the example

  • tradeoff

    A false positive is a fan who cannot buy a ticket. That is the most expensive error in the business.

    No external source: stated for the example

Questions that changed the answer

  1. 01What fraction of first-minute inventory actually ends up on resale? This is knowable from resale listings, and it had not been checked.
  2. 02How quickly would an adversary notice a new detector and adapt?
  3. 03Who retrains the model when they do, and how fast can they ship?
  4. 04What is the acceptable false-positive rate when the error is a genuine fan turned away?

Options

Including the one nobody wanted to discuss.

  • ML bot classifier in the buy path

    Train on labelled traffic, score each request, block or challenge.

    What it costs: Labels are a guess, the adversary adapts within days, latency is added in the worst place, and false positives hit fans.

  • Change the economics

    chosen

    Randomised queue admission, per-identity purchase limits verified at delivery, delayed ticket issuance, and price caps on resale where contracts allow.

    What it costs: Does not identify bots at all. It makes owning a thousand of them worth less.

  • Buy a bot-mitigation vendor

    A commercial edge product with its own detection.

    What it costs: Moves the arms race to a supplier with more data than the platform. Kept as a complement rather than the strategy.

Economics

Four horizons, not one estimate.

Build
Classifier: model plus labelling plus serving. Economic controls: queue changes and identity checks in the existing booking service.
Run
The decisive difference. A classifier needs continuous labelling, retraining and monitoring forever; a purchase limit needs none.
Change
Every adversary adaptation is a model change on one path and a parameter change on the other.
Exit
Low for economic controls. Medium for a vendor, whose challenge pages become part of the fan experience.

Decision

Do not build a classifier. Change the payoff: randomised queue admission, identity-bound limits enforced at delivery rather than checkout, delayed issuance, and resale price caps where the promoter contract allows. Keep a commercial edge product for volumetric abuse only.

Why

Two things, and only the first is arguable. Detection problems where the adversary profits and adapts are not stable learning problems, because the distribution moves in response to your model, on the adversary’s schedule, and the retraining bill never ends. Controls that reduce the value of a successful purchase do not need to identify anyone, which is why they do not decay. The controls themselves, from queue randomisation and identity-bound limits to delayed issuance and resale caps, are published advice from every vendor in this market, and were presented as such, not as a design of ours. The genuinely missing piece was measurement. Nobody had matched resale listings back to fulfilment records, so every claim about how much inventory bots were taking, and every claim about whether a control helped, was an opinion.

Why not the alternatives

  • ML bot classifier in the buy path: It commits the team to a permanent retraining race, adds latency where it is least affordable, and pays for errors in turned-away fans.
  • Buy a bot-mitigation vendor: Useful against volumetric abuse and retained for that, but it outsources the same arms race rather than ending it.

Trade-offs accepted

  • Randomised admission removes the ‘first click wins’ story some fans believe in, and that has to be explained honestly.
  • Identity-bound limits add friction at delivery, and the accessibility path has to be designed in, not bolted on.

Reversibility

low reversibility

Every control is a parameter. Limits, queue randomisation and issuance delay can be tuned or withdrawn per on-sale, which is exactly what an adversarial setting demands.

Non-functional requirements

  • No added latency in the buy path at peak
  • No control may depend on JavaScript execution alone
  • Every rejection must be explainable to the fan it affected

Decision gate

GOPAUSESTOP

GO, with the measurement the argument had been missing: resale listings matched against fulfilment, so the effect of each control is observable.

Implementation

Queue randomisation and purchase limits in the existing booking service. Delivery-time identity binding. Resale caps configured per promoter contract. No new platform.

What the decision was expected to achieve

A smaller share of inventory reaching resale, and fewer fan complaints per on-sale. It would be proven by matching resale listings to fulfilment records. That measurement should have existed before anyone proposed a model.

No outcome is claimed. This is an illustrative example, so there is nothing measured to report, and a real engagement would state what happened and how it was verified.

Lessons

  • Against an adaptive adversary, a model is a subscription to an arms race. Price the retraining before you price the build.
  • You do not have to identify the attacker to beat them. Make the attack worth less.
  • When the remedy is commodity advice, say so, and spend the engagement on the part nobody has done, which here was measuring the problem at all.
  • When the expensive error is a false positive on your own customer, that fact sets the design and the accuracy metric does not.

Free · 30 minutes · one real problem

Bring a problem. Leave with clarity.

Thirty minutes, one real problem, structured thinking. If there's no value, there's no engagement.