Viele Unternehmen sitzen auf einem Schatz und wissen oft nicht, was sie damit anfangen sollen. Die Rede ist von Daten. Um diesen Schatz heben zu können, braucht es Wissen und Werkzeuge. Ein wichtiger Teil des Hebens des Datenschatzes wird unter dem Begriff „Data Science“ zusammengefasst. Dabei werden verschiedene mathematische Methoden und Algorithmen eingesetzt, um am Ende ein Modell zu erstellen, das die eigenen Daten möglichst gut widerspiegelt und mit dem man Aussagen über die Zukunft machen kann. Wenn im Zusammenhang mit Data Science von „Modellen“ die Rede ist, sind maschinelle Lernmodelle gemeint.
Das klingt erst einmal sehr kryptisch. Und überhaupt, wo fange ich an und was brauche ich alles, um ein solches Modell zu erstellen? Genau darum soll es in diesem Blockbeitrag gehen. Wir nehmen Sie an die Hand und zeigen Ihnen Schritt für Schritt, wie der Einstieg in das Thema Data Science klappt, sodass Sie am Ende des Beitrags in der Lage sind, ein eigenes maschinelles Lernmodell (engl. Maschine Learning Model) zu erstellen.
Python
Python ist die Programmiersprache der Wahl, wenn es um Datenberarbeitung und maschinelle Lernmodelle geht. Die Installation unter Windows, Linux und macOS ist einfach und schnell.
Zuerst sollten Sie überprüfen, ob Python bereits auf Ihrem Rechner installiert ist und wenn ja, in welcher Version. Öffnen Sie dazu die Konsole und probieren Sie nacheinander folgende Befehle aus:
python --version
python2 --version
python3 --version
Sie können zum Abschnitt „Virtuelle Umgebungen“ wechseln, wenn Sie bereits Python in einer möglichst aktuellen Version (3.10 oder höher) installiert haben.
Windows
Laden Sie das Installationsprogramm für Python von der Website python.org herunter. Klicken Sie dort auf den Reiter „Downloads“ und dann auf „Windows“. Klicken Sie auf „Download Windows installer (64-bit)“ unter einer möglichst aktuellen Version (z.B. Python 3.12.6) und laden Sie diese herunter. Nach Abschluss des Downloads starten Sie das Installationsprogramm. Gleich zu Beginn der Installation sollte der Punkt „Add Python 3.x to PATH“ angekreuzt werden. Dadurch wird das Installationsverzeichnis zur Umgebungsvariablen PATH hinzugefügt und es kann der Python3-Befehl in jedem Verzeichnis ohne Angabe des vollständigen Pfads und ohne Notwendigkeit, im Installationsverzeichnis zu sein, ausgeführt werden. Alle anderen Voreinstellungen im Installationsprogramm passen in der Regel und Sie können auf „Install Now“ klicken. Abschließend fragt das Installationsprogramm, ob die Längenbeschränkung für Dateipfade aufgehoben werden soll („Disable file path length limit“). Dies sollten Sie bejahen.
macOS
Wenn Sie einen Mac benutzen, empfehlen wir Ihnen, zuerst den Paketmanager „Homebrew“ zu installieren. Geben Sie dazu folgenden Befehl in das Mac-Terminal ein (Sie finden ihn auch unter www.brew.sh):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Nach der Installation das Terminal komplett schließen und wieder öffnen. Danach sollten Sie das Pyenv-Modul mit „brew install pyenv“ installieren. Mit Pyenv können Sie schnell zwischen verschiedenen Python-Versionen für Ihre verschiedenen Projekte wechseln, was sehr nützlich ist, da einige Python-Module eine bestimmte Python-Version erfordern. Der Clou von Pyenv besteht darin, dass Sie in der Konfiguration Ihrer Shell eine sogenannte Shim registrieren. Dadurch wird der Befehl „python“ von einem Skript abgefangen, das dann entscheidet, welches Python-Binary aufgerufen werden soll. Damit das funktioniert, müssen Sie Pyenv in die Konfiguration der Shell ZSH eintragen. Führen Sie dazu folgenden Befehl im Terminal aus:
echo 'eval "$(pyenv init --path)"'>> ~/.zprofile
echo 'eval "$(pyenv init -)"'>> ~/.zshrc
Anschließend das Terminal komplett beenden (am besten mit cmd +Q). Danach öffnen Sie das Terminal erneut und geben den Befehl „pyenv install 3.12.2“ ein, um die neueste Version von Python zu installieren, die zum Zeitpunkt der Erstellung dieses Beitrags verfügbar war.
Linux
Aufgrund der großen Anzahl von Linux-Distributionen ist es im Rahmen dieses Blogs nicht möglich, für jede Distribution den Weg zur Installation von Python zu beschreiben. Zum Glück ist bei den meisten Distributionen Python bereits vorinstalliert. Sollte dies bei Ihrer Distribution nicht der Fall sein, werden Sie wahrscheinlich in den Repositories Ihrer Distribution fündig. Bei Ubuntu z.B. sollten Sie zunächst die Pakete mit „sudo apt update“ aktualisieren und dann mit dem Befehl „apt search python3.12“ nach Installationspaketen der Version 3.12 suchen. Mit „apt install python3.12“ können Sie dann diese Version installieren. Wir empfehlen, unter Linux mit dem Paketmanager pip zu arbeiten, da Sie so bestimmte Module einfach nachinstallieren können. pip kann auch über das Terminal mit „sudo apt install python3-pip“ installiert werden.
Virtuelle Umgebungen
Am besten ist es, sich von Anfang an an das Arbeiten in virtuellen Umgebungen zu gewöhnen. Das mag auf den ersten Blick kompliziert erscheinen, ist es aber nicht. Für jedes Projekt, das Sie beginnen, wird zunächst eine virtuelle Umgebung eingerichtet. Sie können sie sich wie einen Ordner vorstellen, der alle Werkzeuge für Ihr Projekt enthält, genau auf Ihre Bedürfnisse zugeschnitten.
Diese Vorgehensweise erspart Ihnen viel Ärger im Laufe der verschiedenen Projekte. Zum Hintergrund: Python-Skripte verwenden in der Regel Module, die bestimmte Funktionen zur Verfügung stellen. Es gibt bereits unzählige Module, die alle für unterschiedliche Zwecke eingesetzt werden können. Die Python-Skripte basieren aber nicht immer auf der gleichen Version von Python und/oder verwenden die gleiche Modulversion. Wenn man nun für jedes Projekt auf der ganzen Maschine immer wieder global die Pythonversion oder bestimmte Modulversionen ändern muss, wird es unübersichtlich bzw. man kann nicht ohne weiteres an zwei verschiedenen Projekten arbeiten, die unterschiedliche Python- bzw. Modulversionen benötigen.
Im Laufe dieses Blogs werden wir ein neues Projekt starten, in dem wir den Wert von Immobilien in New York anhand der Wohnfläche mit Hilfe einer linearen Regression vorhersagen wollen. Dazu legen wir einen neuen Ordner für dieses Projekt an und erstellen in diesem Ordner eine neue virtuelle Umgebung. Wenn wir die virtuelle Umgebung aktivieren, arbeitet Python nur mit diesem Ordner und installiert alle Module ausschließlich dort. Theoretisch könnten wir auch eine bestimmte Version von Python für diese Umgebung installieren. Unsere global installierte Python-Version bliebe davon unberührt.
Machine Learning in a Nutshell
Um aus den Mitteln und Möglichkeiten, die Data Science bietet, einen Mehrwert für Ihr Unternehmen zu generieren, sind vor allem zwei Aspekte wichtig. Die wichtigste Komponente sind die Daten. Auch hier gilt das Motto „Garbage in Garbage out“. Wenn die Daten nicht repräsentativ für Ihren Anwendungsfall oder sehr lückenhaft und nicht vernünftig aufbereitet sind, nützt der beste Machine Learning-Algorithmus nichts. In solchen Fällen kann man noch so viele Datensätze auf das maschinelle Lernmodell werfen, der Output wird nicht zufriedenstellend sein.
Der zweite wichtige Aspekt ist die Auswahl des richtigen Machine Learning-Modells (auch kurz „Modell“ genannt). Unter Machine Learning versteht man Programme, die ihr Wissen aus einem Datensatz gewinnen und dann mit diesem Wissen bestimmte Aufgaben erledigen können, die sonst nur sehr aufwendig oder gar nicht lösbar wären. Darüber hinaus lernen die Modelle mit jedem neuen Datenpunkt dazu und sind in der Lage, neue Regeln für sich selbst aufzustellen, die dann wiederum das Ergebnis (auch Vorhersage oder im Englischen „prediction“ genannt) verbessern.
Es gibt verschiedene Arten, wie maschinelle Lernalgorithmen lernen. Die beiden wichtigsten Arten sind das überwachte Lernen (Supervised Learning) und das unüberwachte Lernen (Unsupervised Learning). Beim überwachten Lernen wird dem Modell ein Datensatz zum Lernen gegeben, bei dem die Lösung für jedes Attribut bereits vorgegeben ist. Die Attribute oder Merkmale sind nichts anderes als die einzelnen Einträge der jeweiligen Spalten einer Tabelle. Im Gegensatz dazu steht das unüberwachte Lernen. Bei diesem Ansatz muss das Modell die Muster selbst erkennen, die Daten sind nicht beschriftet. Bildlich gesprochen fehlt die Bauanleitung. Wenn man einem solchen Algorithmus z.B. ein Satellitenbild vorlegt, weiß er nicht, dass die blauen Flächen Seen oder Meere sind und die grünen Wälder oder Wiesen. Er ist aber in der Lage zu erkennen, dass es diese unterschiedlichen Flächen gibt und kategorisiert sie selbständig.
Im Rahmen unseres Beispielprojekts werden wir ein Modell verwenden, das in die Kategorie des überwachten Lernens eingeordnet wird.
Das Beispiel Projekt
Um mit unserem Machine Learning-Modell zu beginnen, das wir darauf trainieren werden, Immobilienpreise für den New Yorker Stadtteil Staten Island vorherzusagen, müssen wir zunächst, wie oben erwähnt, die virtuelle Umgebung für das Projekt einrichten. Dazu erstellen wir einen neuen Ordner. Öffnen Sie dann die Konsole und navigieren Sie mit cd in den neu erstellten Ordner. Dort erstellen Sie anschließend die virtuelle Umgebung in der Konsole mit:
python3 -m venv env
Das Modul venv ist Bestandteil von Python ab Version 3.3. Der Name der virtuellen Umgebung, in diesem Beispiel env, kann frei gewählt werden. Der obige Befehl erstellt einen neuen Ordner mit dem Namen env in dem Verzeichnis, in dem Sie sich gerade befinden. Unter macOS und Linux genügt folgender Befehl, um die erstellte virtuelle Umgebung zu aktivieren:
source env/bin/activate
Unter Windows sieht der Befehl ein wenig anders aus:
env\Scripts\activate.bat
Dadurch wird das Skript activate.bat ausgeführt, das von der virtuellen Umgebung venv erstellt wurde. Der Name der virtuellen Umgebung (in diesem Fall env) erscheint in Klammern vor der Eingabezeile Ihrer Konsole, sobald diese aktiviert ist.
Nun müssen Sie nur noch Ihre Entwicklungsumgebung (IDE) aus dem Ordner heraus öffnen, z.B. Visual Studio Code mit dem Befehl „code .“ . Danach erstellen Sie in der IDE eine neue Datei und benennen diese passend, z.B. NY_Housing_Market.ipynb. Wir speichern die Datei nicht als .py, sondern als eine .ipynb-Datei (Jupyter Notebook) ab. Dies hat den Vorteil, dass man den Code in der IDE übersichtlich entwickeln und sich das Ergebnis anzeigen lassen kann.
Daten
Wie bereits erwähnt, wollen wir Immobilienpreise für den New Yorker Stadtteil Staten Island prognostizieren. Dazu benötigen wir Daten. Wir werden einen frei zugänglichen Datensatz der Plattform Kaggle verwenden. Gehen Sie einfach zu Kaggle.com, registrieren Sie sich und laden Sie den Datensatz NY-House-Dataset.csv herunter. Speichern Sie den Datensatz in dem Ordner, den Sie zuvor für das Projekt angelegt haben.
Der erste Schritt besteht darin, sich einen Überblick über die Daten zu verschaffen und ihre Qualität zu beurteilen. Denn wie bereits erwähnt, ist es nicht zielführend, das Modell einfach mit Daten schlechter Qualität zu füttern. Das Ergebnis wird entsprechend schlecht ausfallen.
In der Konsole, im Verzeichnis unseres Projektes, installieren wir zunächst einige Python-Bibliotheken, die wir für die weitere Bearbeitung des Datensatzes benötigen. Dazu verwenden wir den Befehl:
pip install matplotlib pandas scikit-learn seabrorn
Pandas wird benötigt, um die Daten aus der CSV-Datei zu laden und Matplotlib und Seaborn, um die Daten anschaulich zu visualisieren. Für das Machine Learning-Modell wird Scikit benötigt. Nun können Sie in die zuvor erstellte jypn-Datei in Ihrer IDE wechseln. Dort müssen zunächst die zuvor installierten Bibliotheken importiert werden:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import root_mean_squared_error
from sklearn.preprocessing import OrdinalEncoder
Die CSV-Datei mit den Daten des New Yorker Immobilienmarktes muss ebenfalls in unser Projekt importiert und lesbar gemacht werden. Verwenden Sie dazu den folgenden Befehl, wobei Sie den Pfad durch den Speicherort Ihres Datensatzes ersetzen:
data = pd.read_csv("NY-House-Dataset.csv")
Mit „data.info()“ bekommt man einen Überblick über die Anzahl der Daten im Datensatz und der Spalten sowie über deren Datentyp.

