hintergrundbild

Auswahl der Trainingsdaten

Machine Learning Algorithmen und neuronalen Netze im Deep Learning lernen aus Daten. Wenn Sie ein Machine Learning Modell oder ein neuronales Netzwerk trainieren, müssen Sie immer berücksichtigen, dass die Qualität ders Datensatzes mit denen Sie das Modell trainieren, die Qualität dieses Modells bestimmt.

Das bedeutet die Genauigkeit der Vorhersagen einer KI hängt im Wesentlich davon ab, wie gut die Daten in dem Datensatz sind, an denen die KI trainiert worden ist.

KI- und Machine-Learning-Modelle sind auf hochwertige Trainingsdaten angewiesen. Wenn Sie wissen, wie Sie Ihre Daten effektiv sammeln, aufbereiten und testen, können Sie den vollen Wert der KI erschließen.

Aber was genau heißt “Gute Daten”? Und wie identifiziert man Daten überhaupt, die als Trainingsdaten verwendet werden können?

In diesem Tutorial werden diese beiden Fragen geklärt.


Den Begriff Datensatz verstehen

Zunächst ist es wichtig, ein gemeinsames Verständnis davon zu haben, was wir unter dem Begriff Datensatz verstehen. Die Definition eines Datensatzes ist, dass er sowohl Zeilen als auch Spalten enthält, wobei jede Zeile eine Beobachtung enthält. Diese Beobachtung kann ein Bild, ein Audioclip, ein Text oder ein Video sein. In diesem Tutorial beschränken wir uns aber nur auf die gängigste Art der Daten, die beim Training einer KI verwendet werden. Diese sind die sog. Struktuierte Daten.

Strukturierte Daten beziehen sich auf die Art von Daten, die in einer Datenbanktabelle oder einem analysierbaren Format wie einer CSV-Datei (Comma Separated Values) oder Excel Tabelle gefunden werden können. Aus diesem Grund werden diese Daten auch als tabellarische Daten bezeichnen.

Ein Beispiel für einen strukturierten Datensatz kann hierbei wie folgt aussehen:

Beispiel eines struktuierten Datensatzes.
Abb. 1 Beispiel eines struktuierten Datensatzes.

In Abb. 1 handelt sich bei dem Datensatz um einen Datensatz einer Bank. Der Datensatz enthält die Informationen von Personen, die entweder noch Kunden der Bank sind oder diese in der Vergangenheit irgendwann verlassen haben. Dieser Datensatz ist ziemlich groß liegt in einer CSV-Datei vor. Hier sehen wir nur die ersten 6 Zeilen. Dies ist ein sehr typisches Beispiel für einen strukturierten Datensatz, dem Sie in der Praxis begegnen werden.

Die strukturierten Daten, die wir für das Trainieren der neuronalen Netze verwendet bestehen aus sog. Features und Labels.

Die Features dienen als Eingabedaten für das neuronale Netz, während die Labels die Ausgabe der Netzes darstellen, die wir berechnen wollen. Die Features in dem Datensatz in Abb. 1 sind im blauen Kasten dargestellt. Die Features hier sind spezifischen Eigenschaften des Kunden der Bank. Zu diesen gehören die Informationen wie:

  • Nachname
  • Heimatland
  • Geschlecht
  • Alter
  • wie viele Produkte der Kunde in der Bank hat

Das Label (roter Kaste) ist ein binärer Wert, der darstellt ob die entsprechende Person noch ein aktiver Kunde ist oder die Bank bereits verlassen hat.

Die Features und Labels bilden die Spalten eines strukturierten Datensatzes dar. Das heißt wenn Sie in der Zukunft das Wort Feature hören, können Sie sich einfach eine Spalte in der Datentabelle vorstellen und die dazugehörige Bezeichnung. Dasselbe gilt für das Label.

Die struktuierten Datensätze bestehen in der Regel aus sehr vielen Zeilen. Die Datenzeilen werden auch als Daten-Instanzen. Eine Daten-Instanz besteht aus den Werten der jeweiligen Features und einem Label. Das bedeutet, dass eine Daten-Instanz beschreibt die eine Sache, über die wir eine Vorhersage treffen möchten.

Gleichzeitig ist eine Dateninstanz die kleinstmögliche Datenmenge, die für das Trainieren eines neuronalen Netzes und allgemein eines Machine Learning Modells nötigt ist.

