WEBVTT

00:00:00.000 --> 00:00:06.600
Hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, heute Episode 67, wir reden über Data Science.

00:00:06.600 --> 00:00:10.020
Hallo Dominik und herzlich willkommen.

00:00:10.020 --> 00:00:12.900
Hi Mira, schön, dass du da bist.

00:00:12.900 --> 00:00:19.720
Normalerweise fangen wir immer mit News an, da hat Jochen gesagt, haben wir heute gar nicht so viele und die letzten sind auch gar nicht so lange her.

00:00:19.720 --> 00:00:21.380
Wir reden über Data Science.

00:00:21.380 --> 00:00:29.120
Wir wollten glaube ich nochmal ganz von vorne anfangen, weil wir noch nicht so viele Data Science-Folgen hatten oder uns vorgenommen hatten, noch einige mehr davon aufzunehmen, als wir bis jetzt haben.

00:00:29.120 --> 00:00:31.080
Und mit Python macht man ja recht viel Data Science.

00:00:31.080 --> 00:00:36.180
Vielleicht erzählst du aber erstmal was über dich und stellst dich kurz vor und dann sprechen wir über das Thema.

00:00:36.180 --> 00:00:42.360
Ja gerne, also praktischerweise bin ich Data Scientist, das heißt wir haben heute bestimmt eine Menge zu besprechen.

00:00:42.360 --> 00:00:47.920
Ich bin auch seit einem Jahr Geschäftsführerin zusammen mit einem Kollegen in unserer Beratung.

00:00:47.920 --> 00:00:55.120
Ich habe dort angefangen direkt nach dem Studium, bin da seit einigen Jahren und inzwischen bin ich dann mit an die Spitze gerückt.

00:00:55.120 --> 00:00:58.060
Ursprünglich habe ich aber Psychologie studiert.

00:00:58.240 --> 00:01:01.200
Und so richtig weg davon bin ich auch gar nicht.

00:01:01.200 --> 00:01:04.600
Man muss auch sagen, dass man in der Psychologie schon auch viel Datenanalyse und Statistik macht.

00:01:04.600 --> 00:01:06.320
Und da hat es mir noch nicht gereicht.

00:01:06.320 --> 00:01:12.480
Deswegen habe ich dann noch einen Statistik-Master drangehängt und bin dann so in der Statistik-Beratung damals gelandet.

00:01:12.480 --> 00:01:14.180
Da hieß es noch mehr Statistik.

00:01:14.180 --> 00:01:23.520
Inzwischen würden wir natürlich sagen, wir machen Data Science oder aktuell sagt man wahrscheinlich am besten noch AI, damit halt auch wirklich klar ist, was eigentlich gemeint ist.

00:01:23.520 --> 00:01:27.620
So erinnern sich die Begriffe ein bisschen und es ist natürlich über die Zeit auch total viel dazugekommen.

00:01:27.720 --> 00:01:32.120
Machine Learning, was ja vor einigen Jahren eben noch nicht so da war.

00:01:32.120 --> 00:01:34.740
Vor einigen Jahren haben wir noch ganz viel mit R gemacht.

00:01:34.740 --> 00:01:41.400
Am Anfang inzwischen ist eigentlich fast alles in Python, bis auch so ein paar einzelne Projekte, vor allem im Forschungsbereich.

00:01:41.400 --> 00:01:43.320
Da sind die Leute dann ein bisschen mehr mit R unterwegs.

00:01:43.320 --> 00:01:43.840
Ja.

00:01:43.840 --> 00:01:47.760
Und ja, ich kann gerne noch ganz kurz was über mein Unternehmen sagen.

00:01:47.760 --> 00:01:54.000
Wir sind eine Data Science Beratung, haben also sehr viele wechselnde Projekte, sind 17 Leute, sind in Berlin.

00:01:54.000 --> 00:01:57.580
Das heißt, zum Hörertreffen wird es dann wahrscheinlich auch nichts für mich.

00:01:57.720 --> 00:01:59.980
Weil es dann ein bisschen zu weit ist, um mal kurz vorbeizukommen.

00:01:59.980 --> 00:02:02.920
Und die Deutsche Bahn hatte ich letztes Wochenende wieder von Berlin hierher.

00:02:02.920 --> 00:02:04.040
Das war wieder hervorragend.

00:02:04.040 --> 00:02:08.620
Ja, sollte man sich einfach ein paar gute Podcasts vorher mitnehmen.

00:02:08.620 --> 00:02:10.380
Wir haben ja noch ein paar.

00:02:10.380 --> 00:02:11.880
Vielleicht habt ihr noch nicht alle gehört.

00:02:11.880 --> 00:02:16.480
Ja, da kann man dann schon noch ein bisschen länger Bahn fahren.

00:02:16.480 --> 00:02:25.820
Ja, und aktuell bin ich witzigerweise, also ich habe erst viel Data Science gemacht, bin dann immer mehr auch in die Projektleitung gegangen.

00:02:25.820 --> 00:02:27.400
Und da passt es dann ja auch wieder.

00:02:27.520 --> 00:02:33.240
Und jetzt bin ich aber witzigerweise ein bisschen back to the roots, bin im Kundenprojekt drin.

00:02:33.240 --> 00:02:38.680
So Body Leasing mäßig dort mit im Team und bin dann klassisch als Data Scientist im Team drin.

00:02:38.680 --> 00:02:40.200
Und das macht mir auch ganz großen Spaß.

00:02:40.200 --> 00:02:45.500
Wir haben teilweise länger laufende Projekte, aber auch manchmal Einzelprojekte, die nur ein paar Monate sind.

00:02:45.500 --> 00:02:51.140
Und das ist natürlich auch total spannend, weil man dann sehr viel Abwechslung hat und in verschiedene Themen reinkommt.

00:02:51.140 --> 00:02:53.760
Und wir haben auch einen Podcast.

00:02:53.760 --> 00:02:57.380
Das ist der Grund, warum ich jetzt hier sitze und ihr mich kennt.

00:02:57.520 --> 00:02:57.680
Ja.

00:02:57.680 --> 00:03:06.320
Ein Unternehmenspodcast, in dem ich manchmal, aber auch nicht immer zu hören bin, wo wir ganz viele Themen rund um Data Science besprechen, den Data Science Deep Dive.

00:03:06.320 --> 00:03:07.360
Genau, das ist sehr spannend.

00:03:07.360 --> 00:03:08.720
Ja, habe ich auch schon reingehört, fand ich sehr gut.

00:03:08.720 --> 00:03:09.080
Ja.

00:03:09.080 --> 00:03:09.920
Ja, gut.

00:03:09.920 --> 00:03:12.060
Also, was ist denn eigentlich Data Science?

00:03:12.060 --> 00:03:18.120
Ja, also ganz geschwollen ausgedrückt, wir wollen Erkenntnisse aus Daten gewinnen.

00:03:18.120 --> 00:03:26.140
Das ist jetzt auch irgendwie ziemlich allgemein, aber es geht darum, dass man Dinge versteht, dass man auch Dinge vorlehr sagt und dass man teilweise sogar Entscheidungen dann trifft.

00:03:26.140 --> 00:03:27.480
Entweder noch manuell.

00:03:27.520 --> 00:03:30.340
Oder sogar automatisiert auf Basis von Daten.

00:03:30.340 --> 00:03:40.180
Oder anders gesagt, man will halt aus großen und oft komplexen Datensätzen Muster erkennen, die man jetzt mit bloßem Auge überhaupt nicht erkennen könnte und nur erkennt, wenn man eine Analyse macht.

00:03:40.180 --> 00:03:45.400
Also tatsächlich Statistik im weiteren Sinne, wie man das halt dann in der Technologie oder in der Geometrie oder so.

00:03:45.400 --> 00:03:52.160
Auf jeden Fall, ja, ein Teil ist ja auch so, manche sagen ja Statistik oder Machine Learning, das überschneidet sich auch an ganz vielen Stellen.

00:03:52.160 --> 00:03:54.680
Ja, klar.

00:03:54.680 --> 00:03:57.280
Man sagt ja auch oft, man braucht so drei Bereiche.

00:03:57.400 --> 00:04:08.400
Das eine ist die fachliche Expertise, also ich kenne mich zum Beispiel aus mit, ja, einfach mit dem Bereich, in dem ich gerade was mache, zum Beispiel Umweltdaten oder Verkaufsdaten, Online-Shopping, was auch immer.

00:04:08.400 --> 00:04:15.500
Das zweite sind methodische Kenntnisse, da sind wir halt bei dem Thema Statistik, Machine Learning, haben Leute natürlich auch unterschiedliche Schwerpunkte.

00:04:15.500 --> 00:04:20.420
Manche sind mehr mit Bilddaten unterwegs, mit Text, mit tabularen Daten, da bin ich vor allem unterwegs.

00:04:20.420 --> 00:04:26.740
Und das dritte ist, dass man natürlich auch Coding-Kenntnisse braucht, also so das, was aus der Informatik kommt.

00:04:27.280 --> 00:04:30.000
Damit man seine Analysen irgendwie programmieren kann.

00:04:30.000 --> 00:04:44.320
Es ist natürlich irgendwie auch fast zu viel verlangt, das alles gleichzeitig zu können, also dass ich super gut coden kann, dass ich auch noch super gut in Statistik und Machine Learning bin und dann gleichzeitig noch in dem Fachbereich so lange unterwegs bin, dass ich mich da wahnsinnig gut auskenne.

00:04:44.320 --> 00:04:57.160
Ist ja doch ziemlich viel, das schafft man vielleicht nach ein paar Jahren, aber deswegen sind wir auch meistens in Teams unterwegs oder wir als Beratung, wir sind natürlich daran gewöhnt, dass wir uns schnell neue Themen reinfinden, trotzdem brauchen wir eine neue.

00:04:57.160 --> 00:05:06.020
Das ist natürlich auch ein Projekt, natürlich ganz viel Kommunikation mit unseren Kunden, die uns auch ihre Fachexpertise dann mitgeben, weil wir dann vor allem die methodischen Kenntnisse und das Coding mitbringen.

00:05:06.020 --> 00:05:12.700
Das finde ich auch immer am schwierigsten mit Kunden, also die Domain-Knowledge dann zu haben oder jemanden zu haben, mit dem man darüber reden kann.

00:05:12.700 --> 00:05:15.360
Jemanden so eine Sprache zu finden, das ist schwierig oft.

00:05:15.360 --> 00:05:24.220
Genau, auf dem Level, dass man halt versteht, was man gegenseitig voneinander will oder was man bereitstellen kann oder wie lange das dauert und Sachen, die man auf der einen Seite für einfach hält, sind auf der anderen Seite vielleicht ein bisschen schwieriger.

00:05:27.040 --> 00:05:30.700
Du hast eben schon angesprochen, Body Leasing, also quasi in den Teams selber unterwegs.

00:05:30.700 --> 00:05:32.760
Unterschiedlich.

00:05:32.760 --> 00:05:40.840
Achso, oder ihr setzt auch Projekte komplett um für Kunden als Team sozusagen und gebt dann ein Produkt an den Kunden oder so.

00:05:40.840 --> 00:05:45.560
Ja, sehr, sehr unterschiedlich.

00:05:45.560 --> 00:05:50.240
Also wir sind für einen langjährigen Kunden sind wir eigentlich fast so wie eine zweite Data Science Abteilung.

00:05:50.240 --> 00:05:56.820
Wir haben auch selbst eine Data Science Abteilung, aber die Aufgaben sind dann so verteilt und da machen wir auch den,

00:05:56.920 --> 00:05:58.560
den kompletten Betrieb und die Wartung mit.

00:05:58.560 --> 00:06:03.620
Also wir machen nicht nur die reine Data Science, sondern auch alles, was im DevOps-Bereich anfällt.

00:06:03.620 --> 00:06:11.280
Ich bin aber mehr im Data Science Bereich unterwegs und wir haben eben ja auch zunehmend das Thema Body Leasing.

00:06:11.280 --> 00:06:15.980
Das war früher irgendwie kaum, weil früher hatten viele Unternehmen auch selbst keine Data Science Abteilung.

00:06:15.980 --> 00:06:20.740
Da gab es eine Zeit, da waren die halt alle irgendwie ganz verzweifelt und waren dann total froh, dass das jemand für sie macht.

00:06:20.740 --> 00:06:26.800
Und inzwischen ist es eher so, dass die Unternehmen, die groß sind und die überhaupt von der Kultur her in Richtung,

00:06:26.800 --> 00:06:30.800
in Richtung datenbasiertes Unternehmen gehen, die haben jetzt eine Data Science Abteilung,

00:06:30.800 --> 00:06:35.660
aber die haben dann halt hier und da mal Lücken und finden niemanden und nehmen uns dann dann dazu.

00:06:35.660 --> 00:06:43.640
Wenn du jetzt Methoden angesprochen hast, was würdest du denn sagen, wie ist das denn in der Praxis?

00:06:43.640 --> 00:06:48.800
Habt ihr da viel mit sophisticated Methoden noch zu tun, die ihr jetzt aus der Uni oder so noch kennt?

00:06:48.800 --> 00:06:56.380
Oder ist das meistens dann schon einfaches Zeugs, weil einfach die Datenprobleme andere sind, als jetzt gute Methoden auszusuchen?

00:06:56.680 --> 00:07:00.040
Es ist tatsächlich oft ziemlich anspruchsvoll.

00:07:00.040 --> 00:07:05.340
Ich glaube, das sind aber auch so die Projekte, die wir uns rauspicken oder für die wir dann auch weiter empfohlen werden.

00:07:05.340 --> 00:07:09.440
Wir haben zum Beispiel was im Sportwettenbereich und da kann man sich ja vorstellen, wenn man mal überlegt,

00:07:09.440 --> 00:07:16.040
wie sag ich eigentlich vorher, wie viele Tore von diesen beiden Mannschaften in diesem Spiel fallen und wie viel in der ersten und zweiten Halbzeit und so.

00:07:16.040 --> 00:07:21.680
Es wird schon ganz schön kompliziert und da haben dann die Leute mit Statistik hintergrund auch ganz schön Spaß.

00:07:21.680 --> 00:07:26.560
Manchmal sind die Sachen halt noch ein bisschen simpel, aber oft wird es dann doch irgendwie schon ein bisschen kompliziert.

00:07:26.560 --> 00:07:30.440
Wir sind aber auch tatsächlich darauf spezialisiert.

00:07:30.440 --> 00:07:36.100
Also es gibt ja auch ganz viele Sachen, wo vielleicht auch erstmal eine gute Visualisierung ausreicht.

00:07:36.100 --> 00:07:43.140
Visualisierung machen wir natürlich auch mit, aber ein Projekt, wo es nur um Dashboard mit Visualisierung geht, landet seltener bei uns.

00:07:43.140 --> 00:07:47.600
Ja, wie kommt man denn eigentlich zur Data Science?

00:07:47.600 --> 00:07:51.980
Du hast gesagt, du hast Psychologie studiert und dann fandst du Statistik spannend.

00:07:51.980 --> 00:07:56.440
Ich habe vorher auch Wirtschaftslehre studiert und da fand ich auch Statistik eigentlich spannend.

00:07:56.440 --> 00:08:02.900
Es hat bei mir noch ein bisschen Umweg gebraucht, aber ich glaube, auch da hätte man direkt den Weg Richtung Data Science finden können.

00:08:02.900 --> 00:08:06.580
Ja, auf jeden Fall. Also das ist auch so ein typischer Hintergrund.

00:08:06.580 --> 00:08:13.040
Ich habe ja in dem Statistik-Master war ich ja, da waren viele, die vorher Mathe gemacht haben, aber auch viele mit ganz anderen Hintergründen,

00:08:13.040 --> 00:08:19.400
viel Wirtschaftswissenschaften, aber auch KollegInnen mit Soziologie-Hintergrund oder Physik.

00:08:19.400 --> 00:08:25.520
Ich glaube, das ist sogar so ein bisschen Klassiker, dass die Physiker sich irgendwie dann in die Statistik- und Machine Learning-Welt verirren.

00:08:26.320 --> 00:08:31.040
Und wir haben noch gar nicht so lange, haben wir auch jemanden mit Informatik-Hintergrund.

00:08:31.040 --> 00:08:32.040
Das klingt irgendwie witzig.

00:08:32.040 --> 00:08:33.200
Ich habe jetzt auch.

00:08:33.200 --> 00:08:40.320
Nur Leute, also die sind schon, ich glaube schon drei Jahre bei uns, aber ja, vorher hatten wir nur Leute mit einem anderen Hintergrund.

00:08:40.320 --> 00:08:47.440
Ich glaube, es ist aber ein bisschen schwieriger geworden, quer einzusteigen, weil es inzwischen ja sehr viele tatsächlich Data Science-Studiengänge gibt

00:08:47.440 --> 00:08:56.200
oder Informatik mit ganz starkem Machine Learning-Schwerpunkt und wenn man dann sagt, ja, ich habe da, also ich habe BWL studiert und ich finde Statistik gut,

00:08:56.200 --> 00:09:01.580
und habe ein paar Kurse gemacht, dann konkurriert man halt inzwischen mit Leuten, die da leider dann schon viel, viel mehr mitbringen.

00:09:01.580 --> 00:09:03.240
Also ich glaube, das ist schon schwieriger geworden.

00:09:03.240 --> 00:09:06.320
Der BWL ist ja auch nicht VWL zum Beispiel.

00:09:06.320 --> 00:09:13.020
Ja, ich weiß. Aber es ist ja auch ein Fach, wo man ja doch, je nachdem, wie man sich da orientiert, viel Statistik machen kann.

00:09:13.020 --> 00:09:15.380
Ja, also Ökonometrie kann man schon tief reingehen, glaube ich da.

00:09:15.380 --> 00:09:20.120
Es ist halt die Frage, wie gut man dann in das Programmieren reinkommt und in das, was man da an Methoden noch so mitbringt.

00:09:20.120 --> 00:09:24.360
Ja, aber das ist auf jeden Fall eine interessante Geschichte.

00:09:26.080 --> 00:09:31.040
In den Data-Science-Projekten, in denen ich so unterwegs war, halt auch irgendwie immer wieder gesehen, dass halt oft die Leute,

00:09:31.040 --> 00:09:36.280
also ich weiß nicht, wie das bei euch ist, ob ihr, weil normalerweise Software-Entwicklungsgeschichten, die ich so mache,

00:09:36.280 --> 00:09:40.440
da habe ich dann halt eben mit Abteilungen zu tun, die halt irgendwie Software-Entwicklung machen oder so,

00:09:40.440 --> 00:09:44.700
aber bei den Data-Science-Geschichten ist es immer sowas wie Business Intelligence oder so.

00:09:44.700 --> 00:09:49.340
Und das sind andere Leute, das ist ein bisschen so, die sind so ähnlich, also das sind oft irgendwie Leute,

00:09:49.340 --> 00:09:55.220
die was Naturwissenschaftliches studiert haben oder so, dann da promoviert haben, genau, ganz oft aus der Ecke eher.

00:09:55.960 --> 00:10:03.200
Und die eher so, ja, Analysten-Dinge tun, oft viel SQL schreiben und so.

00:10:03.200 --> 00:10:06.500
Und das ist irgendwie ein bisschen anders als bei den Software-Entwicklern.

00:10:06.500 --> 00:10:11.320
Und die haben auch meistens oft so ein bisschen so, ja, Produkte entwickeln oder so, ist jetzt eigentlich nicht so unser Ding.

00:10:11.320 --> 00:10:14.380
Genau, und das ist irgendwie eine etwas andere Welt.

00:10:14.380 --> 00:10:18.840
Also da gibt es oft eine Trennung zwischen Software-Entwicklung und eben in diesem ganzen…

00:10:18.840 --> 00:10:22.820
Und da wolltest du ja auch nochmal was zu sagen, wie du das so findest, mit der Software-Entwicklung zusammenzuarbeiten.

00:10:22.820 --> 00:10:25.840
Aber vielleicht noch erst dazu, ich glaube, wir sind da irgendwie so…

00:10:25.840 --> 00:10:32.580
Dazwischen, weil wir eben ja schon Datenprodukte bauen wollen, also es gibt auch mal ein POC oder irgendwie so eine einzelne Analyse,

00:10:32.580 --> 00:10:35.440
wo wir dann sagen, so, und das sind die Ergebnisse und hier sind die Zusammenhänge,

00:10:35.440 --> 00:10:42.340
aber normalerweise sind das dann schon, also schreiben wir auch Software, aber wir schreiben Software, die was mit Daten macht.

00:10:42.340 --> 00:10:45.680
Also dann sind zwei Sachen zusammen.

00:10:45.680 --> 00:10:55.600
Und BI-Abteilungen sind, glaube ich, auch nochmal mehr, ja, die sind halt besonders gut darin, dann auch ganz viel visuell zu analysieren.

00:10:55.720 --> 00:10:57.760
Und fokussieren sich sehr stark darauf.

00:10:57.760 --> 00:11:05.720
Und ich glaube, die sind auch nochmal so ein bisschen, vielleicht noch ein bisschen weniger nerdig, hätte ich jetzt so gedacht, so mit der…

00:11:05.720 --> 00:11:08.020
Das klingt, als wäre es kein Kompliment.

00:11:08.020 --> 00:11:09.860
Ich weiß nicht, ich dachte eben, ne.

00:11:09.860 --> 00:11:12.820
Das ist das, ohne Wertung zu sagen.

00:11:12.820 --> 00:11:15.860
Oh, ja.

00:11:15.860 --> 00:11:25.000
Ja, aber was du eben gefragt hättest, so, das ist auch jetzt ganz spannend, ich bin jetzt im Team, wo eigentlich relativ klar zugeordnet ist,

00:11:25.000 --> 00:11:25.600
wie es Data Science ist.

00:11:25.600 --> 00:11:28.020
Und wer ist Software-Engineer?

00:11:28.020 --> 00:11:37.660
Und natürlich arbeiten wir alle an dem Code, aber es ist, also es gibt eben so ein paar Klischees oder so Dinge, die man vielleicht beobachtet,

00:11:37.660 --> 00:11:45.080
wenn jemand, der vor allem einen Software-Entwicklungshintergrund hat, jetzt zum ersten Mal versucht, Daten zu analysieren und Data Science zu machen.

00:11:45.080 --> 00:11:53.280
Wir haben auch mal ein Projekt übernommen, wo wir entsprechenden Code dann, tatsächlich sollte man ja refactoren und wir haben auch viel refactored,

00:11:53.280 --> 00:11:54.940
aber da haben wir einen Teil wirklich neu geschrieben.

00:11:55.480 --> 00:12:04.380
Und das, also, am Coding-Stil hat man schon gesehen, dass der einfach gar nicht wusste, dass man mit Datensätzen Sachen machen kann.

00:12:04.380 --> 00:12:13.000
Der hat halt immer ganz viel gedubt über Zeilen und Spalten und so, weil er halt einfach diese ganzen Sachen nicht kannte, die man mit Datensätzen machen kann, vor allem mit Pandas.

00:12:13.000 --> 00:12:23.500
Und was sonst auch, wenn man zusammenarbeitet, halt oft passiert, ist, dass jemand, der nicht viel mit Daten gearbeitet hat, die Ergebnisse halt so nimmt, wie sie sind und da irgendwie ganz unkritisch ist.

00:12:25.360 --> 00:12:33.580
Und manchmal ist ja vielleicht der Code gar nicht falsch, aber es ist irgendwo ein Denkfehler drin.

00:12:33.580 --> 00:12:37.340
Also der Code macht, was er soll, nur das, was er soll, ist halt vielleicht gar nicht so korrekt.

00:12:37.340 --> 00:12:43.080
Oder man hat ein Missverständnis zu den Daten, man hat irgendeine Annahme, aber in Wirklichkeit ist es ein bisschen anders.

00:12:43.080 --> 00:12:47.680
Und das ist was, was dann, glaube ich, schwer fällt.

00:12:47.680 --> 00:12:53.460
Also ich glaube, das fällt einem als Data Scientist auch schon manchmal schwer, so richtig dieses Business Understanding aufzubauen.

00:12:55.240 --> 00:13:03.240
Aber ja, wenn man so reine Softwareentwicklung macht, ist es, glaube ich, nochmal schwieriger, in den Daten drin zu sein und die zu interpretieren und zu sagen, Moment mal, also die Kurve sieht ja eigentlich komisch aus.

00:13:03.240 --> 00:13:13.060
Aber also eigentlich mag ich es total gerne, wenn das Team gemischt ist, weil auch nicht alle Data Scientists so richtig auf guten Code achten.

00:13:13.060 --> 00:13:21.920
Also es ist uns sehr wichtig und wenn jemand halt noch nicht so gut programmieren kann und aus dem Studium kommt, weil es einsteigt, dann ist es das, was die Person dann lernt, so wie ich damals.

00:13:21.920 --> 00:13:25.120
Aber ich glaube, das ist auch nicht...

00:13:25.120 --> 00:13:34.600
Also verbreitet, weil manche haben dann eher einen Schwerpunkt auf so Datenanalysen, sind viel in Notebooks unterwegs und wenn sie dann fertig sind, dann wird das Notebook in irgendeinen Job eingebunden und das ist dann die Automatisierung.

00:13:34.600 --> 00:13:38.420
Und das kann manchmal funktionieren, aber oft ist es auch ziemlich wackelig.

00:13:38.420 --> 00:13:47.960
Ja, ja, interessant. Also da ist auf jeden Fall oft so ein bisschen ein Graben zwischen den Welten.

00:13:47.960 --> 00:13:52.920
Also wenn ich das immer sehe, was so Data Scientists schreiben, dann stag ich immer die Hände über dem Kopf.

00:13:52.920 --> 00:13:54.820
Also jetzt ist es gerade packativ, es gibt natürlich Unterschiede.

00:13:55.000 --> 00:14:00.860
Das war so im Vergleich eher anders, als ich das machen würde wahrscheinlich.

00:14:00.860 --> 00:14:06.800
Also man schreibt als Data Science oft so die ganzen Prozesse untereinander und muss erst mal lernen, die Methoden zu definieren und so, ja.

00:14:06.800 --> 00:14:11.460
Und warum soll man denn, also wenn man das nur einmal macht, warum soll man denn eine Funktion schreiben?

00:14:11.460 --> 00:14:16.400
Und man kann es ja Zeile für Zeile ausführen und die Funktion braucht man ja nur, wenn man zweimal dasselbe macht.

00:14:16.400 --> 00:14:22.860
So ist dann, glaube ich, manchmal die Denkweise, wenn man eben mehr aus der Analyse kommt und da so quer einsteigt.

00:14:22.860 --> 00:14:24.880
Ich finde das einfach manchmal, weil Leute...

00:14:24.880 --> 00:14:33.520
Die Leute, die sich schon promoviert haben und das ist, die haben total krasse Sachen gemacht, aber können dann halt auch keinen guten Code schreiben, weil es für die Doktorarbeit eben ganz andere Anforderungen hat.

00:14:33.520 --> 00:14:44.000
Ja, da ist auch oft, also gerade Physiker, die sind da ja oft eher so verdorben, die haben dann irgendwie Vortragen geschrieben oder sowas oder C++, ist auch nicht viel besser.

00:14:44.000 --> 00:14:47.440
Und dann, ja genau, bringen sie da so schlechte Gewohnheiten mit.

00:14:47.440 --> 00:14:51.920
Das ist natürlich oft irgendwie so ein bisschen, ja, aber, ja, ja.

00:14:51.920 --> 00:14:54.760
Aber das ist auch so ein bisschen, man lernt das ja auch nirgendwo, ne, außer wenn man...

00:14:54.760 --> 00:14:59.000
Wenn man jetzt irgendwie quasi bei einer Firma anfängt, die das halt auch irgendwie täglich macht oder so.

00:14:59.000 --> 00:15:04.960
Bei den meisten Firmen gibt es ja da gar keine Kultur und, ja, also es ist irgendwie, ja, es ist irgendwie...

00:15:04.960 --> 00:15:07.800
Also dieses Handwerkszeug ist ein Problem oft, das denke ich auch.

00:15:07.800 --> 00:15:11.800
Was nervt dich denn an Leuten, die Softwareentwicklung gemacht haben und jetzt Data Scientists sind?

00:15:11.800 --> 00:15:13.440
Ja, das ist auch interessant, ja.

00:15:13.440 --> 00:15:24.640
Also, ja, also die Sachen, die ich gerade genannt habe, also es ist oft so, die Ergebnisse so unkritisch beurteilt werden, dass man eigentlich nur guckt, ob der Code richtig läuft und das macht, was man implementieren wollte.

00:15:24.640 --> 00:15:30.140
Und das eben, ja, man dann nicht unbedingt erkennt, dass die Ergebnisse eigentlich unplausibel sind.

00:15:30.140 --> 00:15:33.780
Zum Beispiel, dass das Modell viel zu gut ist und da muss irgendwo was falsch sein.

00:15:33.780 --> 00:15:37.000
Die Kirchturmspitze ist 245 Meter im Minus.

00:15:37.000 --> 00:15:38.020
Bitte?

00:15:38.020 --> 00:15:42.440
Du könntest ja erst mal die Kirchturmspitze ausrechnen, dass die Höhe dann 245 im Minus ist.

00:15:42.440 --> 00:15:45.060
Und wenn man das dann einfach so übernimmt und daran glaubt.

00:15:45.060 --> 00:15:45.860
Ja, genau.

00:15:45.860 --> 00:15:48.660
Also, das ist natürlich ein gutes Beispiel.

00:15:48.660 --> 00:15:54.520
Und manchmal habe ich auch den Eindruck, dass dann wiederum, wenn man sehr, sehr stolz auf seine Software...

00:15:54.520 --> 00:16:03.220
Software-Entwicklungsskills ist, dass dann auch unnötig komplizierte Patterns auf irgendwelche Sachen geworfen werden und das dann auch wieder durch pragmatisch ist und sehr schwer wartbar.

00:16:03.220 --> 00:16:10.800
Ja, klar, weil die Leute, die das dann letztlich irgendwie ja benutzen müssen, müssen das ja auch lesen und verstehen können und so.

00:16:10.800 --> 00:16:16.800
Und wenn man dann irgendwas mit einem Elfenbeinturm baut, dann war das vielleicht auch einfach ein Ziel vorbei.

00:16:16.800 --> 00:16:20.260
Wenn man auch neue Pattern gelernt hat, muss man die auch erst mal überall anwenden, ja.

00:16:20.260 --> 00:16:21.560
Ja, klar, das sollte ich auch machen.

00:16:24.400 --> 00:16:29.200
Ja, aber grundsätzlich macht mir das eigentlich total Spaß, mit Software-Entwicklern zusammenzuarbeiten.

00:16:29.200 --> 00:16:34.160
Du hast gesagt, er visualisiert irgendwie Sachen zwar nicht so oft, nicht so gerne, aber er macht das.

00:16:34.160 --> 00:16:37.640
Wie denn? Also, ich kenne irgendwie so eine coole Seite, die wollte ich irgendwie nochmals hin.

00:16:37.640 --> 00:16:40.220
Also, datatowiss.com oder sowas.

00:16:40.220 --> 00:16:42.000
Die benutze ich immer, wenn ich nicht weiß.

