Prévision du prix de l’immobilier aux États-Unis

Prevision Du Prix De L Immobilier Aux Etats Unis



Construire une maison est l’un des défis de notre vie. Avant la construction, il est possible d’estimer le prix de votre maison en fonction du prix de la maison précédente. Les facteurs qui affectent principalement le prix de l'immobilier comprennent le nombre total de pièces (lit, salle de bain, etc.) et la superficie du terrain. Grâce à cela, nous pouvons estimer le budget nécessaire à la construction de la maison.

Dans ce guide, nous verrons comment prédire le prix des maisons américaines en utilisant le Machine Learning via Python. Tout d’abord, nous discutons de l’ensemble de données que nous utilisons, puis prétraitons les données. Après cela, nous visualisons les attributs présents dans l'ensemble de données et appliquons différents algorithmes d'apprentissage automatique sur l'ensemble de données de formation (Seattle, Washington, août 2022 – décembre 2022). Enfin, nous terminons ce guide en prédisant le prix de certaines maisons présentes dans l'ensemble de données Test. Avant de mettre en œuvre ce projet, nous devons comprendre les terminologies de Machine Learning utilisées dans ce projet.







Régression

En Machine Learning, si vous travaillez avec des données numériques, vous devez comprendre la régression. La régression est une technique d'apprentissage supervisé en apprentissage automatique qui est utilisée pour comprendre la relation entre les attributs indépendants et les attributs dépendants (étiquette/cible de classe). La machine prédit le prix de l'immobilier en apprenant chaque enregistrement présent dans l'ensemble de données. Il s’agit donc d’un apprentissage supervisé.



Par exemple, dans notre scénario, les attributs indépendants sont le nombre de lits, le nombre de bains, la taille du terrain, le code postal, etc. Sur cette base, nous sommes en mesure de prédire le prix de notre maison. Ce sont donc des attributs indépendants qui ne dépendent de rien. Le prix est l'attribut cible ou l'étiquette de classe qui dépend de ces attributs.



1. Régression linéaire

L'algorithme de régression linéaire montre une relation linéaire entre les variables d'attribut dépendant (Y) et d'attribut indépendant (X). Mathématiquement, nous pouvons l'évaluer comme suit :





ET = aX+b

Ici, « a » et « b » sont des coefficients linéaires.

En Python, LinearRegression() est disponible dans le module « sklearn.linear_model ». Nous verrons comment préciser cela lors de la mise en œuvre du projet. Voici le modèle avec paramètres :



2. Arbre de décision

Fondamentalement, un arbre de décision est une représentation graphique permettant d'obtenir toutes les solutions possibles à un problème en fonction des conditions fournies à l'aide des nœuds. Le nœud Décision est utilisé pour prendre la décision et le nœud Feuille fait référence au résultat d'une décision spécifique. Nous pouvons prédire le prix de notre maison avec le Decision Tree Regressor.

En Python, le DecisionTreeRegressor est disponible dans le module « sklearn.tree ». Nous verrons comment préciser cela lors de la mise en œuvre du projet. Voici le modèle avec paramètres :

3. Forêt aléatoire

Random Forest exécute la même fonctionnalité qui est similaire à un arbre de décision. Mais il faut une forêt (collection d'arbres de décision) et combiner (valeur moyenne) toutes les sorties des arbres de décision. Par exemple, la taille de la forêt aléatoire est de 3. Ainsi, en interne, trois arbres de décision sont créés et le résultat du prix de l'immobilier du premier arbre de décision est de 20 000. Le résultat du prix de l'immobilier du deuxième arbre de décision est de 20 000. Et le résultat du prix de l'immobilier de le dernier arbre de décision est 10 000. 16 666,666 est le résultat final ((20 000+20 000+10 000)/3).

En Python, RandomForestRegressor est disponible dans le module « sklearn.ensemble ». Voici le modèle avec paramètres. On peut préciser le nombre d'arbres dans le paramètre « n_estimators ». Il est de 100 par défaut.

Mise en œuvre

Découvrez rapidement les étapes à suivre pour prédire le prix de l’immobilier aux États-Unis. Nous considérons l'ensemble de données maisons_train (fichier CSV) avec les enregistrements de 2016 (utilisés pour entraîner le modèle d'apprentissage automatique). Ensuite, nous prédisons les enregistrements de prix de la maison (505) présents dans le fichier house_test.

