US-Immobilienpreisvorhersage

Us Immobilienpreisvorhersage



Der Bau eines Hauses ist einer der herausfordernden Faktoren in unserem Leben. Vor dem Bau ist es möglich, den Preis Ihres Hauses anhand des Preises des vorherigen Hauses abzuschätzen. Zu den Faktoren, die den Hauspreis maßgeblich beeinflussen, gehören die Gesamtzahl der Zimmer (Bett, Bad usw.) und die Grundstücksfläche. Dadurch können wir das benötigte Budget für den Bau des Hauses abschätzen.

In diesem Leitfaden erfahren Sie, wie Sie den Preis von US-Häusern mithilfe von maschinellem Lernen mithilfe von Python vorhersagen können. Zuerst besprechen wir den von uns verwendeten Datensatz und verarbeiten die Daten dann vor. Anschließend visualisieren wir die im Datensatz vorhandenen Attribute und wenden verschiedene Algorithmen für maschinelles Lernen auf den Trainingsdatensatz an (Seattle, Washington, August 2022 – Dezember 2022). Abschließend beenden wir diesen Leitfaden mit der Vorhersage des Preises einiger Häuser, die im Testdatensatz vorhanden sind. Bevor wir mit der Umsetzung dieses Projekts beginnen, müssen wir die in diesem Projekt verwendeten Terminologien für maschinelles Lernen verstehen.







Rückschritt

Wenn Sie beim maschinellen Lernen mit numerischen Daten arbeiten, müssen Sie die Regression verstehen. Regression ist eine überwachte Lerntechnik im maschinellen Lernen, die verwendet wird, um die Beziehung zwischen unabhängigen Attributen und abhängigen Attributen (Klassenbezeichnung/Ziel) zu verstehen. Die Maschine sagt den Hauspreis voraus, indem sie jeden im Datensatz vorhandenen Datensatz lernt. Es handelt sich also um ein überwachtes Lernen.



In unserem Szenario sind die unabhängigen Attribute beispielsweise die Anzahl der Betten, die Anzahl der Bäder, die Größe des Grundstücks, die Postleitzahl usw. Auf dieser Grundlage können wir den Preis unseres Hauses vorhersagen. Das sind also die unabhängigen Attribute, die von nichts abhängen. Der Preis ist das Zielattribut oder die Klassenbezeichnung, die von diesen Attributen abhängt.



1. Lineare Regression

Der lineare Regressionsalgorithmus zeigt eine lineare Beziehung zwischen den abhängigen Attributvariablen (Y) und den unabhängigen Attributvariablen (X). Mathematisch können wir es wie folgt auswerten:





UND = aX+b

Hier sind „a“ und „b“ lineare Koeffizienten.

In Python ist LinearRegression() im Modul „sklearn.linear_model“ verfügbar. Wir werden sehen, wie wir dies bei der Umsetzung des Projekts festlegen können. Das Folgende ist das Modell mit Parametern:



2. Entscheidungsbaum

Im Grunde ist ein Entscheidungsbaum eine grafische Darstellung, um alle möglichen Lösungen für ein Problem basierend auf den durch die Knoten bereitgestellten Bedingungen zu erhalten. Der Entscheidungsknoten wird verwendet, um die Entscheidung zu treffen, und der Blattknoten bezieht sich auf die Ausgabe einer bestimmten Entscheidung. Mit dem Decision Tree Regressor können wir den Preis unseres Hauses vorhersagen.

In Python ist der DecisionTreeRegressor im Modul „sklearn.tree“ verfügbar. Wir werden sehen, wie wir dies bei der Umsetzung des Projekts festlegen können. Das Folgende ist das Modell mit Parametern:

3. Zufälliger Wald

Random Forest führt die gleiche Funktionalität aus, die einem Entscheidungsbaum ähnelt. Aber es braucht einen Wald (Sammlung von Entscheidungsbäumen) und kombiniert (Mittelwert) alle Ausgaben der Entscheidungsbäume. Die Random Forest-Größe beträgt beispielsweise 3. Intern werden also drei Entscheidungsbäume erstellt und das Hauspreisergebnis des ersten Entscheidungsbaums beträgt 20.000. Das Hauspreisergebnis des zweiten Entscheidungsbaums beträgt 20.000. Und das Hauspreisergebnis von Der letzte Entscheidungsbaum ist 10000. 16.666,666 ist das Endergebnis ((20000+20000+10000)/3).

