[PYTHON] Kaggle ~ Home Preisprognose ~

Einführung

Im nächsten Schritt der Titanic habe ich versucht, den Hauspreis vorherzusagen, was eine Einführung in Kaggle ist. Die Titanic hatte einige Artikel, aber die Immobilienpreise waren niedrig, also werde ich sie veröffentlichen. Da ich ein Anfänger bin, war die Punktzahl niedrig, daher würde ich mich freuen, wenn Sie mir einen Rat geben könnten.

Die Datenvorverarbeitung wurde unter Bezugnahme auf diesen Artikel durchgeführt. "Data Preprocessing" -Kaggle Popular Tutorial

Ein Modell bauen

Da es sich diesmal um eine Regressionsanalyse handelt, werde ich die lineare Regression, die Lasso-Regression und die Ridge-Regression ausprobieren.

#Trainingsdaten vorbereiten
X_train = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
y_train = df_train['SalePrice']

#Trainingsdaten Nach Testdaten trennen
from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(
    X_train, y_train, random_state=42)

__ Modell bauen __

#Lineare Regression
#Modul importieren
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge

#Lineare Regression
lr = LinearRegression()
lr.fit(train_X, train_y)
print("Lineare Regression:{}".format(lr.score(test_X, test_y)))

#Lasso kehrt zurück
lasso = Lasso()
lasso.fit(train_X, train_y)
print("Lasso kehrt zurück:{}".format(lasso.score(test_X, test_y)))

#Ridge kehrt zurück
ridge = Ridge()
ridge.fit(train_X, train_y)
print("Ridge kehrt zurück:{}".format(ridge.score(test_X, test_y)))

Das Ergebnis ist wie folgt Lineare Regression: 0.8320945695605152 __ Lasso Return: 0.5197737962239536__ __ Ridge Return: 0.8324316647361567__

Vorverarbeitung von Testdaten

Daten lesen

#Testdaten lesen
df_test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')

Ausgabe


Id	MSSubClass	MSZoning	LotFrontage	LotArea	Street	Alley	LotShape	LandContour	Utilities	...	ScreenPorch	PoolArea	PoolQC	Fence	MiscFeature	MiscVal	MoSold	YrSold	SaleType	SaleCondition
0	1461	20	RH	80.0	11622	Pave	NaN	Reg	Lvl	AllPub	...	120	0	NaN	MnPrv	NaN	0	6	2010	WD	Normal
1	1462	20	RL	81.0	14267	Pave	NaN	IR1	Lvl	AllPub	...	0	0	NaN	NaN	Gar2	12500	6	2010	WD	Normal
2	1463	60	RL	74.0	13830	Pave	NaN	IR1	Lvl	AllPub	...	0	0	NaN	MnPrv	NaN	0	3	2010	WD	Normal
3	1464	60	RL	78.0	9978	Pave	NaN	IR1	Lvl	AllPub	...	0	0	NaN	NaN	NaN	0	6	2010	WD	Normal
4	1465	120	RL	43.0	5005	Pave	NaN	IR1	HLS	AllPub	...	144	0	NaN	NaN	NaN	0	1	2010	WD	Normal
5 rows × 80 columns

__ Auf fehlende Werte prüfen __

#Überprüfen Sie, ob Werte fehlen
df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']].isnull().sum()

Ausgabe

OverallQual    0
YearBuilt      0
TotalBsmtSF    1
GrLivArea      0
dtype: int64

In TotalBsmtSF (unterirdischer Bereich) fehlt ein Wert. Diesmal wird der Mittelwert zur Ergänzung des Defekts herangezogen.

#Ergänzen Sie fehlende Werte
df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(df_test['TotalBsmtSF'].mean())

__ Führen Sie die verbleibende Vorverarbeitung durch __

#ID extrahieren
df_test_index = df_test['Id']

#Protokollkonvertierung
df_test['GrLivArea'] = np.log(df_test['GrLivArea'])
#Konvertieren Sie kategoriale Variablen
df_test = pd.get_dummies(df_test)
#Geben Sie einen Wert für den fehlenden Wert ein
df_test[df_test['TotalBsmtSF'].isnull()] 

X_test = df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]

Modell montieren

__Lineare Regression __

#Lineare Regression
#Voraussichtlicher Wert
pred_y = lr.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_lr.csv', index=False)

__ Lasso Return __

#Lasso kehrt zurück
#Voraussichtlicher Wert
pred_y = lasso.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_lasso.csv', index=False)

__ Ridge Return __

#Ridge kehrt zurück
#Voraussichtlicher Wert
pred_y = ridge.predict(X_test)
#Erstellen eines Datenrahmens
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Ausgabe in CSV-Datei
submission.to_csv('submission_ridge.csv', index=False)

Bei Ridge Return Das Ergebnis ist 0,16450 (niedriger ist besser)

Wie verbessern Sie Ihre Punktzahl?

Nächstes Mal werde ich ein anderes Tutorial versuchen.

Recommended Posts

Kaggle ~ Home Preisprognose ~
Kaggle ~ Home Preisprognose ② ~
Aktienkursprognose 2 Kapitel 2
Preisschwankungsprognose für virtuelle Währungen
Aktienkursprognose 1 Kapitel 1
Kaggle House Preise ③ ~ Prognose / Einreichung ~
Aktienkursprognose mit Tensorflow
Python: Aktienkursprognose Teil 2
Python: Aktienkursprognose Teil 1
[Python] Meine Aktienkursprognose [HFT]
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
Aktienkursprognose mit Deep Learning (TensorFlow)
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Aktienkursprognose mit maschinellem Lernen (Return Edition)