WEBVTT

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

00:00:06.540 --> 00:00:09.940
Hallo Dominik und herzlich willkommen.

00:00:09.940 --> 00:00:10.840
Hi Mira.

00:00:10.840 --> 00:00:11.740
Mira, hallo.

00:00:11.740 --> 00:00:12.840
Schön, dass du da bist.

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

00:00:19.660 --> 00:00:21.320
Wir reden über Data Science.

00:00:21.320 --> 00:00:29.060
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.060 --> 00:00:31.040
Und mit Python macht man ja recht viel Data Science.

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

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

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

00:00:47.860 --> 00:00:55.080
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.080 --> 00:00:57.980
Ursprünglich habe ich aber Psychologie studiert.

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

00:01:01.160 --> 00:01:04.560
Man muss auch sagen, dass man in der Psychologie schon auch Fehler haben, Analyse und Statistik macht.

00:01:04.560 --> 00:01:06.260
Und da hat es mir noch nicht gereicht.

00:01:06.260 --> 00:01:12.420
Deswegen habe ich dann noch einen Statistik-Master dran gehängt und bin dann so in der Statistik-Beratung damals gelandet.

00:01:12.420 --> 00:01:14.140
Da hieß es noch mehr Statistik.

00:01:14.140 --> 00:01:23.460
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.460 --> 00:01:27.560
So erinnern sich die Begriffe ein bisschen und es ist natürlich über die Zeit auch total viel dazugekommen.

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

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

00:01:34.680 --> 00:01:43.280
Am Anfang inzwischen ist eigentlich fast alles in Python, bis auch so ein paar einzelne Projekte, vor allem im Forschungsbereich, da sind die Leute ein bisschen mehr mit R unterwegs.

00:01:43.280 --> 00:01:43.780
Ja.

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

00:01:47.700 --> 00:01:57.500
Wir sind eine Data Science Beratung, haben also sehr viele wechselnde Projekte, sind 17 Leute, sind in Berlin, das heißt zum Hörertreffen wird es dann wahrscheinlich auch nichts für mich.

00:01:57.600 --> 00:01:59.940
Ich glaube, dass man ein bisschen zu weit ist, um mal kurz vorbeizukommen.

00:01:59.940 --> 00:02:04.000
Und die Deutsche Bahn hatte ich letztes Wochenende wieder von Berlin hierher, das war wieder hervorragend.

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

00:02:08.580 --> 00:02:11.840
Wir haben ja noch ein paar, vielleicht habt ihr noch nicht alle gehört.

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

00:02:16.440 --> 00:02:25.760
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.760 --> 00:02:27.340
Und da passt es dann ja auch wieder.

00:02:27.440 --> 00:02:28.080
Mit der Psychologie.

00:02:28.080 --> 00:02:35.620
Und jetzt bin ich aber witzigerweise so ein bisschen back to the roots, bin im Kundenprojekt drin, so Body Leasing mäßig dort mit im Team.

00:02:35.620 --> 00:02:40.140
Und bin dann klassisch als Data Scientist im Team drin und das macht mir auch ganz großen Spaß.

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

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

00:02:51.100 --> 00:02:57.320
Und wir haben auch einen Podcast, das ist der Grund, warum ich jetzt hier sitze und ihr mich kennt.

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

00:03:06.360 --> 00:03:07.300
Genau, das war sehr spannend.

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

00:03:08.680 --> 00:03:09.020
Ja.

00:03:09.020 --> 00:03:09.860
Ja, gut.

00:03:09.860 --> 00:03:12.020
Also, was ist denn eigentlich Data Science?

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

00:03:18.080 --> 00:03:26.080
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.080 --> 00:03:27.400
Entweder noch manuell.

00:03:27.440 --> 00:03:30.320
Oder sogar automatisiert auf Basis von Daten.

00:03:30.320 --> 00:03:40.140
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.140 --> 00:03:45.340
Also tatsächlich Statistik im weiteren Sinne, wie man das halt dann in der Psychologie oder Gynämetrie oder so.

00:03:45.340 --> 00:03:52.120
Ja, also Statistik ist auf jeden Fall, ja, ein Teil ist ja auch so, manche sagen, ja, Statistik oder Machine Learning, das überschneidet sich aber an ganz vielen Stellen.

00:03:52.120 --> 00:03:54.620
Ja, klar.

00:03:54.620 --> 00:03:57.220
Ja, man sagt ja auch oft, man braucht so drei Bereiche.

00:03:57.320 --> 00:04:08.360
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.360 --> 00:04:15.440
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.440 --> 00:04:20.360
Manche sind mehr mit Bilddaten unterwegs, mit Text, mit tabularen Daten, da bin ich vor allem unterwegs.

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

00:04:27.140 --> 00:04:29.940
Damit man seine Analysen irgendwie programmieren kann.

00:04:29.940 --> 00:04:34.580
Es ist natürlich irgendwie auch fast zu viel verlangt, das alles gleichzeitig zu können.

00:04:34.580 --> 00:04:44.280
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.280 --> 00:04:47.640
Ist ja doch ziemlich viel, das schafft man vielleicht nach ein paar Jahren.

00:04:47.640 --> 00:04:52.920
Aber deswegen sind wir auch meistens in Teams unterwegs oder wir als Beratung.

00:04:52.920 --> 00:04:55.760
Wir sind natürlich daran gewöhnt, dass wir uns schnell neue Themen reinfinden.

00:04:55.760 --> 00:04:57.080
Trotzdem brauchen wir eine neue.

00:04:57.080 --> 00:05:05.980
Wir haben in unserem neuen Projekt natürlich ganz viel Kommunikation mit unseren KundInnen, die uns auch ihre Fachexpertise dann mitgeben, weil wir dann vor allem die methodischen Kenntnisse und das Coding mitbringen.

00:05:05.980 --> 00:05:12.640
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.640 --> 00:05:13.720
Gemeinsame Sprache zu finden.

00:05:13.720 --> 00:05:24.180
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:24.480 --> 00:05:30.660
Aber ihr seid dann auch meistens tatsächlich, du hast es eben schon angesprochen, Body Leasing, also quasi in den Teams selber unterwegs.

00:05:30.660 --> 00:05:32.700
Unterschiedlich.

00:05:32.700 --> 00:05:40.780
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.780 --> 00:05:45.500
Ja, sehr, sehr unterschiedlich.

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

00:05:50.180 --> 00:05:54.100
Wir haben auch selbst eine Data Science Abteilung, aber die Aufgaben sind dann so verteilt.

00:05:54.480 --> 00:05:58.500
Und da machen wir auch den kompletten Betrieb und die Wartung mit.

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

00:06:03.580 --> 00:06:05.300
Ich bin aber mehr im Data Science-Bereich unterwegs.

00:06:05.300 --> 00:06:11.220
Und wir haben eben ja auch zunehmend das Thema Body Leasing.

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

00:06:15.920 --> 00:06:20.680
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.680 --> 00:06:24.160
Und inzwischen ist es eher so, dass die Unternehmen, die groß sind.

00:06:24.480 --> 00:06:29.040
Die überhaupt von der Kultur her in Richtung datenbasiertes Unternehmen gehen.

00:06:29.040 --> 00:06:35.620
Die haben jetzt eine Data Science Abteilung, aber die haben dann halt hier und da mal Lücken und finden niemanden und nehmen uns dann dann dazu.

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

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

00:06:48.740 --> 00:06:54.100
Oder ist das meistens dann schon einfaches Zeugs, weil einfach die Datenprobleme andere sind?

00:06:54.480 --> 00:06:56.360
Als jetzt gute Methoden auszusuchen.

00:06:56.360 --> 00:06:59.980
Es ist tatsächlich oft ziemlich anspruchsvoll.

00:06:59.980 --> 00:07:05.300
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.300 --> 00:07:16.000
Wir haben zum Beispiel was im Sportwettenbereich und da kann man sich ja vorstellen, wenn man mal überlegt, 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.000 --> 00:07:21.620
Es wird schon ganz schön kompliziert und da haben dann die Leute mit Statistik hintergrund auch ganz schön Spaß.

00:07:21.620 --> 00:07:24.320
Manchmal sind die Sachen halt noch ein bisschen sinnvoll.

00:07:24.480 --> 00:07:27.220
Aber oft wird es dann doch irgendwie schon ein bisschen komplexer.

00:07:27.220 --> 00:07:30.380
Wir sind aber auch tatsächlich darauf spezialisiert.

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

00:07:36.060 --> 00:07:43.080
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.080 --> 00:07:47.540
Ja, wie kommt man denn eigentlich zur Data Science?

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

00:07:51.940 --> 00:07:54.120
Ich habe vor allem auch Wirtschaft.

00:07:54.480 --> 00:07:56.740
Ich habe ja Lehre studiert und da fand ich auch Statistik eigentlich spannend.

00:07:56.740 --> 00:07:59.500
Es hat bei mir noch ein bisschen Umweg gebraucht.

00:07:59.500 --> 00:08:02.820
Aber ich glaube, auch da hätte man direkt den Weg Richtung Data Science finden können.

00:08:02.820 --> 00:08:04.660
Ja, auf jeden Fall.

00:08:04.660 --> 00:08:06.540
Also das ist auch so ein typischer Hintergrund.

00:08:06.540 --> 00:08:13.000
Ich habe ja in dem Statistikmaß, da waren viele, die vorher Mathe gemacht haben, aber auch viele mit ganz anderen Hintergründen.

00:08:13.000 --> 00:08:19.340
Viele Wirtschaftswissenschaften, aber auch KollegInnen mit Soziologie Hintergrund oder Physik.

00:08:19.340 --> 00:08:24.320
Ich glaube, das ist sogar so ein bisschen ein Klassiker, dass die Physiker sich irgendwie dann in die Statistik und Machine Learning,

00:08:24.320 --> 00:08:25.460
in die Machine Learning Welt verirren.

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

00:08:31.000 --> 00:08:32.000
Das klingt irgendwie witzig.

00:08:32.000 --> 00:08:33.160
Wow, das hat er jetzt auch.

00:08:33.160 --> 00:08:40.260
Nur Leute, also der ist jetzt schon, ich glaube schon drei Jahre bei uns, aber ja, vorher hatten wir nur Leute mit einem anderen Hintergrund.

00:08:40.260 --> 00:08:47.400
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.400 --> 00:08:50.740
oder Informatik mit ganz starkem Machine Learning Schwerpunkt.

00:08:50.740 --> 00:08:57.400
Und wenn man dann sagt, ja, ich habe da, also ich habe BWL studiert und ich finde Statistik gut und habe ein paar Kurse gemacht,

00:08:57.400 --> 00:09:01.520
dann konkurriert man halt inzwischen mit Leuten, die da leider dann schon viel, viel mehr mitbringen.

00:09:01.520 --> 00:09:03.180
Also ich glaube, das ist schon schwieriger geworden.

00:09:03.180 --> 00:09:06.260
Der BWL ist ja auch nicht VWL zum Beispiel.

00:09:06.260 --> 00:09:12.960
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:12.960 --> 00:09:15.320
Ja, also Ökonometrie kann man schon tief reingehen, glaube ich da.

00:09:15.320 --> 00:09:20.060
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.580 --> 00:09:24.300
Ja, aber das ist auf jeden Fall eine interessante Geschichte.

00:09:24.300 --> 00:09:27.960
Das habe ich auf jeden Fall, also jedenfalls in den Data Science Projekten, in denen ich so unterwegs war,

00:09:27.960 --> 00:09:32.760
halt auch irgendwie immer wieder gesehen, dass halt oft die Leute, also ich weiß nicht, wie das bei euch ist,

00:09:32.760 --> 00:09:38.620
weil normalerweise Softwareentwicklungsgeschichten, die ich so mache, da habe ich dann halt eben mit Abteilungen zu tun,

00:09:38.620 --> 00:09:40.400
die halt irgendwie Softwareentwicklung machen oder so.

00:09:40.400 --> 00:09:44.640
Aber bei den Data Science Geschichten ist es immer sowas wie Business Intelligence oder so.

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

00:09:50.420 --> 00:09:55.180
die dann da probibliert haben oder so, dann da probibliert haben, genau, ganz oft aus der Ecke eher.

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

00:10:03.140 --> 00:10:06.460
Und das ist irgendwie ein bisschen anders als bei den Softwareentwicklern.

00:10:06.460 --> 00:10:11.260
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.260 --> 00:10:14.340
Genau, und das ist irgendwie eine etwas andere Welt.

00:10:14.340 --> 00:10:18.660
Also da gibt es oft eine Trennung zwischen Softwareentwicklung und eben in diesem ganzen.

00:10:18.660 --> 00:10:20.360
Und da wolltest du ja auch nochmal was zu sagen.

00:10:20.500 --> 00:10:22.760
Wie du das so findest mit den Softwareentwicklern zusammenzuarbeiten.

00:10:22.760 --> 00:10:24.500
Aber vielleicht noch erst dazu.

00:10:24.500 --> 00:10:29.400
Ich glaube, wir sind da irgendwie so dazwischen, weil wir eben ja schon Datenprodukte bauen wollen.

00:10:29.400 --> 00:10:33.180
Also es gibt auch mal ein POC oder irgendwie so eine einzelne Analyse, wo wir dann sagen,

00:10:33.180 --> 00:10:35.360
so und das sind die Ergebnisse und hier sind die Zusammenhänge.

00:10:35.360 --> 00:10:39.680
Aber normalerweise sind das dann schon, also schreiben wir auch Software,

00:10:39.680 --> 00:10:42.260
aber wir schreiben Software, die was mit Daten macht.

00:10:42.260 --> 00:10:50.260
Also dann sind zwei Sachen zusammen und BI-Abteilungen sind, glaube ich, auch nochmal,

00:10:50.260 --> 00:10:55.560
aber mehr, ja, die sind halt besonders gut darin, dann auch ganz viel visuell zu analysieren

00:10:55.560 --> 00:10:57.720
und fokussieren sich sehr stark darauf.

00:10:57.720 --> 00:11:02.040
Und ich glaube, die sind auch nochmal so ein bisschen, vielleicht noch ein bisschen weniger nerdig,

00:11:02.040 --> 00:11:05.140
hätte ich jetzt so gedacht, so Mitte.

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

00:11:07.980 --> 00:11:09.840
Ich weiß nicht, ich dachte eben, ne.

00:11:09.840 --> 00:11:12.780
Ohne Wertung zu sagen.

00:11:12.780 --> 00:11:15.800
Oh, ja.

00:11:15.800 --> 00:11:20.000
Ja, aber was du eben gefragt hättest, so,

00:11:20.260 --> 00:11:24.940
das ist auch jetzt ganz spannend, ich bin jetzt im Team, wo eigentlich relativ klar zugeordnet ist,

00:11:24.940 --> 00:11:27.860
wer ist Data Scientist und wer ist Software Engineer.

00:11:27.860 --> 00:11:35.440
Und natürlich arbeiten wir alle an dem Code, aber es gibt irgendwie so ein paar Klischees

00:11:35.440 --> 00:11:41.260
oder so Dinge, die man vielleicht beobachtet, wenn jemand, der vor allem einen Softwareentwicklungshintergrund hat,

00:11:41.260 --> 00:11:45.020
jetzt zum ersten Mal versucht, Daten zu analysieren und Data Science zu machen.

00:11:45.020 --> 00:11:50.020
Wir haben auch mal ein Projekt übernommen, wo wir entsprechenden Code dann,

00:11:50.260 --> 00:11:53.240
tatsächlich sollte man ja refactoren und wir haben auch viel refactored,

00:11:53.240 --> 00:11:54.900
aber da haben wir einen Teil wirklich neu geschrieben.

00:11:54.900 --> 00:12:02.400
Und das, also, am Coding-Stil hat man schon gesehen, dass der einfach gar nicht wusste,

00:12:02.400 --> 00:12:04.340
dass man mit Datensätzen Sachen machen kann.

00:12:04.340 --> 00:12:08.040
Der hat halt immer ganz viel gedubt über Zeilen und Spalten und so,

00:12:08.040 --> 00:12:11.980
weil er halt einfach diese ganzen Sachen nicht kannte, die man mit Datensätzen machen kann,

00:12:11.980 --> 00:12:12.960
vor allem mit Pandas.

00:12:12.960 --> 00:12:17.020
Und was sonst auch, wenn man zusammenarbeitet, halt oft passiert, ist,

00:12:17.020 --> 00:12:19.740
dass jemand, der nicht viel mit Daten gearbeitet hat,

00:12:20.260 --> 00:12:23.460
muss halt so nimmt, wie sie sind und da irgendwie ganz unkritisch ist

00:12:23.460 --> 00:12:27.300
und gar nicht sieht, wenn irgendwelche Zahlen ganz komisch aussehen.

00:12:27.300 --> 00:12:31.080
Und manchmal ist ja vielleicht der Code gar nicht falsch,

00:12:31.080 --> 00:12:33.520
aber es ist irgendwo ein Denkfehler drin.

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

00:12:37.280 --> 00:12:40.720
Oder man hat ein Missverständnis zu den Daten, man hat irgendeine Annahme,

00:12:40.720 --> 00:12:43.000
aber in Wirklichkeit ist das ein bisschen anders.

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

00:12:47.620 --> 00:12:50.040
Also ich glaube, das fällt einem als Data Scientist auch schon,

00:12:50.140 --> 00:12:53.420
manchmal schwer, so richtig dieses Business Understanding aufzubauen.

00:12:53.420 --> 00:12:57.360
Aber ja, wenn man so reine Softwareentwicklung macht,

00:12:57.360 --> 00:13:00.840
ist es, glaube ich, noch mal schwieriger, in den Daten drin zu sein und die zu interpretieren

00:13:00.840 --> 00:13:03.180
und zu sagen, Moment mal, also die Kurve sieht ja echt komisch aus.

00:13:03.180 --> 00:13:07.960
Aber also eigentlich mag ich es total gerne, wenn das Team gemischt ist,

00:13:07.960 --> 00:13:13.000
weil auch nicht alle Data Scientists so richtig auf guten Code achten.

00:13:13.000 --> 00:13:17.600
Also es ist uns sehr wichtig und wenn jemand halt noch nicht so gut programmieren kann

00:13:17.600 --> 00:13:20.000
und aus dem Studium kommt, weil es einsteigt, dann ist es das,

00:13:20.020 --> 00:13:21.860
was die Person dann lernt, so wie ich damals.

00:13:21.860 --> 00:13:26.180
Aber ich glaube, das ist auch nicht überall so verbreitet,

00:13:26.180 --> 00:13:27.860
weil manche haben dann eher einen Schwerpunkt auf so Datenanalysen,

00:13:27.860 --> 00:13:30.720
sind vielen Notebooks unterwegs und wenn sie dann fertig sind,

00:13:30.720 --> 00:13:33.100
dann wird das Notebook in irgendeinen Job eingebunden

00:13:33.100 --> 00:13:36.720
und das ist dann die Automatisierung und das kann manchmal funktionieren,

00:13:36.720 --> 00:13:38.380
aber oft ist es auch ziemlich wackelig.

00:13:38.380 --> 00:13:42.120
Ja, interessant.

00:13:42.120 --> 00:13:47.900
Also da ist auf jeden Fall oft so ein bisschen ein Graben zwischen den Welten.

00:13:47.900 --> 00:13:49.900
Also wenn ich das mal sehe,

00:13:49.900 --> 00:13:51.320
was so Data Scientists schreiben,

00:13:51.320 --> 00:13:52.860
dann steige ich mir die Hände über den Kopf.

00:13:52.860 --> 00:13:54.780
Es gibt natürlich Unterschiede,

00:13:54.780 --> 00:13:58.780
aber das ist immer so im Vergleich eher anders,

00:13:58.780 --> 00:14:00.820
als ich das machen würde wahrscheinlich.

00:14:00.820 --> 00:14:03.840
Also man schreibt als Data Scientist oft so die ganzen Prozesse untereinander

00:14:03.840 --> 00:14:06.560
und muss erst mal lernen, die Methoden zu definieren und so.

00:14:06.560 --> 00:14:09.980
Und warum soll man denn, also wenn man das nur einmal macht,

00:14:09.980 --> 00:14:11.400
warum soll man denn eine Funktion schreiben?

00:14:11.400 --> 00:14:13.360
Man kann es ja Zeit für Zeit ausführen

00:14:13.360 --> 00:14:16.340
und die Funktion braucht man ja nur, wenn man zweimal dasselbe macht.

00:14:16.340 --> 00:14:18.980
So ist dann, glaube ich, manchmal die Denkweise,

00:14:18.980 --> 00:14:19.580
wenn man eben,

00:14:19.780 --> 00:14:21.600
wenn man einfach mehr aus der Analyse kommt

00:14:21.600 --> 00:14:22.800
und da so quer einsteigt.

00:14:22.800 --> 00:14:24.500
Ich finde das immer einfach manchmal,

00:14:24.500 --> 00:14:25.920
wenn Leute schon promoviert haben

00:14:25.920 --> 00:14:26.360
und das ist,

00:14:26.360 --> 00:14:28.700
die haben total krasse Sachen gemacht,

00:14:28.700 --> 00:14:30.960
aber können dann halt auch keinen guten Code schreiben,

00:14:30.960 --> 00:14:33.460
weil es für die Doktorarbeit eben ganz andere Anforderungen hat.

00:14:33.460 --> 00:14:34.960
Ja, da ist auch oft,

00:14:34.960 --> 00:14:37.280
also gerade Physiker,

00:14:37.280 --> 00:14:38.660
die sind da ja oft eher so verdorben.

00:14:38.660 --> 00:14:40.820
Die haben dann irgendwie Vortragen geschrieben oder sowas.

00:14:40.820 --> 00:14:42.540
Oder C++,

00:14:42.540 --> 00:14:43.940
das ist auch nicht viel besser.

00:14:43.940 --> 00:14:45.620
Und dann, ja genau,

00:14:45.620 --> 00:14:47.380
bringen sie da so schlechte Gewohnheiten mit.

00:14:47.380 --> 00:14:49.520
Das ist natürlich oft,

00:14:49.660 --> 00:14:50.220
irgendwie so ein bisschen,

00:14:50.220 --> 00:14:51.280
ja, aber,

00:14:51.280 --> 00:14:51.860
ja, ja.

00:14:51.860 --> 00:14:53.080
Aber das ist auch so ein bisschen,

00:14:53.080 --> 00:14:54.200
man lernt das ja auch nirgendwo,

00:14:54.200 --> 00:14:56.460
außer wenn man jetzt irgendwie quasi bei einer Firma anfängt,

00:14:56.460 --> 00:14:58.940
die das halt auch irgendwie täglich macht oder so.

00:14:58.940 --> 00:15:00.760
Bei den meisten Firmen gibt es ja da gar keine Kultur.

00:15:00.760 --> 00:15:03.440
Und ja, also es ist irgendwie,

00:15:03.440 --> 00:15:04.760
ja, es ist irgendwie,

00:15:04.760 --> 00:15:06.860
also dieses Handwerkszeug ist ein Problem oft.

00:15:06.860 --> 00:15:07.740
Das denke ich auch.

00:15:07.740 --> 00:15:08.940
Was nervt dich denn an Leuten,

00:15:08.940 --> 00:15:10.360
die Softwareentwicklung gemacht haben,

00:15:10.360 --> 00:15:11.760
die jetzt Data Scientists sind?

00:15:11.760 --> 00:15:13.380
Ja, das ist auch interessant, ja.

00:15:13.380 --> 00:15:14.960
Also, ja, also die Sachen,

00:15:14.960 --> 00:15:16.300
die ich gerade genannt habe,

00:15:16.300 --> 00:15:17.100
also es ist oft so,

00:15:17.100 --> 00:15:19.540
die Ergebnisse so unkritisch beurteilt werden,

00:15:19.540 --> 00:15:20.620
dass man eigentlich nur guckt,

00:15:20.620 --> 00:15:21.880
ob der Code richtig läuft

00:15:21.880 --> 00:15:23.520
und das macht,

00:15:23.520 --> 00:15:24.740
was man implementieren wollte.

00:15:24.740 --> 00:15:26.320
Und dass eben,

00:15:26.320 --> 00:15:28.200
ja, man dann nicht unbedingt erkennt,

00:15:28.200 --> 00:15:30.100
dass die Ergebnisse eigentlich unplausibel sind.

00:15:30.100 --> 00:15:30.500
Zum Beispiel,

00:15:30.500 --> 00:15:31.940
dass das Modell viel zu gut ist

00:15:31.940 --> 00:15:33.740
und da muss irgendwo was falsch sein.

00:15:33.740 --> 00:15:37.780
Die Kirchturmspitze ist 245 Meter im Minus.

00:15:37.780 --> 00:15:37.960
Bitte?

00:15:37.960 --> 00:15:40.280
Du könntest erst mal die Kirchturmspitze ausrechnen,

00:15:40.280 --> 00:15:42.380
dass die Höhe dann 245 Minus ist.

00:15:42.380 --> 00:15:44.500
Und wenn man das dann einfach so übernimmt

00:15:44.500 --> 00:15:45.100
und daran glaubt.

00:15:45.100 --> 00:15:45.820
Ja, genau.

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

00:15:49.420 --> 00:15:50.720
Manchmal habe ich auch den Eindruck,

00:15:50.720 --> 00:15:52.320
dass dann wiederum,

00:15:52.320 --> 00:15:53.280
wenn man sehr,

00:15:53.280 --> 00:15:55.760
sehr stolz auf seine Software-Entwicklung-Skills ist,

00:15:55.760 --> 00:15:57.900
dass dann auch unnötig komplizierte Patterns

00:15:57.900 --> 00:15:59.360
auf irgendwelche Sachen geworfen werden

00:15:59.360 --> 00:16:01.500
und das dann auch wieder so pragmatisch ist

00:16:01.500 --> 00:16:03.160
und sehr schwer wartbar.

00:16:03.160 --> 00:16:04.680
Ja, klar,

00:16:04.680 --> 00:16:05.300
weil die Leute,

00:16:05.300 --> 00:16:08.620
die das dann letztlich irgendwie ja benutzen müssen,

00:16:08.620 --> 00:16:10.740
müssen das ja auch lesen und verstehen können und so.

00:16:10.740 --> 00:16:11.540
Und wenn man dann irgendwas

00:16:11.540 --> 00:16:13.560
in einem Elfenbeinturm baut,

00:16:13.560 --> 00:16:14.560
dann, ja,

00:16:14.560 --> 00:16:16.740
war das vielleicht auch einfach am Ziel vorbei.

00:16:16.740 --> 00:16:18.840
Wenn man auch neue Pattern gelernt hat,

00:16:18.840 --> 00:16:19.400
muss man die auch erst mal,

00:16:19.400 --> 00:16:20.220
überall anwenden, ja.

00:16:20.220 --> 00:16:20.620
Ja, klar,

00:16:20.620 --> 00:16:21.740
das sollte ich auch machen, ja.

00:16:21.740 --> 00:16:26.560
Ja, aber grundsätzlich machen das eigentlich total Spaß,

00:16:26.560 --> 00:16:29.140
mit Software-Entwicklern zusammenzuarbeiten.

00:16:29.140 --> 00:16:31.020
Du hast gesagt,

00:16:31.020 --> 00:16:33.060
er visualisiert irgendwie Sachen zwar nicht so oft,

00:16:33.060 --> 00:16:33.520
nicht so gerne,

00:16:33.520 --> 00:16:34.120
aber er macht das.

00:16:34.120 --> 00:16:34.960
Wie denn?

00:16:34.960 --> 00:16:36.520
Also, ich kenne irgendwie so eine coole Seite,

00:16:36.520 --> 00:16:37.580
die wollte ich irgendwie nochmals hin,

00:16:37.580 --> 00:16:40.160
das ist irgendwie datatowiz.com oder sowas.

00:16:40.160 --> 00:16:41.400
Die benutze ich immer,

00:16:41.400 --> 00:16:41.960
wenn ich nicht weiß.

00:16:41.960 --> 00:16:42.180
Ich kann nicht sagen,

00:16:42.180 --> 00:16:42.920
dass ich so gerne.

00:16:42.920 --> 00:16:43.560
Also,

00:16:43.560 --> 00:16:47.400
er macht es durch die ganze Zeit,

00:16:47.400 --> 00:16:49.220
aber es ist an verschiedenen Stellen eigentlich,

00:16:49.380 --> 00:16:50.020
total wichtig,

00:16:50.020 --> 00:16:50.980
also zuerst mal,

00:16:50.980 --> 00:16:52.420
wenn man die Daten reinbekommt,

00:16:52.420 --> 00:16:55.720
dann sind wir jetzt eigentlich schon so mitten im typischen Ablauf,

00:16:55.720 --> 00:16:56.280
aber ich kann da,

00:16:56.280 --> 00:16:57.340
da wollen wir zwar noch darüber sprechen,

00:16:57.340 --> 00:16:58.420
da kann er gerne mal vorgreifen,

00:16:58.420 --> 00:16:59.480
also wenn die Daten reinkommen

00:16:59.480 --> 00:17:00.220
und man gucken will,

00:17:00.220 --> 00:17:02.320
ob die sinnvoll sind,

00:17:02.320 --> 00:17:03.780
wenn man die Daten kennenlernen will,

00:17:03.780 --> 00:17:05.060
Zusammenhänge prüfen und so,

00:17:05.060 --> 00:17:07.240
dann ist natürlich Visualisierung einfach das Allerbeste,

00:17:07.240 --> 00:17:07.540
klar,

00:17:07.540 --> 00:17:08.100
ist auch ganz nett,

00:17:08.100 --> 00:17:11.480
so Mittelwerte und Ausgleichsmaßnahmen

00:17:11.480 --> 00:17:12.660
und Minimum zu sich anzugucken,

00:17:12.660 --> 00:17:13.860
zum Beispiel,

00:17:13.860 --> 00:17:16.460
ob der kleinste Kirchturm auch wirklich größer als 0 Meter ist,

00:17:16.460 --> 00:17:18.120
aber es macht natürlich auch total Sinn,

00:17:18.120 --> 00:17:19.360
sich da die Verteilung mal zu gucken,

00:17:19.360 --> 00:17:20.420
Plotten und Zusammenhänge

00:17:20.420 --> 00:17:21.500
und das sind auch die Sachen,

00:17:21.500 --> 00:17:23.780
die wir dann oft mit unseren Kunden wiederum anschauen

00:17:23.780 --> 00:17:24.140
und sagen,

00:17:24.140 --> 00:17:24.580
guck mal hier,

00:17:24.580 --> 00:17:25.040
die Verteilung,

00:17:25.040 --> 00:17:25.540
macht die Sinn

00:17:25.540 --> 00:17:27.220
und merken dann vielleicht,

00:17:27.220 --> 00:17:29.180
dass da irgendwas in den Daten unsauber ist,

00:17:29.180 --> 00:17:30.680
was halt oft vorkommt,

00:17:30.680 --> 00:17:32.220
womit man dann aber irgendwie umgehen muss

00:17:32.220 --> 00:17:34.660
und natürlich auch dann später,

00:17:34.660 --> 00:17:37.120
wenn wir zum Beispiel ein Modell gebaut haben

00:17:37.120 --> 00:17:39.100
und die Ergebnisse untersuchen wollen,

00:17:39.100 --> 00:17:41.000
wie sind unsere Prognosen verteilt,

00:17:41.000 --> 00:17:43.000
welche Zusammenhänge hat das Modell gefunden,

00:17:43.000 --> 00:17:45.760
auch da ist dann natürlich die Visualisierung total wichtig

00:17:45.760 --> 00:17:47.580
und sinnvoll

00:17:47.580 --> 00:17:48.640
oder das einfach,

00:17:49.340 --> 00:17:51.400
man kann es einfach viel, viel, viel schneller erfassen,

00:17:51.400 --> 00:17:53.560
als wenn man das irgendwie alles versucht,

00:17:53.560 --> 00:17:55.240
in Tabellen zu vermitteln.

