ASV mājokļu cenu prognoze

Asv Majoklu Cenu Prognoze



Mājas celtniecība ir viens no mūsu dzīves izaicinājumiem. Pirms būvniecības ir iespējams aprēķināt savas mājas cenu, pamatojoties uz iepriekšējās mājas cenu. Faktori, kas visvairāk ietekmē mājas cenu, ir kopējais istabu skaits (gulta, vanna utt.) un zemes platība. Pēc tā mēs varam aprēķināt nepieciešamo budžetu mājas celtniecībai.

Šajā rokasgrāmatā mēs redzēsim, kā prognozēt ASV māju cenas, izmantojot mašīnmācīšanos, izmantojot Python. Vispirms mēs apspriežam izmantojamo datu kopu un pēc tam veicam datu priekšapstrādi. Pēc tam mēs vizualizējam datu kopā esošos atribūtus un apmācības datu kopā izmantojam dažādus mašīnmācīšanās algoritmus (Sietla, Vašingtona, 2022. gada augusts–2022. gada decembris). Visbeidzot, mēs beidzam šo rokasgrāmatu, prognozējot cenas dažām mājām, kas ir iekļautas testa datu kopā. Pirms šī projekta īstenošanas mums ir jāsaprot mašīnmācīšanās terminoloģija, kas tiek izmantota šajā projektā.







Regresija

Ja mašīnmācībā strādājat ar skaitliskiem datiem, jums ir jāsaprot regresija. Regresija ir mašīnmācības uzraudzīta mācīšanās metode, ko izmanto, lai izprastu attiecības starp neatkarīgiem atribūtiem un atkarīgiem atribūtiem (klases etiķete/mērķis). Iekārta prognozē mājas cenu, apgūstot katru ierakstu, kas atrodas datu kopā. Tādējādi tā ir uzraudzīta mācīšanās.



Piemēram, mūsu scenārijā neatkarīgie atribūti ir gultu skaits, vannu skaits, zemes platība, pasta indekss utt. Pamatojoties uz tiem, mēs varam prognozēt mūsu mājas cenu. Tātad šie ir neatkarīgie atribūti, kas nav ne no kā atkarīgi. Cena ir mērķa atribūts vai klases etiķete, kas ir atkarīga no šiem atribūtiem.



1. Lineārā regresija

Lineārās regresijas algoritms parāda lineāru sakarību starp atkarīgo atribūtu (Y) un neatkarīgo atribūtu (X) mainīgajiem. Matemātiski mēs to varam novērtēt šādi:





UN = aX+b

Šeit “a” un “b” ir lineārie koeficienti.

Python programmā LinearRegression() ir pieejama modulī “sklearn.linear_model”. Redzēsim, kā to precizēt, realizējot projektu. Šis ir modelis ar parametriem:



2. Lēmumu koks

Būtībā lēmumu koks ir grafisks attēlojums, lai iegūtu visus iespējamos problēmas risinājumus, pamatojoties uz nosacījumiem, kas tiek nodrošināti, izmantojot mezglus. Lēmuma mezgls tiek izmantots, lai pieņemtu lēmumu, un Leaf mezgls attiecas uz konkrēta lēmuma izvadi. Mēs varam prognozēt mūsu mājas cenu ar Lēmumu koka regressoru.

Programmā Python DecisionTreeRegressor ir pieejams modulī “sklearn.tree”. Redzēsim, kā to precizēt, realizējot projektu. Šis ir modelis ar parametriem:

3. Random Forest

Random Forest veic to pašu funkcionalitāti, kas ir līdzīga lēmumu kokam. Bet ir nepieciešams mežs (lēmumu koku kolekcija) un apvienot (vidējā vērtība) visus lēmumu koku rezultātus. Piemēram, izlases meža lielums ir 3. Tātad iekšēji tiek izveidoti trīs lēmumu koki, un pirmā lēmumu koka mājas cenas rezultāts ir 20 000. Otrā lēmumu koka mājas cenas rezultāts ir 20 000. Un mājas cenu rezultāts pēdējais lēmumu koks ir 10 000. 16 666 666 ir gala rezultāts ((20000+20000+10000)/3).

Python programmā RandomForestRegressor ir pieejams modulī “sklearn.ensemble”. Tālāk ir parādīts modelis ar parametriem. Mēs varam norādīt koku skaitu parametrā “n_estimators”. Pēc noklusējuma tas ir 100.