In Python ist RandomForestRegressor im Modul „sklearn.ensemble“ verfügbar. Das Folgende ist das Modell mit Parametern. Die Anzahl der Bäume können wir im Parameter „n_estimators“ angeben. Der Standardwert ist 100.

Implementierung

Sehen Sie sich schnell die Schritte an, die zur Vorhersage des US-Hauspreises erforderlich sind. Wir betrachten den Datensatz „houses_train“ (CSV-Datei) mit Datensätzen aus dem Jahr 2016 (der zum Trainieren des Modells für maschinelles Lernen verwendet wird). Anschließend sagen wir die Datensätze zum Hauspreis (505) voraus, die in der Datei „house_test“ vorhanden sind.

1. Laden der Trainings- und Testdatensätze

Pandas ist das verfügbare Modul in Python, das für die Datenanalyse verwendet wird. Wir verwenden dieses Modul, um die Datensätze in die Python-Umgebung zu laden. Hier verwenden wir die Google Co als Code-Umgebung. Dies ist kostenlos erhältlich. Es ist lediglich ein Google-Konto erforderlich.

Zuerst müssen wir die Dateien von unserem lokalen PC in das Colab Env laden. Laden Sie die Datensätze herunter von Hier .

# Laden Sie die Dateien „houses_train.csv“ und „house_test.csv“ in Ihr Google Colab hoch

# einer nach demanderen.

aus Google. ET AL importieren Dateien

Dateien. hochladen ( )

read_csv() ist die Funktion, die zum Laden der CSV-Daten in eine Variable verwendet wird. Als Parameter wird der Dateiname verwendet.

importieren Pandas

# Laden Sie die Datei „houses_train.csv“ in die Variable „train_data“.

train_data = Pandas. read_csv ( 'houses_train.csv' )

# Laden Sie die Datei house_test.csv in die Variable test_data

Testdaten = Pandas. read_csv ( 'house_test.csv' )

# Speichern Sie die test_data in der Variablen test_data1

test_data1 = Testdaten

Sehen wir uns die Spalten und die Anzahl der Nicht-Null-Datensätze in jeder Spalte an. Um diese Informationen abzurufen, wird Pandas.DataFrame.info() verwendet.

drucken ( train_data. die Info ( ) )

drucken ( test_data1. die Info ( ) )

Ausgabe:

2. Datenvorverarbeitung

In beiden Datensätzen enthält die Spalte „lot_size“ die Werte mit sqft und acre (Sie finden die Abweichung, indem Sie sich die Zeilen in der Spalte „lot_size_unit’s“ ansehen). Das Format sollte jedoch in Quadratfuß angegeben sein. Daher müssen wir die Werte in der Spalte „lot_size“ von Acre in sqft umrechnen. Analog ist dies auch für „test_data1“ durchzuführen.

Der DataFrame.loc[] wird hier verwendet, um „lot_size_units“ mit „acre“ zu finden und den in „lot_size“ vorhandenen Wert mit 43560 zu multiplizieren.

# Konvertieren Sie die Werte von „lot_size acre“ in „Quadratfuß“ in train_data

train_data. Ort [ ( train_data [ „lot_size_units“ ] == 'Acre' ) , „lot_size“ ] = train_data [ „lot_size“ ] * 43560

# Konvertieren Sie die Werte für „lot_size acre“ in „Quadratfuß“ in test_data1

test_data1. Ort [ ( test_data1 [ „lot_size_units“ ] == 'Acre' ) , „lot_size“ ] = test_data1 [ „lot_size“ ] * 43560

drucken ( train_data. Kopf ( ) )

drucken ( test_data1. Kopf ( ) )

Ausgabe:

Jetzt sehen Sie, dass alle Werte in der Spalte „lot_size“ Quadratfußwerte sind.

In dieser Spalte werden einige fehlende Werte angezeigt. Ersetzen wir die in den Spalten vorhandenen NaN-Werte durch den Mittelwert derselben Spalte in beiden Datensätzen.

Der DataFrame[‘column_name’].fillna() wird verwendet, um die fehlenden Werte mithilfe der Funktion „mean()“ mit dem Mittelwert zu füllen. Der DataFrame[‘column_name’].mean() wird als Parameter an die finna()-Funktion übergeben. Lassen Sie uns jetzt den Mittelwert anzeigen und die Anzahl sehen:

# Füllen Sie die fehlenden Werte in der Spalte „lot_size“ mit dem Mittelwert der vorhandenen Werte aus

train_data [ 'lot_size' ] = train_data [ 'lot_size' ] . fühlen ( train_data [ 'lot_size' ] . bedeuten ( ) )