00:17:55.240 --> 00:17:57.440
Wie visualisiert ihr denn am liebsten?

00:17:57.440 --> 00:18:01.360
Ja, es ist irgendwie ganz witzig,

00:18:01.360 --> 00:18:05.320
weil ich in Python noch nie so richtig,

00:18:05.320 --> 00:18:07.520
ja gut, so ein bisschen habe ich auch in Python,

00:18:07.520 --> 00:18:10.340
aber wir haben früher sehr viel,

00:18:10.340 --> 00:18:13.300
da waren auch weniger mit Dashboards und so weiter,

00:18:13.300 --> 00:18:13.960
da war es oft noch so,

00:18:13.960 --> 00:18:15.360
dass wir so einen Datendump bekommen haben

00:18:15.360 --> 00:18:16.560
und hatten damit dann was gemacht

00:18:16.560 --> 00:18:17.780
und da waren wir noch in R unterwegs

00:18:17.780 --> 00:18:19.320
und haben für ggplot2,

00:18:19.320 --> 00:18:19.840
ggpl benutzt

00:18:19.840 --> 00:18:24.400
und inzwischen sind wir dann meistens

00:18:24.400 --> 00:18:26.740
in einem Dashboard-System unterwegs,

00:18:26.740 --> 00:18:29.300
das halt beim Kunden einfach genutzt wird,

00:18:29.300 --> 00:18:31.660
sodass wir dann in dem Tool,

00:18:31.660 --> 00:18:33.320
was der benutzt, das implementieren,

00:18:33.320 --> 00:18:36.000
weil das jetzt in AWS oder Azure

00:18:36.000 --> 00:18:36.920
oder was auch immer die nutzen

00:18:36.920 --> 00:18:38.520
und wir machen dann da das,

00:18:38.520 --> 00:18:40.400
was da in dem System gewünscht ist.

00:18:40.400 --> 00:18:43.980
Wir haben auch ein paar Dashboards mal gebaut

00:18:43.980 --> 00:18:44.420
in,

00:18:44.420 --> 00:18:46.400
wie heißt das denn jetzt noch?

00:18:46.400 --> 00:18:48.440
Ich habe den Namen leider vergessen.

00:18:48.440 --> 00:18:48.840
Notley Dash,

00:18:48.840 --> 00:18:49.300
oder?

00:18:49.300 --> 00:18:50.700
Das ist Redash, genau.

00:18:50.700 --> 00:18:52.580
Redash ist ein Open-Source-Tool.

00:18:52.580 --> 00:18:55.680
Das benutzen wir dann auch ganz gerne.

00:18:55.680 --> 00:18:57.420
Da kann man dann auch gerade praktischerweise

00:18:57.420 --> 00:18:58.700
noch Alarme dazu definieren,

00:18:58.700 --> 00:18:59.900
um seine Daten zu überwachen.

00:18:59.900 --> 00:19:01.960
Das nutzen wir auch sehr gerne.

00:19:01.960 --> 00:19:03.140
Okay.

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

00:19:07.460 --> 00:19:08.520
Ihr habt jetzt irgendwie Daten,

00:19:08.520 --> 00:19:10.000
ich glaube, du wolltest auch noch mal drauf eingehen.

00:19:10.000 --> 00:19:10.980
Ja, gerne.

00:19:10.980 --> 00:19:12.420
Und so einen Auftrag und dann?

00:19:12.420 --> 00:19:15.440
Also klar, manchmal steigen wir auch mittendrin ein,

00:19:15.440 --> 00:19:17.040
aber ich fange jetzt trotzdem mal vorne an.

00:19:17.040 --> 00:19:18.440
Oft sind wir auch vorne dabei.

00:19:18.440 --> 00:19:19.280
Das ist jetzt so ein bisschen

00:19:19.280 --> 00:19:21.300
vor allem aus meiner Sicht als Beraterin.

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

00:19:22.740 --> 00:19:24.340
wenn man im Unternehmen als Data Science

00:19:24.340 --> 00:19:25.240
die ganze Zeit ist.

00:19:25.240 --> 00:19:28.200
Aber für mich als Beraterin sind das so,

00:19:28.200 --> 00:19:29.800
ja, eigentlich so sieben Schritte.

00:19:29.800 --> 00:19:31.340
Erstmal das Problemverständnis,

00:19:31.340 --> 00:19:35.120
dann die Daten einzusammeln und zu verstehen,

00:19:35.120 --> 00:19:36.460
dann Datenaufbereitung,

00:19:36.460 --> 00:19:37.500
dann kommt die Modellierung.

00:19:37.500 --> 00:19:38.560
Man merkt, das ist nur ein Schritt,

00:19:38.560 --> 00:19:39.260
diese Modellierung.

00:19:39.260 --> 00:19:40.300
Oft denkt man, das ist zu viel,

00:19:40.300 --> 00:19:41.540
aber es ist nur ein kleiner Schritt.

00:19:41.540 --> 00:19:44.160
Dann die Evaluation des Modells

00:19:44.160 --> 00:19:46.420
und dann gehört eigentlich dazu ja auch

00:19:46.420 --> 00:19:48.660
noch eine Automatisierung und Monitoring

00:19:48.660 --> 00:19:49.260
und Wartung.

00:19:49.260 --> 00:19:50.480
Wobei die letzten zwei Schritte

00:19:50.480 --> 00:19:51.440
natürlich vom Aufwand her

00:19:51.440 --> 00:19:53.860
nochmal einen sehr, sehr großen Teil einnehmen.

00:19:53.860 --> 00:19:56.140
Das ist auch jetzt angelehnt

00:19:56.140 --> 00:19:58.640
an den CRISP-DM, wenn das was sagt.

00:19:58.640 --> 00:20:00.880
Das ist der Cross-Industry Stand-Up Process

00:20:00.880 --> 00:20:01.960
for Data Mining.

00:20:01.960 --> 00:20:03.920
Data Mining klingt so ein bisschen angestaubt,

00:20:03.920 --> 00:20:04.280
der Begriff,

00:20:04.280 --> 00:20:07.480
aber man könnte es halt einfach

00:20:07.480 --> 00:20:10.000
Datenprojekte nennen.

00:20:10.000 --> 00:20:13.520
Und ja, am Anfang,

00:20:13.520 --> 00:20:15.140
es ist bei uns dann tatsächlich auch so,

00:20:15.140 --> 00:20:16.580
dass KundInnen zu uns kommen

00:20:16.580 --> 00:20:18.500
und schon was haben,

00:20:18.500 --> 00:20:19.240
was sie haben,

00:20:19.240 --> 00:20:21.180
also sagt schon das, was sie brauchen.

00:20:21.180 --> 00:20:24.540
Das geht dann auch in die richtige Richtung.

00:20:24.540 --> 00:20:25.840
Manchmal macht es aber trotzdem Sinn,

00:20:25.840 --> 00:20:27.560
sich das nochmal genauer anzuschauen

00:20:27.560 --> 00:20:30.380
und zu verstehen, warum sie das brauchen

00:20:30.380 --> 00:20:31.500
und was sie wirklich brauchen.

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

00:20:34.860 --> 00:20:36.620
Und ich meine,

00:20:36.620 --> 00:20:38.240
zu diesem Thema kann man ganze Workshops,

00:20:38.240 --> 00:20:39.760
mehrtägige Workshops machen.

00:20:39.760 --> 00:20:41.580
Es gibt ganze Unternehmen, die nichts anderes machen,

00:20:41.580 --> 00:20:43.820
als Use Cases zu identifizieren und zu prüfen.

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

00:20:46.960 --> 00:20:48.040
aber das ist nicht unser Schwerpunkt.

00:20:48.040 --> 00:20:49.220
Also ist das meistens dann schon

00:20:49.220 --> 00:20:51.280
eher so, dass da schon Ideen da sind.

00:20:51.280 --> 00:20:53.300
Wir aber das auch alles nochmal so ein bisschen challengen

00:20:53.300 --> 00:20:55.260
und einen Kick-Off haben,

00:20:55.260 --> 00:20:57.560
wo wir mit den Kunden sprechen,

00:20:57.560 --> 00:20:59.020
um das Geschäftsmodell zu verstehen,

00:20:59.020 --> 00:21:00.120
um genau zu verstehen,

00:21:00.120 --> 00:21:02.600
wer das eigentlich nutzen wird,

00:21:02.600 --> 00:21:03.960
was die genau machen wollen.

00:21:03.960 --> 00:21:05.760
Es ist natürlich total wichtig,

00:21:05.760 --> 00:21:06.900
dass wir eben prüfen,

00:21:06.900 --> 00:21:08.120
was brauchen die wirklich genau

00:21:08.120 --> 00:21:09.880
und brauchen die zum Beispiel vielleicht was in Echtzeit.

00:21:09.880 --> 00:21:11.140
Dann ist es natürlich ganz anders,

00:21:11.140 --> 00:21:12.260
als wenn das ausreicht,

00:21:12.260 --> 00:21:14.540
dass man jeden Morgen einmal aktuelle Werte berechnet.

00:21:14.540 --> 00:21:17.700
Und wer sitzt da

00:21:17.700 --> 00:21:19.200
und wo benutzen wir es genauer?

00:21:19.200 --> 00:21:21.600
Ist es irgendwo an einem Counter

00:21:21.600 --> 00:21:23.980
oder ist es am Telefon

00:21:23.980 --> 00:21:24.960
oder ist es irgendwo,

00:21:24.960 --> 00:21:26.680
wo es kein gutes Internet gibt und so.

00:21:26.680 --> 00:21:27.880
Und all das muss man natürlich wissen,

00:21:27.880 --> 00:21:29.260
um auch rauszufinden, was die brauchen.

00:21:29.260 --> 00:21:32.740
Und dann ist der nächste Schritt,

00:21:32.740 --> 00:21:34.100
sich zu überlegen, wie können wir das machen

00:21:34.100 --> 00:21:35.760
und haben wir eigentlich auch die passenden Daten.

00:21:35.760 --> 00:21:38.960
Und dann haben wir vielleicht die notwendigen Daten

00:21:38.960 --> 00:21:41.380
und ein paar andere Sachen sind vielleicht nicht ganz so notwendig.

00:21:41.380 --> 00:21:42.560
Man kann trotzdem anfangen.

00:21:42.560 --> 00:21:45.860
Ja, das ist der erste Schritt

00:21:45.860 --> 00:21:48.560
und den sollte man sich unterschätzen.

00:21:49.180 --> 00:21:49.680
Braucht ihr die dann auch?

00:21:49.680 --> 00:21:52.040
Also baut ihr irgendwo neue Sensoren ein oder sowas

00:21:52.040 --> 00:21:52.840
und kümmert euch darum,

00:21:52.840 --> 00:21:54.300
dass sie in irgendwelchen Datenbanken landen,

00:21:54.300 --> 00:21:56.280
die ihr dann zur Auswertung mit benutzt

00:21:56.280 --> 00:21:57.820
oder geht ihr davon aus,

00:21:57.820 --> 00:21:59.720
dass das Business alles mit besorgt?

00:21:59.720 --> 00:22:01.440
Es ist normalerweise so,

00:22:01.440 --> 00:22:02.540
dass die Daten schon da sind

00:22:02.540 --> 00:22:08.000
und dadurch, dass wir ja auch eher komplexe Fragestellungen beantworten,

00:22:08.000 --> 00:22:10.020
sind das in der Regel halt auch Kunden,

00:22:10.020 --> 00:22:12.000
die schon mit den Daten irgendwas gemacht haben.

00:22:12.000 --> 00:22:15.040
Natürlich kennen die nicht jede Datenquelle von vorn bis hinten auswendig

00:22:15.040 --> 00:22:16.420
und man findet immer noch Überraschungen.

00:22:16.420 --> 00:22:19.040
Aber das ist dann normalerweise

00:22:19.040 --> 00:22:20.040
so, dass sie sagen,

00:22:20.040 --> 00:22:22.260
wir wollen hier dieses superkomplexe Modell,

00:22:22.260 --> 00:22:23.340
aber wir haben noch gar keine Daten,

00:22:23.340 --> 00:22:24.260
wir müssen die erstmal sammeln.

00:22:24.260 --> 00:22:26.000
Normalerweise sind die da schon

00:22:26.000 --> 00:22:29.280
relativ weit oben auf der Datenreifeskala

00:22:29.280 --> 00:22:30.700
und selbst wenn nicht,

00:22:30.700 --> 00:22:31.880
sind die Daten meistens schon da,

00:22:31.880 --> 00:22:33.280
weil ganz viele Daten ja einfach

00:22:33.280 --> 00:22:35.080
automatisch mitgesammelt werden.

00:22:35.080 --> 00:22:36.040
Zum Beispiel im Online-Shop

00:22:36.040 --> 00:22:37.340
hat man natürlich jede Menge Daten

00:22:37.340 --> 00:22:38.840
über vergangene Bestellungen und so weiter.

00:22:38.840 --> 00:22:40.820
Also die Daten sind eigentlich immer schon da.

00:22:40.820 --> 00:22:42.140
Die Frage ist nur,

00:22:42.140 --> 00:22:44.520
sind die Daten da, die man braucht

00:22:44.520 --> 00:22:45.440
und wenn sie nicht da sind,

00:22:45.440 --> 00:22:46.880
dann ist das erstmal noch ein weiter Weg normalerweise,

00:22:46.880 --> 00:22:49.020
weil vielleicht ist es nicht mehr ein richtiges Ding,

00:22:49.020 --> 00:22:49.860
da ist ein weiterer Warehouse da

00:22:49.860 --> 00:22:51.620
oder man kann die nochmal zusammenführen.

00:22:51.620 --> 00:22:53.860
Das ist oft dann,

00:22:53.860 --> 00:22:55.400
dann ist es noch ein weiterer Weg,

00:22:55.400 --> 00:22:57.240
bis wir da tatsächlich loslegen können.

00:22:57.240 --> 00:22:59.160
Wie würdest du denn

00:22:59.160 --> 00:23:01.460
so ein neues Unternehmen strukturieren,

00:23:01.460 --> 00:23:03.580
wenn du darauf achten würdest,

00:23:03.580 --> 00:23:06.420
dass du ordentliche Daten irgendwann brauchst?

00:23:06.420 --> 00:23:07.560
Würdest du direkt hingehen

00:23:07.560 --> 00:23:09.020
und das alles vom Scratch implementieren

00:23:09.020 --> 00:23:11.960
mit dem, was du am besten hältst

00:23:11.960 --> 00:23:13.500
oder würdest du das erstmal egal,

00:23:13.500 --> 00:23:14.100
das wachsen lassen

00:23:14.100 --> 00:23:16.020
und dann irgendwie zusammenflanschen?

00:23:16.020 --> 00:23:17.220
Also ich glaube,

00:23:17.220 --> 00:23:18.700
das kommt darauf an,

00:23:18.880 --> 00:23:21.100
wie sehr das Geschäftsmodell von Daten abhängt.

00:23:21.100 --> 00:23:22.180
Also wenn das ein Unternehmen ist,

00:23:22.180 --> 00:23:24.020
das irgendwelche Gegenstände produziert,

00:23:24.020 --> 00:23:24.660
dann denke ich,

00:23:24.660 --> 00:23:25.800
ist es nicht ganz so wichtig,

00:23:25.800 --> 00:23:27.860
dass man ganz viele Daten sammelt.

00:23:27.860 --> 00:23:29.800
Dann kann man sich erstmal darauf konzentrieren

00:23:29.800 --> 00:23:31.160
und dann nach und nach einsteigen.

00:23:31.160 --> 00:23:32.360
Aber es gibt ja auch Geschäftsmodelle,

00:23:32.360 --> 00:23:34.540
die eigentlich nur so gut funktionieren,

00:23:34.540 --> 00:23:36.620
weil mit Daten gearbeitet wird

00:23:36.620 --> 00:23:39.160
und dann muss das wahrscheinlich von Anfang an

00:23:39.160 --> 00:23:40.580
auch berücksichtigt werden.

00:23:40.580 --> 00:23:41.880
Also ich habe ja noch nie ein Unternehmen gegründet.

00:23:41.880 --> 00:23:43.360
Ich bin ja geschickt erst eingestiegen,

00:23:43.360 --> 00:23:44.620
als das Unternehmen schon da war.

00:23:44.620 --> 00:23:46.360
Aber ich vermute,

00:23:46.360 --> 00:23:48.860
wenn man sowas wie Amazon oder so,

00:23:48.860 --> 00:23:50.860
also da wurde ja von Anfang an wahrscheinlich mitgedacht,

00:23:50.860 --> 00:23:53.020
was man da mit Daten machen kann

00:23:53.020 --> 00:23:54.340
oder zumindest relativ früh dann.

00:23:54.340 --> 00:23:56.700
Und was für Technologien benutzt ihr so

00:23:56.700 --> 00:23:58.480
mit Python für diese einzelnen Schritte?

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

00:24:03.220 --> 00:24:06.860
Von der Datenaufbereitung über die Modellierung,

00:24:06.860 --> 00:24:09.420
da kommt dann auch sowas wie Scikit-Learn dazu

00:24:09.420 --> 00:24:11.400
oder TensorFlow, Keras, PyTrips,

00:24:11.400 --> 00:24:13.000
eigentlich so die Klassiker.

00:24:13.000 --> 00:24:15.380
Pandas ist ein interessantes Thema,

00:24:15.380 --> 00:24:16.500
weil Pandas,

00:24:16.500 --> 00:24:18.840
also wer schon mal mit Pandas im Kurs ist,

00:24:18.840 --> 00:24:19.940
man Daten gearbeitet hat,

00:24:19.940 --> 00:24:21.040
denkt sich jetzt um Himmels Willen,

00:24:21.040 --> 00:24:21.920
ich will es nicht mehr hören,

00:24:21.920 --> 00:24:24.900
weil Pandas halt sehr, sehr viel Arbeitsspeicher braucht,

00:24:24.900 --> 00:24:26.260
wenn die Datensätze größer sind.

00:24:26.260 --> 00:24:27.840
Es ist aber natürlich zu Prototypen

00:24:27.840 --> 00:24:30.880
oder generell für kleine Datensätze total super,

00:24:30.880 --> 00:24:32.040
weil es ganz, ganz viel kann

00:24:32.040 --> 00:24:34.080
und weil man auch ganz viel im Netz findet.

00:24:34.080 --> 00:24:37.560
Also genau, wenn die Daten aber größer werden,

00:24:37.560 --> 00:24:40.260
dann hat man natürlich das Arbeitsspeicherproblem

00:24:40.260 --> 00:24:42.440
und dann ist der Klassiker natürlich

00:24:42.440 --> 00:24:45.080
auf Spark, PySpark umzusteigen,

00:24:45.080 --> 00:24:48.060
was auch jetzt in letzter Zeit

00:24:48.060 --> 00:24:48.820
ganz gut funktioniert.

00:24:48.840 --> 00:24:50.220
Also das ist natürlich toll,

00:24:50.220 --> 00:24:51.280
weil es ganz verteilt ist,

00:24:51.280 --> 00:24:53.160
wobei es nicht unbedingt schnell ist,

00:24:53.160 --> 00:24:54.000
aber es kann halt eben

00:24:54.000 --> 00:24:55.280
mit großen Datensätzen umgehen

00:24:55.280 --> 00:24:55.920
und man hat erstmal

00:24:55.920 --> 00:24:57.920
dieses Arbeitsspeicherproblem gelöst,

00:24:57.920 --> 00:24:59.680
was man eben mit Pandas

00:24:59.680 --> 00:25:01.460
irgendwann eigentlich gar nicht mehr lösen kann.

00:25:01.460 --> 00:25:04.420
Und dann gibt es jetzt natürlich noch so halt...

00:25:04.420 --> 00:25:05.160
Aber ich meine,

00:25:05.160 --> 00:25:06.900
die Erfahrung, die ich oft mache,

00:25:06.900 --> 00:25:07.480
ist, dass man die,

00:25:07.480 --> 00:25:11.660
bei vielen so kategorialen Variablen oder so,

00:25:11.660 --> 00:25:12.920
die kann man dann halt auf irgendwie

00:25:12.920 --> 00:25:15.540
einen kleineren Datentyp

00:25:15.540 --> 00:25:17.560
irgendwie runter komprimieren

00:25:17.560 --> 00:25:18.640
oder halt oft hat man dann

00:25:18.640 --> 00:25:20.800
halt irgendwie für viele, oder wenn man jetzt nur

00:25:20.800 --> 00:25:22.840
Flex hat, irgendwie ja oder nein

00:25:22.840 --> 00:25:24.620
oder so, wenn man da nur ein Bit nimmt, ist halt

00:25:24.620 --> 00:25:26.480
sehr viel weniger, als wenn man da irgendwie ein volles

00:25:26.480 --> 00:25:27.680
Integer oder so für nimmt.

00:25:27.680 --> 00:25:30.660
Oft hilft das

00:25:30.660 --> 00:25:32.020
dann schon, aber ja, stimmt.

00:25:32.020 --> 00:25:34.520
Aber manchmal, wenn man die Daten einliest, dann

00:25:34.520 --> 00:25:36.620
je nachdem kann man das, glaube ich, gar nicht unbedingt

00:25:36.620 --> 00:25:38.320
spezifizieren am Anfang und dann sind die

00:25:38.320 --> 00:25:38.940
einfach groß.

00:25:38.940 --> 00:25:41.460
Oder auch selbst wenn, also ich meine,

00:25:41.460 --> 00:25:44.720
so mehrere Jahre stündliche Verkaufsdaten

00:25:44.720 --> 00:25:46.880
von ganz vielen Artikeln aus ganz vielen Filialen

00:25:46.880 --> 00:25:47.620
aus mehreren Ländern.

00:25:48.640 --> 00:25:50.140
Dann, ja,

00:25:50.140 --> 00:25:52.580
dann wird es irgendwie schwierig

00:25:52.580 --> 00:25:54.260
und dann ist das Verteilte schon gut.

00:25:54.260 --> 00:25:56.300
Und dann gibt es halt noch Polars,

00:25:56.300 --> 00:25:58.040
womit man dann auch

00:25:58.040 --> 00:26:00.440
oft schneller ist und halt auch weniger

00:26:00.440 --> 00:26:01.740
Arbeitsspeicher braucht.

00:26:01.740 --> 00:26:04.140
Also wenn du das nicht kennst, Polars, das ist ein Rust

00:26:04.140 --> 00:26:06.560
nachgeschrieben mit der gleichen API, so ein bisschen wie Pandas.

00:26:06.560 --> 00:26:08.300
Ja, es ist, ne, es hat

00:26:08.300 --> 00:26:09.960
sehr viel saubere, also kleinere,

00:26:09.960 --> 00:26:11.980
es hat weniger Funktionen, aber es ist halt

00:26:11.980 --> 00:26:14.260
auch ein bisschen konsistenter, weil

00:26:14.260 --> 00:26:16.160
Pandas ist halt auch irgendwie sehr stark

00:26:16.160 --> 00:26:18.160
so historisch gewachsen

00:26:18.160 --> 00:26:19.660
und man wusste noch nie genau, wo man hin will

00:26:19.660 --> 00:26:21.720
und dann teilweise inkonsistent und

00:26:21.720 --> 00:26:22.220
ja,

00:26:22.220 --> 00:26:25.520
ja, Pandas ist halt, ja.

00:26:25.520 --> 00:26:27.420
Wie das halt so ist. Genau, wie das halt so ist.

00:26:27.420 --> 00:26:29.660
Ich habe noch gar nicht so viel mit Polars

00:26:29.660 --> 00:26:31.660
gearbeitet. Ich weiß gar nicht, ob die

00:26:31.660 --> 00:26:33.460
eigentlich schon das Ziel haben, da die

00:26:33.460 --> 00:26:35.740
meisten Funktionen aus Pandas

00:26:35.740 --> 00:26:37.480
auch zu implementieren oder ob die vielleicht sogar

00:26:37.480 --> 00:26:39.020
sagen, es soll schlanker bleiben, weiß ich gar nicht.

00:26:39.020 --> 00:26:41.280
Ich meine, also sie sind absichtlich,

00:26:41.280 --> 00:26:43.480
wollen sie nicht komplett irgendwie alles

00:26:43.480 --> 00:26:45.400
machen, was Pandas halt kann, sondern

00:26:45.400 --> 00:26:47.720
ja, quasi bei den

00:26:47.720 --> 00:26:49.500
Basisgeschichten so schnell sein, dass man

00:26:49.500 --> 00:26:51.500
halt daraus alles bauen kann, aber

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

00:26:53.420 --> 00:26:55.420
Benutzt ihr auch dann

00:26:55.420 --> 00:26:57.180
zwischendurch noch Pure NumPy oder?

00:26:57.180 --> 00:26:59.560
Ja, manchmal so für kleine Sachen,

00:26:59.560 --> 00:27:01.780
wo es gerade Sinn macht.

00:27:01.780 --> 00:27:03.600
Oft

00:27:03.600 --> 00:27:05.620
sind ja, ist man mit Datensätzen unterwegs

00:27:05.620 --> 00:27:07.360
und dann passiert es halt meistens

00:27:07.360 --> 00:27:08.260
in Pandas.

00:27:08.260 --> 00:27:11.500
Vielleicht hast du eben gesagt, man muss

00:27:11.500 --> 00:27:13.100
erstmal wissen, was ein Datensatz ist, bevor man jetzt drüber

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

00:27:15.520 --> 00:27:16.840
mit der du guckst oder

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

00:27:17.720 --> 00:27:19.000
Was ist ein Datensatz in Pandas?

00:27:19.000 --> 00:27:22.360
Ist das jetzt eine Wissensfrage?

00:27:22.360 --> 00:27:25.820
Ja doch, du müsst ja vielleicht schon erklären,

00:27:25.820 --> 00:27:27.100
wie das funktioniert.

00:27:27.100 --> 00:27:29.800
Ja, um die Daten

00:27:29.800 --> 00:27:30.800
anzugucken, würde ich,

00:27:30.800 --> 00:27:33.640
na gut, es ist irgendwie schön, wenn man einmal

00:27:33.640 --> 00:27:35.560
so ein bisschen den Head anzeigt,

00:27:35.560 --> 00:27:37.600
also die ersten paar Zeilen und sieht, was da eigentlich so

00:27:37.600 --> 00:27:39.620
grundsätzlich, was das für Spalten sind, welche Namen die

00:27:39.620 --> 00:27:41.440
haben und welche Zahlen da so

00:27:41.440 --> 00:27:43.280
ungefähr drinstehen und dann würde ich aber

00:27:43.280 --> 00:27:45.580
relativ schnell in eine deskriptive Analyse

00:27:45.580 --> 00:27:47.640
gehen und mir beispielsweise von jeder Spalte

00:27:47.640 --> 00:27:49.460
dann Summary Statistics, also

00:27:49.460 --> 00:27:51.400
Minimum, Maximum, Mittelwert,

00:27:51.400 --> 00:27:53.640
Median, vielleicht Quantile

00:27:53.640 --> 00:27:55.460
anschauen oder eben auch Verteilungen

00:27:55.460 --> 00:27:57.300
plotten, sodass man das

00:27:57.300 --> 00:27:59.780
sieht oder Kategorien anzeigen, je nachdem, was das so ist.

00:27:59.780 --> 00:28:01.520
Sonst,

00:28:01.520 --> 00:28:03.440
ja, die ganze Tabelle,

00:28:03.440 --> 00:28:05.800
also man hat natürlich eine Tabelle als Pandas Data Frame,

00:28:05.800 --> 00:28:07.560
die könnte man theoretisch ja auch irgendwie

00:28:07.560 --> 00:28:09.420
als CSV speichern oder als Excel und da

00:28:09.420 --> 00:28:11.580
angucken. Das ist auch ganz praktisch,

00:28:11.580 --> 00:28:13.500
um sich die mal anzugucken, wenn die Daten klein genug

00:28:13.500 --> 00:28:15.500
sind. Manchmal ist es sogar wirklich ganz

00:28:15.500 --> 00:28:17.400
nett, um mal einfache Analysen zu machen,

00:28:17.480 --> 00:28:19.260
zum Ausprobieren, um gespürt zu bekommen,

00:28:19.260 --> 00:28:21.260
aber es ist dann eher so ein manueller

00:28:21.260 --> 00:28:22.480
Schritt und um wirklich

00:28:22.480 --> 00:28:25.280
Insights dann zu haben und die Daten zu

00:28:25.280 --> 00:28:27.260
verstehen, ja, muss man dann, wenn

00:28:27.260 --> 00:28:28.720
der Datensatz groß genug ist, natürlich

00:28:28.720 --> 00:28:31.100
in die Summary Statistics

00:28:31.100 --> 00:28:33.480
gehen. Und es ist auch oft,

00:28:33.480 --> 00:28:35.360
also selbst wenn man jetzt nach

00:28:35.360 --> 00:28:37.260
dieser ersten Datenanalyse aufhören

00:28:37.260 --> 00:28:38.920
würde, ist es oft an sich schon

00:28:38.920 --> 00:28:40.920
ganz interessant und

00:28:40.920 --> 00:28:43.360
oft haben unsere

00:28:43.360 --> 00:28:45.160
KundInnen ja genau diese Analyse

00:28:45.160 --> 00:28:47.460
auch noch nicht gemacht und lernen dabei auch noch was Neues.

00:28:47.460 --> 00:28:49.460
Einmal hatten wir aber sogar

00:28:49.460 --> 00:28:51.480
auf den Fall, dass wir, ja,

00:28:51.480 --> 00:28:53.240
dass sie dann gemerkt haben, dass da irgendwo viel

00:28:53.240 --> 00:28:55.200
an Data Warehouse ist und da war irgendwie so ein riesiger

00:28:55.200 --> 00:28:57.280
Strukturbruch, der da eigentlich gar nicht sein sollte

00:28:57.280 --> 00:28:59.680
und dann haben sie sich erstmal nochmal ein paar Monate zurückgezogen

00:28:59.680 --> 00:29:01.480
und haben das alles repariert und

00:29:01.480 --> 00:29:03.200
danach konnten wir das Projekt dann tatsächlich machen,

00:29:03.200 --> 00:29:05.260
aber das wussten sie vorher nicht und haben es dann

00:29:05.260 --> 00:29:07.320
gesehen durch unsere Datenvalidierung,

00:29:07.320 --> 00:29:09.360
dass da irgendwo ein Problem ist beim Zusammenführen.

00:29:09.360 --> 00:29:11.500
Ja, spannend.

00:29:11.500 --> 00:29:13.260
Also manchmal sagen sie mir das. Ich habe einmal den Fall

00:29:13.260 --> 00:29:15.320
gehabt, dann waren die ganze Zeit irgendwelche

00:29:15.320 --> 00:29:17.400
so Irregularitäten irgendwie,

00:29:17.400 --> 00:29:18.880
in so einem Datenflur, die da gar nicht hingehörten.

00:29:18.880 --> 00:29:20.420
Man hat irgendwie was bewundert, was ist denn das?

00:29:20.420 --> 00:29:23.180
Irgendwann ist jemand auf die Decke gekommen, ist dann zum Förderbank gegangen,

00:29:23.180 --> 00:29:25.220
hat in die Decke geguckt und da war

00:29:25.220 --> 00:29:27.200
oben ein Fenster auf und dann war dann die

00:29:27.200 --> 00:29:28.840
Temperatur immer anders, weil dann das Fenster

00:29:28.840 --> 00:29:30.860
aufgelassen worden ist und so. Das war spannend, ja.

00:29:30.860 --> 00:29:35.000
Cool ist natürlich auch, wenn man dann sieht, ah ja,

00:29:35.000 --> 00:29:37.500
hier gehen die Sales hoch, da war unsere riesige Werbekampagne

00:29:37.500 --> 00:29:39.240
und das macht alles Sinn und das ist natürlich

00:29:39.240 --> 00:29:41.180
auch schön, wenn es einfach funktioniert und man

