Apache Lucene Basics

Wollten Sie nicht immer schon mal wissen, was im Hintergrund einer Suchmaschine abläuft. Warum sind Search Engines so schnell? Wie lautet der Such-Algorithmus von Google?

Vielleicht können wir wenigstens eine dieser beiden Fragen klären. Google hütet sein Geheimnis gut, aber wer z. B. auch alternative Suchmaschinen wie DuckDuckGo kennt, der kann hier einmal hinter die Kulissen schauen. Denn DuckDuckGo funktioniert mit der Suchmaschinen-API Lucene.

Apache Lucene ist eine hochperformante Suchmaschinen-Bibliothek, die komplett in Java geschrieben ist. Wer direkt in die Tiefen der API eintauchen will, kann sich das Projekt von der Homepage runterladen und in den Quellcode reinschnuppern: Apache Lucene.

Wer aber nur ein grobes Verständnis über die Technologie dahinter erhalten möchte, kann sich den Einstieg auch mit diesem Artikel erleichtern:

Abgrenzung zu Solr und Elastic Search

Bekannte Suchmaschinen im Bereich Big Data oder Software Engineering sind Elastic Search und Solr. Wie passt hier Lucene rein? Nun, Lucene ist einfach formuliert die Basis für das, was unter der Haube passiert. Sowohl Elastic Search als auch Solr bauen auf Lucene auf und bieten dem Anwender einen einfachen Zugang zu einer Bibliothek, in Form von Webschnittstellen und fertigen Implementierungen verschiedener Anwendungsfälle.

Lucene wird für das Erstellen und Verwalten des Such-Indexes verwendet, der erst einmal nicht mehr ist als ein Dokumentenspeicher. Für eine erfolgreiche Volltextsuche braucht es aber doch noch etwas mehr. Schauen wir uns dazu einmal die grundlegenden Probleme bei einer Volltextsuche anhand von relationalen Datenbanken an:

Was ist ein Index?

Jeder hat vermutlich schon einmal den Satz gehört: „Die Datenbank ist etwas langsam, wir sollten Indizes verwenden“. Was steckt denn eigentlich hinter diesen Indizes?

Die Antwort ist einfach: Sie machen die Suche auf der Datenbank schneller. Interessant ist aber das Warum.

Werfen wir einen Blick in eine ganz normale Datenbanktabelle einer relationalen Datenbank wie der Oracle DB:

ID SURNAME NAME ADDRESS TEL_NUMBER
1 Smith John Groove Street 5551
2 Gardner Hellen Any Town 5552
3 Lambert Zachariah First Street 5553

Hier sehen wir erst einmal nichts Besonderes. Wir führen ein klassisches Select-Statement aus: SELECT * FROM TABLE WHERE NAME=’John‘. Was jetzt intern passiert, ist, dass die Datenbank die Spalte NAME durchsucht und uns alle Treffer in einem Result Set zurückgibt. Da die Datenbank selbst aber nicht weiß, wie viele Johns es in der Tabelle gibt, muss sie wohl oder übel alle Einträge überprüfen. Denn selbst wenn sie, wie in unserem Fall, direkt im ersten Eintrag schon einen Treffer hat, gibt es keine Garantie, dass es nicht weiter unten noch einen John gibt. Versteht sich von selbst, dass dieses Vorgehen nicht besonders performant sein kann. Vor allem dann nicht, wenn wir 1.000.000 Einträge durchsuchen müssten. Wir legen nun einen Index über die Spalte NAME, was zur Folge hat, dass die Datenbank eine zweite Tabelle anlegt:

NAME RECORD_POINTER
Hellen 0 … 0xffffffff
John 0 … 0xffffffff
John 0 … 0xffffffff
Zachariah 0 … 0xffffffff

In dieser Tabelle sind die Einträge anhand des Namens sortiert. Die zweite Spalte RECORD_POINTER ist ein Pointer auf den Eintrag in der Haupttabelle. Wenn wir jetzt wieder nach dem Namen John suchen, durchsucht die Datenbank diese Tabelle, findet den Eintrag John, fügt den Eintrag in das Result Set (über den Pointer kann der echte Eintrag in der Haupttabelle referenziert werden) und schaut in der nächsten Reihe nach. Bei einem weiteren Treffer kommt auch dieser Eintrag in das Result Set, bis es keine weiteren Treffer mehr gibt. Das passiert, wenn der nächste Eintrag Zachariah lautet. Diesmal steht aber fest, dass es keine weiteren Johns mehr in der Tabelle gibt und es muss nicht weiter gesucht werden.

Der Vollständigkeit halber sollte noch erwähnt werden, dass die Einträge in einer Tabelle standardmäßig anhand des Primary Keys sortiert werden und dieser somit automatisch einen Index hat.

Für alle weiteren Indizes wird eine neue kleine Tabelle angelegt. Man kann sich natürlich ausmalen, wie sinnvoll das Ganze für eine Volltextsuche ist, nämlich gar nicht. Wenn man in einem Feld nun nicht einfach einen Namen, sondern ein ganzes Textdokument ablegt und möchte dann herausfinden ob Schlagwort „X“ darin vorkommt, dann helfen die Indizes der Datenbank nicht weiter. Ihr bleibt dann nichts anderes übrig, als einen Full Table Scan durchzuführen.

Was macht Lucene anders?

Lucene ist eine NoSQL-Datenbank bzw. ein Dokumentenspeicher. Es nutzt keine relationalen Tabellen, aber trotzdem existiert auch in Lucene ein Index, der einer Datenbanktabelle recht nah kommt. In diesem Index werden aber nicht ganze Texte gespeichert mit dem Verweis zu welchem Dokument sie gehören, sondern sogenannte Tokens. Ein Token kann ein einzelnes Wort sein, eine E-Mail-Adresse oder eine Telefonnummer. Im Prinzip besteht ein Text aus mehreren Tokens. Damit man einen größeren Text effizient durchsuchen kann, muss er vorher in Tokens zerlegt werden. Bei Lucene heißt dieser Prozess Analyze. Folgendes Schaubild soll den Prozess verdeutlichen:

LuceneAnalyzeProzess

Hangeln wir uns einmal kurz durch die drei Schritte:

Tokenizer