00:16:42.000 --> 00:16:42.980
Ich kann euch sagen, nicht so gerne.

00:16:42.980 --> 00:16:50.040
Also, er macht es durch die ganze Zeit, aber es ist an verschiedenen Stellen eigentlich total wichtig.

00:16:50.040 --> 00:16:52.460
Also, zuerst mal, wenn man die Daten reinbekommt.

00:16:52.460 --> 00:16:54.280
Damit sind wir jetzt eigentlich schon...

00:16:54.280 --> 00:16:58.480
So mitten im typischen Ablauf, aber ich kann da, da wollen wir zwar noch drüber sprechen, da kann er gerne mal vorgreifen.

00:16:58.480 --> 00:17:05.120
Also, wenn die Daten reinkommen und man gucken will, ob die sinnvoll sind, wenn man die Daten kennenlernen will, Zusammenhänge prüfen und so,

00:17:05.120 --> 00:17:07.300
dann ist natürlich Visualisierung einfach das Allerbeste.

00:17:07.300 --> 00:17:12.720
Klar, ist auch ganz nett, so Mittelwerte und Ausgleichsmaßnahmen im Minimum zu sich anzugucken.

00:17:12.720 --> 00:17:16.520
Zum Beispiel, ob der kleinste Kirchturm auch wirklich größer als 0 Meter ist.

00:17:16.520 --> 00:17:20.480
Aber es macht natürlich auch total Sinn, sich da die Verteilung mal zu plotten und Zusammenhänge.

00:17:20.480 --> 00:17:24.200
Und das sind auch die Sachen, die wir dann oft mit unseren Kunden wiederum anschauen und sagen,

00:17:24.200 --> 00:17:25.580
ja, guck mal hier, die Verteilung, macht die Sinn?

00:17:25.580 --> 00:17:32.260
Und merken dann vielleicht, dass da irgendwas in den Daten unsauber ist, was halt oft vorkommt, womit man dann aber irgendwie umgehen muss.

00:17:32.260 --> 00:17:39.140
Und natürlich auch dann später, wenn wir zum Beispiel ein Modell gebaut haben und die Ergebnisse untersuchen wollen,

00:17:39.140 --> 00:17:43.020
wie sind unsere Prognosen verteilt, welche Zusammenhänge hat das Modell gefunden?

00:17:43.020 --> 00:17:47.640
Auch da ist dann natürlich die Visualisierung total wichtig und sinnvoll.

00:17:47.640 --> 00:17:54.180
Man kann es einfach viel, viel, viel schneller erfassen, als wenn man das irgendwie alles versucht in Tabellen,

00:17:54.200 --> 00:17:55.300
in Tabellen zu vermitteln.

00:17:55.300 --> 00:17:57.480
Wie visualisiert ihr denn am liebsten?

00:17:57.480 --> 00:18:07.560
Ja, das ist irgendwie ganz witzig, weil ich in Python noch nie so richtig, ja gut, so ein bisschen habe ich auch in Python.

00:18:07.560 --> 00:18:13.360
Wir haben früher sehr viel, da waren auch weniger mit Dashboards und so weiter.

00:18:13.360 --> 00:18:16.600
Da war es oft noch so, dass wir so einen Datendump bekommen haben und haben damit dann was gemacht.

00:18:16.600 --> 00:18:19.880
Und da waren wir noch in R unterwegs und haben für ggplot2 benutzt.

00:18:19.880 --> 00:18:20.900
Ja, super.

00:18:20.900 --> 00:18:23.900
Und inzwischen sind wir dann meistens,

00:18:24.200 --> 00:18:29.360
meistens in einem Dashboard-System unterwegs, das halt beim Kunden einfach genutzt wird,

00:18:29.360 --> 00:18:34.060
sodass wir dann in dem Tool, was der benutzt, das implementieren,

00:18:34.060 --> 00:18:36.980
weil das jetzt in AWS oder Azure oder was auch immer die nutzen.

00:18:36.980 --> 00:18:40.440
Und wir machen dann da das, was da in dem System gewünscht ist.

00:18:40.440 --> 00:18:44.480
Wir haben auch ein paar Dashboards mal gebaut in,

00:18:44.480 --> 00:18:46.460
was ist das denn jetzt noch?

00:18:46.460 --> 00:18:48.280
Ich habe den Namen nicht vergessen.

00:18:48.280 --> 00:18:50.340
Notly Dash oder Detroit Dash.

00:18:50.340 --> 00:18:52.600
Genau, Redash ist ein Open-Source-Tool.

00:18:52.600 --> 00:18:54.180
Das ist ein Open-Source-Tool.

00:18:54.180 --> 00:18:55.740
Das benutzen wir dann auch ganz gerne.

00:18:55.740 --> 00:18:58.760
Da kann man dann auch gerade praktischerweise noch Alarme dazu definieren,

00:18:58.760 --> 00:18:59.940
um seine Daten zu überwachen.

00:18:59.940 --> 00:19:02.000
Das nutzen wir auch sehr gerne.

00:19:02.000 --> 00:19:03.180
Okay.

00:19:03.180 --> 00:19:07.520
Und wie läuft denn so ein Prozess bei euch ab?

00:19:07.520 --> 00:19:08.560
Ihr habt jetzt irgendwie Daten.

00:19:08.560 --> 00:19:10.060
Ich glaube, du wolltest da auch nochmal drauf eingehen.

00:19:10.060 --> 00:19:11.020
Ja, gerne.

00:19:11.020 --> 00:19:12.020
Und so einen Auftrag.

00:19:12.020 --> 00:19:12.460
Und dann?

00:19:12.460 --> 00:19:15.480
Also klar, manchmal steigen wir auch mittendrin ein.

00:19:15.480 --> 00:19:17.080
Aber ich fange jetzt trotzdem mal vorne an.

00:19:17.080 --> 00:19:18.500
Oft sind wir auch vorne dabei.

00:19:18.500 --> 00:19:21.360
Das ist jetzt vor allem aus meiner Sicht als Beraterin.

00:19:21.360 --> 00:19:22.780
Das fühlt sich natürlich ein bisschen anders an,

00:19:22.780 --> 00:19:23.980
wenn man die im Unternehmen erzählt.

00:19:23.980 --> 00:19:24.160
Das heißt,

00:19:24.160 --> 00:19:25.300
die ganze Zeit ist.

00:19:25.300 --> 00:19:29.840
Aber für mich als Beraterin sind das eigentlich so sieben Schritte.

00:19:29.840 --> 00:19:31.380
Erstmal das Problemverständnis,

00:19:31.380 --> 00:19:35.160
dann die Daten einzusammeln und zu verstehen,

00:19:35.160 --> 00:19:36.500
dann die Datenaufbereitung,

00:19:36.500 --> 00:19:37.560
dann kommt die Modellierung.

00:19:37.560 --> 00:19:39.320
Man merkt, das ist nur ein Schritt, diese Modellierung.

00:19:39.320 --> 00:19:41.600
Oft denkt man, das ist zu viel, aber es ist nur ein kleiner Schritt.

00:19:41.600 --> 00:19:44.220
Dann die Evaluation des Modells.

00:19:44.220 --> 00:19:47.160
Und dann gehört eigentlich dazu ja auch noch eine Automatisierung

00:19:47.160 --> 00:19:49.300
und Monitoring und Wartung.

00:19:49.300 --> 00:19:51.500
Wobei die letzten zwei Schritte natürlich vom Aufwand her

00:19:51.500 --> 00:19:53.900
nochmal einen sehr, sehr großen Teil einnehmen.

00:19:54.140 --> 00:19:58.700
Das ist auch jetzt angelehnt an den CRISP-DM, wenn das was sagt.

00:19:58.700 --> 00:20:02.000
Das ist der Cross-Industry Standard Process for Data Mining.

00:20:02.000 --> 00:20:04.340
Data Mining klingt so ein bisschen angestaubt, der Begriff.

00:20:04.340 --> 00:20:10.040
Aber man könnte es halt einfach Datenprojekte nennen.

00:20:10.040 --> 00:20:15.180
Und ja, am Anfang ist es bei uns dann tatsächlich auch so,

00:20:15.180 --> 00:20:18.540
dass KundInnen zu uns kommen und schon was haben,

00:20:18.540 --> 00:20:21.240
was sie, also sagt schon das, was sie brauchen.

00:20:21.240 --> 00:20:24.120
Das geht dann auch in die Richtung,

00:20:24.120 --> 00:20:27.620
manchmal macht es aber trotzdem Sinn, sich das nochmal genauer anzuschauen

00:20:27.620 --> 00:20:31.560
und zu verstehen, warum sie das brauchen und was sie wirklich brauchen.

00:20:31.560 --> 00:20:34.900
Und vielleicht ist es dann doch so ein bisschen anders.

00:20:34.900 --> 00:20:38.860
Und ich meine, zu diesem Thema kann man ganze Workshops,

00:20:38.860 --> 00:20:39.820
mehrtägige Workshops machen.

00:20:39.820 --> 00:20:41.640
Es gibt ganze Unternehmen, die nichts anderes machen,

00:20:41.640 --> 00:20:43.880
als Use Cases zu identifizieren und zu prüfen.

00:20:43.880 --> 00:20:47.020
Das können wir auch ein Stück weit mitmachen,

00:20:47.020 --> 00:20:48.100
aber das ist nicht unser Schwerpunkt.

00:20:48.100 --> 00:20:51.340
Also ist es meistens dann schon eher so, dass da schon Ideen da sind.

00:20:51.340 --> 00:20:53.360
Wir aber das auch alles nochmal so ein bisschen challengen.

00:20:54.100 --> 00:20:57.600
Wenn wir einen Kick-Off haben, wo wir mit den Kunden sprechen,

00:20:57.600 --> 00:21:00.180
um das Geschäftsmodell zu verstehen, um genau zu verstehen,

00:21:00.180 --> 00:21:04.000
wer das eigentlich nutzen wird, was die genau machen wollen.

00:21:04.000 --> 00:21:06.960
Es ist natürlich total wichtig, dass wir eben prüfen,

00:21:06.960 --> 00:21:08.160
was brauchen die wirklich genau?

00:21:08.160 --> 00:21:09.940
Und brauchen die zum Beispiel vielleicht was in Echtzeit?

00:21:09.940 --> 00:21:12.300
Dann ist es natürlich ganz anders, als wenn das ausreicht,

00:21:12.300 --> 00:21:14.580
dass man jeden Morgen einmal aktuelle Werte berechnet.

00:21:14.580 --> 00:21:19.160
Und wer sitzt da und wo benutzen die das genau?

00:21:19.160 --> 00:21:24.040
Ist das irgendwo an einem Counter oder ist es am Telefon?

00:21:24.080 --> 00:21:26.660
Oder ist es irgendwo, wo es kein gutes Internet gibt und so?

00:21:26.660 --> 00:21:29.380
Und all das muss man natürlich wissen, um auch rauszufinden, was die brauchen.

00:21:29.380 --> 00:21:34.140
Und dann ist der nächste Schritt, sich zu überlegen, wie können wir das machen?

00:21:34.140 --> 00:21:35.980
Und haben wir eigentlich auch die passenden Daten?

00:21:35.980 --> 00:21:41.400
Und dann haben wir vielleicht die notwendigen Daten und ein paar andere Sachen sind vielleicht nicht ganz so notwendig.

00:21:41.400 --> 00:21:42.640
Man kann trotzdem anfangen.

00:21:42.640 --> 00:21:48.620
Ja, das ist der erste Schritt und den sollte man nicht unterschätzen.

00:21:48.620 --> 00:21:49.700
Besorgt ihr die dann auch?

00:21:49.700 --> 00:21:54.060
Also baut ihr irgendwo neue Sensoren ein oder sowas und kümmert euch darum, dass ihr in irgendwelchen Datenbanken

00:21:54.060 --> 00:21:56.340
landen, die ihr dann zur Auswertung mit benutzt?

00:21:56.340 --> 00:21:59.780
Oder geht ihr davon aus, dass das Business alles mit besorgt?

00:21:59.780 --> 00:22:02.600
Es ist normalerweise so, dass die Daten schon da sind.

00:22:02.600 --> 00:22:08.060
Und dadurch, dass wir ja auch eher komplexe Fragestellungen beantworten,

00:22:08.060 --> 00:22:12.060
sind das in der Regel halt auch Kunden, die schon mit den Daten irgendwas gemacht haben.

00:22:12.060 --> 00:22:15.080
Natürlich kennen wir nicht jede Datenquelle von vorne bis hinten auswendig

00:22:15.080 --> 00:22:16.480
und man findet immer noch Überraschungen.

00:22:16.480 --> 00:22:20.100
Aber das ist dann normalerweise nicht so, dass sie sagen,

00:22:20.100 --> 00:22:23.400
wir wollen hier dieses super komplexe Modell, aber wir haben noch gar keine Daten.

00:22:23.400 --> 00:22:24.040
Wir müssen die erstmal suchen.

00:22:24.040 --> 00:22:29.340
Normalerweise sind die da schon relativ weit oben auf der Datenreifeskala.

00:22:29.340 --> 00:22:31.940
Und selbst wenn nicht, sind die Daten meistens schon da,

00:22:31.940 --> 00:22:35.120
weil ganz viele Daten ja einfach automatisch mitgesammelt werden.

00:22:35.120 --> 00:22:38.900
Zum Beispiel im Online-Shop hat man natürlich jede Menge Daten über vergangene Bestellungen und so weiter.

00:22:38.900 --> 00:22:40.860
Also die Daten sind eigentlich immer schon da.

00:22:40.860 --> 00:22:44.580
Die Frage ist nur, sind die Daten da, die man braucht?

00:22:44.580 --> 00:22:47.040
Und wenn sie nicht da sind, dann ist das erstmal noch ein weiter Weg normalerweise.

00:22:47.040 --> 00:22:51.660
Vielleicht ist mal ein richtiges Data Warehouse da oder man kann die nochmal nicht zusammenführen.

00:22:51.660 --> 00:22:53.660
Das ist oft dann...

00:22:54.040 --> 00:22:57.280
Dann ist es noch ein weiterer Weg, bis wir da tatsächlich loslegen können.

00:22:57.280 --> 00:23:01.520
Wie würdest du denn so ein neues Unternehmen strukturieren,

00:23:01.520 --> 00:23:06.460
wenn du darauf achten würdest, dass du ordentliche Daten irgendwann brauchst?

00:23:06.460 --> 00:23:12.020
Würdest du direkt hingehen und das alles vom Scratch implementieren mit dem, was du am besten hältst?

00:23:12.020 --> 00:23:16.080
Oder würdest du das erstmal egal, das wachsen lassen und dann irgendwie zusammenflanschen?

00:23:16.080 --> 00:23:21.160
Also ich glaube, das kommt darauf an, wie sehr das Geschäftsmodell von Daten abhängt.

00:23:21.160 --> 00:23:23.460
Also wenn das ein Unternehmen ist, das irgendwelche Gegenstände produziert,

00:23:24.040 --> 00:23:27.920
dann denke ich, ist es nicht ganz so wichtig, dass man ganz viele Daten sammelt.

00:23:27.920 --> 00:23:31.220
Dann kann man sich erstmal darauf konzentrieren und dann nach und nach einsteigen.

00:23:31.220 --> 00:23:34.580
Aber es gibt ja auch Geschäftsmodelle, die eigentlich nur so gut funktionieren,

00:23:34.580 --> 00:23:40.620
weil mit Daten gearbeitet wird und dann muss es wahrscheinlich von Anfang an auch berücksichtigt werden.

00:23:40.620 --> 00:23:41.940
Also ich habe jetzt noch nie ein Unternehmen gegründet.

00:23:41.940 --> 00:23:44.660
Ich bin ja geschickt erst eingestiegen, als das Unternehmen schon da war.

00:23:44.660 --> 00:23:49.060
Aber ich vermute, wenn man sowas wie Amazon oder so,

00:23:49.060 --> 00:23:53.080
da wurde ja von Anfang an wahrscheinlich mitgedacht, was man da mit Daten machen kann.

00:23:53.080 --> 00:23:54.020
Oder zumindest relativ früh.

00:23:54.040 --> 00:23:58.520
Und was für Technologien benutzt ihr so? Mit Python für diese einzelnen Schritte?

00:23:58.520 --> 00:24:03.260
Ja, also wir sind natürlich ganz viel mit Pandas unterwegs.

00:24:03.260 --> 00:24:07.460
Von der Datenaufbereitung über die Modellierung.

00:24:07.460 --> 00:24:13.040
Da kommt dann auch sowas wie Scikit-Learn dazu oder TensorFlow, Keras, PyTrips, eigentlich so die Klassiker.

00:24:13.040 --> 00:24:16.520
Pandas ist ein interessantes Thema, weil Pandas,

00:24:16.520 --> 00:24:20.000
also wer schon mal mit Pandas im Kurs von Daten gearbeitet hat,

00:24:20.000 --> 00:24:24.000
denkt sich jetzt unbedingt, ich will es nicht mehr hören, weil Pandas halt sehr, sehr viel,

00:24:24.040 --> 00:24:26.320
sehr viel Arbeitsspeicher braucht, wenn die Datensätze größer sind.

00:24:26.320 --> 00:24:30.920
Es ist aber natürlich zu Prototypen oder generell für kleine Datensätze total super,

00:24:30.920 --> 00:24:34.120
weil es ganz, ganz viel kann und weil man auch ganz viel im Netz findet.

00:24:34.120 --> 00:24:40.320
Also genau, wenn die Daten aber größer werden, dann hat man natürlich das Arbeitsspeicherproblem

00:24:40.320 --> 00:24:45.160
und dann ist der Klassiker natürlich, auf Spark, PySpark umzusteigen.

00:24:45.160 --> 00:24:51.340
Was auch jetzt in letzter Zeit ganz, das ist natürlich toll, weil es ganz verteilt ist.

00:24:51.340 --> 00:24:54.020
Wobei es nicht unbedingt schnell ist, aber es kann halt eben,

00:24:54.020 --> 00:24:57.980
mit großen Datensätzen umgehen und man hat erstmal dieses Arbeitsspeicherproblem gelöst,

00:24:57.980 --> 00:25:01.520
was man eben mit Pandas irgendwann eigentlich gar nicht mehr lösen kann.

00:25:01.520 --> 00:25:04.020
Und dann gibt es jetzt natürlich noch seit...

00:25:04.020 --> 00:25:07.540
Aber ich meine, die Erfahrung, die ich oft mache, ist, dass man die,

00:25:07.540 --> 00:25:12.960
bei vielen so kategorialen Variablen oder so, die kann man dann halt auf irgendwie

00:25:12.960 --> 00:25:18.660
ein kleineres, einen kleineren Datentyp irgendwie runter komprimieren oder halt oft hat man dann

00:25:18.660 --> 00:25:20.580
halt irgendwie für viele, oder wenn man jetzt

00:25:20.580 --> 00:25:22.560
nur Flex hat, irgendwie ja oder

00:25:22.560 --> 00:25:24.520
nein oder so, wenn man da nur ein Bit nimmt, ist

00:25:24.520 --> 00:25:26.540
halt sehr viel weniger, als wenn man da irgendwie ein volles

00:25:26.540 --> 00:25:27.740
Integer oder so für nimmt.

00:25:27.740 --> 00:25:30.580
Oft hilft

00:25:30.580 --> 00:25:32.080
das dann schon, aber ja, stimmt.

00:25:32.080 --> 00:25:34.580
Aber manchmal, wenn man die Daten einliest, dann

00:25:34.580 --> 00:25:36.460
je nachdem kann man das, glaube ich, gar nicht

00:25:36.460 --> 00:25:38.380
unbedingt spezifizieren am Anfang und dann sind die

00:25:38.380 --> 00:25:39.000
einfach groß.

00:25:39.000 --> 00:25:41.540
Oder auch selbst wenn, also ich meine,

00:25:41.540 --> 00:25:43.960
so mehrere Jahre stündliche

00:25:43.960 --> 00:25:46.220
Verkaufsdaten von ganz vielen Artikeln aus ganz

00:25:46.220 --> 00:25:47.680
vielen Filialen aus mehreren Ländern.

00:25:48.380 --> 00:25:50.200
Ja. Dann, ja,

00:25:50.200 --> 00:25:52.160
dann wird es irgendwie

00:25:52.160 --> 00:25:54.320
schwierig und dann ist das Verteilte schon gut.

00:25:54.320 --> 00:25:56.360
Und dann gibt es halt noch Polars,

00:25:56.360 --> 00:25:58.080
womit man dann auch

00:25:58.080 --> 00:26:00.200
oft schneller ist und halt auch

00:26:00.200 --> 00:26:01.800
weniger Arbeitsspeicher braucht.

00:26:01.800 --> 00:26:04.180
Also wenn du das nicht kennst, Polars, das ist dann Rust

00:26:04.180 --> 00:26:06.200
nachgeschrieben mit der gleichen API, so ein bisschen wie

00:26:06.200 --> 00:26:08.360
Pandas. Ja, es ist, ne, es hat

00:26:08.360 --> 00:26:10.020
eine sehr viel saubere, also kleinere,

00:26:10.020 --> 00:26:12.040
es hat weniger Funktionen, aber es ist halt

00:26:12.040 --> 00:26:14.160
auch ein bisschen konsistenter,

00:26:14.160 --> 00:26:16.220
weil Pandas ist halt auch irgendwie sehr stark

00:26:16.220 --> 00:26:18.100
so historisch gewachsen

00:26:18.100 --> 00:26:19.920
und man wusste noch nicht genau, wo man hin will und

00:26:19.920 --> 00:26:21.780
dann teilweise inkonsistent und

00:26:21.780 --> 00:26:22.260
ja,

00:26:22.260 --> 00:26:25.600
ja, Pandas ist halt, ja.

00:26:25.600 --> 00:26:27.480
Wie das halt so ist. Genau, wie das halt so ist.

00:26:27.480 --> 00:26:29.720
Ich habe noch gar nicht so viel mit Polars

00:26:29.720 --> 00:26:31.720
gearbeitet. Ich weiß gar nicht, ob die

00:26:31.720 --> 00:26:33.520
eigentlich schon das Ziel haben, da die

00:26:33.520 --> 00:26:35.800
meisten Funktionen aus Pandas

00:26:35.800 --> 00:26:37.800
auch zu implementieren oder ob die vielleicht sogar sagen,

00:26:37.800 --> 00:26:39.440
es soll schlanker bleiben, weiß ich gar nicht. Genau, ne, ich

00:26:39.440 --> 00:26:41.340
meine, also sie sind absichtlich,

00:26:41.340 --> 00:26:43.540
wollen sie nicht komplett irgendwie alles

00:26:43.540 --> 00:26:45.460
machen, was Pandas halt kann, sondern

00:26:45.460 --> 00:26:47.760
ja, quasi bei den

00:26:47.760 --> 00:26:49.560
Basisgeschichten so schnell sein, dass man

00:26:49.560 --> 00:26:51.560
halt daraus alles bauen kann, aber

00:26:51.560 --> 00:26:53.480
dann halt nicht so eine Spezialsyntax dafür hat.

00:26:53.480 --> 00:26:55.460
Benutzt ihr auch dann

00:26:55.460 --> 00:26:57.240
zwischendurch noch Pure NumPy oder?

00:26:57.240 --> 00:26:59.600
Ja, immer mal so für kleine Sachen,

00:26:59.600 --> 00:27:01.640
wo es gerade Sinn

00:27:01.640 --> 00:27:03.660
macht. Oft

00:27:03.660 --> 00:27:05.680
sind ja, ist man mit Datensätzen unterwegs

00:27:05.680 --> 00:27:07.420
und dann passiert es halt meistens

00:27:07.420 --> 00:27:08.320
in Pandas.

00:27:08.320 --> 00:27:11.560
Vielleicht hast du eben gesagt, man muss

00:27:11.560 --> 00:27:13.160
erst mal wissen, was ein Datensatz ist, bevor man jetzt drüber

00:27:13.160 --> 00:27:15.580
redet. Du meinst jetzt irgendwie, du hast eine Maske auf,

00:27:15.580 --> 00:27:16.880
mit der du guckst oder

00:27:16.880 --> 00:27:17.080
was?

00:27:17.080 --> 00:27:18.600
Ähm, was ist ein Datensatz

00:27:18.600 --> 00:27:19.060
in Pandas?

00:27:19.060 --> 00:27:22.420
Ist das jetzt eine Wissensfrage?

00:27:22.420 --> 00:27:26.480
Ja doch, du müsst ja vielleicht schon erklären, wie das

00:27:26.480 --> 00:27:27.160
funktioniert.

00:27:27.160 --> 00:27:30.500
Ja, um die Daten anzugucken,

00:27:30.500 --> 00:27:31.960
würde ich, na gut,

00:27:31.960 --> 00:27:34.080
es ist irgendwie schön, wenn man einmal so ein bisschen

00:27:34.080 --> 00:27:36.260
den Head anzeigt, also die ersten paar

00:27:36.260 --> 00:27:38.300
Zeilen und sieht, was da eigentlich so grundsätzlich, was

00:27:38.300 --> 00:27:40.460
das für Spalten sind, welche Namen die haben und welche

00:27:40.460 --> 00:27:42.480
Zahlen da so ungefähr drinstehen

00:27:42.480 --> 00:27:44.360
und dann würde ich aber relativ schnell

00:27:44.360 --> 00:27:46.260
in eine deskriptive Analyse gehen und mir

00:27:46.260 --> 00:27:47.980
beispielsweise von jeder Spalte dann

00:27:47.980 --> 00:27:49.520
Summary Statistics, also

00:27:49.520 --> 00:27:52.520
Minimum, Maximum, Mittelwert, Median

00:27:52.520 --> 00:27:54.220
und vielleicht Quantile anschauen

00:27:54.220 --> 00:27:56.160
oder eben auch Verteilungen plotten,

00:27:56.160 --> 00:27:58.500
so dass man das sieht oder Kategorien

00:27:58.500 --> 00:27:59.840
anzeigen, je nachdem, was das so ist.

00:27:59.840 --> 00:28:01.980
Ähm, sonst, ja,

00:28:01.980 --> 00:28:04.160
die ganze Tabelle, also man hat

00:28:04.160 --> 00:28:05.880
natürlich eine Tabelle als Pandas DataFrame,

00:28:05.880 --> 00:28:08.080
die könnte man theoretisch ja auch irgendwie als CSV

00:28:08.080 --> 00:28:09.940
speichern oder als Excel und da angucken.

00:28:09.940 --> 00:28:12.100
Das ist auch ganz praktisch, um sich die mal

00:28:12.100 --> 00:28:13.780
anzugucken, wenn die Daten klein genug sind.

00:28:13.780 --> 00:28:15.920
Manchmal ist es sogar wirklich ganz nett,

00:28:16.060 --> 00:28:17.640
um mal einfache Analysen zu machen, zum

00:28:17.640 --> 00:28:19.320
Ausprobieren, um gespürt zu bekommen,

00:28:19.320 --> 00:28:21.720
aber es ist dann eher so ein manueller Schritt

00:28:21.720 --> 00:28:23.860
und um wirklich, wirklich Insights

00:28:23.860 --> 00:28:25.660
dann zu haben und die Daten zu verstehen,

00:28:25.660 --> 00:28:27.840
ja, muss man dann, wenn der Datensatz

00:28:27.840 --> 00:28:29.060
groß genug ist, natürlich irgendwie

00:28:29.060 --> 00:28:31.600
in die Summary Statistics gehen

00:28:31.600 --> 00:28:33.540
und es ist auch oft,

00:28:33.540 --> 00:28:35.700
also selbst, wenn man jetzt nach dieser

00:28:35.700 --> 00:28:37.640
ersten Datenanalyse aufhören würde,

00:28:37.640 --> 00:28:39.760
ist es oft an sich schon ganz

00:28:39.760 --> 00:28:41.900
interessant und oft

00:28:41.900 --> 00:28:44.020
haben unsere KundInnen ja

00:28:44.020 --> 00:28:46.020
genau diese Analyse auch noch nicht gemacht,

00:28:46.020 --> 00:28:47.640
und lernen dabei auch noch was Neues.

00:28:47.640 --> 00:28:50.120
Einmal hatten wir aber sogar auch den Fall,

00:28:50.120 --> 00:28:51.940
dass wir, ja, dass sie dann

00:28:51.940 --> 00:28:54.140
gemerkt haben, dass da irgendwo ein Fehler im Data Warehouse

00:28:54.140 --> 00:28:55.960
ist und da war irgendwie so ein riesiger Strukturbruch,

00:28:55.960 --> 00:28:57.980
der da eigentlich gar nicht sein sollte und dann haben sie

00:28:57.980 --> 00:28:59.900
sich erstmal nochmal ein paar Monate zurückgezogen und

00:28:59.900 --> 00:29:02.020
haben das alles repariert und danach konnten

00:29:02.020 --> 00:29:03.740
wir das Projekt dann tatsächlich machen, aber das

00:29:03.740 --> 00:29:05.680
wussten sie vorher nicht und haben es dann gesehen

00:29:05.680 --> 00:29:08.000
durch unsere Datenvalidierung, dass da irgendwo

00:29:08.000 --> 00:29:09.400
ein Problem ist beim Zusammenführen.

00:29:09.400 --> 00:29:11.960
Ja, spannend. Also manchmal

00:29:11.960 --> 00:29:13.920
sagen sie mir das. Ich habe einmal den Fall gehabt, dann

00:29:13.920 --> 00:29:15.620
waren die ganze Zeit irgendwelche so,

00:29:15.980 --> 00:29:18.040
Irregularitäten irgendwie in so einem Datenflur,

00:29:18.040 --> 00:29:19.900
die da gar nicht hingehörten. Man hat irgendwie was bewundert,

00:29:19.900 --> 00:29:21.920
was ist denn das? Und irgendwann ist jemand auf die

00:29:21.920 --> 00:29:23.620
Decke gekommen, ist dann zum Förderbank gegangen, hat in

00:29:23.620 --> 00:29:26.100
die Decke geguckt und da war oben ein Fenster auf

00:29:26.100 --> 00:29:28.160
und dann war dann die Temperatur immer anders,

00:29:28.160 --> 00:29:29.960
weil dann das Fenster aufgelassen worden ist und so.

00:29:29.960 --> 00:29:30.920
Das war spannend, ja.

00:29:30.920 --> 00:29:34.220
Cool ist natürlich auch,

00:29:34.220 --> 00:29:36.020
wenn man dann sieht, ah ja, hier gehen die Sales hoch,

00:29:36.020 --> 00:29:38.000
da war unsere riesige Werbekampagne und das

00:29:38.000 --> 00:29:39.660
macht alles Sinn und das ist natürlich auch schön,

00:29:39.660 --> 00:29:42.000
wenn es einfach funktioniert und man das in den Daten sieht.

00:29:42.000 --> 00:29:43.320
Ja.

00:29:43.320 --> 00:29:44.900
Ja, auf jeden Fall.

00:29:45.940 --> 00:29:47.000
Ah, was mich noch

00:29:47.000 --> 00:29:48.940
interessieren würde, wenn ihr tatsächlich

00:29:48.940 --> 00:29:50.820
so Produkte