00:29:41.180 --> 00:29:41.940
das in den Daten sieht.

00:29:41.940 --> 00:29:44.840
Ja, auf jeden Fall.

00:29:44.840 --> 00:29:47.340
Ah, was mich noch interessieren würde,

00:29:47.340 --> 00:29:49.240
wenn ihr tatsächlich so

00:29:49.240 --> 00:29:51.100
Produkte baut

00:29:51.100 --> 00:29:53.220
mit Modellen

00:29:53.220 --> 00:29:54.960
drin und so und die irgendwie vielleicht

00:29:54.960 --> 00:29:57.240
Echtzeit irgendwas, wie begleut ihr eigentlich eure

00:29:57.240 --> 00:29:58.320
Modelle dann

00:29:58.320 --> 00:30:00.960
oder habt ihr da Präferenzen oder

00:30:00.960 --> 00:30:03.180
weil das ist immer so ein bisschen, das

00:30:03.180 --> 00:30:05.220
machen Leute unterschiedlich und ich weiß nicht,

00:30:05.220 --> 00:30:07.220
ob es da jetzt irgendwie so ein Standard

00:30:07.220 --> 00:30:08.760
Ding gibt, was man machen kann, aber

00:30:08.760 --> 00:30:11.220
ja, das ist auf jeden Fall immer irgendwie nicht so ganz

00:30:11.220 --> 00:30:11.800
einfach gewesen.

00:30:11.800 --> 00:30:15.200
Also grundsätzlich gilt da natürlich,

00:30:15.200 --> 00:30:16.700
wir machen das, was die Kunden wollen.

00:30:17.280 --> 00:30:19.080
Ja, aber tatsächlich, wir sind ja dann

00:30:19.080 --> 00:30:20.900
oft eine Infrastruktur von den Kunden unterwegs,

00:30:20.900 --> 00:30:22.640
aber nicht immer, weil manche, zum Beispiel hatten wir

00:30:22.640 --> 00:30:24.220
ein Projekt, da darf ich zum Glück auch

00:30:24.220 --> 00:30:26.800
drüber reden, darf man ja nicht bei jedem Kunden, das war für die

00:30:26.800 --> 00:30:29.600
Berliner Senatsverwaltung, eine Luftschadstoffprognose,

00:30:29.600 --> 00:30:30.800
also die läuft auch noch, aber das

00:30:30.800 --> 00:30:33.040
machen wir jetzt nur noch Wartung, das ist soweit beschlossen

00:30:33.040 --> 00:30:34.560
und die haben

00:30:34.560 --> 00:30:36.820
keine Vorgaben gemacht zur Infrastruktur,

00:30:36.820 --> 00:30:38.960
die haben halt kein ABS oder Azure und da konnten

00:30:38.960 --> 00:30:40.680
wir es halt so machen, wie wir wollten und

00:30:40.680 --> 00:30:43.220
ich gucke mir gerade nebenbei in unseren

00:30:43.220 --> 00:30:44.900
Blogartikel rein dazu,

00:30:44.900 --> 00:30:46.900
weil da

00:30:46.900 --> 00:30:49.180
kann ich mich alles nochmal wieder nachgucken,

00:30:49.180 --> 00:30:50.000
wie wir es gemacht haben.

00:30:50.000 --> 00:30:51.900
Da haben wir,

00:30:51.900 --> 00:30:54.920
konnten wir ganz frei entscheiden, was wir

00:30:54.920 --> 00:30:56.840
haben wollen und haben

00:30:56.840 --> 00:30:58.340
dann mit

00:30:58.340 --> 00:31:00.680
Kubernetes gearbeitet,

00:31:00.680 --> 00:31:03.180
das ist auch alles schön selbst aufgesetzt

00:31:03.180 --> 00:31:05.240
und da laufen dann automatisierte Jobs

00:31:05.240 --> 00:31:07.180
drin und

00:31:07.180 --> 00:31:08.840
wir haben, na gut,

00:31:08.840 --> 00:31:10.920
das hat jetzt weniger mit Deployment zu tun, aber wir haben da

00:31:10.920 --> 00:31:12.840
dann in der Grunde eine Clickhouse-Datenbank,

00:31:12.840 --> 00:31:14.800
die ist ganz cool für große Datenmengen

00:31:14.800 --> 00:31:16.780
und haben

00:31:16.780 --> 00:31:18.900
dann Docker-Container, in denen

00:31:18.900 --> 00:31:20.180
unsere Prozesse dann laufen,

00:31:20.180 --> 00:31:22.940
da haben wir auch Relash benutzt, wie ich erwähnt habe,

00:31:22.940 --> 00:31:24.700
das benutzen wir dann auch für die Alerts,

00:31:24.700 --> 00:31:26.560
um zu gucken, sind alle Input-Daten da,

00:31:26.560 --> 00:31:28.860
sind alle Prognosen so erstellt worden, wie wir wollen,

00:31:28.860 --> 00:31:30.760
sind so viele Prognosen in der Tabelle,

00:31:30.760 --> 00:31:32.780
wie wir erwarten würden und so weiter

00:31:32.780 --> 00:31:34.920
und in dem Projekt ist tatsächlich

00:31:34.920 --> 00:31:36.920
nur, im Hintern haben wir Relash

00:31:36.920 --> 00:31:39.060
für die Visualisierung benutzt, nach außen

00:31:39.060 --> 00:31:40.720
gehen die Daten tatsächlich,

00:31:40.720 --> 00:31:42.880
unsere Prognosen gehen einfach über eine Rest-API

00:31:42.880 --> 00:31:44.620
raus und werden dann

00:31:44.620 --> 00:31:46.660
im Tool visualisiert, dass diese Nats-Verweigerungen

00:31:46.660 --> 00:31:48.240
schon hatte oder auch

00:31:48.240 --> 00:31:50.760
die API ist frei verfügbar, könnte auch jeder abrufen,

00:31:50.760 --> 00:31:52.180
haben auch schon ein paar andere dann mal gemacht.

00:31:52.180 --> 00:31:54.780
Genau, mit Kubernetes ist es natürlich immer ganz

00:31:54.780 --> 00:31:56.120
schön, ansonsten

00:31:56.120 --> 00:31:58.800
bei einigen Kunden läuft dann viel

00:31:58.800 --> 00:32:00.280
mit den Diensten von AWS,

00:32:00.280 --> 00:32:02.520
jetzt bei dem Kunden, wo ich bin,

00:32:02.520 --> 00:32:05.180
sind wir im Azure-Universum,

00:32:05.180 --> 00:32:06.540
wobei ich da mit dem

00:32:06.540 --> 00:32:08.160
Deployment nichts zu tun habe, weil

00:32:08.160 --> 00:32:10.600
das machen nachher andere, deshalb bin ich

00:32:10.600 --> 00:32:12.180
auch immer nur so am Rande natürlich dabei,

00:32:12.180 --> 00:32:14.900
kann irgendwie in die Kubernetes-Codes mal reingucken,

00:32:14.900 --> 00:32:16.200
aber ich kann,

00:32:16.540 --> 00:32:19.060
kann das nicht aufsetzen oder

00:32:19.060 --> 00:32:21.300
macht dann nicht die Deployments.

00:32:21.300 --> 00:32:23.160
Ja, was mich da mal, oder das

00:32:23.160 --> 00:32:25.080
Problem, das ich da mal hatte, ist halt,

00:32:25.080 --> 00:32:27.080
dass wenn jetzt Leute quasi

00:32:27.080 --> 00:32:29.040
in Notebooks irgendwas modellieren oder so, wie kriegen

00:32:29.040 --> 00:32:30.960
sie denn dann, wenn sie jetzt rauskriegen, ah,

00:32:30.960 --> 00:32:33.040
wenn ich dieses Modell so parametrisiere

00:32:33.040 --> 00:32:35.120
oder so, oder ja, man hat

00:32:35.120 --> 00:32:36.340
dann normalerweise eine ganze Pipeline von

00:32:36.340 --> 00:32:38.840
Daten kommen rein, dann werden sie irgendwie transformiert

00:32:38.840 --> 00:32:41.160
und dann hat man halt hinterher

00:32:41.160 --> 00:32:42.200
irgendwie Predictions oder so.

00:32:42.200 --> 00:32:44.880
Wie kriege ich das Ding denn jetzt

00:32:44.880 --> 00:32:46.420
quasi in

00:32:46.420 --> 00:32:47.920
das Produktionssystem integriert

00:32:47.920 --> 00:32:50.400
und das, was wir dann

00:32:50.400 --> 00:32:51.600
gemacht hatten, war halt

00:32:51.600 --> 00:32:54.180
quasi aus dem Notebook direkt

00:32:54.180 --> 00:32:56.340
sozusagen ein

00:32:56.340 --> 00:32:58.120
Konterpaket zu bauen, das hochzuladen,

00:32:58.120 --> 00:33:00.300
in Django Filefield zu speichern

00:33:00.300 --> 00:33:02.300
und dann auch über eine JSON-AP dann die Ergebnisse wieder

00:33:02.300 --> 00:33:04.440
zurückzugeben, aber das

00:33:04.440 --> 00:33:06.180
fühlte sich so ein bisschen falsch an oder so

00:33:06.180 --> 00:33:08.200
auf jeden Fall nach, gibt es da nicht irgendeine

00:33:08.200 --> 00:33:09.940
einfache Möglichkeit, wie man das machen kann?

00:33:09.940 --> 00:33:11.840
Ich weiß nicht, ob es einfacher ist, aber

00:33:11.840 --> 00:33:14.220
wir sind auch ganz wenig eigentlich

00:33:14.220 --> 00:33:16.080
mal in Jupyter-Notebooks unterwegs,

00:33:16.300 --> 00:33:17.660
sondern

00:33:17.660 --> 00:33:20.240
ja, entweder, wenn wir was schnell visualisieren

00:33:20.240 --> 00:33:21.880
wollen, geht das tatsächlich ja mit so einem Tool wie

00:33:21.880 --> 00:33:23.600
Redash auch schneller, als wenn man dann anfängt,

00:33:23.600 --> 00:33:26.400
mal Plotlip-Code

00:33:26.400 --> 00:33:27.280
zu schreiben,

00:33:27.280 --> 00:33:30.240
dann das Clicky-Bunty manchmal gar nicht

00:33:30.240 --> 00:33:31.660
so blöd und schlecht, wie es klingt

00:33:31.660 --> 00:33:34.260
und dann, wenn

00:33:34.260 --> 00:33:36.060
wir dann die Code-Free-Modellierung haben,

00:33:36.060 --> 00:33:36.880
dann ist es halt wirklich,

00:33:36.880 --> 00:33:39.960
das ist ein Python-Paket,

00:33:39.960 --> 00:33:42.060
wir haben das dann,

00:33:42.060 --> 00:33:44.180
automatisieren das dann meistens

00:33:44.180 --> 00:33:46.180
so, dass jedes Mal beim Push in den

00:33:46.180 --> 00:33:46.980
Main-Branch,

00:33:46.980 --> 00:33:50.200
wenn die, zum Beispiel, wenn die Versionssumme sich geändert hat,

00:33:50.200 --> 00:33:51.940
wird das dann, wie bei Jenkins,

00:33:51.940 --> 00:33:54.060
wird ein Job getriggert, der dann

00:33:54.060 --> 00:33:56.460
das Paket baut und in unser Repository

00:33:56.460 --> 00:33:57.480
hochlädt, das dann

00:33:57.480 --> 00:33:59.880
normalerweise nur intern verfügbar ist und

00:33:59.880 --> 00:34:01.900
dann können wir, ob das dann

00:34:01.900 --> 00:34:03.920
automatisch deployed wird oder wir das irgendwie manuell machen,

00:34:03.920 --> 00:34:05.460
können wir uns dann halt überlegen.

00:34:05.460 --> 00:34:07.480
Ja, aber dann brauchen wir einfach,

00:34:07.480 --> 00:34:10.140
ja, aber dann brauchen ja die

00:34:10.140 --> 00:34:12.000
Leute, die quasi modellieren, Zugriff

00:34:12.000 --> 00:34:13.580
auf das Produktionssystem

00:34:13.580 --> 00:34:15.160
quasi oder können halt,

00:34:16.060 --> 00:34:17.820
die müssen den Code verändern, die müssen

00:34:17.820 --> 00:34:18.380
committen können.

00:34:18.380 --> 00:34:21.860
Ja, also die committen von

00:34:21.860 --> 00:34:22.700
morgens bis abends.

00:34:22.700 --> 00:34:25.480
Also das ist tatsächlich

00:34:25.480 --> 00:34:27.960
bei uns überhaupt nicht so, dass da irgendwie jemand

00:34:27.960 --> 00:34:29.900
sitzt, der nur in einem Notebook prototypt.

00:34:29.900 --> 00:34:31.760
Gar nicht. Also

00:34:31.760 --> 00:34:33.880
wenn das Projekt losgeht, dann

00:34:33.880 --> 00:34:35.900
muss man als erstes ein Repo anlegen, weil sonst

00:34:35.900 --> 00:34:36.900
kann man ja gar nichts machen.

00:34:36.900 --> 00:34:39.300
Ja.

00:34:39.300 --> 00:34:41.900
Und vielleicht startet man dann irgendwie mit ein paar

00:34:41.900 --> 00:34:43.980
Skripten, die dann später ordentlich

00:34:43.980 --> 00:34:45.940
in ein Paket überführt werden und in

00:34:45.940 --> 00:34:47.860
Funktionen und Klassen verpackt. Das kann

00:34:47.860 --> 00:34:49.100
schon sein, aber grundsätzlich

00:34:49.100 --> 00:34:51.220
ja, ist es halt

00:34:51.220 --> 00:34:53.840
eine Software und sonst

00:34:53.840 --> 00:34:55.900
auch oft in größeren Projekten mehrere Pakete.

00:34:55.900 --> 00:34:56.700
Zum Beispiel in dem

00:34:56.700 --> 00:34:59.600
Projekt für die Senatsverwaltung sind das dann,

00:34:59.600 --> 00:35:01.820
wir haben da sehr viele verschiedene Datenquellen, zum Beispiel

00:35:01.820 --> 00:35:03.780
Verkehrsdaten, Wetterdaten und so

00:35:03.780 --> 00:35:05.700
und dann haben wir für jede Datenquelle ein

00:35:05.700 --> 00:35:07.960
Paket, das nur dafür da ist, diese Datenquelle

00:35:07.960 --> 00:35:09.720
einzulegen und zu formatieren, die Datenbank

00:35:09.720 --> 00:35:11.860
zu schreiben. Das heißt, der Handshake ist dann über die Datenbank,

00:35:11.860 --> 00:35:13.620
dann kommt irgendwann das nächste Paket,

00:35:13.620 --> 00:35:15.640
das liest sich die Daten dann und macht dann die

00:35:15.640 --> 00:35:17.920
Modellierung. Und dann gibt es nochmal ein Paket,

00:35:17.920 --> 00:35:19.800
das halt irgendwelche Daten

00:35:19.800 --> 00:35:21.640
weiter aufbereitet und dann gibt es ein Paket mit der

00:35:21.640 --> 00:35:23.660
API. Und das, also wenn

00:35:23.660 --> 00:35:25.360
ein Modell daraus gebaut habt, irgendwie mit

00:35:25.360 --> 00:35:27.000
Torch oder sowas, was macht ihr dann?

00:35:27.000 --> 00:35:28.800
Wo legt ihr das dann hin?

00:35:28.800 --> 00:35:31.380
Ja, wenn das dann in dem Fall

00:35:31.380 --> 00:35:32.040
tatsächlich,

00:35:32.040 --> 00:35:34.560
also tatsächlich

00:35:34.560 --> 00:35:37.680
im Kundenprojekt benutzen

00:35:37.680 --> 00:35:39.580
wir MLflow und ich weiß

00:35:39.580 --> 00:35:41.620
nicht, ob, also ich hatte das vorher

00:35:41.620 --> 00:35:43.560
tatsächlich noch nicht benutzt, wo wir die

00:35:43.560 --> 00:35:45.580
Objekte dann abgelegt,

00:35:45.600 --> 00:35:46.400
ich glaube,

00:35:46.400 --> 00:35:49.540
es gibt, das ist ganz witzig,

00:35:49.540 --> 00:35:51.180
ja, es gibt tatsächlich, das war jetzt

00:35:51.180 --> 00:35:53.540
ein Projekt mit XGBoost, weiß ich nur, da haben

00:35:53.540 --> 00:35:55.420
wir, kann man die Projekte tatsächlich

00:35:55.420 --> 00:35:57.020
in Form eines Strings

00:35:57.020 --> 00:35:59.520
speichern und da haben wir die in der Datenbank

00:35:59.520 --> 00:36:00.060
gespeichert.

00:36:00.060 --> 00:36:03.540
Das funktioniert ganz gut, man kann aber

00:36:03.540 --> 00:36:05.260
natürlich auch das Modellobjekt irgendwo

00:36:05.260 --> 00:36:05.900
in

00:36:05.900 --> 00:36:09.020
Modellrepository dann ablegen.

00:36:09.020 --> 00:36:11.560
Also eigenes Modellrepo mit

00:36:11.560 --> 00:36:13.600
Branches oder irgendwie Tags oder

00:36:13.600 --> 00:36:15.340
sowas hier. Ja, oder

00:36:15.340 --> 00:36:15.580
ähm,

00:36:15.600 --> 00:36:17.700
ja, irgendwelche Tags muss man natürlich

00:36:17.700 --> 00:36:19.740
schon haben, damit man die dann nachher wieder identifizieren kann.

00:36:19.740 --> 00:36:21.760
Ja. Also gut, wenn

00:36:21.760 --> 00:36:23.480
jetzt die Modellierung total schnell geht,

00:36:23.480 --> 00:36:25.740
dann kann man natürlich auch das Modell einmal im Monat

00:36:25.740 --> 00:36:27.520
neu berechnen, oder nee, dann

00:36:27.520 --> 00:36:29.580
einmal im Tag neu berechnen, sofort die Prognosen machen

00:36:29.580 --> 00:36:31.560
und das Modellobjekt überhaupt nicht speichern, aber das

00:36:31.560 --> 00:36:33.680
ist, glaube ich, eher so ein seltener Fall. Normalerweise

00:36:33.680 --> 00:36:35.000
muss man das ja schon speichern.

00:36:35.000 --> 00:36:36.700
Wiederverwenden.

00:36:36.700 --> 00:36:39.620
Also, wir können uns auch gerne

00:36:39.620 --> 00:36:41.500
nochmal an dem Ablauf ein bisschen

00:36:41.500 --> 00:36:43.220
weiter entlanghangeln. Ja, gerne.

00:36:43.220 --> 00:36:44.940
Weil wir jetzt schon vorgegriffen haben,

00:36:44.940 --> 00:36:45.400
also,

00:36:45.560 --> 00:36:47.380
wenn wir das Problem

00:36:47.380 --> 00:36:49.480
verstanden haben, die Daten verstanden haben und die

00:36:49.480 --> 00:36:51.300
sehen soweit gut aus, dass wir und

00:36:51.300 --> 00:36:53.380
unser Kunde gemeinsam sagen, okay, damit können wir jetzt wirklich

00:36:53.380 --> 00:36:55.380
starten, da ist kein Problem drin,

00:36:55.380 --> 00:36:57.480
dann passiert natürlich erstmal

00:36:57.480 --> 00:36:59.780
ganz viel Datenaufbereitung und Bereinigung.

00:36:59.780 --> 00:37:01.600
Oft muss man verschiedene Datensätze

00:37:01.600 --> 00:37:03.500
zusammenführen. Da haben wir dann natürlich

00:37:03.500 --> 00:37:05.180
vorher schon geprüft, ob es auch eine gemeinsame

00:37:05.180 --> 00:37:07.320
ID gibt, um die zusammenzuführen, sonst wird's

00:37:07.320 --> 00:37:09.340
schwierig. Oft muss man

00:37:09.340 --> 00:37:11.100
auch Sachen aggregieren, zum Beispiel hat man

00:37:11.100 --> 00:37:13.560
vielleicht einzelne Zeilen

00:37:13.560 --> 00:37:15.520
für jedes Produkt, das gekauft wurde,

00:37:15.520 --> 00:37:17.500
von einem Kunden. Wir wollen aber eigentlich

00:37:17.500 --> 00:37:19.440
nur eine Zeile pro Kunde, dann muss man

00:37:19.440 --> 00:37:21.420
sich halt irgendwas überlegen, wie man das

00:37:21.420 --> 00:37:23.420
dann voll aufaggregieren kann. Manchmal

00:37:23.420 --> 00:37:25.480
macht man Transformationen oder berechnet

00:37:25.480 --> 00:37:27.360
eine neue Spalte aus

00:37:27.360 --> 00:37:29.420
anderen Spalten. Also, das

00:37:29.420 --> 00:37:31.320
ist das, was man immer als Feature Engineering

00:37:31.320 --> 00:37:33.340
kennt. Wir bauen also Features,

00:37:33.340 --> 00:37:35.680
die ja einfach sinnvolle Inhalte

00:37:35.680 --> 00:37:37.240
haben, mit denen das Modell dann später

00:37:37.240 --> 00:37:39.040
gut umgehen kann.

00:37:39.040 --> 00:37:41.400
Macht ihr das dann immer live in Pandas oder schreibt ihr das auch

00:37:41.400 --> 00:37:42.100
in eine Datenbank rein?

00:37:42.100 --> 00:37:45.480
Es kommt darauf an, aber meistens haben

00:37:45.480 --> 00:37:47.460
wir dann schon eigentlich ein separates

00:37:47.460 --> 00:37:49.320
Modul, das die Features berechnet

00:37:49.320 --> 00:37:51.500
und irgendwo hinschreibt, weil das meistens dann

00:37:51.500 --> 00:37:53.740
einfach schöner ist,

00:37:53.740 --> 00:37:55.400
das zu modulisieren, weil es sonst

00:37:55.400 --> 00:37:56.300
ein bisschen zu viel wird.

00:37:56.300 --> 00:37:58.100
Was ist da eure Datenbank für?

00:37:58.100 --> 00:38:01.180
Ich überlege gerade, wir waren

00:38:01.180 --> 00:38:03.120
früher viel auf MariaDB unterwegs,

00:38:03.120 --> 00:38:04.100
jetzt sind wir

00:38:04.100 --> 00:38:06.920
viel in Clickhouse, also Clickhouse

00:38:06.920 --> 00:38:09.400
teilweise verhält es sich unerwartet,

00:38:09.400 --> 00:38:11.360
finde ich. Aber es ist

00:38:11.360 --> 00:38:13.600
halt schon sehr cool mit großen Datenmengen,

00:38:13.600 --> 00:38:14.600
da kannst du einfach die

00:38:15.440 --> 00:38:15.560
anpassen.

00:38:15.560 --> 00:38:16.800
Das ist diese Geschichte,

00:38:16.800 --> 00:38:19.340
Yandex hat das glaube ich mal gebaut

00:38:19.340 --> 00:38:20.620
und dann haben sie es irgendwie Open Source

00:38:20.620 --> 00:38:22.660
veröffentlicht. Das weiß ich nicht.

00:38:22.660 --> 00:38:23.960
Ich weiß es nicht genau.

00:38:23.960 --> 00:38:27.420
Ja, das ist aber, habe ich auch schon

00:38:27.420 --> 00:38:28.020
ein gutes Mal gehört.

00:38:28.020 --> 00:38:31.260
Ja, also da haben wir ja, wir haben so

00:38:31.260 --> 00:38:33.560
am Anfang dieses Projekts überlegt, okay, machen wir das jetzt?

00:38:33.560 --> 00:38:35.620
Wir hatten einmal was damit ausprobiert

00:38:35.620 --> 00:38:37.420
und wir wussten, wenn das jetzt

00:38:37.420 --> 00:38:39.460
nicht gut funktioniert, dann müssen wir natürlich

00:38:39.460 --> 00:38:40.840
irgendwie auf eigene Kappe nochmal

00:38:40.840 --> 00:38:43.660
ein paar Tage investieren, um das umzustellen.

00:38:43.660 --> 00:38:45.400
Aber es war so eine gute Entscheidung,

00:38:45.400 --> 00:38:47.400
weil wir gemerkt haben, mit den Datenmengen

00:38:47.400 --> 00:38:49.400
würde in anderen

00:38:49.400 --> 00:38:51.180
Datenbanken überhaupt nicht gehen.

00:38:51.180 --> 00:38:52.240
Ja.

00:38:52.240 --> 00:38:55.120
Ja, und wenn wir dann so

00:38:55.120 --> 00:38:57.080
Features haben und die stehen dann vielleicht auch in der

00:38:57.080 --> 00:38:59.100
Clickhouse-Datenbank oder vielleicht stehen sie auch in der

00:38:59.100 --> 00:39:01.980
Postgres oder Redshift-Datenbank,

00:39:01.980 --> 00:39:03.740
dann geht's

00:39:03.740 --> 00:39:05.400
dann erst mit der Modellierung los und

00:39:05.400 --> 00:39:07.820
zum Glück

00:39:07.820 --> 00:39:09.400
haben die meisten Leute

00:39:09.400 --> 00:39:11.200
von uns auch Spaß an den anderen Sachen, weil wie gesagt,

00:39:11.200 --> 00:39:13.480
die Modellierung meistens wirklich nur ein kleiner Teil ist.

00:39:13.480 --> 00:39:15.280
Man muss sich natürlich genau überlegen,

00:39:15.360 --> 00:39:17.280
was ist überhaupt das passende Modell.

00:39:17.280 --> 00:39:19.340
Im Moment,

00:39:19.340 --> 00:39:21.360
wenn man Prognosen machen will, ist immer noch

00:39:21.360 --> 00:39:23.060
G-Boost einfach sehr, sehr gut.

00:39:23.060 --> 00:39:25.100
Bomber sieht das Modell.

00:39:25.100 --> 00:39:27.600
Aber es kommen gerade Sachen,

00:39:27.600 --> 00:39:29.040
zum Beispiel gibt es da

00:39:29.040 --> 00:39:31.320
PFN-Less. Ja, das klingt auch sehr

00:39:31.320 --> 00:39:32.020
interessant, ja.

00:39:32.020 --> 00:39:35.300
Es ist ein

00:39:35.300 --> 00:39:37.100
Transformer-Modell und das ist irgendwie

00:39:37.100 --> 00:39:39.480
total verrückt, weil dieses Modell hat

00:39:39.480 --> 00:39:41.540
also ich finde es immer noch

00:39:41.540 --> 00:39:43.060
total beeindruckend, es ist irgendwie so Magic.

00:39:43.060 --> 00:39:45.320
Also das hat gelernt,

00:39:45.320 --> 00:39:47.280
wie Datensätze, wie die Zusammenhänge

00:39:47.280 --> 00:39:48.280
in Datensätzen,

00:39:48.280 --> 00:39:50.880
wie die Zusammenhänge in Datensätzen

00:39:50.880 --> 00:39:52.260
normalerweise so sind.

00:39:52.260 --> 00:39:55.420
Und dann gibt man dem nochmal so ähnlich

00:39:55.420 --> 00:39:57.360
wie so ein Fine-Tuning den Datensatz,

00:39:57.360 --> 00:39:59.140
den man halt da selbst hat,

00:39:59.140 --> 00:40:00.960
der einen interessiert. Und

00:40:00.960 --> 00:40:03.160
dann kann man damit total gute Prognosen machen,

00:40:03.160 --> 00:40:05.120
auch wenn der Datensatz nicht besonders

00:40:05.120 --> 00:40:06.960
groß ist. Und das Verrückte ist, diese

00:40:06.960 --> 00:40:09.260
Datensätze, anhand derer das gelernt hat,

00:40:09.260 --> 00:40:10.940
das sind künstliche Daten.

00:40:10.940 --> 00:40:13.120
Also es sind nicht mal echte Daten, weil es gibt ja

00:40:13.120 --> 00:40:14.960
gar nicht so viele im Netz verfügbar ist.

00:40:15.280 --> 00:40:17.140
Das heißt, wenn man ein Sprachmodell trainieren will, das ganze Internet

00:40:17.140 --> 00:40:18.300
besteht aus Sprache.

00:40:18.300 --> 00:40:21.120
Aber es funktioniert trotzdem, es ist richtig beeindruckend.

00:40:21.120 --> 00:40:23.160
Also ich glaube, das ist sowas, was sich gerade

00:40:23.160 --> 00:40:24.980
so anfühlt wie, okay, da passiert jetzt

00:40:24.980 --> 00:40:26.520
wirklich mal wieder was Neues

00:40:26.520 --> 00:40:28.240
in der Bereich-Prognose.

00:40:28.240 --> 00:40:31.140
Jaja, auch diese ganzen Pre-Trends, das gibt's ja

00:40:31.140 --> 00:40:33.240
im LLM-Bereich, gibt's das ja alles, oder halt

00:40:33.240 --> 00:40:35.500
auch bei so Vision-Modellen,

00:40:35.500 --> 00:40:37.360
wo dann alles auf ImageNet oder so trainiert ist.

00:40:37.360 --> 00:40:39.280
Aber bei tabularen Daten hätte ich jetzt

00:40:39.280 --> 00:40:41.160
überhaupt gar nicht gedacht, dass das überhaupt möglich ist.

00:40:41.160 --> 00:40:42.080
Oder dass das irgendwie,

00:40:42.080 --> 00:40:44.140
und ja, das hat mich auch

00:40:44.140 --> 00:40:44.960
total gewundert, dass,

00:40:45.240 --> 00:40:47.660
ihr müsst ja vielleicht jetzt noch ein bisschen kurz nochmal

00:40:47.660 --> 00:40:49.840
erklären, bitte, so die Grundlagen. Ich glaube, das war ein bisschen

00:40:49.840 --> 00:40:52.220
komplex vielleicht für einen Einstieg.

00:40:52.220 --> 00:40:54.160
Also, TabTFN hast du

00:40:54.160 --> 00:40:54.520
gesagt?

00:40:54.520 --> 00:40:57.720
Ja, also XGBoost, also Gradient Boosting.

00:40:57.720 --> 00:40:59.340
Ja, XGBoost ist

00:40:59.340 --> 00:41:01.900
ein Gradient Boosting und das ist halt

00:41:01.900 --> 00:41:03.920
eigentlich einfach dazu da, um eine Tabelle von Daten

00:41:03.920 --> 00:41:05.900
zu nehmen und die Zusammenhänge zu lernen,

00:41:05.900 --> 00:41:07.940
die in diesen Daten vorkommen.

00:41:07.940 --> 00:41:10.060
Zum Beispiel will ich vielleicht vorher sagen,

00:41:10.060 --> 00:41:11.980
wie viel verkauft wird an einem bestimmten Tag

00:41:11.980 --> 00:41:13.940
und in den Daten hätte ich zum Beispiel die Info,

00:41:13.940 --> 00:41:15.200
welcher Wochentag ist denn das eigentlich

00:41:15.200 --> 00:41:17.860
und ist dann vielleicht davor oder danach ein Feiertag

00:41:17.860 --> 00:41:19.620
und um welches Produkt geht es und so weiter.

00:41:19.620 --> 00:41:21.760
Wie ist das Wetter? Vielleicht verkaufe ich ja bei

00:41:21.760 --> 00:41:23.040
Hitze mehr Wassermelonen

00:41:23.040 --> 00:41:25.960
und das ist so der Klassiker, das würde man

00:41:25.960 --> 00:41:27.380
auch mit einer

00:41:27.380 --> 00:41:29.880
linearen Regression machen können.

00:41:29.880 --> 00:41:32.160
Die ist aber, ja, weniger flexibel

00:41:32.160 --> 00:41:33.740
und normalerweise dann auch weniger genau

00:41:33.740 --> 00:41:36.200
und XGBoost ist da halt deutlich komplexer.

00:41:36.200 --> 00:41:37.640
Und XGBoost macht das dann quasi