Der Datensatz enthält 4801 Immobilien, die durch 17 Attribute (Spalten) beschrieben werden. In diesem Beispieldatensatz gibt es keine fehlenden Werte. Die Realität sieht in der Regel anders aus. Nachdem wir uns einen Überblick über die Spalten und ihre Namen bzw. Inhalte verschafft haben, können wir mit der Bereinigung des Datensatzes beginnen. Einige Spalten, wie der Name des Maklers und die Adresse, sind für uns nicht relevant und können gelöscht werden. Entfernen Sie die nicht benötigte Spalten mit:
data = data.drop(['LOCALITY' , 'FORMATTED_ADDRESS', 'LONG_NAME', 'ADMINISTRATIVE_AREA_LEVEL_2', 'MAIN_ADDRESS', 'STATE', 'ADDRESS', 'BROKERTITLE', 'SUBLOCALITY'], axis = 1)
Als nächstes müssen wir schauen, in welchem Stadtteil eine Immobilie liegt, da uns eigentlich nur die Immobilien in Staten Island interessieren. Die Spalte STREET_NAME liefert die gewünschte Information.
Mit „data[‚STREET_NAME‘].value_counts()“ erhalten wir zunächst einen Überblick, wie viele Immobilien sich in den einzelnen Stadtteilen befinden.

