Wiggly Boys Strike again – AI Challenge Platz 12

27. Oktober 2023

Erarbeitet im Rahmen der Vorlesung „AI Challenge“, während meines Studiums in AI/ML an der Hochschule Luzern

Bei der gewählten Challenge “Richter’s Predictor: Modeling Earthquake Damage”, geht es darum, betroffene Häuser des Gorkha Erdbebens (2015) in Nepal korrekt zu klassifizieren. Diese Einteilung geschieht in 3 Kategorien. Dies sind die folgenden:

  • 1 entspricht kleinem Schaden
  • 2 entspricht mittlerem Schaden
  • 3 entspricht grossem Schaden

Für die Umsetzung der Challenge und deren Bewertung werden zwei Datensätze zur Verfügung gestellt. Die Trainingsdaten mit knapp 260’000 betroffenen Häusern, inklusive der Zielvariabel und ein weiterer Datensatz mit knapp 80’000 betroffenen Häusern, die korrekt klassifiziert werden sollen, die Testdaten.
Die Motivation, diese Challenge zu bestreiten hat in erster Linie darin bestanden, dass die Daten in einem guten Format vorgelegen haben und bis auf wenige Ausreisser gut dokumentiert waren. Dadurch wurde die Möglichkeit gegeben, viel Zeit ins Data-Preprocessing und die eigentlichen Modelle zu investieren.
Dies hat sich bezahlt gemacht und zurzeit haben wir einen Score von 0.7543 und erreichen damit den 12. Platz von 5435 Teilnehmenden.

Die Fortschritte wurden mit der Zeit kleiner und auch die Ideen wurden weniger. Doch einige Dinge werden sicher noch ausprobiert werden und die Hoffnung besteht, auf dem Leaderboard noch einige
Plätze gutmachen zu können.

Kontext

Das Erdbeben in Gorkha erschütterte mit einer Stärke von 7.2 die zentrale Region von Nepal. Dabei starben rund 9000 Menschen und weitere 22’000 wurden verletzt. Viele dieser Menschen wurden durch den Einsturz der Häuser zu Opfern. Die Bausubstanz dieser Gebäude und über 30 weitere Faktoren trugen stark zum Ausmass des angerichteten Schadens bei. Unsere Recherche ergab, dass beispielsweise die geo_lvl_id’s nicht eindeutig einer Region zugewiesen werden konnten. Die Vorgehensweise bei der Nummerierung war nicht nachvollziehbar jedoch ist die relative Lage zu dem Epizentrum des Erdbebens von zentraler Bedeutung. Es war jedoch ersichtlich, dass die geo_lvl_1_id die am wenigsten genaueste Unterteilung und die geo_lvl_3_id die detaillierteste Unterteilung der Region darstellte. Des Weiteren wurden laut den Datensätzen während knapp 800 Jahren keine Gebäude gebaut, was sehr unrealistisch scheint. Aufgrund dessen betrieben wir weitere Recherche, die unsere Vermutung unterstützten, dass diese Daten nicht der Realität entsprachen. Bei vielen Gebäuden ist das Alter nicht bekannt.

Das 2015 Nepal earthquake open data portal (2015 Nepal earthquake open data portal, 2022)(Stand: 01.06.2022) stellt die Daten für die Challenge auf DrivenData (Richter’s Predictor: Modeling Earthquake Damage, 2022)(Stand:01.06.2022) zur Verfügung. Unsere Gruppe errechnete aus diesen Daten den möglichen Schadensgrad eines Gebäudes. Die Gebäude ID wurde dann zusammen mit dem Schadenswert in eine .csv Datei geschrieben und diese auf die Webseite Drivendata.org hochgeladen. Unsere Submission wurde mit Zielvariabeln verglichen, auf welche wir keinen Zugriff hatten und darauffolgend mit der untenstehenden Formel der sogenannte F1-micro Score berechnet. Dieser Score wird benutzt, um die Teilnehmenden Gruppen zu bewerten und ihre Performance untereinander zu vergleichen.

Der F1-Score wird verwendet, um die Leistung eines binary Classifiers zu bewerten. Da bei der gewählten Challenge jedoch drei mögliche Zielvariabeln zur Verfügung stehen, wird eine angepasste Variante des F1-Scores verwendet, der oben dargestellte F1-micro Score.

Data Analysis

Dieses Projekt ist entstanden in Kooperation mit:

Data Quality Assessment