00:41:37.640 --> 00:41:39.420
über die, weiß ich nicht,

00:41:39.420 --> 00:41:40.800
Backpropagation-Mechanismen?

00:41:40.800 --> 00:41:42.660
Nee, nee, das ist eine Art Decision Tree.

00:41:42.660 --> 00:41:45.160
Also es ist eine andere Art, grundsätzlich

00:41:45.160 --> 00:41:46.620
eine andere Art von Modell.

00:41:46.620 --> 00:41:48.820
Ja, das ist im Prinzip so eine

00:41:48.820 --> 00:41:51.020
Kombination aus ganz, ganz

00:41:51.020 --> 00:41:52.660
vielen kleinen,

00:41:52.660 --> 00:41:55.000
nicht besonders schlauen Entscheidungsbäumen,

00:41:55.000 --> 00:41:57.100
aber dadurch, dass die alle hintereinander geschaltet werden,

00:41:57.100 --> 00:41:59.020
ergänzen sie sich ja gut und dann wird es am Ende

00:41:59.020 --> 00:42:00.180
auch ziemlich, ziemlich gut.

00:42:00.180 --> 00:42:03.000
Und das heißt,

00:42:03.000 --> 00:42:04.640
über Jahre eigentlich

00:42:04.640 --> 00:42:07.200
für jedes typische

00:42:07.200 --> 00:42:09.500
Predictive-Projekt

00:42:09.500 --> 00:42:11.440
oder für jede Predictive-Fragestellung

00:42:11.440 --> 00:42:13.080
war XGBoost, es war schon fast

00:42:13.080 --> 00:42:15.120
langweilig. Ja, es gibt dann noch so ein paar

00:42:15.120 --> 00:42:17.060
Varianten. Es gibt zum Beispiel Catboost, das es so

00:42:17.060 --> 00:42:18.640
ähnlich hat, aber halt schon irgendwie ganz

00:42:18.640 --> 00:42:20.960
schlaue Mechanismen implementiert,

00:42:20.960 --> 00:42:23.000
um mit kategorialen Variablen umzugehen

00:42:23.000 --> 00:42:24.900
und manchmal ist das eine oder das andere dann so ein bisschen besser

00:42:24.900 --> 00:42:27.040
oder performanter, aber das ist kein Riesenunterschied.

00:42:27.040 --> 00:42:29.040
Da gab es ja nicht auch noch irgendwas von Microsoft

00:42:29.040 --> 00:42:31.220
Lightboost oder sowas, aber ich weiß gar nicht, was da rausgeworden ist.

00:42:31.220 --> 00:42:33.000
Oder LightGBM. Oder LightGBM, genau. Ich weiß gar nicht, was

00:42:33.000 --> 00:42:33.800
da rausgeworden ist.

00:42:33.800 --> 00:42:36.880
Benutzen wir auch gerade in dem Projekt.

00:42:36.880 --> 00:42:37.080
Ah ja.

00:42:37.080 --> 00:42:41.200
Und ja,

00:42:41.200 --> 00:42:42.840
witzigerweise, wir haben auch schon

00:42:42.840 --> 00:42:45.080
vor einem Jahr oder so, haben wir gedacht, kann man

00:42:45.080 --> 00:42:46.720
eigentlich auch LLMs zur Prognose benutzen?

00:42:46.720 --> 00:42:48.620
Ich möchte kann dem LLM ja sagen, guck mal hier,

00:42:48.620 --> 00:42:50.940
das und das und das sind meine Daten, was denkst du,

00:42:50.940 --> 00:42:53.320
wie teuer ist dieser Gebrauchtwagen?

00:42:53.320 --> 00:42:54.840
Und wir haben da einen Datensatz

00:42:54.840 --> 00:42:56.740
bekommen von einem

00:42:56.740 --> 00:42:58.880
Unternehmen, die

00:42:58.880 --> 00:43:00.940
genau solche Daten eben aus dem

00:43:00.940 --> 00:43:02.220
Internet crawlen und die

00:43:02.220 --> 00:43:04.360
das, sagen wir natürlich,

00:43:04.360 --> 00:43:07.060
so ein bisschen Informationen mitgeben

00:43:07.060 --> 00:43:08.800
und das hat aber schon funktioniert.

00:43:08.800 --> 00:43:09.840
Also wir haben da,

00:43:09.840 --> 00:43:12.920
da weiß ich jetzt die Details natürlich

00:43:12.920 --> 00:43:15.040
nicht alle auswendig, aber wir haben sowohl mit

00:43:15.040 --> 00:43:17.860
GPT-Modellen

00:43:17.860 --> 00:43:19.160
als auch mit Open-Source-Modellen

00:43:19.160 --> 00:43:20.880
das ausprobiert. Es macht schon Sinn,

00:43:20.880 --> 00:43:21.920
die zu feintunen.

00:43:21.920 --> 00:43:24.600
Und dann kann man aber relativ gut sagen,

00:43:24.600 --> 00:43:26.940
mein Auto oder das Auto, das ist die

00:43:26.940 --> 00:43:29.060
Marke, das hat so viele Kilometer, das ist so und so

00:43:29.060 --> 00:43:31.240
alt und das hat, hier ist noch der Freitext

00:43:31.240 --> 00:43:32.380
mit der Beschreibung dazu.

00:43:32.380 --> 00:43:35.040
Da steht dann vielleicht irgendwas

00:43:35.040 --> 00:43:36.680
Spannendes drin, wie das hat eine Beule,

00:43:36.680 --> 00:43:38.140
vielleicht steht aber auch nichts Spannendes drin.

00:43:38.140 --> 00:43:41.000
Und dann fragt man, wie teuer ist

00:43:41.000 --> 00:43:42.880
das Auto? Bitte antwortet mich nur

00:43:42.880 --> 00:43:44.880
in einer Zahl, in Euro oder irgendwie sowas.

00:43:44.880 --> 00:43:46.900
Und das funktioniert schon erstaunlich

00:43:46.900 --> 00:43:48.900
gut, vor allem, wenn man nicht so viele Trainingsdaten

00:43:48.900 --> 00:43:50.780
hat, weil ich glaube, dann kann das halt die Stärke

00:43:50.780 --> 00:43:52.980
ausspielen, dass das Sprachmodell

00:43:52.980 --> 00:43:55.040
eben schon Vorwissen

00:43:55.040 --> 00:43:56.940
hat zu Autopreisen, weil es das Internet

00:43:56.940 --> 00:43:58.880
kennt. Also Transformers meinst du jetzt tatsächlich

00:43:58.880 --> 00:44:01.000
also die großen LLMs und nicht nur Transformers

00:44:01.000 --> 00:44:02.820
selbst, weil ich hätte mich halt gefragt, ob das

00:44:02.820 --> 00:44:04.900
in dem Transformers-Modell durch das, weiß ich

00:44:04.900 --> 00:44:06.640
nicht, dadurch, dass es halt Nodes sind

00:44:06.640 --> 00:44:08.880
und Canisian Trees, dass es da irgendeine andere

00:44:08.880 --> 00:44:11.140
Art gibt, dass Daten aus den tabellarischen

00:44:11.140 --> 00:44:11.800
Daten rausziehen.

00:44:11.800 --> 00:44:14.120
Ja, das hier ist jetzt so, dass

00:44:14.120 --> 00:44:14.720
das, ja,

00:44:14.720 --> 00:44:16.780
die klassischen LLMs, die man so kennt

00:44:16.780 --> 00:44:18.660
und dann kam eben jetzt dieses neue

00:44:18.660 --> 00:44:20.660
mit TabPFN, das ist ein Transformer,

00:44:20.660 --> 00:44:22.640
ist das halt, wie speziell für tabellare Daten

00:44:22.640 --> 00:44:24.760
wieder gemacht ist, weil wir haben ja die LLMs eigentlich so ein bisschen

00:44:24.760 --> 00:44:26.680
zweckentfremdet, indem wir die dann da

00:44:26.680 --> 00:44:28.460
nach dieser Probe machen. Was meintest du denn da überhaupt mit

00:44:28.460 --> 00:44:30.280
Feintuning, was habt ihr denn da gemacht?

00:44:30.280 --> 00:44:34.600
Ich weiß gerade nicht, also ich weiß nicht, wie das eigentlich

00:44:34.600 --> 00:44:36.740
im Detail dort funktioniert, aber es ist

00:44:36.740 --> 00:44:38.520
so, dass das Modell ja eben schon

00:44:38.520 --> 00:44:40.720
ganz viel weiß von den Sprachdaten,

00:44:40.720 --> 00:44:42.700
die es aus dem Netz kennt und

00:44:42.700 --> 00:44:44.560
wir haben ihm dann nochmal

00:44:44.560 --> 00:44:46.760
ja gut, das beschreibt es

00:44:46.760 --> 00:44:48.140
wahrscheinlich ab dann schon komplett,

00:44:48.140 --> 00:44:50.400
wir haben dem dann nochmal, wir haben einen

00:44:50.400 --> 00:44:52.140
Trainingsdatensatz, wir ganz viele

00:44:52.140 --> 00:44:54.640
Gebrauchtwagen schon drin haben, mit

00:44:54.640 --> 00:44:56.840
dem Preis und den ganzen Eigenschaften

00:44:56.840 --> 00:44:58.540
und dann haben wir

00:44:58.540 --> 00:45:00.780
ihm halt immer so ganz viele Texte gegeben,

00:45:00.780 --> 00:45:02.640
zu jedem Auto ein Text, das Auto ist so und so

00:45:02.640 --> 00:45:04.620
alt, sieht so und so aus, ist die

00:45:04.620 --> 00:45:06.640
Marke und es kostet das und das

00:45:06.640 --> 00:45:08.440
nächste Auto ist so und so und so und kostet das

00:45:08.440 --> 00:45:10.840
und das ist dann nochmal ein zusätzlicher Text

00:45:10.840 --> 00:45:12.740
und damit trainiert man

00:45:12.740 --> 00:45:14.400
das Modell nochmal spezifisch auf diesen

00:45:14.400 --> 00:45:16.460
einen Task, also wie das jetzt im

00:45:16.460 --> 00:45:18.520
Hintergrund genau passiert, kann ich

00:45:18.520 --> 00:45:20.120
tatsächlich euch gerade gar nicht erklären,

00:45:20.120 --> 00:45:21.980
weil ich in dem

00:45:21.980 --> 00:45:23.960
Thema weniger drin bin, als in so was wie

00:45:23.960 --> 00:45:26.560
XG Boost, aber ja, dadurch ist das

00:45:26.560 --> 00:45:28.600
Modell dann nochmal, kriegt nochmal so eine Spezialausbildung

00:45:28.600 --> 00:45:30.180
quasi für das Thema Auto

00:45:30.180 --> 00:45:32.600
Gebrauchtwagenpreise und

00:45:32.600 --> 00:45:34.360
dann wird es nochmal besser, wenn man ihm dann so eine Frage

00:45:34.360 --> 00:45:36.540
später stellt. Ja, man trainiert

00:45:36.540 --> 00:45:38.400
das quasi nochmal ein Stückchen weiter, gibt es unterschiedliche

00:45:38.400 --> 00:45:39.920
Ansätze, wie man das dann macht, ob man nur

00:45:39.920 --> 00:45:42.240
Layer einfriert, bestimmte Gewichte halt nicht

00:45:42.240 --> 00:45:44.240
neu setzt und

00:45:44.240 --> 00:45:46.200
dann vielleicht nur die letzten

00:45:46.200 --> 00:45:48.260
irgendwie anpasst oder ob man so Low-Rank

00:45:48.260 --> 00:45:49.600
Adaption-Geschichten macht oder

00:45:49.600 --> 00:45:52.280
da gibt es ganz unterschiedliche. Ich komme mir an die Gewichte

00:45:52.280 --> 00:45:53.680
gar nicht dran von den großen LMs zum Beispiel.

00:45:53.680 --> 00:45:56.060
Ne, das kannst du auch nicht mit, das kannst du natürlich

00:45:56.060 --> 00:45:58.100
dann nur, also du kommst, du kannst mit

00:45:58.100 --> 00:46:00.100
den OpenAI-Modellen und so auch machen, über

00:46:00.100 --> 00:46:02.180
deren APIs, aber wenn du das

00:46:02.180 --> 00:46:04.180
auf einem quasi, wenn

00:46:04.180 --> 00:46:06.140
du das selber machen willst, dann musst du ein Modell

00:46:06.140 --> 00:46:07.740
nehmen, wo du Gewichte hast. Ja, genau, das

00:46:07.740 --> 00:46:08.700
natürlich, ja.

00:46:08.700 --> 00:46:12.060
Ich glaube, wir haben da beides gemacht, also

00:46:12.060 --> 00:46:14.180
einmal über OpenAI, da kann man einfach über die API sein,

00:46:14.200 --> 00:46:16.320
die ist mit Fine-Tuning-Datensatz, machen wir mal

00:46:16.320 --> 00:46:17.620
und aber auch mit

00:46:17.620 --> 00:46:20.060
den Open-Source-Modellen,

00:46:20.060 --> 00:46:22.260
wo wir dann nochmal ein Fine-Tuning drangehängt haben,

00:46:22.260 --> 00:46:23.980
damit die eben speziell auf Autoprise

00:46:23.980 --> 00:46:25.160
die haben halt so selber ihre, ja.

00:46:25.160 --> 00:46:28.160
Bei Tuning und Autos

00:46:28.160 --> 00:46:30.100
fällt mir jetzt erst auf, dass es echt total gut

00:46:30.100 --> 00:46:31.360
passt. Ja.

00:46:31.360 --> 00:46:34.220
Okay, das

00:46:34.220 --> 00:46:35.860
ist also Tab-TFN, ja.

00:46:35.860 --> 00:46:38.260
Ja, wobei

00:46:38.260 --> 00:46:39.980
das ist jetzt noch relativ neu

00:46:39.980 --> 00:46:42.100
und da ja nicht

00:46:42.100 --> 00:46:44.080
jede Woche neue Projekte losgehen, sondern die

00:46:44.080 --> 00:46:45.460
meisten Projekte schon länger laufen,

00:46:45.460 --> 00:46:47.980
sind die meisten Projekte, die wir haben, dann auch

00:46:47.980 --> 00:46:50.200
mit sowas wie XGBoost oder teilweise auch mit

00:46:50.200 --> 00:46:51.960
irgendwelchen ausgefeilten

00:46:51.960 --> 00:46:53.980
statistischen Ansätzen

00:46:53.980 --> 00:46:56.000
oder Kombinationen, je nachdem, was man

00:46:56.000 --> 00:46:57.940
Ja, das finde ich dann spannend. Wie viel kann denn jemand, der

00:46:57.940 --> 00:47:00.000
richtig gute Statistik oder in klassischer Statistik

00:47:00.000 --> 00:47:01.340
ist, rausholen im Vergleich zu diesen

00:47:01.340 --> 00:47:03.500
ich beschieße das einfach mit so einem Modell?

00:47:03.500 --> 00:47:05.860
Ich würde sagen, es kommt auf die

00:47:05.860 --> 00:47:08.000
Fragestellung an. Bei so einem relativ

00:47:08.000 --> 00:47:09.960
klassischen Task wie

00:47:09.960 --> 00:47:12.480
in welchen Verkaufszahlen

00:47:12.480 --> 00:47:13.900
geht es, glaube ich,

00:47:13.960 --> 00:47:15.120
auch mit einem Modell

00:47:15.120 --> 00:47:17.880
XGBoost ganz gut, wenn man

00:47:17.880 --> 00:47:19.360
es natürlich richtig macht und

00:47:19.360 --> 00:47:22.000
zum Beispiel noch, es gibt da ja

00:47:22.000 --> 00:47:23.740
eine Menge Hyperparameter, die bestimmen,

00:47:23.740 --> 00:47:25.800
wie flexibel ist das Modell und wenn man das

00:47:25.800 --> 00:47:27.580
Modell zu flexibel sein lässt, dann lernst du auch

00:47:27.580 --> 00:47:29.820
die kleinsten Wackler auf den

00:47:29.820 --> 00:47:31.400
Trainingsdaten und auf neuen Daten

00:47:31.400 --> 00:47:33.560
erzählt es dann nur Mist. Das heißt,

00:47:33.560 --> 00:47:35.720
dann hat man Overfitting und das

00:47:35.720 --> 00:47:37.700
muss man verhindern. Es gibt natürlich schon ein paar Sachen, die man

00:47:37.700 --> 00:47:39.760
falsch machen könnte, aber

00:47:39.760 --> 00:47:42.060
wenn man da alles nach State of the Art

00:47:42.060 --> 00:47:43.760
macht, kommt man bei so einfachen

00:47:43.840 --> 00:47:45.460
Aufgaben mit einem XGBoost meistens

00:47:45.460 --> 00:47:47.120
ziemlich weit, aber

00:47:47.120 --> 00:47:49.020
ja, zum Beispiel

00:47:49.020 --> 00:47:51.480
im Sportwettenbereich gibt es ja manchmal

00:47:51.480 --> 00:47:53.460
wirklich komplizierte Sachen, also wenn ich jetzt

00:47:53.460 --> 00:47:55.520
vorher sagen will, wie die

00:47:55.520 --> 00:47:57.340
Tore sich verteilen,

00:47:57.340 --> 00:47:59.700
dann kommt man da

00:47:59.700 --> 00:48:01.460
dann schon nochmal weiter, wenn man wirklich darüber

00:48:01.460 --> 00:48:03.540
nachdenkt, theoretisch, was ist denn das jetzt eigentlich

00:48:03.540 --> 00:48:04.960
für eine Verteilung? Das sind

00:48:04.960 --> 00:48:07.800
Anzahlen, also es ist eine Poisson-Verteilung,

00:48:07.800 --> 00:48:09.800
aber die ist ja irgendwie bivariat, weil es sind ja

00:48:09.800 --> 00:48:11.820
zwei Mannschaften und

00:48:11.820 --> 00:48:13.720
zwei Teams, die Tore machen und

00:48:13.720 --> 00:48:15.400
da weiß ich, dass meine

00:48:15.400 --> 00:48:17.380
Kolleginnen und Kollegen sich schon

00:48:17.380 --> 00:48:19.700
einige ziemlich verrückte Sachen ausgehört haben und dann

00:48:19.700 --> 00:48:21.660
umgekehrt, manchmal ist es am Ende auch irgendwie doch nur eine

00:48:21.660 --> 00:48:23.780
einfache Holgerstick, die einen ziemlich weit

00:48:23.780 --> 00:48:25.660
bringt. Ja, ihr habt also nicht

00:48:25.660 --> 00:48:27.780
die Ernährung der Spiele am Morgen zuvor mit einfließen

00:48:27.780 --> 00:48:29.520
lassen können und sowas. Das weiß ich nicht,

00:48:29.520 --> 00:48:31.460
ich müsste mal fragen, ob sie das in der

00:48:31.460 --> 00:48:32.540
Feature drin haben.

00:48:32.540 --> 00:48:34.720
Es gibt auf jeden Fall spannende Sachen.

00:48:34.720 --> 00:48:37.560
Ich würde mich halt tatsächlich

00:48:37.560 --> 00:48:39.740
interessieren, was man aus Statistik irgendwie daraus lernen kann,

00:48:39.740 --> 00:48:41.080
weil ich verstehe nicht genau,

00:48:41.080 --> 00:48:43.600
wie jetzt in so einem Transformers-Modell die einzelnen

00:48:43.600 --> 00:48:45.440
Gewichte bei den Neuronen zustande kommen,

00:48:45.440 --> 00:48:47.320
also weil, ich stelle mir das so vor, der muss

00:48:47.320 --> 00:48:49.560
versuchen, diese Features rauszufinden und die

00:48:49.560 --> 00:48:51.440
irgendwie so linear unabhängig wie möglich

00:48:51.440 --> 00:48:53.000
voneinander zu gestalten, dass er irgendwie

00:48:53.000 --> 00:48:55.340
den Erklärungsgrad dann da rausfindet,

00:48:55.340 --> 00:48:57.560
der dann halt gut ist, damit er halt gute Prognosen hinkriegt,

00:48:57.560 --> 00:48:59.340
aber so richtig

00:48:59.340 --> 00:49:00.560
klar wird das nicht.

00:49:00.560 --> 00:49:03.360
Ja, Neuronalisten sind deutlich eher

00:49:03.360 --> 00:49:05.540
Blackbox, aber das ist extrem gut auch.

00:49:05.540 --> 00:49:07.400
Natürlich, du kriegst bei beiden auch so ein bisschen

00:49:07.400 --> 00:49:09.400
raus, was da der Grund ist, warum

00:49:09.400 --> 00:49:10.680
das jetzt irgendwie so oder so

00:49:10.680 --> 00:49:12.800
entschieden oder vorhergesagt hat,

00:49:13.480 --> 00:49:16.300
aber es ist schon eher so Blackbox-

00:49:16.300 --> 00:49:16.520
Modelle.

00:49:16.520 --> 00:49:19.740
Ja, man kann jetzt nachträglich dann.

00:49:19.740 --> 00:49:21.900
Also das wäre jetzt vielleicht für mich

00:49:21.900 --> 00:49:23.740
auch nochmal einer der Punkte, der für dieses

00:49:23.740 --> 00:49:25.540
Data Cleansing spricht. Ja, also wenn ich jetzt

00:49:25.540 --> 00:49:27.960
die Daten da einfach so reinkippe oder

00:49:27.960 --> 00:49:30.020
am Anfang schon so aufteile,

00:49:30.020 --> 00:49:31.780
dass ich jetzt Cluster bilde oder

00:49:31.780 --> 00:49:33.680
Kategorien bilde oder sowas und die halt

00:49:33.680 --> 00:49:35.520
nochmal damit annotiere oder so,

00:49:35.520 --> 00:49:37.500
ob das halt eine deutliche Verbesserung bringt,

00:49:37.500 --> 00:49:39.480
also weil die ein bisschen reiner sind

00:49:39.480 --> 00:49:41.560
vielleicht oder halt, ne, oder schon mal

00:49:41.560 --> 00:49:43.200
irgendwie die Daten wie eine Zusammenfassung,

00:49:43.360 --> 00:49:45.300
oder eine Summe oder sowas, da schon

00:49:45.300 --> 00:49:47.660
drinsteht mit, ja, in irgendeiner Extraspalte,

00:49:47.660 --> 00:49:49.300
dass das dann halt das Ergebnis zum Beispiel nochmal

00:49:49.300 --> 00:49:51.320
deutlich bessere Güte kriegt.

00:49:51.320 --> 00:49:53.360
Du beschreibst, glaube ich, Feature-Engineering gerade, oder?

00:49:53.360 --> 00:49:54.180
Ja, vielleicht.

00:49:54.180 --> 00:49:56.940
Also zum Beispiel

00:49:56.940 --> 00:49:59.240
viele Modelle sind ja auch dazu in der Lage,

00:49:59.240 --> 00:50:01.200
Interaktionen zu erkennen, also

00:50:01.200 --> 00:50:02.960
beispielsweise, weißt du,

00:50:02.960 --> 00:50:04.420
ich, ähm,

00:50:04.420 --> 00:50:07.220
vielleicht aus der

00:50:07.220 --> 00:50:09.080
Luftschadstoff-Prognose überlege ich gerade,

00:50:09.080 --> 00:50:10.340
ist, ähm,

00:50:10.340 --> 00:50:13.240
irgendwie was, ja, also mittags ist

00:50:13.240 --> 00:50:15.200
die Luft schlechter, weil mehr Autos rumfahren,

00:50:15.200 --> 00:50:16.640
aber nur, wenn wir keinen Wind haben.

00:50:16.640 --> 00:50:18.880
Wenn wir viel Wind haben, wird nämlich wenig Schadstoff

00:50:18.880 --> 00:50:21.000
halt weggepustet. Das ist halt eine Interaktion, also

00:50:21.000 --> 00:50:23.220
die Effekt, mittags ist es schlechter, der ist nur

00:50:23.220 --> 00:50:24.820
da, wenn die Windstärke gering ist.

00:50:24.820 --> 00:50:27.320
Und so eine Interaktion können die Modelle

00:50:27.320 --> 00:50:29.200
auch lernen, aber manchmal sind die

00:50:29.200 --> 00:50:31.080
Interaktionen ja vielleicht auch nochmal komplexer von

00:50:31.080 --> 00:50:33.220
drei oder vier Sachen, und wenn man da

00:50:33.220 --> 00:50:35.400
schon so eine Idee hat, sag ich logisch,

00:50:35.400 --> 00:50:37.140
dann macht man es dem Modell halt schon deutlich

00:50:37.140 --> 00:50:37.260
leichter.

00:50:37.290 --> 00:50:55.110
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 und es ist windstill. Jetzt in diesem sehr einfachen Beispiel. Und das ist dann, glaube ich, auch wieder so was, wo es dann wirklich viel bringt, immer mal wieder mit den Leuten zu reden, die sich fachlich damit auskennen.

00:50:55.110 --> 00:51:04.610
Und 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.

00:51:04.610 --> 00:51:23.330
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.330 --> 00:51:24.950
Und dann muss man das irgendwie.

00:51:25.110 --> 00:51:35.490
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.

00:51:35.490 --> 00:51:53.630
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.

00:51:53.630 --> 00:51:55.030
Also das XGBoost, das kennt halt nur.

00:51:55.110 --> 00:51:56.410
Man kann eigentlich nur Spalten bezahlen.

00:51:56.410 --> 00:51:59.510
Kategorien kann man ja im Prinzip auch doch in Zahlen überführen.

00:51:59.510 --> 00:52:01.310
Und ein Text, naja,

00:52:01.310 --> 00:52:03.150
ist halt erstmal nicht so einfach.

00:52:03.150 --> 00:52:05.470
Was man jetzt natürlich auch noch machen kann, ist, dass man

00:52:05.470 --> 00:52:07.670
das LLM benutzt, um Features zu generieren,

00:52:07.670 --> 00:52:09.330
indem man sagt, hier ist der Text, hat das Auto

00:52:09.330 --> 00:52:10.230
einen Schaden? Ja, nein.

00:52:10.230 --> 00:52:11.230
Ja.

00:52:11.230 --> 00:52:15.970
Also es ist dann auch nochmal so eine Hybridlösung,

00:52:15.970 --> 00:52:17.530
die, glaube ich, gar nicht so dumm ist.

00:52:17.530 --> 00:52:18.650
Und halt auch,

00:52:18.650 --> 00:52:21.530
man kann natürlich auch, je nachdem, wie genau man

00:52:21.530 --> 00:52:23.430
das machen will, Leute hinsetzen, die dann

00:52:23.430 --> 00:52:25.010
wirklich viel Zeit damit verbringen,

00:52:25.110 --> 00:52:26.870
Texte durchzugucken und das zu labeln,

00:52:26.870 --> 00:52:28.950
dann ist das bestimmt nochmal ein bisschen genauer.

00:52:28.950 --> 00:52:30.550
Das ist halt die Frage, ob es sich lohnt.

00:52:30.550 --> 00:52:31.430
Muss man sich immer überlegen.

00:52:31.430 --> 00:52:35.370
Okay, ja gut, aber dadurch kann man

00:52:35.370 --> 00:52:37.210
schon viel rausholen, ja, durch diese Modellierung dann und so.

00:52:37.210 --> 00:52:39.370
Okay, dann sind wir in diesen

00:52:39.370 --> 00:52:41.430
Datenprozessen. Wie nennt man diese Datenprozesse?

00:52:41.430 --> 00:52:43.230
ETIL? ETIL, da gibt es ja verschiedene

00:52:43.230 --> 00:52:43.850
Art und Weisen.

00:52:43.850 --> 00:52:47.310
Ach, du meinst jetzt Extract, Transform,

00:52:47.310 --> 00:52:48.210
Load? Ja, genau.

00:52:48.210 --> 00:52:50.650
Das ist, glaube ich, aber nicht unbedingt was mit,

00:52:50.650 --> 00:52:53.170
oder... Ja, aber wir sind jetzt da

00:52:53.170 --> 00:52:54.490
irgendwo in diesem Workflow,

00:52:55.110 --> 00:52:56.910
also es ging ja um dieses CRISP, ne?

00:52:56.910 --> 00:52:58.190
Ach so, ja. Ja.

00:52:58.190 --> 00:53:01.010
Also ich glaube, ja, also die ETIL,

00:53:01.010 --> 00:53:03.070
Extract, Transform, Load, ist ja,

00:53:03.070 --> 00:53:05.390
beschreibt ja einfach den Prozess, dass man

00:53:05.390 --> 00:53:07.490
Daten irgendwo rauszieht,

00:53:07.490 --> 00:53:09.370
dann irgendwas damit macht, also sie transformiert

00:53:09.370 --> 00:53:11.030
und sie dann irgendwo hinlädt, obwohl man

00:53:11.030 --> 00:53:13.250
sagt, Daten laden für Daten kriegen. In dem Fall

00:53:13.250 --> 00:53:14.990
ist aber Daten laden, die irgendwo hinladen.

00:53:14.990 --> 00:53:17.410
Das ist auch ein bisschen verwirrend, auch im Naming

00:53:17.410 --> 00:53:18.190
finde ich, in den

00:53:18.190 --> 00:53:21.230
Code dann, wenn man

00:53:21.230 --> 00:53:23.090
irgendwann überall Load stehen hat, egal ob man Daten

00:53:23.090 --> 00:53:24.170
zieht oder Daten wegschiebt.

00:53:25.110 --> 00:53:26.390
Und, ja, das ist,

00:53:26.390 --> 00:53:29.090
so hängt das im Prinzip zusammen,

00:53:29.090 --> 00:53:30.750
aber oft benutzt man ja den Begriff

00:53:30.750 --> 00:53:33.150
ETIL auch einfach für jeden

00:53:33.150 --> 00:53:34.930
Prozess, der irgendwie Daten nimmt,

00:53:34.930 --> 00:53:37.230
verarbeitet und so durch so eine Strecke schiebt.

00:53:37.230 --> 00:53:39.270
Außerhalb vom Data Science-Bereich halt auch ganz oft.

00:53:39.270 --> 00:53:41.210
Ja, genau. Also jeder Business-Prozess,

00:53:41.210 --> 00:53:42.830
den man irgendwie halt automatisieren kann.

00:53:42.830 --> 00:53:45.370
Aber ich glaube, es ist schon oft so,

00:53:45.370 --> 00:53:47.270
dass man auch sagen würde, nachher

00:53:47.270 --> 00:53:49.530
in dem fertigen Datenprodukt, okay, hier ist der ETIL,

00:53:49.530 --> 00:53:51.230
jetzt kommt der ETIL und dann kommt

00:53:51.230 --> 00:53:53.290
der Teil mit dem Modell. Also oft nutzt

00:53:53.290 --> 00:53:55.010
man den Begriff eigentlich auch, um das so voneinander,

00:53:55.010 --> 00:53:55.710
da abzugrenzen.

00:53:55.710 --> 00:53:59.110
Okay. Also ich verstehe jetzt, also wir haben

00:53:59.110 --> 00:54:01.210
okay verstanden, was das Geschäft

00:54:01.210 --> 00:54:03.230
macht und was wir da lösen

00:54:03.230 --> 00:54:05.010
wollen für Daten. Und dann haben wir

00:54:05.010 --> 00:54:07.050
verstanden, welche Daten wir denn haben und was wir damit machen

00:54:07.050 --> 00:54:09.250
wollen. Dann haben wir die so transformiert

00:54:09.250 --> 00:54:10.950
und umgebaut, dass wir die

00:54:10.950 --> 00:54:13.090
in ein Modell kippen können, was wir uns

00:54:13.090 --> 00:54:14.670
dann ausdenken oder ausgedacht haben.

00:54:14.670 --> 00:54:17.110
Und was machen wir dann? Dann gucken wir

00:54:17.110 --> 00:54:18.590
uns an, was dabei rauskommt.

00:54:18.590 --> 00:54:21.010
Ja, dann haben wir ein Modell

