Echtzeit Cluster Bildung von Haushalten aus View Logs – Ein POC

Folgender Use Case: Die meisten Fernseher heut zu tage sind „smart“. Das bedeutet in erster Linie, dass sie an das Internet angeschlossen sind. Dadurch kann man Streaming Dienste wie Netflix, Amazon Prime, etc. nutzen. Neben diesen Anbietern haben die „normalen“ Fernsehsender wie Pro7, RTL usw. ebenfalls Streaming Angebote, die wie in einer Art Mediathek genutzt werden können. Ebenso sind Interaktionen wie Spiele etc. möglich. Bei den Streaming Angeboten dieser Sender wird natürlich genauso wie beim linearen Fernsehen Werbung eingeblendet. Letztens habe ich eine Serie über Streaming angeschaut und es wurde immer die gleiche Werbung eingeblendet. Sogar 3x hintereinander während eines Werbeblockes. Es handelte sich um eine Toilettenpapier Werbung wo eine kleines Mädchen sich wie eine Prinzessin fühlte, wenn sie dieses spezielle Toiletten Papier benutzte. Nach 1 Stunde konnte ich den Text nachplappern. Als ich dann bemerkte was da eigentlich passiert habe ich entnervt umgeschaltet.

Was zeigt uns das? Personalisierte Werbung ist vielleicht doch nicht schlecht. Denn bei vielen Big Data und Analytics Bemühungen großer Anbieter (Ja, auch Facebook und Google) geht es letztendlich um personalisierte Werbung. Der Werbetreibende spart Geld (und kann es vielleicht für ein besseres Produkt oder höhere Gehälter verwenden) und der Endkunde bekommt Werbung präsentiert, welches ihn mehr interessiert. Denn Werbung bekommt man eh permanent serviert, warum also nicht für etwas was meinen persönlichen Präferenzen entspricht. Was ist da so schlecht dran. Datenschutz Advokaten in der EU malen den Teufel dabei an die Wand, stellen die Firmen als Bösewichte und Kraken dar, die mit den Daten der Nutzer Geld verdienen, inkl. der Kanzlerin. Ja, und? Wenn einen das stört sollte man Facebook halt nicht nutzen, oder ein anderes Programm als Gmail verwenden. Die Datenschutzverordnung der EU ist ein völlig überreguliertes Konstrukt und ein echter Blocker bei Innovation.

Nach diesem persönlichen Exkurs aber wieder zurück zu der Technik. Wir haben uns überlegt, wie könnte man anhand von Daten/Logfiles Haushalte, geschaute Sendungen in Cluster aufteilen. Der Sender könnte mit diesen Daten bestimmen welche Interessen ich / mein Haushalt hat, mir entsprechende personalisierte Angebote machen und die Einblendung von gleicher Werbung verhindern. In dem folgenden beschreibe ich die Herausforderungen und eine technische Pipeline für die Echtzeit Cluster Bildung.

Beschreibung des Szenarios:

(1) Eine Familie hat ein SmartTV und mehrere Devices über die die Mitglieder im Internet Surfen. Weiter gehen wir davon aus, dass eine Fernsehanstalt auch über ein Netzwerk an Webseiten verfügt die zum eigenen Unternehmen oder zu Partnerunternehmen gehört. Jeder View (SmartTV, Handy, Tablet, etc.) im Haushalt wird auf den Backend Servern geloggt. In den Logfiles steht die IP Adresse des Routers, die MAC Adresse des Devices, der Content der geschaut wurde und ein Timestamp.

(2) Die Logfiles werden von den Backend Servern automatisiert abgeholt und in ein Kafka Cluster geschrieben. Ein weiterer Dienst holt die Daten aus Kafka ab, verarbeitet, aggregiert und bildet Cluster. Die Ergebnisse werden für die Visualisierung in eine MongoDB geschrieben.

(3) Zur Visualisierung kommt eine Python Flask Anwendung, socket.io und d3.js zum Einsatz.

Hier die Gesamtarchitektur als Schaubild:

Und damit wir eine Vorstellung von dem Endergebnis haben:

Dieser Netzwerk Graph wird in Echtzeit aufgebaut und aktualisiert. Sodass ich sehen kann welche Haushalt-Cluster gebildet worden sind. Ein Cluster besteht dabei aus ein oder mehreren MAC Device Adressen (Handy, Tablet, Fernseher, etc.) und ein bis mehreren IP Adressen. Warum mehrere IP Adressen? Normalerweise gehen alle Devices mit der gleichen IP Adresse (die des Internet Routers im Haushalt, meist Fritz Box) ins Internet. Diese IP Adressen sind nicht fest vergeben, sondern der Internet Provider vergibt in bestimmten Abständen neue IP Adressen. D.h. die IP alleine ist kein Kriterium, um verschiedene Devices einem Haushalt zuzuordnen. Zumindest ist sie das nur für ein bestimmtes Zeitfenster. Diesen Umstand müssen wir in unserem Clustering Algorithmus berücksichtigen. An dem ersten Haushalt habe ich den noch den Content hinzugefügt, welches die Devices aufgerufen haben. Was könnte man jetzt mit diesen Clustern machen?

Fall1: Im Haushalt 1 hat Device1 Content1 und Content2 geschaut und Device2 Content2. Ich könnte, wenn der Content kategorisiert ist die Devices einordnen in Altersgruppen und sogar Geschlecht und somit passende Werbung einspielen. Z.b. hat sich Device1 Rezepte im Internet angeschaut (Content1) und eine Kochsendung (Content2). 

Fall2: Ausgehend von Fall1 und der Zeitinformation könnte ich Werbung, die in der Kochsendung (Content2) eingeblendet wurde, 5 Minuten später auch auf der Rezepte Seite (Content1) anzeigen. 

Fall3: Man stelle sich vor: Haushalt1 und Haushalt2 sind Nachbarn oder befreundet. Wie findet man das raus? Wenn z.B. ein Device (Device4 bei Haushalt2) grundsätzlich in der Kohorte Haushalt2 auftaucht (Zeitinformation) aber ab und zu auch mal in Haushalt1. Dann kann man davon ausgehen dass eine Beziehung zwischen diesen Haushalten besteht. Sprich einen Social Graphen aufbauen, der auch zusätzlich über Content definieren lässt. Dies wiederum ermöglicht es der Fernsehanstalt personalisierte Werbung (bspw. ein Kochbuch, oder einen Webergrill zur Sommerzeit, oder einen schönen Rotwein den man gerne mit Freunden trinkt) auszuspielen.

Fall4: Wenn ein Haushalt viele Devices in der Kohorte hat, kann man davon ausgehen, dass der Haushalt über ein entsprechendes Einkommen verfügt und auch hier entsprechende Werbung platzieren.

Fall5: Die Fernsehanstalt könnte ihren Werbekunden die Möglichkeit geben zu wählen zu wieviel % das Werbebudget auf mobile Endgeräte, Tablets und Fernsehern aufgeteilt werden soll.

Ich könnte hier noch etwas weiter machen mit den entsprechenden Möglichkeiten, ich denke es ist klar in welche Richtung das geht. Wie gesagt es geht hier um Effizienz und Relevanz der ausgespielten Werbung und nichts weiter. Nicht um Ausspähen und Verschwörungen gegen Nutzer. Oh, es hat gerade an der Tür geklopft, ich nehme an die Datenschutzbehörde der EU mit Knüppeln. Wenn Ihr nichts mehr von mir hört hier bitte ruft jemanden zu Hilfe.

Ok, war nur der Pizzabote. Weiter im Text. Da dies ein POC ist haben wir keine echten Daten, sondern haben uns diese mit einem kleinen Python Script selbst generiert. Das Script läuft unendlich und generiert „View“ Daten, welche direkt in Kafka geschrieben werden. Das Ganze setup läuft bei mir auf dem Laptop und kann natürlich entsprechende in die Cloud migriert werden, damit es skalieren kann. Die eigentlich Logik steckt in einem Python Script, welches in einem Produktions Setup in Apache Spark integriert werden müsste. Nach der Clusterbildung in Python werden die Ergebnisse in die MongoDB geschrieben. Von hier aus hat eine Webanwendung Zugriff und kann über Websockets die Ergebnisse in Form des Netzwerkgraphen präsentieren. Hier ein Video von dem Laufenden Prozess: 

Ich hoffe ich konnte demonstrieren wie so etwas funktionieren kann und welche Pipelines man für solch ein Setup einsetzen kann. Solltet Ihr weitere Fragen haben oder eine LiveDemo sehen wollen schreibt mir an mighani@skillbyte.de. Hassmails wegen Datenschutz und so bitte an devnull@skillbyte.de. Ich antworte bestiiiiimt.