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.
41 Datensätze (souba.csv) über Studio-Apartments in einem bestimmten Gebiet
id: Eigenschafts-ID Miete: Miete (Yen) Fläche: Fläche (m2m2) Alter: Alter (Jahre) Minuten: Bahnhof zu Fuß (Minuten)
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
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)
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)
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.
【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.
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