00:54:21.010 --> 00:54:22.970
und dann machen wir Prognosen und gucken,

00:54:22.970 --> 00:54:24.910
wie gut die sind. Und

00:54:24.910 --> 00:54:27.050
da muss man natürlich verschiedene Sachen beachten.

00:54:27.050 --> 00:54:28.770
Also wenn ich

00:54:28.770 --> 00:54:31.190
die Prognosen auf denselben

00:54:31.190 --> 00:54:33.010
Daten mache, die ich fürs Modelltraining benutzt

00:54:33.010 --> 00:54:34.730
habe, dann ist das natürlich für das Modell relativ

00:54:34.730 --> 00:54:36.550
einfach. Und

00:54:36.550 --> 00:54:38.950
deswegen ist es wichtig, dass ich mir vorher

00:54:38.950 --> 00:54:40.970
einen Teil der Daten weglege und nur die

00:54:40.970 --> 00:54:42.490
übrigen Daten kriegt das Modell

00:54:42.490 --> 00:54:44.810
zum Lernen. Und danach mache ich auf diesen

00:54:44.810 --> 00:54:46.990
weggelegten Daten die Prognosen

00:54:46.990 --> 00:54:49.070
und dann gucke ich, was tatsächlich

00:54:49.070 --> 00:54:50.930
die Werte waren und vergleiche die mit den

00:54:50.930 --> 00:54:52.990
Prognosen von dem Modell. Und das Modell

00:54:52.990 --> 00:54:54.810
ist halt ja natürlich in dem Moment blind. Das kriegt halt nur

00:54:54.810 --> 00:54:57.070
die ganzen Features, aber es kriegt nicht die Zielvariable.

00:54:57.070 --> 00:54:58.810
Es muss dann seine Prognosen blind machen und wir

00:54:58.810 --> 00:55:00.790
können dann gucken und dann sagen, ja, wir

00:55:00.790 --> 00:55:02.870
kennen die Warenwerte aber schon und vergleichen das

00:55:02.870 --> 00:55:04.790
jetzt. Da gibt es dann verschiedene Kennwerte,

00:55:04.790 --> 00:55:06.730
die man berechnen kann, kommt es halt total auf

00:55:06.730 --> 00:55:08.570
die Fragestellung an. Man könnte zum Beispiel

00:55:08.570 --> 00:55:10.890
eine mittlere prozentuale Abweichung

00:55:10.890 --> 00:55:12.690
berechnen. Man kann ein Bias berechnen,

00:55:12.690 --> 00:55:14.590
liegen wir mittel drüber oder drunter.

00:55:14.590 --> 00:55:16.250
Man kann eine erklärte

00:55:16.250 --> 00:55:18.830
Varianzanteil berechnen. Man kann

00:55:18.830 --> 00:55:20.490
je nachdem, vielleicht wollen wir auch gar nicht

00:55:20.490 --> 00:55:22.910
numerische Daten vorher sagen, sondern nur ein Ja-Nein.

00:55:22.910 --> 00:55:24.570
Dann könnte man gucken, wie viele

00:55:24.710 --> 00:55:26.630
Falsch-Positiv, Falsch-Negativ und so weiter

00:55:26.630 --> 00:55:28.590
habe ich. Das kommt, ja, stark

00:55:28.590 --> 00:55:30.610
auf den Use-Case an. Auf jeden Fall kann ich das dann

00:55:30.610 --> 00:55:32.850
berechnen. Schön out of sample,

00:55:32.850 --> 00:55:34.470
also mit diesem separaten

00:55:34.470 --> 00:55:36.370
Datensatz. Und

00:55:36.370 --> 00:55:38.550
das ist natürlich besonders gut,

00:55:38.550 --> 00:55:40.530
wenn man zwei Modelle vergleichen will. Wenn man

00:55:40.530 --> 00:55:42.670
nur eins hat, dann ist da, es ist glaube

00:55:42.670 --> 00:55:44.570
ich auch gar nicht so leicht zu sagen, was ist denn jetzt ein guter

00:55:44.570 --> 00:55:46.410
Wert? Finde ich irgendwie 20, 50 oder 90

00:55:46.410 --> 00:55:48.110
Prozent erklärte Varianz? Das kommt auch

00:55:48.110 --> 00:55:50.390
stark auf die Fragestellung an. Wenn ich zum Beispiel

00:55:50.390 --> 00:55:52.450
individuelles Verhalten von Menschen

00:55:52.450 --> 00:55:54.510
erklären will, dann nicht, dass

00:55:54.610 --> 00:55:56.430
ich natürlich nicht so genau vorher sagen, wie

00:55:56.430 --> 00:55:58.410
aggregierte Verkaufszahlen,

00:55:58.410 --> 00:56:00.410
weil da einfach so

00:56:00.410 --> 00:56:01.630
viele andere Einflüsse sind.

00:56:01.630 --> 00:56:04.430
Und ja, nochmal zu diesem

00:56:04.430 --> 00:56:05.970
Split, zu den

00:56:05.970 --> 00:56:08.030
Trainingsdaten und den Testdaten.

00:56:08.030 --> 00:56:10.310
In den allermeisten Fällen

00:56:10.310 --> 00:56:12.210
haben unsere Daten ja eigentlich eine zeitliche

00:56:12.210 --> 00:56:14.110
Struktur. Man kann jetzt natürlich die Testdaten

00:56:14.110 --> 00:56:16.390
zufällig rausziehen und zur Seite legen, aber am besten

00:56:16.390 --> 00:56:18.010
ist es, wenn man immer die

00:56:18.010 --> 00:56:20.270
zeitlich, die nimmt, die zeitlich am Ende

00:56:20.270 --> 00:56:22.570
liegen, weil manchmal ändern sich eben Zusammenhänge

00:56:22.570 --> 00:56:23.790
und

00:56:24.510 --> 00:56:26.370
es eigentlich passiert ständig, dass sich Zusammenhänge

00:56:26.370 --> 00:56:28.210
ändern. Und deswegen ist es halt sinnvoll,

00:56:28.210 --> 00:56:30.350
so ein Szenario zu bauen, wo das Modell quasi auf der

00:56:30.350 --> 00:56:32.470
Vergangenheit lernt und dann auf Daten,

00:56:32.470 --> 00:56:34.210
die danach passiert sind, auch tatsächlich

00:56:34.210 --> 00:56:36.310
evaluiert wird. Sonst kann es halt passieren, dass

00:56:36.310 --> 00:56:38.510
man sich da verschätzt und

00:56:38.510 --> 00:56:40.450
dann denkt, das Modell wäre besser, als

00:56:40.450 --> 00:56:42.270
es tatsächlich ist. Und nachher im Betrieb,

00:56:42.270 --> 00:56:44.550
dann muss es ja tatsächlich Prognosen

00:56:44.550 --> 00:56:46.510
für die Zukunft machen und dann ist die Enttäuschung

00:56:46.510 --> 00:56:48.450
dann irgendwie da, wenn es dann doch schlechter funktioniert,

00:56:48.450 --> 00:56:50.370
als man dachte. Aber man muss

00:56:50.370 --> 00:56:52.010
natürlich auch immer auffassen, dass man dann halt die

00:56:52.010 --> 00:56:54.410
neuen zusammenhängigen Daten, Änderungen dann irgendwie auch trotzdem mit

00:56:54.410 --> 00:56:56.510
reinkriegt, ne? Weil wenn sich halt irgendwas...

00:56:56.510 --> 00:56:58.270
Ja, das ist natürlich regelmäßiges

00:56:58.270 --> 00:57:00.250
Neutraining, ja. Also das

00:57:00.250 --> 00:57:02.370
ist dann auch total wichtig, dass man das Modell nicht einmal

00:57:02.370 --> 00:57:04.030
trainiert und dann fünf Jahre lang benutzt.

00:57:04.030 --> 00:57:06.270
Trotzdem, solange die Zusammenhänge

00:57:06.270 --> 00:57:08.350
noch nicht da sind, die neuen, wenn man die noch nicht kennt,

00:57:08.350 --> 00:57:10.290
muss man halt zumindest mit dem leben, was man

00:57:10.290 --> 00:57:10.990
bis dahin hat.

00:57:10.990 --> 00:57:14.390
Also man könnte ja vielleicht auch diese Zusammenhänge

00:57:14.390 --> 00:57:16.210
irgendwie als, ich sag mal, Liste, ne, dem

00:57:16.210 --> 00:57:18.070
Geschäft zurückgeben, so hey, hier, das sind unsere Annahmen,

00:57:18.070 --> 00:57:20.210
guckt doch mal bitte, dass die noch stimmen. Und wenn ihr merkt,

00:57:20.210 --> 00:57:22.230
irgendwie da ändert sich irgendwas an den Annahmen, dann müssen wir

00:57:22.230 --> 00:57:23.710
halt da nochmal was auch anpassen.

00:57:24.310 --> 00:57:25.870
Ja, also zumindest,

00:57:25.870 --> 00:57:28.330
ich glaube, so direkt geht es gar nicht so gut,

00:57:28.330 --> 00:57:30.430
weil das ist ja was, was das Modell findet

00:57:30.430 --> 00:57:32.270
und wo die dann eher auch sagen, ah ja, cool, ja, das

00:57:32.270 --> 00:57:34.150
passt so ungefähr zu dem, was wir erwartet haben.

00:57:34.150 --> 00:57:36.270
Aber die können sich wirklich sagen, oh, das ändert sich

00:57:36.270 --> 00:57:38.090
jetzt, weil jetzt ist, keine Ahnung, zum Beispiel

00:57:38.090 --> 00:57:40.370
der Zusammenhang

00:57:40.370 --> 00:57:42.310
von Autoanzahl

00:57:42.310 --> 00:57:44.270
zu Stickoxiden,

00:57:44.270 --> 00:57:46.090
der wird schwächer, weil

00:57:46.090 --> 00:57:48.090
mehr E-Autos unterwegs sind

00:57:48.090 --> 00:57:50.070
und die stoßen keine Stickoxide aus.

00:57:50.070 --> 00:57:52.410
Ja, okay, aber wie viel

00:57:52.410 --> 00:57:54.210
schwächer der jetzt wird, das kann uns diese Nase

00:57:54.210 --> 00:57:56.170
Verwaltung hier für Umwelt und

00:57:56.170 --> 00:57:58.170
so weiter ja auch nicht sagen. Also die können

00:57:58.170 --> 00:58:00.150
uns sagen, ja, das wird wahrscheinlich schwächer

00:58:00.150 --> 00:58:02.090
mit der Zeit. Also klar, solltet ihr das Modell

00:58:02.090 --> 00:58:03.790
regelmäßig neu trainieren, aber die können uns

00:58:03.790 --> 00:58:06.150
sagen, so und jetzt, jetzt ist es aber so viel schwächer

00:58:06.150 --> 00:58:08.030
geworden, so müsst ihr mal neu trainieren. Das kann die

00:58:08.030 --> 00:58:10.010
auch gar nicht sehen. Aber deswegen

00:58:10.010 --> 00:58:11.950
ist es halt meistens so, dass man einfach sagt,

00:58:11.950 --> 00:58:14.070
wir trainieren unser Modell zum Beispiel einmal

00:58:14.070 --> 00:58:15.790
im Monat neu und

00:58:15.790 --> 00:58:17.950
dann wissen wir, dass wir halt eigentlich immer

00:58:17.950 --> 00:58:20.210
neue Zusammenhänge abgedeckt haben.

00:58:20.210 --> 00:58:22.190
Deswegen ist es auch manchmal gar nicht so nützlich,

00:58:22.190 --> 00:58:24.190
ganz, ganz viel Datenhistorie zu haben,

00:58:24.190 --> 00:58:26.250
weil vielleicht das, vor allem jetzt, wo auch noch

00:58:26.250 --> 00:58:28.090
Corona war, dass die Zusammenhänge und

00:58:28.090 --> 00:58:29.690
die Muster während Corona in

00:58:29.690 --> 00:58:32.290
irgendwelchen Verkaufszahlen

00:58:32.290 --> 00:58:33.870
oder menschlichem Verhalten,

00:58:33.870 --> 00:58:36.250
die sind natürlich jetzt, die sind jetzt halt

00:58:36.250 --> 00:58:38.170
anders. Das wäre mein nächster Punkt gewesen. Also wenn

00:58:38.170 --> 00:58:40.030
ich jetzt Statistik nehme, ja, oder von

00:58:40.030 --> 00:58:41.790
Statistik irgendwo abhängige Modelle, um

00:58:41.790 --> 00:58:43.850
Prognosen zu machen für die Zukunft, dann

00:58:43.850 --> 00:58:46.070
bin ich ja immer nur, also auf den,

00:58:46.070 --> 00:58:48.190
ich sag jetzt mal, den Normalfall trainiert,

00:58:48.190 --> 00:58:50.010
ja, oder den Alltag und diese ganzen

00:58:50.010 --> 00:58:52.210
Schocksituationen, die kann ich ja immer ganz

00:58:52.210 --> 00:58:54.170
schlecht irgendwie abbilden, weil ich ja dafür auch kein

00:58:54.170 --> 00:58:55.830
Beispiel gehabt habe, ja.

00:58:55.830 --> 00:58:58.110
Wenn der Schock gerade erst passiert ist,

00:58:58.110 --> 00:58:59.410
dann ist das echt schwierig. Man kann,

00:58:59.410 --> 00:59:01.930
vergangene Schocks kann man halt noch mit reinnehmen und

00:59:01.930 --> 00:59:03.890
sagen, okay, hier war ein Strukturbruch, da hat sich jetzt irgendwie

00:59:03.890 --> 00:59:06.050
was geändert, das nehmen wir als Feature mit rein.

00:59:06.050 --> 00:59:07.790
Geht manchmal, geht auch nicht immer.

00:59:07.790 --> 00:59:09.910
Also

00:59:09.910 --> 00:59:11.750
ich glaube, wir haben tatsächlich

00:59:11.750 --> 00:59:13.090
in der

00:59:13.090 --> 00:59:15.930
Luftfahrtschiff-Projekt haben wir, glaube ich,

00:59:15.930 --> 00:59:17.830
einfach die Zeiträume definiert.

00:59:17.830 --> 00:59:20.130
Hier war Lockdown, hier war kein Lockdown.

00:59:20.130 --> 00:59:22.010
Damit das Modell zumindest weiß,

00:59:22.010 --> 00:59:24.090
ah, deswegen war hier so viel weniger.

00:59:24.150 --> 00:59:25.590
Luftverschmutzung.

00:59:25.590 --> 00:59:28.110
Ja, okay, sonst hättest du gedacht, oh, das ist eine gute Sache.

00:59:28.110 --> 00:59:29.990
Aber ich hab nochmal,

00:59:29.990 --> 00:59:32.050
ich würde mal ganz kurz einen Schritt

00:59:32.050 --> 00:59:33.990
zurückgehen, weil ich hab eine Frage,

00:59:33.990 --> 00:59:36.070
die mich noch jetzt schon interessieren würde,

00:59:36.070 --> 00:59:37.750
weil ich jetzt auch gar nicht so wirklich Ahnung von diesem

00:59:37.750 --> 00:59:40.010
TAP-PFN oder so habe, weil

00:59:40.010 --> 00:59:41.930
in den anderen Bereichen haben ja die,

00:59:41.930 --> 00:59:44.090
also normalerweise hat man neuronale Netze für solche

00:59:44.090 --> 00:59:45.210
tabularischen Daten.

00:59:45.210 --> 00:59:47.970
Das funktioniert auch, aber

00:59:47.970 --> 00:59:49.750
halt nicht so gut wie die anderen Arten von Modellen.

00:59:49.750 --> 00:59:51.830
Oft, und

00:59:51.830 --> 00:59:53.970
die Frage wäre jetzt, was einen, ja,

00:59:53.970 --> 00:59:54.130
die,

00:59:54.130 --> 00:59:55.770
die Transformer, beziehungsweise überhaupt irgendwie

00:59:55.770 --> 00:59:58.090
das ganze Deep Learning, die ganze Deep Learning-Geschichte

00:59:58.090 --> 00:59:59.690
oder so in anderen Bereichen gebracht hat, ist ja,

00:59:59.690 --> 01:00:01.950
dass man nicht mehr so viel

01:00:01.950 --> 01:00:03.690
Feature-Engineering machen musste, oder

01:00:03.690 --> 01:00:05.810
eigentlich ist man ja am Feature-Engineering mehr oder weniger

01:00:05.810 --> 01:00:07.390
vorher gescheitert, und dann

01:00:07.390 --> 01:00:09.990
jetzt kann man halt inzwischen einfach die

01:00:09.990 --> 01:00:11.490
Rohdaten da so, naja,

01:00:11.490 --> 01:00:13.950
mehr oder weniger reinkippen, und

01:00:13.950 --> 01:00:15.890
das neuronale Netz

01:00:15.890 --> 01:00:17.530
macht das Feature-Engineering für einen sozusagen,

01:00:17.530 --> 01:00:19.770
und die Frage wäre halt, macht es das

01:00:19.770 --> 01:00:21.870
möglicherweise, ist es bei TAP-PFN

01:00:21.870 --> 01:00:23.310
auch so, dass ich da jetzt quasi

01:00:23.310 --> 01:00:24.110
...

01:00:24.110 --> 01:00:25.590
auch relativ rohe Daten

01:00:25.590 --> 01:00:27.450
irgendwie verwenden kann, oder muss ich das

01:00:27.450 --> 01:00:29.490
erstmal auch irgendwie in eine Struktur bringen,

01:00:29.490 --> 01:00:30.730
so ähnlich wie bei XGBoost?

01:00:30.730 --> 01:00:34.230
Da fragst du eigentlich die falsche, ich glaube

01:00:34.230 --> 01:00:35.670
aber, dass man da

01:00:35.670 --> 01:00:38.030
nicht viel vorbereiten musste.

01:00:38.030 --> 01:00:40.530
Aber da würde ich

01:00:40.530 --> 01:00:41.750
tatsächlich auch

01:00:41.750 --> 01:00:43.910
auf unsere Podcast-Folge mit dem Autor

01:00:43.910 --> 01:00:45.270
von TAP-PFN verweisen.

01:00:45.270 --> 01:00:46.870
Muss ich mal anhören.

01:00:46.870 --> 01:00:49.650
Klingt gut. Ja, also, genau, die ist dann

01:00:49.650 --> 01:00:50.510
wahrscheinlich für dich die richtige.

01:00:50.510 --> 01:00:54.030
Ja, aber vielleicht noch mal

01:00:54.030 --> 01:00:55.850
zu dem Modelltraining. Wo trainiert

01:00:55.850 --> 01:00:57.230
ihr denn das, und wie macht ihr das?

01:00:57.230 --> 01:01:00.750
Meistens

01:01:00.750 --> 01:01:01.990
auf

01:01:01.990 --> 01:01:03.190
...

01:01:03.190 --> 01:01:06.030
also oft auf ABS-Maschinen

01:01:06.030 --> 01:01:08.050
zum Beispiel. Wir haben auch

01:01:08.050 --> 01:01:09.430
selbst ein paar

01:01:09.430 --> 01:01:12.210
fette Server, die sind jetzt im Rechenzentrum

01:01:12.210 --> 01:01:13.690
in Nürnberg. Seit neuestem haben sie dort

01:01:13.690 --> 01:01:15.870
unter ihresgleichen. Vorher haben wir

01:01:15.870 --> 01:01:17.790
so ein bisschen das Büro beheizt, damals wie

01:01:17.790 --> 01:01:19.870
Winters. Jetzt haben wir ja einen besseren Ort

01:01:19.870 --> 01:01:21.670
gefunden. Also, die benutzen wir auch manchmal, aber

01:01:21.670 --> 01:01:23.790
viel läuft jetzt natürlich inzwischen in der Cloud,

01:01:23.910 --> 01:01:25.670
und auch das ist dann auch kundenabhängig, also

01:01:25.670 --> 01:01:27.670
zum Beispiel, ja, Azure,

01:01:27.670 --> 01:01:29.230
was auch immer dann. Aber

01:01:29.230 --> 01:01:31.830
das sind oft Sachen, die

01:01:31.830 --> 01:01:33.950
dann doch lokal ein bisschen zu lang dauern

01:01:33.950 --> 01:01:35.790
würden, und dann besser auf einer größeren Maschine

01:01:35.790 --> 01:01:37.490
laufen. Also,

01:01:37.490 --> 01:01:39.530
irgendwie, ja. Und

01:01:39.530 --> 01:01:41.710
also, die klassischen Sachen sind halt

01:01:41.710 --> 01:01:43.790
normalerweise einfach auf der

01:01:43.790 --> 01:01:45.790
CPU natürlich, und wenn wir

01:01:45.790 --> 01:01:47.730
dann aber zu LLMs kommen, dann

01:01:47.730 --> 01:01:49.970
geht's natürlich in Richtung GPU, und

01:01:49.970 --> 01:01:51.830
wir haben uns auch da was

01:01:51.830 --> 01:01:53.830
zugelegt vor einigen Monaten, sodass wir uns

01:01:53.830 --> 01:01:55.670
auch eine eigene GPU haben, und auch mal selbst

01:01:55.670 --> 01:01:57.850
das aussetzen konnten auf einer eigenen

01:01:57.850 --> 01:01:59.890
GPU, was natürlich auch

01:01:59.890 --> 01:02:01.870
ganz spannend ist. Also habt ihr eine eigene Maschine

01:02:01.870 --> 01:02:03.950
hingestellt, oder habt ihr irgendwie bei Hetzner oder was gemietet, oder?

01:02:03.950 --> 01:02:05.950
Die haben wir tatsächlich gekauft

01:02:05.950 --> 01:02:07.850
physisch, die sitzt auch im Rechenzentrum,

01:02:07.850 --> 01:02:09.970
und dann irgendwann

01:02:09.970 --> 01:02:11.710
haben wir auch mal was ausprobiert, oder weil die dann

01:02:11.710 --> 01:02:13.870
doch zu klein, da haben wir das dann über AWS gemacht.

01:02:13.870 --> 01:02:14.810
Okay.

01:02:14.810 --> 01:02:17.770
Ja, ist schwierig. Es ist auch schwierig, gerade welche zu

01:02:17.770 --> 01:02:19.870
kaufen, aber, und das ist sehr teuer. Ja, es ist teuer.

01:02:19.870 --> 01:02:20.750
Mieten ist auch sehr teuer.

01:02:20.750 --> 01:02:23.350
Ja, das macht jetzt schon Sinn.

01:02:23.830 --> 01:02:25.690
Wir kaufen die, aber ich glaube,

01:02:25.690 --> 01:02:27.530
die war dann irgendwie zwei Monate später wieder

01:02:27.530 --> 01:02:28.270
deutlich günstiger.

01:02:28.270 --> 01:02:33.430
Ich glaube, also, wenn man die mietet irgendwie, dann kostet die

01:02:33.430 --> 01:02:35.030
irgendwie so 1.000 Euro im Monat, oder sowas.

01:02:35.030 --> 01:02:37.670
Also, wenn du viel Hauptspeicher,

01:02:37.670 --> 01:02:39.330
wenn du zum Beispiel LLMs feintunen willst,

01:02:39.330 --> 01:02:40.430
dann zahlst du eher 1.000 Euro am Tag.

01:02:40.430 --> 01:02:42.630
Ja, das ist richtig teuer.

01:02:42.630 --> 01:02:45.610
Ja, okay, kommt auch wahrscheinlich darauf an, wie viel man braucht, ja.

01:02:45.610 --> 01:02:49.570
Ich glaube, es hat auch ein paar

01:02:49.570 --> 01:02:51.230
Leuten einfach Spaß gemacht, das Ding halt

01:02:51.230 --> 01:02:53.270
auszuwählen und zu kaufen, und dann wirklich

01:02:53.270 --> 01:02:55.230
selber sowas komplett aufzusetzen.

01:02:55.230 --> 01:02:56.250
Ja, ja.

01:02:56.250 --> 01:02:58.370
Das macht auch Spaß, ja.

01:02:58.370 --> 01:02:59.950
Ist ja auch gut, wenn man das dann mal kann.

01:02:59.950 --> 01:03:01.530
Kommt ja der Operator durch auch.

01:03:01.530 --> 01:03:03.810
Ja, ich würde das auch machen.

01:03:03.810 --> 01:03:06.630
Braucht man einen Grund. Gib mir doch einen Grund dafür.

01:03:06.630 --> 01:03:09.350
Also, vielleicht wollt ihr ein unbezahltes Praktikum.

01:03:09.350 --> 01:03:12.990
Wenn wir dann ganz viel große Hardware

01:03:12.990 --> 01:03:14.530
in die Hand nehmen, können wir nun mal nachdenken.

01:03:14.530 --> 01:03:16.810
Ich denke,

01:03:16.810 --> 01:03:18.510
das könnten wir mal nutzen.

01:03:18.510 --> 01:03:22.730
Vielleicht nochmal zu der

01:03:22.730 --> 01:03:24.890
Modellbewertung. Ich hätte ja schon gesagt,

01:03:24.890 --> 01:03:26.610
dass man natürlich Kennzahlen ausbrechen kann

01:03:26.610 --> 01:03:28.910
für die Modellgenauigkeit so insgesamt.

01:03:28.910 --> 01:03:30.950
Wie viele Fälle werden

01:03:30.950 --> 01:03:32.530
richtig vorher gesagt, oder wie weit sind wir

01:03:32.530 --> 01:03:34.810
im Mittel daneben. Aber dann macht es halt

01:03:34.810 --> 01:03:36.550
auch Sinn, diese Blackbox nochmal

01:03:36.550 --> 01:03:38.630
aufzubrechen, wie ihr eben

01:03:38.630 --> 01:03:40.670
erwähnt habt. Dass man guckt, was hat das Modell

01:03:40.670 --> 01:03:42.010
eigentlich für Zusammenhänge gefunden.

01:03:42.010 --> 01:03:44.770
Und das ist bei einer

01:03:44.770 --> 01:03:46.610
linearen Regression natürlich leicht, weil man sich

01:03:46.610 --> 01:03:48.570
einfach die Koeffizienten anguckt und guckt, wie hoch

01:03:48.570 --> 01:03:50.430
die sind oder ob welche signifikant sind.

01:03:50.430 --> 01:03:52.490
Aber das geht dann bei

01:03:52.490 --> 01:03:54.590
XGBoost nicht mehr so leicht, sich irgendwelche

01:03:54.590 --> 01:03:56.530
Splits anzugucken, wie das Modell gefunden hat.

01:03:56.530 --> 01:03:58.470
Aber da gibt es ganz

01:03:58.470 --> 01:04:00.110
tolle Methoden, die nennen sich SHAP

01:04:00.110 --> 01:04:02.550
und die kann man

01:04:02.550 --> 01:04:04.650
dann danach auf die, also man braucht

01:04:04.650 --> 01:04:06.350
das Modell und auch nochmal einen Datensatz,

01:04:06.350 --> 01:04:08.610
mit dem man Prognosen macht. Und wenn man das hat,

01:04:08.610 --> 01:04:10.730
dann kann man diese Methoden darauf werfen

01:04:10.730 --> 01:04:12.630
und kriegt dann ganz

01:04:12.630 --> 01:04:14.590
praktische Visualisierung.

01:04:14.590 --> 01:04:16.530
Also erstmal eine Feature Importance,

01:04:16.530 --> 01:04:18.630
also wie viel wurde welches Feature

01:04:18.630 --> 01:04:20.610
vom Modell eigentlich genutzt. Auch das

01:04:20.610 --> 01:04:22.450
ist ja schon mein erster Plausibilitätscheck,

01:04:22.450 --> 01:04:24.350
wenn da irgendwas ganz am Anfang steht, was sehr

01:04:24.350 --> 01:04:26.590
überrascht ist, sollte man auch überlegen, was da los ist.

01:04:26.590 --> 01:04:28.290
Und da kann man sich auch die Form der

01:04:28.290 --> 01:04:30.110
Zusammenhänge angucken. Zum Beispiel,

01:04:30.110 --> 01:04:32.450
ich glaube, da haben wir auch gesehen,

01:04:32.450 --> 01:04:34.510
je windiger, desto weniger Schadstoff, aber irgendwo

01:04:34.510 --> 01:04:36.370
gibt es dann so eine Sättigung, dann sind die Schadstoffe halt

01:04:36.370 --> 01:04:38.250
irgendwie einfach so weggeweht, wie es nur geht.

01:04:38.250 --> 01:04:40.290
Und

01:04:40.290 --> 01:04:42.310
das, ich glaube,

01:04:42.310 --> 01:04:44.390
es war sogar, nee, ich glaube, das

01:04:44.390 --> 01:04:46.410
war das Interessante, irgendwann wurde es halt wieder schlechter,

01:04:46.410 --> 01:04:48.270
weil dann der Staub

01:04:48.270 --> 01:04:50.350
aufgewirbelt wird. Wenn es so wenig ist, dann hat man

01:04:50.350 --> 01:04:52.430
immer nur den Staub in der Luft, dass es wieder schlechter wird.

01:04:52.450 --> 01:04:54.450
Und da habe ich so, okay, was ist das für ein

01:04:54.450 --> 01:04:56.670
komisches Muster? Und haben das mit Kunden angeguckt.

01:04:56.670 --> 01:04:58.670
Die meinten so, ja, das haben wir auch schon beobachtet.

01:04:58.670 --> 01:05:00.510
Wir denken, das liegt daran,

01:05:00.510 --> 01:05:02.270
dass dann irgendwann, wenn es zu stark ist,

01:05:02.270 --> 01:05:04.070
der Abrief von der ganzen Straße,

01:05:04.070 --> 01:05:05.210
der kommt nochmal mit hoch.

01:05:05.210 --> 01:05:08.450
Ist natürlich, wenn es regnet,

01:05:08.450 --> 01:05:10.170
dann halt eben wieder nicht, weil dann wird

01:05:10.170 --> 01:05:12.050
das eben weggespült. Und dann die Temperatur wieder.

01:05:12.050 --> 01:05:14.530
Und solche Sachen kann man dann halt eben sich angucken

01:05:14.530 --> 01:05:16.430
und überlegen, ob die plausibel sind.

01:05:16.430 --> 01:05:18.430
Und man kann mit den Methoden sogar ganz

01:05:18.430 --> 01:05:19.950
einzelne

01:05:19.950 --> 01:05:22.370
Vorhersagen auch nochmal analysieren.

01:05:22.450 --> 01:05:24.350
Und dann sagt die einem quasi so, okay, wir haben jetzt hier

01:05:24.350 --> 01:05:26.290
3,5 mehr gesagt,

01:05:26.290 --> 01:05:28.270
weil es ist Montag. Und dann haben wir aber nochmal

01:05:28.270 --> 01:05:30.390
1,2 weniger gesagt, weil es ist

01:05:30.390 --> 01:05:31.770
in den Ferien oder sowas.

01:05:31.770 --> 01:05:34.410
Und das ist natürlich

01:05:34.410 --> 01:05:36.450
auch sehr gut, um wirklich erklären zu können,

01:05:36.450 --> 01:05:38.390
warum man genau diese Prognose

01:05:38.390 --> 01:05:39.790
macht und was das Modell findet.

01:05:39.790 --> 01:05:42.310
Und um sich sicher zu sein, dass man auch irgendwie

01:05:42.310 --> 01:05:44.270
ein sinnvolles und gutes Modell gefunden hat.

01:05:44.270 --> 01:05:46.310
Und das klingt jetzt alles so linear,

01:05:46.310 --> 01:05:48.330
als würde man da so durchgehen. Aber das ist dann

01:05:48.330 --> 01:05:50.370
auch manchmal ein Moment, wo man nochmal Ideen hat

01:05:50.370 --> 01:05:52.350
und neue Features baut. Oder nochmal

01:05:52.450 --> 01:05:54.350
Ideen hat und die Daten bereinigt, weil einem