Der Tokenizer zerlegt den Text in einzelne Wörter. In der Praxis gibt es natürlich verschiedene Implementierungen für den Tokenizer. Manche werden von Lucene mitgeliefert, man kann sie aber auch selbst implementieren. Solr und Elastic Search bieten selbst noch ein paar weitere Implementierungen an. Sollte man also nicht vorhaben das „nackte“ Lucene direkt zu verwenden, braucht man sich um diesen Schritt, in einfachen Anwendungsfällen, eigentlich keine großen Sorgen machen. Wichtig ist nur zu wissen, dass der Tokenizer den Text in kleine Einheiten zerlegt, die in der Regel ein Wort beinhalten.

Stemmer

Der Stemmer bringt Wörter in seine Grundform. Dass heißt aus Wörtern wie „ging“, „Hauses“, „Bäume“ wird „gehen“, „Haus“, „Baum“. Das ist wichtig, weil man bei einer Suche nach dem Wort „Baum“ vielleicht auch Treffer haben möchte in denen das Wort Bäume vorkommt.

Filter

Der Filter entfernt unbrauchbare Wörter wie Konjunktionen, Präpositionen, Artikel etc. Wer bei einer Suchmaschine einfach das Wort „und“ sucht, sollte sich sowieso nicht auf zutreffende Ergebnisse freuen, warum das ganze also speichern. Der Filter kann natürlich auch angepasst werden. Z.B. könnte es ja eventuell doch Sinn haben, bei einer Filmdatenbank das Wort „der“ nicht rauszufiltern, um Treffer wie „Der Fluch der Karibik“ trotzdem zu bekommen.

Wir veranschaulichen das ganze noch einmal:

LuceneAnalyzeExample

Der Text wurde nun in 6 Tokens zerlegt. Diese Tokens werden in Lucene in einem sogenannten Inverted Index gespeichert.

Inverted Index

Der Begriff Inverted Index sorgt manchmal für ein wenig Verwirrung, weil er oft ohne den Kontext dahinter verwendet wird. Grundsätzlich unterscheidet man im Kontext von Suchmaschinen einfach zwei Arten von Indizes. Einmal den Forwarded Index und zum anderen den Inverted Index. Der Forwarded Index ist eine Tabelle, in der alle Dokumente in der linken Spalte stehen und in der rechten Spalte die zugehörigen Tokens. Bei einem Inverted Index stehen in der linken Spalte die Tokens und in der rechten Spalte alle Dokumente, in denen diese Tokens vorkommen.

Eine einfache Darstellung haben wir hier:

ForwardedVSInvertedIndex

Der Vorteil entsteht dadurch, dass die Tokens eigentlich genau den Schlagworten in einer Suche entsprechen. Wenn wir jetzt nach dem Wort [brown] suchen, bekommen wir direkt alle Dokumente geliefert, die das Wort [brown] enthalten. Dadurch, dass der Index anhand der Tokens sortiert ist, muss nicht der gesamte Index durchsucht werden, was sich positiv auf die Performance auswirkt.

Halt, war Lucene nicht ein Dokumentenspeicher?

Ja, richtig. Wie am Anfang dieses Artikels erwähnt, handelt es sich bei dem Index auch um einen Dokumentenspeicher. Insgesamt besteht der Index aus mehreren Dateien, die direkt auf der Platte oder gar in einem Hadoop HDFS abgelegt werden. In diesen Dateien finden sich vielerlei Informationen, neben dem Inverted Index liegen hier aber auch die Dokumente. Ein Dokument in Lucene besteht aus mehreren Feldern, die wiederum aus Keys und Values bestehen. Zur Veranschaulichung hier ein Dokument im JSON Format:

{
„title“:“buying a house“,
„author“:“james gumberfield“,
„price“:“15$“
„text“:“some content“

}

Die Values in diesem Dokument werden beim Indexieren durch den Analyze-Prozess in Tokens zerlegt. Lucene merkt sich aber natürlich, zu welchem Feld diese Tokens gehören. Über den Inverted Index können diese dann nach potenziellen Treffern durchsucht werden und die Dokumente, die diese Tokens enthalten, werden als Ergebnis zurückgeliefert.

Suchen auf dem Lucene Index

Lucene bietet eine eigene Query-Struktur an, mit der man Suchanfragen ausführen kann. Die Suche erfolgt immer in den Werten der Felder, also z. B. im Feld Title wird nach dem Wort Buying gesucht. Die Query dazu würde so aussehen:

title:buying

Also Feldname gefolgt von einem : und anschließend der Suchterm buying. Gibt man keinen Feldname an, wird im Default-Feld gesucht. Das Default-Feld ist implementierungsabhängig.

Gehen wir in unserem Beispiel davon aus, dass wir die Felder title und text haben. Eine Suche mit einem einzelnen Wort haben wir bereits gesehen, doch wie sieht es mit einer Wortphrase aus?

Dabei muss man lediglich daran denken, die Phrase in Anführungszeichen zu setzen:

title:"buying a house"

Würde man folgende Suche ausführen …

title:buying a house

… würde Lucene nach dem Wort buying im Feld title suchen und anschließend nach den Wörtern a und house im Default-Feld. Die Suchen können mithilfe von Booleschen Operatoren verknüpft werden:

OR

Der OR Operator ist der Default-Wert. Das heißt, wenn kein Operator zwischen zwei Termen steht, dann wird automatisch OR genutzt:

Finde alle Dokumente mit "buying" im Feld title oder "house" im Default-Feld.

title:buying OR house

AND

Finde alle Dokumente mit den Wörtern "buying" und "house" im Feld title.

title:buying AND title:house

NOT

Finde alle Dokumente mit den Wörtern "new house" und nicht "new home" im Feld title.

title:"new house" NOT title:"new home"

Beim NOT Operator müssen mindestens zwei Suchterme eingegeben werden, sonst bleibt das Ergebnis leer.

+

Der „+“ Operator setzt den darauffolgenden Term auf required.

+house

Findet Dokumente die das Wort „house“ enthalten.

Der + Operator kann auch als Äquivalent zu AND verwendet werden, wenn man Folgendes schreibt:

+house +home

„-“ ist der Gegenpart von „+“ (welch eine Überraschung ;-)) und verbietet den folgenden Term in der Ergebnismenge:

+house -home

Das Ergebnis ist identisch mit dem NOT Operator, allerdings kann „-“ auch mit nur einem Suchterm verwendet werden.

Wildcards

Wildcards werden ebenfalls unterstützt mit den Operatoren „?“ und „*“. Der Unterschied ist, das „?“ für einzelne Zeichen und „*“ für mehrere gilt.

te?t

Findet z.B. test und text.

Wohn*

Findet wohnen, wohnung, wohnheim etc.