Selbst wenn Sie eine große Menge gut strukturierter Daten in Ihrem Dataset gespeichert haben, sind diese möglicherweise nicht so gekennzeichnet, dass sie tatsächlich als Trainings-Dataset für Ihr Modell dienen.

Autonome Fahrzeuge benötigen beispielsweise nicht nur Bilder der Straße, sondern auch beschriftete Bilder, auf denen jedes Auto, Fußgänger, Straßenschild und mehr mit Anmerkungen versehen sind. Projekte zur Stimmungsanalyse erfordern Labels, die einem Algorithmus helfen zu verstehen, wenn jemand Slang oder Sarkasmus verwendet. Chatbots benötigen Entitätsextraktion und sorgfältige syntaktische Analyse, nicht nur Rohsprache.

Mit anderen Worten, die Daten, die Sie für das Training verwenden möchten, müssen normalerweise angereichert oder gekennzeichnet werden. Außerdem müssen Sie möglicherweise mehr davon sammeln, um Ihre Algorithmen zu unterstützen. Die Chancen stehen gut, dass die von Ihnen gespeicherten Daten noch nicht ganz bereit sind, um maschinelle Lernalgorithmen zu trainieren.


Auswahl der passenden Trainingsdaten

Wie bereits erwähnt: Bevor ein neuronales Netz trainiert werden kann, müssen dafür passende Trainingsdaten gefunden werden. Bereits dieser Schritt erweist sich als nicht ganz simpel.

Im letzten Abschnitt haben wir gesehen, wie die Trainingsdaten allgemein aussehen sollten. Diese müssen nämlich aus Features und Labels bestehen. Die Labels zu identifizieren gestalten sich meist viel einfacher als die dazu passenden Features zu finden. Denn der Label ist um Grunde genau das, was wir vorhersagen möchten. Ein Label könnte dabei sein:

  • Kredit-Score eines Kunden
  • Klasse eines Bildes oder Dokumentes
  • Erwartete Nachfrage nach einem Produkt
  • Wahrscheinlichkeits eines Ereignisses

Wenn Sie also darüber im Klaren sind was das Ziel des Projektes ist und welche Vorhersagen gemacht werden müssen, können Sie das dazugehörige Label relativ leicht in den vorliegenden Daten identifizieren.

Viel schwieriger ist die Frage, welche Daten als Eingangsdaten (Features) für das neuronale Netz verwendet werden müssen, damit das Netz in der Lage ist die Labels vorherzusagen.

Die Allgemeine Regel für die Auswahl der Features lautet, dass die Features eine gewisse Vorhersagekraft für das Label über das Label haben müssen.

Beispielsweise, wenn das Label der erwartete Preis einer Immobilie ist, wären die dafür passenden Features “Das Alter der Immobilien”, „Die Fläche in Quadratmetern“, „Anzahl der Zimmer“ oder “Die Lage”. Denn diese Eigenschaften beeinflussen den Preis.

Auf der anderen Seite hat die Himmelsausrichtung des Kellerfensters vermutlich wenig bis gar keinen Einfluss auf den Preis und damit würde dieser Feature wenig Vorhersagekraft auf den Preis aufweisen.

Wie Sie also sehen, ist bei der Auswahl der richtigen Features ist etwas Expertise bezüglich des jeweiligen Problems und des Ziels des Projektes gefragt.

in god we trust

Wenn wir also eine riesige Datenmenge vor uns haben, haben wir insgesamt drei Möglichkeiten wie wir die passenden Features identifizieren können:

  • Die Expertise für das Problem
  • Intuition
  • Algorithmische Verfahren

Es ist nicht einfach Expertise für jedes Problem zu haben. Auch kann die Intuition manchmal trügerisch sein. Glücklicherweise gibt es einige algorithmische Methoden, auf die wir zurückgreifen können, um vorhandene Daten auf ihre Eignung als Eingabedaten/Features für das neuronale Netz zu testen.

Wir müssen uns also nicht nur auf unsere Intuition oder Expertise bezüglich des Problems verlassen. Zu diesem Zeitpunkt zähle ich persönlich 13 mögliche Methoden, die dafür verwendet werden können. Es würde sicherlich den Rahmen sprengen auf jede dieser Methoden detailliert einzugehen, da die meistens sowieso sehr von dem jeweiligen Problem abhängen.