Jetzt werden Inkonsistenzen im Datensatz sichtbar. Es scheint, dass einige Immobilien nicht korrekt einem Stadtteil zugeordnet sind. Es gibt z.B. Immobilien, die als Stadtteil „New York“ eingetragen haben. Dies ist nicht korrekt, da es in New York keinen Stadtteil New York gibt. In der Realität müssten die Daten aufwendig nach weiteren Inkonsistenzen durchsucht und anschließend bereinigt werden, da sonst unser Machine Learning-Modell mit fehlerhaften Daten trainiert würde. Für unsere Zwecke beschränken wir uns jedoch auf die 480 Datenpunkte, die der Bezirk Staten Island aufweist.
Visualisierung
Zu den Aufgaben eines Data Scientist gehört es auch, die Daten möglichst anschaulich aufzubereiten und z.B. dem Auftraggeber (Stakeholder) zu präsentieren. In unserem Fall könnte man mit den Informationen aus den Spalten LATITUDE und LONGITUDE eine Karte erstellen, in der die einzelnen Datenpunkte (Immobilien) dargestellt werden. Man sollte sich immer vorher gut überlegen, was man mit welcher Grafik wie zeigen möchte. Da wir uns für die Immobilien in Staten Island interessieren, ist es sinnvoll, die direkt angrenzenden Stadtteile von Staten Island mit in die Karte aufzunehmen. So erhält man einen guten Überblick über die Lage der Staten Island Immobilien innerhalb von New York. Daher erstellen wir zunächst eine Liste „districs“ der Stadtteile, die wir auf der Karte darstellen möchten und filtern den Datensatz anschließend mit districs. Das Ergebnis wird in der Variablen map gespeichert.
districs = ["Manhattan", "Staten Island", "The Bronx", "Queens", "Brooklyn"]
map = data[data["STREET_NAME"].str.contains('|'.join(districs))]
Um die Datenpunkte der einzelnen Stadtteile farbcodiert in einer Grafik darstellen zu können, müssen diese zunächst in numerische Werte umgewandelt werden. So wird z. B. aus Staten Island eine 1, aus Brooklyn eine 2 und so weiter und so fort. Dazu wird zunächst eine Instanz der oben importierten Klasse OrdinalEncoder erzeugt, die mit der Methode fit_transform die Werte der Spalte STREET_NAME in numerische Werte umwandelt.
oe = OrdinalEncoder()
street_name_oe = oe.fit_transform(map[['STREET_NAME']])
Um ein Streudiagramm zu erstellen, das die Standorte auf einer Karte basierend auf geographischen Koordinaten darstellt, verwenden Sie den Befehl „plot“ mit der Option „kind=’scatter‘“. Verwenden Sie für die x‑Achse die Spalte LONGITUDE und für die y‑Achse die Spalte LATITUDE, um die Längen- und Breitengrade korrekt darzustellen. Die Transparenz der Punkte wird mit dem Parameter „alpha“ eingestellt. Dadurch werden überlappende Punkte sichtbar. Mit dem Parameter „color“ können Sie den Nummern (bzw. Stadtteilen) Farben zuweisen.
map.plot(kind = 'scatter', x = 'LONGITUDE', y = 'LATITUDE', title = "Standorte", alpha = .3, color=street_name_oe)
plt.show()