01:05:54.350 --> 01:05:56.350
irgendwas ganz komisches auffällt, irgendein Artefakt,

01:05:56.350 --> 01:05:57.290
das man loswerden muss.

01:05:57.290 --> 01:06:00.470
Egal wie toll man sich

01:06:00.470 --> 01:06:02.450
die Daten vorher anguckt, manche Sachen, finde ich,

01:06:02.450 --> 01:06:04.330
sieht man einfach erst nach der Modellierung und

01:06:04.330 --> 01:06:06.310
muss dann irgendwie nochmal ein Stück zurückgehen. Das ist ja kein Problem.

01:06:06.310 --> 01:06:06.930
Okay.

01:06:06.930 --> 01:06:10.630
Das ist ja dieser jeweils Step, der dann

01:06:10.630 --> 01:06:12.410
guckt, ob das, was man da macht, auch

01:06:12.410 --> 01:06:14.650
dem entspricht, was man so möchte.

01:06:14.650 --> 01:06:16.310
Oder ja, es gibt

01:06:16.310 --> 01:06:18.210
ein Alert. Oh, irgendwas

01:06:18.210 --> 01:06:20.230
stimmt hier nicht. Aber das kann natürlich auch sein, dass in der Realität

01:06:20.230 --> 01:06:21.490
irgendwas nicht stimmt. Das kommt erst später.

01:06:21.490 --> 01:06:21.770
Ja.

01:06:22.450 --> 01:06:24.550
Da haben wir noch gar kein Alerting-System.

01:06:24.550 --> 01:06:25.730
Da haben wir irgendwie noch gar nichts.

01:06:25.730 --> 01:06:28.410
Wir haben jetzt vielleicht eine Pipeline, die

01:06:28.410 --> 01:06:30.290
die Tests laufen lässt, wenn wir was pushen.

01:06:30.290 --> 01:06:32.390
Aber mehr ist in dem Moment normalerweise noch nicht

01:06:32.390 --> 01:06:33.170
automatisiert.

01:06:33.170 --> 01:06:36.170
Und ja, wir schreiben auch sehr gerne Tests.

01:06:36.170 --> 01:06:37.290
In was schreibt ihr Tests?

01:06:37.290 --> 01:06:40.310
Ich glaube, es ist eigentlich immer

01:06:40.310 --> 01:06:41.310
ein Pytest unterwegs.

01:06:41.310 --> 01:06:44.430
So. Wir lieben

01:06:44.430 --> 01:06:44.830
Pytests.

01:06:44.830 --> 01:06:48.350
Wobei Tests mit Daten ja auch manchmal ganz witzig

01:06:48.350 --> 01:06:50.130
sind, weil man

01:06:50.130 --> 01:06:52.450
ja, braucht man sich dann

01:06:52.450 --> 01:06:54.450
keinen Testdatensatz. Ist der dann

01:06:54.450 --> 01:06:55.990
realistisch?

01:06:55.990 --> 01:06:57.770
Macht man vielleicht sogar Tests gegen die

01:06:57.770 --> 01:07:00.150
echten Daten? Die dürfen, die können natürlich

01:07:00.150 --> 01:07:02.370
keine einzelnen Werte prüfen, aber man kann damit testen,

01:07:02.370 --> 01:07:04.270
ob es überhaupt durchläuft. Also ja, das ist

01:07:04.270 --> 01:07:05.090
ein ganz eigenes Thema.

01:07:05.090 --> 01:07:08.310
Ja, es ist

01:07:08.310 --> 01:07:10.310
tatsächlich schon, ja, also ich würde auch

01:07:10.310 --> 01:07:12.350
dazu tendieren, irgendwie aus der Realität irgendwas rauszuschneiden

01:07:12.350 --> 01:07:14.430
und dann zu gucken, ob das dann so läuft.

01:07:14.430 --> 01:07:16.230
Weil also so Daten

01:07:16.230 --> 01:07:17.930
mocken ist immer so ein bisschen...

01:07:17.930 --> 01:07:19.370
Naja, gut, ja.

01:07:19.370 --> 01:07:22.450
Ja, es geht auch mal, aber...

01:07:22.450 --> 01:07:24.390
Schwer. Ja, also in dem Moment

01:07:24.390 --> 01:07:26.170
wäre man ja eigentlich nur bei einem POC,

01:07:26.170 --> 01:07:28.390
bei einem Proof of Concept und so

01:07:28.390 --> 01:07:30.510
ein richtiges Produkt oder ein MVP,

01:07:30.510 --> 01:07:32.550
ein Minimum Viable Product,

01:07:32.550 --> 01:07:34.270
kriegt man ja erst, wenn man dann das Ganze

01:07:34.270 --> 01:07:35.810
auch deployt und automatisiert.

01:07:35.810 --> 01:07:37.490
Und

01:07:37.490 --> 01:07:40.090
wir, ja, wir stellen unsere

01:07:40.090 --> 01:07:42.390
Prognosen oder Klassifikationen

01:07:42.390 --> 01:07:42.890
oder was auch immer

01:07:42.890 --> 01:07:46.110
oft über APIs zur Verfügung,

01:07:46.110 --> 01:07:47.450
über Rest-APIs.

01:07:47.450 --> 01:07:50.330
Oft machen wir aber auch noch mal

01:07:50.330 --> 01:07:52.430
schon ein Frontend dazu,

01:07:52.450 --> 01:07:54.610
also eine Web-App, wo die dann angezeigt

01:07:54.610 --> 01:07:56.470
werden, wo zum Beispiel unser Kunde sich dann

01:07:56.470 --> 01:07:58.350
die Alarme angucken kann

01:07:58.350 --> 01:07:59.650
von irgendwelchen

01:07:59.650 --> 01:08:02.510
Käufen, die irgendwie suspekt aussehen.

01:08:02.510 --> 01:08:04.170
Mit was macht ihr

01:08:04.170 --> 01:08:06.410
eine Vent-App? Mit was macht ihr

01:08:06.410 --> 01:08:06.950
die Web-Apps?

01:08:06.950 --> 01:08:10.170
Meistens mit Vue.js

01:08:10.170 --> 01:08:12.150
und

01:08:12.150 --> 01:08:14.030
historisch auch noch häufiger mit

01:08:14.030 --> 01:08:16.450
Asshiny, aber das...

01:08:16.450 --> 01:08:18.150
Da haben wir

01:08:18.150 --> 01:08:20.390
ein Projekt, das ist eigentlich ganz cool, da haben wir

01:08:20.390 --> 01:08:22.190
das, da geht es gar nicht mehr um irgendwelche

01:08:22.190 --> 01:08:23.750
Prognosen zur Verfügung zu stellen, sondern

01:08:23.750 --> 01:08:26.330
da haben wir Shiny-Apps gebaut, damit Leute

01:08:26.330 --> 01:08:28.290
Modellierungsalgorithmen

01:08:28.290 --> 01:08:30.030
anwenden können, ohne dass sie selbst

01:08:30.030 --> 01:08:32.230
R-Code schreiben können müssen, weil das ist für

01:08:32.230 --> 01:08:33.710
ganz viele Forschende, die

01:08:33.710 --> 01:08:36.130
aber nicht gut selbst coden können und dann wäre

01:08:36.130 --> 01:08:38.350
die Hürde natürlich total riesig, aber die brauchen

01:08:38.350 --> 01:08:40.290
eigentlich diese ziemlich komplexen Methoden

01:08:40.290 --> 01:08:42.010
und deswegen haben wir da für ein

01:08:42.010 --> 01:08:44.230
Forschungsinstitut einige Apps gebaut, wo

01:08:44.230 --> 01:08:46.170
die dann eben über eine Klick-Oberfläche

01:08:46.170 --> 01:08:48.050
können sie ihre Daten hochladen und können dann

01:08:48.050 --> 01:08:50.030
die Analyse fahren mit bestimmten Einstellungen und

01:08:50.030 --> 01:08:51.890
kriegen dann Ergebnisse und Visualisierungen des

01:08:51.890 --> 01:08:53.510
Dienstes, die natürlich auch sehr praktisch

01:08:53.510 --> 01:08:55.770
und schreiben die dann mit ihre Doktorarbeiten.

01:08:55.770 --> 01:08:58.270
Ja, aber

01:08:58.270 --> 01:08:59.750
zurück zu

01:08:59.750 --> 01:09:01.950
unseren Prognosergebnissen.

01:09:01.950 --> 01:09:03.870
Genau, oft stellen wir die

01:09:03.870 --> 01:09:05.830
über eine API zur Verfügung oder wir schreiben

01:09:05.830 --> 01:09:07.710
sie irgendwo in eine Datenbank und der Kunde nutzt

01:09:07.710 --> 01:09:09.730
sie dann halt so. Das ist tatsächlich auch was,

01:09:09.730 --> 01:09:11.750
was man vorher wirklich klären muss. Reicht

01:09:11.750 --> 01:09:13.730
das denen, wenn das eine API ist oder sitzen

01:09:13.730 --> 01:09:15.610
da dann Leute, die damit

01:09:15.610 --> 01:09:17.890
überhaupt nichts anfangen können und sagen, ja, was sind denn jetzt meine Zahlen?

01:09:17.890 --> 01:09:19.230
Also,

01:09:19.230 --> 01:09:21.630
genau, das muss man natürlich auch vorher

01:09:21.630 --> 01:09:22.810
wirklich bis zum Ende denken.

01:09:22.810 --> 01:09:25.630
Und unsere Erfahrung ist auch, dass

01:09:25.630 --> 01:09:27.050
es, auch wenn

01:09:27.050 --> 01:09:29.370
der Kunde dann irgendwie vorhat, doch

01:09:29.370 --> 01:09:31.630
das selbst zu machen, sagt, ja, schreib das in die

01:09:31.630 --> 01:09:33.370
Datenbank und dann benutzen wir es

01:09:33.370 --> 01:09:35.670
einfach so weiter, dann trotzdem

01:09:35.670 --> 01:09:37.590
lohnt es sich oft, dass wir das dann

01:09:37.590 --> 01:09:39.810
doch mitdenken und zumindest irgendwie eine kleine Web-Anwendung

01:09:39.810 --> 01:09:41.630
schreiben, weil sonst die Löhne doch

01:09:41.630 --> 01:09:43.550
groß ist und dann hat der in IT halt eben auch

01:09:43.550 --> 01:09:45.790
total viel zu tun und dann ist es richtig schade,

01:09:45.790 --> 01:09:47.750
wenn das Projekt nachher in der Schublade landet

01:09:47.750 --> 01:09:49.610
und fällt dann ja am Ende irgendwie

01:09:49.610 --> 01:09:51.510
auch auf uns zurück. Also dann lieber

01:09:51.510 --> 01:09:51.610
noch.

01:09:51.630 --> 01:09:53.510
noch mal was Kleines bauen, damit

01:09:53.510 --> 01:09:54.690
die dann doch was sehen können.

01:09:54.690 --> 01:09:57.330
Aber wenn die Farben dann auch richtig sind,

01:09:57.330 --> 01:09:58.390
das ist das Wichtigste an Flickung.

01:09:58.390 --> 01:10:01.450
Ja, das kann man auch durch

01:10:01.450 --> 01:10:02.990
unterschätzen. Das sieht ja alles

01:10:02.990 --> 01:10:04.450
sauhässlich aus.

01:10:04.450 --> 01:10:05.490
Ja.

01:10:05.490 --> 01:10:08.790
Und

01:10:08.790 --> 01:10:11.570
ja, üblicherweise, das hat man eben

01:10:11.570 --> 01:10:13.390
schon gesagt, ein Modell muss man natürlich regelmäßig neu

01:10:13.390 --> 01:10:15.290
trainieren, weil sich Zusammenhänge in der Regel

01:10:15.290 --> 01:10:17.510
in allen Bereichen immer

01:10:17.510 --> 01:10:19.370
mal wieder ändern. Das ist dann oft so

01:10:19.370 --> 01:10:21.550
was wie einmal im Monat ab und

01:10:21.550 --> 01:10:23.290
so sollte man sich das Modell sogar auch noch mal

01:10:23.290 --> 01:10:25.070
ganz genau anschauen, zum Beispiel noch mal diese ganzen

01:10:25.070 --> 01:10:27.210
Chefsachen berechnen und gucken, ist das eigentlich noch

01:10:27.210 --> 01:10:29.250
plausibel? Das kann man

01:10:29.250 --> 01:10:31.650
vielleicht einmal im Jahr machen und

01:10:31.650 --> 01:10:33.570
die Prognoseerstellung

01:10:33.570 --> 01:10:35.330
kommt halt darauf an, wie oft die benötigt wird und

01:10:35.330 --> 01:10:37.370
auch wie schnell sich die Sachen ändern. Also in vielen Projekten

01:10:37.370 --> 01:10:39.150
ist es, dass es einmal am Tag passiert, aber

01:10:39.150 --> 01:10:41.130
manchmal ist es dann auch wirklich in Echtzeit, dass dann der

01:10:41.130 --> 01:10:43.130
Anfall reinkommt und dann wird die

01:10:43.130 --> 01:10:45.190
Prognose für diesen einen

01:10:45.190 --> 01:10:47.390
ganz konkreten Fall erstellt und oft kann man

01:10:47.390 --> 01:10:49.170
die auch noch nicht vorbereiten, weil man die Daten vielleicht dann

01:10:49.170 --> 01:10:51.350
nicht hat, sondern kommen dann rein die Daten und

01:10:51.350 --> 01:10:53.070
dann braucht man eine Prognose. Zum Beispiel

01:10:53.070 --> 01:10:54.750
kommt ein neuer Kauf rein oder

01:10:54.750 --> 01:10:56.710
eine Anfrage und man muss in dem Moment

01:10:56.710 --> 01:10:58.870
entscheiden, ist das irgendwie

01:10:58.870 --> 01:11:00.710
verdächtig? Könnte das

01:11:00.710 --> 01:11:02.430
Betrug sein oder ist alles okay?

01:11:02.430 --> 01:11:05.050
Und

01:11:05.050 --> 01:11:07.110
man sollte das natürlich auch überhaupt nicht

01:11:07.110 --> 01:11:09.130
unterschätzen, weil vom POC

01:11:09.130 --> 01:11:11.210
zum MBP und das ist dann ja noch

01:11:11.210 --> 01:11:12.830
ein simples Produkt, das ist oft nochmal

01:11:12.830 --> 01:11:14.790
Faktor 10 vom Aufwand her. Ich glaube, das

01:11:14.790 --> 01:11:16.990
ist halt total schwer, vor allem wenn man

01:11:16.990 --> 01:11:18.830
am Anfang so ein bisschen geprototypt hat oder

01:11:18.830 --> 01:11:21.270
vielleicht mit kleineren Daten gearbeitet hat und dann

01:11:21.270 --> 01:11:22.970
muss man auf einmal vermitteln, ja, jetzt

01:11:22.970 --> 01:11:24.850
brauchen wir aber nochmal ganz viel Zeit und ich denke so,

01:11:24.850 --> 01:11:26.970
hey, ihr habt uns doch gerade die Ergebnisse gezeigt, die sind doch

01:11:26.970 --> 01:11:27.310
da.

01:11:27.310 --> 01:11:30.770
Ja, klar, das ist natürlich auch

01:11:30.770 --> 01:11:32.890
schwer nachvollziehbar von außen, deswegen ist es einfach

01:11:32.890 --> 01:11:34.870
wichtig, das richtig zu kommunizieren.

01:11:34.870 --> 01:11:36.770
Ja, ich wollte gerade sagen, schwer zu kommunizieren, das ist, finde ich,

01:11:36.770 --> 01:11:38.630
auch ein Hauptproblem, gerade bei so Kunden

01:11:38.630 --> 01:11:40.270
und Technologie.

01:11:40.270 --> 01:11:43.050
Ich meine, kann man ja verstehen,

01:11:43.050 --> 01:11:45.110
dass jemand sich dann ein bisschen an der Nase rumgeführt

01:11:45.110 --> 01:11:46.950
fühlt oder einfach schlecht informiert

01:11:46.950 --> 01:11:47.310
fühlt.

01:11:47.310 --> 01:11:50.750
Ja, schwierig.

01:11:51.270 --> 01:11:52.590
Ja.

01:11:52.590 --> 01:11:54.530
Ja, und

01:11:54.530 --> 01:11:56.670
dann gibt es natürlich

01:11:56.670 --> 01:11:59.010
auch immer noch den Bereich Monitoring

01:11:59.010 --> 01:12:01.090
und Wartung, also das, wo wir jetzt auch gerade

01:12:01.090 --> 01:12:03.070
in dem Projekt mit der Senatsverwaltung drinstecken,

01:12:03.070 --> 01:12:05.070
seit schon einigen

01:12:05.070 --> 01:12:07.070
Monaten, da haben

01:12:07.070 --> 01:12:09.050
wir natürlich Alerts, wenn irgendwo

01:12:09.050 --> 01:12:10.810
ein Prozess abbricht, wenn es irgendwo einen Fehler

01:12:10.810 --> 01:12:13.010
in einem Pod gibt, dann müssen wir das

01:12:13.010 --> 01:12:15.250
natürlich wissen, aber es kann auch

01:12:15.250 --> 01:12:17.010
sein, dass die durchlaufen ohne

01:12:17.010 --> 01:12:19.070
Fehler, aber trotzdem irgendwas stimmt

01:12:19.070 --> 01:12:21.250
und vielleicht nur für Halbbelly,

01:12:21.250 --> 01:12:23.010
in Prognosen erstellt werden oder nur

01:12:23.010 --> 01:12:25.090
für einen halben Tag und deswegen sind dann da auch

01:12:25.090 --> 01:12:26.830
Alarme definiert, die gucken,

01:12:26.830 --> 01:12:28.950
ist die Anzahl, entspricht die Anzahl

01:12:28.950 --> 01:12:30.730
der Prognosen in der Datenbank auch tatsächlich

01:12:30.730 --> 01:12:32.830
unserer Erwartung? Man kann auch

01:12:32.830 --> 01:12:34.930
definieren, gibt es irgendwelche unerwarteten

01:12:34.930 --> 01:12:37.190
Werte, extrem hohe Prognosen beispielsweise

01:12:37.190 --> 01:12:39.030
oder gibt es unerwartete Werte

01:12:39.030 --> 01:12:40.130
in den Input-Daten,

01:12:40.130 --> 01:12:42.770
Werte, die vielleicht überhaupt nicht definiert sind

01:12:42.770 --> 01:12:45.170
und dann auch wichtig

01:12:45.170 --> 01:12:47.250
ist der Model-Drift

01:12:47.250 --> 01:12:48.990
oder Data-Drift, das heißt, dass die

01:12:48.990 --> 01:12:51.230
Daten so nach und

01:12:51.230 --> 01:12:53.170
nach irgendwie in eine andere Richtung driften

01:12:53.170 --> 01:12:54.950
und sich verändern oder das

01:12:54.950 --> 01:12:57.290
Modell so nach und nach immer so ein bisschen

01:12:57.290 --> 01:12:59.190
schlechter wird, aber irgendwann,

01:12:59.190 --> 01:13:01.030
wenn es das lange genug gemacht hat, dann ist es halt

01:13:01.030 --> 01:13:03.190
irgendwann nicht mehr gut genug und dann möchte man

01:13:03.190 --> 01:13:05.090
das ja auch mitbekommen und zum Beispiel bei jedem

01:13:05.090 --> 01:13:06.870
monatlichen Modell-Neutraining will man auch mal

01:13:06.870 --> 01:13:09.230
die ganzen KPIs, also die ganzen

01:13:09.230 --> 01:13:10.990
Gütemaße sehen und

01:13:10.990 --> 01:13:13.170
oder vielleicht will man sie nicht angucken, sondern

01:13:13.170 --> 01:13:15.290
möchte halt einfach informiert werden, ob die sich

01:13:15.290 --> 01:13:16.930
nach einer Weile vielleicht zu stark

01:13:16.930 --> 01:13:19.030
verschlechtert haben und dann muss man sich einfach nochmal angucken, was

01:13:19.030 --> 01:13:21.110
los ist, was halt eben auch nochmal zeigt,

01:13:21.210 --> 01:13:23.090
es ist halt nicht ganz fertig und dann kann man es für immer

01:13:23.090 --> 01:13:25.130
benutzen, aber gut, das ist ja auch in der klassischen

01:13:25.130 --> 01:13:26.290
Softwareentwicklung oft so,

01:13:26.290 --> 01:13:29.070
dass das so ein bisschen unterschätzt wird,

01:13:29.070 --> 01:13:31.070
wie viel dann doch noch gemacht werden muss, obwohl es doch fertig

01:13:31.070 --> 01:13:32.850
ist. Macht ihr denn eigene

01:13:32.850 --> 01:13:35.050
Monitoring-Tools oder nutzt ihr ja auch eins von den Sachen,

01:13:35.050 --> 01:13:37.090
die es da so gibt? Ja, also

01:13:37.090 --> 01:13:39.290
ReDash benutzen wir in dem einen Projekt

01:13:39.290 --> 01:13:41.010
ja ganz gerne und

01:13:41.010 --> 01:13:43.030
sonst, ja, wie das,

01:13:43.030 --> 01:13:44.490
was ich gerade dann

01:13:44.490 --> 01:13:47.230
anbiete, die ich überlege gerade, was wir sonst

01:13:47.230 --> 01:13:49.570
auch so haben, ja, es gibt ja normalerweise

01:13:49.570 --> 01:13:51.190
dann Tools, die man da

01:13:51.190 --> 01:13:53.210
benutzen kann und die man dann

01:13:53.210 --> 01:13:55.290
zum Beispiel auch an Slack anschließen kann und kriegt dann da

01:13:55.290 --> 01:13:56.330
Nachrichten.

01:13:56.330 --> 01:13:58.790
Weiß ich gerade gar nicht so genau, was die

01:13:58.790 --> 01:14:00.590
in anderen Projekten benutzen.

01:14:00.590 --> 01:14:01.810
Doch, doch, es gibt ganz viele.

01:14:01.810 --> 01:14:04.270
Ich versuche gerade meinen Discord anzubinden.

01:14:04.270 --> 01:14:07.050
Ah, okay, also was ich empfehlen kann für

01:14:07.050 --> 01:14:07.970
so Monitoring-Geschichten,

01:14:07.970 --> 01:14:11.030
ist Telegram, weil das halt sehr einfach ist,

01:14:11.030 --> 01:14:13.030
da irgendwie über die

01:14:13.030 --> 01:14:14.690
API Dinge zu verschicken.

01:14:14.690 --> 01:14:17.010
Telegram kriege ich auch Nachrichten für meine Server, falls da

01:14:17.010 --> 01:14:18.430
irgendwas passiert, was ich will, ja.

01:14:18.430 --> 01:14:20.210
Ja, cool.

01:14:21.170 --> 01:14:21.510
Zu wissen.

01:14:21.510 --> 01:14:24.530
Ist ja auch immer mal so ein spannendes Thema,

01:14:24.530 --> 01:14:26.730
weg von US-Diensten und so.

01:14:26.730 --> 01:14:29.270
Ja, wahrscheinlich, genau, das ist natürlich

01:14:29.270 --> 01:14:29.990
wenn ich über die Russen nehme.

01:14:29.990 --> 01:14:32.610
Weil Telegram irgendwie an der richtigen Adresse ist.

01:14:32.610 --> 01:14:35.110
Man soll ja streuen.

01:14:35.110 --> 01:14:36.670
Ja, ja, genau.

01:14:36.670 --> 01:14:38.310
Ja, das ist das eigene.

01:14:38.310 --> 01:14:41.110
Wir nehmen meistens immer so eigene Server oder sowas, aber wenn die halt

01:14:41.110 --> 01:14:42.950
dann wechseln, ist halt auch blöd, dann merkt man es halt sonst nicht.

01:14:42.950 --> 01:14:45.310
Ja, dann musst du halt irgendwo anders noch

01:14:45.310 --> 01:14:46.110
Dinge haben.

01:14:46.110 --> 01:14:49.230
Ja, aber ja, klar, es wird dann auch

01:14:49.230 --> 01:14:51.090
teurer. Monitoring ist ja zu ruhig,

01:14:51.150 --> 01:14:52.330
was passiert denn da jetzt, ne, genau.

01:14:52.330 --> 01:14:55.210
Endlich sind alle Bugs

01:14:55.210 --> 01:14:55.990
weg. Ja.

01:14:55.990 --> 01:14:57.270
Eigentlich ist alles gut.

01:14:57.270 --> 01:15:00.770
Hat jemand den Nähenzuhörer mit in die Tasche gesteckt und drunter gemacht?

01:15:00.770 --> 01:15:02.630
Ja.

01:15:02.630 --> 01:15:05.350
Ja, so, noch ein ganz

01:15:05.350 --> 01:15:07.170
wichtiges Stichwort in dem Bereich ist natürlich

01:15:07.170 --> 01:15:09.050
ML Ops, also Machine Learning

01:15:09.050 --> 01:15:10.990
Operations, also Mischung aus DevOps

01:15:10.990 --> 01:15:12.790
und Machine Learning ist das Wort.

01:15:12.790 --> 01:15:15.270
Der Kurzvortritt ist der Rathops,

01:15:15.270 --> 01:15:15.470
oder?

01:15:15.470 --> 01:15:17.090
Ja, genau.

01:15:21.130 --> 01:15:23.050
Und, ja, es ist

01:15:23.050 --> 01:15:24.950
im Prinzip DevOps, aber

01:15:24.950 --> 01:15:27.490
Anpassung auf diesen, auf den Datencase,

01:15:27.490 --> 01:15:29.290
auf die Arbeit mit Daten, das heißt

01:15:29.290 --> 01:15:31.250
es kommen noch so ein paar Sachen dazu, wie zum Beispiel

01:15:31.250 --> 01:15:33.270
dass man nicht nur Code versionieren muss,

01:15:33.270 --> 01:15:34.850
sondern auch Modelle

01:15:34.850 --> 01:15:37.230
oder vielleicht Experimente versionieren

01:15:37.230 --> 01:15:39.230
und, ja,

01:15:39.230 --> 01:15:41.310
es gibt halt nicht nur Code-Änderungen,

01:15:41.310 --> 01:15:43.030
die dazu führen, dass die Ergebnisse anders sind,

01:15:43.030 --> 01:15:44.950
sondern auch jeder neue Datenpunkt

01:15:44.950 --> 01:15:47.470
kann, ja, die Ergebnisse

01:15:47.470 --> 01:15:48.790
verändern, das heißt, da kommt dann

01:15:48.790 --> 01:15:50.810
nochmal so eine zusätzliche Komplexität,

01:15:51.130 --> 01:15:55.930
ebene mit rein naja das ist auch ja also

01:15:55.940 --> 01:15:56.940
auch eine ganz wichtige Geschichte.

01:15:56.940 --> 01:15:59.480
Also ich finde das immer dann schwierig, wenn das halt so

01:15:59.480 --> 01:16:02.000
verteilte Systeme sind, die gleichzeitig irgendwie rechnen

01:16:02.000 --> 01:16:03.760
und dann die Sachen wieder zusammenführen müssen.

01:16:03.760 --> 01:16:05.880
Da steige ich auch nicht so genau

01:16:05.880 --> 01:16:08.080
durch, wie man das ordentlich machen will.

01:16:08.080 --> 01:16:09.780
Aber wenn das so

01:16:09.780 --> 01:16:11.740
distributed ist, was halt beim Machine Learning

01:16:11.740 --> 01:16:12.700
auch mal passieren kann, ja?

01:16:12.700 --> 01:16:15.420
Ja, also würde ich jetzt, also aus meiner Erfahrung,

01:16:15.420 --> 01:16:17.300
also bei mir ist das eigentlich,

01:16:17.300 --> 01:16:19.560
also das letzte Mal, dass

01:16:19.560 --> 01:16:21.580
ich den Fall hatte, dass

01:16:21.580 --> 01:16:24.000
wir irgendwie sowas verteilen

01:16:24.000 --> 01:16:25.540
mussten, dann war das wegen, weil

01:16:25.540 --> 01:16:27.520
die Maschinen 32 Bit waren

01:16:27.520 --> 01:16:29.520
und nicht mehr als 4 Gigabyte, wie man

01:16:29.520 --> 01:16:31.680
auf eine Maschine kriegte, und dann brauchte man

01:16:31.680 --> 01:16:33.620
mehrere Maschinen, aber danach ist das

01:16:33.620 --> 01:16:35.420
eigentlich, ehrlich gesagt, also mir nicht mehr

01:16:35.420 --> 01:16:36.500
passiert, weil...

01:16:36.500 --> 01:16:39.600
Ich hab meine Daten zu klein, das kann schon sein,

01:16:39.600 --> 01:16:40.040
aber

01:16:40.040 --> 01:16:43.620
man kriegt heute so große Maschinen, also...

01:16:43.620 --> 01:16:44.340
Ja,

01:16:44.340 --> 01:16:46.560
die Preise haben wir uns ja gerade unterhalten, ja.

01:16:46.560 --> 01:16:48.980
Ja, aber wenn man CPU,

01:16:48.980 --> 01:16:51.200
die meisten Sachen brauchen wir mal eher CPU,

01:16:51.200 --> 01:16:53.000
dann das ist nicht so toll.

01:16:53.000 --> 01:16:54.540
Okay.

01:16:55.140 --> 01:16:57.340
Wenn du dann so eine ganz große Maschine hast und die ist teuer

01:16:57.340 --> 01:16:59.240
und dann kannst du den Code so optimieren, dass es

01:16:59.240 --> 01:17:00.760
viel, viel billiger wird, dann

01:17:00.760 --> 01:17:02.840
ist das doch auch ein tolles Erfolg.

01:17:02.840 --> 01:17:04.440
Ja.

01:17:04.440 --> 01:17:07.660
Ja, wo wir jetzt gerade schon mal

01:17:07.660 --> 01:17:09.440
optimieren sind, wie ist das denn mit

01:17:09.440 --> 01:17:11.400
Performance zum Beispiel? Ich glaube, das ist noch was

01:17:11.400 --> 01:17:12.680
gewesen, wo wir sprechen wollten.

01:17:12.680 --> 01:17:15.240
Ja, also da könnte man natürlich auch eine ganz

01:17:15.240 --> 01:17:17.040
separate Folge dazu machen, aber grundsätzlich

01:17:17.040 --> 01:17:19.300
ist das auch natürlich ein spannendes

01:17:19.300 --> 01:17:20.760
Thema. Also was

01:17:20.760 --> 01:17:23.240
mir da immer mal wieder

01:17:23.240 --> 01:17:24.920
auffällt, das ist das,

01:17:24.940 --> 01:17:26.220
manchmal,

01:17:26.220 --> 01:17:28.480
ja, wenn man eben die

01:17:28.480 --> 01:17:30.700
Funktionen nicht kennt, die eigentlich

01:17:30.700 --> 01:17:32.660
dafür da sind, mit Datensätzen zu arbeiten, dann

01:17:32.660 --> 01:17:35.060
kann es etwas unperformant

01:17:35.060 --> 01:17:36.560
werden, weil man zum Beispiel über den ganzen

01:17:36.560 --> 01:17:38.660
Datensatz loopt, obwohl man Sachen auf die

01:17:38.660 --> 01:17:40.480
ganze Spalte anwenden könnte. Und die sind dann in

01:17:40.480 --> 01:17:41.980
NumPy und sind halt total optimiert.

01:17:41.980 --> 01:17:44.860
Und

01:17:44.860 --> 01:17:46.680
da gibt es eine Menge Sachen.

01:17:46.680 --> 01:17:48.580
Also natürlich, ich glaube,

01:17:48.580 --> 01:17:50.700
treffen alle

01:17:50.700 --> 01:17:52.920
Sachen zu, die generell auf Softwareentwicklung zutreffen.

01:17:52.920 --> 01:17:54.740
Die treffen natürlich auch bei Daten zu und dann