00:29:50.820 --> 00:29:52.400
baut mit

00:29:52.400 --> 00:29:54.560
Modellen drin und so und die

00:29:54.560 --> 00:29:56.560
vielleicht Echtzeit irgendwas, wie deployed ihr

00:29:56.560 --> 00:29:58.380
eigentlich eure Modelle dann

00:29:58.380 --> 00:30:00.800
oder habt ihr da Präferenzen

00:30:00.800 --> 00:30:02.800
oder, weil das ist immer so

00:30:02.800 --> 00:30:04.620
ein bisschen, das machen Leute unterschiedlich und

00:30:04.620 --> 00:30:06.740
ich weiß nicht, ob es da jetzt irgendwie

00:30:06.740 --> 00:30:08.820
so ein Standardding gibt, was man machen kann, aber

00:30:08.820 --> 00:30:10.720
ja, das ist auf jeden Fall immer

00:30:10.720 --> 00:30:11.840
irgendwie nicht so ganz einfach gewesen.

00:30:11.840 --> 00:30:13.900
Also grundsätzlich

00:30:13.900 --> 00:30:15.900
gilt da natürlich, wir machen das

00:30:15.900 --> 00:30:16.740
was die Kunden wollen.

00:30:16.740 --> 00:30:19.920
Aber tatsächlich, wir sind ja dann oft eine Infrastruktur

00:30:19.920 --> 00:30:21.740
von den Kunden unterwegs, aber nicht immer, weil

00:30:21.740 --> 00:30:23.720
manche, zum Beispiel hatten wir ein Projekt, da darf ich

00:30:23.720 --> 00:30:25.880
zum Glück auch drüber reden, darf man ja nicht

00:30:25.880 --> 00:30:28.180
bei jedem Kunden, das war für die Berliner Senatsverwaltung

00:30:28.180 --> 00:30:29.660
eine Luftschadstoffprognose,

00:30:29.660 --> 00:30:31.660
also läuft auch noch, aber das machen wir jetzt nur noch

00:30:31.660 --> 00:30:33.760
Wartung, das ist soweit beschlossen und

00:30:33.760 --> 00:30:36.040
die haben keine Vorgaben

00:30:36.040 --> 00:30:37.800
gemacht zur Infrastruktur, die haben halt kein ABS

00:30:37.800 --> 00:30:39.780
oder Azure und da konnten wir es halt so machen,

00:30:39.780 --> 00:30:41.780
wie wir wollten und ich gucke mir gerade

00:30:41.780 --> 00:30:44.260
nebenbei in unseren Blogartikel

00:30:44.260 --> 00:30:45.860
rein dazu, weil

00:30:45.860 --> 00:30:47.620
ihr da, da kann ich mich

00:30:47.620 --> 00:30:49.740
alles nochmal genau nachgucken, wie wir es gemacht

00:30:49.740 --> 00:30:51.680
haben, da haben

00:30:51.680 --> 00:30:53.860
wir, konnten wir

00:30:53.860 --> 00:30:55.620
ganz frei entscheiden, was wir haben

00:30:55.620 --> 00:30:57.820
wollen und haben dann

00:30:57.820 --> 00:30:58.400
mit

00:30:58.400 --> 00:31:01.740
Kubernetes gearbeitet, das ist auch alles

00:31:01.740 --> 00:31:03.620
schön selbst aufgesetzt und da

00:31:03.620 --> 00:31:05.680
laufen dann automatisierte Jobs drin

00:31:05.680 --> 00:31:07.240
und

00:31:07.240 --> 00:31:09.720
wir haben, na gut, das hat jetzt weniger mit

00:31:09.720 --> 00:31:11.200
Deployment zu tun, aber wir haben da dann

00:31:11.200 --> 00:31:13.620
eine Clickhouse-Datenbank, die ist ganz cool für

00:31:13.620 --> 00:31:15.740
große Datenmengen und

00:31:15.740 --> 00:31:17.140
haben dann

00:31:17.140 --> 00:31:19.620
Docker-Container, in denen unsere Prozesse

00:31:19.620 --> 00:31:21.540
dann laufen, da haben wir auch

00:31:21.540 --> 00:31:23.560
Relash benutzt, wie ich erwähnt habe, das benutzen

00:31:23.560 --> 00:31:25.520
wir dann auch für die Alerts, um zu gucken, sind

00:31:25.520 --> 00:31:27.580
alle Input-Daten da, sind alle Prognosen

00:31:27.580 --> 00:31:29.500
so erstellt worden, wie wir wollen, sind so

00:31:29.500 --> 00:31:31.460
viele Prognosen in der Tabelle, wie wir erwarten

00:31:31.460 --> 00:31:33.700
würden und so weiter und

00:31:33.700 --> 00:31:34.980
in dem Projekt ist tatsächlich

00:31:34.980 --> 00:31:37.540
nur, im Hintern haben wir Relash für die

00:31:37.540 --> 00:31:39.440
Visualisierung benutzt, nach außen gehen

00:31:39.440 --> 00:31:41.580
die Daten tatsächlich, unsere Prognosen

00:31:41.580 --> 00:31:43.240
gehen einfach über eine REST-API raus

00:31:43.240 --> 00:31:45.560
und werden dann im Tool,

00:31:45.620 --> 00:31:47.520
visualisiert, dass diese NATS-Verwaltung schon hatte

00:31:47.520 --> 00:31:49.360
oder auch die API ist frei

00:31:49.360 --> 00:31:51.260
verfügbar, könnte auch jeder abrufen, haben auch schon

00:31:51.260 --> 00:31:53.200
ein paar andere dann mal gemacht, genau

00:31:53.200 --> 00:31:55.520
mit Kubernetes ist natürlich immer ganz schön, ansonsten

00:31:55.520 --> 00:31:57.600
bei einigen

00:31:57.600 --> 00:31:59.520
Kunden läuft dann viel mit den

00:31:59.520 --> 00:32:01.480
Diensten von AWS, jetzt bei dem

00:32:01.480 --> 00:32:03.180
Kunden, wo ich bin, sind wir

00:32:03.180 --> 00:32:05.700
im Azure-Universum, wobei

00:32:05.700 --> 00:32:07.520
ich da mit dem Deployment nichts zu

00:32:07.520 --> 00:32:09.380
tun habe, weil das machen wir halt

00:32:09.380 --> 00:32:11.460
andere, deshalb bin ich auch immer nur so am Rande

00:32:11.460 --> 00:32:13.380
natürlich dabei, also kann irgendwie

00:32:13.380 --> 00:32:15.420
in die Kubernetes kurz mal reingucken, aber ich

00:32:15.500 --> 00:32:17.300
kann die nicht,

00:32:17.300 --> 00:32:19.120
kann das nicht aufsetzen oder

00:32:19.120 --> 00:32:21.360
macht dann nicht die Deployments.

00:32:21.360 --> 00:32:23.540
Ja, was mich da mal, oder das Problem,

00:32:23.540 --> 00:32:25.140
das ich da mal hatte, ist halt,

00:32:25.140 --> 00:32:27.320
dass wenn jetzt Leute quasi in

00:32:27.320 --> 00:32:29.400
Notebooks irgendwas modellieren oder so, wie kriegen sie denn

00:32:29.400 --> 00:32:31.320
dann, wenn sie jetzt rauskriegen, ah, wenn ich

00:32:31.320 --> 00:32:33.440
dieses Modell so parametrisiere oder

00:32:33.440 --> 00:32:35.560
so, oder, ja, man hat dann normalerweise

00:32:35.560 --> 00:32:37.540
eine ganze Pipeline von Daten

00:32:37.540 --> 00:32:38.880
kommen rein, dann werden sie irgendwie transformiert

00:32:38.880 --> 00:32:41.400
und dann hat man halt hinterher irgendwie

00:32:41.400 --> 00:32:42.260
Predictions oder so,

00:32:42.260 --> 00:32:44.900
wie kriege ich das Ding denn jetzt,

00:32:45.380 --> 00:32:47.440
quasi in das Produktionssystem

00:32:47.440 --> 00:32:49.020
integriert und

00:32:49.020 --> 00:32:51.040
das, was wir dann gemacht hatten,

00:32:51.040 --> 00:32:53.180
war halt quasi

00:32:53.180 --> 00:32:54.240
aus dem Notebook direkt

00:32:54.240 --> 00:32:57.100
sozusagen ein Konterpaket zu

00:32:57.100 --> 00:32:58.180
bauen, das hochzuladen,

00:32:58.180 --> 00:33:00.980
in Django Filefield zu speichern und dann auch

00:33:00.980 --> 00:33:02.960
über eine JSON-AP dann die Ergebnisse wieder zurückzugeben,

00:33:02.960 --> 00:33:05.020
aber das fühlte sich

00:33:05.020 --> 00:33:07.000
so ein bisschen falsch an oder so, so auf jeden Fall

00:33:07.000 --> 00:33:08.940
nach, gibt es da nicht irgendeine einfache Möglichkeit,

00:33:08.940 --> 00:33:10.000
wie man das machen kann?

00:33:10.000 --> 00:33:11.920
Ich weiß nicht, ob es einfacher ist, aber

00:33:11.920 --> 00:33:14.020
wir sind auch ganz wenig

00:33:14.020 --> 00:33:15.300
eigentlich mal in Jupyter Note,

00:33:15.300 --> 00:33:15.340
aber wir sind auch ganz wenig eigentlich mal in Jupyter Note,

00:33:15.340 --> 00:33:15.360
aber wir sind auch ganz wenig eigentlich mal in Jupyter Note,

00:33:15.360 --> 00:33:16.120
auf dem Notebooks unterwegs,

00:33:16.120 --> 00:33:19.380
sondern, ja, entweder, wenn wir

00:33:19.380 --> 00:33:21.200
was schnell visualisieren wollen, geht das tatsächlich

00:33:21.200 --> 00:33:23.180
ja mit so einem Tool wie Redash auch schneller, als wenn man

00:33:23.180 --> 00:33:23.660
dann anfängt,

00:33:23.660 --> 00:33:27.320
mal Plotlib-Code zu schreiben,

00:33:27.320 --> 00:33:29.520
dann ist Clicky-Bunty

00:33:29.520 --> 00:33:31.240
manchmal gar nicht so blöd und schlecht,

00:33:31.240 --> 00:33:33.300
wie es klingt und

00:33:33.300 --> 00:33:35.020
dann, wenn wir dann die

00:33:35.020 --> 00:33:36.920
Code-Free-Modellierung haben, dann ist es halt wirklich,

00:33:36.920 --> 00:33:39.200
das ist ein

00:33:39.200 --> 00:33:40.560
Python-Paket, wir haben

00:33:40.560 --> 00:33:42.120
das dann,

00:33:42.120 --> 00:33:44.240
automatisieren es dann meistens

00:33:44.240 --> 00:33:45.280
so, dass jedes Mal,

00:33:45.340 --> 00:33:47.040
beim Push in den Main-Branch,

00:33:47.040 --> 00:33:49.520
wenn die, zum Beispiel, wenn die Versionsnummer

00:33:49.520 --> 00:33:50.860
sich geändert hat, wird das dann

00:33:50.860 --> 00:33:53.080
über Jenkins wird ein Job getriggert,

00:33:53.080 --> 00:33:55.400
der dann das Paket baut und

00:33:55.400 --> 00:33:57.540
in unser Repository hochlädt, das dann

00:33:57.540 --> 00:33:59.600
normalerweise nur intern verfügbar ist

00:33:59.600 --> 00:34:01.080
und dann können wir,

00:34:01.080 --> 00:34:03.460
ob das dann automatisch deployed wird oder wir das irgendwie

00:34:03.460 --> 00:34:05.520
manuell machen, können wir uns dann halt überlegen.

00:34:05.520 --> 00:34:07.380
Ja, aber dann brauchen wir

00:34:07.380 --> 00:34:08.980
einfach, wird runtergeladen auf den Pod und dann

00:34:08.980 --> 00:34:11.160
Ja, aber dann brauchen ja die Leute, die quasi

00:34:11.160 --> 00:34:13.640
modellieren Zugriff auf das Produktionssystem

00:34:13.640 --> 00:34:15.220
quasi oder können halt

00:34:15.220 --> 00:34:17.360
es muss halt dann, die müssen den Code

00:34:17.360 --> 00:34:18.440
verändern, die müssen committen können.

00:34:18.440 --> 00:34:21.300
Ja, also die

00:34:21.300 --> 00:34:22.740
committen von morgens bis abends.

00:34:22.740 --> 00:34:25.520
Ja. Also das ist tatsächlich

00:34:25.520 --> 00:34:27.360
bei uns überhaupt nicht so, dass

00:34:27.360 --> 00:34:29.200
da irgendwie jemand sitzt, der nur in einem Notebook

00:34:29.200 --> 00:34:31.420
prototypt. Gar nicht.

00:34:31.420 --> 00:34:33.260
Also, wenn das Projekt

00:34:33.260 --> 00:34:35.120
losgeht, dann muss man als erstes ein Repo

00:34:35.120 --> 00:34:36.940
anlegen, weil sonst kann man ja gar nichts machen.

00:34:36.940 --> 00:34:39.360
Ja.

00:34:39.360 --> 00:34:41.360
Und vielleicht startet man dann

00:34:41.360 --> 00:34:43.100
irgendwie mit ein paar Skripten, die dann später

00:34:43.100 --> 00:34:45.200
ordentlich in ein Paket überfüllen,

00:34:45.200 --> 00:34:47.200
wird werden und in Funktionen und Klassen verpackt.

00:34:47.200 --> 00:34:49.160
Das kann schon sein, aber grundsätzlich

00:34:49.160 --> 00:34:51.300
ja, ist es halt

00:34:51.300 --> 00:34:53.300
eine Software

00:34:53.300 --> 00:34:55.140
und sonst auch oft in größeren Projekten

00:34:55.140 --> 00:34:56.720
mehrere Pakete, zum Beispiel zu einem

00:34:56.720 --> 00:34:59.060
Projekt für die Senatsverwaltung

00:34:59.060 --> 00:35:01.340
sind das dann, wir haben da sehr viele verschiedene Datenquellen,

00:35:01.340 --> 00:35:03.540
zum Beispiel Verkehrsdaten, Wetterdaten

00:35:03.540 --> 00:35:05.460
und so und dann haben wir für jede Datenquelle

00:35:05.460 --> 00:35:07.400
ein Paket, das nur dafür da ist,

00:35:07.400 --> 00:35:09.240
diese Datenquelle einzulegen und zu formatieren

00:35:09.240 --> 00:35:11.160
und die Datenbank zu schreiben. Das heißt, der Handschick ist dann

00:35:11.160 --> 00:35:13.220
über die Datenbank, dann kommt irgendwann das nächste

00:35:13.220 --> 00:35:14.920
Paket, das liest sich die Daten dann

00:35:14.920 --> 00:35:17.000
und macht dann die Modellierung. Und dann

00:35:17.000 --> 00:35:18.640
gibt es nochmal ein Paket, das halt

00:35:18.640 --> 00:35:20.940
irgendwelche Daten weiter aufbereitet und dann

00:35:20.940 --> 00:35:21.940
gibt es ein Paket mit der API.

00:35:21.940 --> 00:35:24.920
Und wenn ihr ein Modell daraus gebaut habt,

00:35:24.920 --> 00:35:27.060
irgendwie mit einem Torch oder sowas, was macht ihr dann?

00:35:27.060 --> 00:35:28.860
Wo legt ihr das dann hin?

00:35:28.860 --> 00:35:31.060
Wir haben ja das dann in dem

00:35:31.060 --> 00:35:32.100
Fall tatsächlich,

00:35:32.100 --> 00:35:34.660
ich verlege gerade, also tatsächlich

00:35:34.660 --> 00:35:36.980
im Kundenprojekt

00:35:36.980 --> 00:35:38.660
benutzen wir MLflow

00:35:38.660 --> 00:35:40.880
und ich weiß nicht, ob, also

00:35:40.880 --> 00:35:42.720
ich hatte das vorher tatsächlich noch nicht benutzt,

00:35:42.720 --> 00:35:44.740
wo wir die Objekte dann

00:35:44.740 --> 00:35:46.460
abgelegt. Ich glaube,

00:35:46.460 --> 00:35:48.300
es gibt,

00:35:48.300 --> 00:35:50.480
das ist ganz witzig, ja, es gibt tatsächlich,

00:35:50.480 --> 00:35:52.820
das war jetzt ein Projekt mit XGBoost,

00:35:52.820 --> 00:35:55.040
weiß ich nur, da haben wir, kann man die Projekte

00:35:55.040 --> 00:35:56.640
tatsächlich in Form eines

00:35:56.640 --> 00:35:58.900
Strings speichern und da haben wir

00:35:58.900 --> 00:36:00.120
die in der Datenbank gespeichert.

00:36:00.120 --> 00:36:03.020
Das funktioniert ganz gut.

00:36:03.020 --> 00:36:04.840
Man kann aber natürlich auch das Modellobjekt

00:36:04.840 --> 00:36:05.960
irgendwo in

00:36:05.960 --> 00:36:09.060
deinem Modellrepository dann ablegen.

00:36:09.060 --> 00:36:10.660
Also eigenes

00:36:10.660 --> 00:36:12.720
Modellrepo mit Branches oder

00:36:12.720 --> 00:36:14.020
irgendwie Tags oder sowas hier.

00:36:14.740 --> 00:36:15.360
Ja, oder

00:36:15.360 --> 00:36:18.480
irgendwelche Tags muss man natürlich schon haben, damit man

00:36:18.480 --> 00:36:19.800
die einmal heimlich identifizieren kann.

00:36:19.800 --> 00:36:22.520
Also gut, wenn jetzt die Modellierung

00:36:22.520 --> 00:36:24.560
total schnell geht, dann kann man natürlich auch

00:36:24.560 --> 00:36:26.600
das Modell einmal im Monat neu berechnen

00:36:26.600 --> 00:36:28.640
oder nee, einmal im Tag neu berechnen

00:36:28.640 --> 00:36:30.340
und sofort die Prognosen machen und das Modellobjekt

00:36:30.340 --> 00:36:32.280
überhaupt nicht speichern, aber das ist, glaube ich, eher so

00:36:32.280 --> 00:36:34.580
ein seltener Fall normalerweise, wenn man es ja schon

00:36:34.580 --> 00:36:36.760
speichert, wiederverwenden.

00:36:36.760 --> 00:36:38.240
Also

00:36:38.240 --> 00:36:40.320
wir können uns auch gerne nochmal an dem

00:36:40.320 --> 00:36:42.540
Ablauf ein bisschen weiter entlanghangeln.

00:36:42.540 --> 00:36:44.680
Ja, gerne. Weil wir jetzt schon vorgegriffen

00:36:44.680 --> 00:36:46.140
haben, also wenn wir

00:36:46.140 --> 00:36:48.260
das Problem verstanden haben,

00:36:48.260 --> 00:36:50.460
die Daten verstanden haben und die sehen soweit gut aus,

00:36:50.460 --> 00:36:52.460
dass wir und unser Kunde gemeinsam sagen,

00:36:52.460 --> 00:36:53.880
okay, damit können wir jetzt wirklich starten,

00:36:53.880 --> 00:36:56.120
da ist kein Problem drin, dann

00:36:56.120 --> 00:36:59.100
passiert natürlich erstmal ganz viel Datenaufbereitung

00:36:59.100 --> 00:37:00.620
und Bereinigung. Oft muss man

00:37:00.620 --> 00:37:02.460
verschiedene Datensätze zusammenführen.

00:37:02.460 --> 00:37:04.340
Da haben wir dann natürlich vorher schon geprüft,

00:37:04.340 --> 00:37:06.960
ob es auch eine gemeinsame ID gibt, um die zusammenzuführen.

00:37:06.960 --> 00:37:07.660
Sonst wird es schwierig.

00:37:07.660 --> 00:37:10.340
Oft muss man auch Sachen aggregieren.

00:37:10.340 --> 00:37:13.100
Zum Beispiel hat man vielleicht einzelne

00:37:13.100 --> 00:37:14.660
Zeilen für jedes Produkt,

00:37:14.660 --> 00:37:16.380
das gekauft wurde von einem Kunden.

00:37:16.380 --> 00:37:18.500
Wir wollen aber eigentlich nur eine Zeile pro

00:37:18.500 --> 00:37:20.460
Kunde. Dann muss man sich halt irgendwas überlegen,

00:37:20.460 --> 00:37:22.720
wie man das denn voll aufaggregieren kann.

00:37:22.720 --> 00:37:24.980
Manchmal macht man Transformationen

00:37:24.980 --> 00:37:26.580
oder berechnet eine neue

00:37:26.580 --> 00:37:28.280
Spalte aus anderen Spalten.

00:37:28.280 --> 00:37:30.600
Also das ist das, was man immer als

00:37:30.600 --> 00:37:32.640
Feature Engineering kennt. Wir bauen also

00:37:32.640 --> 00:37:34.660
Features, die ja einfach sinnvolle

00:37:34.660 --> 00:37:36.820
Inhalte haben, mit denen das Modell

00:37:36.820 --> 00:37:38.680
dann später gut umgehen

00:37:38.680 --> 00:37:40.860
kann. Macht ihr das dann immer live in Pandas

00:37:40.860 --> 00:37:42.160
oder schreibt ihr das auch in eine Datenbank rein?

00:37:42.160 --> 00:37:44.580
Es kommt darauf

00:37:44.580 --> 00:37:46.460
an, aber meistens haben wir dann schon

00:37:46.460 --> 00:37:48.520
eigentlich ein separates Modul, das die

00:37:48.520 --> 00:37:50.540
Features berechnet und irgendwo hinschreibt,

00:37:50.540 --> 00:37:52.080
weil das meistens dann

00:37:52.080 --> 00:37:54.920
einfach schöner ist, das zu modularisieren,

00:37:54.920 --> 00:37:56.340
weil es sonst ein bisschen zu viel wird.

00:37:56.340 --> 00:37:58.160
Was ist da eure Lieblingsdatenbank für?

00:37:58.160 --> 00:38:00.980
Ich überlege gerade,

00:38:00.980 --> 00:38:02.660
wir waren früher viel auf MariaDB

00:38:02.660 --> 00:38:04.160
unterwegs, jetzt sind wir

00:38:04.160 --> 00:38:06.420
ja viel in Clickhouse, also

00:38:06.420 --> 00:38:08.560
Clickhouse, teilweise verhält es

00:38:08.560 --> 00:38:09.960
sich unerwartet, finde ich.

00:38:09.960 --> 00:38:12.600
Aber es ist halt schon sehr cool

00:38:12.600 --> 00:38:14.280
mit großen Datenmengen. Da kannst du einfach

00:38:14.280 --> 00:38:15.620
die...

00:38:15.620 --> 00:38:16.840
Das ist diese Geschichte,

00:38:16.840 --> 00:38:20.240
Yandex hat das, glaube ich, mal gebaut und dann haben sie es irgendwie

00:38:20.240 --> 00:38:22.080
Open Source veröffentlicht.

00:38:22.080 --> 00:38:22.720
Das weiß ich nicht.

00:38:22.720 --> 00:38:24.020
Ich weiß es nicht genau.

00:38:24.020 --> 00:38:28.080
Ja, das habe ich auch schon ein gutes Mal gehört.

00:38:28.080 --> 00:38:30.200
Ja, also

00:38:30.200 --> 00:38:32.200
da haben wir am Anfang dieses Projekts

00:38:32.200 --> 00:38:33.620
überlegt, okay, machen wir das jetzt?

00:38:33.620 --> 00:38:36.260
Wir hatten einmal was damit ausprobiert und

00:38:36.260 --> 00:38:38.240
wir wussten, wenn das jetzt nicht gut funktioniert,

00:38:38.240 --> 00:38:40.260
dann müssen wir natürlich irgendwie auf eigene

00:38:40.260 --> 00:38:42.280
Kappe nochmal ein paar Tage

00:38:42.280 --> 00:38:44.160
investieren, um das umzustellen. Aber es war

00:38:44.160 --> 00:38:46.120
so eine gute Entscheidung, weil

00:38:46.120 --> 00:38:47.940
wir gemerkt haben, mit den Datenmengen

00:38:47.940 --> 00:38:50.000
würde in anderen Datenbanken

00:38:50.000 --> 00:38:51.240
überhaupt nicht gehen.

00:38:51.240 --> 00:38:52.320
Ja.

00:38:52.320 --> 00:38:55.920
Und wenn wir dann so Features haben

00:38:55.920 --> 00:38:57.980
und die stehen dann vielleicht auch in der Clickhouse-Datenbank

00:38:57.980 --> 00:39:00.140
oder vielleicht stehen sie auch in der Postgres

00:39:00.140 --> 00:39:02.040
oder Redshift-Datenbank,

00:39:02.040 --> 00:39:04.120
dann geht es dann erst

00:39:04.120 --> 00:39:06.320
mit der Modellierung los und

00:39:06.320 --> 00:39:07.880
zum Glück

00:39:07.880 --> 00:39:10.080
haben die meisten Leute von uns auch Spaß

00:39:10.080 --> 00:39:11.820
an den anderen Sachen, weil, wie gesagt, die Modellierung

00:39:11.820 --> 00:39:13.540
meistens wirklich nur ein kleiner Teil ist.

00:39:14.040 --> 00:39:15.980
Man muss sich natürlich genau überlegen, was ist

00:39:15.980 --> 00:39:17.320
überhaupt das passende Modell.

00:39:17.320 --> 00:39:19.940
Im Moment, wenn man

00:39:19.940 --> 00:39:21.420
Prognosen machen will, ist immer noch

00:39:21.420 --> 00:39:23.140
G-Boost einfach sehr, sehr gut.

00:39:23.140 --> 00:39:26.120
Ein bombasites Modell. Aber

00:39:26.120 --> 00:39:28.360
es kommen gerade Sachen, zum Beispiel

00:39:28.360 --> 00:39:30.160
gibt es da P-F-Enders.

00:39:30.160 --> 00:39:32.080
Ja, das klingt auch sehr interessant, ja.

00:39:32.080 --> 00:39:32.740
Geil, ne?

00:39:32.740 --> 00:39:36.420
Es ist ein Transformer-Modell

00:39:36.420 --> 00:39:37.920
und das ist irgendwie total verrückt,

00:39:37.920 --> 00:39:39.540
weil dieses Modell hat,

00:39:39.540 --> 00:39:42.260
also ich finde es immer noch total beeindruckend,

00:39:42.260 --> 00:39:43.920
es klingt irgendwie so magic. Also das hat,

00:39:43.920 --> 00:39:45.580
hat gelernt, wie

00:39:45.580 --> 00:39:47.560
Datensätze, wie die Zusammenhänge in

00:39:47.560 --> 00:39:49.980
Datensätzen, Entschuldigung, wie die Zusammenhänge

00:39:49.980 --> 00:39:51.880
in Datensätzen normalerweise

00:39:51.880 --> 00:39:53.840
so sind und dann gibt man

00:39:53.840 --> 00:39:55.820
dem nochmal so ähnlich wie so

00:39:55.820 --> 00:39:57.880
ein Feintuning den Datensatz, den man halt

00:39:57.880 --> 00:40:00.140
da selbst hat, der einen interessiert

00:40:00.140 --> 00:40:01.820
und dann kann man damit

00:40:01.820 --> 00:40:03.880
total gute Prognosen machen, auch wenn

00:40:03.880 --> 00:40:05.780
der Datensatz nicht besonders groß ist

00:40:05.780 --> 00:40:07.720
und das Verrückte ist, diese Datensätze

00:40:07.720 --> 00:40:09.660
anhand derer das gelernt hat, das sind

00:40:09.660 --> 00:40:11.920
künstliche Daten, also es sind nicht mal

00:40:11.920 --> 00:40:13.800
echte Daten, weil gibt es ja gar nicht so

00:40:13.800 --> 00:40:15.620
viele im Netz verfügbar, es ist ja anders, als wenn man

00:40:15.620 --> 00:40:17.180
ein Sprachmodell trainieren will und das ganze Internet

00:40:17.180 --> 00:40:19.660
besteht aus Sprache, aber es funktioniert

00:40:19.660 --> 00:40:21.760
trotzdem, es ist richtig beeindruckend. Also ich glaube,

00:40:21.760 --> 00:40:23.780
das ist so was, was sich gerade so anfühlt

00:40:23.780 --> 00:40:25.760
wie, okay, da passiert jetzt wirklich mal

00:40:25.760 --> 00:40:27.360
wieder was Neues in der

00:40:27.360 --> 00:40:29.640
Bereichprognose. Ja, ja, auch diese

00:40:29.640 --> 00:40:31.380
ganzen Pre-Trend, das gibt es ja im

00:40:31.380 --> 00:40:33.680
LNM-Bereich, gibt es das ja alles oder halt auch bei

00:40:33.680 --> 00:40:35.560
so Vision-Modellen,

00:40:35.560 --> 00:40:37.540
wo dann alles auf ImageNet oder so trainiert ist, aber

00:40:37.540 --> 00:40:39.700
bei tabularen Daten hätte ich jetzt überhaupt gar

00:40:39.700 --> 00:40:41.620
nicht gedacht, dass das überhaupt möglich ist oder dass

00:40:41.620 --> 00:40:43.640
das irgendwie, dass das, und ja,

00:40:43.680 --> 00:40:45.000
das hat mich auch total gewundert, dass

00:40:45.000 --> 00:40:47.060
Ihr müsst ja vielleicht jetzt noch ein bisschen kurz

00:40:47.060 --> 00:40:49.400
nochmal erklären, bitte, so die Grundlage, ich glaube,

00:40:49.400 --> 00:40:51.220
das war ein bisschen komplex vielleicht für

00:40:51.220 --> 00:40:52.980
einen Einstieg. Also

00:40:52.980 --> 00:40:54.580
TabTFN hast du gesagt?

00:40:54.580 --> 00:40:57.780
Und XGBoost, also Gradient Boosting.

00:40:57.780 --> 00:40:59.420
Ja, XGBoost ist

00:40:59.420 --> 00:41:01.580
ein Gradient Boosting und das

00:41:01.580 --> 00:41:03.520
ist halt eigentlich einfach dazu da, um eine Tabelle

00:41:03.520 --> 00:41:05.600
von Daten zu nehmen und die Zusammenhänge zu

00:41:05.600 --> 00:41:06.980
lernen, die in diesen Daten

00:41:06.980 --> 00:41:09.420
vorkommen. Zum Beispiel will ich

00:41:09.420 --> 00:41:11.340
vielleicht vorher sagen, wie viel verkauft wird da an einem

00:41:11.340 --> 00:41:13.560
bestimmten Tag und in den Daten hätte ich zum Beispiel

00:41:13.560 --> 00:41:15.360
die Info, welcher Wochentag ist denn das eigentlich

00:41:15.360 --> 00:41:17.280
und ist dann vielleicht davor oder danach ein

00:41:17.280 --> 00:41:19.400
Feiertag und um welches Produkt geht es und so

00:41:19.400 --> 00:41:21.440
weiter. Wie ist das Wetter? Vielleicht verkaufe ich

00:41:21.440 --> 00:41:23.100
ja bei Hitze mehr Wassermelonen