Fuzzy search

Lucene unterstützt auch eine unscharfe Suche mit dem „~“ Operator.

house~

… findet ähnliche Wörter wie „house“. Optional kann man über eine Zahl zwischen 0 und 1 einen Faktor bestimmen, der den Grad der Ähnlichkeit der Wörter angibt.

house~0.8

Standardmäßig wird der Faktor 0.5 verwendet.

Boosting

man kann einzelnen Suchtermen unterschiedliche Prioritäten einräumen. Der Operator „^“, gefolgt von einer positiven Zahl, beeinflusst die Reihenfolge der Ergebnisliste. Die Zahl kann auch kleiner als 1 sein (0.8 z.B.).

house^4 home 

… findet alle Dokumente, die die Wörter „house“ und „home“ beinhalten. Die Treffer mit „house“ erhalten eine höhere Priorität und werden am Anfang der Ergebnismenge zurückgegeben.

Grouping

Mit Klammern kann man einzelne Suchkommandos zusammenfassen

(house OR home) AND new

Range search

Eine Bereichssuche kann mit den Operatoren „[ ]“ und „{ }“ erfolgen, wobei die Suche mit „[]“ die Randwerte mit einschließt, „{ }“ schließt diese hingegen aus.

date:[01012017 TO 01052017]

… findet alle Einträge zwischen und inklusive dem 01.01.2017 und dem 01.05.2017.

title:{A TO Z}

… findet alle Einträge zwischen A – Z wobei A und Z nicht in der Ergebnismenge enthalten sind.

Dies waren die wichtigsten Operatoren im Überblick. Die gesamte Doku dazu, befindet sich hier.

Fazit

Lucene ist ausgereift und robust. Man kann es ohne schlechtes Gewissen in der Produktion einsetzen. In der Praxis werden aber meist Elastic Search und Solr genutzt. Beide Technologien haben Lucene auf den nächsten Level gehoben. Viele Standardprobleme sind damit bereits gelöst und man muss sich nicht so viel mit der Implementierungen herumschlagen, sondern bekommt gleich das All-Around-Paket. In der Praxis kommt es natürlich oft vor, dass viel Feintuning erforderlich ist. Der Grund ist, dass die Suche immer anhand sehr spezifischer Anforderungen implementiert wird, trotzdem spart man sich viel Initialaufwand.

Wer mehr über wissen will, sollte sich einmal die jeweilige Homepage anschauen:

http://lucene.apache.org/solr/

https://www.elastic.co/de/

Wer trotzdem mit Lucene starten möchte kann sich hier die Doku dazu anschauen. Derzeit ist die Version 6.5.0 aktuell.

Veröffentlicht unter Software Engineering | Verschlagwortet mit , , , , , | Kommentar hinterlassen

Oracle Code Berlin – Personal impressions from a surprisingly different conference

You want to learn about my impressions about the Oracle Code conference in Berlin? Then read my blog 🙂

Understanding IT, software architectures and technologies

Monday the 24th of April, 3:15 a.m.: My alarm clocks rings me up – yes, this is of course brutally early! But it was necessary to catch my train from Cologne to Berlin, where the newly invented conference format „Oracle Code“ opens the doors. With respect to these early hours, knowing that this will be a long day and not sure what to expect, I made my way to Berlin – and this was a very good invest!

The facts of Oracle Code 2017 in Berlin:

  • 350 attendees
  • More than 20 sessions covering relevant topics like
    • Micorservices
    • API Management
    • Chatbots
    • Docker
    • DevOps
    • Kafka
  • 2 Hands-On-Labs (Docker introduction and Oracle Bare Metal Cloud)
  • Experienced, international speakers

The focussed audience of this conference were developers and architects, so the focus of the conference presentation was on technology, real-world problems and solutions – no marketing, which was very welcomed! If you want…

Ursprünglichen Post anzeigen 281 weitere Wörter

Veröffentlicht unter Cloud & Infrastructure, News | Verschlagwortet mit , , , , | Kommentar hinterlassen

Realisierung der IoT Steuerung mit Hilfe der Microsoft HoloLens und Cloud Computing

Die Industriemaschine ist per Retrofitting smart gemacht, also IoT-enabled. Dies ermöglicht die SPS-Steuerung der Maschine in der Cloud zu exponieren, womit neue Steuerungsmöglichkeiten entstehen wie das untere Bild es veranschaulicht.

Technical_holo-qloud

Die Steuerung der Industriemaschine erfolgt mit den zwei Grundkonzepten GAZE und GESTURE der HoloLens. Mit Gaze wird die Blickrichtung erfasst, womit das Fokussieren der modellierten 3D Objekte möglich ist. Nach dem Fokussieren eines Objektes, erfolgt die Interaktion mit Gesture. Das Gesture Konzept erkennt das Tippen mit dem Zeigefinger als eine Geste und führt in einem C#- Script hinterlegten Programmcode aus. Im Bild unten ist ein virtuell modelliertes Objekt mit einem C#-Script dargestellt, welches die Interaktion ermöglicht.

unity-cube1.png

Das C#-Script enthält die Methode onSelect(), welche nach der „Air Tap“ -Geste ausgeführt wird.

void OnSelect()
  {
    changeS7300SetUp(RestfulServices.sessionInformationCredintials);
    playAudio();
  }

Diese Methode ändert die Produktion der Maschine und gibt akustisch einen Signal zurück, dieses bestätig, dass das Produktion -Setup der Maschine geändert worden ist. Das Ändern des Produktion -Setups erfolgt in drei Schritten:

  1. IoT Cloud Authentifizierung
  2. Abonnieren der Events der Maschine
  3. Einen POST des neuen Produktions-Setups ausführen

Die Authentifizierung und das Abonnieren der Events ist  hier dokumentiert. Die Änderung des Setups ist weiter im Text beschrieben.

Das Setup der Maschine also die Steuerung, kann wie folgt in der IoT Cloud hinterlegt sein:

    "0cgh2eb10-dfasd-11e5-a699-0asdf73fd04":{
         "type": "xobject",
         "owner": "ccasdfd90-da25-13e5-9fbb-0025wer342ac08",
         "time": 1456241720,
         "description": "0,2,1",
         "tag": ["ccasdfd90-da25-13e5-9fbb-0025wer342ac08"]
      }

