Napoved cen nepremičnin v ZDA

Napoved Cen Nepremicnin V Zda



Gradnja hiše je eden izmed izzivov v našem življenju. Pred gradnjo je možno oceniti ceno vaše hiše glede na ceno prejšnje hiše. Dejavniki, ki v veliki meri vplivajo na ceno hiše, vključujejo skupno število sob (postelja, kopalnica itd.) in površino zemljišča. Na podlagi tega lahko ocenimo potreben proračun za gradnjo hiše.

V tem priročniku bomo videli, kako s strojnim učenjem prek Pythona predvideti ceno hiš v ZDA. Najprej se pogovorimo o naboru podatkov, ki ga uporabljamo, nato pa podatke predhodno obdelamo. Po tem vizualiziramo atribute, ki so prisotni v naboru podatkov, in uporabimo različne algoritme strojnega učenja na naboru podatkov za usposabljanje (Seattle, Washington, avgust 2022 – december 2022). Na koncu ta vodnik zaključimo z napovedjo cen nekaterih hiš, ki so prisotne v testnem naboru podatkov. Preden začnemo izvajati ta projekt, moramo razumeti terminologijo strojnega učenja, ki se uporablja v tem projektu.







Regresija

Če pri strojnem učenju delate z numeričnimi podatki, morate razumeti regresijo. Regresija je tehnika nadzorovanega učenja v strojnem učenju, ki se uporablja za razumevanje razmerja med neodvisnimi atributi in odvisnimi atributi (oznaka razreda/cilj). Stroj napove ceno hiše tako, da se nauči vsakega zapisa, ki je prisoten v naboru podatkov. Gre torej za nadzorovano učenje.



Na primer, v našem scenariju so neodvisni atributi število postelj, število kopalnic, velikost zemljišča, poštna številka itd. Na podlagi tega lahko napovemo ceno naše hiše. Torej, to so neodvisni atributi, ki niso odvisni od ničesar. Cena je ciljni atribut ali oznaka razreda, ki je odvisna od teh atributov.



1. Linearna regresija

Algoritem linearne regresije prikazuje linearno razmerje med spremenljivkama odvisnega atributa (Y) in neodvisnega atributa (X). Matematično ga lahko ocenimo na naslednji način:





IN = aX+b

Tukaj sta 'a' in 'b' linearna koeficienta.

V Pythonu je LinearRegression() na voljo v modulu “sklearn.linear_model”. Videli bomo, kako to določiti med izvajanjem projekta. Sledi model s parametri:



2. Odločitveno drevo

V bistvu je drevo odločitev grafična predstavitev za pridobivanje vseh možnih rešitev problema na podlagi pogojev, zagotovljenih z uporabo vozlišč. Vozlišče Decision se uporablja za sprejemanje odločitve, vozlišče Leaf pa se nanaša na rezultat določene odločitve. Z Decision Tree Regressorjem lahko napovemo ceno naše hiše.

V Pythonu je DecisionTreeRegressor na voljo v modulu »sklearn.tree«. Videli bomo, kako to določiti med izvajanjem projekta. Sledi model s parametri:

3. Naključni gozd

Naključni gozd izvaja isto funkcijo, ki je podobna odločitvenemu drevesu. Vendar potrebuje gozd (zbirko dreves odločanja) in združuje (povprečna vrednost) vse rezultate dreves odločanja. Na primer, velikost naključnega gozda je 3. Interno so torej ustvarjena tri odločitvena drevesa in rezultat hišne cene prvega odločitvenega drevesa je 20000. Rezultat hišne cene drugega odločitvenega drevesa je 20000. In izid hišne cene za zadnje drevo odločitev je 10000. 16,666.666 je končni rezultat ((20000+20000+10000)/3).

V Pythonu je RandomForestRegressor na voljo v modulu »sklearn.ensemble«. Sledi model s parametri. Število dreves lahko določimo v parametru “n_estimators”. Privzeto je 100.

Izvedba

Hitro si oglejte korake, vključene v napovedovanje cene nepremičnin v ZDA. Upoštevamo nabor podatkov houses_train (datoteka CSV) z zapisi 2016 (ki se uporabljajo za usposabljanje modela strojnega učenja). Nato napovemo zapise o ceni hiše (505), ki so prisotni v datoteki house_test.

