[PYTHON] Kaggle ~ Prévision de prix à domicile ~

introduction

Dans l'étape suivante du Titanic, j'ai essayé de prédire le prix de l'immobilier, qui est une introduction au kaggle. Le Titanic avait pas mal d'articles, mais les prix des maisons étaient bas, je les posterai donc. Comme je suis débutant, le score est faible, alors j'apprécierais que vous me donniez quelques conseils.

Le prétraitement des données a été effectué en référence à cet article. "Prétraitement des données" - Tutoriel populaire Kaggle

Construire un modèle

Cette fois, puisqu'il s'agit d'une analyse de régression, je vais essayer la régression linéaire, la régression Lasso et la régression Ridge.

#Préparer les données d'entraînement
X_train = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
y_train = df_train['SalePrice']

#Données d'entraînement séparées par les données de test
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)

__ Construire un modèle __

#Régression linéaire
#Module d'importation
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge

#Régression linéaire
lr = LinearRegression()
lr.fit(train_X, train_y)
print("Régression linéaire:{}".format(lr.score(test_X, test_y)))

#Retour au lasso
lasso = Lasso()
lasso.fit(train_X, train_y)
print("Retour au lasso:{}".format(lasso.score(test_X, test_y)))

#Retour de crête
ridge = Ridge()
ridge.fit(train_X, train_y)
print("Retour de crête:{}".format(ridge.score(test_X, test_y)))

Le résultat est le suivant Régression linéaire: 0,8320945695605152 __ Retour Lasso: 0.5197737962239536__ __ Ridge Return: 0.8324316647361567__

Prétraitement des données de test

Lire les données

#Lire les données de test
df_test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')

production


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

__ Vérifiez les valeurs manquantes __

#Vérifiez les valeurs manquantes
df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']].isnull().sum()

production

OverallQual    0
YearBuilt      0
TotalBsmtSF    1
GrLivArea      0
dtype: int64

Il manque une valeur dans TotalBsmtSF (zone souterraine). Cette fois, la valeur moyenne est utilisée pour compléter le défaut.

#Compléter les valeurs manquantes
df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(df_test['TotalBsmtSF'].mean())

__ Effectuer le prétraitement restant __

#Extraire l'ID
df_test_index = df_test['Id']

#Conversion de journal
df_test['GrLivArea'] = np.log(df_test['GrLivArea'])
#Convertir des variables catégorielles
df_test = pd.get_dummies(df_test)
#Entrez une valeur pour la valeur manquante
df_test[df_test['TotalBsmtSF'].isnull()] 

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

Ajuster le modèle

__Régression linéaire __

#Régression linéaire
#Valeur prédite
pred_y = lr.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_lr.csv', index=False)

__ Retour au lasso __

#Retour au lasso
#Valeur prédite
pred_y = lasso.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_lasso.csv', index=False)

__ Ridge Return __

#Retour de crête
#Valeur prédite
pred_y = ridge.predict(X_test)
#Créer un bloc de données
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
#Sortie vers un fichier CSV
submission.to_csv('submission_ridge.csv', index=False)

Au Ridge Return Le résultat est 0,16450 (le plus bas est le meilleur)

Alors, comment améliorez-vous votre score?

La prochaine fois, j'essaierai un autre tutoriel.

Recommended Posts

Kaggle ~ Prévision de prix à domicile ~
Kaggle ~ Prévision de prix de l'immobilier ② ~
Prévision du cours de l'action 2 Chapitre 2
Prévision de la fluctuation des prix de la monnaie virtuelle
Prévision du cours de l'action 1 Chapitre 1
Prix Kaggle House ③ ~ Prévisions / Soumission ~
Prévision du cours de l'action avec tensorflow
Python: prévision du cours de l'action, partie 2
Python: prévision du cours de l'action partie 1
[Python] Mes prévisions de cours de bourse [HFT]
Prévision du cours des actions à l'aide de l'apprentissage automatique (scikit-learn)
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)