Der Key „description“ enthält die Werte, die bestimmte Funktionen der Maschine repräsentieren. Nachdem ein POST mit den neuen Werten durch die Geste „AirTap“ mit der HoloLens ausgeführt wird, ändert sich der Key in der IoT -Cloud und die smarte Industriemaschine bekommt ein Befehl das Produktion -Setup zu ändern.

Das ändern des Produktions -Setups in C#, erfolgt in dieser Methode:

void changeS7300SetUp(SessionInformationModel sessionCredintials)
 {
   string jsonBody = ("{\"description\":\"0,1,0\"}");

   Dictionary<string, string> headers = new Dictionary<string, string>();
   headers.Add("Content-Type", "application/json");
   headers.Add("Authorization ", "Bearer " + sessionCredintials.sid);

   byte[] body = System.Text.Encoding.UTF8.GetBytes(jsonBody);

   //POST
    WWW www = new WWW(sessionCredintials.server + "/api/xobject/0c02eb10-da43-asd-a699-00259073fd04?sid="+sessionCredintials.sid, body, headers);
    StartCoroutine(WaitForChangeS7300SetUp(www, sessionCredintials));
 }

Hier wird ein JSON-String mit den Produktionswerten erzeugt, der dann an die Maschine über die IoT Cloud, im Body per POST gesendet wird.

Diese Art der Steuerung einer Industriemaschine bietet in vielerlei Hinsicht einen Mehrwert. Die Originalsteuerungs-UI der Industriemaschinen unterscheiden sich je nach Hersteller und sind selten intuitiv. Die Steuerungs-UI der HoloLens kann jedoch personalisiert und auch mit Zugriffsrechten versehen werden. Durch die Augmented Reality werden den Mitarbeiter die Informationen geboten, die zu diesem Zeitpunkt und abhängig vom Ort gerade benötigt werden. Des Weiteren bietet die virtuelle Steuerung höhere Sicherheit da die Interaktivität nicht direkt an der Maschine stattfindet.

 

Veröffentlicht unter Cloud & Infrastructure, IoT & Industry 4.0, Uncategorized | Verschlagwortet mit , , , , , | 1 Kommentar

Bosch ConnectedWorld 2017 – Bosch’s IoT Conference in Berlin

Vom 14. bis 16. März durfte ich an der IoT Konferenz von Bosch, der Bosch ConnectedWorld 2017, teilnehmen. In diesem Blogeintrag möchte ich meine Eindrücke von der Konferenz und vom Hackathon und mit euch teilen.
Als Student habe ich mich im Voraus für ein kostenloses Ticket beworben. Da ich in Berlin an der TUB früher als Austauschstudent studiert hatte, habe ich dort noch Kontakte und konnte bei einer guten Freundin übernachten. Ein paar Stunden vor meiner Reise hatte ich dann aber plötzlich ein riesiges Problem: Mein Flug wurde wegen eines Streiks in Berlin abgesagt. Ich hatte zwei Möglichkeiten: Entweder bleibe ich zu Hause in München oder ich nehme einen Nachtbus. Diese Entscheidung war nicht so schwierig, weil es mein Traum war, an der Konferenz teilzunehmen. Wegen des Nachtbusses war ich am Dienstag dann schon in aller Frühe in Berlin und konnte den ganzen Tag in unserem Berliner Büro arbeiten. Am Berliner Standort wurde ich sehr herzlich von den Kollegen empfangen.

Das Hackathon

Da ich ein kostenloses Ticket bekommen hatte, musste ich an der Hackathon-Konferenz teilnehmen. Dabei war ich immer gegen Hackathons, weil ich der Meinung war, dass man doch fast nichts in solch kurzer Zeit schaffen kann. Aber ich habe mich total geirrt: Es hat viel Spaß gemacht und ich konnte viele interessante neue Freunde kennenlernen. Ich habe dort viel gelernt und konnte die neusten Technologien ausprobieren. Die Konferenz startete am Dienstag um 18 Uhr mit einer Begrüßung und dem anschließenden Team Building.
1.jpg
Jedes Mitglied konnte sich für einen Bereich entscheiden. Zur Auswahl standen: Mobility, Manufacturing, Building&City und Open Hacking. Eigentlich wollte ich etwas in jeder Kategorie machen und habe alle Begrüßungsvorträge angehört. Am Ende habe ich mich aber für Building&City entschieden. Mein Team hat innerhalb von zwei Tagen ein System erarbeitet, das den Menschen im Katastrophenfall helfen soll. Es bestimmt die Anzahl an Leuten in einem Gebäude und erkennt mittels Bosch Kameras gleichzeitig deren Emotionen (z. B. Panik). Wir haben leider nicht gewonnen aber jedoch hatten wir alle viel Spaß und ich konnte einiges neues Neues dazulernen.
Mein Team:
2.jpg
Das Hackathon-Team BERSS (Building Emergency Response Support System):
3.jpg
Wir konnten viele neue Technologien und Geräte benutzen. Auf dem Bild ist ein 3D-Drucker zu sehen:
4.jpg
Eines der besten Dinge! Bosch lehrt IoT sogar den Kindern. Hackathon für die Jüngsten:5.jpg
Hackathon-Projekte und Sensoren waren überall. Hier in der Minibar:
6.jpg
Ein Microsoft Mitarbeiter (links) zeigt mir, wie Azure funktioniert:
7.jpg
Alle haben sehr fleißig gearbeitet:
8.jpg
Mit Marita Klein von Bosch. Sie war für Hackathon verantwortlich:
9.jpg
Die offizielle Party. Zeit für Networking:
10.jpg
Werden wir in Zukunft öfters Vermisstenanzeigen für Roboter vorfinden? Oder ist das nur tolle Werbung? 😉
11.jpg

Die Konferenz

Ich bin ganz sicher, dass dem Internet der Dinge die Zukunft gehört. Es geht hier nicht nur um die Erfassung, das Management, den Transport, und die Analyse entstehender Sensordaten, sondern insbesondere darum, wie Entscheidungen besser getroffen, Kunden neue Services und Produkte angeboten und komplett neue Geschäftsmodelle verwirklicht werden können. Das Internet of Things ist doch der Wegbereiter für die digitale Transformation von Organisationen aller Branchen. Diesem Transformationsprozess wird sich in Deutschland bald kein Unternehmen entziehen können.
IDC, der weltweit führende Anbieter von Marktinformationen prognostiziert, dass die Anzahl der vernetzten Dinge von derzeit 12,1 Mrd. (2016) auf weltweit 30,3 Mrd. bis zum Jahr 2020 ansteigen wird (Cisco glaubt, es kann sogar bis 50 Mrd. sein!). IDC geht davon aus, dass der IoT-Markt im Jahr 2020 ein Volumen von 1,7 Billionen Dollar haben wird. Das macht schon einen guten Eindruck, oder?