00:41:23.100 --> 00:41:25.460
und das ist so der Klassiker,

00:41:25.460 --> 00:41:27.420
das würde man auch mit einer

00:41:27.420 --> 00:41:28.760
linearen Regression

00:41:28.760 --> 00:41:30.700
machen können, die ist aber

00:41:30.700 --> 00:41:33.180
weniger flexibel und normalerweise dann auch

00:41:33.180 --> 00:41:35.280
weniger genau und XGBoost ist da

00:41:35.280 --> 00:41:37.240
deutlich komplexer. Und XGBoost macht das

00:41:37.240 --> 00:41:39.480
dann quasi über die, weiß ich nicht,

00:41:39.480 --> 00:41:40.880
Backpropagation-Mechanismen?

00:41:40.880 --> 00:41:43.440
Nee, nee, das ist eine Art Decision Tree, also es ist ein anderes

00:41:43.440 --> 00:41:45.320
Art, grundsätzlich

00:41:45.320 --> 00:41:46.680
eine andere Art von Modell.

00:41:46.680 --> 00:41:48.900
Ja, das ist im Prinzip so eine

00:41:48.900 --> 00:41:51.080
Kombination aus ganz, ganz

00:41:51.080 --> 00:41:52.700
vielen kleinen,

00:41:52.700 --> 00:41:55.060
nicht besonders schlauen Entscheidungsbäumen,

00:41:55.060 --> 00:41:57.160
aber dadurch, dass die alle hintereinander geschaltet werden,

00:41:57.160 --> 00:41:59.080
ergänzen sie sich ja gut und dann wird es am Ende

00:41:59.080 --> 00:42:00.220
auch ziemlich gut.

00:42:00.220 --> 00:42:03.060
Ja. Und das heißt

00:42:03.060 --> 00:42:04.720
über Jahre eigentlich

00:42:04.720 --> 00:42:07.240
für jedes typische

00:42:07.240 --> 00:42:09.560
Predictive-Projekt

00:42:09.560 --> 00:42:11.500
oder für jede Predictive-Fragestellung

00:42:11.500 --> 00:42:13.140
war XGBoost, es war schon fast

00:42:13.140 --> 00:42:13.420
lang,

00:42:13.440 --> 00:42:15.640
weil ich, ja, es gibt da noch so ein paar Varianten,

00:42:15.640 --> 00:42:17.420
es gibt zum Beispiel Catboost, das es so ähnlich

00:42:17.420 --> 00:42:19.500
hat, aber halt schon irgendwie ganz schlaue

00:42:19.500 --> 00:42:21.360
Mechanismen implementiert, um mit

00:42:21.360 --> 00:42:23.380
kategorialen Variablen umzugehen und manchmal

00:42:23.380 --> 00:42:25.740
das eine oder das andere dann so ein bisschen besser oder performanter,

00:42:25.740 --> 00:42:27.100
aber das ist kein Riesenunterschied.

00:42:27.100 --> 00:42:29.720
Da gab es ja nicht auch noch irgendwas von Microsoft Lightboost

00:42:29.720 --> 00:42:31.280
oder sowas, aber ich weiß gar nicht, was da rausgeworden ist.

00:42:31.280 --> 00:42:33.620
Oder LightGBM. Oder LightGBM, genau. Ich weiß gar nicht, was da rausgeworden

00:42:33.620 --> 00:42:33.840
ist.

00:42:33.840 --> 00:42:36.940
Benutzen wir auch gerade in dem Projekt.

00:42:36.940 --> 00:42:38.560
Ja.

00:42:38.560 --> 00:42:41.800
Und ja, witzigerweise,

00:42:41.800 --> 00:42:42.900
wir haben auch schon,

00:42:43.440 --> 00:42:45.400
ich glaube, vor einem Jahr oder so haben wir gedacht, kann man eigentlich

00:42:45.400 --> 00:42:47.200
auch LLMs zur Prognose benutzen? Ich möchte kein

00:42:47.200 --> 00:42:49.440
LLM-Jahr sagen, guck mal hier, das und das

00:42:49.440 --> 00:42:51.440
und das sind meine Daten, was denkst du, wie

00:42:51.440 --> 00:42:53.380
teuer ist dieser Gebrauchtwagen?

00:42:53.380 --> 00:42:55.340
Und wir haben da einen Datensatz bekommen

00:42:55.340 --> 00:42:56.800
von einem

00:42:56.800 --> 00:42:58.940
Unternehmen, die

00:42:58.940 --> 00:43:01.260
genau solche Daten eben aus dem Internet

00:43:01.260 --> 00:43:02.280
crawlen und die,

00:43:02.280 --> 00:43:05.400
das sagen wir natürlich, so ein bisschen

00:43:05.400 --> 00:43:07.120
Informationen mitgeben

00:43:07.120 --> 00:43:08.840
und das hat aber schon funktioniert.

00:43:08.840 --> 00:43:09.900
Wir haben da,

00:43:09.900 --> 00:43:12.180
ja, da weiß ich

00:43:12.180 --> 00:43:13.340
jetzt die Details natürlich nicht alle,

00:43:13.440 --> 00:43:15.320
auswendig, aber wir haben sowohl mit

00:43:15.320 --> 00:43:17.920
GPT-Modellen

00:43:17.920 --> 00:43:19.380
als auch mit Open-Source-Modellen das

00:43:19.380 --> 00:43:21.280
ausprobiert. Es macht schon Sinn, die zu

00:43:21.280 --> 00:43:23.380
feintunen. Und dann

00:43:23.380 --> 00:43:25.560
kann man aber relativ gut sagen, mein Auto

00:43:25.560 --> 00:43:27.400
oder das Auto, das ist die Marke,

00:43:27.400 --> 00:43:29.720
das hat so viele Kilometer, das ist so und so alt

00:43:29.720 --> 00:43:31.440
und das hat, hier ist noch der Freitext mit

00:43:31.440 --> 00:43:32.440
der Beschreibung dazu.

00:43:32.440 --> 00:43:35.520
Da steht dann vielleicht irgendwas Spannendes

00:43:35.520 --> 00:43:37.360
drin, wie das hat eine Beule, vielleicht steht da aber auch

00:43:37.360 --> 00:43:39.480
nichts Spannendes drin. Und dann fragt

00:43:39.480 --> 00:43:41.500
man, wie teuer ist das Auto?

00:43:41.500 --> 00:43:43.400
Bitte antworte mich nur in einer

00:43:43.400 --> 00:43:44.940
Zahl, in Euro oder irgendwie sowas.

00:43:44.940 --> 00:43:47.160
Und das funktioniert schon erstaunlich gut,

00:43:47.160 --> 00:43:49.160
vor allem, wenn man nicht so viele Trainingsdaten hat.

00:43:49.160 --> 00:43:51.240
Weil ich glaube, dann kann das halt die Stärke ausspielen,

00:43:51.240 --> 00:43:53.400
dass das Sprachmodell eben

00:43:53.400 --> 00:43:55.340
schon Vorwissen hat

00:43:55.340 --> 00:43:57.340
zu Autopreisen, weil es das Internet kennt.

00:43:57.340 --> 00:43:59.180
Also Transformers meinst du jetzt tatsächlich, also

00:43:59.180 --> 00:44:01.220
die großen LLMs und nicht nur Transformers selbst?

00:44:01.220 --> 00:44:03.140
Genau. Weil ich hätte mich halt gefragt, ob das in dem

00:44:03.140 --> 00:44:05.100
Transformers-Modell durch das, weiß ich nicht,

00:44:05.100 --> 00:44:07.200
dadurch, dass es halt Nodes sind und

00:44:07.200 --> 00:44:09.280
Canisian Trees, dass es da irgendeine andere Art

00:44:09.280 --> 00:44:11.200
gibt, dass Daten aus den tabellarischen

00:44:11.200 --> 00:44:13.360
Daten rausziehen. Ja, das hier

00:44:13.360 --> 00:44:14.160
ist jetzt so, dass

00:44:14.160 --> 00:44:17.300
die klassischen LLMs, die man so kennt, und dann

00:44:17.300 --> 00:44:18.960
kam eben jetzt dieses Neue mit

00:44:18.960 --> 00:44:21.160
TabPFN, das ist ein Transformer, das halt

00:44:21.160 --> 00:44:23.280
wie speziell für tabulare Daten wieder gemacht ist,

00:44:23.280 --> 00:44:25.640
weil wir haben ja die LLMs eigentlich so ein bisschen zweckentfremdet,

00:44:25.640 --> 00:44:27.040
indem wir die dann da nach dieser

00:44:27.040 --> 00:44:29.040
Probe-Modell-Sprache haben. Was meintest du denn da überhaupt mit Feintuning?

00:44:29.040 --> 00:44:30.340
Was habt ihr denn da gemacht?

00:44:30.340 --> 00:44:33.440
Ich weiß gerade nicht,

00:44:33.440 --> 00:44:35.460
also ich weiß nicht, wie das eigentlich im Detail

00:44:35.460 --> 00:44:37.160
dort funktioniert, aber es ist so, dass

00:44:37.160 --> 00:44:38.580
das Modell ja eben schon

00:44:38.580 --> 00:44:41.520
ganz viel weiß von den Sprachdaten,

00:44:41.520 --> 00:44:43.140
die es aus dem Netz kennt, und wir,

00:44:43.320 --> 00:44:44.540
haben ihn dann nochmal,

00:44:44.540 --> 00:44:47.500
ja gut, das beschreibt es wahrscheinlich ab dann schon

00:44:47.500 --> 00:44:49.380
komplett, wir haben den dann

00:44:49.380 --> 00:44:51.340
nochmal, wir haben einen Trainingsdatensatz,

00:44:51.340 --> 00:44:53.500
wir ganz viele Gebrauchtwagen

00:44:53.500 --> 00:44:55.340
schon drin haben, mit dem Preis

00:44:55.340 --> 00:44:56.900
und den ganzen Eigenschaften,

00:44:56.900 --> 00:44:59.360
und dann haben wir ihm halt immer so

00:44:59.360 --> 00:45:01.500
ganz viele Texte gegeben, zu jedem Auto

00:45:01.500 --> 00:45:03.440
ein Text, das Auto ist so und so alt, sieht so und so

00:45:03.440 --> 00:45:05.400
aus, ist die Marke, und es

00:45:05.400 --> 00:45:07.580
kostet das, und das nächste Auto ist so und so

00:45:07.580 --> 00:45:09.500
und so, und kostet das, und das ist

00:45:09.500 --> 00:45:11.440
dann nochmal ein zusätzlicher Text, und

00:45:11.440 --> 00:45:13.280
damit trainiert man das Modell noch

00:45:13.280 --> 00:45:15.280
mal spezifisch auf diesen einen Task.

00:45:15.280 --> 00:45:17.120
Also wie das jetzt im Hintergrund

00:45:17.120 --> 00:45:19.380
genau passiert, kann ich tatsächlich euch gerade

00:45:19.380 --> 00:45:20.180
gar nicht erklären,

00:45:20.180 --> 00:45:23.380
weil ich in dem Thema weniger drin bin,

00:45:23.380 --> 00:45:25.240
als in sowas wie XGBoost,

00:45:25.240 --> 00:45:27.320
aber ja, dadurch ist das Modell dann nochmal,

00:45:27.320 --> 00:45:29.340
kriegt nochmal so eine Spezialausbildung quasi für

00:45:29.340 --> 00:45:31.560
das Thema Auto-Gebrauchtwagenpreise,

00:45:31.560 --> 00:45:33.440
und dann wird es nochmal besser,

00:45:33.440 --> 00:45:35.080
wenn man ihm dann so eine Frage später stellt.

00:45:35.080 --> 00:45:37.260
Ja, man trainiert das quasi nochmal

00:45:37.260 --> 00:45:39.280
ein Stückchen weiter, gibt es unterschiedliche Ansätze, wie man das dann

00:45:39.280 --> 00:45:41.200
macht, ob man nur Layer einfriert,

00:45:41.200 --> 00:45:42.280
bestimmte Gewichte halt nicht,

00:45:43.240 --> 00:45:45.080
neu setzt, und dann vielleicht nur

00:45:45.080 --> 00:45:47.420
die letzten irgendwie anpasst,

00:45:47.420 --> 00:45:49.240
oder ob man so Low-Rank-Adaption-Geschichten

00:45:49.240 --> 00:45:51.160
macht, oder, da gibt es ganz unterschiedliche.

00:45:51.160 --> 00:45:53.020
Ich komme mir an die Gewichte gar nicht dran, von den

00:45:53.020 --> 00:45:53.740
großen LMs zum Beispiel.

00:45:53.740 --> 00:45:56.540
Nee, das kannst du auch nicht mit, das kannst du natürlich dann nur,

00:45:56.540 --> 00:45:59.000
also du kannst mit den OpenAI-Modellen

00:45:59.000 --> 00:46:01.040
und so auch machen, über deren APIs, aber

00:46:01.040 --> 00:46:02.640
wenn du das auf einem

00:46:02.640 --> 00:46:05.220
quasi, wenn du das selber machen willst,

00:46:05.220 --> 00:46:07.120
dann musst du ein Modell nehmen, wo du Gewichte hast.

00:46:07.120 --> 00:46:08.380
Ja, genau, das natürlich.

00:46:08.380 --> 00:46:11.460
Ich glaube, wir haben da

00:46:11.460 --> 00:46:13.200
beides gemacht, also einmal über OpenAI, da

00:46:13.200 --> 00:46:15.100
kann man einfach über die API sein, hier ist mit Fine-Tuning

00:46:15.100 --> 00:46:16.900
ein Datensatz, machen wir mal, und

00:46:16.900 --> 00:46:18.800
aber auch mit den

00:46:18.800 --> 00:46:20.840
Open-Source-Modellen, wo wir dann nochmal

00:46:20.840 --> 00:46:23.420
ein Fine-Tuning drangehängt haben, damit die eben speziell

00:46:23.420 --> 00:46:24.960
auf Autoprise... Genau, die haben halt so selber ihre

00:46:24.960 --> 00:46:25.420
Ja, mhm.

00:46:25.420 --> 00:46:28.980
Bei Tuning und Autos fällt mir jetzt erst auf,

00:46:28.980 --> 00:46:30.500
dass das echt total gut passt.

00:46:30.500 --> 00:46:31.420
Ja.

00:46:31.420 --> 00:46:35.460
Okay, das ist halt so Tab-DFN,

00:46:35.460 --> 00:46:36.540
ja? Ja.

00:46:36.540 --> 00:46:39.160
Ja, wobei, das ist jetzt

00:46:39.160 --> 00:46:40.800
noch relativ neu, und

00:46:40.800 --> 00:46:43.160
da ja nicht jede Woche neue Projekte

00:46:43.160 --> 00:46:44.920
losgehen, sondern die meisten Projekte schon

00:46:44.920 --> 00:46:46.820
länger laufen, sind die meisten

00:46:46.820 --> 00:46:48.620
Projekte, die wir haben, dann auch mit sowas wie

00:46:48.620 --> 00:46:50.240
Boost oder teilweise auch mit

00:46:50.240 --> 00:46:52.720
irgendwelchen ausgefeilten statistischen

00:46:52.720 --> 00:46:55.260
Ansätzen oder Kombinationen,

00:46:55.260 --> 00:46:56.900
je nachdem, was man... Ja, das finde ich dann spannend.

00:46:56.900 --> 00:46:58.960
Wie viel kann denn jemand, der richtig gute Statistik

00:46:58.960 --> 00:47:00.980
oder in klassischer Statistik ist, rausholen im Vergleich

00:47:00.980 --> 00:47:02.960
zu diesen, ich beschieße das einfach mit

00:47:02.960 --> 00:47:03.560
so einem Modell?

00:47:03.560 --> 00:47:06.760
Ich würde sagen, es kommt auf die Fragestellung an.

00:47:06.760 --> 00:47:09.120
Bei so einem relativ klassischen

00:47:09.120 --> 00:47:09.980
Task wie

00:47:09.980 --> 00:47:13.000
in welchen Verkaufszahlen geht

00:47:13.000 --> 00:47:15.200
es, glaube ich, auch mit einem Modell

00:47:15.200 --> 00:47:17.540
ganz gut,

00:47:17.540 --> 00:47:19.060
wenn man es natürlich richtig macht

00:47:19.060 --> 00:47:21.080
und zum Beispiel

00:47:21.080 --> 00:47:23.160
noch, es gibt da ja eine Menge Hyperparameter,

00:47:23.160 --> 00:47:25.140
die bestimmen, wie flexibel ist das Modell

00:47:25.140 --> 00:47:27.120
und wenn man das Modell zu flexibel sein lässt,

00:47:27.120 --> 00:47:29.220
dann lernst du auch die kleinsten

00:47:29.220 --> 00:47:30.800
Wackler auf den Trainingsdaten und auf

00:47:30.800 --> 00:47:32.820
neuen Daten erzählst du dann nur Mist.

00:47:32.820 --> 00:47:34.800
Das heißt, dann hat man

00:47:34.800 --> 00:47:36.740
Overfitting und das muss man verhindern. Es gibt

00:47:36.740 --> 00:47:38.700
natürlich schon ein paar Sachen, die man falsch machen könnte,

00:47:38.700 --> 00:47:40.760
aber wenn man da

00:47:40.760 --> 00:47:42.840
alles nach State-of-the-Art macht, kommt man

00:47:42.840 --> 00:47:44.560
bei so einfachen Aufgaben mit einem

00:47:44.560 --> 00:47:46.260
XG-Boost meistens ziemlich weit,

00:47:46.260 --> 00:47:48.320
aber ja,

00:47:48.320 --> 00:47:50.880
zum Beispiel im Sportwettenbereich

00:47:50.880 --> 00:47:52.780
gibt es ja manchmal dann wirklich komplizierte Sachen,

00:47:52.780 --> 00:47:54.580
also wenn ich jetzt vorhersagen will, wie

00:47:54.580 --> 00:47:56.700
die Tore sich

00:47:56.700 --> 00:47:58.480
verteilen, dann

00:47:58.480 --> 00:48:00.600
kommt man da dann schon nochmal weiter,

00:48:00.600 --> 00:48:02.500
wenn man wirklich darüber nachdenkt, theoretisch,

00:48:02.500 --> 00:48:04.580
was ist denn das jetzt eigentlich für eine Verteilung?

00:48:04.580 --> 00:48:06.500
Das sind Anzahlen, also

00:48:06.500 --> 00:48:08.500
ist das eine Poisson-Verteilung, aber die ist ja irgendwie

00:48:08.500 --> 00:48:10.320
bivariat, weil es sind ja zwei

00:48:10.320 --> 00:48:12.640
Mannschaften und zwei Teams, die

00:48:12.680 --> 00:48:14.660
Tore machen und da weiß ich,

00:48:14.660 --> 00:48:16.780
dass meine Kolleginnen und Kollegen

00:48:16.780 --> 00:48:18.720
sich schon einige ziemlich verrückte

00:48:18.720 --> 00:48:20.680
Sachen ausgehört haben und dann umgekehrt, manchmal ist es

00:48:20.680 --> 00:48:22.080
am Ende auch irgendwie doch nur eine einfache

00:48:22.080 --> 00:48:24.160
Holperstick, die einen ziemlich weit bringt.

00:48:24.160 --> 00:48:26.540
Ihr habt also nicht die Ernährung der Spieler

00:48:26.540 --> 00:48:28.760
am Morgen zuvor mit einfließen lassen können in sowas?

00:48:28.760 --> 00:48:30.560
Das weiß ich nicht, ich müsste mal fragen, ob

00:48:30.560 --> 00:48:32.600
sie das Feature drin haben.

00:48:32.600 --> 00:48:34.780
Es gibt auf jeden Fall spannende Sachen.

00:48:34.780 --> 00:48:36.780
Ja, also ich würde

00:48:36.780 --> 00:48:38.380
mich halt tatsächlich interessieren, was man

00:48:38.380 --> 00:48:40.380
aus Statistik irgendwie daraus lernen kann, weil ich weiß nicht,

00:48:40.380 --> 00:48:42.520
verstehe nicht genau, wie jetzt in so einem Transformers-

00:48:42.520 --> 00:48:44.460
Modell die einzelnen Gewichte

00:48:44.460 --> 00:48:45.860
bei den Neuronen zustande kommen, also weil

00:48:45.860 --> 00:48:48.200
ich stelle mir das so vor, der muss versuchen, diese

00:48:48.200 --> 00:48:50.160
Features rauszufinden und die irgendwie so

00:48:50.160 --> 00:48:52.540
linear unabhängig wie möglich voneinander zu gestalten,

00:48:52.540 --> 00:48:54.340
dass er irgendwie den Erklärungsgrad

00:48:54.340 --> 00:48:56.180
dann da rausfindet, der dann halt gut ist,

00:48:56.180 --> 00:48:57.660
damit er halt gute Prognosen hinkriegt,

00:48:57.660 --> 00:49:00.300
aber so richtig klar wird das

00:49:00.300 --> 00:49:02.500
nicht. Ja, Neuronalisten

00:49:02.500 --> 00:49:04.200
sind deutlich eher Blackbox,

00:49:04.200 --> 00:49:06.260
aber das ist Extribus auch, natürlich

00:49:06.260 --> 00:49:08.340
du kriegst bei beiden auch so ein bisschen raus, was da

00:49:08.340 --> 00:49:10.260
der Grund ist, warum das jetzt irgendwie so

00:49:10.260 --> 00:49:12.280
oder so entschieden oder

00:49:12.360 --> 00:49:14.320
so gesagt hat, aber es ist

00:49:14.320 --> 00:49:16.580
schon eher so Blackbox-Modelle.

00:49:16.580 --> 00:49:18.640
Ja, man kann jetzt

00:49:18.640 --> 00:49:20.480
nachträglich dann...

00:49:20.480 --> 00:49:22.420
Also das wäre jetzt vielleicht für mich auch noch mal

00:49:22.420 --> 00:49:24.380
einer der Punkte, der für dieses Data Cleansing

00:49:24.380 --> 00:49:26.580
spricht. Ja, also wenn ich jetzt die Daten

00:49:26.580 --> 00:49:28.040
da einfach so reinkippe oder

00:49:28.040 --> 00:49:30.300
am Anfang schon so aufteile, dass

00:49:30.300 --> 00:49:32.320
ich jetzt Cluster bilde oder Kategorien

00:49:32.320 --> 00:49:34.340
bilde oder sowas und die halt noch mal damit

00:49:34.340 --> 00:49:36.460
annotiere oder so, ob das halt

00:49:36.460 --> 00:49:38.300
eine deutliche Verbesserung bringt, also weil die ein bisschen

00:49:38.300 --> 00:49:40.280
reiner sind vielleicht oder

00:49:40.280 --> 00:49:42.200
halt, ne, oder schon mal irgendwie die Daten

00:49:42.200 --> 00:49:44.400
wie eine Zusammenfassung oder eine Summe

00:49:44.400 --> 00:49:46.220
oder sowas da schon drinsteht mit

00:49:46.220 --> 00:49:48.280
ja, in irgendeiner Extraspalte, dass das dann halt

00:49:48.280 --> 00:49:50.300
das Ergebnis zum Beispiel noch mal deutlich

00:49:50.300 --> 00:49:52.100
bessere Güte kriegt. Das du beschreibst, glaube ich,

00:49:52.100 --> 00:49:54.240
Feature-Engineering gerade, oder? Ja, vielleicht.

00:49:54.240 --> 00:49:55.400
Ich hoffe es auch, ja.

00:49:55.400 --> 00:49:58.220
Also zum Beispiel, viele Modelle

00:49:58.220 --> 00:50:00.100
sind ja auch dazu in der Lage, Interaktionen

00:50:00.100 --> 00:50:01.780
zu erkennen, also beispielsweise

00:50:01.780 --> 00:50:03.240
weißt du, ich

00:50:03.240 --> 00:50:06.340
fällt mir gerade gar kein gutes Beispiel an,

00:50:06.340 --> 00:50:08.440
ja, vielleicht aus der Luftschadstoff-Prognose

00:50:08.440 --> 00:50:09.440
überlege ich gerade, ist

00:50:09.440 --> 00:50:12.040
da irgendwie was, ja,

00:50:12.040 --> 00:50:13.920
also mittags ist die Luft

00:50:13.920 --> 00:50:15.980
schlechter, weil mehr Autos rumfahren, aber nur, wenn wir

00:50:15.980 --> 00:50:17.920
keinen Wind haben. Wenn wir viel Wind haben,

00:50:17.920 --> 00:50:20.000
wird nämlich wenig Schadstoff halt weggepustet. Das ist

00:50:20.000 --> 00:50:22.160
halt eine Interaktion, also die Effekt, mittags

00:50:22.160 --> 00:50:23.940
ist es schlechter, der ist nur da, wenn die

00:50:23.940 --> 00:50:26.240
Windstärke gering ist. Und so eine Interaktion

00:50:26.240 --> 00:50:27.980
können die Modelle auch lernen,

00:50:27.980 --> 00:50:29.900
aber manchmal sind die Interaktionen ja

00:50:29.900 --> 00:50:31.940
vielleicht auch noch mal komplexer von drei oder vier

00:50:31.940 --> 00:50:33.740
Sachen und wenn man da schon so

00:50:33.740 --> 00:50:35.820
eine Idee hat, sag ich logisch, dann

00:50:35.820 --> 00:50:37.300
macht man es dem Modell halt schon deutlich leichter.

00:50:37.320 --> 00:50:55.160
Wenn man das vorher schon mal explizit zusammenbaut, also dann vielleicht irgendwas, das würde dann sagen, es ist Mittag und es ist kein Wind ins Windstill. Jetzt in diesem sehr einfachen Beispiel. Und das ist dann, glaube ich, auch wieder sowas, wo es dann wirklich viel bringt, immer mal wieder mit den Leuten zu reden, die sich fachlich damit auskennen.

00:50:55.160 --> 00:51:04.800
Ja, also dann hat man quasi tatsächlich schon das Wissen, was man aus den Daten ziehen kann, so ein bisschen annotiert, reingegeben, dass das Modell dann damit besser arbeiten kann. Also als eigene Funktion irgendwie so, ja.

00:51:04.800 --> 00:51:23.380
Ja, und oft musst du auch Daten erstmal transformieren, damit die überhaupt von dem Modell verwendet werden können. Also wenn du zum Beispiel Text hast, kannst du den nicht einfach so bei XGBoost sozusagen reinkippen, weil das kann halt bloß irgendwie eine fixe Anzahl von Spalten.

00:51:23.380 --> 00:51:25.000
Und dann muss man das irgendwie.

00:51:25.160 --> 00:51:36.920
Erstmal den Text runter projizieren mit Singular Value Decomposition oder so auf, weiß ich nicht, ein paar hundert Dimensionen oder so. Und das kann man in XGBoost reinpacken, sozusagen. Solche Sachen hat man halt auch immer, ja.

00:51:36.920 --> 00:51:54.400
Ja, das war tatsächlich so ein Grund, weshalb wir das auch mal ausprobieren wollten mit den LLMs zur Vorhersage. Weil wie du sagst, wenn wir einen Text haben und wollen aber XGBoost machen, wie in dieser Freitext mit der Autobeschreibung, dann muss man sich ja erstmal irgendwie was überlegen, wie man den dann in ein sinnvolles Format bringt, so das XGBoost.

00:51:54.400 --> 00:51:55.080
Das kennt halt nur.

00:51:55.160 --> 00:51:56.440
Eigentlich nur spaltende Zahlen.

00:51:56.440 --> 00:52:03.200
Kategorien kann man ja im Prinzip auch doch in Zahlen überführen. Und ein Text, naja, ist halt erstmal nicht so einfach.

00:52:03.200 --> 00:52:10.300
Was man jetzt natürlich auch noch machen kann, ist, dass man das LLM benutzt, um Features zu generieren, indem man sagt, hier ist der Text, hat das Auto einen Schaden? Ja, nein.

00:52:10.300 --> 00:52:11.300
Ja.

00:52:11.300 --> 00:52:17.620
Also es ist dann auch nochmal so eine Hybridlösung, die, glaube ich, gar nicht so dumm ist.

00:52:17.620 --> 00:52:25.080
Und halt auch, man kann natürlich auch, je nachdem, wie genau man das machen will, Leute hinsetzen, die dann wirklich viel Zeit damit verbringen.

00:52:25.160 --> 00:52:29.000
Texte durchzugucken und das zu labeln, dann ist das bestimmt noch mal ein bisschen genauer.

00:52:29.000 --> 00:52:31.480
Das ist halt die Frage, ob es sich lohnt, muss man sich immer überlegen.

00:52:31.480 --> 00:52:32.560
Ja.

00:52:32.560 --> 00:52:37.260
Okay, ja gut, aber wir werden, dadurch kann man schon viel rausholen, ja, durch diese Modellierung dann und so.

00:52:37.260 --> 00:52:43.900
Okay, dann sind wir in diesen Datenprozessen. Wie nennt man diese Datenprozesse? ETIL? ETIL, da gibt es ja verschiedene Art und Weisen.

00:52:43.900 --> 00:52:47.920
Ach, du meinst jetzt Extract, Transform, Load?

00:52:47.920 --> 00:52:48.280
Ja, genau.

00:52:48.280 --> 00:52:51.600
Das ist, glaube ich, aber nicht unbedingt was mit, oder?

00:52:51.600 --> 00:52:54.540
Ja, aber wir sind jetzt da irgendwo in diesem Workflow.

00:52:55.160 --> 00:52:57.800
Also es ging ja um dieses CRISP, ne? Ach so, ja.

00:52:57.800 --> 00:53:12.880
Ja, also ich glaube, ja, also die ETIL, Extract, Transform, Load, ist ja, beschreibt ja einfach den Prozess, dass man Daten irgendwo rauszieht, dann irgendwas damit macht, also sie transformiert und sie dann irgendwo hinlädt, obwohl man sagt, Daten laden für Daten kriegen.

00:53:12.880 --> 00:53:24.200
In dem Fall ist es aber Daten laden, die irgendwo hinladen. Das ist auch ein bisschen verwirrend, auch im Naming, finde ich, in den Code dann, wenn man irgendwann überall Load stehen hat, egal ob man Daten zieht oder Daten wegschiebt.

00:53:25.160 --> 00:53:37.280
Ja, das ist, so hängt das im Prinzip zusammen, aber oft benutzt man ja den Begriff ETIL auch einfach für jeden Prozess, der irgendwie Daten nimmt, verarbeitet und so durch so eine Strecke schiebt.

00:53:37.280 --> 00:53:39.340
Außerhalb vom Data Science-Bereich halt auch ganz oft.

00:53:39.340 --> 00:53:43.020
Ja, genau, ja. Also jeder Business-Prozess, den man irgendwie halt automatisieren kann, ja.

00:53:43.020 --> 00:53:52.360
Aber ich glaube, es ist schon oft so, dass man auch sagen würde nachher in einem fertigen Datenprodukt, okay, hier ist der ETIL, jetzt kommt der ETIL und dann kommt der Teil mit dem Modell.

00:53:52.360 --> 00:53:52.880
Ja, ja, ja.

00:53:52.880 --> 00:53:55.020
Also oft nutzt man den Begriff eigentlich auch, um das so voneinander anzusprechen.