Die Grafik zeigt, dass bis auf wenige Ausnahmen die meisten Immobilien den Stadtteilen richtig zugeordnet wurden.
Analyse
Für die weitere Analyse werden die Spalten LONGITUDE und LATITUDE nicht benötigt und können ebenso wie alle anderen Stadtteile außer Staten Island aus dem Datensatz entfernt werden.
data = data.drop(['LONGITUDE', 'LATITUDE'], axis = 1)
data = data.drop(data[data["STREET_NAME"] != "Staten Island"].index)
Es sollte auch überprüft werden, ob der Datensatz Duplikate enthält.
data.duplicated().sum()
Die Prüfung ergibt, dass in den verbleibenden Daten noch 23 Einträge doppelt vorhanden sind. Auch diese müssen gelöscht werden. Anschließend ist es ratsam, sich nochmals einen Überblick über die verbleibenden Daten zu verschaffen und zu überprüfen, ob auch die 23 Duplikate entfernt wurden.
data.drop_duplicates(inplace=True)
data.info()
Jetzt sollten nur noch 457 Datenpunkte im Datensatz enthalten sein. Um einen statistischen Überblick über die Daten zu erhalten, können Sie die Describe-Methode verwenden (data.describe()). Die Methode ermittelt für alle numerischen Spalten den Durchschnitt (mean), die minimalen (min) und maximalen (max) Werte, die Standardabweichung (std) sowie drei Perzentile (25%, 50% und 75%).