01:17:54.740 --> 01:17:56.660
kommen noch ein paar Sachen dazu. Also zum

01:17:56.660 --> 01:17:58.760
Beispiel Umgang mit großen Datensätzen.

01:17:58.760 --> 01:18:00.720
Da hat man eben schon mal

01:18:00.720 --> 01:18:02.540
angeschnitten, dass das natürlich Spark

01:18:02.540 --> 01:18:04.660
gibt, aber es auch nicht unbedingt total schnell immer

01:18:04.660 --> 01:18:06.720
ist. Und manchmal ist es

01:18:06.720 --> 01:18:08.580
aber auch echt ausreichend, auf einem Sample zu

01:18:08.580 --> 01:18:10.780
arbeiten, weil wenn ich eh schon

01:18:10.780 --> 01:18:12.600
Millionen von Zeilen habe, dann werden die

01:18:12.600 --> 01:18:14.560
weiteren zehn Millionen von Zeilen meistens auch

01:18:14.560 --> 01:18:16.680
nur so viel zusätzliche Information

01:18:16.680 --> 01:18:18.620
liefern. Und dann kann ich mein

01:18:18.620 --> 01:18:20.560
Modell auch auf einem Sample trainieren. Ich kann ja

01:18:20.560 --> 01:18:22.640
immer mal noch das checken, ob es

01:18:22.640 --> 01:18:24.060
wirklich nicht immer viel besser wird.

01:18:24.540 --> 01:18:25.920
Aber das ist so

01:18:25.920 --> 01:18:28.220
sowas, was man

01:18:28.220 --> 01:18:29.640
im Blick haben sollte.

01:18:29.640 --> 01:18:32.400
Ich gucke mal gerade noch. Ich hätte da mal

01:18:32.400 --> 01:18:33.800
so eine Liste.

01:18:33.800 --> 01:18:36.520
Ja,

01:18:36.520 --> 01:18:38.420
Polar ist eben auch schneller

01:18:38.420 --> 01:18:40.240
als Pandas. Es gab auch vorher noch

01:18:40.240 --> 01:18:42.340
ein, also es gibt auch immer noch

01:18:42.340 --> 01:18:44.640
das Paket Data Table,

01:18:44.640 --> 01:18:46.400
aber ich glaube, dass es einfach gar nicht mehr so

01:18:46.400 --> 01:18:47.980
interessant ist, wo es Polar gibt.

01:18:47.980 --> 01:18:50.400
Und dann, ja,

01:18:50.400 --> 01:18:52.500
bei Datenbanken ist es auch manchmal ganz

01:18:52.500 --> 01:18:54.340
interessant, weil die

01:18:54.340 --> 01:18:56.420
sind oft eher darauf optimiert,

01:18:56.420 --> 01:18:58.220
dass man eine kleine Menge von Daten abruft

01:18:58.220 --> 01:19:00.160
oder hinschreibt. Und wenn man dann auf einmal mehrere

01:19:00.160 --> 01:19:02.380
Millionen Zeilen hat, dann werden die so Stück für Stück

01:19:02.380 --> 01:19:04.200
abgerufen und hingeschrieben,

01:19:04.200 --> 01:19:06.240
wie hat der welchen Treiber man nutzt. Und da gibt es dann

01:19:06.240 --> 01:19:08.260
auch Hacks, wie

01:19:08.260 --> 01:19:09.640
zum Beispiel, dass man es erst in

01:19:09.640 --> 01:19:12.240
ein Paket-File oder ein CSV

01:19:12.240 --> 01:19:13.700
schreibt und dann das

01:19:13.700 --> 01:19:15.700
im Batch hochlädt.

01:19:15.700 --> 01:19:18.060
Das wird jetzt schon ziemlich

01:19:18.060 --> 01:19:19.840
detailliert. Ja, mit dem Paket-File, da wollten wir

01:19:19.840 --> 01:19:22.160
noch ein paar bisschen drüber reden, wie man das machen

01:19:22.160 --> 01:19:22.400
kann.

01:19:24.140 --> 01:19:26.020
Ja, aber genau, wenn wir bei Performance sind,

01:19:26.020 --> 01:19:27.960
so ein ganz generelles Ding, was ich häufig sehe,

01:19:27.960 --> 01:19:30.000
also gerade auch im Zusammenhang mit irgendwie

01:19:30.000 --> 01:19:32.020
Dinge verteilen oder so, was

01:19:32.020 --> 01:19:34.140
ich ganz oft sehe, ist, dass Leute halt grundsätzlich

01:19:34.140 --> 01:19:35.920
erstmal der Meinung sind, wenn man Dinge verteilt,

01:19:35.920 --> 01:19:36.660
dann wird es halt schneller.

01:19:36.660 --> 01:19:40.040
Ist aber oft

01:19:40.040 --> 01:19:40.380
nicht so.

01:19:40.380 --> 01:19:44.040
Weil ganz oft ist halt CPU

01:19:44.040 --> 01:19:45.860
möglicherweise gar nicht das Bottleneck. Also wenn man,

01:19:45.860 --> 01:19:47.860
bevor man sowas macht, wie Dinge dann

01:19:47.860 --> 01:19:49.840
verteilen oder so, sollte man vielleicht mal gucken, wo ist denn eigentlich

01:19:49.840 --> 01:19:50.380
das Bottleneck.

01:19:50.380 --> 01:19:53.700
Ich sehe das so oft,

01:19:53.940 --> 01:19:55.680
ich sehe das so oft, dass Leute sagen so, ja,

01:19:55.680 --> 01:19:57.820
das wird nicht schneller oder so und dann ist es halt

01:19:57.820 --> 01:19:59.200
I.O. Und dann

01:19:59.200 --> 01:20:01.760
ist es halt so, dass

01:20:01.760 --> 01:20:03.980
verteilen macht das alles noch schlimmer, weil

01:20:03.980 --> 01:20:06.000
irgendwie Netzwerk

01:20:06.000 --> 01:20:07.740
ist halt noch viel langsamer als irgendwie

01:20:07.740 --> 01:20:09.140
quasi lokale SSDs.

01:20:09.140 --> 01:20:11.680
Und wenn man halt

01:20:11.680 --> 01:20:13.600
die Daten in der richtigen Reihenfolge lädt,

01:20:13.600 --> 01:20:15.740
sozusagen, und nicht zufällig

01:20:15.740 --> 01:20:17.760
die ganze Zeit, wenn man sehr große Datenmengen hat,

01:20:17.760 --> 01:20:19.420
also so groß, dass sie nicht in den Hauptschleifer passen,

01:20:19.420 --> 01:20:20.980
wenn die dann sozusagen richtig,

01:20:20.980 --> 01:20:22.800
also sich jedes,

01:20:23.740 --> 01:20:25.900
alle Daten immer nur einmal anguckt, dann kann es sein,

01:20:25.900 --> 01:20:27.880
dass es super schnell ist. Während wenn man halt

01:20:27.880 --> 01:20:29.860
zufällig auf dem, auf dem, auf einem

01:20:29.860 --> 01:20:31.740
großen Paketpfeil beispielsweise

01:20:31.740 --> 01:20:33.840
dann irgendwie immer ein Stückchen hier liest, ein Stückchen

01:20:33.840 --> 01:20:34.300
da liest,

01:20:34.300 --> 01:20:37.280
die ganze Zeit random irgendwie

01:20:37.280 --> 01:20:39.360
zwei Gigabyte I.O. macht, dann

01:20:39.360 --> 01:20:41.620
ist das alles total langsam und sieht

01:20:41.620 --> 01:20:43.400
so aus, als ob es nicht schneller gehen würde.

01:20:43.400 --> 01:20:45.300
Und tatsächlich

01:20:45.300 --> 01:20:47.540
ist es aber, ist es aber

01:20:47.540 --> 01:20:49.460
eine ganz einfache Optimierung, die

01:20:49.460 --> 01:20:50.440
dazu führt, dass es halt

01:20:50.440 --> 01:20:53.600
schnell genug ist. Also ich würde mal sagen,

01:20:53.620 --> 01:20:55.440
wenn man, wenn man, wenn man so ein MacBook nimmt

01:20:55.440 --> 01:20:57.560
und das richtig benutzt, ist es sehr schwer,

01:20:57.560 --> 01:20:59.460
das mit einem Cluster zu schlagen. Wirklich, sehr schwer.

01:20:59.460 --> 01:21:01.700
Also, und das ist, glaube ich,

01:21:01.700 --> 01:21:03.500
auch vielen Leuten nicht so bewusst. Also,

01:21:03.500 --> 01:21:05.620
das ist halt oft, wird da mit Kanonen

01:21:05.620 --> 01:21:07.620
auf Spatzen geschossen. Und

01:21:07.620 --> 01:21:09.560
das eigentliche Problem gar nicht, wird

01:21:09.560 --> 01:21:11.260
gar nicht erkannt, sondern, ja.

01:21:11.260 --> 01:21:13.560
Jetzt wollte ich gerade mit IBIS anfangen, was ja auch

01:21:13.560 --> 01:21:15.700
so ein bisschen größer ist als ein Spatz, aber

01:21:15.700 --> 01:21:17.580
Ja, aber gut,

01:21:17.580 --> 01:21:18.620
das ist ja sozusagen,

01:21:18.620 --> 01:21:21.620
dass man halt quasi ein DataFrame-Interface

01:21:21.620 --> 01:21:23.420
hat für irgendwie

01:21:23.420 --> 01:21:25.380
Sachen, die hintendran SQL sprechen, oder?

01:21:25.380 --> 01:21:27.520
Ja, oder zum Beispiel verteilte Datenbanken oder

01:21:27.520 --> 01:21:28.740
sowas, ja. Ja.

01:21:28.740 --> 01:21:31.600
Äh, genau, also

01:21:31.600 --> 01:21:33.680
aber, genau, also

01:21:33.680 --> 01:21:35.560
oft, oft ist es dann halt so,

01:21:35.560 --> 01:21:37.500
wenn man dann halt irgendwie irgendwas

01:21:37.500 --> 01:21:39.600
benutzt, was halt SQL spricht, aber

01:21:39.600 --> 01:21:41.200
hintendran total verteilt ist,

01:21:41.200 --> 01:21:43.180
dass das dann halt sehr langsam ist

01:21:43.180 --> 01:21:45.520
und Leute nicht wissen, warum das langsam ist und sich

01:21:45.520 --> 01:21:47.120
dann irgendwie dran gewöhnen und dann halt,

01:21:47.120 --> 01:21:49.460
wenn sie ihre Jobs losschicken, halt dann Mittagessen

01:21:49.460 --> 01:21:51.520
gehen oder so, aber, und wenn

01:21:51.520 --> 01:21:53.220
sie sich vor die Daten irgendwie, äh,

01:21:53.220 --> 01:21:55.420
halt geholt hätten und hätten das auf dem Laptop

01:21:55.420 --> 01:21:56.800
in Pandas gemacht oder so, wäre es viel schneller gewesen.

01:21:56.800 --> 01:21:59.380
Naja, so, solche Sachen, äh,

01:21:59.380 --> 01:22:01.120
ja. Aber IBIS,

01:22:01.120 --> 01:22:03.160
ja, es ist grad, ähm,

01:22:03.160 --> 01:22:04.360
benutzt ihr das?

01:22:04.360 --> 01:22:06.580
Nee, hab ich tatsächlich noch nie gehört.

01:22:06.580 --> 01:22:09.040
Okay, ich glaube, das ist auch von dem...

01:22:09.040 --> 01:22:11.320
Was ich noch mal

01:22:11.320 --> 01:22:13.300
wiederholen will, ist einfach dieses, ja, guck

01:22:13.300 --> 01:22:15.200
dir erstmal an, was eigentlich gerade langsam ist,

01:22:15.200 --> 01:22:17.160
wo ist eigentlich dein Bottleneck, weil da sind ja

01:22:17.160 --> 01:22:19.340
manchmal die Annahmen einfach nicht richtig.

01:22:19.340 --> 01:22:21.420
Ja. Ich hab, das ist so witzig,

01:22:21.420 --> 01:22:23.000
dass du's sagst, ich hab gerade, ich glaub,

01:22:23.020 --> 01:22:24.580
letzte Woche hab ich

01:22:24.580 --> 01:22:27.120
gerade was parallelisiert und dadurch

01:22:27.120 --> 01:22:28.760
sehr, sehr, sehr, sehr, sehr viel schneller gemacht.

01:22:28.760 --> 01:22:31.100
Ja gut, das geht schon auch, ne? Das kann natürlich

01:22:31.100 --> 01:22:32.760
schon manchmal der Punkt sein, aber

01:22:32.760 --> 01:22:35.000
eben das Beispiel war ja eben gerade,

01:22:35.000 --> 01:22:37.140
dass es dann an der Kommunikation mit der Datenbank liegt

01:22:37.140 --> 01:22:39.320
und wenn man dann...

01:22:39.320 --> 01:22:41.020
Das ist, also eigentlich ist es trivial, dass man

01:22:41.020 --> 01:22:42.980
erstmal profilen muss und gucken muss, was langsam

01:22:42.980 --> 01:22:45.180
ist. Wenn man's mal gesagt hat, klingt's ja trivial,

01:22:45.180 --> 01:22:47.400
aber ich glaube, wenn man's

01:22:47.400 --> 01:22:48.920
zum ersten Mal macht, dann vergisst man es. Ich glaube auch, dass

01:22:48.920 --> 01:22:51.160
viele Leute halt nicht so bewusst ist, die profilen

01:22:51.160 --> 01:22:52.820
dann vielleicht auch und sehen dann vielleicht sogar

01:22:52.820 --> 01:22:54.880
noch irgendwie, wo Zeit verloren geht,

01:22:54.880 --> 01:22:56.960
aber gucken halt

01:22:56.960 --> 01:22:58.920
nicht auf sowas, wie ist denn jetzt eigentlich,

01:22:58.920 --> 01:23:00.240
wenn ich jetzt einfach mal

01:23:00.240 --> 01:23:02.780
ein paar CPUs nehme, krieg ich dann

01:23:02.780 --> 01:23:04.700
tatsächlich, wird's schneller oder nicht? Wenn's nicht

01:23:04.700 --> 01:23:06.540
schneller wird, okay, gibt's vielleicht irgendeine andere

01:23:06.540 --> 01:23:08.300
Komponente im System, die halt

01:23:08.300 --> 01:23:10.180
irgendwie, die halt dicht ist

01:23:10.180 --> 01:23:12.680
und dass es halt da Unterschiede

01:23:12.680 --> 01:23:14.280
gibt, dass halt nicht alles CPU ist, das ist

01:23:14.280 --> 01:23:16.120
oft, hab ich das Gefühl, nicht so

01:23:16.120 --> 01:23:18.680
keine weit verbreitete sozusagen

01:23:18.680 --> 01:23:20.460
Erkenntnis und ja,

01:23:20.460 --> 01:23:22.620
aber ja, genau, das ist ganz wichtig, dass man das

01:23:22.620 --> 01:23:24.320
halt sich einfach so

01:23:24.320 --> 01:23:25.900
im Gesamtsystem mal anguckt, ja.

01:23:25.900 --> 01:23:28.440
Beim Modelltraining ist es dann tatsächlich

01:23:28.440 --> 01:23:30.280
schon oft sinnvoll

01:23:30.280 --> 01:23:32.480
zu parallelisieren, wenn das lang dauert

01:23:32.480 --> 01:23:34.520
und das ist aber dann auch in den

01:23:34.520 --> 01:23:36.540
meisten Paketen schon so eingebaut, dass man

01:23:36.540 --> 01:23:38.400
dann nur irgendwie die Anzahl der Kerne

01:23:38.400 --> 01:23:40.480
übergeben muss, die dieses nutzen soll und dann läuft das

01:23:40.480 --> 01:23:42.540
einfach, das ist ganz praktisch. Genau, aber ich weiß

01:23:42.540 --> 01:23:44.480
jetzt nicht, also das war jedenfalls, ich hab das ja auch schon lange

01:23:44.480 --> 01:23:46.360
nicht mehr gemacht, aber das war

01:23:46.360 --> 01:23:48.460
zu der Zeit, wo ich solche Sachen gemacht hab, war das

01:23:48.460 --> 01:23:50.380
halt schwer, das auf mehrere Rechner zu verteilen, also auf

01:23:50.380 --> 01:23:52.160
einem Rechner, ja, genau, mehrere Kerne, kein Problem.

01:23:52.420 --> 01:23:54.260
Aber auf mehrere Maschinen, XY-Boost,

01:23:54.260 --> 01:23:56.480
ja, eher nicht.

01:23:56.480 --> 01:23:58.320
Ja, die Frage ist, wie

01:23:58.320 --> 01:24:00.360
sehr man das auch manuell machen

01:24:00.360 --> 01:24:01.760
muss, weil man ja meistens dann

01:24:01.760 --> 01:24:04.140
sich sein Cluster in Databricks oder so

01:24:04.140 --> 01:24:06.180
hochfährt und muss sich darüber gar keine Gedanken

01:24:06.180 --> 01:24:07.740
machen eigentlich. Ja.

01:24:07.740 --> 01:24:10.300
Also zumindest als Data Scientist ist das

01:24:10.300 --> 01:24:11.840
nicht das, was man irgendwie

01:24:11.840 --> 01:24:13.680
das erwartet wird, dass

01:24:13.680 --> 01:24:16.560
dann da verschiedene Rechner zusammenfließt.

01:24:16.560 --> 01:24:17.760
Ja, ja.

01:24:17.760 --> 01:24:20.380
Und dann ist natürlich manchmal irgendwie

01:24:20.380 --> 01:24:22.220
schon so, dass man doch wieder auf

01:24:22.220 --> 01:24:23.460
andere Programmiersprachen

01:24:23.460 --> 01:24:26.200
ausweichen muss, weil Python

01:24:26.200 --> 01:24:28.020
und R nicht unbedingt dafür bekannt sind, dass

01:24:28.020 --> 01:24:29.160
sie total schnell sind.

01:24:29.160 --> 01:24:32.180
Aber ich glaube, also meiner Erfahrung

01:24:32.180 --> 01:24:34.060
nach ist es schon oft so, dass man schon sehr

01:24:34.060 --> 01:24:35.940
viel rausholen kann, wenn man sich den Python

01:24:35.940 --> 01:24:38.200
oder R-Code nochmal genau anschaut, profilt

01:24:38.200 --> 01:24:39.880
und dann vielleicht irgendwo

01:24:39.880 --> 01:24:42.200
auch mal die Daten vorher

01:24:42.200 --> 01:24:43.520
klug filtert oder

01:24:43.520 --> 01:24:45.960
ein sinnvolles If-Statement

01:24:45.960 --> 01:24:47.840
irgendwie so ein bisschen verschiebt, weil man auf einmal

01:24:47.840 --> 01:24:49.920
merkt, oh Moment, oder in einem Loop irgendwas

01:24:49.920 --> 01:24:51.780
rauszieht, was eigentlich nur einmal passieren muss,

01:24:52.020 --> 01:24:53.320
das sind ja so Sachen, die dann doch

01:24:53.320 --> 01:24:55.740
schnell passieren, wenn man den Code

01:24:55.740 --> 01:24:57.640
irgendwann so geschrieben und ein paar Mal verändert hat,

01:24:57.640 --> 01:24:59.800
dann ist da vielleicht irgendwas, was

01:24:59.800 --> 01:25:01.820
man, also so eine Low-Hang-In-Food, was man

01:25:01.820 --> 01:25:03.160
schon leicht optimieren kann.

01:25:03.160 --> 01:25:05.080
Python könnte man ja auch noch schneller kriegen, wenn man will, ja.

01:25:05.080 --> 01:25:07.640
Ja, wobei, also ich meine, das ist halt immer die Frage,

01:25:07.640 --> 01:25:09.840
wenn es halt schnell sein soll, dann nimmt man am besten

01:25:09.840 --> 01:25:10.540
was, was nicht halt,

01:25:10.540 --> 01:25:13.940
in Python sind halt, was halt langsam sind, halt Funktionsaufrufe,

01:25:13.940 --> 01:25:15.540
Schleifen, das ist halt

01:25:15.540 --> 01:25:17.860
extrem langsam, weil wenn man

01:25:17.860 --> 01:25:19.000
die Schleifen halt in NumPy,

01:25:19.000 --> 01:25:21.600
nicht als Schleife, sondern irgendwie vektorisiert,

01:25:21.820 --> 01:25:23.200
auf den Daten macht, dann ist es halt schnell.

01:25:23.200 --> 01:25:25.020
Und ob man das jetzt von Python aus aufruft oder nicht.

01:25:25.020 --> 01:25:27.540
Das ist dann auch dieses Stichwort, dass

01:25:27.540 --> 01:25:29.680
jemand, der das durchweist, eben über den Data-Frame

01:25:29.680 --> 01:25:31.600
drüber loopst, das einfach so verfolgt ist.

01:25:31.600 --> 01:25:32.000
Das ist dann schlecht, ja.

01:25:32.000 --> 01:25:35.780
Ja, aber

01:25:35.780 --> 01:25:37.420
deswegen ja genau, einfach dann eine Maske drauf

01:25:37.420 --> 01:25:39.280
und dann machst du es halt drunter

01:25:39.280 --> 01:25:39.820
in NumPy, ja.

01:25:39.820 --> 01:25:43.480
Ja, also warum ich

01:25:43.480 --> 01:25:45.320
Ibis eben sagte, weißt du auch von Wes McKinney,

01:25:45.320 --> 01:25:47.560
das ist halt dem Pandas-Menschen,

01:25:47.560 --> 01:25:49.060
der da war.

01:25:49.060 --> 01:25:51.040
Ja, der hat ja eine ganze Menge, der ist auch hinter dem,

01:25:51.620 --> 01:25:53.660
Arrow, das ist halt so seit einiger Zeit

01:25:53.660 --> 01:25:54.320
sein Hauptprojekt.

01:25:54.320 --> 01:25:57.440
Vielleicht nochmal, was macht Arrow, wenn wir

01:25:57.440 --> 01:25:59.460
schon dabei sind? Achso, ja, das ist eigentlich im Grunde

01:25:59.460 --> 01:26:01.580
so, die Grundidee dabei ist

01:26:01.580 --> 01:26:03.520
halt, dass man vielleicht aus

01:26:03.520 --> 01:26:05.480
unterschiedlichen, also das

01:26:05.480 --> 01:26:06.800
ist halt das Problem bei NumPy

01:26:06.800 --> 01:26:09.040
oder Pandas-Geschichten, also

01:26:09.040 --> 01:26:11.480
man hat das dann halt in

01:26:11.480 --> 01:26:13.480
Python, aber wenn man jetzt eine andere Programmiersprache

01:26:13.480 --> 01:26:15.460
hat und darauf zugreifen will, dann geht das halt

01:26:15.460 --> 01:26:17.400
nicht. Und die Idee

01:26:17.400 --> 01:26:19.500
bei Arrow ist halt, dass man

01:26:19.500 --> 01:26:21.420
das halt, dass man eine gemeinsame

01:26:21.420 --> 01:26:23.780
Daten-in-Hauptspeicher-

01:26:23.780 --> 01:26:25.040
Laden-Infrastruktur hat

01:26:25.040 --> 01:26:27.360
und dann halt Paket-Files

01:26:27.360 --> 01:26:29.300
quasi, oder was auch immer, man lässt

01:26:29.300 --> 01:26:31.020
halt einen Hauptspeicher und kann dann halt von

01:26:31.020 --> 01:26:33.180
unterschiedlichen Sprachen auch

01:26:33.180 --> 01:26:34.840
darauf zugreifen und das

01:26:34.840 --> 01:26:36.000
funktioniert dann halt.

01:26:36.000 --> 01:26:38.940
Genau, und ja,

01:26:38.940 --> 01:26:41.060
ist halt nicht an sowas wie NumPy gebunden, was es halt nur für

01:26:41.060 --> 01:26:42.900
Python gibt im Grunde. Und

01:26:42.900 --> 01:26:45.140
ja, das ist jetzt inzwischen, aber glaube ich, liegt das

01:26:45.140 --> 01:26:47.100
auch unter Pandas drunter und

01:26:47.100 --> 01:26:49.200
zu größeren

01:26:49.200 --> 01:26:51.080
Teilen. Ehrlich gesagt bin ich da,

01:26:51.220 --> 01:26:52.740
in letzter Zeit nicht so viel Interessanz gemacht.

01:26:52.740 --> 01:26:55.040
Ja.

01:26:55.040 --> 01:26:57.060
Genau, ja, also mit Ibis kann man

01:26:57.060 --> 01:26:59.060
zum Beispiel auch da PaceBug oder sowas dann berechnen,

01:26:59.060 --> 01:27:00.940
dass man dann... Ja, also alles, was

01:27:00.940 --> 01:27:02.520
irgendwie SQL spricht, kannst du da,

01:27:02.520 --> 01:27:05.000
soweit ich weiß, ist einfach nur ein Layer, wo du

01:27:05.000 --> 01:27:06.640
halt ein DataFrame-Interface

01:27:06.640 --> 01:27:09.140
hast nach außen hin, sodass du es benutzen kannst

01:27:09.140 --> 01:27:10.900
wie einen normalen DataFrame, aber nach hinten raus

01:27:10.900 --> 01:27:11.940
spricht es dann halt SQL.

01:27:11.940 --> 01:27:14.400
Was halt, ja,

01:27:14.400 --> 01:27:17.320
wenn du ein System hast, das das kann, dann ist es...

01:27:17.320 --> 01:27:18.100
Ja.

01:27:18.100 --> 01:27:20.440
Okay. Ja,

01:27:21.020 --> 01:27:23.160
ich glaube, wir haben schon viel

01:27:23.160 --> 01:27:25.160
über diesen Prozess zumindest gesprochen.

01:27:25.160 --> 01:27:26.200
In CRISP sind wir durch,

01:27:26.200 --> 01:27:29.080
wenn wir das... Ja, eigentlich sind wir durch und dann kann man

01:27:29.080 --> 01:27:30.900
ja wieder von Anfang an anfangen und sich den

01:27:30.900 --> 01:27:32.440
nächsten, next best use case

01:27:32.440 --> 01:27:35.060
oder das, was man schon

01:27:35.060 --> 01:27:36.460
hat, halt nochmal erweitern,

01:27:36.460 --> 01:27:39.000
überlegen, ob man es auch irgendwo anders anwenden kann

01:27:39.000 --> 01:27:40.740
und so weiter. Also

01:27:40.740 --> 01:27:42.980
du würdest zum Beispiel sagen, aus deiner Perspektive, es gibt

01:27:42.980 --> 01:27:44.980
gar keinen großen Unterschied zwischen Data Science

01:27:44.980 --> 01:27:46.740
und Machine Learning Operations oder

01:27:46.740 --> 01:27:48.400
Engineering mehr

01:27:48.400 --> 01:27:50.120
heutzutage.

01:27:50.820 --> 01:27:52.700
Oder so. Ja, also es sind halt alles

01:27:52.700 --> 01:27:54.520
irgendwie so verschiedene Schwerpunkte.

01:27:54.520 --> 01:27:56.240
Bei uns sind jetzt,

01:27:56.240 --> 01:27:58.100
wir haben schon Leute, die eher

01:27:58.100 --> 01:28:00.580
Data Science machen, die eher modellieren und andere

01:28:00.580 --> 01:28:02.100
Leute, die eher

01:28:02.100 --> 01:28:04.480
in dem DevOps, MLOps-Bereich

01:28:04.480 --> 01:28:06.400
unterwegs sind oder auch Data Engineering

01:28:06.400 --> 01:28:08.680
machen, die sich besser mit Datenbanken auskennen.

01:28:08.680 --> 01:28:10.600
Aber wir haben bei uns jetzt

01:28:10.600 --> 01:28:12.620
nicht so die klare Trennung, du musst das eine oder das andere machen.

01:28:12.620 --> 01:28:14.600
Es gibt auch Leute, die machen beides, gehen dann halt eben

01:28:14.600 --> 01:28:16.460
nicht ganz so krass in die Tiefe, aber

01:28:16.460 --> 01:28:18.560
haben halt ein breiteres Profil und das ist

01:28:18.560 --> 01:28:19.880
natürlich auch total wertvoll.

01:28:20.620 --> 01:28:22.560
Ja, es gibt

01:28:22.560 --> 01:28:23.740
diese Schwerpunkte, aber

01:28:23.740 --> 01:28:25.780
greift ja auch alles ineinander.

01:28:25.780 --> 01:28:28.420
Also es ist ja auch so, dass

01:28:28.420 --> 01:28:31.040
es Sinn macht, so ein T-Shape-Profile

01:28:31.040 --> 01:28:32.600
aufzubauen, also dass man in einer Sache

01:28:32.600 --> 01:28:34.620
schon wirklich gut ist, aber von

01:28:34.620 --> 01:28:36.580
vielen anderen Sachen auch Ahnung hat und da auch

01:28:36.580 --> 01:28:38.520
was machen kann. Dann ist man eben auch flexibler, auch wenn

01:28:38.520 --> 01:28:40.520
vielleicht ein Bereich auf einmal nicht mehr

01:28:40.520 --> 01:28:42.100
so gefragt ist aus irgendwelchen Gründen,

01:28:42.100 --> 01:28:44.080
ob das AI den überkommen hat oder

01:28:44.080 --> 01:28:45.420
weil wir alle ersetzt werden.

01:28:45.420 --> 01:28:46.240
Genau.

01:28:50.420 --> 01:28:52.000
Es macht natürlich auch Sinn, wenn ich als

01:28:52.000 --> 01:28:53.800
Data Scientist jetzt mich

01:28:53.800 --> 01:28:56.060
nicht weigere, mal das Jenkins-File

01:28:56.060 --> 01:28:56.900
zu updaten.

01:28:56.900 --> 01:29:00.320
Da macht es ja schon Sinn,

01:29:00.320 --> 01:29:01.840
sich dann mit allem ein bisschen auszukennen.

01:29:01.840 --> 01:29:03.560
Ja, okay.

01:29:03.560 --> 01:29:06.100
Also aus meiner Perspektive ist das, ich meine, das mag

01:29:06.100 --> 01:29:07.700
jetzt etwas ketzerisch klingen oder ich weiß nicht, vielleicht

01:29:07.700 --> 01:29:09.860
so Hot-Take-Verwandlung.

01:29:09.860 --> 01:29:12.140
Ich bin gespannt. Ich würde sagen, das ist alles

01:29:12.140 --> 01:29:14.180
Programmieren. Oder sagen wir so,

01:29:14.180 --> 01:29:15.380
das, was praktisch oft

01:29:15.380 --> 01:29:17.840
sozusagen ein Bottleneck ist bei

01:29:17.840 --> 01:29:20.220
Leuten, die versuchen, irgendwas zu tun, ob es

01:29:20.220 --> 01:29:22.160
Produkt umsetzen, irgendwas analysieren oder

01:29:22.160 --> 01:29:24.060
Modelle bauen oder was auch immer ist, ist halt

01:29:24.060 --> 01:29:25.800
normalerweise das Programmieren.

01:29:25.800 --> 01:29:27.260
Das ist halt das Bottleneck aus

01:29:27.260 --> 01:29:28.080
sowas.

01:29:28.080 --> 01:29:31.680
Ein bisschen statistisches Grundverständnis schadet

01:29:31.680 --> 01:29:33.620
vielleicht auch nicht. Ja, aber du brauchst oft

01:29:33.620 --> 01:29:35.060
oder gut, das mag

01:29:35.060 --> 01:29:37.840
dann irgendwie, das mag

01:29:37.840 --> 01:29:39.660
daran liegen, dass ich das halt, dass ich

01:29:39.660 --> 01:29:41.540
die Feinheiten dann oft nicht so sehe,

01:29:41.540 --> 01:29:43.780
aber und dass man da vielleicht Feinheiten machen kann,

01:29:43.780 --> 01:29:45.640
aber oft scheitert es halt schon an so groben Dingen