00:53:55.160 --> 00:53:55.800
Ja, zu grenzen.

00:53:55.800 --> 00:54:03.980
Okay. Also ich verstehe jetzt, also wir haben, okay, verstanden, was das Geschäft macht und was wir da lösen wollen für Daten.

00:54:03.980 --> 00:54:07.460
Und dann haben wir verstanden, welche Daten wir denn haben und was wir damit machen wollen.

00:54:07.460 --> 00:54:14.720
Dann haben wir die so transformiert und umgebaut, dass wir die in ein Modell kippen können, was wir uns dann ausdenken oder ausgedacht haben.

00:54:14.720 --> 00:54:18.640
Und was machen wir dann? Dann gucken wir uns an, was dabei rauskommt.

00:54:18.640 --> 00:54:23.780
Ja, dann haben wir ein Modell und dann machen wir Prognosen und gucken, wie gut die sind.

00:54:24.880 --> 00:54:27.100
Und da muss man natürlich verschiedene Sachen beachten.

00:54:27.100 --> 00:54:35.240
Also wenn ich die Prognosen auf denselben Daten mache, die ich für das Modelltraining benutzt habe, dann ist das natürlich für das Modell relativ einfach.

00:54:35.240 --> 00:54:43.600
Und deswegen ist es wichtig, dass ich mir vorher einen Teil der Daten weglege und nur die übrigen Daten kriegt das Modell zum Lernen.

00:54:43.600 --> 00:54:52.120
Und dann habe ich auf diesen weggelegten Daten die Prognosen und dann gucke ich, was tatsächlich die Werte waren und vergleiche die mit den Prognosen von dem Modell.

00:54:52.120 --> 00:54:54.320
Und das Modell ist halt ja natürlich in dem Moment blind.

00:54:54.320 --> 00:54:54.840
Das kriegt halt...

00:54:54.840 --> 00:54:57.140
Nur die ganzen Features, aber es kriegt nicht die Zielvariable.

00:54:57.140 --> 00:55:03.100
Es muss dann seine Prognosen blind machen und wir können dann gucken und dann sagen, ja, wir kennen die Warenwerte aber schon und vergleichen das jetzt.

00:55:03.100 --> 00:55:07.760
Da gibt es dann verschiedene Kennwerte, die man berechnen kann, kommt es halt total auf die Fragestellung an.

00:55:07.760 --> 00:55:11.400
Man könnte zum Beispiel eine mittlere prozentuale Abweichung berechnen.

00:55:11.400 --> 00:55:14.640
Man kann ein Bias berechnen, liegen wir mittel drüber oder drunter.

00:55:14.640 --> 00:55:18.400
Man kann eine erklärte Varianz, einen Varianzanteil berechnen.

00:55:18.400 --> 00:55:22.940
Man kann, je nachdem, vielleicht wollen wir auch gar nicht mehrische Daten vorher sagen, sondern nur ein Ja, Nein.

00:55:22.940 --> 00:55:24.800
Dann könnte man gucken, wie viele Folgen...

00:55:24.800 --> 00:55:27.400
Falls positive, falls negative und so weiter habe ich...

00:55:27.400 --> 00:55:29.580
Das kommt, ja, stark auf den Use Case an.

00:55:29.580 --> 00:55:31.180
Auf jeden Fall kann ich das dann berechnen.

00:55:31.180 --> 00:55:35.180
Schön out of sample, also mit diesem separaten Datensatz.

00:55:35.180 --> 00:55:40.080
Und das ist natürlich besonders gut, wenn man zwei Modelle vergleichen will.

00:55:40.080 --> 00:55:42.220
Wenn man nur eins hat, dann ist da...

00:55:42.220 --> 00:55:44.860
Es ist, glaube ich, auch gar nicht so leicht zu sagen, was ist denn jetzt ein guter Wert?

00:55:44.860 --> 00:55:47.640
Finde ich irgendwie 20, 50 oder 90 Prozent erklärte Varianz?

00:55:47.640 --> 00:55:49.740
Das kommt auch stark auf die Fragestellung an.

00:55:49.740 --> 00:55:54.760
Wenn ich zum Beispiel individuelles Verhalten von Menschen erklären will, dann nicht, dass man...

00:55:54.760 --> 00:56:01.680
Ich will nicht so genau vorhersagen wie aggregierte Verkaufszahlen, weil da einfach so viele andere Einflüsse sind.

00:56:01.680 --> 00:56:08.080
Und ja, nochmal zu diesem Split, zu den Trainingsdaten und den Testdaten.

00:56:08.080 --> 00:56:12.720
In den allermeisten Fällen haben unsere Daten ja eigentlich eine zeitliche Struktur.

00:56:12.720 --> 00:56:15.860
Man kann jetzt natürlich die Testdaten zufällig rausziehen und zur Seite legen,

00:56:15.860 --> 00:56:20.580
aber am besten ist es, wenn man immer die zeitlich, die es nimmt, die zeitlich am Ende liegen,

00:56:20.580 --> 00:56:22.620
weil manchmal ändern sich eben Zusammenhänge.

00:56:22.620 --> 00:56:24.720
Und das...

00:56:24.720 --> 00:56:26.680
Eigentlich passiert es ständig, dass sich Zusammenhänge ändern.

00:56:26.680 --> 00:56:31.420
Und deswegen ist es halt sinnvoll, so ein Szenario zu bauen, wo das Modell quasi auf der Vergangenheit lernt

00:56:31.420 --> 00:56:35.060
und dann auf Daten, die danach passiert sind, auch tatsächlich evaluiert wird.

00:56:35.060 --> 00:56:39.360
Sonst kann es halt passieren, dass man sich da verschätzt und dann denkt,

00:56:39.360 --> 00:56:41.240
das Modell wäre besser, als es tatsächlich ist.

00:56:41.240 --> 00:56:45.440
Und nachher im Betrieb, dann muss es ja tatsächlich Prognosen für die Zukunft machen

00:56:45.440 --> 00:56:49.120
und dann ist die Enttäuschung dann irgendwie da, wenn es dann doch schlechter funktioniert, als man dachte.

00:56:49.120 --> 00:56:53.680
Aber man muss natürlich auch immer auffassen, dass man dann halt die neuen zusammenhängenden Erinnerungen

00:56:53.680 --> 00:56:54.680
dann irgendwie auch trotzdem mit reinkriegt.

00:56:54.680 --> 00:56:59.200
Ja, das ist natürlich regelmäßiges Neutraining, ja.

00:56:59.200 --> 00:57:04.100
Also das ist dann auch total wichtig, dass man das Modell nicht einmal trainiert und dann fünf Jahre lang benutzt.

00:57:04.100 --> 00:57:08.420
Trotzdem, solange die Zusammenhänge noch nicht da sind, die neuen, wenn man die noch nicht kennt,

00:57:08.420 --> 00:57:11.040
muss man halt zumindest mit dem leben, was man bis dahin hat.

00:57:11.040 --> 00:57:16.780
Also man könnte ja vielleicht auch diese Zusammenhänge irgendwie als, ich sag mal, Liste dem Geschäft zurückgeben.

00:57:16.780 --> 00:57:18.140
Hey, hier, das sind unsere Annahmen.

00:57:18.140 --> 00:57:19.660
Guckt doch mal bitte, dass die noch stimmen.

00:57:19.660 --> 00:57:21.840
Und wenn ihr merkt, irgendwie da ändert sich irgendwas an den Annahmen,

00:57:21.840 --> 00:57:23.740
dann müssen wir halt da nochmal was auch anpassen.

00:57:24.640 --> 00:57:28.380
Und ja, also zumindest, ich glaube, so direkt geht es gar nicht so gut,

00:57:28.380 --> 00:57:31.480
weil das ist ja was, was das Modell findet und wo die dann eher auch sagen,

00:57:31.480 --> 00:57:34.200
ah ja, cool, ja, das passt so ungefähr zu dem, was wir erwartet haben.

00:57:34.200 --> 00:57:37.400
Aber die können nicht wirklich sagen, oh, das ändert sich jetzt, weil jetzt ist keine Ahnung.

00:57:37.400 --> 00:57:45.460
Zum Beispiel der Zusammenhang von Autoanzahl zu Stickoxiden, der wird schwächer,

00:57:45.460 --> 00:57:50.140
weil mehr E-Autos unterwegs sind und die stoßen keine Stickoxide aus.

00:57:50.140 --> 00:57:54.600
Ja, okay, aber wie viel schwächer der jetzt wird, das kann uns die Senatsverwaltung,

00:57:54.600 --> 00:57:57.480
hier für Umwelt und so weiter, ja auch nicht sagen.

00:57:57.480 --> 00:58:00.800
Also sie können uns sagen, ja, das wird wahrscheinlich schwächer mit der Zeit.

00:58:00.800 --> 00:58:04.180
Also klar, solltet ihr das Modell regelmäßig neu trainieren, aber die können uns nicht sagen,

00:58:04.180 --> 00:58:07.580
so und jetzt, jetzt ist es aber so viel schwächer geworden, so müsst ihr mal neu trainieren.

00:58:07.580 --> 00:58:08.980
Das kann die auch gar nicht sehen.

00:58:08.980 --> 00:58:12.060
Aber deswegen ist es halt meistens so, dass man einfach sagt,

00:58:12.060 --> 00:58:14.780
wir trainieren unser Modell zum Beispiel einmal im Monat neu.

00:58:14.780 --> 00:58:20.260
Und dann wissen wir, dass wir halt eigentlich immer neuere Zusammenhänge abgedeckt haben.

00:58:20.260 --> 00:58:24.280
Deswegen ist es auch manchmal gar nicht so nützlich, ganz, ganz viel Datenhistorie zu haben,

00:58:24.560 --> 00:58:26.900
dass vielleicht das, vor allem jetzt, wo auch noch Corona war,

00:58:26.900 --> 00:58:32.340
dass die Zusammenhänge und die Muster während Corona in irgendwelchen Verkaufszahlen

00:58:32.340 --> 00:58:36.700
oder menschlichem Verhalten, die sind natürlich jetzt, die sind jetzt halt anders.

00:58:36.700 --> 00:58:37.900
Das wäre mein nächster Punkt gewesen.

00:58:37.900 --> 00:58:41.560
Also wenn ich jetzt Statistik nehme, ja, oder von Statistik irgendwo abhängige Modelle,

00:58:41.560 --> 00:58:46.120
um Prognosen zu machen für die Zukunft, dann bin ich ja immer nur, also auf den,

00:58:46.120 --> 00:58:49.240
ich sag jetzt mal den Normalfall trainiert, ja, oder den Alltag.

00:58:49.240 --> 00:58:53.160
Und diese ganzen Schocksituationen, die kann ich ja immer ganz schlecht irgendwie abbilden,

00:58:53.160 --> 00:58:54.360
weil ich ja dafür auch keine,

00:58:54.520 --> 00:58:55.880
Beispiele gehabt habe, ja.

00:58:55.880 --> 00:58:59.020
Wenn der Schock gerade erst passiert ist, dann ist das echt schwierig.

00:58:59.020 --> 00:59:02.100
Man kann, vergangene Schocks kann man halt noch mit reinnehmen und sagen,

00:59:02.100 --> 00:59:04.520
okay, hier war ein Strukturbruch, da hat sich jetzt irgendwie was geändert.

00:59:04.520 --> 00:59:06.100
Das nehmen wir als Feature mit rein.

00:59:06.100 --> 00:59:07.840
Geht manchmal, geht auch nicht immer.

00:59:07.840 --> 00:59:11.540
Also ich glaube, wir haben tatsächlich,

00:59:11.540 --> 00:59:17.880
wir in der Luftfahrtschiff-Projekt haben wir, glaube ich, einfach die Zeiträume definiert.

00:59:17.880 --> 00:59:20.200
Hier war Lockdown, hier war kein Lockdown.

00:59:20.200 --> 00:59:24.140
Damit das Modell zumindest weiß, ah, deswegen war hier so viel weniger.

00:59:24.480 --> 00:59:25.640
Ja, Luftverschmutzung.

00:59:25.640 --> 00:59:28.440
Ja, okay, sonst hätte ich gedacht, oh, das ist eine gute Sache, ja.

00:59:28.440 --> 00:59:32.460
Aber ich habe nochmal, ich würde mal kurz, ganz kurz einen Schritt zurückgehen,

00:59:32.460 --> 00:59:36.120
weil ich habe eine Frage, die mich noch jetzt schon interessieren würde,

00:59:36.120 --> 00:59:39.140
weil ich jetzt auch gar nicht so wirklich Ahnung von diesem TAP-PFN oder so habe,

00:59:39.140 --> 00:59:43.620
weil in den anderen Bereichen haben ja die, also normalerweise hat man neuronale Netze

00:59:43.620 --> 00:59:45.280
für solche tabularischen Daten.

00:59:45.280 --> 00:59:49.800
Das hat nicht, das funktioniert auch, aber halt nicht so gut wie die anderen Arten von Modellen.

00:59:49.800 --> 00:59:54.200
Oft, und die Frage wäre jetzt, was einen, ja, die Transformer,

00:59:54.440 --> 00:59:56.660
beziehungsweise überhaupt irgendwie das ganze Deep Learning,

00:59:56.660 --> 00:59:59.380
die ganze Deep Learning-Geschichte oder so in anderen Bereichen gebracht hat,

00:59:59.380 --> 01:00:03.220
ist ja, dass man nicht mehr so viel Feature-Engineering machen musste.

01:00:03.220 --> 01:00:06.660
Oder eigentlich ist man ja am Feature-Engineering mehr oder weniger vorher gescheitert.

01:00:06.660 --> 01:00:11.520
Und dann, jetzt kann man halt inzwischen einfach die Rohdaten da so, naja,

01:00:11.520 --> 01:00:17.580
mehr oder weniger reinkippen und das neuronale Netz macht das Feature-Engineering für einen sozusagen.

01:00:17.580 --> 01:00:22.280
Und die Frage wäre halt, macht es das möglicherweise, ist es bei TAP-PFN auch so,

01:00:22.280 --> 01:00:24.400
dass ich da jetzt quasi auch,

01:00:24.400 --> 01:00:26.820
relativ rohe Daten irgendwie verwenden kann?

01:00:26.820 --> 01:00:29.560
Oder muss ich das erstmal auch irgendwie in eine Struktur bringen,

01:00:29.560 --> 01:00:30.780
so ähnlich wie bei XGBoost?

01:00:30.780 --> 01:00:33.200
Da fragst du eigentlich die falsche.

01:00:33.200 --> 01:00:38.060
Ich glaube aber, dass man da nicht viel vorbereiten musste.

01:00:38.060 --> 01:00:43.300
Aber da würde ich tatsächlich auch auf unsere Podcast-Folge

01:00:43.300 --> 01:00:45.320
mit dem Autor von TAP-PFN verweisen.

01:00:45.320 --> 01:00:46.920
Muss ich mal anhören.

01:00:46.920 --> 01:00:48.300
Klingt gut.

01:00:48.300 --> 01:00:50.560
Ja, also genau, die ist dann wahrscheinlich für dich die richtige.

01:00:50.560 --> 01:00:51.440
Ja.

01:00:51.440 --> 01:00:52.440
Ja.

01:00:52.440 --> 01:00:54.360
Vielleicht nochmal zu dem Modell.

01:00:54.360 --> 01:00:55.000
Modell-Training.

01:00:55.000 --> 01:00:56.520
Wo trainiert ihr denn das?

01:00:56.520 --> 01:00:57.280
Und wie macht ihr das?

01:00:57.280 --> 01:01:06.860
Meistens auf, also oft auf ABS-Maschinen zum Beispiel.

01:01:06.860 --> 01:01:10.660
Wir haben auch selbst ein paar fette Server.

01:01:10.660 --> 01:01:12.720
Die sind jetzt im Rechenzentrum in Nürnberg.

01:01:12.720 --> 01:01:15.420
Seit neuestem haben sie dort unter ihresgleichen.

01:01:15.420 --> 01:01:17.400
Vorher haben wir so ein bisschen das Büro beheizt,

01:01:17.400 --> 01:01:18.200
damals wie winters.

01:01:18.200 --> 01:01:20.160
Jetzt haben wir ja einen besseren Ort gefunden.

01:01:20.160 --> 01:01:21.440
Also die benutzen wir auch manchmal.

01:01:21.440 --> 01:01:23.860
Aber viel läuft jetzt natürlich inzwischen in der Cloud.

01:01:23.860 --> 01:01:24.320
Und auch das,

01:01:24.320 --> 01:01:25.540
ist dann auch kundenabhängig.

01:01:25.540 --> 01:01:26.240
Also zum Beispiel

01:01:26.240 --> 01:01:28.800
Azure, was auch immer dann.

01:01:28.800 --> 01:01:31.680
Aber das sind oft Sachen,

01:01:31.680 --> 01:01:34.280
die dann doch lokal ein bisschen zu lang dauern würden

01:01:34.280 --> 01:01:36.200
und dann besser auf einer größeren Maschine laufen.

01:01:36.200 --> 01:01:38.660
Also irgendwie, ja.

01:01:38.660 --> 01:01:41.760
Und also die klassischen Sachen sind halt

01:01:41.760 --> 01:01:44.920
normalerweise einfach auf der CPU natürlich.

01:01:44.920 --> 01:01:47.440
Und wenn wir dann aber zu LLMs kommen,

01:01:47.440 --> 01:01:49.320
dann geht es natürlich in Richtung GPU.

01:01:49.320 --> 01:01:51.120
Und wir haben uns auch da

01:01:51.120 --> 01:01:53.280
was zugelegt vor einigen Monaten,

01:01:53.280 --> 01:01:54.280
sodass wir uns auch eigene GPUs

01:01:54.280 --> 01:01:55.720
haben und auch mal selbst

01:01:55.720 --> 01:01:58.400
das aussetzen konnten auf einer eigenen GPU.

01:01:58.400 --> 01:01:59.940
Was natürlich auch

01:01:59.940 --> 01:02:01.300
ganz spannend ist.

01:02:01.300 --> 01:02:02.220
Also habt ihr eine eigene Maschine gestellt

01:02:02.220 --> 01:02:03.740
oder habt ihr irgendwie bei Hetzner oder was gemietet?

01:02:03.740 --> 01:02:06.420
Die haben wir tatsächlich gekauft physisch.

01:02:06.420 --> 01:02:07.900
Die sitzt auch im Rechenzentrum.

01:02:07.900 --> 01:02:11.260
Und dann irgendwann haben wir auch mal was ausprobiert

01:02:11.260 --> 01:02:12.440
oder weil die dann doch zu klein,

01:02:12.440 --> 01:02:13.920
da haben wir das dann über AWS gemacht.

01:02:13.920 --> 01:02:18.080
Das ist auch schwierig, gerade welche zu kaufen.

01:02:18.080 --> 01:02:19.100
Und das ist sehr teuer.

01:02:19.100 --> 01:02:20.800
Mieten ist auch sehr teuer.

01:02:20.800 --> 01:02:23.400
Das macht jetzt schon Sinn.

01:02:24.240 --> 01:02:26.520
Aber ich glaube, sie war dann irgendwie

01:02:26.520 --> 01:02:28.320
zwei Monate später wieder deutlich günstiger.

01:02:28.320 --> 01:02:32.840
Ich glaube, wenn man die mietet,

01:02:32.840 --> 01:02:35.080
dann kostet die irgendwie so 1.000 Euro im Monat oder sowas.

01:02:35.080 --> 01:02:36.540
Naja, also wenn

01:02:36.540 --> 01:02:38.640
du viel Hauptspeicher, wenn du zum Beispiel LLMs

01:02:38.640 --> 01:02:40.500
feintunen willst, dann zahlst du eher 1.000 Euro am Tag.

01:02:40.500 --> 01:02:42.680
Ja, das ist richtig teuer.

01:02:42.680 --> 01:02:44.700
Ja, okay, kommt auch wahrscheinlich drauf an,

01:02:44.700 --> 01:02:45.660
wie viel man braucht, ja.

01:02:45.660 --> 01:02:48.700
Ich glaube, es hat

01:02:48.700 --> 01:02:50.720
auch ein paar Leuten einfach Spaß gemacht,

01:02:50.720 --> 01:02:52.720
das Ding halt auszuwählen und zu kaufen

01:02:52.720 --> 01:02:54.200
und dann wirklich mal selber sowas zu machen.

01:02:54.200 --> 01:02:55.820
Und das komplett aufzusetzen.

01:02:55.820 --> 01:02:58.420
Das macht auch Spaß, ja.

01:02:58.420 --> 01:03:00.020
Ist ja auch gut, wenn man das dann mal kann.

01:03:00.020 --> 01:03:01.520
Kommt ja der Operator durch.

01:03:01.520 --> 01:03:03.860
Ja, ich würde das auch machen.

01:03:03.860 --> 01:03:05.340
Ich brauche nur einen Grund.

01:03:05.340 --> 01:03:06.680
Gib mir doch einen Grund dafür.

01:03:06.680 --> 01:03:09.400
Also vielleicht wollt ihr ein unbezahltes Praktikum.

01:03:09.400 --> 01:03:12.560
Wenn wir dann ganz viel

01:03:12.560 --> 01:03:14.600
große Hardware nicht haben, können wir nur mal nachdenken.

01:03:14.600 --> 01:03:16.600
Richtig.

01:03:16.600 --> 01:03:18.560
Das könnten wir mal nutzen.

01:03:18.560 --> 01:03:22.480
Vielleicht noch mal

01:03:22.480 --> 01:03:24.160
zu der Modellbewertung.

01:03:24.160 --> 01:03:25.480
Ich hätte ja schon gesagt, dass man natürlich

01:03:25.480 --> 01:03:27.200
Kennzahlen ausbrechen kann für die

01:03:27.200 --> 01:03:28.960
Modellgenauigkeit so insgesamt.

01:03:28.960 --> 01:03:31.740
Wie viele Fälle wären richtig vorher gesagt

01:03:31.740 --> 01:03:33.340
oder wie weit sind wir im Mittel daneben.

01:03:33.340 --> 01:03:35.220
Aber dann macht es halt auch Sinn,

01:03:35.220 --> 01:03:37.360
diese Blackbox noch mal aufzubrechen,

01:03:37.360 --> 01:03:39.160
wie ihr eben erwähnt habt.

01:03:39.160 --> 01:03:42.060
Dass man guckt, was hat das Modell eigentlich für Zusammenhänge gefunden.

01:03:42.060 --> 01:03:44.360
Und das ist

01:03:44.360 --> 01:03:46.300
bei einer linearen Regression natürlich leicht,

01:03:46.300 --> 01:03:48.000
weil man sich einfach die Koeffizienten anguckt

01:03:48.000 --> 01:03:50.480
und guckt, wie hoch die sind oder ob welche signifikant sind.

01:03:50.480 --> 01:03:52.220
Aber das geht dann

01:03:52.220 --> 01:03:53.780
bei XGBoost nicht mehr so leicht.

01:03:54.160 --> 01:03:56.580
Sich irgendwelche Splits anzugucken, wie man das Modell gefunden hat.

01:03:56.580 --> 01:03:59.280
Aber da gibt es ganz tolle Methoden,

01:03:59.280 --> 01:04:00.180
die nennen sich Shep

01:04:00.180 --> 01:04:02.760
und die kann man dann

01:04:02.760 --> 01:04:04.700
danach auf die, also man braucht

01:04:04.700 --> 01:04:06.400
das Modell und auch noch mal einen Datensatz,

01:04:06.400 --> 01:04:08.660
mit dem man Prognosen macht und wenn man das hat,

01:04:08.660 --> 01:04:10.800
dann kann man diese Methoden darauf werfen

01:04:10.800 --> 01:04:12.700
und kriegt dann ganz

01:04:12.700 --> 01:04:14.640
praktische Visualisierung.

01:04:14.640 --> 01:04:16.580
Also erstmal eine Feature Importance,

01:04:16.580 --> 01:04:18.680
also wie viel wurde welches Feature

01:04:18.680 --> 01:04:19.840
vom Modell eigentlich genutzt.

01:04:19.840 --> 01:04:22.500
Auch das ist ja schon mal ein erster Plausibilitätscheck,

01:04:22.500 --> 01:04:24.080
wenn da irgendwas ganz am Anfang steht,

01:04:24.120 --> 01:04:26.640
was sehr überrascht ist, sollte man auch überlegen, was da los ist

01:04:26.640 --> 01:04:28.340
und dann kann man sich auch die Form der

01:04:28.340 --> 01:04:30.160
Zusammenhänge angucken. Zum Beispiel

01:04:30.160 --> 01:04:32.500
glaube ich, da haben wir auch gesehen,

01:04:32.500 --> 01:04:34.540
je windiger, desto weniger Schadstoff, aber irgendwo

01:04:34.540 --> 01:04:36.420
gibt es dann so eine Sättigung, dann sind die Schadstoffe halt

01:04:36.420 --> 01:04:38.300
irgendwie einfach so weggeweht, wie es nur geht.

01:04:38.300 --> 01:04:40.360
Und

01:04:40.360 --> 01:04:42.380
das, ich glaube,

01:04:42.380 --> 01:04:44.080
es war sogar, nee, ich glaube,

01:04:44.080 --> 01:04:46.460
das war das Interessante, irgendwann wurde es halt wieder schlechter,

01:04:46.460 --> 01:04:48.320
weil dann der Staub

01:04:48.320 --> 01:04:50.400
aufgewirbelt wird. Wenn es so wenig ist, dann hat man

01:04:50.400 --> 01:04:52.500
immer nur den Staub in der Luft, dass es wieder schlechter wird

01:04:52.500 --> 01:04:54.080
und dann habe ich so, okay, was ist

01:04:54.080 --> 01:04:55.980
das für ein komisches Muster und haben das mit

01:04:55.980 --> 01:04:58.200
Kunden angeguckt, die meinten so, ja, das haben wir auch schon

01:04:58.200 --> 01:05:00.340
beobachtet, dass wir denken, das liegt

01:05:00.340 --> 01:05:02.320
daran, dass dann irgendwann der Wind zu stark ist,

01:05:02.320 --> 01:05:02.780
dass halt Staub in der Luft...

01:05:02.780 --> 01:05:05.460
Der Abrief von der ganzen Straße, der kommt nochmal mit hoch, ja.

01:05:05.460 --> 01:05:08.500
Ja, ist natürlich, wenn dann, wenn es regnet,

01:05:08.500 --> 01:05:10.240
dann halt eben wieder nicht, weil dann wird

01:05:10.240 --> 01:05:12.080
das eben weggespült. Und dann die Temperatur wieder...

01:05:12.080 --> 01:05:14.060
Genau, und solche Sachen kann man dann halt eben sich

01:05:14.060 --> 01:05:16.200
angucken und überlegen, ob die plausibel

01:05:16.200 --> 01:05:18.220
sind und man kann mit den Methoden sogar

01:05:18.220 --> 01:05:20.000
ganz einzelne

01:05:20.000 --> 01:05:22.420
Vorhersagen auch nochmal analysieren

01:05:22.420 --> 01:05:24.040
und dann sagt die einem quasi so, okay, wir haben

01:05:24.040 --> 01:05:26.340
jetzt hier 3,5 mehr gesagt,

01:05:26.340 --> 01:05:28.000
weil es ist Montag und dann haben wir

01:05:28.000 --> 01:05:30.040
aber nochmal 1,2 weniger gesagt, weil

01:05:30.040 --> 01:05:31.840
es ist in den Ferien oder sowas

01:05:31.840 --> 01:05:34.180
und das ist

01:05:34.180 --> 01:05:35.840
natürlich auch sehr gut, um wirklich

01:05:35.840 --> 01:05:38.020
erklären zu können, warum man genau diese

01:05:38.020 --> 01:05:39.840
Prognose macht und was das Modell findet

01:05:39.840 --> 01:05:41.980
und um sich sicher zu sein, dass man

01:05:41.980 --> 01:05:44.080
auch irgendwie ein sinnvolles und gutes Modell gefunden

01:05:44.080 --> 01:05:45.900
hat. Und das klingt jetzt alles

01:05:45.900 --> 01:05:47.920
so linear, als würde man da so durchgehen, aber

01:05:47.920 --> 01:05:49.860
das ist dann auch manchmal ein Moment, wo man nochmal

01:05:49.860 --> 01:05:51.400
Ideen hat und neue Features baut

01:05:51.400 --> 01:05:54.000
oder nochmal Ideen hat und die Daten bereinigt

01:05:54.000 --> 01:05:55.660
weil einem irgendwas ganz komisches auffällt,

01:05:55.660 --> 01:05:57.340
irgendein Artefakt, das man loswerden muss,

01:05:57.340 --> 01:06:00.160
dass, egal wie toll

01:06:00.160 --> 01:06:02.020
man sich die Daten vorher anguckt, manche Sachen

01:06:02.020 --> 01:06:04.140
finde ich, sieht man einfach erst nach der Modellierung

01:06:04.140 --> 01:06:05.660
und muss dann irgendwie nochmal ein Stück zurückgehen,

01:06:05.660 --> 01:06:06.380
das ist ja kein Problem.

01:06:06.380 --> 01:06:09.720
Das ist ja dieser Eval-Step dann,

01:06:09.720 --> 01:06:12.200
der dann guckt, ob das, was man da macht,

01:06:12.200 --> 01:06:13.740
auch dem entspricht, was man so

01:06:13.740 --> 01:06:16.100
möchte. Oder ja,

01:06:16.100 --> 01:06:17.020
es gibt ein Alert, ja.

01:06:17.020 --> 01:06:19.780
Irgendwas stimmt hier nicht, aber das kann natürlich auch sein,

01:06:19.780 --> 01:06:20.820
dass in der Realität irgendwas nicht stimmt.

01:06:20.820 --> 01:06:23.960
Das kommt erst später. In dem Moment haben wir noch gar kein Alert,

01:06:23.960 --> 01:06:25.780
im System, da haben wir irgendwie noch gar nichts.

01:06:25.780 --> 01:06:27.400
Wir haben jetzt vielleicht eine

01:06:27.400 --> 01:06:29.800
Pipeline, die die Tests laufen lässt, wenn wir

01:06:29.800 --> 01:06:32.080
was pushen, aber mehr ist in dem Moment normalerweise

01:06:32.080 --> 01:06:33.220
noch nicht automatisiert.

01:06:33.220 --> 01:06:35.760
Und ja, wir schreiben auch sehr gerne

01:06:35.760 --> 01:06:37.340
Tests. In was schreibt ihr Tests?

01:06:37.340 --> 01:06:39.940
Ich glaube,

01:06:39.940 --> 01:06:41.380
es ist eigentlich immer ein Pytest unterwegs.

01:06:41.380 --> 01:06:44.900
Wir lieben Pytests.

01:06:44.900 --> 01:06:47.840
Wobei Tests mit Daten ja auch manchmal

01:06:47.840 --> 01:06:49.080
ganz witzig sind, weil

01:06:49.080 --> 01:06:51.020
man, ja,

01:06:51.020 --> 01:06:53.700
baut man sich dann einen kleinen Testdatensatz,

01:06:53.920 --> 01:06:56.040
ist der dann realistisch,

