Ad-Reports und Bidder-Logs weichen aus einem von zwei Gründen voneinander ab: Events gehen auf dem Weg in die Reports verloren, oder beide Seiten zählen sie nach unterschiedlichen Regeln. Eine einzige Nachzählung anhand der Auktions-IDs zeigt, welcher Grund vorliegt. Die Antwort entscheidet, ob Sie die Pipeline reparieren, zu einem Managed Service wechseln oder sie neu bauen.
Wenn Ad-Reports nie mit den Bidder-Logs übereinstimmen, können hinter derselben Abweichung zwei Probleme stecken. Entweder gehen Datensätze zu Impressions und Klicks, sogenannte Events, auf dem Weg in die Reports verloren, oft bei Spitzenlast, oder jede Seite zählt sie nach ihren eigenen Regeln. Eine Nachzählung anhand der Auktions-IDs, also der Kennungen, die eine Exchange jeder Auktion gibt, trennt die beiden. Machen Sie sie, bevor Sie jemanden beauftragen, denn eine neue Pipeline allein behebt nur das erste Problem.
Die kurze Antwort: Ordnen Sie die Auktionen, die Ihr Bidder gewonnen hat, über die Auktions-ID den Impressions in Ihren Reports zu und vergleichen Sie die Zahlen Stunde für Stunde. Zählen Sie einen Tag später noch einmal. Steigt der Anteil der noch fehlenden gewonnenen Auktionen in den Stunden mit der höchsten Last, verliert die Pipeline Events, und das erfordert Engineering-Arbeit. Sind die Events vorhanden, landen aber in einer anderen Stunde, tauchen doppelt auf oder werden herausgefiltert, zählen die beiden Seiten unterschiedlich. Die Lösung ist dann ein einziges schriftliches Regelwerk für das Zählen, das für beide Seiten gilt.
Lesen Sie auch
Ihre Bidder-Logs erfassen jede Auktion, an der Ihr Bidder teilgenommen hat, jedes Gebot, das er abgegeben hat, und jede Auktion, die er gewonnen hat. Ihre Reports entstehen aus Events, die später eintreffen, etwa Impressions und Klicks aus Browsern und Apps. Die Abweichung zwischen beiden hat eine von zwei Ursachen, oder beide:
So oder so kostet die Abweichung Geld. Wenn Sie Werbetreibenden auf Grundlage Ihrer Reports Rechnungen ausstellen, berechnen Sie für verlorene Impressions zu wenig und für doppelt gezählte zu viel, während jede Exchange mit Ihnen in der Regel nach ihrer eigenen Zählung abrechnet. Ein Bidder, der aus diesen Events lernt, setzt seine Gebote außerdem auf Basis falscher Zahlen.
Gleichen Sie die beiden Seiten Event für Event ab. OpenRTB, das Protokoll des IAB Tech Lab für Real-Time Bidding, gibt jeder Auktion eine Bid-Request-ID, die die Exchange vergibt, und jeder Impression im Request eine eigene ID. Ihr Bidder kann die Exchange bitten, diese IDs in die Benachrichtigung zu schreiben, die sie sendet, wenn Sie eine Auktion gewinnen, und in die Anzeige selbst. Dann trägt jedes Impression-Event dieselben IDs wie Ihre Bidder-Logs.
Keine der beiden IDs reicht für sich allein. Nach OpenRTB 2.6 legt jede Exchange ihre eigenen Request-IDs fest, nichts hindert also zwei Exchanges daran, dieselbe zu verwenden. Eine Impression-ID ist nur innerhalb ihres Requests eindeutig und beginnt meist bei 1. Gleichen Sie deshalb über drei Werte zusammen ab: die Exchange, die Request-ID und die Impression-ID.
Machen Sie dann die Nachzählung:
Tragen Ihre Events keine Auktions-IDs, ist deren Ergänzung die erste Korrektur, denn ohne sie kann die Nachzählung nur Gesamtsummen vergleichen. Der oben verlinkte technische Artikel über Ad Measurement behandelt Zeitstempel und verspätete Events ausführlich.
Nehmen Sie eine Pipeline auf Basis von Kafka und ClickHouse. Ein Collector empfängt jedes Event aus dem Browser oder der App und schreibt es in Kafka, eine Message Queue. Ein Loader liest aus Kafka und schreibt die Events in Batches nach ClickHouse, in die Analysedatenbank hinter Ihren Reports. Bei Spitzenlast können Events an jedem Schritt verschwinden:
Lassen Sie sich von Ihren Engineers diese Aufzeichnungen aus der Spitzenstunde eines schlechten Tages geben:
Die letzte Aufzeichnung leistet die meiste Arbeit. Fällt die Zählung eines Schritts bei Spitzenlast ab, während die des Schritts davor stabil bleibt, sind die Events zwischen diesen beiden Schritten verloren gegangen.
Die bestehende Pipeline reparieren:
Zu einem Managed Service wechseln, etwa Amazon MSK für Kafka oder ClickHouse Cloud für ClickHouse, bei dem der Anbieter die Server betreibt:
Die Pipeline neu bauen:
Diese Arbeit machen zwei Arten von Firmen, und dieser Artikel stellt keine Rangfolge zwischen ihnen auf. AdTech-Engineering-Firmen bauen Bidder, Exchanges und Ad Server und wissen daher, woher Auktions-IDs kommen; fragen Sie aber, ob sie eine Event-Pipeline in Ihrem Volumen betrieben haben. Data-Engineering-Firmen bauen Event-Pipelines für viele Branchen, allerdings nicht immer für AdTech. Fragen Sie sie, ob sie mit OpenRTB gearbeitet und Zählungen mit einer Exchange abgeglichen haben.
Stellen Sie jeder Firma auf Ihrer Liste dieselben fünf Fragen.
Wie entfernen Sie Duplikate? Achten Sie auf eine ID, die jedes Event bei seiner Entstehung erhält, noch vor jedem erneuten Sendeversuch, gebildet aus den Auktions-IDs und dem Event-Typ. Die Pipeline entfernt Duplikate zweimal: einmal beim Speichern der Events und noch einmal, wenn Reports sie lesen. Der zweite Durchgang ist wichtig, weil ClickHouse Duplikate im Hintergrund zu Zeitpunkten entfernt, die Sie nicht planen können. In seiner Dokumentation heißt es, dies „garantiert nicht, dass keine Duplikate vorhanden sind“.
Wie gehen Sie mit Events um, die verspätet eintreffen? Achten Sie auf einen festgelegten Zeitraum je Event-Typ, in dem sich die Zahlen noch ändern können, und einen Zeitpunkt, ab dem sie endgültig sind. Ein Event, das noch später eintrifft, sollte trotzdem gezählt und als verspätet markiert werden, statt verworfen zu werden.
Wie gleichen Sie Ihre Zahlen mit unseren Bidder-Logs und den Reports unserer Partner ab? Achten Sie auf eine tägliche Nachzählung anhand der Auktions-IDs und eine schriftliche Begründung für jede Differenz. Vereinbaren Sie, ab welcher Größe der Abweichung jemand das Problem bei der Exchange anspricht.
Wie testen Sie das System oberhalb unserer Spitzenlast? Bitten Sie die Firma, einen aufgezeichneten Tag mit hoher Last mit einer höheren Rate abzuspielen als in Ihrer Spitzenstunde. Während des Replays schaltet sie einen Collector und einen Datenbankserver ab. Danach sollte jedes Event entweder gespeichert oder als verworfen gezählt sein.
Wem wird der Code gehören? Ihrem Unternehmen, schriftlich festgehalten, mit dem Code vom ersten Tag an in Ihren Repositories. Alles, was die Firma behält, sollte namentlich aufgeführt sein, mit einer Lizenz, es nach Ende der Arbeit zu nutzen und zu ändern.
Im Bereich AdTech arbeitet amBrain an DSP-Entwicklung, Real-Time-Bidding-Plattformen und Ad-Exchange-Engineering. Zu dieser Arbeit gehört RTBBidder, eine Demand-Side-Platform, die amBrain für einen Kunden gebaut hat.
amBrain diagnostiziert langsame Trading- und AdTech-Systeme: Die laufende Plattform wird durchgängig vermessen, und der Bericht benennt, wohin die Zeit geht.
amBrain entwickelt seit 2019 Software. Es arbeitet in drei Formaten: vollständige Umsetzung, ein dediziertes Team oder in Ihr Team eingebettete Entwickler. Der Kunde behält das volle Eigentum an Produkt und Code, ausgenommen die wiederverwendbaren Komponenten von amBrain.
Dieser Artikel ist keine Case Study. Er beschreibt keine Event-Pipeline eines Kunden, und RTBBidder wird nur als DSP genannt, die amBrain gebaut hat. Kafka und ClickHouse dienen hier als Beispiel-Stack, nicht als Beschreibung der Projekte von amBrain oder der Tools, die es einsetzt. Der Artikel nennt weder Preise noch Zeitpläne.
Wenn Ihre Reports und Ihre Bidder-Logs nicht übereinstimmen, machen Sie zuerst die Nachzählung. Legen Sie dann ihre Ergebnisse und dieselben fünf Fragen jeder Firma auf Ihrer Liste vor, amBrain eingeschlossen.
Bringen Sie Ihre aktuelle Architektur und den Fehlerfall mit, der Sie beunruhigt - wir gehen ihn in einer halben Stunde gemeinsam durch.