[Python] Prognostizieren Sie die richtige Miete für Wohnungen

Ermittlung der angemessenen Miete für ein Studio-Apartment in einem bestimmten Gebiet Lassen Sie uns ein Modell in Python erstellen, das die Miete mit hoher Genauigkeit aus anderen Variablen vorhersagen kann.

Zu verwendende Daten

41 Datensätze (souba.csv) über Studio-Apartments in einem bestimmten Gebiet

Datensatzinhalt

id: Eigenschafts-ID Miete: Miete (Yen) Fläche: Fläche (m2m2) Alter: Alter (Jahre) Minuten: Bahnhof zu Fuß (Minuten)

Gesamtdurchfluss

  1. Vorbereitung der Daten
  2. Erfassen Sie die Daten von verschiedenen Achsen
  3. Auswahl der Merkmalsmenge und Modellvergleich
  4. Lernen und Bewerten des Modells

Trainieren

1) Vorbereitung der Daten

Importieren und bestätigen Sie zunächst die Daten.

import numpy  as np
import pandas as pd
import seaborn as sns

df = pd.read_csv("souba.csv")
df.head()

	id	rent	area	age	minutes
0	1	4.3	13.00	26	6
1	2	4.2	14.35	35	5
2	3	5.0	15.60	33	9
3	4	4.5	13.09	32	5
4	5	4.6	12.92	38	7

Bedeutungslose Variablen-IDs entfernt, die für die Analyse nicht relevant sind.

data = df.drop(["id"], axis = 1)
data.head()

rent	area	age	minutes
0	4.3	13.00	26	6
1	4.2	14.35	35	5
2	5.0	15.60	33	9
3	4.5	13.09	32	5
4	4.6	12.92	38	7

Teilen Sie die Trainingsdaten und Testdaten um 7: 3 auf.

#Unterteilt in Trainingsdaten und Testdaten
X = data[["area", "age", "minutes"]].values
y = data["rent"].values

from sklearn.model_selection import train_test_split, cross_validate, KFold
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
X_train.shape, X_test.shape

((28, 3), (13, 3))

Erstellen Sie einen Datenrahmen für alle Trainingsdaten und Testdaten.

#Erstellen Sie einen Datenrahmen
data_train = pd.DataFrame(X_train,columns = ["area", "age", "minutes"])
data_train["rent"] = y_train

data_test = pd.DataFrame(X_test,columns = ["area", "age", "minutes"])
data_test["rent"] = y_test

2) Erfassen Sie die Daten von verschiedenen Achsen

Lassen Sie uns zunächst die Trainingsdaten visualisieren. Der Zweck der Visualisierung ist ① Erfassen Sie grob die Beziehung der gesamten Daten ② Ausreißer finden

sns.pairplot(data_train)

image.png

Betrachtet man die Beziehung zwischen Miete und anderen Variablen, ・ Fläche scheint korreliert zu sein ・ Minuten (zu Fuß vom Bahnhof entfernt) sind nicht so stark wie der Bereich, aber es scheint eine schwache Korrelation zu bestehen ・ Alter (Alter) scheint nahe an der inversen Korrelation zu liegen Es kann das gelesen werden.

Es gibt nur einen Ausreißer im Gebiet, schließen Sie ihn also aus.

#Korrespondenz von Ausreißern
data_train = data_train.query("area < 40")
sns.pairplot(data_train)

image.png

Als nächstes berechnen wir den Korrelationskoeffizienten.

data_train.corr()

    area	age	minutes	rent
area	1.000000	-0.148793	0.207465	0.925012
age	-0.148793	1.000000	-0.088959	-0.315480
minutes	0.207465	-0.088959	1.000000	0.154623
rent	0.925012	-0.315480	0.154623	1.000000

Betrachtet man die Korrelation zwischen Miete und jeder Variablen, Fläche hat eine sehr hohe Korrelation, aber Alter hat eine schwache inverse Korrelation und Minuten haben fast keine Korrelation.

Von Oben. Es scheint gut, es als Merkmalsbetrag in der Reihenfolge Bereich> Alter> Minuten zu nehmen.

3) Auswahl der Merkmalsmenge und Modellvergleich

【Punkt】 ・ Stellen Sie sicher, dass Sie ein Modell nur mit Trainingsdaten auswählen.

Lassen Sie uns zunächst ein lineares Regressionsmodell erstellen, wenn die erklärenden Variablen alle Variablen sind. Hier verwenden wir die dreifache Kreuzvalidierung.

X_train = data_train[["area", "age","minutes"]].values
y_train = data_train["rent"].values