01:29:45.640 --> 01:29:47.680
und dann kommt es auf die

01:29:47.680 --> 01:29:48.560
Feinheiten auch nicht mehr an.

01:29:50.020 --> 01:29:51.920
Ich würde sagen, alle

01:29:51.920 --> 01:29:53.580
bei uns können programmieren

01:29:53.580 --> 01:29:56.000
und wenn man jetzt ein Projekt hat, wo alle

01:29:56.000 --> 01:29:57.680
programmieren können, aber nur die Hälfte

01:29:57.680 --> 01:29:59.940
hat Statistikverständnis, ist okay. Wenn aber

01:29:59.940 --> 01:30:01.980
alle Statistik können und die Hälfte kann programmieren,

01:30:01.980 --> 01:30:03.880
dann langweilt sich die eine Hälfte

01:30:03.880 --> 01:30:06.000
der Leute, die halt nicht programmieren können, weil die können

01:30:06.000 --> 01:30:07.960
dann ja immer nur Ergebnisse angucken und irgendwas dazu

01:30:07.960 --> 01:30:09.760
sagen. Oder genau, so kommt man jetzt auch aus,

01:30:09.760 --> 01:30:12.040
man ist halt hart davon abhängig,

01:30:12.040 --> 01:30:13.700
dass man, dass irgendwie dieses

01:30:13.700 --> 01:30:15.920
Programmierdings halt auch funktioniert, weil ansonsten

01:30:15.920 --> 01:30:17.820
kommt man mit den anderen Sachen, ist halt sozusagen

01:30:17.820 --> 01:30:19.820
die Infrastruktur, die man braucht für fast alles andere.

01:30:19.820 --> 01:30:21.880
Ja, natürlich gibt es halt auch

01:30:21.880 --> 01:30:23.640
so Programme wie SPSS, wo man

01:30:23.640 --> 01:30:25.120
Statistikanalysen machen kann.

01:30:25.120 --> 01:30:26.360
Das wollte ich ganz am Anfang sagen.

01:30:26.360 --> 01:30:29.740
Das hat ja auch

01:30:29.740 --> 01:30:31.680
seine Daseinsberechtigung, weil wenn jemand nur

01:30:31.680 --> 01:30:33.520
alle drei Monate mal eine Analyse fährt,

01:30:33.520 --> 01:30:34.840
dann lohnt sich halt eben nicht.

01:30:34.840 --> 01:30:37.180
Ja, aber auch da,

01:30:37.180 --> 01:30:39.560
da mache ich mir einen Notebook für halt dann, oder?

01:30:39.560 --> 01:30:41.440
Nee, aber die Person macht

01:30:41.440 --> 01:30:43.060
alle drei Monate irgendwas anderes.

01:30:43.060 --> 01:30:45.180
Dann müssen sie alle drei Monate wieder

01:30:45.180 --> 01:30:46.760
sich erinnern, wie man eigentlich

01:30:46.760 --> 01:30:48.620
Variable zuweist.

01:30:49.620 --> 01:30:51.760
Und dann lieber das

01:30:51.760 --> 01:30:53.120
angestaubte SPSS klicken.

01:30:53.120 --> 01:30:55.800
Also ja,

01:30:55.800 --> 01:30:58.000
mich hat SPSS auch ziemlich schnell genervt,

01:30:58.000 --> 01:30:59.240
aber ich kann,

01:30:59.240 --> 01:31:01.780
also es hat schon seine Daseinsberechtigung für

01:31:01.780 --> 01:31:03.620
bestimmte Dinge. Oder vielleicht das

01:31:03.620 --> 01:31:05.660
SPSS des kleinen Mannes, ich meine, das ist halt auch das,

01:31:05.660 --> 01:31:07.260
womit man täglich zu tun hat. Excel.

01:31:07.260 --> 01:31:09.700
Ja, ich meine, es gibt ganz viele Leute, die machen halt einen Großteil

01:31:09.700 --> 01:31:10.920
von dem Zeugs halt mit Excel.

01:31:10.920 --> 01:31:13.660
Alle Leute machen alles mit Excel, genau.

01:31:13.660 --> 01:31:15.660
Ja, natürlich. Man kommt auch

01:31:15.660 --> 01:31:17.520
ein gewisses Stück weit schon, das ist richtig,

01:31:17.520 --> 01:31:19.280
aber. Eine Million Zeit.

01:31:19.420 --> 01:31:21.480
Ja, ich glaube, man hat als Data Scientist auch manchmal

01:31:21.480 --> 01:31:23.540
so eine Arroganz, dass man Excel überhaupt gar nicht

01:31:23.540 --> 01:31:23.840
öffnet.

01:31:23.840 --> 01:31:27.040
Ja, und bei manchen Sachen ist es vielleicht gar nicht so schlecht.

01:31:27.040 --> 01:31:27.580
Ja.

01:31:27.580 --> 01:31:32.660
Aha, jetzt hat jemand Excel gesagt.

01:31:32.660 --> 01:31:35.000
Jetzt kriege ich ein komisches Gefühl.

01:31:35.000 --> 01:31:36.460
Ich bin zu cool dafür.

01:31:36.460 --> 01:31:39.100
Es ist halt einfach fürchterlich.

01:31:39.100 --> 01:31:41.160
Es ist halt hässlich und dann wollen Leute auch noch,

01:31:41.160 --> 01:31:43.120
dass man dann in Excel Spalten dann färbt,

01:31:43.120 --> 01:31:44.840
weil man macht ja Data Science oder was mit Daten

01:31:44.840 --> 01:31:46.580
und dann soll das alles so aussehen wie vorher und

01:31:46.580 --> 01:31:49.220
Das geht alles, ich habe da kein Problem

01:31:49.220 --> 01:31:50.720
damit. Ich generiere auch Excel Output

01:31:50.720 --> 01:31:51.820
und ich lese auch Excel ein.

01:31:51.820 --> 01:31:55.240
Ja, also in schönen Output machst du das?

01:31:55.240 --> 01:31:57.220
Ich habe da eine Aufgabe für dich.

01:31:57.220 --> 01:31:58.260
Oh, ja, so.

01:31:58.260 --> 01:32:01.020
Okay, jetzt, wenn es dann so konkret wird,

01:32:01.020 --> 01:32:01.640
dann weiß ich nicht.

01:32:01.640 --> 01:32:05.740
Ich glaube, wir haben sogar so ein Mini-Open-Source-Projekt

01:32:05.740 --> 01:32:06.820
auf GitHub liegen

01:32:06.820 --> 01:32:09.100
für Excel, also

01:32:09.100 --> 01:32:10.940
um Excel-Files schön zu formatieren und

01:32:10.940 --> 01:32:11.900
das hat man geschrieben.

01:32:11.900 --> 01:32:13.180
Sehr gut.

01:32:13.180 --> 01:32:14.120
Ja, schon.

01:32:14.120 --> 01:32:19.020
Ja, das war tatsächlich ein Projekt, da wurden

01:32:19.020 --> 01:32:21.620
halt die Reports, das war so ein Banking-Kontext

01:32:21.620 --> 01:32:23.520
und die haben halt die Reports als Excel-File

01:32:23.520 --> 01:32:25.240
gebraucht, um wahrscheinlich damit

01:32:25.240 --> 01:32:26.580
die weiterzuschicken.

01:32:26.580 --> 01:32:28.720
Ja, weil die auch den ganzen Tag das halt schon kennen, ne?

01:32:28.720 --> 01:32:30.400
Die haben halt ihren Prozess, der ist immer schon so

01:32:30.400 --> 01:32:32.640
und dann ist es halt super, wenn dann die Sachen einfach

01:32:32.640 --> 01:32:34.740
dann neu sind oder Daten drin sind, aber es soll genauso

01:32:34.740 --> 01:32:36.340
aussehen mit Condition Formatting und so.

01:32:36.340 --> 01:32:38.860
Ja, oder es sind halt Leute, die können halt

01:32:38.860 --> 01:32:40.620
sich programmieren, das ist auch irgendwie völlig okay,

01:32:40.620 --> 01:32:42.460
weil sie ganz andere Sachen machen, aber trotzdem

01:32:42.460 --> 01:32:44.300
müssen wir denen irgendwie die Ergebnisse

01:32:44.300 --> 01:32:45.340
liefern.

01:32:45.340 --> 01:32:45.760
Ja.

01:32:48.820 --> 01:32:50.140
Ich glaube, wir sind bei den Picks angekommen, oder?

01:32:50.140 --> 01:32:52.480
Ich glaube, Miriam, du hattest noch einen, wolltest

01:32:52.480 --> 01:32:54.220
was picken, was auch noch mit Data Science zu tun hat, vielleicht

01:32:54.220 --> 01:32:55.160
fangen wir damit doch direkt an.

01:32:55.160 --> 01:32:58.300
Ja, also wir haben schon so ein bisschen angeschnitten, ich hatte ja eben erwähnt,

01:32:58.300 --> 01:33:00.420
dass ich was parallelisiert habe und das war

01:33:00.420 --> 01:33:02.140
total cool, weil

01:33:02.140 --> 01:33:03.380
diese Prognosen,

01:33:03.380 --> 01:33:06.260
also dieses Modelltraining und Prognosen

01:33:06.260 --> 01:33:08.060
erstellen, das hat halt Stunden

01:33:08.060 --> 01:33:10.360
gedauert und auch wahnsinnig hohe Kosten

01:33:10.360 --> 01:33:12.040
verursacht, weil, anderes Thema,

01:33:12.040 --> 01:33:14.560
Pandas haben hohe Rampe

01:33:14.560 --> 01:33:16.180
gebraucht, das heißt, man braucht einen riesen Cluster

01:33:16.180 --> 01:33:18.380
und dann ist es aber auch noch total lang gelaufen,

01:33:18.620 --> 01:33:20.260
auf diesem riesigen Cluster, also total

01:33:20.260 --> 01:33:22.380
teuer und dann habe ich festgestellt, dass

01:33:22.380 --> 01:33:23.840
die Prognosen alle

01:33:23.840 --> 01:33:26.300
nacheinander erstellt wurden und alles nur auf

01:33:26.300 --> 01:33:28.020
dem Driver-Node lief, also diese ganzen

01:33:28.020 --> 01:33:30.200
vielen Nodes auf diesem riesigen Cluster,

01:33:30.200 --> 01:33:32.380
die wurden alle überhaupt gar nicht benutzt und

01:33:32.380 --> 01:33:34.380
dann dürfte ich das parallelisieren,

01:33:34.380 --> 01:33:36.560
in dem Fall

01:33:36.560 --> 01:33:38.420
mit Pandas UDFs, Pandas

01:33:38.420 --> 01:33:40.580
User-Defined Functions, also es ist dann eine Möglichkeit

01:33:40.580 --> 01:33:42.360
eben, dass das, es läuft halt in

01:33:42.360 --> 01:33:44.480
Pandas, weil es ist ein Light-GBM-Modell

01:33:44.480 --> 01:33:46.260
und es kann im Moment noch keinen

01:33:46.260 --> 01:33:48.420
High-Spark-Data-Frame oder Spark-Data-Frame

01:33:48.420 --> 01:33:50.080
nehmen, deswegen muss man den

01:33:50.080 --> 01:33:52.320
in Pandas geben oder wahrscheinlich

01:33:52.320 --> 01:33:54.120
geht auch Polars, da sind wir jetzt gerade dran,

01:33:54.120 --> 01:33:56.380
aber ja, und man kann

01:33:56.380 --> 01:33:58.380
dann diese Prognosen in Pandas

01:33:58.380 --> 01:34:00.400
auf diese Art und Weise parallelisieren und es war

01:34:00.400 --> 01:34:02.160
einfach so schön und

01:34:02.160 --> 01:34:04.320
so geil, weil es einfach so viel schneller

01:34:04.320 --> 01:34:06.120
geworden ist und ich habe mich

01:34:06.120 --> 01:34:07.620
sehr wie eine Heldin gefühlt.

01:34:07.620 --> 01:34:09.800
Ja, so ein Erfolgstor ist immer schön, ja.

01:34:09.800 --> 01:34:12.260
Dann komme ich auch direkt zu meiner

01:34:12.260 --> 01:34:13.740
Erfolgstor, ich hatte nämlich auch so einen

01:34:13.740 --> 01:34:16.200
Moment, ich habe nämlich Hinnicks neues Video gesehen

01:34:16.200 --> 01:34:18.020
und das ist

01:34:18.220 --> 01:34:20.040
Rustlove, also ich habe Just-Files für mich

01:34:20.040 --> 01:34:21.580
entdeckt, die hatte ich vorher

01:34:21.580 --> 01:34:23.800
nicht so auf dem Schirm, das ist so ein bisschen

01:34:23.800 --> 01:34:26.000
was ähnliches wie eine Make-File, nur dass man

01:34:26.000 --> 01:34:27.940
halt in einer Just-File, das ist auch ein Rust

01:34:27.940 --> 01:34:29.960
geschriebenes Tool, definiert, wie

01:34:29.960 --> 01:34:31.900
so die Projekt-Kommandos eigentlich

01:34:31.900 --> 01:34:33.580
alle sind und dann kann man

01:34:33.580 --> 01:34:35.840
das diesen wundervoll mit Variablen und so,

01:34:35.840 --> 01:34:38.000
es funktioniert toll, Hinnicks Video dazu zu

01:34:38.000 --> 01:34:39.860
gucken, glaube ich, ist sehr hilfreich und ich habe

01:34:39.860 --> 01:34:41.940
alles umgestellt bei mir, ich benutze fast meine Commands

01:34:41.940 --> 01:34:44.000
nicht mehr, also meine Commands-File noch ein bisschen selten,

01:34:44.000 --> 01:34:45.820
sondern einfach nur Just, Just Run

01:34:45.820 --> 01:34:47.500
und der Server läuft oder

01:34:47.500 --> 01:34:48.020
Just Run und der Server läuft oder

01:34:48.020 --> 01:34:49.840
Just Connect für Dev-Server oder

01:34:49.840 --> 01:34:51.680
sowas oder für auch Prod-Server,

01:34:51.680 --> 01:34:53.860
dann kann ich sagen Just Connect Production und

01:34:53.860 --> 01:34:55.500
dann noch den Pod-Namen oder sowas, falls ich öffnen

01:34:55.500 --> 01:34:57.740
Kubernetes muss oder ich kann sagen Just Lint

01:34:57.740 --> 01:34:59.360
oder Just Test

01:34:59.360 --> 01:35:02.040
und so, es ist toll, ich liebe es.

01:35:02.040 --> 01:35:03.560
Das ist ja auch echt

01:35:03.560 --> 01:35:05.680
eine gute Entscheidung für den Namen,

01:35:05.680 --> 01:35:07.340
also richtig schlau, oder?

01:35:07.340 --> 01:35:09.900
Ja, voll gut, finde ich auch, deswegen Just Love.

01:35:09.900 --> 01:35:11.820
Okay, ja, ja, ich habe

01:35:11.820 --> 01:35:13.060
ja auch tatsächlich, nachdem ich das

01:35:13.060 --> 01:35:15.560
Video von Hinnicks gesehen habe, habe ich mir auch gedacht, so,

01:35:15.560 --> 01:35:16.920
vielleicht muss ich das auch mal ausprobieren,

01:35:17.820 --> 01:35:19.320
ja, ich,

01:35:19.320 --> 01:35:21.620
ich meine, das ist toll,

01:35:21.620 --> 01:35:23.300
du kannst auch nach dem Just Build und du, der macht mit

01:35:23.300 --> 01:35:25.500
UV, macht dein Direkt-Paket-Installation, Paket-Sync,

01:35:25.500 --> 01:35:27.240
du kannst Upgrade machen,

01:35:27.240 --> 01:35:29.640
alle Sachen mit den

01:35:29.640 --> 01:35:31.440
Kommandozeilen, die du sonst immer nutzt, reinschreiben

01:35:31.440 --> 01:35:33.520
und wenn du das über so eine Commands-File geregelt hättest oder sowas,

01:35:33.520 --> 01:35:35.480
musst du halt immer dann einen Subprozess spawnen

01:35:35.480 --> 01:35:36.860
und so, ah, ich weiß nicht, das

01:35:36.860 --> 01:35:39.340
war schon sehr schön. Ja, ne, was ich

01:35:39.340 --> 01:35:41.500
häufig mache in letzter Zeit ist halt einfach

01:35:41.500 --> 01:35:43.540
Entry Points im, weil

01:35:43.540 --> 01:35:45.100
meistens hat man ja ein Paket, das man installiert.

01:35:45.100 --> 01:35:47.800
Das würde ich jetzt nicht,

01:35:47.800 --> 01:35:49.500
das würde ich jetzt nicht so sehen. Ja, kommt drauf an,

01:35:49.500 --> 01:35:51.740
aber, also, ich habe das halt oft und dann kann ich

01:35:51.740 --> 01:35:53.280
halt auch irgendwie in PyProject

01:35:53.280 --> 01:35:54.940
halt unter Scripts halt

01:35:54.940 --> 01:35:57.780
andere Entry Points definieren und da habe ich halt Funktionen,

01:35:57.780 --> 01:35:59.760
dann habe ich es jetzt nicht in der Command-File, sondern

01:35:59.760 --> 01:36:01.660
ich schreibe dann halt einfach Python, aber ja,

01:36:01.660 --> 01:36:03.560
es gibt natürlich Dinge, wo man nicht einfach Python

01:36:03.560 --> 01:36:05.520
schreiben kann, wenn man Datenbank hoch und runter fährt oder

01:36:05.520 --> 01:36:07.540
solche Sachen, ja klar, dann muss man irgendwie das

01:36:07.540 --> 01:36:09.820
Anlass machen. Also, das DB zum Beispiel ist das andere oder

01:36:09.820 --> 01:36:11.520
eine Katakombe, also, ne,

01:36:11.520 --> 01:36:13.140
Shell-Skripte da reinschreiben, wenn du willst,

01:36:13.140 --> 01:36:15.660
die dann Sachen hintereinander machen

01:36:15.660 --> 01:36:17.120
und so oder Tests machen oder

01:36:17.120 --> 01:36:17.780
oder

01:36:17.780 --> 01:36:20.120
gucken, du kannst Environment-Variablen da reinladen oder

01:36:20.120 --> 01:36:21.860
spezifisch, wenn das irgendwie passt und

01:36:21.860 --> 01:36:24.360
du hast gerade eine Sache gesagt,

01:36:24.360 --> 01:36:26.280
Pakete, also, du könntest ja auch einfach aus der PyProject

01:36:26.280 --> 01:36:28.220
das PyScript dann ausfüllen lassen und bei mir ist zum Beispiel

01:36:28.220 --> 01:36:29.900
so, dass die Dinge

01:36:29.900 --> 01:36:32.240
im Python und im anderen Verzeichnis liegen als

01:36:32.240 --> 01:36:34.300
das Projekt und die Dokumentation

01:36:34.300 --> 01:36:36.280
oder sowas und trotzdem, wenn ich

01:36:36.280 --> 01:36:38.080
das Just benutze, benutze es halt dann auch den

01:36:38.080 --> 01:36:40.120
Kontext, du kannst Work in Directory setzen. Toll.

01:36:40.120 --> 01:36:42.480
Mhm. Ja, okay.

01:36:42.480 --> 01:36:44.080
Also, ich muss mir vielleicht auch nochmal

01:36:44.080 --> 01:36:45.980
angucken. Ja, mach das.

01:36:47.760 --> 01:36:48.860
Tracking. Wie Sockzeit.

01:36:48.860 --> 01:36:51.220
Mhm. Geht nicht mehr weg. Okay.

01:36:51.220 --> 01:36:53.380
Naja. Äh, ja,

01:36:53.380 --> 01:36:55.720
genau, was, ich hab grad überlegt, was ich picken könnte,

01:36:55.720 --> 01:36:57.640
hab mir grad keine Gedanken gemacht, aber ich bin ja

01:36:57.640 --> 01:36:59.580
jetzt in letzter Zeit so ein bisschen besessen von,

01:36:59.580 --> 01:37:00.800
ähm, nur ein bisschen.

01:37:00.800 --> 01:37:03.360
Du bist besessen oder das

01:37:03.360 --> 01:37:04.660
bist du besessen? Ja,

01:37:04.660 --> 01:37:06.780
ich mach ganz, einfach

01:37:06.780 --> 01:37:09.460
Cloud-Code und Dinge mit,

01:37:09.460 --> 01:37:11.620
ähm, mit LLMs

01:37:11.620 --> 01:37:13.600
irgendwie programmieren und

01:37:13.600 --> 01:37:15.060
Das ist schon verrückt, also, ich weiß nicht, ob

01:37:15.060 --> 01:37:17.700
du das auch noch, Mira, aber, ähm, die Kosten sind halt

01:37:17.700 --> 01:37:19.580
krass und wir, wir nutzen jetzt halt Max.

01:37:19.580 --> 01:37:21.460
Ja. Das ist halt das Abo,

01:37:21.460 --> 01:37:23.340
wie teuer ist das, 200 Euro? Ja.

01:37:23.340 --> 01:37:25.540
Ja, gut, es gibt auch eins für 100, aber. Ja,

01:37:25.540 --> 01:37:27.540
okay, aber das ist halt das 20, normalerweise musst du halt 3000,

01:37:27.540 --> 01:37:29.700
4000 Euro Tokenkosten zahlen

01:37:29.700 --> 01:37:31.660
im Monat dafür. Ja,

01:37:31.660 --> 01:37:33.520
so, aber das, genau,

01:37:33.520 --> 01:37:35.540
das würde ich jetzt dann picken, es gibt da ein,

01:37:35.540 --> 01:37:37.900
äh, ein NPM-Paket,

01:37:37.900 --> 01:37:39.680
äh, CC-Usage, äh,

01:37:39.680 --> 01:37:41.660
äh, nennt sich das, äh, kann man per MPX zum Beispiel

01:37:41.660 --> 01:37:43.280
installieren und dann sagt einem das

01:37:43.280 --> 01:37:45.740
quasi, wie viel, für wie viel Geld

01:37:45.740 --> 01:37:47.680
man Tokens verbraucht hat und,

01:37:47.680 --> 01:37:49.900
ähm, damit kann man sich sehr schön rationalisieren,

01:37:49.900 --> 01:37:51.280
dass das gar nicht so viel ist, wenn man 200 Euro,

01:37:51.280 --> 01:37:52.680
200 Dollar im Monat zahlt.

01:37:52.680 --> 01:37:54.980
Weil, äh, ja.

01:37:54.980 --> 01:37:57.280
Ähm. Wie viel hast du diesen Monat?

01:37:57.280 --> 01:37:59.720
Auf dem Rechner hier, 2000 Dollar

01:37:59.720 --> 01:38:01.700
Tokens, ja. Okay. Und ich hab aber auch

01:38:01.700 --> 01:38:02.800
noch andere Rechner auf denen auch. Ja.

01:38:02.800 --> 01:38:05.480
Und das ist der 17. heute, glaube ich, ne?

01:38:05.480 --> 01:38:06.320
Ja. Ja.

01:38:06.320 --> 01:38:09.720
Ha. Die, die sind

01:38:09.720 --> 01:38:11.640
gefährlich, die Dinger, die machen uns alle obsolet.

01:38:11.640 --> 01:38:12.820
Wir werden sehen.

01:38:12.820 --> 01:38:15.620
Ah, das glaub ich nicht. Ach, ja. Man sitzt dann

01:38:15.620 --> 01:38:17.660
am Strand und nimmt dann sein Schirmchen und redet

01:38:17.660 --> 01:38:19.560
dann mit seinem, keine Ahnung, kleinen

01:38:19.560 --> 01:38:21.820
Roboter neben einem herläuft, der nebenbei noch unterhält,

01:38:21.820 --> 01:38:23.540
dass man weiterentwickelt und unterhält

01:38:23.540 --> 01:38:25.520
sich dann wie im Podcast. Da haben wir ja schon mal gut geübt jetzt.

01:38:25.520 --> 01:38:27.300
Also, ja, man muss so ein bisschen, bisschen

01:38:27.300 --> 01:38:29.440
vorsichtig sein, weil natürlich wird man halt irgendwie so

01:38:29.440 --> 01:38:31.540
ein bisschen zu so, man, man schreibt dann halt nur noch so Anforderungen

01:38:31.540 --> 01:38:33.480
hin und so versucht das genau zu spezifizieren

01:38:33.480 --> 01:38:35.640
und das, man, man befördert sich selbst

01:38:35.640 --> 01:38:37.060
zu so einer Art Projektmanager. Ja.

01:38:37.060 --> 01:38:39.480
Und dann macht man einen ganz anderen Job

01:38:39.480 --> 01:38:41.540
und da muss man so ein bisschen aufpassen, dass das, weil

01:38:41.540 --> 01:38:43.160
dann nachher, weil eigentlich,

01:38:43.160 --> 01:38:45.680
also ich mach das mit der Familie nur, weil es Spaß macht.

01:38:45.680 --> 01:38:46.800
Ja. Genau. Und,

01:38:47.640 --> 01:38:49.360
ja, wenn es keinen Spaß mehr macht, weil,

01:38:49.360 --> 01:38:51.700
ja, es ist halt, dann hat man sich irgendwie

01:38:51.700 --> 01:38:53.360
doch was mit Holz machen. Ja.

01:38:53.360 --> 01:38:55.680
Mein Freund nutzt tatsächlich, also

01:38:55.680 --> 01:38:57.580
für die privaten Projekte auch viel Cursor

01:38:57.580 --> 01:38:59.640
und er sagt so, ja, das, worauf ich Bock

01:38:59.640 --> 01:39:01.600
hab, das schreibe ich da trotzdem selbst.

01:39:01.600 --> 01:39:03.780
Ja, das ist auf jeden Fall eine Art Idee wahrscheinlich.

01:39:03.780 --> 01:39:06.080
Und sonst ist er halt, ja, der Projektmanager,

01:39:06.080 --> 01:39:07.840
der seinen

01:39:07.840 --> 01:39:09.380
Julia quasi immer

01:39:09.380 --> 01:39:11.400
mal gucken muss, was der macht.

01:39:11.400 --> 01:39:13.380
Ja, also bei mir hat auch Cursor jetzt raus, Adventure

01:39:13.380 --> 01:39:15.320
von E verkauft, aber Cursor ist raus, nur noch

01:39:15.320 --> 01:39:17.620
Code, also nur noch Kommandoteile und ich bin wie

01:39:17.620 --> 01:39:19.320
jetzt Code und das ist super.

01:39:19.320 --> 01:39:21.600
Das, also, kann ich nur empfehlen.

01:39:21.600 --> 01:39:22.640
Ist verrückt. Ja.

01:39:22.640 --> 01:39:24.680
Ist grad verrückt, ja.

01:39:24.680 --> 01:39:27.280
Es macht also viel schneller und

01:39:27.280 --> 01:39:29.560
dann mache ich so nervige Sachen ab.

01:39:29.560 --> 01:39:31.420
Aber ja, man wird irgendwie mehr zum

01:39:31.420 --> 01:39:33.400
Projektmanager, Projektmanagerin und

01:39:33.400 --> 01:39:35.600
ich glaube, das Thema Kommunikation wird halt

01:39:35.600 --> 01:39:37.340
immer noch wichtig bleiben.

01:39:37.340 --> 01:39:39.580
Ich hoffe ja, dass das Ding über meine Stimme hat und dann bessere

01:39:39.580 --> 01:39:40.940
Kommunikation mit den anderen Leuten.

01:39:40.940 --> 01:39:43.380
Das wäre, genau, das habe ich ja auch mal gehofft, ne,

01:39:43.380 --> 01:39:45.040
dass ich irgendwie, warum ich, genau,

01:39:45.040 --> 01:39:46.340
während meine

01:39:47.600 --> 01:39:50.140
Cloud-Jobs halt laufen, kann ich dann

01:39:50.140 --> 01:39:51.900
halbwegs mehr Zeit, um irgendwie Meetings mit

01:39:51.900 --> 01:39:53.960
Kollegen irgendwie da, irgendwie Pläne zu

01:39:53.960 --> 01:39:55.840
besprechen, so. Das sollte umgekehrt sein.

01:39:55.840 --> 01:39:58.020
Das sollte, ich will lieber programmieren

01:39:58.020 --> 01:39:59.800
und dann kann irgendwie, weiß ich nicht,

01:39:59.800 --> 01:40:01.740
so ein Avatar in so einem Meeting auftauchen und immer

01:40:01.740 --> 01:40:03.840
sagen, das ist eine super Idee, voll

01:40:03.840 --> 01:40:05.920
gut. Genauso machen wir das.

01:40:05.920 --> 01:40:07.000
Kann auch Kluge Dinge sagen, Jo.

01:40:07.000 --> 01:40:09.960
Du kannst das Training, kannst dann unsere Podcast-Folgen

01:40:09.960 --> 01:40:11.780
eingeben dann. Ja, ja, okay.

01:40:11.780 --> 01:40:12.960
Muss man, ja, ist

01:40:12.960 --> 01:40:15.900
einiges umgekrempelt. Ja, wir haben unbedingt, so könnten

01:40:15.900 --> 01:40:17.500
wir, wir haben halt manche Leute, die hätten wirklich,

01:40:17.560 --> 01:40:19.600
das Spannende ist zu erzählen, aber trauen sich nicht so richtig

01:40:19.600 --> 01:40:21.380
im Podcast, kann ich verstehen, ist okay.

01:40:21.380 --> 01:40:23.600
Aber wenn man dann die Stimme einfach nehmen könnte,

01:40:23.600 --> 01:40:25.500
dann können sie einen Text schreiben und dann könnte man

01:40:25.500 --> 01:40:27.740
den Podcast einfach generieren. Ja, das geht,

01:40:27.740 --> 01:40:29.040
das geht. Also das kann man ja eigentlich auch schon.

01:40:29.040 --> 01:40:31.640
Also die neuen Modelle von Gemini dazu, die ich gehört habe,

01:40:31.640 --> 01:40:33.520
ich glaube, es gibt noch andere, die

01:40:33.520 --> 01:40:35.600
Wisp-LS ersetzen, das ist verrückt, wie gut

01:40:35.600 --> 01:40:37.300
die sind und wie natürlich die auf einmal klingen, ja,

01:40:37.300 --> 01:40:39.480
das ist schon crazy. Ja, also Stimme, LMLabs hat da super

01:40:39.480 --> 01:40:41.640
Modelle, aber fürs Generieren

01:40:41.640 --> 01:40:43.440
von Podcasts, Notebook-LLM,

01:40:43.440 --> 01:40:45.260
das, ja, da kann, da geht einiges.

01:40:45.260 --> 01:40:47.480
Das ist crazy, ja. Danke, Mira,

01:40:47.520 --> 01:40:49.680
dass du da warst. Ja, sehr gerne,

01:40:49.680 --> 01:40:51.380
hat Spaß gemacht. Also

01:40:51.380 --> 01:40:53.040
denk dran, Hörertreffen am 20.

01:40:53.040 --> 01:40:54.140
September.

01:40:54.140 --> 01:40:56.820
Ja, Hörertreffen.

01:40:56.820 --> 01:40:59.120
Ja.

01:40:59.120 --> 01:41:01.320
Und

01:41:01.320 --> 01:41:02.940
ja, kommt vorbei, hört uns, hallo at

01:41:02.940 --> 01:41:04.780
peißenpodcast.de, alles Feedback, alles und so weiter.

01:41:04.780 --> 01:41:06.340
Ja, vielen Dank, bis bald.

01:41:06.340 --> 01:41:09.000
Alles klar. Und hört auch gerne meine

01:41:09.000 --> 01:41:10.900
Datasign-Steepdive rein. Auf jeden Fall,

01:41:10.900 --> 01:41:12.360
große Empfehlung. Bis bald.

01:41:12.360 --> 01:41:14.320
Tschüss. Tschüss.