# Mittelwert anzeigen

drucken ( „Zugdaten Mittelwert:“ , train_data [ 'lot_size' ] . bedeuten ( ) )

drucken ( nur ( train_data [ 'lot_size' ] ) )

# Füllen Sie die fehlenden Werte in der Spalte „lot_size“ mit dem Mittelwert der vorhandenen Werte aus

test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . fühlen ( test_data1 [ 'lot_size' ] . bedeuten ( ) )

# Mittelwert anzeigen

drucken ( „Testdaten Mittelwert:“ , test_data1 [ 'lot_size' ] . bedeuten ( ) )

drucken ( nur ( test_data1 [ 'lot_size' ] ) )

Ausgabe:

Die fehlenden Werte, die in der Spalte „lot_size“ des Zugdatensatzes vorhanden sind, werden durch den Mittelwert von 18789,95194 ersetzt und die fehlenden Werte, die in der Spalte „lot_size“ des Testdatensatzes vorhanden sind, werden durch den Mittelwert von 8961,0 ersetzt

3. Datenbereinigung

Beim Training des Modells gibt es einige unnötige Attribute, die zur Vorhersage des Ergebnisses nicht erforderlich sind. In unserem Fall gibt es drei Attribute, nämlich „lot_size_units“, „zip_code“ und „size_units“, die aus beiden Datensätzen entfernt werden müssen. Mit pandas.DataFrame.drop() werden diese drei Spalten aus beiden Datensätzen entfernt.

train_data = train_data. fallen ( [ 'lot_size_units' , 'PLZ' , 'size_units' ] , Achse = 1 )

test_data1 = test_data1. fallen ( [ 'lot_size_units' , 'PLZ' , 'size_units' ] , Achse = 1 )

drucken ( train_data. die Info ( ) )

drucken ( test_data1. die Info ( ) )

Ausgabe:

Jetzt sind die Datensätze in gutem Zustand. Nicht benötigte Spalten werden entfernt und die fehlenden Werte sind nicht vorhanden.

4. Datenvisualisierung

Erstellen wir ein Histogramm für die Spalten der Train-Daten. Die Funktion pandas.DataFrame.hist() wird verwendet, um Histogramme für alle Attribute zu generieren.

train_data. hist ( Feigengröße = ( 4 , 9 ) )

Ausgabe:

Für die Zugdaten wird ein Histogramm für die Spalten Betten, Bäder, Größe, Grundstücksgröße und Preis erstellt.

Lassen Sie uns die Korrelation für alle Felder zueinander erstellen. Das Plotly.express-Modul wird verwendet, um die korrelierten Werte darzustellen.

importieren verschwörerisch. äußern

korr = train_data. korr ( )

# Zeichnen Sie die korrelierten Daten grafisch auf

view_fig = verschwörerisch. äußern . imshow ( korr , text_auto = WAHR )

# Anzeige

view_fig. zeigen ( )

Ausgabe:

  1. Die Betten korrelieren zu 0,2935 mit dem Preis, zu -0,059 mit der Grundstücksgröße, zu 0,77 mit der Größe und zu 0,65 mit den Bädern.
  2. Die Bäder korrelieren zu 0,3173 mit dem Preis, zu -0,054 mit der Grundstücksgröße, zu 0,667 mit den Bädern und zu 0,771 mit den Betten.
  3. Die Größe korreliert mit 0,444 mit dem Preis, mit -0,044 mit der Grundstücksgröße, mit 0,667 mit der Größe und mit 0,652 mit Betten.

5. Modellvorbereitung

Wir müssen den Preis als Ziel festlegen, indem wir ihn aus train_data entfernen. Stellen Sie sicher, dass die in den Trainings- und Testdaten vorhandenen Attribute in dieser Phase identisch sind.

Ziel = train_data [ 'Preis' ]

train_data = train_data. fallen ( [ 'Preis' ] , Achse = 1 )

drucken ( train_data. die Info ( ) )

drucken ( test_data1. die Info ( ) )

Ausgabe:

Nun gibt es vier unabhängige Attribute (Betten, Bäder, Größe und Grundstücksgröße) und der Preis ist das abhängige Attribut, das von diesen vier Attributen abhängt.

6. Trainieren des Modells