Die Konferenz teilte sich an beiden Tagen in unterschiedliche Themenslots auf:

● Connected Mobility
● Connected Manufacturing
● Connected Logistics & Supply Chain
● Connected City & Building
● Connected Agriculture
● Autonomous Driving
● IoT Cloud
● IoT Networks
● Silicon IoT
● Augmented Reality
Es gab dort viele unterschiedliche Firmenstände unter anderem von Bosch, SAP, Telekom Deutschland, Amazon Web Services, Eclipse Foundation, IBM, General Electric, Cisco, SalesForce, Intel und nVidia.

Es folgen die Ideen, welche ich persönlich am interessantesten fand:

Dank der neuen AV(Autonomous Vehicles) werden wir einen neuen mobilen Raum haben, wo alle selbstfahrenden Autos vernetzt sind. Was man bis heute zu Hause oder am Arbeitsplatz gemacht hat, kann man nun auch im Auto erledigen.Während der Konferenz hat inVidia gezeigt, wie ihr System funktioniert. Die Firmen der Autoindustrie müssen dank nVidia keines eigenen Systems mehr entwickeln. Sie können es einfach kaufen und somit viel Entwicklungskosten sparen:
14.jpg
Bosch hat eine Wagen-Visualisierung gezeigt. Werden wir wirklich in 5 Jahren mit solchen Autos fahren? Die Leute, mit denen ich auf der Konferenz gesprochen habe, waren davon total überzeugt!
15.jpg

T-Mobile hat einen Roboter vorgestellt, der alle Bewegungen einer Person nachahmt. Hierfür muss man einen Handschuh und eine Jacke mit Sensoren anziehen. Dank der Brillen kann man auch sehen, was der Roboter gerade sieht. Es ist wichtig zu erwähnen, dass die Grenzen zwischen echter, Augmented Reality und Virtual Reality langsam verschwimmen. Unternehmen entwickeln kombinierte Angebote aus AR und reiner VR. Laut Fjord Trends 2017 von Accenture soll der Markt für AR und VR im Jahr 2025 80 Milliarden US-Dollar erreichen.

16.jpg

Fujitsu hat ein IoT Management System gezeigt, welches betriebswirtschaftliche Informationen in einem Dashboard visualisiert. Man konnte bei ihrem Stand einen Kaffee trinken und danach sofort alle Details zu meiner Bestellung auf dem Dashbaord ablesen. Die Kaffee war umsonst, aber bei dem guten Kaffee hätten sie viel Geld einnehmen können;) Über ein solches System kann man auch dynamische Preise einführen. Ist heute der White Kaffee nicht beliebt? Dann machen wir eine Preissenkung von 20 %!

17.jpg
Der Tug (so heißt das Gerät) von Aethon kann selbst die Paketen durch einem Lager transportieren. Das Gerät hat viele Sensoren eingebaut, weshalb es auch mit Menschen in einem Lager zusammenarbeiten kann. Es wurde ein Video gezeigt und man konnte einen Tug Ausstellungsstück anschauen.Die Produkte von Aethon funktionieren bereits im medizinischen Bereich und sehen echt klasse aus.
18.jpg

Ich bin noch immer von AWS (Amazon Web Services) begeistert. Meiner Meinung nach sind sie jetzt viel besser als Microsoft Azure oder Oracle IoT.AWS IoT ist der Cloud-Service für das Internet der Dinge. Dank diesem Service kann man tausend Geräte haben und sie sind über das Amazon Framework verbunden. Damit können die Nutzer solche Objekten oder Geräten „miteinander reden“ lassen. Es ist auf jeden Fall einfacher zu verwalten und man hat nur eine Architektur. Aber das Wichtigste ist: Amazon kümmert sich selbst um die Security (die größte Herausforderung in IoT Welt). AWS unterstützt HTTPS, Websockets und das MQTT-Protokoll. Mithilfe von AWS kann man Daten von global vernetzten Geräten speichern, verarbeiten und analysieren. AWS bietet unter anderem AWS Lambda, Amazon API Gateway, Amazon DynamoDB, Amazon Kinesis, Amazon S3 oder Amazon Redshift und erlaubt die Verknüpfung dieser zu einer robusten IoT-Anwendung. https://aws.amazon.com/de/iot-platform/

Cicsco hat eine Kleidung gezeigt, welche technische Mitarbeiter tragen können. Die Brille ermöglichte die Nutzung von AR:

22.jpg

Die Zuckerwatte wurde von einem Roboter zubereitet:23.jpg
Ich finde es super, wenn man für Marketingzwecke Gamifizierung nutzt. Hier konnte man einfache Videospiele spielen und neue Information über Bosch Technologien erlernen:
24.jpg

Ich möchte mich nochmal bei Alexander Däubler, Dominik Bial und Torsten Winterberg bedanken, dass Sie mich unterstützt haben und mir erlaubt haben, dass ich an dieser Konferenz teilnehmen konnte. Ich habe viele neue Leute kennengelernt und konnte neue Technologie und Geräte testen. Ich war zum ersten Mal auf einer solchen großen internationalen Konferenz und einem Hackathon. Ich werde versuchen, das auf der Konferenz erlernte Wissen in meine Arbeit bei OC einfließen zu lassen.

Veröffentlicht unter IoT & Industry 4.0, OC Inside, Uncategorized | Kommentar hinterlassen

IoT Steuerung mit Hilfe der Microsoft HoloLens und Cloud Computing

Die digitale Transformation ist derzeit überall zu lesen, zu sehen oder zu hören. Digitalisierung in Deutschland bedeutet insbesondere Industrie 4.0, aber auch Big Data, Cloud, Internet of Things, Augmented Reality oder Deep Learning. Die Liste der Schlagwörter und der Veröffentlichungen von Teilaspekten ist lang. Aber Digitalisierung ist ein sehr weites Feld und man sollte nicht immer nur einen Ausschnitt betrachten. Wir verstehen die Digitalisierung als Zusammenspiel von vier technischen Teilaspekten und den betroffenen Menschen.

Die vier grundlegenden Säulen der Digitalisierung können dabei als erster Blueprint für eine mögliche Zielarchitektur dienen.

  • Zukunftsorientierte Mensch-Maschine-Interaktion
  • Ganzheitliche Integrationsarchitekturen
  • Effektive Analytics und Business Insights
  • Reaktionsfähige hybride Infrastrukturen