Beim Anblick der statistischen Auswertung fallen einige Dinge auf, die einer näheren Betrachtung bedürfen. Zum einen liegt der maximale Wert einer Immobilie im Datensatz bei über 2 Milliarden Dollar, was an sich schon bemerkenswert ist. Zum anderen liegt der Wert von 75% aller Immobilien unter einer Million Dollar. Der Mittelwert hingegen liegt bei ca. 5,6 Millionen Dollar. Die 2‑Milliarden-Dollar-Immobilie scheint ein Ausreißer zu sein, der den Mittelwert nach oben treibt. Obwohl man nicht leichtfertig Daten aus einem Datensatz entfernen sollte, ist es in diesem Fall durchaus sinnvoll, da Ihr Modell den Ausreißer ebenfalls in die Berechnung einbeziehen und die Ergebnisse entsprechend verzerren würde. Die 2‑Milliarden-Dollar-Immobilie wird mit diesem Befehl entfernt:
data = data.drop(data[data["PRICE"] > 2000000000].index)
Anschließend sollte die Describe-Methode erneut angewendet werden. Die statistischen Werte sind nun ohne den Ausreißer ausgewogener, der Durchschnitt ist von über 5 Mio. auf knapp unter 1 Mio. gesunken, was den Immobilienmarkt realitätsnäher beschreibt. Unsere ursprüngliche Überlegung war es, den Wert einer Immobilie anhand der Wohnfläche zu schätzen, wobei wir davon ausgingen, dass ein linearer Zusammenhang zwischen der Größe der Immobilie und ihrem Wert besteht. Um dies zu überprüfen, können Sie ein Streudiagramm erstellen, in dem Sie den Preis der Immobilie gegen ihre Größe auftragen.
Zuvor müssen Sie die Daten jedoch splitten. Das bedeutet, dass Sie die Daten in zwei Datensätze aufteilen. Mit dem einen Datensatz wird das Modell trainiert, mit dem anderen wird das Modell anschließend getestet.
Training und Anwenden
Sie müssen den Datensatz jedoch nicht manuell aufteilen. Die Scikit-Bibliothek stellt auch hierfür eine Funktion zur Verfügung, die diese Aufgabe übernimmt. Die Größe der beiden Datensätze können Sie selbst bestimmen. In der Regel trainieren Sie das Modell mit 80 % des Datensatzes und testen es anschließend mit den restlichen 20 %.
train_df, test_df = train_test_split(data, test_size=0.2, random_state=40)
Sie können nun die lineare Abhängigkeit zwischen dem Wert der Immobilie und ihrer Größe mit Hilfe eines Streudiagramms visuell überprüfen. Dazu wird der Teil des Datensatzes verwendet, mit dem das Modell später auch trainiert wird.
train_df.plot(kind = 'scatter', y = "PRICE", x = "PROPERTYSQFT" , title = "Immobilienpreise", ylabel = 'Preis pro Immobilie', xlabel = 'Square Feet', alpha = .2)
plt.axis([100, 10000, 20000, 5000000])
plt.show()