Zuerst wenden wir den RandomForestRegressor-Algorithmus an. Importieren Sie es aus dem Paket „sklearn.ensemble“. Es handelt sich um eine Ensembling-Technik.

  1. Erstellen Sie ein Modell aus RandomForestRegressor(). Wir übergeben keine Parameter an dieses Modell. Daher beträgt die Anzahl der Entscheidungsbäume standardmäßig 100.
  2. Verwenden Sie die Methode fit(), um das Modell anzupassen. Es werden zwei Parameter benötigt. Der erste Parameter sind die abhängigen Attribute und der zweite Parameter ist die Klassenbezeichnung/das Klassenziel.
  3. Verwenden Sie die Methode „score()“, um die Modellgenauigkeit anzuzeigen. Es werden auch dieselben Parameter wie bei der fit()-Methode verwendet.
aus gelernt Ensemble importieren RandomForestRegressor

# Definieren Sie das Modell

Modell1 = RandomForestRegressor ( )

# Passen Sie das Modell an

Modell1. fit ( train_data , Ziel )

# Modellgenauigkeit

drucken ( Modell1. Punktzahl ( train_data , Ziel ) * 100 )

Ausgabe:

86.08400889419033

7. Testen Sie das Modell und speichern Sie die Ergebnisse

Dies ist der letzte Schritt, bei dem wir das Ergebnis vorhersagen und speichern müssen.

  1. Die Methode „predict()“ wird verwendet, um die Testdaten vorherzusagen. Es wird mit dem Modell verwendet und übernimmt die verschachtelte Werteliste/DataFrame.
  2. Verwenden Sie die Methode to_csv(), um die Ergebnisse in der CSV-Datei zu speichern.
  3. Laden Sie die Datei aus der Python-Umgebung (Google Colab) herunter.
# Test_data1 mit model1 vorhersagen.

Testdaten [ 'Preis' ] = Modell1. vorhersagen ( test_data1 )

# Speichern Sie die Testdaten in test_results.csv

Testdaten. to_csv ( 'test_results.csv' )

# Laden Sie diese Datei vom Colab herunter

Dateien. herunterladen ( 'test_results.csv' )

Ausgabe:

Lassen Sie uns 20 Datensätze von 505 Datensätzen anzeigen. Sie können sehen, dass die Spalte „Preis“ die vorhergesagten Werte für jedes Haus enthält.

Andere Modelle

Lassen Sie uns die Häuser mit dem DecisionTreeRegressor vorhersagen. Sie können es aus dem Modul „sklearn.tree“ importieren.

aus gelernt Baum importieren DecisionTreeRegressor

# Definieren Sie das Modell

Modell2 = DecisionTreeRegressor ( )

# Passen Sie das Modell an

Modell2. fit ( train_data , Ziel )

# Modellgenauigkeit

drucken ( Modell2. Punktzahl ( train_data , Ziel ) * 100 )

# Test_data1 mit model1 vorhersagen.

Testdaten [ 'Preis' ] = Modell2. vorhersagen ( test_data1 )

# Speichern Sie die Testdaten in test_results.csv

Testdaten. to_csv ( 'test_results.csv' )

# Laden Sie diese Datei vom Colab herunter

Dateien. herunterladen ( 'test_results.csv' )

Ausgabe:

99.94183165335028

Das vorhergesagte Ergebnis können Sie hier sehen:

Lassen Sie uns die Häuser mithilfe der LinearrEgression vorhersagen. Importieren Sie das Modell aus dem Modul „sklearn.linear_model“.

aus gelernt lineares_modell importieren Lineare Regression

# Definieren Sie das Modell

Modell3 = Lineare Regression ( )

# Passen Sie das Modell an

Modell3. fit ( train_data , Ziel )

# Test_data1 mit model1 vorhersagen.

Testdaten [ 'Preis' ] = Modell3. vorhersagen ( test_data1 )

# Speichern Sie die Testdaten in test_results.csv

Testdaten. to_csv ( 'test_results.csv' )

# Laden Sie diese Datei vom Colab herunter

Dateien. herunterladen ( 'test_results.csv' )

Das vorhergesagte Ergebnis können Sie hier sehen:

Abschluss

Jetzt können Sie Ihren Hauspreis anhand von Attributen wie der Anzahl der Zimmer, der Fläche Ihres Grundstücks usw. vorhersagen. In diesem Leitfaden haben wir die realen Hausdaten aus Seattle, Washington, berücksichtigt. Mithilfe von Regressionstechniken wie linearer Regression, Entscheidungsbaum und Random Forest haben wir den Preis von 505 Häusern vorhergesagt. Alle Schritte (Datenvorverarbeitung, Datenbereinigung und Datenvisualisierung), die vor dem Training des Modells durchgeführt werden müssen, werden Schritt für Schritt mit Codeausschnitten und Ausgaben erklärt.