Wenn Sie hier mehr erfahren möchten, kann ich ihnen unser Whitepaper zu den vier Säulen der Digitalisierung empfehlen. Oder gleich das eBook „Dynamikrobuste Architekturen der Digitalisierung“.

In unserem OC|Lab haben wir einen PoC umgesetzt, der alle Teilaspekte der Digitalisierung vereint.

Aufgesetzt auf dem Retrofitting Projekt, welches die Anbindungen einer Industrie Maschine von Q-loud (www.q-loud.de) mit IoT Techniken an die Cloud gewährleistet, wurde mit Hilfe der Microsoft HoloLens die direkte Steuerung der Maschine ermöglicht. Im Sichtfeld wird auf der linken Seite ein Dashboard über produzierte Teile angezeigt. Im zentralen Sichtfeld sind Informationen über den Zustand der Maschine visualisiert und Fehlermeldungen direkt angezeigt. Auf der rechten Seite werden mögliche Produktionskombinationen zur Auswahl angeboten, welche über Gestensteuerung ausgewählt werden können. Somit ist es nicht nur möglich, Informationen auf der HoloLens anzuzeigen, sondern auch direkt in die Steuerung der Maschine einzugreifen. Befehle, die über die Gestensteuerung eingegeben werden, landen über die Cloud und einer IoT Lösung direkt auf der Maschine.

Das Beispiel demonstriert eindrucksvoll das Zusammenspiel der einzelnen Säulen:

  • die Microsoft HoloLens als zukunftsorientierte Mensch-Maschine-Interaktion,
  • die ganzheitlichen Integrationsarchitekturen realisiert über die Anbindung der Maschine mit Hilfe der Q-loud Lösung,
  • die Einbindung eines (fast) Realtime Dashboards zur effektiven Darstellung von Business Insights
  • und die Speicherung der Daten in der Cloud

Digitalisierung ist mehr als nur der Blick in eine Domäne, probieren Sie es aus.

Video | Veröffentlicht am von | Verschlagwortet mit , , , , , | 1 Kommentar

TDWI Young Guns Barcamp

Am vergangenen Freitag (31.03) fand erstmalig ein Barcamp der TDWI Young Guns statt. Wie der Name Barcamp bereits vermuten lässt, war die Location der Veranstaltung eine Bar, und zwar in Köln. In der Bar versammelten sich sich trotz sommerlicher Temperaturen und Sonnenschein einige Dutzende junge BI-ler, um einen gemeinsamen Nachmittag und Abend zu verbringen. Darunter Studierende, Berufseinsteiger und auch einige, die bereits ein paar Jahre Berufserfahrung sammeln konnten. Zu Beginn der Veranstaltung sollten wir uns zunächst mit drei Hashtags vorstellen. Meine Hashtags waren #OPITZCONSULTING, #ETL und #Motorradfahren. Häufig genannte Tags waren auch #Neugierde, #IchWilllNeuesLernen, #FC und #Sommer.

youngguns

#TDWI #YoungGuns #Barcamp #KunstbarKöln

Die Organisatoren erkannten schnell die Fragezeichen in den Gesichtern der Nachwuchs-BI-Experten, als es um das Thema Young Guns und Barcamp ging. Denn genau wie ich fragten sich einige andere auch, was diese Begriffe denn eigentlich zu bedeuten hatten.

Hier nun die Erläuterung: Die TDWI Young Guns sind die junge Generation des TDWI. Dabei handelt es sich um eine in den Kinderschuhen steckende Initiative, die dem Nachwuchs die Möglichkeit geben möchte, sich miteinander auszutauschen. Ein Barcamp bietet dafür auch ein lockeres und attraktives Medium. Bei dieser Meeting-Form, die auch „Unkonferenz“ genannt wird, stehen Diskussionen und Gespräche im Mittelpunkt. Typisch hierfür war auch, dass wir die Agenda für den Verlauf des Nachmittags ad hoc vor Ort ausgearbeitet haben. Jeder, der über ein Thema sprechen oder eine Fragestellung diskutieren wollte, sollte sich hinter der Theke versammeln.

20170331_165142.jpg

Agenda des Tages #SpannendeVorträge #Diskussionen #BI #Analytics

Herzlich Willkommen waren hierbei auch spontane Vorträge, ohne fertige PowerPoint-Präsentation. Die Chance haben Christian Lenzhölzer und ich ergriffen und uns mit den Themen Data Vault/Datenmodellierung und ETL-Tools hinter die Theke gestellt. Am Ende standen neben unseren Themen unter anderem noch Sentiment-Analysen, Internet of Things und CRM-Analysen mithilfe von Geo-Marketing auf der Agenda. Pro Session hatten wir 30 Minuten zur Verfügung. Zu Beginn war ausdrücklich darauf hingewiesen worden, dass es keine Folienschlacht und auch keine Monologe geben sollte, damit Zeit für Diskussionen bleibt.

Christian erörterte in seinem Vortrag zuerst die Unterschiede zwischen Inmon, Kimball und Linstedt. Im Anschluss daran regte er eine Diskussion an und bat darum, Erfahrungen mit den jeweiligen Modellen zu teilen. Er wollte außerdem wissen, welche Besonderheiten den Young Guns dabei aufgefallen waren. Viel wurde insbesondere über Data Vault gesprochen, da es für viele Unternehmen noch Neuland ist. Es wurde darüber diskutiert, wie determiniert werden kann, ob Data Vault eine sinnvolle Modellierungstechnik für ein Data Warehouse ist und von welchen Faktoren diese Entscheidung beeinflusst wird. Als mögliche Faktoren wurden hierbei die fachliche Komplexität, die Änderungshäufigkeit des Datenmodells und das Know-how der Mitarbeiter genannt. Auch das Thema der Automatisierung wurde in diesem Zusammenhang besprochen. Hier konnte Fabian Hardt Einblicke in die Funktionen und Möglichkeiten des MID Innovator einbringen.