Viel mehr möchte ich nur 5 Methoden vorstellen, aber dafür etwas detaillierter, mit denen Sie in etwa 95% der Fälle die passenden Features identifizieren können.

Diese Methoden unterteilen sich in sogenannte Filter und Wrapper-Methoden.


Willst Du einen Job in Data Science und AI?

Gerade als Quereinsteiger oder kompletter Berufseinsteiger ist es mittlerweile nahezu unmöglich, einen Job im Bereich AI/Data Science zu ergattern.

Mittlerweile gibt es durchschnittlich einhundert Bewerber auf jede Stelle und es kommt mir so vor, als hätte jeder, der sich bewirbt, bereits mehrere Online-Kurse zum Thema Data Science absolviert und ein halbes Dutzend Zertifikate vorzuweisen.

Ohne aus dieser großen Masse an Kandidaten herauszustechen, landet die Bewerbung schnell im virtuellen Mülleimer.

Als Teamleiter im Bereich KI/Data Science habe ich im Laufe der Jahre Bewerbungen von Hunderten von Kandidaten gesehen. Ich weiß, worauf es ankommt.

Ein Quereinsteiger oder Berufseinsteiger ohne nennenswerte Erfahrung hat nur eine Chance, den Job zu bekommen: mit einem umfangreichen Data-Science-Portfolio, das perfekt auf die ausgeschriebene Stelle zugeschnitten ist. Damit überzeugst du die HR und die Entscheidungsträger warum gerade Du der richte Kandidat für die Stelle bist.

Ich unterstütze dich persönlich dabei, ein maßgeschneidertes Data-Science-Projektportfolio zu entwickeln und umzusetzen, das genau auf deine Wunschstelle zugeschnitten ist.

Interesse? Dann, trage unten deinen Namen und Email ein und ich melde mich bei dir mit weiteren Informationen.


Wrapper-Methoden

Unter Wrapper-Methoden versteht man die Auswahl von Features, basierend auf der Performance des neuronalen Netzes, die beim Training mit den ausgewählten Features erzielt wird. Das Problem reduziert sich im Wesentlichen auf ein Suchproblem.

Hier unterscheiden man zwischen Vorwärtsauswahl und Rückwärtseliminierung.

Vorwärtsauswahl

Die Vorwärtsauswahl ist eine iterative Methode, bei der am Anfang nur ein einzelner willkürlich gewählter Feature im Trainingsdatensatz vorhanden ist. Ist besten einer, von dem Sie überzeugt sind, dass dieser eine Vorhersagekraft auf das Label aufweist. Abb. 2 visualiert den Prozess der Vorwärtsauswahl.

Abb. 2 Prozess der Vorwärtsauswahl.

In jeder Iteration fügen wir einen neuen, willkürlich ausgewählten Feature aus dem Datensatz in denTrainingsdatensatz. Wird die Performance des Modells durch diesen neuen Feature verbessert, wird der Feature beibehalten, wird die Performance schlechter, wird der Feature entfernt. In beiden Fällen kehren wir an den Anfang zurück, wo wir einen neuen Feature in den Trainingsdatensatz hinzufügen.

Das wird solange wiederholt, bis alle Features im Datensatz getestet wurden. Im besten Fall erhalten Sie am Ende dieses Prozesses eine Untermenge von Features, die in der bestmöglichen Performance des neuronalen Netzes resultieren.

Rückwärtseliminierung

Bei der Rückwärtseliminierung beginnen wir mit allen Features in dem Trainingsdatensatz. In jeder Iteration wird zufällig ein Feature entfernt. Abb. 3 visualiert den Prozess der Rückwärtseliminierung.

Abb. 3 Prozess der Rückwärtseliminierung.

Wird die Performance des Modells dadurch besser, wird das Feature nicht wieder in den Trainingsdatensatz aufgenommen. Und genau umgekehrt. Wir wiederholen das so lange, bis alle Features im Datensatz einmal entfernt wurden.


Filter-Methoden

Unter Filter Methoden versteht man die Verwendung nur einer Teilmenge aller Features, die bei der Datenerfassung als potentielle Kandidaten gefunden wurden. Die Features, die nicht in dieser Teilmenge sind, wurden nach bestimmten Kriterien herausgefiltert. 