Aus dem Diagramm in Abbildung 5 lässt sich bereits eine lineare Abhängigkeit zwischen den Parametern Preis und Größe einer Immobilie erahnen. Um ganz sicher zu gehen, kann man auch den Pearson-Korrelationskoeffizienten für alle Attribute (Spalten) berechnen und in einer Heatmap darstellen. Wir begnügen uns jedoch mit der rein visuellen Überprüfung. Damit können wir mit dem Training unseres Modells, einer linearen Regression, beginnen. Dazu werden zunächst der unabhängigen Variablen x die Werte der Spalte PROPERTYSQFT und der abhängigen Variablen y die Werte der Spalte PRICE zugeordnet. Anschließend kann die lineare Regression direkt mit den x- und y‑Werten trainiert werden.
y = train_df[["PRICE"]].values
x = train_df[["PROPERTYSQFT"]].values
model = LinearRegression()
model.fit(x,y)
Anschließend können Sie das trainierte Modell die Vorhersage (Prediction) machen lassen und diese als Gerade in das Streudiagramm eintragen.
prediction = model.predict(x)
train_df.plot(kind = 'scatter',y = "PRICE", x = "PROPERTYSQFT" , title = "Lineare Regression", ylabel = 'Immobilienpreis', xlabel = 'Square Feet', alpha = .2)
plt.plot(x, prediction, label = 'model', color = 'black', alpha = 0.5)
plt.axis([100, 10000, 20000, 5000000])