Die Qualität der Daten wurde anhand der folgenden Massstäbe untersucht: Fehlende Werte, Ausreisser, Verständlichkeit / Erklärbarkeit der Features.

  • Fehlende Werte: In Bezug auf fehlende Werte ist die Qualität der Daten sehr gut. Im ganzen Datensatz gibt es keinen einzigen «null» Wert.
  • Ausreisser: Auch bezüglich Ausreisser ist die Datenqualität sehr gut, es gibt lediglich eine Ausnahme: das Alter der Gebäude. Anhand des Boxplots ist unschwer zu erkennen, dass es Ausreisser gibt, die knapp 1000 Jahre alt sind. Konkret sind es 1390 Gebäude, die exakt das Alter von 995 Jahren aufweisen. Dies entspricht ca. 0.5% aller Gebäude. Für diese Werte konnte keine Erklärung gefunden werden.
  • Verständlichkeit der Features: Hier gibt es einige kategorische Variablen, deren Bedeutung nicht ganz erklärt werden kann. So gibt es zum Beispiel das Feature «roof_type» , welches die Werte n, q und x haben kann. Was diese Buchstaben bedeuten wird nicht weiter erklärt. Es wird nur erwähnt, dass die gleichen Buchstaben bei unterschiedlichen Features vorkommen, dies keinen Zusammenhang hat. Für das Training und die Performance der Modelle sollte das zwar keinen Einfluss haben, einzig die Erklärbarkeit und die Nachvollziehbarkeit leiden darunter.

Bei den restlichen Features ist die Beschreibung gut verständlich.

Data Analysis

Für die Challenge wurde ein Teil der Daten, welche 2015 beim Gorkha Erdbeben in Nepal aufgenommen worden sind, zur Verfügung gestellt. Der Datensatz enthält Informationen zur Lage der betroffenen Gebäude, sowie zu den Lebensbedingungen innerhalb der Gebäude, sowie zu deren Bauweise.

Die relevanten Informationen sind in 38 Features angeordnet. Davon sind 8 Spalten Zahlenwerte (inkludiert die 3 geo_level_id Spalten), weitere 8 Spalten, liegen in kategorischer Form vor und die verbleibenden 22 sind bereits binär encoded.

Das Ziel der Challenge war, für ein Gebäude den entstandenen Schaden vorherzusagen. Die Schadenskategorisierung ist unterteilt in 3 Zahlenwerte von 1 bis 3:

  • Die 1 steht für kleinen Schaden
  • Die 2 steht für einen mittleren Schaden
  • Die 3 steht für einen grossen Schaden

In der gezeigten Grafik kann man die Verteilung der Schadenskategorisierung gut erkennen und sieht auf den ersten Blick, dass ein mittlerer Schaden bei über 50% der Gebäude, am häufigsten auftritt.

Über 30% der Gebäude sind nahezu komplett zerstört und weisen entsprechend einen Schadensgrad “3” auf. Die restlichen knapp 10% haben kaum Schaden davongetragen.

Die drei geo_level_ids haben eine sehr hohe Relevanz, um den Schaden korrekt zuordnen zu können, diese sind eigentlich kategorische Werte und können als Kanton, Bezirk und Dorf o.ä. interpretiert werden. So ist die geo_level_1_id die gröbste und die geo_level_3_id die detaillierteste Unterteilung.

Einige Features haben eine stark positive oder eine gar eine negative Korrelation untereinander aufgewiesen. Beispielsweise konnte man so sehen, dass gewisse Baumaterialen kaum gemeinsam verwendet wurden oder dass höhere Gebäude meist auch mehr Stockwerke besitzen. Trotzdem haben diese Informationen noch einen gewissen Informationsgehalt aufgewiesen, sodass keine Spalte entfernt werden musste.

Gerade die binär encodeten Features, wiesen zu grossen Teilen eine Near-Zero-Variance auf. Solch ein Beispiel bietet der “Legal Ownership Status” welcher in der untenstehenden Grafik dargestellt ist.

Bei diesen NZV-Spalten war es stark vom Modell und dem restlichen Preprocessing abhängig, wie diese behandelt werden sollten. Die unterschiedlichen Methoden dazu werden im nächsten Kapitel im Detail erläutert.

Data-Preprocessing