01:06:56.040 --> 01:06:57.820
macht man vielleicht sogar Tests gegen die

01:06:57.820 --> 01:06:59.960
echten Daten. Die dürfen, die können

01:06:59.960 --> 01:07:01.940
natürlich keine einzelnen Werte prüfen, aber man kann

01:07:01.940 --> 01:07:03.720
damit testen, ob es überhaupt durchläuft. Also,

01:07:03.720 --> 01:07:05.160
ja, das ist ein ganz eigenes Thema.

01:07:05.160 --> 01:07:08.360
Ja, es ist

01:07:08.360 --> 01:07:10.200
tatsächlich schon, ja, also ich würde

01:07:10.200 --> 01:07:11.820
auch dazu tendieren, irgendwie aus der Realität irgendwas

01:07:11.820 --> 01:07:13.760
rauszuschneiden und dann zu gucken, ob das dann so

01:07:13.760 --> 01:07:16.280
läuft. Weil also so Daten

01:07:16.280 --> 01:07:18.000
mocken ist immer so ein bisschen...

01:07:18.000 --> 01:07:19.420
Naja, gut, ja.

01:07:19.420 --> 01:07:21.440
Ja, es geht auch mal, aber

01:07:21.440 --> 01:07:23.880
schwer. Ja, also

01:07:23.880 --> 01:07:25.520
in dem Moment wäre man ja eigentlich nur bei einem

01:07:25.520 --> 01:07:27.660
POC, bei einem Proof of Concept

01:07:27.660 --> 01:07:29.560
und so ein richtiges Produkt

01:07:29.560 --> 01:07:31.940
oder ein MVP, ein Minimum

01:07:31.940 --> 01:07:33.640
Viable Product, kriegt man ja erst, wenn man dann

01:07:33.640 --> 01:07:35.860
das Ganze auch deployt und automatisiert.

01:07:35.860 --> 01:07:37.560
Und

01:07:37.560 --> 01:07:39.820
wir, ja, wir stellen

01:07:39.820 --> 01:07:41.300
unsere Prognosen oder

01:07:41.300 --> 01:07:42.940
Klassifikationen oder was auch immer

01:07:42.940 --> 01:07:45.620
oft über APIs

01:07:45.620 --> 01:07:47.500
zur Verfügung, über Rest-APIs.

01:07:47.500 --> 01:07:49.920
Oft machen wir aber auch

01:07:49.920 --> 01:07:52.080
nochmal schon ein Frontend

01:07:52.080 --> 01:07:53.840
dazu, also eine Web-App, wo

01:07:53.840 --> 01:07:55.580
die dann angezeigt werden, wo zum Beispiel

01:07:55.580 --> 01:07:57.660
unser Kunde sich dann die Alarme

01:07:57.660 --> 01:07:59.700
angucken kann von irgendwelchen

01:07:59.700 --> 01:08:01.580
Käufen, die irgendwie

01:08:01.580 --> 01:08:02.560
suspekt aussehen.

01:08:02.560 --> 01:08:07.020
Mit was macht ihr die Web-Apps?

01:08:07.020 --> 01:08:09.420
Meistens mit

01:08:09.420 --> 01:08:10.200
Vue.js

01:08:10.200 --> 01:08:13.560
und historisch auch noch

01:08:13.560 --> 01:08:14.680
häufiger mit Asshiny.

01:08:14.680 --> 01:08:17.640
Aber das geht natürlich

01:08:17.640 --> 01:08:19.500
weg. Da haben wir ein Projekt, das ist eigentlich ganz

01:08:19.500 --> 01:08:21.520
cool, da haben wir, da geht's

01:08:21.520 --> 01:08:23.540
gar nicht darum, irgendwelche Prognosen zur Verfügung zu stellen,

01:08:23.540 --> 01:08:23.800
sondern

01:08:23.800 --> 01:08:25.580
da haben wir ja Shiny-Apps gebaut,

01:08:25.580 --> 01:08:27.580
damit Leute Modellierungsalgorithmen

01:08:27.580 --> 01:08:29.760
anwenden können, ohne dass sie

01:08:29.760 --> 01:08:31.720
selbst R-Code schreiben können müssen,

01:08:31.720 --> 01:08:33.780
weil das ist für ganz viele Forschende, die

01:08:33.780 --> 01:08:35.800
aber nicht gut selbst coden können

01:08:35.800 --> 01:08:37.660
und dann wäre die Hürde natürlich total riesig.

01:08:37.660 --> 01:08:39.820
Aber die brauchen eigentlich diese ziemlich komplexen

01:08:39.820 --> 01:08:41.440
Methoden und deswegen haben wir da

01:08:41.440 --> 01:08:43.760
für ein Forschungsinstitut einige Apps gebaut,

01:08:43.760 --> 01:08:46.220
wo die dann eben über eine Klick-Oberfläche

01:08:46.220 --> 01:08:47.660
können sie ihre Daten hochladen

01:08:47.660 --> 01:08:49.960
und können dann die Analyse fahren mit bestimmten Einstellungen

01:08:49.960 --> 01:08:51.700
und kriegen dann Ergebnisse und Visualisierungen.

01:08:51.700 --> 01:08:53.540
Das ist natürlich auch sehr praktisch.

01:08:53.760 --> 01:08:55.820
Ja, und schreiben die dann mit ihre Doktorarbeiten.

01:08:55.820 --> 01:08:57.180
Ja.

01:08:57.180 --> 01:08:58.960
Ja, aber zurück

01:08:58.960 --> 01:09:01.980
zu unseren Prognoseergebnissen.

01:09:01.980 --> 01:09:03.720
Genau, oft stellen

01:09:03.720 --> 01:09:05.640
wir die über eine API zur Verfügung oder wir

01:09:05.640 --> 01:09:07.480
schreiben sie irgendwo in eine Datenbank und der Kunde

01:09:07.480 --> 01:09:09.640
nutzt sie dann halt so. Das ist tatsächlich ja auch

01:09:09.640 --> 01:09:11.260
was, was man vorher wirklich klären muss.

01:09:11.260 --> 01:09:13.440
Reicht das denen, wenn das eine API ist oder

01:09:13.440 --> 01:09:15.660
sitzen da dann Leute, die damit

01:09:15.660 --> 01:09:17.520
überhaupt nichts anfangen können und sagen, ja, was sind denn jetzt meine

01:09:17.520 --> 01:09:19.260
Zahlen? Also,

01:09:19.260 --> 01:09:21.520
genau, das muss man natürlich auch

01:09:21.520 --> 01:09:22.880
vorher wirklich bis zum Ende denken.

01:09:23.720 --> 01:09:25.680
Und unsere Erfahrung ist auch, dass

01:09:25.680 --> 01:09:27.100
es, auch wenn

01:09:27.100 --> 01:09:29.440
der Kunde dann irgendwie vorhat, doch

01:09:29.440 --> 01:09:31.700
das selbst zu machen, sagt, ja, schreib das in die

01:09:31.700 --> 01:09:33.440
Datenbank und dann benutzen wir es

01:09:33.440 --> 01:09:35.720
einfach so weiter, dann trotzdem

01:09:35.720 --> 01:09:37.640
lohnt es sich oft, dass wir das dann

01:09:37.640 --> 01:09:39.860
doch mitdenken und zumindest irgendwie eine kleine Web-Anwendung

01:09:39.860 --> 01:09:41.680
schreiben, weil sonst die Löhne doch

01:09:41.680 --> 01:09:43.600
groß ist und dann hat der in IT halt eben auch

01:09:43.600 --> 01:09:45.840
total viel zu tun und dann ist es richtig schade,

01:09:45.840 --> 01:09:47.800
wenn das Projekt nachher in der Schublade landet

01:09:47.800 --> 01:09:49.680
und fällt dann ja am Ende irgendwie

01:09:49.680 --> 01:09:51.560
auch auf uns zurück. Also dann lieber

01:09:51.560 --> 01:09:53.680
nochmal was Kleines bauen, damit die

01:09:53.680 --> 01:09:54.740
dann doch was sehen können.

01:09:54.740 --> 01:09:57.380
Aber wenn die Farben dann auch richtig sind,

01:09:57.380 --> 01:09:58.460
das ist das Wichtigste an Flickrücken.

01:09:58.460 --> 01:10:01.500
Ja, das kann man auch durch

01:10:01.500 --> 01:10:03.280
unterschätzen. Man sieht ja alles, ja,

01:10:03.280 --> 01:10:04.260
das ist sau hässlich.

01:10:04.260 --> 01:10:08.840
Und

01:10:08.840 --> 01:10:11.620
ja, üblicherweise, das hat man eben

01:10:11.620 --> 01:10:13.420
schon gesagt, ein Modell muss man natürlich regelmäßig neu

01:10:13.420 --> 01:10:15.340
trainieren, weil sich Zusammenhänge in der Regel

01:10:15.340 --> 01:10:17.560
in allen Bereichen immer

01:10:17.560 --> 01:10:19.620
mal wieder ändern. Das ist dann oft so was

01:10:19.620 --> 01:10:21.760
wie einmal im Monat. Ab und zu

01:10:21.760 --> 01:10:23.640
sollte man sich das Modell sogar auch nochmal ganz genau

01:10:23.640 --> 01:10:25.100
anschauen, zum Beispiel nochmal diese ganzen

01:10:25.100 --> 01:10:27.260
CHAP-Sorten berechnen und gucken, ist das eigentlich noch

01:10:27.260 --> 01:10:29.500
plausibel? Das kann man vielleicht

01:10:29.500 --> 01:10:31.700
einmal im Jahr machen und

01:10:31.700 --> 01:10:33.620
die Prognoseerstellung

01:10:33.620 --> 01:10:35.380
kommt halt darauf an, wie oft die benötigt wird und

01:10:35.380 --> 01:10:37.440
wie schnell sich die Sachen ändern. Also in vielen Projekten

01:10:37.440 --> 01:10:39.200
ist es, dass es einmal am Tag passiert, aber

01:10:39.200 --> 01:10:41.180
manchmal ist es dann auch wirklich in Echtzeit, dass dann der

01:10:41.180 --> 01:10:43.680
Anfall reinkommt und dann wird die Prognose

01:10:43.680 --> 01:10:45.500
für diesen einen ganz

01:10:45.500 --> 01:10:47.460
konkreten Fall erstellt und oft kann man

01:10:47.460 --> 01:10:49.220
die auch noch nicht vorbereiten, weil man die Daten vielleicht dann

01:10:49.220 --> 01:10:51.260
nicht hat, sondern kommen dann rein die Daten

01:10:51.260 --> 01:10:53.400
und dann braucht man eine Prognose. Zum Beispiel kommt

01:10:53.400 --> 01:10:55.320
ein neuer Kauf rein oder eine

01:10:55.320 --> 01:10:56.780
Anfrage und man muss in dem Moment

01:10:56.780 --> 01:10:58.960
entscheiden, ist das irgendwie

01:10:58.960 --> 01:11:01.400
verdächtig? Könnte das Betrug

01:11:01.400 --> 01:11:02.480
sein oder ist alles okay?

01:11:02.480 --> 01:11:05.100
Und

01:11:05.100 --> 01:11:07.160
man sollte das natürlich auch überhaupt nicht

01:11:07.160 --> 01:11:09.180
unterschätzen, weil vom POC

01:11:09.180 --> 01:11:11.260
zum MBP und das ist dann ja noch

01:11:11.260 --> 01:11:13.360
ein simples Produkt, das ist oft nochmal Faktor

01:11:13.360 --> 01:11:15.300
10 vom Aufwand her. Ich glaube, das ist

01:11:15.300 --> 01:11:17.400
halt total schwer, vor allem wenn man am Anfang

01:11:17.400 --> 01:11:19.300
so ein bisschen geprototypt hat oder vielleicht mit

01:11:19.300 --> 01:11:20.900
kleineren Daten gearbeitet hat und dann

01:11:20.900 --> 01:11:23.160
muss man auf einmal vermitteln, ja jetzt brauchen wir

01:11:23.160 --> 01:11:25.080
aber nochmal ganz viel Zeit und ich denke so, hey

01:11:25.080 --> 01:11:27.360
ihr habt uns doch gerade die Ergebnisse gezeigt, die sind doch da.

01:11:27.360 --> 01:11:28.700
Und

01:11:28.700 --> 01:11:31.000
ja klar, das ist natürlich auch schwer

01:11:31.000 --> 01:11:32.960
nachvollziehbar von außen, deswegen ist es einfach

01:11:32.960 --> 01:11:34.920
wichtig, das richtig zu kommunizieren.

01:11:34.920 --> 01:11:36.920
Ja, ich wollte gerade sagen, schwer zu kommunizieren, das ist, finde ich, auch

01:11:36.920 --> 01:11:38.680
ein Hauptproblem, gerade bei so Kunden

01:11:38.680 --> 01:11:40.320
und Technologie.

01:11:40.320 --> 01:11:43.100
Ich meine, kann man ja verstehen,

01:11:43.100 --> 01:11:45.160
dass jemand sich dann ein bisschen an der Nase rumgeführt

01:11:45.160 --> 01:11:47.020
fühlt oder einfach schlecht informiert

01:11:47.020 --> 01:11:47.360
fühlt.

01:11:47.360 --> 01:11:50.760
Ja, schwierig.

01:11:50.760 --> 01:11:52.640
Ja.

01:11:52.920 --> 01:11:54.580
Ja, und

01:11:54.580 --> 01:11:56.720
dann gibt es natürlich

01:11:56.720 --> 01:11:58.380
auch immer noch den Bereich

01:11:58.380 --> 01:12:00.580
Monitoring und Wartung, also das, wo wir

01:12:00.580 --> 01:12:02.460
jetzt auch gerade in dem Projekt mit der Senatsverwaltung

01:12:02.460 --> 01:12:04.000
drinstecken, seit

01:12:04.000 --> 01:12:06.280
schon einigen Monaten, da

01:12:06.280 --> 01:12:08.700
haben wir natürlich Alerts,

01:12:08.700 --> 01:12:10.500
wenn irgendwo ein Prozess abbricht, wenn es irgendwo

01:12:10.500 --> 01:12:12.480
einen Fehler in einem Pod gibt, dann

01:12:12.480 --> 01:12:13.640
müssen wir das natürlich wissen,

01:12:13.640 --> 01:12:16.700
aber es kann auch sein, dass die durchlaufen

01:12:16.700 --> 01:12:18.560
ohne Fehler, aber trotzdem irgendwas

01:12:18.560 --> 01:12:20.400
stimmt und vielleicht nur für

01:12:20.400 --> 01:12:22.680
Halb-Berlin-Prognosen erstellt werden

01:12:22.680 --> 01:12:24.340
oder nur für einen halben Tag und deswegen

01:12:24.340 --> 01:12:26.460
sind dann da auch Alarme definiert,

01:12:26.460 --> 01:12:28.160
die gucken, ist die Anzahl,

01:12:28.160 --> 01:12:30.320
entspricht die Anzahl der Prognosen in der Datenbank

01:12:30.320 --> 01:12:31.740
auch tatsächlich unserer Erwartung?

01:12:31.740 --> 01:12:34.280
Man kann auch definieren, gibt es irgendwelche

01:12:34.280 --> 01:12:36.660
unerwarteten Werte, extrem hohe Prognosen

01:12:36.660 --> 01:12:38.300
beispielsweise oder gibt es

01:12:38.300 --> 01:12:40.180
unerwartete Werte in den Input-Daten,

01:12:40.180 --> 01:12:42.520
Werte, die vielleicht überhaupt nicht definiert

01:12:42.520 --> 01:12:43.940
sind und dann

01:12:43.940 --> 01:12:45.760
auch wichtig ist der

01:12:45.760 --> 01:12:48.260
Model-Drift oder Data-Drift,

01:12:48.260 --> 01:12:49.500
das heißt, dass die Daten

01:12:49.500 --> 01:12:52.560
so nach und nach irgendwie in eine andere Richtung

01:12:52.560 --> 01:12:54.000
driften und sich verändern

01:12:54.000 --> 01:12:56.180
oder das Modell so nach

01:12:56.180 --> 01:12:58.180
und nach immer so ein bisschen schlechter wird,

01:12:58.180 --> 01:13:00.140
aber irgendwann, wenn es das lange genug

01:13:00.140 --> 01:13:02.280
gemacht hat, dann ist es halt irgendwann nicht mehr gut genug

01:13:02.280 --> 01:13:04.180
und dann möchte man das ja auch mitbekommen

01:13:04.180 --> 01:13:06.320
und zum Beispiel bei jedem monatlichen Modell-Neutraining

01:13:06.320 --> 01:13:07.640
will man auch mal die ganzen

01:13:07.640 --> 01:13:10.300
KPIs, also die ganzen Gütemaße sehen

01:13:10.300 --> 01:13:12.420
oder vielleicht will man

01:13:12.420 --> 01:13:14.240
sie nicht angucken, sondern möchte halt einfach informiert

01:13:14.240 --> 01:13:16.400
werden, ob die sich nach einer Weile

01:13:16.400 --> 01:13:18.180
vielleicht zu stark verschlechtert haben und dann muss man

01:13:18.180 --> 01:13:19.540
sich einfach nochmal angucken, was los ist.

01:13:19.540 --> 01:13:22.400
Was halt eben auch nochmal zeigt, das ist halt nicht ganz fertig

01:13:22.400 --> 01:13:24.000
und dann kann man es für immer benutzen, aber gut, das

01:13:24.000 --> 01:13:26.340
ist ja auch in der klassischen Softwareentwicklung oft so,

01:13:26.340 --> 01:13:28.140
dass das

01:13:28.140 --> 01:13:30.100
so ein bisschen unterschätzt wird, wie viel dann doch noch gemacht

01:13:30.100 --> 01:13:31.420
werden muss, obwohl es doch fertig ist.

01:13:31.420 --> 01:13:34.120
Macht ihr denn eigene Monitoring-Tools oder nutzt ihr

01:13:34.120 --> 01:13:35.700
ja auch eins von den Sachen, die es da so gibt?

01:13:35.700 --> 01:13:38.340
Ja, also Reader benutzen

01:13:38.340 --> 01:13:40.220
wir in einem Projekt ja ganz

01:13:40.220 --> 01:13:41.800
gerne und sonst

01:13:41.800 --> 01:13:44.280
ja, wie das, was ich gerade

01:13:44.280 --> 01:13:46.360
dann anbiete, ich überlege

01:13:46.360 --> 01:13:47.920
gerade, was wir sonst noch so haben,

01:13:47.920 --> 01:13:49.620
ja, es gibt ja normalerweise

01:13:49.620 --> 01:13:51.880
dann Tools, die man da benutzen kann

01:13:51.880 --> 01:13:52.240
und

01:13:52.240 --> 01:13:53.900
die man dann zum Beispiel auch an Slack

01:13:53.900 --> 01:13:55.340
anschließen kann und kriegt dann da

01:13:55.340 --> 01:13:58.200
Nachrichten, weil weiß ich gerade gar nicht

01:13:58.200 --> 01:14:00.240
so genau, was die in anderen Projekten

01:14:00.240 --> 01:14:01.860
benutzen. Doch, doch, es gibt ganz viele.

01:14:01.860 --> 01:14:04.320
Ich versuche gerade meinen Discord anzubinden.

01:14:04.320 --> 01:14:06.040
Ah, okay, also was

01:14:06.040 --> 01:14:08.040
ich empfehlen kann für so Monitoring-Geschichten

01:14:08.040 --> 01:14:10.080
ist Telegram, weil das

01:14:10.080 --> 01:14:12.240
halt sehr einfach ist, da irgendwie

01:14:12.240 --> 01:14:13.420
über die API

01:14:13.420 --> 01:14:16.040
Dinge zu verschicken. Ja, also Telegram kriege ich auch Nachrichten

01:14:16.040 --> 01:14:17.940
für meine Server, falls da irgendwas passiert,

01:14:17.940 --> 01:14:18.480
was ich will, ja.

01:14:18.480 --> 01:14:20.260
Ja, cool.

01:14:20.260 --> 01:14:21.560
Gut zu wissen.

01:14:22.240 --> 01:14:24.240
Ja, das ist ja auch nochmal so ein spannendes

01:14:24.240 --> 01:14:26.380
Thema, weg von US-Diensten

01:14:26.380 --> 01:14:28.160
und so. Ja, wahrscheinlich

01:14:28.160 --> 01:14:29.280
genau, das ist natürlich

01:14:29.280 --> 01:14:32.160
wenn Telegram irgendwie an der richtigen

01:14:32.160 --> 01:14:32.720
Adresse ist.

01:14:32.720 --> 01:14:35.160
Man soll ja streuen.

01:14:35.160 --> 01:14:36.720
Ja, ja, genau.

01:14:36.720 --> 01:14:39.980
Ja, wir nehmen meistens immer so eigene

01:14:39.980 --> 01:14:42.080
Server oder sowas, aber wenn die halt dann wechseln, ist halt auch blöd,

01:14:42.080 --> 01:14:43.000
dann merkt man es halt sonst nicht.

01:14:43.000 --> 01:14:46.160
Ja, dann musst du halt irgendwo anders noch Dinge haben.

01:14:46.160 --> 01:14:47.420
Ja, man braucht irgendwie so ein Referent, ja.

01:14:47.420 --> 01:14:49.700
Ja, aber ja, klar, es wird dann auch teuer.

01:14:49.700 --> 01:14:52.000
Monitoring ist ja zu ruhig, was passiert denn da jetzt?

01:14:52.240 --> 01:14:52.360
Ja, genau.

01:14:52.360 --> 01:14:55.580
Endlich sind alle Bugs weg.

01:14:55.580 --> 01:14:56.020
Ja.

01:14:56.020 --> 01:14:57.320
Eigentlich ist alles gut.

01:14:57.320 --> 01:15:00.260
Hat jemand den Nähenzuhörer mit in die Tasche gesteckt

01:15:00.260 --> 01:15:00.820
und drunter gemacht?

01:15:00.820 --> 01:15:02.680
Ja.

01:15:02.680 --> 01:15:06.080
Ja, also noch ein ganz wichtiges Stichwort

01:15:06.080 --> 01:15:07.920
in dem Bereich ist natürlich MLOps,

01:15:07.920 --> 01:15:10.040
also Machine Learning Operations, also

01:15:10.040 --> 01:15:12.000
Mischung aus DevOps und Machine Learning

01:15:12.000 --> 01:15:12.840
ist das Wort.

01:15:12.840 --> 01:15:15.520
Der Kurzvortritt ist ja Rathops, oder?

01:15:15.520 --> 01:15:17.140
Ja, genau.

01:15:17.140 --> 01:15:21.680
Und

01:15:21.680 --> 01:15:22.080
ja,

01:15:22.240 --> 01:15:23.620
ja, es ist ja im Prinzip

01:15:23.620 --> 01:15:26.080
DevOps, aber Anpassung auf diesen,

01:15:26.080 --> 01:15:28.720
auf den Datenkäse, auf die Arbeit mit Daten.

01:15:28.720 --> 01:15:30.340
Das heißt, es kommen noch so ein paar Sachen

01:15:30.340 --> 01:15:32.100
dazu, wie zum Beispiel, dass man nicht nur

01:15:32.100 --> 01:15:34.140
Code versionieren muss, sondern auch

01:15:34.140 --> 01:15:36.480
Modelle oder vielleicht Experimente

01:15:36.480 --> 01:15:37.280
versionieren.

01:15:37.280 --> 01:15:40.380
Und ja, es gibt halt nicht nur

01:15:40.380 --> 01:15:42.240
Code-Änderungen, die dazu führen, dass die

01:15:42.240 --> 01:15:44.060
Ergebnisse anders sind, sondern auch jeder

01:15:44.060 --> 01:15:45.460
neue Datenpunkt kann

01:15:45.460 --> 01:15:47.980
die Ergebnisse verändern.

01:15:47.980 --> 01:15:49.460
Das heißt, da kommt dann nochmal so eine

01:15:49.460 --> 01:15:52.060
Zusätzlich-Komplexitätsebene mit rein.

01:15:52.980 --> 01:15:54.320
Ja, das

01:15:54.320 --> 01:15:55.980
ist auch, also

01:15:55.980 --> 01:15:56.980
auch eine ganz wichtige Geschichte.

01:15:56.980 --> 01:15:59.540
Also ich finde das immer dann schwierig, wenn das halt so

01:15:59.540 --> 01:16:02.040
verteilte Systeme sind, die gleichzeitig irgendwie rechnen

01:16:02.040 --> 01:16:03.820
und dann die Sachen wieder zusammenführen müssen.

01:16:03.820 --> 01:16:05.940
Da steige ich auch nicht so genau

01:16:05.940 --> 01:16:08.120
durch, wie man das ordentlich machen will.

01:16:08.120 --> 01:16:09.820
Aber wenn das so

01:16:09.820 --> 01:16:11.800
distributed ist, was halt beim Machine Learning

01:16:11.800 --> 01:16:12.760
auch mal passieren kann, ja?

01:16:12.760 --> 01:16:15.480
Ja, also würde ich jetzt, also aus meiner Erfahrung,

01:16:15.480 --> 01:16:17.360
also bei mir ist das eigentlich,

01:16:17.360 --> 01:16:19.620
also das letzte Mal, dass

01:16:19.620 --> 01:16:21.640
ich den Fall hatte, dass

01:16:21.640 --> 01:16:24.060
wir irgendwie sowas verteilen

01:16:24.060 --> 01:16:25.580
mussten, dann war das wegen, weil

01:16:25.580 --> 01:16:27.820
die Maschinen 32 Bit waren und

01:16:27.820 --> 01:16:29.880
nicht mehr als 4 Gigabyte, wie man auf eine

01:16:29.880 --> 01:16:31.740
Maschine kriegte, und dann brauchte man

01:16:31.740 --> 01:16:33.660
mehrere Maschinen, aber danach ist das

01:16:33.660 --> 01:16:35.820
eigentlich, ehrlich gesagt, also mir nicht mehr passiert,

01:16:35.820 --> 01:16:37.680
weil... Du hast halt einfach viel zu kleine

01:16:37.680 --> 01:16:39.640
Adventures. Meine Daten sind zu klein, das kann schon sein,

01:16:39.640 --> 01:16:41.720
ja, aber ich meine,

01:16:41.720 --> 01:16:44.140
man kriegt heute so große Maschinen, also...

01:16:44.140 --> 01:16:45.800
Ja, über die Preise haben wir uns

01:16:45.800 --> 01:16:46.600
ja gerade unterhalten, ja.

01:16:46.600 --> 01:16:49.020
Ja, ja, aber wenn man CPU,

01:16:49.020 --> 01:16:51.260
die meisten Sachen brauchen wir mal eher CPU,

01:16:51.260 --> 01:16:53.040
dann das ist nicht so toll.

01:16:53.040 --> 01:16:55.180
Okay. Aber wenn

01:16:55.180 --> 01:16:57.380
du dann so eine ganz große Maschine hast und die ist teuer

01:16:57.380 --> 01:16:59.120
und dann kannst du den Code so optimieren, dass

01:16:59.120 --> 01:17:00.820
es viel, viel billiger wird, dann

01:17:00.820 --> 01:17:02.900
ist das doch auch ein tolles Erfolg.

01:17:02.900 --> 01:17:04.480
Ja.

01:17:04.480 --> 01:17:07.360
Ja, wo wir

01:17:07.360 --> 01:17:09.120
gerade schon mal optimieren sind, wie ist

01:17:09.120 --> 01:17:11.000
das denn mit Performance zum Beispiel? Ich glaube, das ist

01:17:11.000 --> 01:17:12.720
noch was gewesen, wo wir sprechen wollten.

01:17:12.720 --> 01:17:15.080
Ja, also da könnte man natürlich auch eine

01:17:15.080 --> 01:17:17.120
ganz separate Folge dazu machen, aber grundsätzlich

01:17:17.120 --> 01:17:18.920
ist das auch natürlich ein

01:17:18.920 --> 01:17:20.800
spannendes Thema. Also was

01:17:20.800 --> 01:17:23.100
mir da immer mal

01:17:23.100 --> 01:17:24.960
wieder auffällt, das ist das,

01:17:24.980 --> 01:17:26.280
was manchmal,

01:17:26.280 --> 01:17:28.520
ja, wenn man eben die

01:17:28.520 --> 01:17:30.740
Funktionen nicht kennt, die eigentlich

01:17:30.740 --> 01:17:32.720
dafür da sind, mit Datensätzen zu arbeiten, dann

01:17:32.720 --> 01:17:35.120
kann es etwas unperformant

01:17:35.120 --> 01:17:36.620
werden, weil man zum Beispiel über den ganzen

01:17:36.620 --> 01:17:38.720
Datensatz loopt, obwohl man Sachen auf die

01:17:38.720 --> 01:17:40.540
ganze Spalte anwenden könnte. Und die sind dann in

01:17:40.540 --> 01:17:42.040
NumPy und sind halt total optimiert.

01:17:42.040 --> 01:17:44.900
Und

01:17:44.900 --> 01:17:46.720
da gibt es eine Menge Sachen.

01:17:46.720 --> 01:17:48.620
Also natürlich, ich glaube,

01:17:48.620 --> 01:17:50.740
treffen alle

01:17:50.740 --> 01:17:52.960
Sachen zu, die generell auf Softwareentwicklung zutreffen.

01:17:52.960 --> 01:17:54.820
Die treffen natürlich auch bei Daten zu und dann

01:17:54.820 --> 01:17:56.720
kommen noch ein paar Sachen dazu. Also zum

01:17:56.720 --> 01:17:58.820
Beispiel Umgang mit großen Datensätzen.

01:17:58.820 --> 01:18:00.780
Da hat man eben schon mal

01:18:00.780 --> 01:18:02.840
angeschnitten, dass das natürlich Spark gibt,

01:18:02.840 --> 01:18:04.720
aber es auch nicht unbedingt total schnell immer

01:18:04.720 --> 01:18:06.780
ist. Und manchmal ist es

01:18:06.780 --> 01:18:08.640
aber auch echt ausreichend, auf einem Sample zu

01:18:08.640 --> 01:18:10.840
arbeiten, weil wenn ich eh schon

01:18:10.840 --> 01:18:12.640
Millionen von Zeilen habe, dann werden die

01:18:12.640 --> 01:18:14.620
weiteren zehn Millionen von Zeilen meistens auch

01:18:14.620 --> 01:18:16.720
nur so viel zusätzliche Information

01:18:16.720 --> 01:18:18.660
liefern. Und dann kann ich mein

01:18:18.660 --> 01:18:20.600
Modell auch auf einem Sample trainieren. Ich kann ja

01:18:20.600 --> 01:18:22.700
immer mal noch das checken, ob es

01:18:22.700 --> 01:18:24.100
wirklich nicht immer viel besser wird.

01:18:24.620 --> 01:18:25.960
Das ist so

01:18:25.960 --> 01:18:28.260
sowas, was man

01:18:28.260 --> 01:18:29.700
im Blick haben sollte.

01:18:29.700 --> 01:18:32.440
Ich gucke mal gerade noch. Ich hätte da mal

01:18:32.440 --> 01:18:33.840
so eine Liste.

01:18:33.840 --> 01:18:36.580
Ja,