1. Nalaganje podatkovnih nizov usposabljanja in testa

Pandas je razpoložljiv modul v Pythonu, ki se uporablja za analizo podatkov. Ta modul uporabljamo za nalaganje naborov podatkov v okolje Python. Tukaj uporabljamo Google Co kot okolje kode. To je na voljo brezplačno. Potreben je samo račun Google.

Najprej moramo naložiti datoteke iz našega lokalnega računalnika v Colab Env. Prenesite nabore podatkov iz tukaj .

# Naložite datoteki houses_train.csv in house_test.csv v Google Colab

# en za drugim.

od google. ET AL uvoz datoteke

datoteke. nalaganje ( )

Read_csv() je funkcija, ki se uporablja za nalaganje podatkov CSV v spremenljivko. Kot parameter vzame ime datoteke.

uvoz pande

# Naložite houses_train.csv v spremenljivko train_data

vlak_podatki = pande. read_csv ( 'houses_train.csv' )

# Naložite house_test.csv v spremenljivko test_data

testni_podatki = pande. read_csv ( 'house_test.csv' )

# Shranite test_data v spremenljivko test_data1

testni_podatki1 = testni_podatki

Oglejmo si stolpce in število neničelnih zapisov v vsakem stolpcu. Za pridobitev teh informacij se uporablja Pandas.DataFrame.info().

tiskanje ( vlak_podatki. info ( ) )

tiskanje ( testni_podatki1. info ( ) )

Izhod:

2. Predhodna obdelava podatkov