Da die Daten einige Herausforderungen und spezielle Situationen mit sich brachten, wurden verschiedene Untersuchungen im Bereich des Data-Preprocessing gemacht, um den Modellen das Training zu erleichtern. Schlussendlich ist für die Challenge aber eine möglichst gute Performance entscheidend. Deshalb wurde jeweils für unterschiedliche Modelle untersucht welche Verfahren die bessere Performance generieren. Bei einem Random Forest Modell wurden die konkreten Auswirkungen gemessen. Für die in den kommenden Kapiteln erwähnten Features wurde die Anwendung von Preprocessing Verfahren untersucht.

Near-Zero-Variance Features:

Vorgehen

Wie bereits erwähnt, gibt es binäre, als auch kategorische Features, welche eine sehr geringe Varianz aufweisen. Für den Umgang damit wurden folgende Methoden angewendet:

  • Gruppieren / zusammenfassen in ähnliche Gruppen, sodass die betroffenen erstellten Gruppen eine höhere Varianz aufweisen.
  • Für Catboost wurden die betroffenen binär encodeten Features gruppiert und dann in kategorische Features umgewandelt.
  • Weglassen der betroffenen Features mit Hilfe eines «Variance thresholding» Verfahrens. Dabei werden nur die Features beim Training der Modelle weggelassen, wenn diese eine zu geringe Varianz aufweisen
  • Vtreat: Ähnlich wie das Variance thresholding werden hier unwichtige Features weggelassen. Jedoch berücksichtig Vtreat nebst der Varianz innerhalb des Features auch dessen Auswirkung auf die Zielvariable

Auswirkungen auf Performance

In der Praxis hat sich keine der genannten Methoden positiv auf die Performance ausgewirkt. Die Performance des Random Forrest Modells verschlechterte sich um 0.001 wenn Features kombiniert wurden. Beim Weglassen von Features verschlechterte sich die Performance um 0.003. Auch bei anderen Modellen konnte die Performance nur selten gesteigert werden. Daraus schliessen wir, dass die Features trotz der kleinen Varianz wichtig sind und nicht vernachlässigt werden sollten.

Ausreisser beim Gebäudealter

Vorgehen

Da diese Werte für das Gebäudealter eine Anomalie in den Daten darstellen, können sich diese Werte negativ auf die Performance der Modelle auswirken. Deshalb wurde versucht diese Werte zu ersetzen. Dazu wurde der Durchschnitt, der Median oder ein KNN-Modell verwendet.

Auswirkungen auf Performance

Da es sich hierbei nur um einen kleinen Teil der Daten handelt, waren auch die Auswirkungen auf die Performance eher klein. Die Performance des Random Forest Modells konnte aber um 0.001 gesteigert werden. Auch bei anderen Modellen konnte eine kleine positive Auswirkung auf die Performance festgestellt werden.

Geo Levels

Vorgehen

Die drei geo_lvl_ids sind spezielle Features. In den Daten werden diese als Ganzzahlige Werte abgebildet, aber korrekterweise muss man diese als kategorische Variablen sehen. Denn innerhalb der Features steht jede Zahl für eine bestimmte Region / Ortschaft. Da die Werte kategorisch sind, wurde versucht diese beim Preprocessing encoden.

Auswirkungen auf Performance

Das One-Hot Encoding stellte sich nicht als nützlich heraus. Da es sehr viele unterschiedliche Werte, bzw. Kategorien gab, wurden sehr viele neue Feature Columns generiert. Beispielsweise hat das Feature «geo_level_id_3» ganze 11595 unique values. Diese grosse Anzahl von Features beinflusste das Training negativ und die Performance wurde jeweils bedeutend schlechter. Beim Random Forest Model sank die Performance um 0.167. Deshalb wurden die geo_level_ids zu Beginn nicht encoded und einfach die Zahlen aus den Rohdaten verwendet. Später wurden für einzelne Modelle komplexere Encoder Modelle trainiert, um die Daten besser verarbeiten zu können. Darauf wird bei den spezifischen Modellen eingegangen.

Log Transform

Vorgehen

Der Grossteil unserer numerischen Features sind nicht normalverteilt. So gibt es beispielsweise Häuser, die bis zu 200 Jahre alt sind, aber die meisten Häuser sind weniger als 50 Jahre alt. Hier kann es sinnvoll sein diese Werte zu logarithmieren, damit diese normalverteilt sind.

Auswirkungen auf Performance

Beim Random Forest Modell änderte sich die Performance praktisch kaum. Eine mögliche Erklärung ist, dass für numerische Features bei Entscheidungsbäumen die Entscheidungsgrenze exakt zwischen zwei Werten des Features gesetzt wird. Nach dem Logarithmieren wird die Entscheidungsgrenze immer noch zwischen die gleichen zwei Werte gesetzt. Dadurch verschiebt sich relativ gesehen die Entscheidungsgrenze nicht. Bei einem neuronalen Netzwerk wären die Auswirkungen wahrscheinlich grösser. Einzig beim XGB Modell konnte eine leichte positive Veränderung festgestellt werden.

Modelle

Die Umsetzung der Aufgabe mit konkreten Modellen.

Random Forests

Das erste Model, welches auf den Daten trainiert wurde, war ein Random Forest Modell, da sich diese Modelle gut für Klassifizierungsaufgaben eignen. Weiter Sind Random Forest Modelle noch einigermassen simpel aufgebaut und die wichtigsten Hyperparameter bleiben überschaubar.

Ausserdem bauen viele der Boosting Modelle auf Random Forests auf. Dadurch können die Resultate der Random Forests als Baseline dienen, zum Vergleich für die weiteren Modelle.

Fürs Training wurde die Random Forest Implementation der Scikit-learn Bibliothek verwendet. Dadurch gestaltete sich das Training recht simpel. Es wurden verschiedene Preprocessing Methoden untersucht. Die besten Ergebnisse wurden mit dem folgenden Vorgehen erzielt:

  • Die Ausreisser beim Gebäudealter wurden durch den Median ersetzt.
    • Für die kategorischen Features wurde ein Label Encoder verwendet.

Damit wurde mit den default Hyperparametern ein F1micro Score von 0.7195 erreicht. Weiter wurde auch ein simples Hyperparameter Tuning über die wichtigsten Hyperparameter angewendet. Die Verbesserungen in der Performance lagen jedoch im Promillebereich. Da aber dieser Score noch einige Prozent hinter den Spitzenreitern der Challenge lag, wurde das Hyperparameter Tuning für die Random Forrests nicht weiterverfolgt. Stattdessen widmeten wir uns anderen Modellen und Herangehensweisen.

Neural Networks

Neuronale Netze waren ein wesentlicher Bestandteil der Vorlesung über maschinelles Lernen an der HSLU. Somit war schnell klar, dass wir versuchen wollten, ein Neuronales Netz für das Lösen der Challenge zu trainieren.

Um dies zu erreichen, mussten einige Aufbereitungen an den Daten vorgenommen werden. Üblicherweise werden kategorische Daten One-Hot Encoded. Wenn dies mit den Daten dieser Challenge gemacht wird, werden viele Features generiert, was eine extrem hohe Anzahl Weights im Input-Layer bedeutet, und somit auch eine extrem grosse Trainingszeit für das Modell. Zudem führt dieser Ansatz zu einigen Problemen, beispielsweise die Near-Zero-Variance, oder dass die Feature- Matrix zum grössten Teil aus Nullen (zeros) besteht.

Um diese Probleme zu umgehen, wurden die One-Hot Encodeten Features mit PCA auf eine geringere Dimensionalität reduziert.

Das Trainieren des Modelles gestaltete sich generell schwierig, da das Training bereits für wenige Epochen länger dauerte als bei anderen Verfahren. Während dem Trainingsprozess wurden verschiedene Hyperparameter manuell getestet. Meist hat das Modell einen sehr viel besseren Score beim Training erreicht als bei der Validierung. Daraus wurde geschlossen, dass das Modell overfittet und um dies zu beheben wurden Netzwerke mit weniger Neuronen und layers getestet. Dies führte zu Modellen, die bereits auf dem Trainings-Set schlecht abschnitten, deshalb wurde der Ansatz, mit Neuronalen Netzen zu arbeiten, nicht weiterverfolgt.

XGBoost

Im Forum unserer Challenge, wurden immer wieder Boosting Modelle genannt, entsprechend passten diese allem Anschein nach recht gut auf unseren Anwendungsfall. Nach dem Baseline Modell

ist ein XGBoost zum Einsatz gekommen und hat gute Resultate geliefert. Verschiedene Ansätze wurden ausprobiert, sowohl mit dem Data-Preprocessing, bei welchem “vtreat”, ein Weiterverarbeiten der Near-Zero-VarianceSpalten und eine Log-Transformation zum Einsatz gekommen sind. Das Beste Ergebnis wurde jedoch mit den One-Hot encodedeten Rohdaten erzielt.

Ein Hyperparameter Tuning wurde ebenfalls durchgeführt, um den Score weiter nach oben zu treiben. So konnten der Micro F1 Score von 0.7279 auf 0.7350 angehoben werden, jedoch wurde auch festgestellt, dass dies nicht der Zielführende Weg auf das Leaderboard sein kann.