Īstenošana

Ātri skatiet darbības, kas saistītas ar ASV mājokļu cenas prognozēšanu. Mēs uzskatām houses_train (CSV faila) datu kopu ar 2016. gada ierakstiem (izmanto, lai apmācītu mašīnmācības modeli). Pēc tam mēs prognozējam mājas cenas (505) ierakstus, kas atrodas mājas_pārbaudes failā.

1. Vilcienu un testa datu kopu ielāde

Pandas ir pieejamais Python modulis, ko izmanto datu analīzei. Mēs izmantojam šo moduli, lai ielādētu datu kopas Python vidē. Šeit mēs izmantojam Google Co kā Code Environment. Tas ir pieejams bez maksas. Ir nepieciešams tikai Google konts.

Pirmkārt, mums ir jāielādē faili no mūsu vietējā datora uz Colab Env. Lejupielādējiet datu kopas no šeit .

# Augšupielādējiet failus houses_train.csv un house_test.csv savā Google Colab

# viens pēc otra.

no google. UN CITI imports failus

failus. augšupielādēt ( )

Read_csv() ir funkcija, kas tiek izmantota, lai ielādētu CSV datus mainīgajā. Tas izmanto faila nosaukumu kā parametru.

imports pandas

# Ielādējiet houses_train.csv mainīgajā train_data

vilciena_dati = pandas. lasīt_csv ( 'houses_train.csv' )

# Ielādējiet house_test.csv mainīgajā test_data

testa_dati = pandas. lasīt_csv ( 'house_test.csv' )

# Saglabājiet test_data mainīgajā test_data1

testa_dati1 = testa_dati

Apskatīsim kolonnas un ierakstu skaitu, kas nav nulles katrā kolonnā. Lai iegūtu šo informāciju, tiek izmantots Pandas.DataFrame.info().

drukāt ( vilciena_dati. info ( ) )

drukāt ( testa_dati1. info ( ) )

Izvade:

2. Datu priekšapstrāde

Abās datu kopās kolonnā “lot_size” ir vērtības ar sqft un acre (atšķirību atradīsit, skatot rindas kolonnā “lot_size_unit’s”). Bet formātam jābūt kvadrātpēdās. Tātad mums ir jāpārvērš vērtības kolonnā “lot_size” no akriem uz kvadrātpēdām. Līdzīgi tas jādara ar “test_data1”.

Šeit tiek izmantots DataFrame.loc[], lai atrastu “lot_size_units” ar “acre” un reizinātu vērtību, kas atrodas laukā “lot_size” ar 43560.

# Konvertējiet lot_size akru vērtības kvadrātpēdās mapē train_data

vilciena_dati. vieta [ ( vilciena_dati [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = vilciena_dati [ 'lot_size' ] * 43560

# Pārvērtiet lot_size acre vērtības kvadrātpēdās test_data1

testa_dati1. vieta [ ( testa_dati1 [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = testa_dati1 [ 'lot_size' ] * 43560

drukāt ( vilciena_dati. galvu ( ) )

drukāt ( testa_dati1. galvu ( ) )

Izvade:

Tagad jūs redzēsit, ka visas vērtības kolonnā “lot_size” ir kvadrātpēdas vērtības.

Šajā slejā ir redzamas dažas trūkstošās vērtības. Aizstāsim kolonnās esošās NaN vērtības ar vienas un tās pašas kolonnas vidējo vērtību abās datu kopās.

DataFrame['kolonnas_nosaukums'].fillna() tiek izmantots, lai aizpildītu trūkstošās vērtības ar vidējo, izmantojot funkciju mean(). DataFrame['kolonnas_nosaukums'].mean() tiek nodots kā parametrs funkcijai finna(). Parādīsim vidējo un tagad redzēsim skaitu:

# Aizpildiet trūkstošās vērtības kolonnā lot_size ar esošo vērtību vidējo vērtību

vilciena_dati [ 'lot_size' ] = vilciena_dati [ 'lot_size' ] . justies ( vilciena_dati [ 'lot_size' ] . nozīmē ( ) )

# Display Mean

drukāt ( 'Vilciena datu vidējā vērtība:' , vilciena_dati [ 'lot_size' ] . nozīmē ( ) )

drukāt ( tikai ( vilciena_dati [ 'lot_size' ] ) )

# Aizpildiet trūkstošās vērtības kolonnā lot_size ar esošo vērtību vidējo vērtību

testa_dati1 [ 'lot_size' ] = testa_dati1 [ 'lot_size' ] . justies ( testa_dati1 [ 'lot_size' ] . nozīmē ( ) )

# Display Mean

drukāt ( 'Pārbaudes datu vidējā vērtība:' , testa_dati1 [ 'lot_size' ] . nozīmē ( ) )

drukāt ( tikai ( testa_dati1 [ 'lot_size' ] ) )

Izvade:

Trūkstošās vērtības, kas atrodas kolonnā “lot_size” Vilciena datu kopa, tiek aizstātas ar vidējo vērtību 18789.95194, un trūkstošās vērtības, kas atrodas kolonnā “lot_size” Test Dataset, tiek aizstātas ar vidējo vērtību 8961,0.

3. Datu tīrīšana

Apmācot modeli, ir daži nevajadzīgi atribūti, kas nav nepieciešami, lai prognozētu rezultātu. Mūsu gadījumā ir trīs atribūti, kas ir “lot_size_units”, “zip_code” un “size_units”, kas ir jānoņem no abām datu kopām. Pandas.DataFrame.drop() tiek izmantots, lai noņemtu šīs trīs kolonnas no abām datu kopām.

vilciena_dati = vilciena_dati. piliens ( [ 'lot_size_units' , 'pasta indekss' , 'izmēra_vienības' ] , ass = 1 )

testa_dati1 = testa_dati1. piliens ( [ 'lot_size_units' , 'pasta indekss' , 'izmēra_vienības' ] , ass = 1 )

drukāt ( vilciena_dati. info ( ) )

drukāt ( testa_dati1. info ( ) )

Izvade:

Tagad datu kopas ir labā stāvoklī. Nevajadzīgās kolonnas tiek noņemtas, un trūkstošās vērtības nepastāv.

4. Datu vizualizācija

Izveidosim histogrammu vilciena datu kolonnām. Funkciju pandas.DataFrame.hist() izmanto, lai ģenerētu histogrammas visiem atribūtiem.

vilciena_dati. hist ( vīģes izmērs = ( 4 , 9 ) )

Izvade:

Vilcienu datu kolonnām tiek ģenerēta histogramma gultām, vannām, izmēram, lot_size un cenu kolonnām.

Izveidosim korelāciju visiem laukiem attiecībā pret otru. Modulis Plotly.express tiek izmantots, lai attēlotu korelētās vērtības.

imports sižetiski. izteikt

korr = vilciena_dati. korr ( )

# Uzzīmējiet korelētos datus

view_att = sižetiski. izteikt . imshow ( korr , text_auto = Taisnība )

# Displejs

view_att. parādīt ( )

Izvade:

  1. Gultas ir 0,2935 korelē ar cenu, -0,059 korelē ar lot_size, 0,77 korelē ar izmēru un 0,65 korelē ar vannām.
  2. Vannas ir 0,3173 korelē ar cenu, -0,054 korelē ar lot_size, 0,667 korelē ar vannām un 0,771 korelē ar gultām.
  3. Izmērs ir 0,444 korelēts ar cenu, -0,044 korelē ar lot_size, 0,667 korelē ar izmēru un 0,652 korelē ar gultām.

5. Modeļa sagatavošana

Mums ir jāiestata cena kā mērķa cena, noņemot to no train_data. Pārliecinieties, ka atribūtiem, kas atrodas vilciena un pārbaudes datos, šajā posmā ir jābūt vienādiem.

mērķis = vilciena_dati [ 'cena' ]

vilciena_dati = vilciena_dati. piliens ( [ 'cena' ] , ass = 1 )

drukāt ( vilciena_dati. info ( ) )

drukāt ( testa_dati1. info ( ) )

Izvade:

Tagad ir četri neatkarīgi atribūti (gultas, vannas, izmērs un lot_size), un cena ir atkarīgais atribūts, kas ir atkarīgs no šiem četriem atribūtiem.

6. Modeļa apmācība

Pirmkārt, mēs izmantojam RandomForestRegressor algoritmu. Importējiet to no pakotnes “sklearn.ensemble”. Tā ir ansambļa tehnika.

  1. Izveidojiet modeli no RandomForestRegressor(). Mēs šim modelim nenododam nevienu parametru. Tātad lēmumu koku skaits pēc noklusējuma ir 100.
  2. Izmantojiet fit() metodi, lai pielāgotu modeli. Tam nepieciešami divi parametri. Pirmais parametrs ir atkarīgie atribūti, bet otrais parametrs ir klases etiķete/mērķis.
  3. Izmantojiet metodi score(), lai redzētu modeļa precizitāti. Tam ir nepieciešami arī tie paši parametri, kas ir līdzīgi fit() metodei.
no iemācījušies ansamblis imports RandomForestRegressor

# Definējiet modeli

modelis1 = RandomForestRegressor ( )

# Pielāgojiet modelim

modelis1. der ( vilciena_dati , mērķis )

# Modeļa precizitāte

drukāt ( modelis1. rezultāts ( vilciena_dati , mērķis ) * 100 )

Izvade:

86.08400889419033

7. Pārbaudiet modeli un saglabājiet rezultātus

Šis ir pēdējais solis, kurā mums jāparedz rezultāts un tie jāsaglabā.

  1. Prognozēšanas () metode tiek izmantota, lai prognozētu testa datus. Tas tiek izmantots kopā ar modeli un aizņem ligzdoto vērtību sarakstu/DataFrame.
  2. Izmantojiet metodi to_csv(), lai saglabātu rezultātus CSV failā.
  3. Lejupielādējiet failu no Python vides (Google Colab).
# Prognozējiet testa_datus1 ar modeli1.

testa_dati [ 'Cena' ] = modelis1. prognozēt ( testa_dati1 )

# Saglabājiet testa_datus failā test_results.csv

testa_dati. uz_csv ( 'test_results.csv' )

# Lejupielādējiet šo failu no Colab

failus. lejupielādēt ( 'test_results.csv' )

Izvade:

Parādīsim 20 ierakstus no 505 ierakstiem. Varat redzēt, ka slejā Cena ir katrai mājai paredzētās vērtības.

Citi modeļi

Paredzēsim mājas, izmantojot DecisionTreeRegressor. To var importēt no moduļa “sklearn.tree”.

no iemācījušies koks imports DecisionTreeRegressor

# Definējiet modeli

modelis2 = DecisionTreeRegressor ( )

# Pielāgojiet modelim

modelis2. der ( vilciena_dati , mērķis )

# Modeļa precizitāte

drukāt ( modelis2. rezultāts ( vilciena_dati , mērķis ) * 100 )

# Prognozējiet testa_datus1 ar modeli1.

testa_dati [ 'Cena' ] = modelis2. prognozēt ( testa_dati1 )

# Saglabājiet testa_datus failā test_results.csv

testa_dati. uz_csv ( 'test_results.csv' )

# Lejupielādējiet šo failu no Colab

failus. lejupielādēt ( 'test_results.csv' )

Izvade:

99.94183165335028

Prognozēto rezultātu var redzēt šeit:

Paredzēsim mājas, izmantojot lineāro regresiju. Importējiet modeli no moduļa “sklearn.linear_model”.

no iemācījušies lineārais_modelis imports Lineārā regresija

# Definējiet modeli

modelis3 = Lineārā regresija ( )

# Pielāgojiet modelim

modelis3. der ( vilciena_dati , mērķis )

# Prognozējiet testa_datus1 ar modeli1.

testa_dati [ 'Cena' ] = modelis3. prognozēt ( testa_dati1 )

# Saglabājiet testa_datus failā test_results.csv

testa_dati. uz_csv ( 'test_results.csv' )

# Lejupielādējiet šo failu no Colab

failus. lejupielādēt ( 'test_results.csv' )

Prognozēto rezultātu var redzēt šeit:

Secinājums

Tagad jūs varat prognozēt savas mājas cenu, pamatojoties uz tādiem atribūtiem kā istabu skaits, jūsu zemes platība utt. Šajā rokasgrāmatā mēs aplūkojām reālos mājas datus no Sietlas, Vašingtonas štatā. Izmantojot regresijas metodes, piemēram, Lineārā regresija, Lēmumu koks un Random Forest, mēs prognozējām 505 māju cenu. Visas darbības (datu priekšapstrāde, datu tīrīšana un datu vizualizācija), kas jāveic pirms modeļa apmācības, ir soli pa solim izskaidrotas ar koda fragmentiem un izvadiem.