% – Missing Values

Ein Kriterium, dass als Erstes erfüllt werden muss ist, dass ein Feature höchstens nur eine bestimmte Menge an fehlenden Werten aufweisen darf. Die prozentuale Schranke für fehlende Werte, die ein Feature höchstens beinhalten darf kann selbst festgelegt werden und kann beispielsweise 10 % betragen. Ein Feature, in dem die fehlenden Werte mehr als 10 % der gesamten Werte aufweisen, wird rausgefiltert und wird nicht in die Teilmenge aufgenommen.

Amount of Variation

Ein weiteres gute Kriterium für die Auswahl von Trainingsdaten, ist die Messung der Varianz der vorhandenen Daten.  Die Varianz ist ein Begriff aus der Statistik. Auf lateinisch Bedeutung Varianz „Verschiedenheit“. Varianz der Features beschreibt wie stark die einzelnen Werte in diesem Feature voneinander abweichen. In anderen Worten: Varianz gibt an wie verschieden die einzelnen Werte sind.

Warum ist das wichtig für uns? 

Es kann durchaus sein, dass ein bestimmter Feature nur ein und denselben Wert enthält. In diesem wäre die Information dieses Features für uns wertlos und wir können das Feature aus dem Datensatz entfernen. In diesem Fall wäre die Varianz 0. 

Ebenso kann ein Feature mit einer sehr geringen Varianz bezogen auf die absoluten Werte in diesem Feature, ebenfalls ausser acht gelassen werden. Beispielsweise wenn der Mittelwert dieses Features 10000 beträgt und die Varianz nur 0.01 ist. In diesem Fall sind die einzelnen Werte dieses Features einfach zu ähnlich und die Information überflüssig, da sie für jede Datenzeile gleich ist.

In der Praxis lohnt es sich auf jeden Fall die Features mit einer Varianz von 0 aus dem Datensatz zu entfernen. Für Varianzen ungleich 0, muss immer der Mittelwert des Features betrachtet und der Varianz gegenüber gestellt werden. 

Feature-Feature Korrelation

An dieser Stelle wird es etwas statistisch. Als nächstes untersuchen wie die Beziehung zwischen zwei verschiedenen Features. Genau Gesagt berechnen wir den sogenannten Korrelationskoeffizienten zwischen zwei Features.  Ganz wichtig ist hierbei, dass wir den Korrelationskoeffizienten nur zwischen Features berechnen können, die stetig sind. Der Korrelationskoeffizient ist ein Maß für den Grad des linearen Zusammenhangs zwischen diesen Features. Klingt etwas kompliziert. Ist tatsächlich mathematisch nicht ganz einfach. Aber ich möchte an dieser Stelle auf die Mathematik dahinter verzichten, sondern vielmehr das Konzept vermitteln und natürlich wie das in der Praxis berechnet werden kann.

Der Korrelationskoeffizient nimmt Werte zwischen -1 und 1 an.

Nehmen wir an, dass wir zwei Features “Außentemperatur” und “Umsatz durch Verkauf von Eis” haben. Diese beiden Features können gegeneinander grafisch aufgetragen werden:

Abb. 4 Features „Umsatz“ aufgetragen gegen „Außentemperatur“.

Wie wir sehen sind diese beiden Features linear abhängig. Der Umsatz steigt linear mit der Außentemperatur an. Der Korrelationskoeffizient beträgt 0.98, was bedeutet, dass zwischen diesen Features ein sehr starke lineare Abhängigkeit besteht.

In einem anderen Beispiel können wir die Ticketpreise für das Kino gegen die Kinobesucher plotten:

Abb. 5 Features „Kinobesucher“ aufgetragen gegen „Kinopreis“.

Hier sehen wir einen negativen, linearen Zusammenhang. Das bedeutet, je teurer die Tickets, desto weniger Kinobesucher. Der absolute Wert des Korrelationskoeffizienten ist ebenfalls sehr hoch, aber mit einem negativen Vorzeichen.

Zusammenfassend: Je größer der Betrag des Koeffizienten, desto größer ist die lineare Abhängigkeit zwischen zwei Features. Das Vorzeichen entscheidet nur über die positive, oder negative Steigung der Linearität.

Dagegen ist der Korrelationskoeffizient in diesem Beispiel sehr niedrig:

Abb. 6 Features „Kinobesucher“ aufgetragen gegen „Kinopreis“.

Zwischen diesen Features gibt es keine Abhängigkeit. Wir sehen also, dass die Körpergröße so gut wie gar nicht darüber entscheiden, wie viel Geld man verdient.

Warum ist der Korrelationskoeffizient bei der Auswahl der Features wichtig?

Für die Praxis gilt, dass wenn wir zwei Features mit einer hohen Korrelation im Datensatz haben (Unabhängig vom Vorzeichen), kann eines der Feature entfernt werden. 

Der Grund dafür ist, dass wenn zwei Feature eine hohe lineare Abhängigkeit besitzen, ist das  Informationsgehalt in den beiden Features für die Vorhersage des Labels, nahezu identisch. Unabhängig von dem was die Features tatsächlich darstellen, für das Neuronale Netz sind diese Features identisch. Aus diesem Grund kann eines davon entfernt werden.

Auf der anderen Seite: Wenn zwei Features einen sehr niedrigen Korrelationskoeffizienten haben, können wir weiterhin beiden Features benutzten.


Feature-Label-Korrelation

Das genaue Gegenteil gilt für Korrelation zwischen einem stetigen Feature und einem stetigen Label. Wenn diese beiden einen hohen Korrelationskoeffizienten aufweisen, das heißt das Label und das Feature sind linear Abhängig, muss dieses Feature auf jeden Fall in den Trainingsdatensatz aufgenommen werden. Das Neuronale Netz wird beim Training diese Abhängigkeit herausfinden und für die Vorhersage des Labels verwenden.

Auf der anderen Seite, wenn der Koeffizient sehr niedrig ist, bedeutet es, dass das Feature keinen Vorhersagekraft aufweist und kann aus dem Datensatz entfernt werden.


Workflow für die Auswahl der Trainingsdaten

Die folgenden Abb. 7 fasst die beschrieben Schritte bei der Auswahl der Trainingsdaten nochmals zusammen.

Abb. 7 Workflow bei der Auswahl der Trainingsdaten.

Training/Test/Validierung

Bevor wir unser neuronales Netz trainieren können, müssen wir noch einen letzten Schritt tun. Wir müssen die zuvor identifizierten Daten in sogenannte Trainings-, Validierungs- und Testsätze aufteilen. Das Trainingsdatensatz ist, wie der Name suggeriert, der Datensatz, mit dem wir das neuronale Netzwerk trainieren. Das Modell sieht und lernt an diesen Daten.

Im Gegensatz dazu dient der Validierungs-Datensatz dazu die Performance des Modells, beispielsweise die Genauigkeit, während des Trainings immer wieder zu berechnen. Warum machen wir das? Natürlich ist es ganz klar, dass wir während des gesamten Trainingsprozess die Entwicklung der Performance des Modells im Auge behalten müssen. Zum einen können wir sicherstellen, dass ein neuronales Netz zu Ende trainiert hat, wenn die bereits gute Performance sich nicht mehr weiter verbessert, und zum anderen können wir frühzeitigen eingreifen, wenn wir sehen, dass die Performance schlecht ist und sich nicht weiter zu verbessern scheint. Die Frage, die Sie sich jetzt vielleicht stellen ist: Warum wir dafür einen separaten Datensatz brauchen? Können wir dafür etwa nicht Trainingsdatensatz auch nutzten?

Leider nicht, denn wir wollen die Performance des Modells immer unvoreingenommen messen. Das neuronale Netze hat während des trainings die nicht nur Vorhersagen für die Features berechnen, sondern wir haben dem Modell auch die dazu passenden Labels gezeigt. Damit hat das neuronale Netz alle richtigen Lösungen für den Trainingsdatensatz sozusagen bereits gesehen. Viel interessanter ist natürlich die Performance an Features, für die das neuronale Netz noch nie die dazu passenden Labels gesehen hat. Das erreichen wir indem wir einen separaten Validierungs-Datensatz benutzten. Damit ist die Messung der Performance während des Trainings unvoreingenommen. 

Sobald ein neuronale Netz vollständig trainiert ist, ist es nötig die Performance des Modells nochmal an einem weiteren Datensatz zu testen, den sogenannten Testdatensatz.