CatBoost

Während einem Vortrag, welchen wir jede Woche gehalten haben, schlug uns Fidan Shala vor, dass das Catboost-Modell einen Versuch wert wäre. Es eignet sich besonders für Datensätze mit kategorischen Daten. Wir implementierten das Modell und konnten nach einigen Anpassungen am Code direkt eine Submisson hochladen. Ohne Hyperparameter Tuning oder Preprocessing der Daten, war das Catboost-Modell unser bisher bestes Modell. Nach einem Hyperparameter-tuning stagnierte der Fortschritt jedoch und kreativere Lösungen waren gefragt. Aus reiner Neugier haben wir die Rohdaten, mit den geo_level_ids, als kategorische Werte in das Modell geladen und die Performance wurde abermals besser. Inklusive neuem Hyperparameter-tuning waren wir zu den besten 10% aller Teilnehmenden aufgerückt.

5.4.2     Lstm Model

Bei Recherchen wurde auf «Medium» ein Artikel zu einem LSTM (Prashnani, 2022) entdeckt. Da in einem ersten Anlauf das finale Modell mit der embedded layer nicht fehlerfrei zum Laufen gebracht werden konnte, war das LSTM eine vielversprechende Alternative.

Da die Geolevels eine Abhängigkeit aufweisen, kann eine Kombination aus der geo_level_1_id und der geo_level_2_id in ein LSTM gegeben werden, um die geo_level_3_id vorherzusagen. Da man die geo_level_1_id und geo_level_2_id gemeinsam One-Hot encoded ins Modell einliest, werden die Einsen und Nullen vom Modell als Text angesehen und es können Gemeinsamkeiten festgestellt werden. Dadurch können genauere geo_level_ids generiert werden, was eine detailliertere Unterteilung des Gebäudestandorts zulässt.

Durch das Zusammenführen der Daten aus Test und Trainingsdaten konnte über alle Modelle hinweg eine höhere Performance erzielt und im Zusammenspiel mit Catboost ein neuer Bestscore erzielt werden.

Final Model / Best Submission

Unser bestes Modell kam zustande, indem wir eine bestehende Lösung (Ozkurt, 2022) für die Challenge verbesserten.

Der erste Schritt dazu war das Klonen und Reparieren des Notebooks, denn der Code im Notebook wurde vermutlich mit einer älteren Python-Version entwickelt und konnte nicht ohne weiteres ausgeführt werden.

Mit dem reparierten Code wurde zuerst eine Submission als Baseline eingereicht, die sich auf Rang 31 platzierte.

Das im Notebook gefundene Verfahren trainiert als erstes ein Embedding-Modell auf den Trainings- und Testdaten darauf, aus der geo_lvl_3_id die geo_lvl_1_id und geo_lvl_2_id jedes Samples vorherzusagen. Das Embedding-Model ist ein Multi-Layer-Perceptron, welches nur einen Hidden-

Layer mit 16 Neuronen hat. Um von einer geo_lvl_3_id zu ihrem Embedding zu gelangen, wird die geo_lvl_id durch das Modell propagiert und der Output vom Hidden-Layer ist dann das entsprechende Embedding.

Diese Embeddings werden dann zusammen mit den übrigen Features zusammengefügt und als Features für das Ensemble-Model verwendet.

Das Ensemble Model besteht aus 5 LGBM Modellen, die alle auf denselben Daten und mit denselben Hyperparametern trainiert werden. Um die finale Vorhersage zu erhalten, wird mit jedem der Modelle die Wahrscheinlichkeitsverteilung der Zielvariable berechnet. Die Verteilungen werden dann aufsummiert, und die Kategorie vorhergesagt, für welche die Summe maximal ist.

Um das Modell zu verbessern, wurde die Anzahl an LGBM Modellen von 5 auf 10 erhöht, was eine äusserst kleine Verbesserung des Scores (+0.0001) bewirkte. Noch mehr Modelle brachten aber keine weiteren Verbesserungen.

Eine weitere Änderung die bessere Resultate erbrachte, war das Ersetzen der Alterswerte von besonders alten Gebäuden mit dem Durchschnittsalter der restlichen Gebäude.

Diese Änderung brachte uns eine Verbesserung von +0.0008 im F1-micro-Score und ist bis zum Schluss der Challenge unser bestes Ergebnis mit einem F1-micro-Score von 0.7534.