1. Chargement des ensembles de données d'entraînement et de test

Pandas est le module disponible en Python utilisé pour l'analyse des données. Nous utilisons ce module pour charger les ensembles de données dans l'environnement Python. Ici, nous utilisons le Google Co. comme l'environnement du code. Ceci est disponible gratuitement. Un simple compte Google est nécessaire.

Tout d’abord, nous devons charger les fichiers de notre PC local vers Colab Env. Téléchargez les ensembles de données depuis ici .

# Téléchargez les fichiers house_train.csv et house_test.csv dans votre Google Colab

# l'un après l'autre.

depuis Google. ET AL importer des dossiers

des dossiers. télécharger ( )

read_csv() est la fonction utilisée pour charger les données CSV dans une variable. Il prend le nom du fichier comme paramètre.

importer pandas

# Chargez le house_train.csv dans la variable train_data

données_train = des pandas. lire_csv ( 'maisons_train.csv' )

# Chargez le house_test.csv dans la variable test_data

données de test = des pandas. lire_csv ( 'house_test.csv' )

# Stockez les test_data dans la variable test_data1

test_data1 = données de test

Examinons les colonnes et le nombre d'enregistrements non nuls dans chaque colonne. Pandas.DataFrame.info() est utilisé pour obtenir ces informations.

imprimer ( train_data. Info ( ) )

imprimer ( test_data1. Info ( ) )

Sortir:

2. Prétraitement des données

Dans les deux ensembles de données, la colonne « lot_size » contient les valeurs avec sqft et acre (vous trouverez la variance en voyant les lignes dans la colonne « lot_size_unit »). Mais le format doit être en pieds carrés. Nous devons donc convertir les valeurs de la colonne « lot_size » d’acre en pieds carrés. De même, cela doit être fait pour le « test_data1 ».

Le DataFrame.loc[] est utilisé ici pour trouver les « lot_size_units » avec « acre » et multiplier la valeur présente dans « lot_size » par 43560.

# Convertissez les valeurs lot_size acre en pieds carrés dans train_data

train_data. lieu [ ( données_train [ 'lot_size_units' ] == 'acre' ) , 'la taille du lot' ] = données_train [ 'la taille du lot' ] * 43560

# Convertissez les valeurs lot_size acre en pieds carrés dans test_data1

test_data1. lieu [ ( test_data1 [ 'lot_size_units' ] == 'acre' ) , 'la taille du lot' ] = test_data1 [ 'la taille du lot' ] * 43560

imprimer ( train_data. tête ( ) )

imprimer ( test_data1. tête ( ) )

Sortir:

Maintenant, vous verrez que toutes les valeurs de la colonne « lot_size » sont des valeurs sqft.

Vous voyez des valeurs manquantes dans cette colonne. Remplaçons les valeurs NaN présentes dans les colonnes par la moyenne de la même colonne dans les deux ensembles de données.

Le DataFrame['column_name'].fillna() est utilisé pour remplir les valeurs manquantes avec la moyenne à l'aide de la fonction Mean(). Le DataFrame['column_name'].mean() est passé en paramètre à la fonction finna(). Affichons la moyenne et voyons le décompte maintenant :

# Remplissez les valeurs manquantes présentes dans la colonne lot_size avec la moyenne des valeurs existantes

données_train [ 'la taille du lot' ] = données_train [ 'la taille du lot' ] . sentir ( données_train [ 'la taille du lot' ] . signifier ( ) )

# Afficher la moyenne

