Cette fois, nous allons résoudre le problème de prévision du prix de vente. Dans un premier temps, j'aimerais faire une prédiction à partir d'une équation de régression du premier ordre très simple. A l'origine, c'est le vrai plaisir de traiter et d'optimiser un grand nombre de fonctionnalités, mais je voudrais commencer par faire une simple prédiction.
URL de référence https://www.kaggle.com/katotaka/kaggle-prediction-house-prices
La version utilisée est ici.
Python 3.7.6 numpy 1.18.1 pandas 1.0.1 matplotlib 3.1.3 scikit-learn 0.22.1
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
import seaborn as sns
#Paramètres d'affichage en ligne dans Jupyter Notebook (sans cela, le graphique s'ouvrira dans une fenêtre séparée)
%matplotlib inline
J'ai importé des pandas pour le chargement de csv, numpy pour le traitement des nombres, matplotlib et seaborn pour le dessin graphique et sklern.linear_model pour la régression.
df = pd.read_csv("train.csv")
df
Il n'est pas possible de tout afficher en même temps en raison du grand nombre de fonctionnalités, mais de nombreuses conditions de logement (zone, face à la route, avoir une piscine, etc.) sont répertoriées. Il évalue et prédit si ces conditions affectent le prix de vente.
corrmat = df.corr()
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()
Je voudrais trouver une fonctionnalité avec un coefficient de corrélation élevé par rapport au prix du logement. Jetons un coup d'œil à la carte thermique Seaborn. On peut voir que la quantité d'entités avec un coefficient de corrélation élevé avec SalePrice est Global Qual (qualité globale). Il est facile de comprendre que plus la qualité est élevée, plus le prix est élevé.
X = df[["OverallQual"]].values
y = df["SalePrice"].values
slr = LinearRegression()
slr.fit(X,y)
#Création de diagramme de dispersion
plt.scatter(X,y)
plt.xlabel('OverallQual')
plt.ylabel('House Price($)')
#Affichage de la courbe approximative
plt.plot(X, slr.predict(X), color='red')
#affichage graphique
plt.show()
J'ai fait un graphique de la relation entre la qualité globale et le prix de vente. La tendance générale est correcte. Cependant, lorsque la qualité globale est faible, elle est sous-estimée. En outre, on peut voir qu'il existe une grande variation là où la qualité globale est élevée. Je pense que ceux-ci peuvent être prédits plus précisément par d'autres quantités de caractéristiques, mais cette fois, je vais les prédire tels qu'ils sont.
#Lire les données de test
df_test = pd.read_csv('test.csv')
#Définissez la valeur de qualité globale des données de test sur X_Prêt à tester
X_test = df_test[["OverallQual"]].values
y_test_pred = slr.predict(X_test)
df_test[["Id", "SalePrice"]].to_csv("submission.csv", index = False)
Le SCORE envoyé à Kaggle était de 0,84342 (sur 4720 équipes à la 4563e place). Dès le prochain article, j'aimerais l'analyser en détail et faire un bon score.
Recommended Posts