V obeh naborih podatkov stolpec »lot_size« vsebuje vrednosti s kvadratnimi čevlji in akri (varianco boste našli tako, da si ogledate vrstice v stolpcu »lot_size_unit's«). Toda format mora biti v sqft. Torej moramo pretvoriti vrednosti v stolpcu »lot_size« iz acre v sqft. Podobno je treba to narediti za »test_data1«.

DataFrame.loc[] se tukaj uporablja za iskanje »lot_size_units« z »acre« in množenje vrednosti, ki je prisotna v »lot_size«, s 43560.

# Pretvorite vrednosti lot_size acre v kvadratne čevlje v train_data

vlak_podatki. mesto [ ( vlak_podatki [ 'lot_size_units' ] == 'acre' ) , 'velikost zemljišča' ] = vlak_podatki [ 'velikost zemljišča' ] * 43560

# Pretvorite vrednosti lot_size acre v kvadratne čevlje v test_data1

testni_podatki1. mesto [ ( testni_podatki1 [ 'lot_size_units' ] == 'acre' ) , 'velikost zemljišča' ] = testni_podatki1 [ 'velikost zemljišča' ] * 43560

tiskanje ( vlak_podatki. glavo ( ) )

tiskanje ( testni_podatki1. glavo ( ) )

Izhod:

Zdaj boste videli, da so vse vrednosti v stolpcu »lot_size« vrednosti v kvadratnih metrih.

V tem stolpcu vidite nekaj manjkajočih vrednosti. Zamenjajmo vrednosti NaN, ki so prisotne v stolpcih, s srednjo vrednostjo istega stolpca v obeh nizih podatkov.

DataFrame['column_name'].fillna() se uporablja za zapolnitev manjkajočih vrednosti s povprečjem z uporabo funkcije mean(). DataFrame['ime_stolpca'].mean() se kot parameter posreduje funkciji finna(). Prikažimo povprečje in zdaj poglejmo štetje:

# Izpolnite manjkajoče vrednosti v stolpcu lot_size s povprečjem obstoječih vrednosti

vlak_podatki [ 'velikost zemljišča' ] = vlak_podatki [ 'velikost zemljišča' ] . čutiti ( vlak_podatki [ 'velikost zemljišča' ] . pomeni ( ) )

# Prikaži povprečje

tiskanje ( 'Podatki o vlaku Srednja vrednost: ' , vlak_podatki [ 'velikost zemljišča' ] . pomeni ( ) )

tiskanje ( samo ( vlak_podatki [ 'velikost zemljišča' ] ) )

# Izpolnite manjkajoče vrednosti v stolpcu lot_size s povprečjem obstoječih vrednosti

testni_podatki1 [ 'velikost zemljišča' ] = testni_podatki1 [ 'velikost zemljišča' ] . čutiti ( testni_podatki1 [ 'velikost zemljišča' ] . pomeni ( ) )

# Prikaži povprečje

tiskanje ( 'Srednja vrednost testnih podatkov: ' , testni_podatki1 [ 'velikost zemljišča' ] . pomeni ( ) )

tiskanje ( samo ( testni_podatki1 [ 'velikost zemljišča' ] ) )

Izhod:

Manjkajoče vrednosti, ki so prisotne v stolpcu »lot_size«, Train Dataset, so nadomeščene s srednjo vrednostjo 18789,95194, manjkajoče vrednosti, ki so prisotne v stolpcu »lot_size« Test Dataset, pa so nadomeščene s srednjo vrednostjo 8961,0

3. Čiščenje podatkov

Med usposabljanjem modela je nekaj nepotrebnih atributov, ki niso potrebni za napovedovanje rezultata. V našem primeru obstajajo trije atributi, in sicer »lot_size_units«, »zip_code« in »size_units«, ki jih je treba odstraniti iz obeh naborov podatkov. Pandas.DataFrame.drop() se uporablja za odstranitev teh treh stolpcev iz obeh naborov podatkov.

vlak_podatki = vlak_podatki. padec ( [ 'lot_size_units' , 'Poštna številka' , 'size_units' ] , os = 1 )

testni_podatki1 = testni_podatki1. padec ( [ 'lot_size_units' , 'Poštna številka' , 'size_units' ] , os = 1 )

tiskanje ( vlak_podatki. info ( ) )

tiskanje ( testni_podatki1. info ( ) )

Izhod:

Zdaj so nabori podatkov v dobrem stanju. Nepotrebni stolpci so odstranjeni in manjkajoče vrednosti ne obstajajo.

4. Vizualizacija podatkov

Ustvarimo histogram za stolpce podatkov o vlaku. Funkcija pandas.DataFrame.hist() se uporablja za ustvarjanje histogramov za vse atribute.

vlak_podatki. zgod ( velikost fige = ( 4 , 9 ) )

Izhod:

Histogram je ustvarjen za stolpce za postelje, kopeli, velikost, velikost_lotja in cene za podatke Train.

Ustvarimo korelacijo za vsa polja med seboj. Modul Plotly.express se uporablja za risanje koreliranih vrednosti.

uvoz zapleteno. ekspresno

kor = vlak_podatki. kor ( )

# Narišite korelirane podatke

pogled_sl = zapleteno. ekspresno . imshow ( kor , text_auto = Prav )

# Zaslon

pogled_sl. pokazati ( )

Izhod:

  1. Postelje so 0,2935 v korelaciji s ceno, -0,059 v korelaciji z lot_size, 0,77 v korelaciji z velikostjo in 0,65 v korelaciji s kopelmi.
  2. Kopeli so 0,3173 v korelaciji s ceno, -0,054 v korelaciji z lot_size, 0,667 v korelaciji s kopelmi in 0,771 v korelaciji s posteljami.
  3. Velikost je 0,444 v korelaciji s ceno, -0,044 v korelaciji z lot_size, 0,667 v korelaciji z velikostjo in 0,652 v korelaciji s posteljami.

5. Priprava modela

Ceno moramo nastaviti kot ciljno, tako da jo odstranimo iz train_data. Prepričajte se, da morajo biti atributi, ki so prisotni v podatkih usposabljanja in testiranja, v tej fazi enaki.

tarča = vlak_podatki [ 'price' ]

vlak_podatki = vlak_podatki. padec ( [ 'price' ] , os = 1 )

tiskanje ( vlak_podatki. info ( ) )

tiskanje ( testni_podatki1. info ( ) )

Izhod:

Zdaj obstajajo štirje neodvisni atributi (postelje, kopeli, velikost in velikost_parcele), cena pa je odvisni atribut, ki je odvisen od teh štirih atributov.

6. Usposabljanje modela

Najprej uporabimo algoritem RandomForestRegressor. Uvozite ga iz paketa “sklearn.ensemble”. To je tehnika združevanja.

  1. Ustvarite model iz RandomForestRegressor(). Temu modelu ne posredujemo nobenega parametra. Torej je število odločitvenih dreves privzeto 100.
  2. Za prilagajanje modela uporabite metodo fit(). Zahteva dva parametra. Prvi parameter so odvisni atributi, drugi parameter pa oznaka/cilj razreda.
  3. Za ogled natančnosti modela uporabite metodo score(). Prav tako uporablja enake parametre, podobne metodi fit().
od naučil ansambel uvoz RandomForestRegressor

# Določite model

model1 = RandomForestRegressor ( )

# Prilagodite model

model1. fit ( vlak_podatki , tarča )

# Natančnost modela

tiskanje ( model1. rezultat ( vlak_podatki , tarča ) * 100 )

Izhod:

86.08400889419033

7. Preizkusite model in shranite rezultate

To je zadnji korak, kjer moramo predvideti rezultat in ga shraniti.

  1. Metoda predict() se uporablja za predvidevanje testnih podatkov. Uporablja se z modelom in zajema ugnezdeni seznam vrednosti/DataFrame.
  2. Za shranjevanje rezultatov v datoteko CSV uporabite metodo to_csv().
  3. Prenesite datoteko iz okolja Python (Google Colab).
# Napovedujte testne_podatke1 z modelom1.

testni_podatki [ 'Cena' ] = model1. napovedati ( testni_podatki1 )

# Shranite test_data v test_results.csv

testni_podatki. to_csv ( 'test_results.csv' )

# Prenesite to datoteko iz Colaba

datoteke. Prenesi ( 'test_results.csv' )

Izhod:

Pokažimo 20 zapisov od 505 zapisov. Vidite lahko, da stolpec Cena vsebuje predvidene vrednosti za vsako hišo.

Drugi modeli

Predvidimo hiše z uporabo DecisionTreeRegressor. Uvozite ga lahko iz modula “sklearn.tree”.

od naučil drevo uvoz DecisionTreeRegressor

# Določite model

model2 = DecisionTreeRegressor ( )

# Prilagodite model

model2. fit ( vlak_podatki , tarča )

# Natančnost modela

tiskanje ( model2. rezultat ( vlak_podatki , tarča ) * 100 )

# Napovedujte testne_podatke1 z modelom1.

testni_podatki [ 'Cena' ] = model2. napovedati ( testni_podatki1 )

# Shranite test_data v test_results.csv

testni_podatki. to_csv ( 'test_results.csv' )

# Prenesite to datoteko iz Colaba

datoteke. Prenesi ( 'test_results.csv' )

Izhod:

99.94183165335028

Predviden rezultat si lahko ogledate tukaj:

Napovejmo hiše z uporabo LinearrEgression. Uvozite model iz modula “sklearn.linear_model”.

od naučil linearni_model uvoz Linearna regresija

# Določite model

model3 = Linearna regresija ( )

# Prilagodite model

model3. fit ( vlak_podatki , tarča )

# Napovedujte testne_podatke1 z modelom1.

testni_podatki [ 'Cena' ] = model3. napovedati ( testni_podatki1 )

# Shranite test_data v test_results.csv

testni_podatki. to_csv ( 'test_results.csv' )

# Prenesite to datoteko iz Colaba

datoteke. Prenesi ( 'test_results.csv' )

Predvideni rezultat si lahko ogledate tukaj:

Zaključek

Zdaj lahko napoveste ceno svoje hiše na podlagi atributov, kot so število sob, površina vašega zemljišča itd. V tem vodniku smo upoštevali resnične podatke o hišah iz Seattla v Washingtonu. Z uporabo regresijskih tehnik, kot so linearna regresija, drevo odločitev in naključni gozd, smo predvideli ceno 505 hiš. Vsi koraki (predhodna obdelava podatkov, čiščenje podatkov in vizualizacija podatkov), ki jih je treba opraviti pred usposabljanjem modela, so razloženi korak za korakom z delčki kode in rezultati.