imprimer ( « Valeur moyenne des données du train : » , données_train [ 'la taille du lot' ] . signifier ( ) )

imprimer ( seulement ( données_train [ 'la taille du lot' ] ) )

# Remplissez les valeurs manquantes présentes dans la colonne lot_size avec la moyenne des valeurs existantes

test_data1 [ 'la taille du lot' ] = test_data1 [ 'la taille du lot' ] . sentir ( test_data1 [ 'la taille du lot' ] . signifier ( ) )

# Afficher la moyenne

imprimer ( « Valeur moyenne des données de test : » , test_data1 [ 'la taille du lot' ] . signifier ( ) )

imprimer ( seulement ( test_data1 [ 'la taille du lot' ] ) )

Sortir:

Les valeurs manquantes présentes dans la colonne « lot_size » Train Dataset sont remplacées par la valeur moyenne de 18789,95194 et les valeurs manquantes présentes dans la colonne « lot_size » Test Dataset sont remplacées par la valeur moyenne de 8961,0.

3. Nettoyage des données

Lors de la formation du modèle, certains attributs inutiles ne sont pas requis pour prédire le résultat. Dans notre cas, il y a trois attributs qui sont « lot_size_units », « zip_code » et « size_units » à supprimer des deux ensembles de données. Le pandas.DataFrame.drop() est utilisé pour supprimer ces trois colonnes des deux ensembles de données.

données_train = train_data. baisse ( [ 'lot_size_units' , 'code postal' , 'taille_unités' ] , axe = 1 )

test_data1 = test_data1. baisse ( [ 'lot_size_units' , 'code postal' , 'taille_unités' ] , axe = 1 )

imprimer ( train_data. Info ( ) )

imprimer ( test_data1. Info ( ) )

Sortir:

Désormais, les ensembles de données sont en bon état. Les colonnes inutiles sont supprimées et les valeurs manquantes n'existent pas.

4. Visualisation des données

Créons un histogramme pour les colonnes des données Train. La fonction pandas.DataFrame.hist() est utilisée pour générer des histogrammes pour tous les attributs.

train_data. histoire ( taille de figue = ( 4 , 9 ) )

Sortir:

L'histogramme est généré pour les colonnes lits, bains, taille, lot_size et prix pour les données Train.

Créons la corrélation pour tous les champs les uns par rapport aux autres. Le module Plotly.express est utilisé pour tracer les valeurs corrélées.

importer complot. exprimer

corr = train_data. corr ( )

# Tracez les données corrélées

vue_fig = complot. exprimer . je montre ( corr , texte_auto = Vrai )

# Afficher

vue_fig. montrer ( )

Sortir:

  1. Les lits sont corrélés à 0,2935 au prix, à -0,059 à la taille du lot, à 0,77 à la taille et à 0,65 aux bains.
  2. Les bains sont corrélés à 0,3173 au prix, à -0,054 corrélés à la taille du lot, à 0,667 corrélés aux bains et à 0,771 corrélés aux lits.
  3. La taille est corrélée à 0,444 avec le prix, -0,044 corrélée à la taille du lot, 0,667 corrélée à la taille et 0,652 corrélée aux lits.

5. Préparation du modèle

Nous devons définir le prix comme objectif en le supprimant de train_data. Assurez-vous que les attributs présents dans les données Train et Test doivent être les mêmes dans cette phase.

cible = données_train [ 'prix' ]

données_train = train_data. baisse ( [ 'prix' ] , axe = 1 )

imprimer ( train_data. Info ( ) )

imprimer ( test_data1. Info ( ) )

Sortir:

Désormais, il existe quatre attributs indépendants (lits, bains, taille et lot_size) et le prix est l'attribut dépendant qui dépend de ces quatre attributs.

6. Formation du modèle

Tout d’abord, nous appliquons l’algorithme RandomForestRegressor. Importez-le depuis le package « sklearn.ensemble ». C'est une technique d'assemblage.

  1. Créez un modèle à partir de RandomForestRegressor(). Nous ne transmettons aucun paramètre à ce modèle. Ainsi, le nombre d’arbres de décision est de 100 par défaut.
  2. Utilisez la méthode fit() pour ajuster le modèle. Cela prend deux paramètres. Le premier paramètre correspond aux attributs dépendants et le deuxième paramètre est l’étiquette/cible de la classe.
  3. Utilisez la méthode score() pour voir la précision du modèle. Il prend également les mêmes paramètres similaires à la méthode fit().
depuis appris ensemble importer RandomForestRegressor

# Définir le modèle

modèle1 = RandomForestRegressor ( )

# Ajuster le modèle

modèle1. ajuster ( données_train , cible )

# Précision du modèle

imprimer ( modèle1. score ( données_train , cible ) * 100 )

Sortir:

86.08400889419033

7. Testez le modèle et stockez les résultats

C'est la dernière étape où nous devons prédire les résultats et les stocker.

  1. La méthode prédire() est utilisée pour prédire les données de test. Il est utilisé avec le modèle et prend la liste de valeurs imbriquée/DataFrame.
  2. Utilisez la méthode to_csv() pour stocker les résultats dans le fichier CSV.
  3. Téléchargez le fichier depuis l'environnement Python (Google Colab).
# Prédisez le test_data1 avec le model1.

données de test [ 'Prix' ] = modèle1. prédire ( test_data1 )

# Enregistrez les test_data dans test_results.csv

données de test. vers_csv ( 'test_results.csv' )

# Téléchargez ce fichier depuis le Colab

des dossiers. télécharger ( 'test_results.csv' )

Sortir:

Montrons 20 enregistrements sur 505 enregistrements. Vous pouvez voir que la colonne Prix contient les valeurs prévues pour chaque maison.

Autres modèles

Prédisons les maisons à l'aide du DecisionTreeRegressor. Vous pouvez l'importer depuis le module « sklearn.tree ».

depuis appris arbre importer DécisionTreeRegressor

# Définir le modèle

modèle2 = DécisionTreeRegressor ( )

# Ajuster le modèle

modèle2. ajuster ( données_train , cible )

# Précision du modèle

imprimer ( modèle2. score ( données_train , cible ) * 100 )

# Prédisez le test_data1 avec le model1.

données de test [ 'Prix' ] = modèle2. prédire ( test_data1 )

# Enregistrez les test_data dans test_results.csv

données de test. vers_csv ( 'test_results.csv' )

# Téléchargez ce fichier depuis le Colab

des dossiers. télécharger ( 'test_results.csv' )

Sortir:

99.94183165335028

Vous pouvez voir le résultat prévu ici :

Prédisons les maisons en utilisant LinearrEgression. Importez le modèle depuis le module « sklearn.linear_model ».

depuis appris modèle_linéaire importer Régression linéaire

# Définir le modèle

modèle3 = Régression linéaire ( )

# Ajuster le modèle

modèle3. ajuster ( données_train , cible )

# Prédisez le test_data1 avec le model1.

données de test [ 'Prix' ] = modèle3. prédire ( test_data1 )

# Enregistrez les test_data dans test_results.csv

données de test. vers_csv ( 'test_results.csv' )

# Téléchargez ce fichier depuis le Colab

des dossiers. télécharger ( 'test_results.csv' )

Vous pouvez voir le résultat prévu ici :

Conclusion

Désormais, vous êtes en mesure de prédire le prix de votre maison en fonction d'attributs tels que le nombre de pièces, la superficie de votre terrain, etc. Dans ce guide, nous avons examiné les données réelles de la maison de Seattle, Washington. En utilisant des techniques de régression telles que la régression linéaire, l'arbre de décision et la forêt aléatoire, nous avons prédit le prix de 505 maisons. Toutes les étapes (prétraitement des données, nettoyage des données et visualisation des données) qui doivent être effectuées avant la formation du modèle sont expliquées étape par étape avec des extraits de code et des sorties.