gut vernetzt: skalierbares graph mining für business intelligence
TRANSCRIPT
Gut vernetzt:
Skalierbares Graph Mining für Business Intelligence
André Petermann, Martin Junghanns
Universität Leipzig & ScaDS Dreden/Leipzig
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence
Graphs are everywhere
GRADOOP
Business Intelligence
Zusammenfassung
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 3
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
3
Graphs are everywhere1
1The Neo4j guys
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 4
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
4
Graphs are everywhere
𝐺𝑟𝑎𝑝ℎ = (𝐾𝑛𝑜𝑡𝑒𝑛, 𝐾𝑎𝑛𝑡𝑒𝑛)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 5
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
5
Graphs are everywhere
Quelle: https://www.facebook.com/notes/facebook-engineering/visualizing-friendships/469716398919/
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 6
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
6
Graphs are everywhere
𝐺𝑟𝑎𝑝ℎ = (𝑁𝑢𝑡𝑧𝑒𝑟, 𝐹𝑟𝑒𝑢𝑛𝑑𝑠𝑐ℎ𝑎𝑓𝑡𝑒𝑛)
Alice
Bob
Eve
Dave
Carol
Mallory
Peggy
Trent
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 7
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
7
Graphs are everywhere
Alice
Bob
Eve
Dave
Carol
Mallory
Peggy
Trent
𝐺𝑟𝑎𝑝ℎ = (𝑁𝑢𝑡𝑧𝑒𝑟, 𝐹𝑟𝑒𝑢𝑛𝑑𝑠𝑐ℎ𝑎𝑓𝑡𝑒𝑛)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 8
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
8
Graphs are everywhere
Quelle: https://www.openstreetmap.de/
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 9
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
9
Graphs are everywhere
Leipzig
Dresden
Berlin
Hamburg
München
Chemnitz
Nürnberg
Köln
𝐺𝑟𝑎𝑝ℎ = (𝑆𝑡ä𝑑𝑡𝑒, 𝑉𝑒𝑟𝑏𝑖𝑛𝑑𝑢𝑛𝑔𝑒𝑛)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 10
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
10
Graphs are everywhere
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 11
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
11
Graphs are everywhere
fakturiert
Mitarbeiter name: Alice
Ticket kosten: 500
Auftrag
Ausgangsrechnung umsatz : 3000
Bestellung
Mitarbeiter name: Eve
Eingangsrechnung kosten : 1500
Zulieferer name: Elbe Blech
𝐺𝑟𝑎𝑝ℎ = (𝐺𝑒𝑠𝑐ℎä𝑓𝑡𝑠𝑜𝑏𝑗𝑒𝑘𝑡𝑒, 𝐾𝑜𝑛𝑡𝑒𝑥𝑡)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 12
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
12
Graphs are everywhere
Wie oft telefonieren Mitarbeiter und Kunden aus verschiedenen Ländern miteinander?
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 13
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
13
Graphs are everywhere
Nutzer entspricht
entspricht
freunde
bearbeitetVon
Nutzer
Mitarbeiter
Kontaktperson
Zulieferer
Eingangsrechnung
von
gehörtZu
Welche Betrugsmuster treten in meinen Geschäftsdaten auf?
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 14
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
14
Graphs are everywhere
Welche Muster sind charakteristisch für Erfolg und Misserfolg eines Geschäftsprozesses?
Alice Email gesendetVon
Angebot Email zu
Telefonat Angebot Email zu zu
Eve Email gesendetVon
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 15
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
15
GRADOOP Graph Analytics with Hadoop
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 16
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Datenvolumen / Berechnungsaufwand
Usabili
ty
Graph Processing Systeme
Graphdatenbanken
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 17
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Ein Open Source Framework für die deklarative Analyse verteilter Graphdaten
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 18
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Ausdrucksstarkes Datenmodell (Extended Property Graph Model)
o Analytische Algorithmen und Operatoren
o Deklarative Workflows
o Implementiert auf Big Data Technology
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 19
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
HDFS/YARN Cluster
Apache HBase: Distributed Graph Store
Apache Flink: Operator Implementation
Apache Flink: Distributed Operator Execution
Extended Property Graph Model (EPGM)
Graph Analytical Language (GrALa)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 20
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Extended Property Graph Model – EPGM
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 21
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Knoten (Vertices)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 22
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Kanten (Edges)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 23
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Identifikatoren
2 1 1 3
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 24
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o (Typ) Labels
2 1 1
Auftrag Mitarbeiter
3 Mitarbeiter
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 25
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Eigenschaften (Properties)
2 1 1
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Alice dob : 1980-01-01
3 Mitarbeiter name : Bob
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 26
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Gerichtete Kanten
2 1 1
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Alice dob : 1980-01-01
3 Mitarbeiter name : Bob
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 27
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Kanten Labels und Properties
2 1 1
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
3 Mitarbeiter name : Bob
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 28
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Parallele Kanten (Multigraph)
2 3 1 1
2
3
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Bob
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
ansprechpartner
bearbeiterIntern
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 29
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Schleifen
2 3 1 1
2
3
4
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Bob
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
ansprechpartner
bearbeiterIntern
ers
tellt
Von
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 30
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Logische (Sub-)Graphen
2 3 1 1
2
3
4
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Bob
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
ansprechpartner
bearbeiterIntern
ers
tellt
Von
1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 31
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Graph Labels und Properties
2 3 1 1
2
3
4
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Bob
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
ansprechpartner
bearbeiterIntern
ers
tellt
Von
Nachbarschaft von : Bob anzKanten : 2
2
Aktivität 1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 32
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Extended Property Graph Model (EPGM)
2 3 1 1
2
3
4
Auftrag id : SO020 umsatz : 150.00 fakturiert : true
Mitarbeiter name : Bob
Mitarbeiter name : Alice dob : 1980-01-01 erstelltVon
date : 2016-10-01
ansprechpartner
bearbeiterIntern
ers
tellt
Von
Nachbarschaft von : Bob anzKanten : 2
2
Aktivität 1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 33
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Graph Analytical Language - GrALa
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 34
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Domänenspezifische Sprache für das EPGM o Deklarative Operatoren für Logische Graphen und Graphmengen
o Anwendungslogik in benutzerdefinierten Funktionen
o Plugin-Konzept für externe Graphalgorithmen o Aktuell in Java implementiert
GrALa
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 35
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
o Variablen
o Zugriff auf Knoten und Kanten
o Symbole
o Zugriff auf ID / Label
o Zugriff auf Properties
o Benutzerdefinierte Funktionen
o Funktionen als Argument
o Verkettung
LogicalGraph graph; GraphCollection coll;
graph.vertices; graph.edges
:id :label
graph[:id]; graph[:label]; vertex[:label]
graph[‘anzKnoten‘]; vertex[‘name‘]
udf = (graph => graph[‘anzKnoten‘] > 42)
graph.foo(udf)
graph.foo(udf).bar(udf)
GrALa - Sprachkonstrukte
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 36
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
1 3
4
5 2
3
1 2
1 3
4
5 2
1 2 4
5
Combination
Overlap
Exclusion
3 Binäre Operatoren
LogicalGraph graph3 = graph1.combine(graph2) LogicalGraph graph4 = graph1.overlap(graph2) LogicalGraph graph5 = graph1.exclude(graph2)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 37
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
1 3
4
5 2
3
1 3
4
5 2
3 | anzKnoten: 5
UDF
Aggregation
udf = (graph => graph[‘anzKnoten’] = graph.vertices.size()) graph3 = graph3.aggregate(udf)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 38
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
UDF
3 | anzKnoten: 5
name:Alice
f_name:Bob 1 3
4
5 2
3 | Community| anzKnoten: 5
f_name:Alice
f_name:Bob 1 3
4
5 2
Transformation
graph3 = graph3.transform( (graphOld, graphNew => graphNew[:label] = ‘Community’), (vertexOld, vertexNew => vertexNew[‘f_name’] = vertexOld[‘name’] != null ? vertexOld[‘name’] : vertexOld[‘f_name’]), (edgeOld, edgeNew => edgeNew[:label] = edgeOld[:label] == ‘orange’ ? ‘rot’ : edgeOld[:label]))
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 39
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
3
1 3
4
5 2
3
4
1 2
3
5
1 2
6
3 5
2 UDF
UDF
UDF
Subgraph
LogicalGraph graph4 = graph3.subgraph( (vertex => vertex[:label] == ‘grün’), (edge => edge[:label] == ‘orange’)) LogicalGraph graph5 = graph3.subgraph((vertex => vertex[:label] == ‘grün’)) LogicalGraph graph6 = graph3.subgraph((edge => edge[:label] == ‘blau’))
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 40
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
3
1 3
4
5 2 Pattern
4 5
1 3
4
2
Graph Collection
Pattern Matching
GraphCollection collection = graph3.match(‘(:Grün)-[:orange]->(:Orange)’) // z.B. in Geschäftsdaten GraphCollection collection = graph3.match(‘(:Auftrag)-[:bearbeitetVon]->(:Mitarbeiter)’)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 41
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Keys
3
1 3
4
5 2
+Aggregate
3
a:23 a:84
a:42
a:12
1 3
4
5 2
a:13
a:21
4
count:2 count:3
max(a):42
max(a):84
max(a):13 max(a):21
6 7
4
6 7
Grouping
LogicalGraph grouped = graph3.groupBy( [:label], // vertex keys [:label]) // edge keys LogicalGraph grouped = graph3.groupBy([:label], [COUNT()], [:label], [MAX(‘a’)])
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 42
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
Operator
1
2
0 2
3
4 1
5 7 8 6
1 | anzKnoten: 5
2 | anzKnoten: 4
0 2
3
4 1
5 7 8 6
Apply (e.g. Aggregation)
collection = collection.apply( (graph => graph.aggregate((g => g[‘anzKnoten’] = g.vertices.size()))));
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 43
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
UDF
anzKnoten > 4
1 | anzKnoten: 5
2 | anzKnoten: 4
0 2
3
4 1
5 7 8 6
1 | anzKnoten: 5
0 2
3
4 1
Selection
GraphCollection filtered = collection.select((graph => graph[‘anzKnoten’] > 4))
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 46
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung GRADOOP
GraphCollection frequentPatterns = collection.callForCollection(new TransactionalFSM(0.5))
Call (e.g. Frequent Subgraph Mining)
FSM
Schwellwert : 50%
1
0 1 2
3
4
5 6 7
8
9
10
13
14
2
3
11 12
15 16
17 18
19 20
4
5
6
21 23 22
25 26 24
7
8
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 47
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
47
Business Intelligence
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 48
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
48
Business Intelligence
o Geschäftsdaten als Graph
o Analytische Beispiele:
o Geografische Kundenkontakte
o Nach verdächtigen Mustern suchen
o Analyse von Geschäftsprozessen (Quote-to-Cash)
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 49
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
49
Business Intelligence
manuell, teilweise automatisierbar
automatisch Domänenexperte
Metadaten
Metadaten-Graph
Integrierte Graphdaten
Daten
ERP, CRM, ... BizTalk etc. Web
Geschäftsdaten als Graph
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 50
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
50
Business Intelligence
CIT ERP
bestätigt
bedient
bedient
fakturiert
fakturiert fakturiert
Angebot
Auftrag Bestellung
Bestellung
Eingangsrechnung
Eingangsrechnung Ausgangsrechnung
Mitarbeiter id: Dave
Ticket id: TI-001 kosten: 500
betrifft
bearbeitetVon
bearbeitetVon
Geschäftsdaten als Graph
Mitarbeiter Mitarbeiter
Mitarbeiter
id: Alice land: UK
id: Bob land: DE
id: Carol land: DE
id: SI-001 umsatz : 5,000
id: PI-002 kosten: 1,500
id: PI-001 kosten: 2,000
id: PO-001 id: SO-001
id: PO-002
id: SQ-001
erstelltVon erstelltVon
bearbeitetVon
erstelltVon
erstelltVon
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 51
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
51
Business Intelligence
Beispiel 1 : Geographische Kundenkontakte mit Graph Grouping
Wie oft telefonieren Mitarbeiter und Kunden aus verschiedenen Ländern miteinander?
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 52
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
52
Business Intelligence
DataSource dataSource = new HBaseDataSource();
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 53
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
53
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
Mitarbeiter name: Alice land : DE
Mitarbeiter name: Bob land : NL
Mitarbeiter name: Carol land : UK
Mitarbeiter name: Dave land : UK
Kunde name: Paul land : DE
Kunde name: Arthur land : UK
Kunde name: Frank land : DE
Angebot id : QTN001
Kunde name: Chuck land : UK
1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 54
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
54
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
.subgraph(v => v[:label] == ‘Mitarbeiter‘ || v[:label] == ‘Kunde‘)
Mitarbeiter name: Alice land : DE
Mitarbeiter name: Bob land : NL
Mitarbeiter name: Carol land : UK
Mitarbeiter name: Dave land : UK
Kunde name: Paul land : DE
Kunde name: Arthur land : UK
Kunde name: Frank land : DE
Angebot id : QTN001
Kunde name: Chuck land : UK
1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 55
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
55
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
.subgraph(v => v[:label] == ‘Mitarbeiter‘ || v[:label] == ‘Kunde‘)
Mitarbeiter name: Alice land : DE
Mitarbeiter name: Bob land : NL
Mitarbeiter name: Carol land : UK
Mitarbeiter name: Dave land : UK
Kunde name: Paul land : DE
Kunde name: Arthur land : UK
Kunde name: Frank land : DE
Kunde name: Chuck land : UK
2
1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 56
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
56
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
.subgraph(v => v[:label] == ‘Mitarbeiter‘ || v[:label] == ‘Kunde‘)
.groupBy( [:label, ‘land‘], [COUNT()], [:label], [COUNT()]);
Mitarbeiter name: Alice land : DE
Mitarbeiter name: Bob land : NL
Mitarbeiter name: Carol land : UK
Mitarbeiter name: Dave land : UK
Kunde name: Paul land : DE
Kunde name: Arthur land : UK
Kunde name: Frank land : DE
Kunde name: Chuck land : UK
2
1
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 57
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
57
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
.subgraph(v => v[:label] == ‘Mitarbeiter‘ || v[:label] == ‘Kunde‘)
.groupBy( [:label, ‘land‘], [COUNT()], [:label], [COUNT()]);
Mitarbeiter land : DE count : 1
Mitarbeiter land : NL count : 1
Mitarbeiter land : UK count : 2
Kunde land : UK count : 2
Kunde land : DE count : 2
anruf count : 1
3
anruf count : 1
anruf count : 1
anruf count : 1
anruf count : 2
anruf count : 1
2
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 58
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
58
Business Intelligence
DataSource dataSource = new HBaseDataSource();
LogicalGraph graph = dataSource.toLogicalGraph()
.subgraph(v => v[:label] == ‘Mitarbeiter‘ || v[:label] == ‘Kunde‘)
.groupBy( [:label, ‘land‘], [COUNT()], [:label], [COUNT()]);
graph.writeTo(new JSONDataSink(‘hdfs:///result‘)
Mitarbeiter land : DE count : 1
Mitarbeiter land : NL count : 1
Mitarbeiter land : UK count : 2
Kunde land : UK count : 2
Kunde land : DE count : 2
anruf count : 1
3
anruf count : 1
anruf count : 1
anruf count : 1
anruf count : 2
anruf count : 1
2
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 59
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
59
Business Intelligence
Wie oft telefonieren Mitarbeiter und Kunden aus verschiedenen Ländern miteinander?
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 60
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
60
Business Intelligence
Beispiel 2: Nach verdächtigen Mustern suchen mit Pattern Matching
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 61
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
61
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
entspricht
Kontaktperson
Mitarbeiter
Geschäftsdaten
Nutzer
1
freunde
Soziales Netzwerk
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 62
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
62
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
Nutzer entspricht
entspricht
bearbeitetVon
Nutzer
Mitarbeiter
Kontaktperson Zulieferer
Eingangsrechnung
von
gehörtZu
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 63
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
63
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
e
c
Nutzer entspricht
entspricht
bearbeitetVon
Nutzer
Mitarbeiter
Kontaktperson Zulieferer
Eingangsrechnung
von
gehörtZu
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 64
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
64
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
2
e
c
Nutzer name: Alice
entspricht
entspricht
bearbeitetVon
Nutzer name: Bob
Mitarbeiter name: Alice Smith
Kontaktperson name: Bob Miller
Zulieferer name: Elbe Blech
Eingangsrechnung umsatz : 1337
von
gehörtZu
3
4
…
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 65
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
65
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
.apply(g => g.subgraph(e => e[:label] == ‘freunde‘));
2
e
c
Nutzer name: Alice
entspricht
entspricht
bearbeitetVon
Nutzer name: Bob
Mitarbeiter name: Alice Smith
Kontaktperson name: Bob Miller
Zulieferer name: Elbe Blech
Eingangsrechnung umsatz : 1337
von
gehörtZu
3
4
…
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 66
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
66
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
.apply(g => g.subgraph(e => e[:label] == ‘freunde‘));
5 Nutzer name: Alice
Nutzer name: Bob
6
7 …
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 67
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
67
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
.apply(g => g.subgraph(e => e[:label] == ‘freunde‘));
Table result = collection.edges()
5 Nutzer name: Alice
Nutzer name: Bob
6
7 …
SOURCE EDGE TARGET
Alice freunde Bob
Alice freunde Bob
Eve freunde Frank
Alice freunde Bob
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 68
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
68
Business Intelligence
LogicalGraph graph = dataSource.toLogicalGraph();
GraphCollection coll = graph.match(
(e:Mitarbeiter)<-[:bearbeitetVon]-(:Eingangsrechnung)-[:von]->(:Zulieferer)<-[:gehörtZu]-(c:Kontaktperson)
(c)-[:entspricht]->(:Nutzer)-[:freunde]->(:Nutzer)<-[:entspricht]-(e))
.apply(g => g.subgraph(e => e[:label] == ‘freunde‘));
Table result = collection.edges()
.groupBy(SOURCE, TARGET).count();
5 Nutzer name: Alice
Nutzer name: Bob
6
7 …
SRC TRGT CNT
Alice Bob 3
Eve Frank 1
SOURCE EDGE TARGET
Alice freunde Bob
Alice freunde Bob
Eve freunde Frank
Alice freunde Bob
freunde
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 69
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
69
Business Intelligence
Beispiel 3: Quote-to-Cash Analyse von Geschäftsprozessen
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 70
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
70
Business Intelligence
Quote-to-Cash
Kampagne thema: Äpfel Telefonat
Sachkonto name: umsatz
Sachkonto name: kosten Buchung
betrag: -200
Zahlung
Zahlung
Zahlung
Buchung betrag: 100
Buchung betrag: 100
Buchung betrag: 100
Kunde name: ACME
Ausgangsrechnung betrag: 300
Mitarbeiter name: Alice
Visit
Mitarbeiter name: Bob
Angebot
Produkt name: Apfel
anz : 100 preis: 1.50
Produkt name: Birne
anz : 200 preis: 1.00
Auftrag
Mitarbeiter name: Carol
anz : 300 preis: 1.00
Zulieferer name: East Fruits
Mitarbeiter name: Dave
Bestellung
anz : 100 | preis: 0.50
Bestellung
Zulieferer name: West Fruits anz : 200 | preis: 1.00
Buchung betrag: -200
Buchung betrag: -50
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 71
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
71
Business Intelligence
Kampagne thema: Äpfel Telefonat
Sachkonto name: umsatz
Sachkonto name: kosten
Buchung betrag: 100
Buchung betrag: -100
Telefonat
Telefonat
Telefonat
Telefonat
Buchung betrag: 500
Buchung betrag: 400
Buchung betrag: 300
Buchung betrag: 200
Buchung betrag: -200
Buchung betrag: -300
Buchung betrag: -400 Buchung
betrag: -500
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 72
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
72
Business Intelligence
0: LogicalGraph iig = dataSource.getLogicalGraph();
1: GraphCollection btgs = iig.callForCollection(new BusinessTransactionGraphs())
Integrierte Graphdaten
iig
btgs
Geschäftsfälle als Graphmenge
1
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 73
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
73
Business Intelligence
CIT ERP
Auftrag id: SO-001
bestätigt
Bestellung
Bestellung
Ausgangsrechnung
id: SI-001 umsatz : 5,000
id: PO-001
id: PO-002
bedient
bedient
fakturiert
Angebot id: SQ-001
Mitarbeiter
Mitarbeiter id: Dave
Mitarbeiter
Mitarbeiter
id: Alice land: UK
id: Bob land: DE
id: Carol land: DE
bearbeitetVon
bearbeitetVon
erstelltVon erstelltVon
bearbeitetVon
erstelltVon
erstelltVon
Eingangsrechnung
Eingangsrechnung id: PI-002 kosten: 1,500
id: PI-001 kosten: 2,000
fakturiert
fakturiert
betrifft Ticket id: TI-001 kosten: 500
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 74
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
74
Business Intelligence
0: LogicalGraph iig = dataSource.getLogicalGraph();
1: GraphCollection btgs = iig.callForCollection(new BusinessTransactionGraphs())
2: .apply(g => g.aggregate([SUM(‘umsatz’), SUM(‘kosten’)], [])
Integrierte Graphdaten
iig
btgs
Geschäftsfälle als Graphmenge
2
btgs
3000,2000
4000,3500
2000,2000
1000,1500
7500,6500
1000,3500
500, 500
Geschäftsfälle mit Umsatz und Ausgaben
1
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 75
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
75
Business Intelligence
id: PI-001 kosten: 2,000
id: PI-002 kosten: 1,500 id: SI-001
umsatz : 5,000
Ticket id: TI-001 kosten: 500
CIT ERP
bestätigt
bedient
bedient
fakturiert
fakturiert
fakturiert
Angebot
Auftrag Bestellung
Bestellung
Ausgangssrechnung
Eingangsrechnung
Eingangsrechnung Mitarbeiter id: Dave
betrifft
bearbeitetVon
bearbeitetVon
Mitarbeiter Mitarbeiter
Mitarbeiter
id: Alice land: UK
id: Bob land: DE
id: Carol land: DE
id: PO-001 id: SO-001
id: PO-002
id: SQ-001
erstelltVon erstelltVon
bearbeitetVon
erstelltVon
erstelltVon
sum(umsatz) : 5,000 | sum(kosten): 4,000 Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 76
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
76
Business Intelligence
0: LogicalGraph iig = dataSource.getLogicalGraph();
1: GraphCollection btgs = iig.callForCollection(new BusinessTransactionGraphs())
2: .apply(g => g.aggregate([SUM(‘umsatz’), SUM(‘kosten’)], [])
3: .transform(categorizeGraphHead, changeVertexLabels);
Integrierte Graphdaten
iig
btgs
Geschäftsfälle als Graphmenge
btgs
3000,2000
4000,3500
2000,2000
1000,1500
7500,6500
1000,3500
500, 500
Geschäftsfälle mit Umsatz und Ausgaben
1 2
btgs
Kategorisierte Geschäftsfälle
3
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 77
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
77
Business Intelligence
id: PI-001 kosten: 2,000
id: PI-002 kosten: 1,500
id: SI-001 umsatz : 5,000
Ticket id: TI-001 kosten: 500
CIT ERP
bestätigt
bedient
bedient
fakturiert
fakturiert
fakturiert
Angebot
Auftrag Bestellung
Bestellung
Eingangsrechnung
Eingangsrechnung
Eingangsrechnung
Mitarbeiter id: Dave
betrifft
bearbeitetVon
bearbeitetVon
Mitarbeiter Mitarbeiter
Mitarbeiter
id: Alice land: UK
id: Bob land: DE
id: Carol land: DE
id: PO-001 id: SO-001
id: PO-002
id: SQ-001
erstelltVon erstelltVon
bearbeitetVon
erstelltVon
erstelltVon
Quote-to-Cash sum(umsatz) : 5,000 | sum(kosten): 4,000
categorizeGraphHead = (Graph in, Graph out => out[‘category‘] = (in[‘sum(umsatz)‘] - in[‘sum(kosten)‘] > 0 ? ‘gewinn‘ : ‘verlust‘) ) changeVertexLabels = (Vertex in, Vertex out => out[:label] = (in[‘superClass‘] == ‘MasterData‘ ? in[‘id‘] : in[:label]) )
category: ‘gewinn‘
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 78
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
78
Business Intelligence
Ticket
CIT ERP
bestätigt
bedient
bedient
fakturiert
fakturiert
fakturiert
Angebot
Auftrag Bestellung
Bestellung
Ausgangsrechnung
Eingangsrechnung
Eingangsrechnung
Mitarbeiter id: Dave
betrifft
bearbeitetVon
bearbeitetVon
Mitarbeiter Mitarbeiter
Mitarbeiter
id: Alice land: UK
id: Bob land: DE
id: Carol land: DE
erstelltVon erstelltVon
bearbeitetVon
erstelltVon
erstelltVon
Quote-to-Cash category: ‘gewinn‘
Alice
Bob
Carol
Dave
id: PI-001 kosten: 2,000
id: PI-002 kosten: 1,500 id: SI-001
umsatz : 5,000
id: PO-001 id: SO-001
id: PO-002
id: SQ-001
id: TI-001 kosten: 500
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 79
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
79
Business Intelligence
0: LogicalGraph iig = dataSource.getLogicalGraph();
1: GraphCollection btgs = iig.callForCollection(new BusinessTransactionGraphs())
2: .apply(g => g.aggregate([SUM(‘umsatz’), SUM(‘kosten’)], [])
3: .transform(categorizeGraphHead, changeVertexLabels);
4: GraphCollection patterns = btgs.callForCollection(new CategoryCharacteristicSubgraphs(0.8, 2.0)
Integrierte Graphdaten
iig
btgs
Geschäftsfälle als Graphmenge
btgs
3000,2000
4000,3500
2000,2000
1000,1500
7500,6500
1000,3500
500, 500
Geschäftsfälle mit Umsatz und Ausgaben
btgs
Kategorisierte Geschäftsfälle
1 2 3
patterns
Charakteristische Graphmuster
4
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 80
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
80
Business Intelligence
0: LogicalGraph iig = dataSource.getLogicalGraph();
1: GraphCollection btgs = iig.callForCollection(new BusinessTransactionGraphs())
2: .apply(g => g.aggregate([SUM(‘umsatz’), SUM(‘kosten’)], [])
3: .transform(categorizeGraphHead, changeVertexLabels);
4: GraphCollection patterns = btgs.callForCollection(new CategoryCharacteristicSubgraphs(0.8, 2.0)
Integrierte Graphdaten
iig
btgs
Geschäftsfälle als Graphmenge
btgs
3000,2000
4000,3500
2000,2000
1000,1500
7500,6500
1000,3500
500, 500
Geschäftsfälle mit Umsatz und Ausgaben
btgs
Kategorisierte Geschäftsfälle
1 2 3
patterns
Charakteristische Graphmuster
4
Alice Email
1 | category : ‘gewinn‘
Angebot Email Telefonat
2 | category : ‘gewinn‘
Angebot Alice Email Telefonat Bob
3 | category : ‘gewinn‘
Angebot Email Eve
4 | category : ‘verlust‘
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 81
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
81
Business Intelligence
o Eingabe: KPI und Kategorisierung
o Muster werden automatisch gefunden
o Keine Vermutung notwendig (z.B. überprüfe E-Mails)
o Muster können weiter verwendet werden (Filtern, Anzeigen,...)
Angebot
Alice
Email Telefonat
Bob
Quote-to-Cash
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 82
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
82
Zusammenfassung
Gut vernetzt: Skalierbares Graph Mining für Business Intelligence 83
Graphs are everywhere GRADOOP Business Intelligence Zusammenfassung
83
Zusammenfassung
o Open Source Framework
o Deklarative Graphanalyse
o Ausdrucksstarkes und flexibles Datenmodell
o Erweiterung von BI durch neuartige Netzwerkanalysen
o Big Data ready
Junghanns, M.; Petermann, A.
Verteilte Graphanalyse mit Gradoop JavaSPEKTRUM 05/2016
Petermann, A.; Junghanns, M.
Scalable Business Intelligence with Graph Collections it - Information Technology, Special Issue: Big Data Analytics (2016)
Junghanns, M.; Petermann, A.; Teichmann, N.; Gomez, K.; Rahm, E.
Analyzing Extended Property Graphs with Apache Flink International Workshop on Network Data Analytics @ SIGMOD (2016)
Petermann, A.; Junghanns, M.; Kemper, S.; Gomez, K.; Teichmann, N.; Rahm, E.
Graph Mining for Complex Data Analytics Demonstration @ IEEE International Conference on Data Mining (2016)
Petermann, A.; Junghanns, M.; Müller, R.; Rahm, E.
Graph-based Data Integration and Business Intelligence with BIIIG Demonstration @ International Conference on Very Large Databases (2014)
GRADOOP @ inovex Meetup München 06/2016 http://www.slideshare.net/s1ck/distributed-graph-analytics-with-gradoop
GRADOOP @ Flink & Neo4j Meetup Berlin 03/2016 http://www.slideshare.net/s1ck/gradoop-scalable-graph-analytics-with-apache-flink-flink-neo4j-meetup-berlin
GRADOOP @ FlinkForward 2015 http://www.slideshare.net/FlinkForward/martin-junghans-gradoop-scalable-graph-analytics-with-apache-flink
Ausgewählte Artikel und Vorträge
www.gradoop.com