In meinem Vortrag berichtete ich zunächst, mit welchen ETL-Tools ich in den letzten Projekten gearbeitet habe. Dazu gab ich meine persönliche Einschätzung zu den jeweiligen Stärken und Schwächen der Tools ab. Zusammen mit den anderen BI-lern konnte ich eine große Palette an ETL-Tools abdecken. Weiterhin habe ich versucht mit den Young Guns zu evaluieren, ob es möglicherweise einen Standardansatz zur Entwicklung von ETL-Mappings gibt, der unabhängig vom Tool ist. Als Fazit dieser Diskussion stellten wir fest, dass die Dokumentation der einzelnen Schritte im Mapping sehr wichtig ist und wir Standardtransformationen empfehlen würden, sofern diese vorhanden sind. Außerdem wurde angeregt, dass ein Mapping jeweils nur eine Zieltabelle befüllen sollte, um die Übersichtlichkeit zu wahren.

Die zehn Minuten zwischen den jeweiligen Sessions füllten die Teilnehmer durch das Fortführen von Diskussionen aus den Vorträgen, sowie durch allgemeines Netzwerken und das Schnabulieren von Snacks und Obst. Ab 18 Uhr bot sich dann bei einem Glas guten Kölsch, wie es sich in der Domstadt gehört, noch mehr Gelegenheit, mit den anderen Besuchern ins Gespräch zu kommen. Das Ziel der Veranstaltung, die Kommunikation und den Wissensaustausch zwischen Young Professionals zu fördern, ist in jedem Fall geglückt. Hierbei ist ein guter Blick über den Tellerrand ermöglicht worden. Die Einblicke in verschiedene Tools, Methoden und Vorgehen konnten den Wissensdurst der nächsten Generation stillen und sie motivieren, sich noch mehr mit dem Bereich BI auseinander zu setzen.

Das Barcamp ist für mich wirklich eine ideale Plattform, um sich mit gleichgesinnten, jungen BI-Kollegen auszutauschen!

20170331_165751.jpg

OC Young Guns #WirSindOPITZCONSULTING

Mit einer Truppe von sechs Young Guns war OPITZ CONSULTING sehr gut vertreten. Ich freue mich darauf, noch viele weitere Male an einer solchen Veranstaltung teilzunehmen.

Veröffentlicht unter News | Verschlagwortet mit , , | 1 Kommentar

Hackathon in München 2016

 

Flows

1 Die Aufgabenstellung

Details finden sich in Big Data Hackathon zu Community Days (28.10.2016) Kurz gesagt geht es darum, für einem eingehendem Clickstream (Benutzer mit verschiedenen bekannten Attributen, die gerade eine Webseite besuchen) Werbeanzeigen zu platzieren. Diese Anzeigen auf den Benutzer und sein Konsumverhalten angepasst sein. Schließlich kostet die Werbeanzeige auch Geld das über Rückflüsse aus erfolgreichen Einkäufen verdient werden will. Von der „REST Event Source“ werden Daten aus dem Original-Stream verteilt. Der „Real Time Bidding Agent“ nimmt die Informationen entgegen und versucht, für möglichst wenig Geld die Werbefläche zu ergattern (wenn sich diese Ausgabe lohnt. Wir wollen wie oben erwähnt Geld verdienen. Ist für den Kunden keine lohnende Werbeempfehlung bekannt so sparen wir normalerweise dieses Geld. Um Kundenverhalten modellieren zu können kann alternativ auch ungezielt Werbung geschaltet werden.) Um die Bedürfnisse der Kunden zu erkennen, zieht der „Real Time Analytic Agent“ diese Daten ab um die „EventHistory“(eine Datenbank) dem Analytics Team zur Verfügung zu stellen. Das Analytics Team versucht mit unterschiedlichen Strategien den vom „Real Time Bidding Agent“ erwirtschafteten Ertrag zu optimieren.

2 Es geht los

Der Raum Zugspitze ist überfüllt. Fast alle Anwesenden Kollegen versuchen am Hackaton teilzunehmen bzw. einen Platz zum zuschauen zu ergattern. Das Team um Lukas Berle hat in den ersten Momenten die Aufgabe, eine optimierte Antwortstrategie zu entwerfen. Um hier schnell und zielgerichtet antworten zu können, richten die Kollegen einen Storm-Cluster ein und richten eine Topologie ein, welche für die Click-Events Gebote verschickt. Die Datensammler (Team „Real Time Analytic Agent“) setzten eine MongoDB auf, welche alle RestEvents sammelt. Das sind einerseits die Daten aus dem Clickstream mit Benutzerinformationen, die versendeten Gebote und die Information ob mit der angebotenen Werbung Geld verdient wurde. Das Analytics Team welches sich mit Machine Learning, Visualisierung und „HokusPokus“ muss noch auf Analysedaten warten und diskutiert wie man die erwarteten Daten modellieren kann.

FlowsWithFrameworksAndPersons.png

3 Die Daten fließen

Während der Storm-Cluster hochgezogen wird, sammeln Waldemar und Daniel die Daten in der MongoDB (v. 3.0.6) die auf Ralfs Rechner läuft. Ralf hofft hier direkt mit R über die RMongo Bibliothek mit Analysen starten zu können. Dimitri erklärt interessierten Anwesenden,wie man hier mit Baummodellen und Visualisierung das Kundenverhalten auswerten kann. Für die Auswertung in Weka benötigen wir tabellarische Daten. Eine Möglichkeit, diese Daten zu exportieren,ist mittels Kommandozeile und

mongoexport --type=csv --db {hackathon} --collection {..} --fields {..}

auszuführen. Da wir die einkommenden Daten (Clicks und die zeitversetzte Information über Kauferfolg) aktuell in zwei Tabellen sammeln, ist diese Methode suboptimal. Ein JOIN muss her. Hier stellen wir fest daß die „uralte“ 3.0.6 er MongoDb noch nicht den $lookup Aggregator kennt. Dumm gelaufen! Sollen wir jetzt einen MapReduce Job schreiben oder lieber doch auf eine aktuelle MongoDb 3.2.10 migrieren. Können wir die Daten in die neue Version retten? Die MapReduce Jobs liefern nicht in kurzer Zeit das gewünschte Ergebnis und Debuggen kostet zu viel Zeit. Also doch ein Live Upgrade. Wir installieren parallel eine neue MongoDb 3.2.10 auf Ralfs Rechner. Alle 15-20 Minuten exportieren wir die Daten als CSV in einen Ablageordner im Netzwerk. Jetzt wird es spannend. Data Folders kopieren und Neustarten… Und schon läuft MongoDb auf 3.2.10 mit keinem nennenswerten Datenverlust. Daniel stellt die Verbindung, um und wir können endlich die ersehnte Datenmatrix für das „Analytics Team“ bereitstellen. Es ist inzwischen schon nach 13.00. Die Exports der aggregieren CSV können mit 3T MongoChef erstellt werden. Jetzt könnte man die Daten eigentlich schön sichten. Schade,daß RMongo die 14 Spalten nur als JSON versteht. Ist es ein Problem mit der verwendeten Version der R-Bibliothek ? Auf jeden Fall wird hier nur wertvolle Zeit vernichtet (eine aggregierte Abfrage braucht über eine Minute, um einen Dataframe mit ca. 20T Zeilen und einer Spalte zurückzuliefern). Damit hängt das ganze „Analytics Team“ von den Kopien der CSV Exports ab.