Der Test-Datensatz bietet den Goldstandard, um die endgültige Leistung eines trainierten Modells wirklich zu evaluieren. Sehr oft wird der Validierungs-Datensatz als Testdatensatz verwendet, dies ist jedoch keine gute Praxis. Wir müssen nach dem Training das Modell noch ein letzte mal, an einem neuen Datensatz testen. Das hat einen guten Grund. 

Während des Trainings probieren wir sehr viele unterschiedliche Parameter des neuronalen Netzes aus und die bestmögliche Performance zu erreichen. Die Performance wird jedes mal an dem Validierungs-Datensatz gemessen. Damit richten wir das Modell sozusagen nach dem Validierungs-Datensatz aus. Es kann natürlich passieren, dass es bloß ein Zufall ist, dass die gewählten Parameter des neuronalen Netzes die bestmögliche Performance nur für Validierungs-Datensatz ergeben.

Aus diesem Grund müssen wir am Ende noch einen separaten Datensatz benutzten, für den wir während des Trainings die Parameter des Neuronalen Netzes nicht angepasst haben. 

Wie groß muss der Trainings- Test- und Validierungsdatensatz sein?

Eine schwierige Frage könnte sein, wie viele Daten für diese drei separaten Datensätze verwendet werden sollen. Im Allgemeinen sollte der Trainingsdatensatz so groß wie möglich sein. Andererseits müssen Sie immer noch genügend Daten für die Validierung und insbesondere für die anschließende Testphase bereitstellen, um ein aussagekräftiges Leistungsergebnis zu erhalten.

In den meisten Fällen müssen Sie das Verhältnis der Datenmengen in den drei jeweiligen Datensätzen an die Größe Ihres gesamten Datensatzes anpassen. Bei mittelgroßen Datensätzen zwischen etwa 10k und 500k Dateninstanzen sind in der Regel 70% der Daten-Instanzen im Trainingssatz, 10% im Validierungssatz und der Rest im Testsatz enthalten.

Verhältnis der Trainings- Test- und Validierungsdatensatzes bei kleinen bis mittleren Datensätzen.
Abb. 8 Verhältnis der Trainings- Test- und Validierungsdatensatzes bei kleinen bis mittleren Datensätzen.

In diesem Fall können Sie genügend Beispiele für das Training des neuronalen Netzes bereitstellen und gleichzeitig Ihr Modell genau validieren und testen. Wenn Sie auf größere Datensätze mit Millionen von Daten-Instanzen stoßen, können Sie die Größe von Validierungs- und Testsätzen erheblich reduzieren. Nur ein paar Prozent dieser Millionen Daten sind mehr als genug, um die Leistung Ihres Modells zu beim Training zu validieren und anschließend zu testen.

Abb. 9 Verhältnis der Trainings- Test- und Validierungsdatensatzes bei großen Datensätzen.

Willst Du einen Job in Data Science und AI?

Gerade als Quereinsteiger oder kompletter Berufseinsteiger ist es mittlerweile nahezu unmöglich, einen Job im Bereich AI/Data Science zu ergattern.

Mittlerweile gibt es durchschnittlich einhundert Bewerber auf jede Stelle und es kommt mir so vor, als hätte jeder, der sich bewirbt, bereits mehrere Online-Kurse zum Thema Data Science absolviert und ein halbes Dutzend Zertifikate vorzuweisen.

Ohne aus dieser großen Masse an Kandidaten herauszustechen, landet die Bewerbung schnell im virtuellen Mülleimer.

Als Teamleiter im Bereich KI/Data Science habe ich im Laufe der Jahre Bewerbungen von Hunderten von Kandidaten gesehen. Ich weiß, worauf es ankommt.

Ein Quereinsteiger oder Berufseinsteiger ohne nennenswerte Erfahrung hat nur eine Chance, den Job zu bekommen: mit einem umfangreichen Data-Science-Portfolio, das perfekt auf die ausgeschriebene Stelle zugeschnitten ist. Damit überzeugst du die HR und die Entscheidungsträger warum gerade Du der richte Kandidat für die Stelle bist.

Ich unterstütze dich persönlich dabei, ein maßgeschneidertes Data-Science-Projektportfolio zu entwickeln und umzusetzen, das genau auf deine Wunschstelle zugeschnitten ist.

Interesse? Dann, trage unten deinen Namen und Email ein und ich melde mich bei dir mit weiteren Informationen.


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert