Πρόβλεψη τιμής κατοικίας στις ΗΠΑ

Problepse Times Katoikias Stis Epa



Η οικοδόμηση ενός σπιτιού είναι ένας από τους δύσκολους παράγοντες στη ζωή μας. Πριν από την κατασκευή, είναι δυνατό να υπολογίσετε την τιμή του σπιτιού σας με βάση την τιμή του προηγούμενου σπιτιού. Οι παράγοντες που επηρεάζουν σε μεγάλο βαθμό την τιμή της κατοικίας περιλαμβάνουν τον συνολικό αριθμό των δωματίων (κρεβάτι, μπάνιο κ.λπ.) και την έκταση του οικοπέδου. Με αυτό, μπορούμε να υπολογίσουμε τον απαιτούμενο προϋπολογισμό για την κατασκευή του σπιτιού.

Σε αυτόν τον οδηγό, θα δούμε πώς να προβλέψουμε την τιμή των σπιτιών στις ΗΠΑ χρησιμοποιώντας τη Μηχανική Μάθηση μέσω Python. Αρχικά, συζητάμε το σύνολο δεδομένων που χρησιμοποιούμε και στη συνέχεια προεπεξεργαζόμαστε τα δεδομένα. Μετά από αυτό, οπτικοποιούμε τα χαρακτηριστικά που υπάρχουν στο σύνολο δεδομένων και εφαρμόζουμε διαφορετικούς αλγόριθμους Machine Learning στο σύνολο δεδομένων εκπαίδευσης (Σιάτλ, Ουάσιγκτον Αύγουστος 2022 – Δεκέμβριος 2022). Τέλος, τελειώνουμε αυτόν τον οδηγό προβλέποντας την τιμή ορισμένων σπιτιών που υπάρχουν στο σύνολο δεδομένων δοκιμής. Πριν προχωρήσουμε στην υλοποίηση αυτού του έργου, πρέπει να κατανοήσουμε τις ορολογίες Machine Learning που χρησιμοποιούνται σε αυτό το έργο.







Οπισθοδρόμηση

Στη Μηχανική Εκμάθηση, εάν εργάζεστε με αριθμητικά δεδομένα, πρέπει να κατανοήσετε την Παλινδρόμηση. Η παλινδρόμηση είναι μια εποπτευόμενη τεχνική μάθησης στη μηχανική μάθηση που χρησιμοποιείται για την κατανόηση της σχέσης μεταξύ ανεξάρτητων χαρακτηριστικών και εξαρτημένων χαρακτηριστικών (ετικέτα τάξης/στόχος). Η μηχανή προβλέπει την τιμή του σπιτιού μαθαίνοντας κάθε εγγραφή που υπάρχει στο σύνολο δεδομένων. Ως εκ τούτου, είναι μια εποπτευόμενη μάθηση.



Για παράδειγμα, στο σενάριό μας, τα ανεξάρτητα χαρακτηριστικά είναι ο αριθμός των κρεβατιών, ο αριθμός των λουτρών, το μέγεθος της γης, ο ταχυδρομικός κώδικας κ.λπ. Με βάση αυτά, μπορούμε να προβλέψουμε την τιμή του σπιτιού μας. Έτσι, αυτά είναι τα ανεξάρτητα χαρακτηριστικά που δεν εξαρτώνται από τίποτα. Η τιμή είναι το χαρακτηριστικό ή η ετικέτα κλάσης στόχου που εξαρτάται από αυτά τα χαρακτηριστικά.



1. Γραμμική παλινδρόμηση

Ο αλγόριθμος Γραμμικής παλινδρόμησης δείχνει μια γραμμική σχέση μεταξύ των μεταβλητών εξαρτώμενης ιδιότητας (Y) και ανεξάρτητου χαρακτηριστικού (X). Μαθηματικά μπορούμε να το αξιολογήσουμε ως εξής:





ΚΑΙ = aX+b

Εδώ, τα 'a' και 'b' είναι Γραμμικοί Συντελεστές.

Στην Python, η LinearRegression() είναι διαθέσιμη στη λειτουργική μονάδα 'sklearn.linear_model'. Θα δούμε πώς να το διευκρινίσουμε κατά την υλοποίηση του έργου. Ακολουθεί το μοντέλο με τις παραμέτρους:



2. Δέντρο απόφασης

Βασικά, ένα δέντρο απόφασης είναι μια γραφική αναπαράσταση για τη λήψη όλων των πιθανών λύσεων σε ένα πρόβλημα με βάση τις συνθήκες που παρέχονται χρησιμοποιώντας τους κόμβους. Ο κόμβος απόφασης χρησιμοποιείται για τη λήψη της απόφασης και ο κόμβος Leaf αναφέρεται στην έξοδο μιας συγκεκριμένης απόφασης. Μπορούμε να προβλέψουμε την τιμή του σπιτιού μας με το Decision Tree Regressor.

Στην Python, το DecisionTreeRegressor είναι διαθέσιμο στη λειτουργική μονάδα 'sklearn.tree'. Θα δούμε πώς να το διευκρινίσουμε κατά την υλοποίηση του έργου. Ακολουθεί το μοντέλο με τις παραμέτρους:

3. Τυχαίο Δάσος

Το Random Forest εκτελεί την ίδια λειτουργία που είναι παρόμοια με ένα Δέντρο Αποφάσεων. Χρειάζεται όμως ένα Forest (συλλογή δέντρων απόφασης) και συνδυάζει (μέση τιμή) όλα τα αποτελέσματα των Δέντρων απόφασης. Για παράδειγμα, το μέγεθος του Τυχαίου Δάσους είναι 3. Έτσι, εσωτερικά, δημιουργούνται τρία δέντρα απόφασης και το αποτέλεσμα της τιμής κατοικίας του πρώτου Δέντρου απόφασης είναι 20000. Το αποτέλεσμα της τιμής σπιτιού του δεύτερου δέντρου απόφασης είναι 20000. Και το αποτέλεσμα της τιμής κατοικίας του το τελευταίο Δέντρο απόφασης είναι 10000. 16.666.666 είναι το τελικό αποτέλεσμα ((20000+20000+10000)/3).

Στην Python, το RandomForestRegressor είναι διαθέσιμο στη λειτουργική μονάδα 'sklearn.ensemble'. Ακολουθεί το μοντέλο με τις παραμέτρους. Μπορούμε να καθορίσουμε τον αριθμό των δέντρων στην παράμετρο 'n_estimators'. Είναι 100 από προεπιλογή.

Εκτέλεση

Δείτε γρήγορα τα βήματα που περιλαμβάνονται στην πρόβλεψη της τιμής του σπιτιού στις ΗΠΑ. Λαμβάνουμε υπόψη το σύνολο δεδομένων houses_train (αρχείο CSV) με εγγραφές 2016 (χρησιμοποιείται για την εκπαίδευση του μοντέλου Machine Learning). Στη συνέχεια, προβλέπουμε τις εγγραφές τιμής του σπιτιού (505) που υπάρχουν στο αρχείο house_test.

1. Φόρτωση των συνόλων δεδομένων αμαξοστοιχίας και δοκιμής

Το Pandas είναι η διαθέσιμη ενότητα στην Python που χρησιμοποιείται για την ανάλυση δεδομένων. Χρησιμοποιούμε αυτήν την ενότητα για να φορτώσουμε τα σύνολα δεδομένων στο περιβάλλον Python. Εδώ, χρησιμοποιούμε το Google Co ως Κώδικας Περιβάλλοντος. Αυτό είναι διαθέσιμο δωρεάν. Απαιτείται απλώς ένας λογαριασμός Google.

Αρχικά, πρέπει να φορτώσουμε τα αρχεία από τον τοπικό μας υπολογιστή στο Colab Env. Κατεβάστε τα σύνολα δεδομένων από εδώ .

# Ανεβάστε αρχεία houses_train.csv και house_test.csv στο Google Colab σας