01:18:36.580 --> 01:18:38.460
Polar ist eben auch schneller

01:18:38.460 --> 01:18:40.300
als Pandas. Es gab auch vorher noch

01:18:40.300 --> 01:18:42.400
ein, also es gibt auch immer noch

01:18:42.400 --> 01:18:44.700
das Paket Data Table,

01:18:44.700 --> 01:18:46.460
aber ich glaube, dass es einfach gar nicht mehr so

01:18:46.460 --> 01:18:48.040
interessant ist, wo es Polar gibt.

01:18:48.040 --> 01:18:50.460
Und dann, ja,

01:18:50.460 --> 01:18:52.560
bei Datenbanken ist es auch manchmal ganz

01:18:52.560 --> 01:18:53.980
interessant, weil die,

01:18:54.460 --> 01:18:56.480
die sind oft eher darauf optimiert,

01:18:56.480 --> 01:18:58.260
dass man eine kleine Menge von Daten abruft

01:18:58.260 --> 01:19:00.200
oder hinschreibt. Und wenn man dann auf einmal mehrere

01:19:00.200 --> 01:19:02.420
Millionen Zeilen hat, dann werden die so Stück für Stück

01:19:02.420 --> 01:19:04.240
abgerufen und hingeschrieben,

01:19:04.240 --> 01:19:06.300
wie man den welchen Treiber man nutzt. Und da gibt es dann

01:19:06.300 --> 01:19:08.300
auch Hacks, wie

01:19:08.300 --> 01:19:09.720
zum Beispiel, dass man es erst in

01:19:09.720 --> 01:19:12.280
ein Paket-File oder ein CSV

01:19:12.280 --> 01:19:13.760
schreibt und dann das

01:19:13.760 --> 01:19:15.760
im Batch hochlädt.

01:19:15.760 --> 01:19:18.100
Das wird jetzt schon ziemlich

01:19:18.100 --> 01:19:19.900
detailliert. Ja, mit dem Paket-File, da wollten wir

01:19:19.900 --> 01:19:22.220
noch ein bisschen drüber reden, wie man das machen

01:19:22.220 --> 01:19:23.680
kann und auch aktivieren kann.

01:19:24.260 --> 01:19:26.080
Ja, aber genau, wenn wir bei Performance sind,

01:19:26.080 --> 01:19:28.020
so ein ganz generelles Ding, was ich häufig sehe,

01:19:28.020 --> 01:19:30.060
also gerade auch im Zusammenhang mit irgendwie

01:19:30.060 --> 01:19:32.080
Dinge verteilen oder so, was

01:19:32.080 --> 01:19:34.200
ich ganz oft sehe, ist, dass Leute halt grundsätzlich

01:19:34.200 --> 01:19:35.960
erstmal der Meinung sind, wenn man Dinge verteilt,

01:19:35.960 --> 01:19:37.520
dann wird es halt schneller. Und

01:19:37.520 --> 01:19:40.080
ist aber oft

01:19:40.080 --> 01:19:40.420
nicht so.

01:19:40.420 --> 01:19:44.080
Weil ganz oft ist halt CPU

01:19:44.080 --> 01:19:45.920
möglicherweise gar nicht das Bottleneck. Also wenn man,

01:19:45.920 --> 01:19:47.920
bevor man sowas macht, wie Dinge dann

01:19:47.920 --> 01:19:49.880
verteilen oder so, sollte man vielleicht mal gucken, wo ist denn eigentlich

01:19:49.880 --> 01:19:51.100
das Bottleneck? Und

01:19:51.100 --> 01:19:53.740
ich sehe das so oft,

01:19:54.060 --> 01:19:55.740
ich sehe das so oft, dass Leute sagen so, ja,

01:19:55.740 --> 01:19:57.860
das wird nicht schneller oder so. Und dann ist es halt

01:19:57.860 --> 01:19:59.240
I.O. Und dann

01:19:59.240 --> 01:20:01.800
ist es halt so, dass

01:20:01.800 --> 01:20:04.060
verteilen macht das alles noch schlimmer, weil

01:20:04.060 --> 01:20:06.040
irgendwie Netzwerk

01:20:06.040 --> 01:20:07.780
ist halt noch viel langsamer als irgendwie

01:20:07.780 --> 01:20:09.180
quasi lokale SSDs.

01:20:09.180 --> 01:20:11.720
Und wenn man halt

01:20:11.720 --> 01:20:13.660
die Daten in der richtigen Reihenfolge lädt,

01:20:13.660 --> 01:20:15.800
sozusagen, und nicht zufällig

01:20:15.800 --> 01:20:17.700
die ganze Zeit, wenn man sehr große Datenmengen

01:20:17.700 --> 01:20:19.480
hat, also so groß, dass sie nicht in den Hauptschleifer passen,

01:20:19.480 --> 01:20:21.020
wenn die dann sozusagen richtig,

01:20:21.020 --> 01:20:22.820
also sich jedes,

01:20:23.860 --> 01:20:25.960
alle Daten immer nur einmal anguckt, dann kann es sein,

01:20:25.960 --> 01:20:27.940
dass es super schnell ist. Während wenn man halt

01:20:27.940 --> 01:20:29.920
zufällig auf dem, auf dem, auf einem

01:20:29.920 --> 01:20:31.800
großen Paket-File beispielsweise

01:20:31.800 --> 01:20:33.880
dann irgendwie immer ein Stückchen hier liest, ein Stückchen

01:20:33.880 --> 01:20:34.340
da liest,

01:20:34.340 --> 01:20:37.320
die ganze Zeit random irgendwie

01:20:37.320 --> 01:20:39.420
zwei Gigabyte I.O. macht, dann

01:20:39.420 --> 01:20:41.920
ist das alles total langsam und sieht so aus,

01:20:41.920 --> 01:20:43.460
als ob es nicht schneller gehen würde.

01:20:43.460 --> 01:20:45.400
Und tatsächlich

01:20:45.400 --> 01:20:47.600
ist es aber, ist es aber

01:20:47.600 --> 01:20:49.740
eine ganz einfache Optimierung, die dazu

01:20:49.740 --> 01:20:50.480
führt, dass es halt,

01:20:50.480 --> 01:20:53.660
dass es halt schnell genug ist. Also ich würde mal sagen,

01:20:53.660 --> 01:20:55.480
wenn man, wenn man, wenn man so ein MacBook nimmt

01:20:55.480 --> 01:20:57.600
und das richtig benutzt, ist es sehr schwer,

01:20:57.600 --> 01:20:59.520
das mit einem Cluster zu schlagen. Wirklich, sehr schwer.

01:20:59.520 --> 01:21:01.740
Also, und das ist glaube ich

01:21:01.740 --> 01:21:03.560
auch vielen Leuten nicht so bewusst. Also

01:21:03.560 --> 01:21:05.660
das ist halt oft, wird da mit Kanonen

01:21:05.660 --> 01:21:07.660
auf Spatzen geschossen. Und

01:21:07.660 --> 01:21:09.600
das eigentliche Problem gar nicht, wird

01:21:09.600 --> 01:21:11.300
gar nicht erkannt, sondern, ja.

01:21:11.300 --> 01:21:13.620
Jetzt wollte ich gerade mit IBIS anfangen, was ja auch

01:21:13.620 --> 01:21:15.760
so ein bisschen größer ist als ein Spatz, aber

01:21:15.760 --> 01:21:17.640
Ja, aber gut,

01:21:17.640 --> 01:21:18.680
das ist ja sozusagen,

01:21:18.680 --> 01:21:21.680
dass man halt quasi ein DataFrame-Interface

01:21:21.680 --> 01:21:23.460
hat für irgendwie

01:21:23.460 --> 01:21:25.440
Sachen, die hintendran SQL sprechen, oder?

01:21:25.440 --> 01:21:27.420
Ja, oder zum Beispiel verteilte Datenbanken

01:21:27.420 --> 01:21:28.780
oder sowas, ja. Ja.

01:21:28.780 --> 01:21:31.280
Äh, genau.

01:21:31.280 --> 01:21:33.500
Also, aber genau,

01:21:33.500 --> 01:21:35.520
also oft, oft ist es dann halt

01:21:35.520 --> 01:21:37.020
so, wenn man dann halt irgendwie

01:21:37.020 --> 01:21:39.360
irgendwas benutzt, was halt SQL spricht,

01:21:39.360 --> 01:21:41.260
aber hintendran total verteilt ist,

01:21:41.260 --> 01:21:43.220
dass das dann halt sehr langsam ist

01:21:43.220 --> 01:21:45.300
und Leute nicht wissen, warum das langsam ist

01:21:45.300 --> 01:21:47.160
und sich dann irgendwie dran gewöhnen und dann halt,

01:21:47.160 --> 01:21:49.160
wenn sie ihre Jobs losschicken, halt dann

01:21:49.160 --> 01:21:50.560
Mittagessen gehen oder so, aber

01:21:50.560 --> 01:21:53.260
und wenn sie sich vor die Daten irgendwie, äh,

01:21:53.260 --> 01:21:55.480
halt geholt hätten und hätten das auf dem Laptop

01:21:55.480 --> 01:21:56.840
in Pandas gemacht oder sowas, wäre es viel schneller gewesen.

01:21:56.840 --> 01:21:59.420
Naja, so, solche Sachen, äh,

01:21:59.420 --> 01:22:01.160
ja. Aber IBIS,

01:22:01.160 --> 01:22:03.240
ja, es ist grad, ähm,

01:22:03.240 --> 01:22:04.420
benutzt ihr das?

01:22:04.420 --> 01:22:06.640
Nee, hab ich tatsächlich noch nie gehört.

01:22:06.640 --> 01:22:09.000
Okay. Das, ich glaube, das ist doch von dem...

01:22:09.000 --> 01:22:11.360
Was, was, was ich noch mal

01:22:11.360 --> 01:22:13.160
wiederholen will, ist einfach dieses, ja,

01:22:13.160 --> 01:22:15.240
guck dir erstmal an, was eigentlich gerade langsam ist,

01:22:15.240 --> 01:22:17.200
wo ist eigentlich dein Bottleneck, weil da sind ja

01:22:17.200 --> 01:22:19.380
manchmal die Annahmen einfach nicht richtig.

01:22:19.380 --> 01:22:21.460
Ja. Ich hab, das ist so witzig,

01:22:21.460 --> 01:22:23.060
dass du es sagst, ich hab gerade, ich glaube,

01:22:23.060 --> 01:22:24.640
letzte Woche hab ich

01:22:24.640 --> 01:22:27.160
gerade was parallelisiert und dadurch

01:22:27.160 --> 01:22:28.800
sehr, sehr, sehr, sehr, sehr viel schneller gemacht.

01:22:28.800 --> 01:22:31.140
Ja gut, das geht schon auch, ne? Das kann natürlich

01:22:31.140 --> 01:22:32.820
schon manchmal der Punkt sein, aber

01:22:32.820 --> 01:22:35.040
eben das Beispiel war ja eben gerade,

01:22:35.040 --> 01:22:37.180
dass es dann an der Kommunikation mit der Datenbank liegt

01:22:37.180 --> 01:22:39.360
und wenn man dann...

01:22:39.360 --> 01:22:41.080
Das ist, also eigentlich ist es trivial, dass man

01:22:41.080 --> 01:22:43.040
erstmal profilen muss und gucken muss, was langsam

01:22:43.040 --> 01:22:45.220
ist. Wenn man es mal gesagt hat, klingt's ja trivial,

01:22:45.220 --> 01:22:47.320
aber ich glaube, wenn man

01:22:47.320 --> 01:22:48.340
es zum ersten Mal macht, dann vergisst man es.

01:22:48.340 --> 01:22:50.680
Ich glaube auch, dass viele Leute halt nicht so bewusst sind.

01:22:50.680 --> 01:22:52.860
Die profilen dann vielleicht auch und sehen dann vielleicht sogar

01:22:52.860 --> 01:22:54.640
noch irgendwie, wo Zeit verloren

01:22:54.640 --> 01:22:56.820
geht, aber gucken

01:22:56.820 --> 01:22:58.640
halt nicht auf sowas, wie ist denn jetzt

01:22:58.640 --> 01:23:00.300
eigentlich, wenn ich jetzt einfach mal

01:23:00.300 --> 01:23:02.700
ein paar CPUs nehme, krieg ich

01:23:02.700 --> 01:23:04.620
dann tatsächlich, wird's schneller oder nicht? Wenn's

01:23:04.620 --> 01:23:06.580
nicht schneller wird, okay, gibt's vielleicht irgendeine andere

01:23:06.580 --> 01:23:08.340
Komponente im System, die halt

01:23:08.340 --> 01:23:10.240
irgendwie, die halt dicht ist

01:23:10.240 --> 01:23:12.740
und dass es halt da Unterschiede

01:23:12.740 --> 01:23:14.320
gibt, dass halt nicht alles CPU ist, das ist

01:23:14.320 --> 01:23:16.180
oft, hab ich das Gefühl, nicht so

01:23:16.180 --> 01:23:18.720
keine weit verbreitete sozusagen

01:23:18.720 --> 01:23:20.500
Erkenntnis und ja,

01:23:20.500 --> 01:23:22.660
aber ja, genau, das ist ganz wichtig, dass man das

01:23:22.660 --> 01:23:24.380
halt sich einfach so

01:23:24.380 --> 01:23:25.940
im Gesamtsystem mal anguckt, ja.

01:23:25.940 --> 01:23:28.480
Beim Modelltraining ist es dann tatsächlich

01:23:28.480 --> 01:23:30.340
schon oft sinnvoll

01:23:30.340 --> 01:23:32.520
zu parallelisieren, wenn das lang dauert

01:23:32.520 --> 01:23:34.560
und das ist aber dann auch in den

01:23:34.560 --> 01:23:36.460
meisten Paketen schon so eingebaut, dass

01:23:36.460 --> 01:23:38.460
man dann nur irgendwie die Anzahl der Kerne

01:23:38.460 --> 01:23:40.380
übergeben muss, die dieses nutzen soll und dann läuft

01:23:40.380 --> 01:23:42.420
das einfach, das ist ganz praktisch. Genau, aber ich

01:23:42.420 --> 01:23:44.440
weiß jetzt nicht, also das war jedenfalls, ich hab das ja auch schon

01:23:44.440 --> 01:23:46.420
lange nicht mehr gemacht, aber das war

01:23:46.420 --> 01:23:48.520
zu der Zeit, wo ich solche Sachen gemacht hab, war das

01:23:48.520 --> 01:23:50.240
halt schwer, das auf mehrere Rechner zu verteilen, also

01:23:50.240 --> 01:23:52.200
auf einem Rechner, ja, genau, mehrere Kerne, kein Problem.

01:23:52.460 --> 01:23:54.320
Aber auf mehrere Maschinen, X-Wing-Boost,

01:23:54.320 --> 01:23:56.520
ja, eher nicht.

01:23:56.520 --> 01:23:58.360
Ja, die Frage ist, wie

01:23:58.360 --> 01:24:00.400
sehr man das auch manuell machen

01:24:00.400 --> 01:24:01.800
muss, weil man ja meistens dann

01:24:01.800 --> 01:24:04.200
sich seinen Class-Data-Breaks oder so

01:24:04.200 --> 01:24:06.240
hochfährt und muss sich darüber gar keine Gedanken

01:24:06.240 --> 01:24:07.800
machen eigentlich. Ja.

01:24:07.800 --> 01:24:10.340
Also zumindest als Data-Scientist ist das

01:24:10.340 --> 01:24:11.900
nicht das, was man irgendwie

01:24:11.900 --> 01:24:13.720
das erwartet wird, dass

01:24:13.720 --> 01:24:16.600
dann da verschiedene Rechner zusammenfließt.

01:24:16.600 --> 01:24:17.820
Ja, ja.

01:24:17.820 --> 01:24:20.420
Und dann ist natürlich manchmal irgendwie

01:24:20.420 --> 01:24:22.260
schon so, dass man doch wieder auf

01:24:22.260 --> 01:24:23.520
andere Programmiersprachen

01:24:23.520 --> 01:24:26.260
ausweichen muss, weil Python

01:24:26.260 --> 01:24:28.060
und R nicht unbedingt dafür bekannt sind, dass

01:24:28.060 --> 01:24:29.220
sie total schnell sind.

01:24:29.220 --> 01:24:32.220
Aber ich glaube, also meiner Erfahrung

01:24:32.220 --> 01:24:34.120
nach ist es schon oft so, dass man schon sehr

01:24:34.120 --> 01:24:36.000
viel rausholen kann, wenn man sich den Python

01:24:36.000 --> 01:24:38.240
oder R-Code nochmal genau anschaut, profilt

01:24:38.240 --> 01:24:39.920
und dann vielleicht irgendwo

01:24:39.920 --> 01:24:41.900
auch mal die Daten

01:24:41.900 --> 01:24:43.580
vorher klug filtert oder

01:24:43.580 --> 01:24:46.000
ein sinnvolles If-Statement

01:24:46.000 --> 01:24:47.880
irgendwie so ein bisschen verschiebt, weil man auf einmal

01:24:47.880 --> 01:24:49.980
merkt, oh Moment, oder in einem Loop irgendwas

01:24:49.980 --> 01:24:51.840
rauszieht, was eigentlich nur einmal passieren muss,

01:24:52.060 --> 01:24:53.360
das sind ja so Sachen, die dann doch

01:24:53.360 --> 01:24:55.780
schnell passieren, wenn man den Code

01:24:55.780 --> 01:24:57.680
irgendwann so beschrieben und ein paar Mal verändert hat,

01:24:57.680 --> 01:25:00.080
dann ist da vielleicht irgendwas, was man

01:25:00.080 --> 01:25:01.860
also so eine Low-Hang-In-Food, was man

01:25:01.860 --> 01:25:03.200
schon leicht optimieren kann.

01:25:03.200 --> 01:25:05.140
Python könnte man ja auch noch schneller kriegen, wenn man will, ja.

01:25:05.140 --> 01:25:07.680
Ja, wobei, ich meine, das ist halt immer die Frage,

01:25:07.680 --> 01:25:09.880
wenn es halt schnell sein soll, dann nimmt man am besten

01:25:09.880 --> 01:25:10.580
was, was nicht halt,

01:25:10.580 --> 01:25:14.000
in Python sind halt, was halt langsam sind, halt Funktionsaufrufe,

01:25:14.000 --> 01:25:15.980
Schleifen, das ist halt extrem

01:25:15.980 --> 01:25:17.920
langsam, weil wenn man

01:25:17.920 --> 01:25:19.060
die Schleifen halt in NumPy,

01:25:19.060 --> 01:25:21.660
nicht als Schleife, sondern irgendwie vektorisiert,

01:25:21.860 --> 01:25:23.240
auf den Daten macht, dann ist es halt schnell.

01:25:23.240 --> 01:25:25.080
Und ob man das jetzt von Python aus aufruft oder nicht.

01:25:25.080 --> 01:25:27.580
Das ist dann auch dieses Stichwort, dass

01:25:27.580 --> 01:25:29.720
jemand, der das durch Mais eben über den Data-Frame

01:25:29.720 --> 01:25:31.440
drüber loopst, einfach so verweilt.

01:25:31.440 --> 01:25:32.040
Das ist dann schlecht, ja.

01:25:32.040 --> 01:25:35.820
Ja, aber

01:25:35.820 --> 01:25:37.460
deswegen ja genau, einfach dann eine Maske drauf

01:25:37.460 --> 01:25:39.320
und dann machst du es halt drunter

01:25:39.320 --> 01:25:39.880
in NumPy, ja.

01:25:39.880 --> 01:25:43.540
Ja, also warum ich

01:25:43.540 --> 01:25:45.380
Ibis eben sagte, weil es auch von Wes McKinney

01:25:45.380 --> 01:25:47.620
ist halt dem Pandas-Menschen,

01:25:47.620 --> 01:25:48.040
der...

01:25:48.040 --> 01:25:51.100
Ja, der hat ja eine ganze Menge, der ist auch hinter dem,

01:25:51.660 --> 01:25:53.700
äh, Arrow, das ist halt so seit einiger Zeit

01:25:53.700 --> 01:25:54.360
sein Hauptprojekt.

01:25:54.360 --> 01:25:57.500
Ja, vielleicht nochmal, was macht Arrow, wenn wir

01:25:57.500 --> 01:25:59.500
schon dabei sind? Achso, ja, das ist eigentlich im Grunde

01:25:59.500 --> 01:26:01.620
so, die Grundidee dabei ist

01:26:01.620 --> 01:26:03.580
halt, dass man vielleicht aus

01:26:03.580 --> 01:26:05.540
unterschiedlichen, also das

01:26:05.540 --> 01:26:06.840
ist halt das Problem bei NumPy

01:26:06.840 --> 01:26:09.080
oder Pandas-Geschichten, also

01:26:09.080 --> 01:26:11.520
man hat das dann halt in

01:26:11.520 --> 01:26:13.540
Python, aber wenn man jetzt eine andere Programmiersprache

01:26:13.540 --> 01:26:15.500
hat und darauf zugreifen will, dann geht das halt

01:26:15.500 --> 01:26:17.460
nicht. Und die Idee

01:26:17.460 --> 01:26:19.560
bei Arrow ist halt, dass man

01:26:19.560 --> 01:26:21.460
das halt, dass man eine gemeinsame

01:26:21.460 --> 01:26:23.820
Daten-In-Hauptspeicher-

01:26:23.820 --> 01:26:25.080
Laden-Infrastruktur hat

01:26:25.080 --> 01:26:27.420
und dann halt Paket-Files

01:26:27.420 --> 01:26:29.360
quasi, oder was auch immer, man lässt

01:26:29.360 --> 01:26:31.060
halt einen Hauptspeicher und kann dann halt von

01:26:31.060 --> 01:26:33.220
unterschiedlichen Sprachen auch

01:26:33.220 --> 01:26:34.880
drauf zugreifen und das

01:26:34.880 --> 01:26:36.060
funktioniert dann halt.

01:26:36.060 --> 01:26:38.980
Genau, und ja,

01:26:38.980 --> 01:26:41.120
ist halt nicht an sowas wie NumPy gebunden, was es halt nur für

01:26:41.120 --> 01:26:42.960
Python gibt im Grunde. Und

01:26:42.960 --> 01:26:45.180
ja, das ist jetzt inzwischen, aber glaube ich, liegt das

01:26:45.180 --> 01:26:47.160
auch unter Pandas drunter und

01:26:47.160 --> 01:26:49.240
zu größeren

01:26:49.240 --> 01:26:51.260
Teilen, ehrlich gesagt bin ich da

01:26:51.260 --> 01:26:52.800
in letzter Zeit nicht so viel Interessanz gemacht.

01:26:52.800 --> 01:26:55.080
Ja.

01:26:55.080 --> 01:26:57.120
Genau, ja, also mit IBIS kann man

01:26:57.120 --> 01:26:59.100
zum Beispiel auch da Peiss-Bug oder sowas dann berechnen,

01:26:59.100 --> 01:27:01.000
dass man dann... Ja, also alles, was

01:27:01.000 --> 01:27:02.560
irgendwie SQL spricht, kannst du da,

01:27:02.560 --> 01:27:05.060
soweit ich weiß, ist einfach nur ein Layer, wo du

01:27:05.060 --> 01:27:06.680
halt ein Data-Frame-Interface

01:27:06.680 --> 01:27:09.200
hast nach außen hin, sodass du es benutzen kannst

01:27:09.200 --> 01:27:10.960
wie einen normalen Data-Frame, aber nach hinten raus

01:27:10.960 --> 01:27:12.000
spricht es dann halt SQL.

01:27:12.000 --> 01:27:14.480
Was halt, ja,

01:27:14.480 --> 01:27:17.400
wenn du ein System hast, das das kann, dann ist es...

01:27:17.400 --> 01:27:18.160
Ja.

01:27:18.160 --> 01:27:18.240
Ja.

01:27:21.060 --> 01:27:23.220
Ich glaube, wir haben schon viel

01:27:23.220 --> 01:27:25.280
über diesen Prozess, wie wir das gesprochen haben,

01:27:25.280 --> 01:27:26.260
Crisp, sind wir durch?

01:27:26.260 --> 01:27:29.880
Ja, eigentlich sind wir durch und dann kann man ja wieder von Anfang

01:27:29.880 --> 01:27:31.300
an anfangen und sich den nächsten

01:27:31.300 --> 01:27:33.220
Next-Best-Use-Case-Schlamm unternehmen.

01:27:33.220 --> 01:27:35.780
Oder das, was man schon hat, halt noch mal

01:27:35.780 --> 01:27:37.740
erweitern, überlegen, ob man es

01:27:37.740 --> 01:27:39.520
auch anders anwenden kann und so weiter.

01:27:39.520 --> 01:27:41.860
Also du würdest zum Beispiel

01:27:41.860 --> 01:27:43.840
sagen, aus deiner Perspektive, es gibt gar keinen großen Unterschied

01:27:43.840 --> 01:27:45.920
zwischen Data Science und Machine Learning

01:27:45.920 --> 01:27:47.380
Operations oder Engineering

01:27:47.380 --> 01:27:48.400
mehr

01:27:48.400 --> 01:27:50.160
heutzutage.

01:27:50.860 --> 01:27:52.560
Oder so. Ja, also es sind halt

01:27:52.560 --> 01:27:54.620
alles irgendwie so verschiedene Schwerpunkte.

01:27:54.620 --> 01:27:56.300
Bei uns sind jetzt,

01:27:56.300 --> 01:27:58.140
wir haben schon Leute, die eher

01:27:58.140 --> 01:28:00.360
Data Science machen, die eher modellieren und

01:28:00.360 --> 01:28:02.160
andere Leute, die eher

01:28:02.160 --> 01:28:04.540
in dem DevOps, MLOps-Bereich

01:28:04.540 --> 01:28:06.440
unterwegs sind oder auch Data Engineering

01:28:06.440 --> 01:28:08.720
machen, die sich besser mit Datenbanken auskennen.

01:28:08.720 --> 01:28:10.500
Aber wir haben bei uns

01:28:10.500 --> 01:28:12.480
jetzt nicht so die klare Trennung, du musst das eine oder das andere

01:28:12.480 --> 01:28:14.340
machen. Es gibt auch Leute, die machen beides, gehen dann

01:28:14.340 --> 01:28:16.140
halt eben nicht ganz so krass in die Tiefe,

01:28:16.140 --> 01:28:18.280
aber haben halt ein breiteres Profil und

01:28:18.280 --> 01:28:19.940
das ist halt natürlich auch total wertvoll.

01:28:20.660 --> 01:28:22.620
Ja, es gibt

01:28:22.620 --> 01:28:23.800
diese Schwerpunkte, aber

01:28:23.800 --> 01:28:26.020
greift ja auch alles ineinander und

01:28:26.020 --> 01:28:28.480
es ist ja auch so, dass

01:28:28.480 --> 01:28:30.620
es halt Sinn macht, so ein T-Shape-

01:28:30.620 --> 01:28:32.440
Profile aufzubauen, also dass man in einer

01:28:32.440 --> 01:28:33.680
Sache schon wirklich gut ist, aber

01:28:33.680 --> 01:28:36.200
von vielen anderen Sachen auch Ahnung hat

01:28:36.200 --> 01:28:38.320
und da auch was machen kann, dann ist man eben auch flexibler,

01:28:38.320 --> 01:28:40.220
auch wenn vielleicht ein Bereich auf einmal

01:28:40.220 --> 01:28:42.160
nicht mehr so gefragt ist aus irgendwelchen Gründen,

01:28:42.160 --> 01:28:44.160
ob das AI den übertroffen hat oder

01:28:44.160 --> 01:28:45.660
weil wir alle ersetzt werden durch

01:28:45.660 --> 01:28:46.480
sowas, genau.

01:28:50.460 --> 01:28:52.040
Ja, es macht natürlich auch Sinn, wenn ich als

01:28:52.040 --> 01:28:53.840
Data Scientist jetzt mich

01:28:53.840 --> 01:28:56.100
nicht weigere, mal das Jenkins-File

01:28:56.100 --> 01:28:56.940
zu updaten.

01:28:56.940 --> 01:29:00.360
Da macht es ja schon Sinn,

01:29:00.360 --> 01:29:01.880
sich dann mit allem ein bisschen auszukennen.

01:29:01.880 --> 01:29:03.600
Ja, okay.

01:29:03.600 --> 01:29:06.140
So aus meiner Perspektive ist das, ich meine, das mag

01:29:06.140 --> 01:29:07.760
jetzt etwas ketzerisch klingen, oder ich weiß nicht, vielleicht

01:29:07.760 --> 01:29:09.920
so Hot-Take-Verwandlung.

01:29:09.920 --> 01:29:12.180
Ich würde sagen, das ist alles

01:29:12.180 --> 01:29:14.220
Programmieren. Oder, sag mal so,

01:29:14.220 --> 01:29:15.420
das, was praktisch oft

01:29:15.420 --> 01:29:17.900
sozusagen ein Bottleneck ist bei

01:29:17.900 --> 01:29:20.260
Leuten, die versuchen, irgendwas zu tun, ob es

01:29:20.260 --> 01:29:21.980
Produkt umsetzen, irgendwas analysieren

01:29:21.980 --> 01:29:23.920
oder Modelle bauen oder was auch immer ist, ist

01:29:23.920 --> 01:29:25.860
halt normalerweise das Programmieren.

01:29:25.860 --> 01:29:27.320
Ist halt das Bottleneck aus

01:29:27.320 --> 01:29:28.120
sowas.

01:29:28.120 --> 01:29:31.720
Also ein bisschen statistisches Grundverständnis schadet

01:29:31.720 --> 01:29:33.680
vielleicht auch nicht. Ja, aber du brauchst oft

01:29:33.680 --> 01:29:35.120
oder gut, das mag

01:29:35.120 --> 01:29:37.880
dann irgendwie, das mag

01:29:37.880 --> 01:29:39.840
daran liegen, dass ich das halt, dass ich die

01:29:39.840 --> 01:29:41.880
Feinheiten dann oft nicht so sehe, aber

01:29:41.880 --> 01:29:43.840
und dass man da vielleicht Feinheiten machen kann,

01:29:43.840 --> 01:29:45.700
aber oft scheitert es halt schon an so groben Dingen

01:29:45.700 --> 01:29:47.720
und dann kommt es auf die

01:29:47.720 --> 01:29:48.600
Feinheiten auch nicht mehr an.

01:29:50.060 --> 01:29:51.980
Ich würde sagen, alle

01:29:51.980 --> 01:29:53.640
bei uns können programmieren

01:29:53.640 --> 01:29:56.040
und wenn man jetzt ein Projekt hat, wo alle

01:29:56.040 --> 01:29:57.720
programmieren können, aber nur die Hälfte

01:29:57.720 --> 01:30:00.000
hat Statistikverständnis, ist okay. Wenn aber

01:30:00.000 --> 01:30:02.020
alle Statistik können und die Hälfte kann programmieren,

01:30:02.020 --> 01:30:03.400
dann langweilt sich die eine Hälfte

01:30:03.400 --> 01:30:06.040
der Leute, die halt nicht programmieren können, weil die können