4 Liefern Sie mal eine neue Strategie!

In der Zwischenzeit ist das Team mit dem RealTimeBiddingAgent schon lange so weit,dassesdie noch nicht vorhandenen Modelle und Analysen vom „Analytic Team“ in Strategien gießen möchte. Außer allgemeinen Kategorien (die Apple User kaufen nur bei Unterhaltungselektronik und Medien) findet sich leider wenig Gewinnbringendes. 100 Prozent Permiumuser geben richtig viel Geld aus – aber bei nur 14 erkannter User in 8 Stunden bräuchten wir hier schon eine Luxusartikel im Millionenwert, um endlich reich zu werden.

5 Wie ist es gelaufen und was haben wir dabei gelernt ?

Auch ohne Kanban oder Scrum organisieren sich die Teams – scheinbar haben einige irgendwo heimlich geübt. Vermutlich hätten wir nach Sprintplanung und Schätzmarathon auch erst mittag mit den Umsetzung starten können. Die Gruppen finden sich und werden produktiv. Natürlich klappt mit der vielen neuen Technik nicht alles:

  • Einige Impressions gehen bei der Datenbank Live Migration verloren.
  • DieStrategien haben oft „interessante“ Seitenwirkungen. In der knappen Zeit hatten wir nicht mit vielen Anpassungen an der Strategie durch verbesserte Modelle gerechnet.

Der RoundTrip hat allerdings geklappt. Bis die interessanten Erkenntnisse entdeckt wurden,war die Zeit dann allerdings zu knapp, um hieraus Strategien abzuleiten. Immerhin können wir inzwischen in MongoDB zwei Tabellen (clicks, impressions) joinen:

db.clicks.aggregate([
    {
      $lookup:
        {
          from: 'impressions',
          localField: 'id',
          foreignField: 'clickId',
          as: 'joined'
        }
   },
   {$unwind: '$joined'},
   {$project:
     {
         'age': '$age'
       , 'gender': '$gender'
       , 'location': '$location'
       , 'website': '$website'   
       , 'timestamp': '$joined.timestamp'
       , 'profit': '$joined.profit'  
       , 'job': '$job'
       , 'deviceOs': '$device.os'
       , 'deviceBrowser': '$device.browser'
       , 'deviceType': '$device.type'     
       , 'productLine': '$joined.winningBid.productLine'
       , 'premium': '$joined.winningBid.premium'
       , 'team': '$joined.winningBid.team'
       , 'bid': '$joined.winningBid.bid'             
     }}
]

6 Bilder aus dem Analytics Sector

AnalyticsMondrian.png

7 Annektoten

Noch bevor unsere DataScientists ihre Daten in analysefertiger Form vorliegen hatte,wurden bereits erfahrungsgestützte Modelle vorgeschlagen

  • Frauen von 30-40 kaufen am meisten Beautyprodukte (diese These wurde vom weiblichen Teilnehmerkreis nicht einstimmig befürwortet und nicht implementiert)
  • Eine Datenbank die nicht joinen kann ist doof – Da hat Bernhard natürlich recht

Deswegen haben wir im Live-Betrieb die MongoDB von 3.0.6 auf 3.2 upgedated.Eine Herkulesaufgabe: Datafiles kopieren. Starten – fertig 🙂

8 Und am Ende

Bleibt das Gefühl dass hier richtig Energie in den Hackathon geflossen ist und alle Beteiligten Spaß hatten. Vielen Dank an alle! Besonders herzlichen Dank an Christopher, der die Plattform bereitgestellt hat, um mit den Clicks und Impressions spielen zu können.

9 Ein wenig Data Science

Leider nicht während des Hackathons fertig geworden

Um eine Vorhersage machen zu können, welche Empfehlung wir nach den gewonnenen Erfahrungen aussprechen können trainieren wir ein „MultinomialLogisticRegression“ Modell. Da wir nur Gewinn machen unter der Annahme, dass wir nicht 0 Profit machen können wir die Datenbasis einschränken.

> sData<-subset(data,profit>0)
> attach(sData)
> library(MASS)
> mn<-multinom(productLine ~ age + location + gender + job + deviceType 
  + deviceOs + deviceBrowser, family=binomial()) 
> mn.best<-stepAIC(mn)

> summary(mn.best)
Call:
multinom(formula = productLine ~ age + gender, family = binomial())

Coefficients:
                     (Intercept)        age genderMALE
CONSUMER_ELECTRONICS   -3.126288 0.01288730  3.7243051
FASHION                -2.399828 0.02175771  0.7535859
FURNITURE              -5.444786 0.07223687  2.0731203
MULTIMEDIA             -1.928532 0.01505034  2.1050230

Std. Errors:
                     (Intercept)        age genderMALE
CONSUMER_ELECTRONICS   0.6032644 0.01527161  0.4461687
FASHION                0.5880367 0.01635363  0.5022316
FURNITURE              0.9091175 0.02057506  0.5599580
MULTIMEDIA             0.4749802 0.01329519  0.3576919

Residual Deviance: 762.211 
AIC: 786.211 

> predict(mn.best,data.frame(age=40,gender="MALE"))
[1] CONSUMER_ELECTRONICS
Levels: BEAUTY_CARE CONSUMER_ELECTRONICS FASHION FURNITURE MULTIMEDIA

> predict(mn.best,data.frame(age=40,gender="FEMALE"))
[1] BEAUTY_CARE
Levels: BEAUTY_CARE CONSUMER_ELECTRONICS FASHION FURNITURE MULTIMEDIA

Als relevante Faktoren (die wir zum Clickzeitpunkt haben) werden hier nur Alter und Geschlecht als AIC-bestes Modell gefunden. Damit können wir statistisch belegen dass die Frau ab 40 lieber zu Beauty-Care greift währen sich ein Mann mit Consumer-Elektronik begnügt. 🙂

Veröffentlicht unter Analytics & BigData | Verschlagwortet mit | Kommentar hinterlassen