LR = LinearRegression()
res_1 = cross_validate(LR, X = X_train, y = y_train, scoring = "r2", cv = KFold(n_splits = 3, shuffle = True), return_train_score = True)
res_1

#Ergebnis
{'fit_time': array([0.        , 0.00254989, 0.00099754]),
 'score_time': array([0.00401378, 0.        , 0.        ]),
 'test_score': array([-0.11587073,  0.67717773,  0.65301948]),
 'train_score': array([0.96132849, 0.66332986, 0.90608152])}

Als nächstes erstellen wir ein lineares Regressionsmodell, das den Stationslauf von den erklärenden Variablen ausschließt.

X_train = data_train[["area", "age"]].values
y_train = data_train["rent"].values

LR = LinearRegression()
res_2 = cross_validate(LR, X = X_train, y = y_train, scoring = "r2", cv = KFold(n_splits = 3, shuffle = True), return_train_score = True)
res_2

#Ergebnis
{'fit_time': array([0.00318336, 0.0009973 , 0.0010891 ]),
 'score_time': array([0.        , 0.00185704, 0.        ]),
 'test_score': array([0.32138226, 0.87606109, 0.83912145]),
 'train_score': array([0.94496232, 0.88506422, 0.80168397])}

Vergleichen jedes test_score, Da das letztere Modell, das den Stationslauf von den erklärenden Variablen ausschließt, einen höheren Bestimmungskoeffizienten aufweist, werden wir diesen als Modell übernehmen.

4) Lernen und Bewerten des Modells

Lernen Sie das Modell mit den Merkmalen wie Fläche und Alter.

X_train = data_train[["area", "age"]].values
y_train = data_train["rent"].values

LR = LinearRegression()
LR.fit(X_train, y_train)

Fügen Sie Testdaten in das erstellte Modell ein und überprüfen Sie die Genauigkeit.

X_test = data_test[["area", "age"]].values
y_test = data_test["rent"].values

y_pred = LR.predict(X_test)
r2_score(y_true = y_test, y_pred = y_pred) 

#Modellbewertung
0.8623439786705054

Infolgedessen betrug der Entscheidungskoeffizient in den Testdaten 0,8 oder mehr. Es scheint ein Modell mit einer gewissen Genauigkeit zu sein.

Recommended Posts

[Python] Prognostizieren Sie die richtige Miete für Wohnungen
Siehe Python zum ersten Mal
Wofür ist der Python-Unterstrich (_)?
Erste Schritte mit Python für Nicht-Ingenieure
Befehl für das aktuelle Verzeichnis Python
Erstellen Sie eine Umgebung für das in Blender integrierte Python
MongoDB mit Python zum ersten Mal
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in Python für C-Sprachprogrammierer
[Hinweis] Die Lösung für die, bei der Python beim Importieren von Hashlib unter MacOSX zu einem Fehler wird
Der schnellste Weg für Anfänger, um Python zu beherrschen
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Erstellt einen Python-Wrapper für die Qiita-API
vprof - Ich habe versucht, den Profiler für Python zu verwenden
[Python] matplotlib: Formatieren Sie das Diagramm für Ihre Dissertation
Erstellen einer Umgebung zum Ausführen von Python-Skripten (für Mac)
Erstellen einer Anaconda-Umgebung für Python mit pyenv
Bachstelze ist das beste CMS für Python! (Vielleicht)
Verwenden Sie vorerst Logger mit Python
Ich habe zum ersten Mal versucht, Python zu programmieren.
Installieren Sie das Python-Paket in einer Offline-Umgebung
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
[Python] Ich habe nach dem längsten Pokemon Shiritori gesucht
Bildverarbeitung? Die Geschichte, Python für zu starten
Holen Sie sich ein Zugriffstoken für die Pocket-API
Code zum Überprüfen des Betriebs von Python Matplot lib
Rufen Sie Polly aus dem AWS SDK für Python auf
Ein Artikel, der die Fallstricke von Python zusammenfasst
2016-10-30 sonst für Python3> für:
Python [für mich]
Holen Sie sich AccessToken für das Dienstkonto mit dem Firebase Admin Python SDK
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
Was ich zum ersten Mal in Python bekommen habe
Machen Sie die Python CUI-Anwendung zu einer App für Mac
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
HoloViews werden möglicherweise zum Standard für Python-Visualisierungstools
Informationen zur Steuerung von Motoren mit Python auf RaspberryPi
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
Electron ist die beste Lösung für die plattformübergreifende Entwicklung von Python
Python-Programm, das nach demselben Dateinamen sucht
Python: Ruft eine Liste der Methoden für ein Objekt ab
Python-Memo (für mich): Über die Entwicklungsumgebung virtualenv
Python (2) erfordert self, da die Methode eine Instanzmethode ist