01:30:06.040 --> 01:30:08.020
da ja immer nur Ergebnisse angucken und irgendwas dazu

01:30:08.020 --> 01:30:09.800
sagen. Oder genau, so kommt man jetzt auch aus,

01:30:09.800 --> 01:30:12.100
man ist halt hart davon abhängig,

01:30:12.100 --> 01:30:13.740
dass man, dass irgendwie dieses

01:30:13.740 --> 01:30:15.960
Programmier-Dings halt auch funktioniert, weil ansonsten

01:30:15.960 --> 01:30:17.860
kommt man mit den anderen Sachen, ist halt sozusagen

01:30:17.860 --> 01:30:19.860
die Infrastruktur, die man braucht für fast alles andere.

01:30:19.860 --> 01:30:21.940
Ja, natürlich gibt es halt auch

01:30:21.940 --> 01:30:23.820
so Programme wie SPSS, womit man

01:30:23.820 --> 01:30:25.180
Statistikanalysen machen kann.

01:30:25.180 --> 01:30:26.400
Das wollte ich ganz am Anfang sagen.

01:30:26.400 --> 01:30:29.800
Das hat ja auch

01:30:29.800 --> 01:30:31.740
seine Daseinsberechtigung, weil wenn jemand nur

01:30:31.740 --> 01:30:33.560
alle drei Monate mal eine Analyse fährt,

01:30:33.560 --> 01:30:34.880
dann lohnt sich halt eben nicht.

01:30:34.880 --> 01:30:37.220
Ja, aber auch da,

01:30:37.220 --> 01:30:39.620
da mache ich mir einen Notebook für halt dann, oder?

01:30:39.620 --> 01:30:41.480
Nee, aber die Person macht

01:30:41.480 --> 01:30:43.100
alle drei Monate irgendwas anderes.

01:30:43.100 --> 01:30:45.240
Dann müssen die alle drei Monate wieder

01:30:45.240 --> 01:30:46.820
sich erinnern, wie man eigentlich

01:30:46.820 --> 01:30:48.700
Variable zuweist.

01:30:49.660 --> 01:30:51.800
Und dann lieber das

01:30:51.800 --> 01:30:53.180
angestaubte SPSS klicken.

01:30:53.180 --> 01:30:55.840
Also ja,

01:30:55.840 --> 01:30:58.060
mich hat SPSS auch ziemlich schnell genervt,

01:30:58.060 --> 01:30:59.940
aber ich kann, also

01:30:59.940 --> 01:31:01.840
es hat schon seine Daseinsberechtigung für

01:31:01.840 --> 01:31:03.680
bestimmte Dinge. Oder vielleicht das

01:31:03.680 --> 01:31:05.700
SPSS des kleinen Mannes so, ich meine, das ist halt auch das,

01:31:05.700 --> 01:31:07.320
womit man täglich zu tun hat. Excel.

01:31:07.320 --> 01:31:09.760
Ja, ich meine, es gibt ganz viele Leute, die machen halt einen Großteil

01:31:09.760 --> 01:31:10.980
von dem Zeugs halt mit Excel.

01:31:10.980 --> 01:31:13.700
Alle Leute machen alles mit Excel, genau.

01:31:13.700 --> 01:31:15.700
Ja, natürlich. Man kommt auch

01:31:15.700 --> 01:31:17.560
ein gewisses Stück weit schon, das ist richtig,

01:31:17.560 --> 01:31:19.400
aber. Eine Million Zeit.

01:31:19.460 --> 01:31:21.540
Ja, ich glaube, man hat als Data Scientist auch manchmal

01:31:21.540 --> 01:31:23.580
so eine Arroganz, dass man Excel überhaupt gar nicht

01:31:23.580 --> 01:31:23.900
öffnet.

01:31:23.900 --> 01:31:27.100
Ja, und für manche Sachen ist es vielleicht gar nicht so schlecht.

01:31:27.100 --> 01:31:28.240
Pederize ist heuer.

01:31:28.240 --> 01:31:29.240
Ja.

01:31:29.240 --> 01:31:30.560
Ja.

01:31:30.560 --> 01:31:32.700
Aha, jetzt hatte ich mit Excel gesagt.

01:31:32.700 --> 01:31:35.040
Jetzt kriege ich ein komisches Gefühl.

01:31:35.040 --> 01:31:36.520
Ich bin zu cool dafür.

01:31:36.520 --> 01:31:39.160
Es ist halt einfach fürchterlich.

01:31:39.160 --> 01:31:41.220
Es ist halt hässlich und dann wollen Leute auch noch,

01:31:41.220 --> 01:31:43.160
dass man dann in Excel Spalten dann färbt,

01:31:43.160 --> 01:31:44.880
weil man macht ja Data Science oder was mit Daten

01:31:44.880 --> 01:31:46.300
und dann soll das alles so aussehen wie vorher.

01:31:46.300 --> 01:31:49.340
Das geht alles, ich habe da kein Problem

01:31:49.340 --> 01:31:49.440
mit.

01:31:49.460 --> 01:31:51.360
Ich generiere auch Excel-Output und ich lese

01:31:51.360 --> 01:31:51.860
auch Excel ein.

01:31:51.860 --> 01:31:54.920
Ja, also einen schönen Output machst du.

01:31:54.920 --> 01:31:57.260
Ich habe da eine Aufgabe für dich.

01:31:57.260 --> 01:31:58.300
Oh, ja, so.

01:31:58.300 --> 01:32:01.080
Okay, jetzt, wenn es dann so konkret wird,

01:32:01.080 --> 01:32:01.700
dann weiß ich nicht.

01:32:01.700 --> 01:32:05.800
Ich glaube, wir haben sogar so ein Mini-Open-Source-Projekt

01:32:05.800 --> 01:32:06.880
auf GitHub liegen

01:32:06.880 --> 01:32:09.300
für Excel, also um

01:32:09.300 --> 01:32:11.240
Excel-Files schön zu formatieren und das

01:32:11.240 --> 01:32:11.960
habe ich geschrieben.

01:32:11.960 --> 01:32:13.220
Sehr gut.

01:32:13.220 --> 01:32:14.200
Ja, schon.

01:32:14.200 --> 01:32:17.920
Ja, das war

01:32:17.920 --> 01:32:19.300
tatsächlich ein Projekt, da wurden halt

01:32:19.300 --> 01:32:21.680
die Reports, das war so ein Banking-Kontext

01:32:21.680 --> 01:32:23.580
und die haben halt die Reports als Excel-File

01:32:23.580 --> 01:32:25.300
gebraucht, um wahrscheinlich damit

01:32:25.300 --> 01:32:26.640
die weiterzuschicken.

01:32:26.640 --> 01:32:28.620
Ja, weil die auch den ganzen Tag das halt schon kennen.

01:32:28.620 --> 01:32:31.120
Die haben halt ihren Prozess, der ist immer schon so und dann ist es

01:32:31.120 --> 01:32:32.920
super, wenn dann die Sachen einfach dann

01:32:32.920 --> 01:32:35.120
neu sind oder Daten drin sind, aber es soll genauso aussehen

01:32:35.120 --> 01:32:36.380
mit Condition-Formatting und so.

01:32:36.380 --> 01:32:38.900
Ja, oder es sind halt Leute, die können halt

01:32:38.900 --> 01:32:40.680
sich programmieren, das ist auch irgendwie völlig okay,

01:32:40.680 --> 01:32:42.820
weil sie ganz andere Sachen machen, aber trotzdem müssen

01:32:42.820 --> 01:32:45.380
die irgendwie die Ergebnisse liefern.

01:32:45.380 --> 01:32:45.820
Ja.

01:32:45.820 --> 01:32:46.540
Ja.

01:32:46.540 --> 01:32:49.140
Ich glaube,

01:32:49.140 --> 01:32:50.200
wir sind bei den Picks angekommen, oder?

01:32:50.200 --> 01:32:53.040
Ich glaube, Mira, du wolltest noch was picken, was

01:32:53.040 --> 01:32:55.220
auch noch mit Data Science zu tun hat, vielleicht fangen wir damit doch direkt an.

01:32:55.220 --> 01:32:56.900
Ja, also wir haben schon so ein bisschen

01:32:56.900 --> 01:32:58.820
angeschnitten, ich hatte ja eben erwähnt, dass ich was

01:32:58.820 --> 01:33:00.480
parallelisiert habe und das war

01:33:00.480 --> 01:33:02.580
total cool, weil diese

01:33:02.580 --> 01:33:04.740
Prognosen, also dieses

01:33:04.740 --> 01:33:07.000
Modelltraining und Prognosen erstellen, das hat

01:33:07.000 --> 01:33:08.900
halt Stunden gedauert

01:33:08.900 --> 01:33:10.960
und auch wahnsinnig hohe Kosten verursacht,

01:33:10.960 --> 01:33:12.100
weil, anderes Thema,

01:33:12.100 --> 01:33:14.880
Pandas haben hohe Rampe gebraucht,

01:33:14.880 --> 01:33:16.980
das heißt, man braucht einen riesen Cluster und dann ist

01:33:16.980 --> 01:33:18.980
es aber auch noch total lang gelaufen, ob sie auf

01:33:18.980 --> 01:33:20.680
diesem riesigen Cluster, also total teuer

01:33:20.680 --> 01:33:22.720
und dann habe ich festgestellt, dass die

01:33:22.720 --> 01:33:24.820
Prognosen alle nacheinander

01:33:24.820 --> 01:33:26.780
erstellt wurden und alles nur auf dem Driver

01:33:26.780 --> 01:33:28.640
Node lief, also diese ganzen vielen

01:33:28.640 --> 01:33:30.720
Nodes auf diesem riesigen Cluster, die wurden alle

01:33:30.720 --> 01:33:32.900
überhaupt gar nicht benutzt und dann

01:33:32.900 --> 01:33:34.980
dürfte ich das parallelisieren,

01:33:34.980 --> 01:33:36.840
in dem Fall mit

01:33:36.840 --> 01:33:38.720
Pandas UDFs, Pandas User

01:33:38.720 --> 01:33:40.640
Defined Functions, also es ist dann eine Möglichkeit

01:33:40.640 --> 01:33:42.840
eben, dass das, es läuft halt in Pandas,

01:33:42.840 --> 01:33:44.800
weil es ist ein Light GBM-Modell und das

01:33:44.800 --> 01:33:46.300
kann im Moment noch kein

01:33:46.300 --> 01:33:48.820
High Spark DataFrame oder Spark DataFrame

01:33:48.820 --> 01:33:50.120
nehmen, deswegen muss man dem

01:33:50.120 --> 01:33:52.560
in Pandas geben oder wahrscheinlich geht

01:33:52.560 --> 01:33:54.160
auch Polars, da sind wir jetzt gerade dran,

01:33:54.160 --> 01:33:56.600
aber ja, und man kann dann

01:33:56.600 --> 01:33:58.440
diese Prognosen in Pandas

01:33:58.440 --> 01:34:00.440
auf diese Art und Weise parallelisieren und es war

01:34:00.440 --> 01:34:02.200
einfach so schön und

01:34:02.200 --> 01:34:04.380
so geil, weil es einfach so viel schneller

01:34:04.380 --> 01:34:06.560
geworden ist und ich habe mich sehr

01:34:06.560 --> 01:34:07.680
wie eine Heldin gefühlt.

01:34:07.680 --> 01:34:09.860
Ja, so ein Erfolgstor ist immer schön, ja.

01:34:09.860 --> 01:34:12.300
Dann komme ich auch direkt zu meiner

01:34:12.300 --> 01:34:14.580
Erfolgstor, ich hatte nämlich auch so einen Moment,

01:34:14.580 --> 01:34:16.240
ich habe nämlich Hynix neues Video gesehen

01:34:16.240 --> 01:34:18.660
und das ist Just Love

01:34:18.660 --> 01:34:20.400
also ich habe Just Files für mich entdeckt,

01:34:20.400 --> 01:34:21.620
die hatte ich vorher

01:34:21.620 --> 01:34:23.860
nicht so auf dem Schirm, dass das so ein bisschen

01:34:23.860 --> 01:34:26.220
was ähnliches wie eine Makefile nur, dass man halt

01:34:26.220 --> 01:34:28.560
in einer Just File, das ist auch ein Rust geschriebenes

01:34:28.560 --> 01:34:30.340
Tool, definiert, wie so die

01:34:30.340 --> 01:34:32.340
Projektkommandos eigentlich alle sind

01:34:32.340 --> 01:34:34.280
und dann kann man, das ist

01:34:34.280 --> 01:34:36.380
wundervoll mit Variablen und so, es funktioniert

01:34:36.380 --> 01:34:38.440
toll, Hynix Video dazu zu gucken, glaube

01:34:38.440 --> 01:34:40.380
ich, ist sehr hilfreich und ich habe alles umgestellt

01:34:40.380 --> 01:34:42.360
bei mir, ich benutze fast meine Commands nicht mehr,

01:34:42.360 --> 01:34:44.240
also meine Commands bei ihnen noch ein bisschen selten, sondern

01:34:44.240 --> 01:34:46.420
einfach nur Just, Just Run und

01:34:46.420 --> 01:34:48.500
der Server läuft oder Just Connect

01:34:48.500 --> 01:34:50.220
für Dev-Server oder sowas

01:34:50.220 --> 01:34:51.720
oder für auch Prod-Server,

01:34:51.720 --> 01:34:54.100
dann kann ich sagen Just Connect Production und dann noch

01:34:54.100 --> 01:34:56.260
den Pod-Namen oder sowas, falls ich öffnen können, wenn ich das muss

01:34:56.260 --> 01:34:57.780
oder ich kann sagen Just Lint

01:34:57.780 --> 01:35:00.120
oder Just Test und so,

01:35:00.120 --> 01:35:02.080
es ist toll, ich liebe es.

01:35:02.080 --> 01:35:04.140
Das ist ja auch echt eine

01:35:04.140 --> 01:35:05.720
gute Entscheidung für den Namen,

01:35:05.720 --> 01:35:08.500
also richtig toll, oder? Ja, voll gut,

01:35:08.500 --> 01:35:09.940
finde ich auch, deswegen Just Love.

01:35:09.940 --> 01:35:12.360
Okay, ja, ja, ich habe ja auch tatsächlich

01:35:12.360 --> 01:35:14.160
nachdem ich das Video

01:35:14.160 --> 01:35:16.140
gesehen habe, habe ich mir auch gedacht, so, ha, vielleicht muss ich

01:35:16.140 --> 01:35:16.960
das auch mal ausprobieren.

01:35:18.340 --> 01:35:19.380
Hm, ja, ich,

01:35:19.380 --> 01:35:22.100
ich meine, das ist toll, du kannst auch

01:35:22.100 --> 01:35:23.860
nach dem Just Build und du, der macht mit UV, macht

01:35:23.860 --> 01:35:25.620
dann direkt Paketinstallation, Paket Sync,

01:35:25.620 --> 01:35:27.280
kannst Upgrade machen,

01:35:27.280 --> 01:35:29.700
alle Sachen mit den

01:35:29.700 --> 01:35:31.920
Kommandozeilen, die du sonst immer nutzt, reinschreiben und wenn du das

01:35:31.920 --> 01:35:33.940
über so eine Commands-Pi geregelt hättest oder sowas, musst du halt

01:35:33.940 --> 01:35:35.780
immer dann einen Subprozess spawnen und so,

01:35:35.780 --> 01:35:37.780
ah, ich weiß nicht, das war jetzt schon

01:35:37.780 --> 01:35:39.680
sehr schön. Ja, ne, was ich häufig

01:35:39.680 --> 01:35:42.100
mache in letzter Zeit, ist halt einfach Entry Points

01:35:42.100 --> 01:35:44.100
im, weil meistens hat man

01:35:44.100 --> 01:35:45.160
ja ein Paket, das man installiert.

01:35:45.160 --> 01:35:48.140
Das würde ich jetzt nicht so sehen.

01:35:48.180 --> 01:35:50.120
Ja, kommt drauf an, aber, also ich

01:35:50.120 --> 01:35:52.140
hab das halt oft und dann kann ich halt auch

01:35:52.140 --> 01:35:54.080
irgendwie in PyProject, Project Terminal

01:35:54.080 --> 01:35:56.320
halt unter Scripts halt andere Entry Points

01:35:56.320 --> 01:35:58.180
definieren und da hab ich halt Funktionen, dann hab ich's

01:35:58.180 --> 01:35:59.800
jetzt nicht in der Command UI, sondern

01:35:59.800 --> 01:36:02.160
ich schreib dann halt einfach Python, aber ja, es gibt natürlich

01:36:02.160 --> 01:36:04.060
Dinge, wo man nicht einfach Python schreiben kann,

01:36:04.060 --> 01:36:06.040
wenn man Datenbank hoch und runter fährt oder solche

01:36:06.040 --> 01:36:07.580
Sachen, ja klar, dann muss man irgendwie das

01:36:07.580 --> 01:36:09.860
anmachen. Also das DB zum Beispiel ist das andere oder

01:36:09.860 --> 01:36:12.200
eine Katakombe, also ne, Shell-Skripte

01:36:12.200 --> 01:36:13.900
da reinschreiben, wenn du willst, die dann

01:36:13.900 --> 01:36:15.980
Sachen hintereinander machen und so

01:36:15.980 --> 01:36:18.020
oder Tests machen oder, oder, äh,

01:36:18.020 --> 01:36:20.060
gucken, du kannst Environment-Variablen da reinladen

01:36:20.060 --> 01:36:21.900
oder spezifisch, wenn das da irgendwie passt und

01:36:21.900 --> 01:36:24.140
ähm, du hast grad eine Sache

01:36:24.140 --> 01:36:26.000
gesagt, Pakete, also du könntest ja auch einfach aus der

01:36:26.000 --> 01:36:27.980
PyProject Terminal das PyScript dann ausführen lassen und bei mir ist

01:36:27.980 --> 01:36:29.940
zum Beispiel so, dass die Dinge

01:36:29.940 --> 01:36:31.940
im Python und im anderen Verzeichnis liegen

01:36:31.940 --> 01:36:34.360
als das Projekt und, äh, die Dokumentation

01:36:34.360 --> 01:36:35.800
oder sowas und trotzdem,

01:36:35.800 --> 01:36:37.900
wenn ich das Just benutze, benutzt es halt dann auch

01:36:37.900 --> 01:36:39.560
den Kontext, du kannst Work in Directory setzen.

01:36:39.560 --> 01:36:40.140
Toll.

01:36:40.140 --> 01:36:44.000
Ja, okay, also ich muss mir vielleicht auch

01:36:44.000 --> 01:36:45.320
nochmal angucken.

01:36:45.320 --> 01:36:46.800
Ja, mach das, das ist, äh, ja.

01:36:47.860 --> 01:36:48.900
Backing. Wie Sockzeit.

01:36:48.900 --> 01:36:51.260
Geht nicht mehr weg. Okay.

01:36:51.260 --> 01:36:54.020
Naja, äh, ja, äh, genau,

01:36:54.020 --> 01:36:55.780
was, äh, ich hab grad überlegt, was ich picken könnte,

01:36:55.780 --> 01:36:57.840
hab mir grad keine Gedanken gemacht, aber ich bin ja jetzt

01:36:57.840 --> 01:37:00.180
in letzter Zeit so ein bisschen besessen von, ähm,

01:37:00.180 --> 01:37:00.860
nur ein bisschen.

01:37:00.860 --> 01:37:03.820
Du bist besessen oder das, das

01:37:03.820 --> 01:37:05.740
bist du besessen? Ja, das ist ja, ich mach

01:37:05.740 --> 01:37:08.460
ganz, äh, Cloud-Code

01:37:08.460 --> 01:37:09.900
und Dinge mit, äh,

01:37:09.900 --> 01:37:11.680
äh, mit LLMs

01:37:11.680 --> 01:37:13.660
irgendwie programmieren und

01:37:13.660 --> 01:37:15.120
Das ist schon verrückt, also ich weiß nicht, ob

01:37:15.120 --> 01:37:17.700
du hast auch noch mehrere, aber, ähm, die Kosten sind halt

01:37:17.700 --> 01:37:19.640
krass und wir, wir benutzen jetzt halt Max.

01:37:19.640 --> 01:37:21.500
Ja. Das ist halt das Abo,

01:37:21.500 --> 01:37:23.400
wie teuer ist das, 200 Euro? Ja.

01:37:23.400 --> 01:37:25.580
Ja, gut, es gibt auch 1 für 100, aber. Ja,

01:37:25.580 --> 01:37:27.600
okay, aber das ist halt das 20, normalerweise musst du halt 3000,

01:37:27.600 --> 01:37:29.760
4000 Euro Tokenkosten zahlen

01:37:29.760 --> 01:37:31.700
im Monat dafür. Ja,

01:37:31.700 --> 01:37:33.960
so, weil, genau, das würde ich

01:37:33.960 --> 01:37:35.600
jetzt dann picken, es gibt da ein,

01:37:35.600 --> 01:37:37.960
äh, äh, ein NPM-Paket,

01:37:37.960 --> 01:37:39.680
äh, CC-Usage, äh,

01:37:39.680 --> 01:37:41.700
äh, nennt sich das, äh, kann man per MPX zum Beispiel

01:37:41.700 --> 01:37:43.340
installieren und dann sagt einem das

01:37:43.340 --> 01:37:45.780
quasi, wie viel, wie viel Geld

01:37:45.780 --> 01:37:47.680
man Tokens verbraucht hat und,

01:37:47.680 --> 01:37:49.940
ähm, damit kann man sich sehr schön rationalisieren,

01:37:49.940 --> 01:37:51.320
dass das gar nicht so viel ist, wenn man 200 Euro,

01:37:51.320 --> 01:37:52.740
200 Dollar im Monat zahlt.

01:37:52.740 --> 01:37:55.040
Weil, äh, ja.

01:37:55.040 --> 01:37:57.320
Ähm. Wie viel hast du diesen Monat?

01:37:57.320 --> 01:37:59.500
Auf dem Rechner hier, 2000

01:37:59.500 --> 01:38:01.640
Dollar Tokens, ja. Okay. Und ich hab aber

01:38:01.640 --> 01:38:02.860
auch noch andere Rechner auf denen auch. Ja.

01:38:02.860 --> 01:38:05.520
Und das ist der 17. heute, glaube ich, ja.

01:38:05.520 --> 01:38:06.380
Ja. Ja.

01:38:06.380 --> 01:38:09.580
Ha. Die, die

01:38:09.580 --> 01:38:11.700
sind gefährlich, die Dinger, die machen uns alle obsolet.

01:38:11.700 --> 01:38:12.880
Wir werden sehen.

01:38:12.880 --> 01:38:15.520
Ah, das glaube ich nicht. Ach, ja. Man sitzt

01:38:15.520 --> 01:38:17.660
dann am Strand und nimmt dann sein Schirmchen und redet

01:38:17.660 --> 01:38:19.620
dann mit seinem, keine Ahnung, kleinen

01:38:19.620 --> 01:38:21.500
Roboter neben einem herläuft, der nebenbei noch

01:38:21.500 --> 01:38:23.600
unterhält, dass man weiterentwickelt und unterhält

01:38:23.600 --> 01:38:25.580
sich dann wie im Podcast. Da haben wir jetzt schon mal gut geübt jetzt.

01:38:25.580 --> 01:38:27.340
Also, ja, man muss so ein bisschen, bisschen

01:38:27.340 --> 01:38:29.500
vorsichtig sein, weil natürlich wird man halt irgendwie so

01:38:29.500 --> 01:38:31.580
ein bisschen zu so, man schreibt dann halt nur noch so Anforderungen

01:38:31.580 --> 01:38:33.540
hin und so versucht das genau zu spezifizieren

01:38:33.540 --> 01:38:35.680
und das, man, man befördert sich selbst

01:38:35.680 --> 01:38:37.140
zu so einer Art Projektmanager. Ja.

01:38:37.140 --> 01:38:39.520
Und dann macht man einen ganz anderen Job

01:38:39.520 --> 01:38:41.580
und da muss man so ein bisschen aufpassen, dass das, weil

01:38:41.580 --> 01:38:43.220
dann nachher, weil eigentlich,

01:38:43.220 --> 01:38:45.720
also ich mache das jetzt bei mir, weil es Spaß macht.

01:38:45.720 --> 01:38:46.840
Ja. Genau. Und,

01:38:47.640 --> 01:38:49.420
ja, wenn es keinen Spaß mehr macht, weil,

01:38:49.420 --> 01:38:51.760
ja, es ist halt, dann hat man sich irgendwie

01:38:51.760 --> 01:38:53.420
doch was mit Holz machen. Ja.

01:38:53.420 --> 01:38:55.720
Mein Freund nutzt tatsächlich, also

01:38:55.720 --> 01:38:57.620
für die privaten Projekte auch viel Cursor

01:38:57.620 --> 01:38:59.700
und er sagt so, ja, das, worauf ich Bock

01:38:59.700 --> 01:39:01.660
habe, das schreibe ich da trotzdem selbst.

01:39:01.660 --> 01:39:03.840
Ja, das ist auf jeden Fall eine Art Idee wahrscheinlich.

01:39:03.840 --> 01:39:06.120
Und sonst ist er halt, ja, der Projektmanager,

01:39:06.120 --> 01:39:07.880
der seinen

01:39:07.880 --> 01:39:09.440
Julia quasi immer

01:39:09.440 --> 01:39:11.460
gucken muss, was der macht.

01:39:11.460 --> 01:39:13.440
Ja, also bei mir hat auch Cursor jetzt raus, Adventure

01:39:13.440 --> 01:39:15.360
von Eva kauft, aber Cursor ist raus, nur noch

01:39:15.360 --> 01:39:17.620
Code, also nur noch Kommandoteile und ich bin wieder

01:39:17.620 --> 01:39:19.360
wie das Code und das ist super.

01:39:19.360 --> 01:39:21.660
Das, also, kann ich nur empfehlen.

01:39:21.660 --> 01:39:23.720
Ist verrückt. Ja, ist grad,

01:39:23.720 --> 01:39:24.740
ist grad verrückt, ja.

01:39:24.740 --> 01:39:27.340
Es macht halt so viel schneller und

01:39:27.340 --> 01:39:29.600
dann mache ich so nervige Sachen ab.

01:39:29.600 --> 01:39:31.480
Aber ja, man wird irgendwie mehr zum

01:39:31.480 --> 01:39:33.460
Projektmanager, Projektmanagerin und

01:39:33.460 --> 01:39:35.640
ich glaube, das Thema Kommunikation wird halt

01:39:35.640 --> 01:39:37.400
immer noch wichtig bleiben.

01:39:37.400 --> 01:39:39.340
Ich hoffe ja, dass das Ding über meine Stimme hat und dann

01:39:39.340 --> 01:39:41.000
bessere Kommunikation mit den anderen Leuten.

01:39:41.000 --> 01:39:43.300
Das wäre, genau, das habe ich ja auch mal gehofft,

01:39:43.300 --> 01:39:45.080
dass ich irgendwie, warum ich, genau,

01:39:45.080 --> 01:39:47.600
während meine, meine, meine

01:39:47.600 --> 01:39:49.460
die, die, die Cloud-Jobs halt

01:39:49.460 --> 01:39:51.340
laufen, kann ich dann halbwegs mehr Zeit, um irgendwie

01:39:51.340 --> 01:39:53.500
Meetings mit Kollegen irgendwie da irgendwie

01:39:53.500 --> 01:39:55.640
Pläne zu besprechen, so. Das sollte umgekehrt

01:39:55.640 --> 01:39:57.560
sein. Das ist so, also ich will lieber

01:39:57.560 --> 01:39:59.140
programmieren und dann kann irgendwie,

01:39:59.140 --> 01:40:01.400
weiß ich nicht, so ein Avatar in so einem Meeting auftauchen

01:40:01.400 --> 01:40:03.420
und immer sagen, das ist eine super Idee.

01:40:03.420 --> 01:40:05.440
Voll gut. Genauso

01:40:05.440 --> 01:40:07.060
machen wir das. Kann auch kluge Dinge sagen, Jo.

01:40:07.060 --> 01:40:09.340
Du kannst das Training, kannst dann unsere

01:40:09.340 --> 01:40:11.600
Podcast-Folgen eingeben dann. Ja, ja,

01:40:11.600 --> 01:40:13.020
okay, muss man, ja, ist

01:40:13.020 --> 01:40:15.460
einiges umgekrempelt. Ja, wir haben unbedingt

01:40:15.460 --> 01:40:17.580
so, könnten wir, wir haben halt manche Leute, die hätten wirklich

01:40:17.600 --> 01:40:19.460
etwas Spannendes zu erzählen, aber trauen sich nicht so

01:40:19.460 --> 01:40:21.440
richtig im Podcast, kann ich verstehen, ist okay.

01:40:21.440 --> 01:40:23.640
Aber wenn man dann die Stimme einfach nehmen könnte,

01:40:23.640 --> 01:40:25.560
dann können sie einen Text schreiben und dann könnte man

01:40:25.560 --> 01:40:27.780
den Podcast einfach generieren. Ja, das geht,

01:40:27.780 --> 01:40:29.120
das geht. Also das kann man ja eigentlich auch schon.

01:40:29.120 --> 01:40:31.580
Also die neuen Modelle von Gemini dazu, die ich gehört

01:40:31.580 --> 01:40:32.760
habe, ich glaube, es gibt leider noch andere,

01:40:32.760 --> 01:40:35.640
die Wisp-LS ersetzen, das ist verrückt, wie gut

01:40:35.640 --> 01:40:37.360
die sind und wie natürlich die auf einmal klingen, ja,

01:40:37.360 --> 01:40:39.320
das ist schon crazy. Ja, also Stimme, LLM Labs hat da

01:40:39.320 --> 01:40:41.700
super Modelle, aber fürs Generieren

01:40:41.700 --> 01:40:43.500
von Podcasts, Notebook-LLM,

01:40:43.500 --> 01:40:45.300
das, ja, da kann, da geht einiges.

01:40:45.300 --> 01:40:47.520
Das ist crazy, ja. Danke, Mira,

01:40:47.580 --> 01:40:49.740
dass du da warst. Ja, sehr gerne,

01:40:49.740 --> 01:40:51.420
hat Spaß gemacht. Also

01:40:51.420 --> 01:40:53.100
denk dran, Hörertreffen am 20.

01:40:53.100 --> 01:40:54.200
September.

01:40:54.200 --> 01:40:56.860
Ja, Hörerintreffen.

01:40:56.860 --> 01:40:59.180
Ja.

01:40:59.180 --> 01:41:01.360
Und

01:41:01.360 --> 01:41:03.000
ja, kommt vorbei, hört uns, hallo at

01:41:03.000 --> 01:41:04.840
peißenpodcast.de, alles Feedback, alles und so weiter.

01:41:04.840 --> 01:41:06.400
Ja, vielen Dank, bis bald.

01:41:06.400 --> 01:41:09.040
Alles klar. Und hört auch gerne meinen

01:41:09.040 --> 01:41:10.800
Data Science Deep Dive rein. Genau.

01:41:10.800 --> 01:41:12.420
Große Empfehlung. Bis bald.

01:41:12.420 --> 01:41:14.380
Tschüss. Tschüss.