Submission Timeline

In der folgenden Grafik ist die Timeline unserer Submissions und der Verlauf der entsprechenden Performance der Modelle / Submissions dargestellt.

Die erste Submission, die gemacht wurde, war ein Random Forest Modell und wir stiegen mit einem Score von 0.72 in die Challenge ein. Die Veränderungen und Tunings, die wir am Data-Preprocessing und den Parametern vorgenommen haben, waren dann jedoch ohne Erfolg. Mit dem XGBoost Modell waren wir in der Lage unseren Score zu verbessern und ein Hyperparametertuning bracht uns einen score von über 0.73. Das neuronale Netz, mit welchem wir einen Versuch gestartet haben, war jedoch nicht sonderlich Erfolgsversprechend. Mit dem Catboost-Modell waren wir in der Lage sogar das Hyperparametertuning des XGBoost in den Schatten zu stellen und erreichten durch das Parametertuning des Catboost-Modells einen Score von über 0.74. mit dem lstm Encoding der geo_lvl_ids erreichten wir den besten Score ohne Zuhilfenahme von andern Challengeteilnehmern. Die Überarbeitung des ”Goodsea embedding” Modells ermöglichte uns dann den Einzug in die Top

50. Mit der Verwendung weiter embeded Modelle und einem Age imputing für das ”Goodsea embedding” erreichten wir dann unseren Topscore und verpassten knapp die Top 10, womit wir dennoch unter die besten 0.22% aller Teilnehmer gehören.

Learnings

In den vergangenen vier Monaten haben wir viel Neues gelernt und konnten das bisherige Wissen in einer kompetitiven Art und Weise anwenden. Die wichtigsten Learnings, die wir aus dieser lehrreichen Zeit mitgenommen haben, sind, dass Data-Preprocessing bei gewissen Modellen einen entscheidenden Unterschied machen kann, dies aber bei Boosting Modellen nicht der Fall ist, oder zumindest nicht bei unserer Challenge.

Weiter mussten wir feststellen, dass das Hyperparameter Tuning noch den finalen Unterschied und einige Plätze ausmachen kann, aber neue Herangehensweisen oder andere Modelle einen viel grösseren Unterschied machen. Basierend darauf, konnten wir feststellen, dass es sich lohnt, viele verschiedene Ansätze auszuprobieren, denn selbst kleine Performancegewinne können viele Plätze ausmachen.

Aufgrund dessen, ist es lohnenswert, sich nach weiteren bestehenden Lösungen oder Lösungsansätzen umzusehen, da man dort Inputs erhalten kann, auf die man selber nicht gekommen wäre. Weiter kann man schon bestehende Lösungen anpassen und verbessern und so einiges an Zeit sparen und diese anderweitig nutzen.

Feststellen konnten wir auch, dass das Gelernte nicht zwingend auf die Challenge übertragen werden kann, denn bei der Challenge zählt in erster Linie der Score. So wurden bei uns gewisse Features aus Test und Trainingsdaten zusammengefügt, was in der Praxis nicht gemacht werden dürfte, oder auch gewisse Metriken, haben wir nur aufgrund eines verbesserten Scores angewendet.

Summary

Die Aufgabe war eine spannende Erfahrung, die vor allem das Arbeiten im Team stark gefördert hat. Wir haben gelernt mit begrenzten Ressourcen ein komplexes Problem zu lösen und waren begeistert unsere erlernten Fähigkeiten und das gesammelte Wissen der letzten zwei Jahre endlich im Rahmen dieses Projektes realitätsnah anwenden zu können. Eine Herausforderung an einer globalen Challenge anzutreten hat nicht nur Spass gemacht, sondern war auch ein ausgezeichneter Indikator, um zu sehen, wo wir mit unserem Wissen in einem weltweiten Vergleich stehen. Wir haben alle viel über die Bedeutung von Data-Preprocessing und über die Relevanz des Verständnisses der Daten gelernt und die Erfahrung gemacht, dass bei den modernsten Modellen ein solches nicht immer von Nutzen ist. Wir sind mit unserem 12. Platz mehr als zufrieden und haben unser internes Ziel von den Top 50 nicht nur erreicht, sondern übertroffen.

Reti

Als Webentwickler und begeisterter AI-Student bin ich immer auf der Suche nach neuen Projekten. Ob Websites gestalten, Apps entwickeln oder Algorithmen optimieren, ich bin stets bereit, mich neuen Herausforderungen zu stellen.