# το ένα μετά το άλλο.

από google. ET AL εισαγωγή αρχεία

αρχεία. μεταφόρτωση ( )

Η read_csv() είναι η συνάρτηση που χρησιμοποιείται για τη φόρτωση των δεδομένων CSV σε μια μεταβλητή. Παίρνει το όνομα αρχείου ως παράμετρο.

εισαγωγή τα πάντα

# Φορτώστε το houses_train.csv στη μεταβλητή train_data

τρένο_δεδομένα = τα πάντα. read_csv ( 'houses_train.csv' )

# Φορτώστε το house_test.csv στη μεταβλητή test_data

test_data = τα πάντα. read_csv ( 'house_test.csv' )

# Αποθηκεύστε τα test_data στη μεταβλητή test_data1

test_data1 = test_data

Ας δούμε τον αριθμό των στηλών και των μη μηδενικών εγγραφών σε κάθε στήλη. Το Pandas.DataFrame.info() χρησιμοποιείται για τη λήψη αυτών των πληροφοριών.

Τυπώνω ( τρένο_δεδομένα. πληροφορίες ( ) )

Τυπώνω ( test_data1. πληροφορίες ( ) )

Παραγωγή:

2. Προεπεξεργασία δεδομένων

Και στα δύο σύνολα δεδομένων, η στήλη 'lot_size' διατηρεί τις τιμές με sqft και acre (Θα βρείτε τη διακύμανση βλέποντας τις σειρές στη στήλη 'lot_size_unit's'). Αλλά η μορφή πρέπει να είναι σε sqft. Επομένως, πρέπει να μετατρέψουμε τις τιμές στη στήλη 'lot_size' από acre σε sqft. Ομοίως, αυτό πρέπει να γίνει για το 'test_data1'.

Το DataFrame.loc[] χρησιμοποιείται εδώ για να βρείτε τα 'lot_size_units' με 'acre' και να πολλαπλασιάσετε την τιμή που υπάρχει στο 'lot_size' με 43560.

# Μετατρέψτε τις τιμές lot_size accre σε τετραγωνικά πόδια στα δεδομένα_τραίνου

τρένο_δεδομένα. θέση [ ( τρένο_δεδομένα [ 'lot_size_units' ] == 'στρέμμα' ) , 'lot_size' ] = τρένο_δεδομένα [ 'lot_size' ] * 43560

# Μετατρέψτε τις τιμές lot_size acre σε τετραγωνικά πόδια στο test_data1

test_data1. θέση [ ( test_data1 [ 'lot_size_units' ] == 'στρέμμα' ) , 'lot_size' ] = test_data1 [ 'lot_size' ] * 43560

Τυπώνω ( τρένο_δεδομένα. κεφάλι ( ) )

Τυπώνω ( test_data1. κεφάλι ( ) )

Παραγωγή:

Τώρα, θα δείτε ότι όλες οι τιμές στη στήλη 'lot_size' είναι τιμές sqft.

Βλέπετε ορισμένες τιμές που λείπουν σε αυτήν τη στήλη. Ας αντικαταστήσουμε τις τιμές NaN που υπάρχουν στις στήλες με το μέσο όρο της ίδιας στήλης και στα δύο σύνολα δεδομένων.

Το DataFrame['column_name'].fillna() χρησιμοποιείται για να συμπληρώσει τις τιμές που λείπουν με τον μέσο όρο χρησιμοποιώντας τη συνάρτηση mean(). Το DataFrame['column_name'].mean() μεταβιβάζεται ως παράμετρος στη συνάρτηση finna(). Ας εμφανίσουμε τον μέσο όρο και ας δούμε την καταμέτρηση τώρα:

# Συμπληρώστε τις τιμές που λείπουν στη στήλη_μέγεθος παρτίδας με τον μέσο όρο των υπαρχουσών τιμών

τρένο_δεδομένα [ 'lot_size' ] = τρένο_δεδομένα [ 'lot_size' ] . αφή ( τρένο_δεδομένα [ 'lot_size' ] . σημαίνω ( ) )

# Μέσος όρος εμφάνισης

Τυπώνω ( 'Μέση τιμή δεδομένων τρένου: ' , τρένο_δεδομένα [ 'lot_size' ] . σημαίνω ( ) )

Τυπώνω ( μόνο ( τρένο_δεδομένα [ 'lot_size' ] ) )

# Συμπληρώστε τις τιμές που λείπουν στη στήλη_μέγεθος παρτίδας με τον μέσο όρο των υπαρχουσών τιμών

test_data1 [ 'lot_size' ] = test_data1 [ 'lot_size' ] . αφή ( test_data1 [ 'lot_size' ] . σημαίνω ( ) )

# Μέσος όρος εμφάνισης

Τυπώνω ( 'Μέση τιμή δεδομένων δοκιμής: ' , test_data1 [ 'lot_size' ] . σημαίνω ( ) )

Τυπώνω ( μόνο ( test_data1 [ 'lot_size' ] ) )

Παραγωγή:

Οι τιμές που λείπουν και που υπάρχουν στη στήλη 'lot_size' Train Dataset αντικαθίστανται από τη μέση τιμή 18789.95194 και οι τιμές που λείπουν που υπάρχουν στη στήλη 'lot_size' Test set αντικαθίστανται από τη μέση τιμή 8961.0

3. Καθαρισμός δεδομένων

Κατά την εκπαίδευση του μοντέλου, υπάρχουν ορισμένα περιττά χαρακτηριστικά που δεν απαιτούνται για την πρόβλεψη του αποτελέσματος. Στην περίπτωσή μας, υπάρχουν τρία χαρακτηριστικά που είναι 'lot_size_units', 'zip_code' και 'size_units' που πρέπει να αφαιρεθούν και από τα δύο σύνολα δεδομένων. Το pandas.DataFrame.drop() χρησιμοποιείται για την αφαίρεση αυτών των τριών στηλών και από τα δύο σύνολα δεδομένων.

τρένο_δεδομένα = τρένο_δεδομένα. πτώση ( [ 'lot_size_units' , 'ταχυδρομικός κώδικας' , 'μέγεθος_μονάδων' ] , άξονας = 1 )

test_data1 = test_data1. πτώση ( [ 'lot_size_units' , 'ταχυδρομικός κώδικας' , 'μέγεθος_μονάδων' ] , άξονας = 1 )

Τυπώνω ( τρένο_δεδομένα. πληροφορίες ( ) )

Τυπώνω ( test_data1. πληροφορίες ( ) )

Παραγωγή:

Τώρα, τα σύνολα δεδομένων είναι σε καλή κατάσταση. Οι περιττές στήλες αφαιρούνται και οι τιμές που λείπουν δεν υπάρχουν.

4. Οπτικοποίηση δεδομένων

Ας δημιουργήσουμε ένα ιστόγραμμα για τις στήλες των δεδομένων Train. Η συνάρτηση pandas.DataFrame.hist() χρησιμοποιείται για τη δημιουργία ιστογραμμάτων για όλα τα χαρακτηριστικά.

τρένο_δεδομένα. ιστορικό ( σύκα = ( 4 , 9 ) )

Παραγωγή:

Το ιστόγραμμα δημιουργείται για κρεβάτια, λουτρά, μέγεθος, μέγεθος_παρτίδας και στήλες τιμών για τα δεδομένα Train.

Ας δημιουργήσουμε τη συσχέτιση για όλα τα πεδία μεταξύ τους. Η λειτουργική μονάδα Plotly.express χρησιμοποιείται για τη σχεδίαση των συσχετισμένων τιμών.

εισαγωγή οικόπεδα. εξπρές

κορρ = τρένο_δεδομένα. κορρ ( )

# Σχεδιάστε τα συσχετισμένα δεδομένα

προβολή_εικ = οικόπεδα. εξπρές . imshow ( κορρ , text_auto = Αληθής )

# Απεικόνιση

προβολή_εικ. προβολή ( )

Παραγωγή:

  1. Τα κρεβάτια συσχετίζονται 0,2935 με την τιμή, -0,059 συσχετίζονται με το μέγεθος_παρτίδας, 0,77 συσχετίζονται με το μέγεθος και 0,65 συσχετίζονται με τα μπάνια.
  2. Τα λουτρά συσχετίζονται 0,3173 με την τιμή, -0,054 συσχετίζονται με το μέγεθος_παρτίδας, 0,667 συσχετίζονται με τα λουτρά και 0,771 συσχετίζονται με τα κρεβάτια.
  3. Το μέγεθος είναι 0,444 συσχετισμένο με την τιμή, -0,044 συσχετίζεται με το μέγεθος_παρτίδας, 0,667 συσχετίζεται με το μέγεθος και 0,652 συσχετίζεται με τα κρεβάτια.

5. Προετοιμασία Μοντέλου

Πρέπει να ορίσουμε την τιμή ως στόχο αφαιρώντας την από το train_data. Βεβαιωθείτε ότι τα χαρακτηριστικά που υπάρχουν στα δεδομένα Train and Test πρέπει να είναι τα ίδια σε αυτή τη φάση.

στόχος = τρένο_δεδομένα [ 'τιμή' ]

τρένο_δεδομένα = τρένο_δεδομένα. πτώση ( [ 'τιμή' ] , άξονας = 1 )

Τυπώνω ( τρένο_δεδομένα. πληροφορίες ( ) )

Τυπώνω ( test_data1. πληροφορίες ( ) )

Παραγωγή:

Τώρα, υπάρχουν τέσσερα ανεξάρτητα χαρακτηριστικά (κρεβάτια, μπάνια, μέγεθος και lot_size) και η τιμή είναι το εξαρτώμενο χαρακτηριστικό που εξαρτάται από αυτά τα τέσσερα χαρακτηριστικά.

6. Εκπαίδευση του Μοντέλου

Αρχικά, εφαρμόζουμε τον αλγόριθμο RandomForestRegressor. Εισαγάγετε το από το πακέτο 'sklearn.ensemble'. Είναι μια Τεχνική Ensembling.

  1. Δημιουργήστε ένα μοντέλο από το RandomForestRegressor(). Δεν περνάμε καμία παράμετρο σε αυτό το μοντέλο. Έτσι, ο αριθμός των Δέντρων απόφασης είναι 100 από προεπιλογή.
  2. Χρησιμοποιήστε τη μέθοδο fit() για να προσαρμόσετε το μοντέλο. Χρειάζονται δύο παραμέτρους. Η πρώτη παράμετρος είναι τα εξαρτημένα χαρακτηριστικά και η δεύτερη παράμετρος είναι η ετικέτα/στόχος κλάσης.
  3. Χρησιμοποιήστε τη μέθοδο score() για να δείτε την ακρίβεια μοντέλου. Παίρνει επίσης τις ίδιες παραμέτρους παρόμοιες με τη μέθοδο fit().
από έμαθα σύνολο εισαγωγή RandomForestRegressor

# Καθορίστε το μοντέλο

μοντέλο 1 = RandomForestRegressor ( )

# Τοποθετήστε το μοντέλο

μοντέλο 1. κατάλληλος ( τρένο_δεδομένα , στόχος )

# Ακρίβεια μοντέλου

Τυπώνω ( μοντέλο 1. σκορ ( τρένο_δεδομένα , στόχος ) * 100 )

Παραγωγή:

86.08400889419033

7. Δοκιμάστε το μοντέλο και αποθηκεύστε τα αποτελέσματα

Αυτό είναι το τελευταίο βήμα όπου πρέπει να προβλέψουμε το αποτέλεσμα και να το αποθηκεύσουμε.

  1. Η μέθοδος predict() χρησιμοποιείται για την πρόβλεψη των δεδομένων δοκιμής. Χρησιμοποιείται με το μοντέλο και παίρνει την Ένθετη λίστα τιμών/Πλαίσιο Δεδομένων.
  2. Χρησιμοποιήστε τη μέθοδο to_csv() για να αποθηκεύσετε τα αποτελέσματα στο αρχείο CSV.
  3. Κατεβάστε το αρχείο από το περιβάλλον Python (Google Colab).
# Πρόβλεψε τα test_data1 με το model1.

test_data [ 'Τιμή' ] = μοντέλο 1. προλέγω ( test_data1 )

# Αποθηκεύστε τα test_data στο test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Κάντε λήψη αυτού του αρχείου από το Colab

αρχεία. Κατεβάστε ( 'test_results.csv' )

Παραγωγή:

Ας δείξουμε 20 εγγραφές από τις 505 εγγραφές. Μπορείτε να δείτε ότι η στήλη Τιμή περιέχει τις προβλεπόμενες τιμές για κάθε σπίτι.

Άλλα μοντέλα

Ας προβλέψουμε τους οίκους χρησιμοποιώντας το DecisionTreeRegressor. Μπορείτε να το εισαγάγετε από τη μονάδα 'sklearn.tree'.

από έμαθα δέντρο εισαγωγή DecisionTreeRegressor

# Καθορίστε το μοντέλο

μοντέλο 2 = DecisionTreeRegressor ( )

# Τοποθετήστε το μοντέλο

μοντέλο 2. κατάλληλος ( τρένο_δεδομένα , στόχος )

# Ακρίβεια μοντέλου

Τυπώνω ( μοντέλο 2. σκορ ( τρένο_δεδομένα , στόχος ) * 100 )

# Πρόβλεψε τα test_data1 με το model1.

test_data [ 'Τιμή' ] = μοντέλο 2. προλέγω ( test_data1 )

# Αποθηκεύστε τα test_data στο test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Κάντε λήψη αυτού του αρχείου από το Colab

αρχεία. Κατεβάστε ( 'test_results.csv' )

Παραγωγή:

99,94183165335028

Μπορείτε να δείτε το προβλεπόμενο αποτέλεσμα εδώ:

Ας προβλέψουμε τους οίκους χρησιμοποιώντας το LinearrEgression. Εισαγάγετε το μοντέλο από τη λειτουργική μονάδα 'sklearn.linear_model'.

από έμαθα γραμμικό_μοντέλο εισαγωγή Γραμμικής παλινδρόμησης

# Καθορίστε το μοντέλο

μοντέλο 3 = Γραμμικής παλινδρόμησης ( )

# Τοποθετήστε το μοντέλο

μοντέλο 3. κατάλληλος ( τρένο_δεδομένα , στόχος )

# Πρόβλεψε τα test_data1 με το model1.

test_data [ 'Τιμή' ] = μοντέλο 3. προλέγω ( test_data1 )

# Αποθηκεύστε τα test_data στο test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Κάντε λήψη αυτού του αρχείου από το Colab

αρχεία. Κατεβάστε ( 'test_results.csv' )

Μπορείτε να δείτε το προβλεπόμενο αποτέλεσμα εδώ:

συμπέρασμα

Τώρα, μπορείτε να προβλέψετε την τιμή του σπιτιού σας με βάση τα χαρακτηριστικά όπως ο αριθμός των δωματίων, η έκταση της γης σας κ.λπ. Σε αυτόν τον οδηγό, εξετάσαμε τα πραγματικά δεδομένα του σπιτιού από το Σιάτλ της Ουάσιγκτον. Χρησιμοποιώντας τις τεχνικές παλινδρόμησης όπως Γραμμική παλινδρόμηση, Δέντρο απόφασης και Τυχαίο Δάσος, προβλέψαμε την τιμή 505 σπιτιών. Όλα τα βήματα (Προεπεξεργασία δεδομένων, Καθαρισμός δεδομένων και Οπτικοποίηση δεδομένων) που πρέπει να γίνουν πριν από την εκπαίδευση του μοντέλου εξηγούνται βήμα προς βήμα με αποσπάσματα κώδικα και εξόδους.