Überprüfen
Jetzt wird es spannend. Wir testen nun unser erstelltes Modell mit dem Testdatensatz. Dazu müssen wir einige Schritte wiederholen. Der Vollständigkeit halber und damit Sie alles nachprogrammieren können, sind alle Schritte noch einmal abgebildet.
y_test = test_df[["PRICE"]].values
x_test = test_df[["PROPERTYSQFT"]].values
test_prediction = model.predict(x_test)
test_df.plot(kind = 'scatter',y = "PRICE", x = "PROPERTYSQFT" , title = "Lineare Regression Testdaten", color = 'green', ylabel = 'Immobilienpreis', xlabel = 'Square Feet', alpha = .2)
plt.plot(x_test, test_prediction, label = 'model', color = 'red', alpha = 0.5)
plt.axis([100, 10000, 20000, 5000000])
plt.show()

Auf den ersten Blick werden die Testdaten durch die Gerade (das Modell) recht gut wiedergegeben. Sie können das Modell auch konkret den Wert einer Immobilie mit einer bestimmten Fläche vorhersagen lassen. Zum Beispiel für eine Immobilie mit einer Größe von 800 Quadratfuß (ca. 74 m²).
model.predict([[800]])
Nach dem Modell würde der Preis für eine 74 m² große Immobilie auf Staten Island 376.481 Dollar betragen. Doch wie realitätsnah sind die vom Modell berechneten Werte? Um diese Frage zu beantworten, gibt es bestimmte Gütekriterien wie das Bestimmtheitsmaß R2 oder die Wurzel der mittleren quadratischen Abweichung RMSE. R2 gibt den Anteil der Varianz in den Beobachtungen an. Der Wert liegt zwischen 0 und 1, wobei ein Wert von 1 bedeutet, dass das Modell die Daten perfekt erklärt, und ein Wert von 0 anzeigt, dass das Modell keinen Erklärungswert hat. Der RMSE ist etwas anschaulicher, da er die Fehler in den gleichen Einheiten angibt wie die Vorhersagewerte. Auch hier unterstützt uns Scikit mit entsprechenden Funktionen:
print(f'R2: {model.score(x_test, y_test)}')
print(f'RMSE: {root_mean_squared_error(y_test, test_prediction)}')
Als Ergebnis erhält man einen Wert für R2 von 0,72 und für RMSE von 283.713 Dollar. Diese Resultate sind nicht berauschend, aber auch nicht schlecht. Das Modell kann 72% der Streuung der abhängigen Variablen auf der Basis der unabhängigen Variablen vorhersagen. Ein RMSE von 283.713 Dollar bedeutet, dass die durchschnittliche Abweichung der vom Modell vorhergesagten Immobilienpreise von den tatsächlichen Preisen etwa 283.713 Dollar beträgt. Bei einem durchschnittlichen Immobilienpreis von ca. 1 Millionen Dollar wird der hohe RMSE-Wert etwas relativiert.
Fazit
In der Realität wäre man mit den Ergebnissen nicht zufrieden. Die erste Überlegung zur Verbesserung des Modells wäre sicherlich einen größeren Datensatz zu verwenden. Außerdem gibt es noch weitere Eigenschaften, die den Wert einer Immobilie bestimmen, wie z.B. die Lage und das Baujahr. Sie könnten also mehrere Attribute (Spalten) in Ihr Modell einfügen, um die Realität besser abzubilden. Oder Sie probieren gleich ein anderes Modell aus. Um jedoch einen ersten Einblick in das weite Feld der Data Science und des maschinellen Lernens zu bekommen, reicht ein einfacher Algorithmus wie die lineare Regression aus. Sie lässt sich grafisch darstellen und ihre Funktionsweise ist leicht zu verstehen.