Yhdysvaltain asuntojen hintaennuste

Yhdysvaltain Asuntojen Hintaennuste



Talon rakentaminen on yksi elämämme haastavista tekijöistä. Ennen rakentamista on mahdollista arvioida talosi hinta edellisen talon hinnan perusteella. Asunnon hintaan merkittävästi vaikuttavia tekijöitä ovat huoneiden kokonaismäärä (sänky, kylpyhuone jne.) ja tontin pinta-ala. Tämän perusteella voimme arvioida talon rakentamiseen tarvittavan budjetin.

Tässä oppaassa näemme kuinka ennustaa yhdysvaltalaisten talojen hinnat koneoppimisen avulla Pythonin kautta. Ensin keskustellaan käyttämästämme tietojoukosta ja sitten esikäsittelemme tiedot. Tämän jälkeen visualisoimme tietojoukossa olevat attribuutit ja käytämme erilaisia ​​koneoppimisalgoritmeja koulutustietojoukossa (Seattle, Washington elokuu 2022 – joulukuu 2022). Lopuksi päätämme tämän oppaan ennustamalla joidenkin testitietojoukossa olevien talojen hinnat. Ennen kuin aloitamme tämän projektin toteuttamisen, meidän on ymmärrettävä tässä projektissa käytetyt koneoppimisen terminologiat.







Regressio

Jos työskentelet koneoppimisessa numeerisen datan kanssa, sinun on ymmärrettävä regressio. Regressio on koneoppimisen valvottu oppimistekniikka, jota käytetään ymmärtämään riippumattomien attribuuttien ja riippuvien attribuuttien (luokan nimi/kohde) välistä suhdetta. Kone ennustaa asunnon hinnan oppimalla jokaisen tietojoukossa olevan tietueen. Siksi se on ohjattua oppimista.



Esimerkiksi skenaariossamme riippumattomia attribuutteja ovat sänkyjen lukumäärä, kylpytilojen lukumäärä, maan koko, postinumero jne. Näiden perusteella voimme ennustaa asunnon hintamme. Nämä ovat siis itsenäisiä attribuutteja, jotka eivät riipu mistään. Hinta on kohdemäärite tai luokkatunniste, joka riippuu näistä määritteistä.



1. Lineaarinen regressio

Lineaarinen regressio-algoritmi näyttää lineaarisen suhteen riippuvaisen attribuutin (Y) ja riippumattoman attribuuttimuuttujien (X) välillä. Matemaattisesti voimme arvioida sen seuraavasti:





JA = aX+b

Tässä 'a' ja 'b' ovat lineaarisia kertoimia.

Pythonissa LinearRegression() on käytettävissä 'sklearn.linear_model' -moduulissa. Katsotaan kuinka tämä määritellään projektin toteutuksen aikana. Seuraava on malli parametreineen:



2. Päätöspuu

Pohjimmiltaan päätöspuu on graafinen esitys, jolla saadaan kaikki mahdolliset ratkaisut ongelmaan solmujen avulla tarjottujen ehtojen perusteella. Päätössolmua käytetään päätöksen tekemiseen ja Leaf-solmu viittaa tietyn päätöksen tulosteeseen. Voimme ennustaa talomme hinnan Decision Tree Regressorin avulla.

Pythonissa DecisionTreeRegressor on saatavilla 'sklearn.tree'-moduulissa. Katsotaan kuinka tämä määritellään projektin toteutuksen aikana. Seuraava on malli parametreineen:

3. Random Forest

Random Forest suorittaa samat toiminnot kuin päätöspuu. Mutta se vaatii metsän (päätöspuiden kokoelma) ja yhdistää (keskiarvo) kaikki päätöspuiden tulokset. Esimerkiksi satunnaisen metsän koko on 3. Sisäisesti luodaan siis kolme päätöspuuta ja ensimmäisen päätöspuun talohintatulos on 20 000. Toisen päätöspuun talohintatulos on 20 000. Ja talon hintatulos viimeinen päätöspuu on 10 000. 16 666 666 on lopputulos ((20000+20000+10000)/3).

Pythonissa RandomForestRegressor on saatavilla 'sklearn.ensemble' -moduulissa. Seuraava on malli parametreineen. Voimme määrittää puiden lukumäärän 'n_estimators'-parametrissa. Se on oletuksena 100.

Toteutus

Katso nopeasti Yhdysvaltain asuntojen hinnan ennustamiseen liittyvät vaiheet. Otamme huomioon houses_train (CSV-tiedosto) -tietojoukon, jossa on vuoden 2016 tietueita (käytetään koneoppimismallin kouluttamiseen). Sitten ennustamme talon hinta (505) tietueet, jotka ovat house_test-tiedostossa.

1. Ladataan juna- ja testitietojoukot

Pandas on Pythonissa saatavilla oleva moduuli, jota käytetään tietojen analysointiin. Käytämme tätä moduulia lataamaan tietojoukot Python-ympäristöön. Tässä käytämme Google Co koodiympäristönä. Tämä on saatavilla ilmaiseksi. Tarvitset vain Google-tilin.

Ensin meidän on ladattava tiedostot paikalliselta tietokoneeltamme Colab Env. Lataa tietojoukot osoitteesta tässä .

# Lataa houses_train.csv- ja house_test.csv-tiedostot Google Colabiin

# yksi toisensa jälkeen.

alkaen Google. ET AL tuonti tiedostot

tiedostot. lataa ( )

Read_csv() on funktio, jota käytetään lataamaan CSV-tiedot muuttujaan. Se ottaa tiedostonimen parametriksi.

tuonti pandat

# Lataa houses_train.csv muuttujaan train_data

junan_data = pandat. read_csv ( 'houses_train.csv' )

# Lataa house_test.csv test_data-muuttujaan

testi_tiedot = pandat. read_csv ( 'house_test.csv' )

# Tallenna test_data muuttujaan test_data1

testi_tiedot1 = testi_tiedot

Tarkastelemme sarakkeita ja ei-nollatietueita kussakin sarakkeessa. Pandas.DataFrame.info() käytetään näiden tietojen saamiseen.

Tulosta ( juna_data. tiedot ( ) )

Tulosta ( testi_tiedot1. tiedot ( ) )

Lähtö:

2. Tietojen esikäsittely

Molemmissa tietojoukoissa 'lot_size'-sarake sisältää arvot, joissa on sqft ja acre (löydät varianssin katsomalla 'lot_size_unit's'-sarakkeen rivit. Mutta muodon tulisi olla neliöjalkaa. Joten meidän on muutettava 'lot_size' -sarakkeen arvot hehtaareista neliöjalkaiksi. Samoin tämä on tehtävä 'testitiedot1'-arvolle.

DataFrame.loc[]-funktiota käytetään tässä etsimään 'lot_size_units' ja 'acre' ja kertomaan 'lot_size':ssä oleva arvo luvulla 43560.

# Muunna lot_size eekkeriarvot neliöjalkoiksi junatiedoissa

junan_data. paikka [ ( junan_data [ 'erän_kokoyksiköt' ] == 'acre' ) , 'erän_koko' ] = junan_data [ 'erän_koko' ] * 43560

# Muunna lot_size acre-arvot neliöjaloksi tiedostossa test_data1

testi_tiedot1. paikka [ ( testi_tiedot1 [ 'erän_kokoyksiköt' ] == 'acre' ) , 'erän_koko' ] = testi_tiedot1 [ 'erän_koko' ] * 43560

Tulosta ( juna_data. pää ( ) )

Tulosta ( testi_tiedot1. pää ( ) )

Lähtö:

Nyt näet, että kaikki lot_size-sarakkeen arvot ovat neliöjalka-arvoja.

Tässä sarakkeessa on puuttuvia arvoja. Korvataan sarakkeissa olevat NaN-arvot saman sarakkeen keskiarvolla molemmissa tietojoukoissa.

DataFrame['sarakkeen_nimi'].fillna()-komentoa käytetään täyttämään puuttuvat arvot keskiarvolla mean()-funktion avulla. DataFrame['sarakkeen_nimi'].mean() välitetään parametrina finna()-funktiolle. Näytetään keskiarvo ja katsotaan nyt luku:

# Täytä lot_size-sarakkeen puuttuvat arvot olemassa olevien arvojen keskiarvolla

juna_data [ 'lot_size' ] = juna_data [ 'lot_size' ] . tuntea ( juna_data [ 'lot_size' ] . tarkoittaa ( ) )

# Näytön keskiarvo

Tulosta ( 'Junatietojen keskiarvo: ' , juna_data [ 'lot_size' ] . tarkoittaa ( ) )

Tulosta ( vain ( junan_data [ 'lot_size' ] ) )

# Täytä lot_size-sarakkeen puuttuvat arvot olemassa olevien arvojen keskiarvolla

testi_tiedot1 [ 'lot_size' ] = testi_tiedot1 [ 'lot_size' ] . tuntea ( testi_tiedot1 [ 'lot_size' ] . tarkoittaa ( ) )

# Näytön keskiarvo

Tulosta ( 'Testitietojen keskiarvo: ' , testi_tiedot1 [ 'lot_size' ] . tarkoittaa ( ) )

Tulosta ( vain ( testi_tiedot1 [ 'lot_size' ] ) )

Lähtö:

Puuttuvat arvot, jotka ovat 'lot_size'-sarakkeessa Train Dataset, korvataan keskiarvolla 18789.95194 ja puuttuvat arvot, jotka ovat 'lot_size'-sarakkeessa Test Dataset korvataan keskiarvolla 8961.0

3. Tietojen puhdistus

Mallia opetettaessa on joitain tarpeettomia attribuutteja, joita ei vaadita tuloksen ennustamiseen. Meidän tapauksessamme on kolme attribuuttia, jotka ovat 'lot_size_units', 'zip_code' ja 'size_units', jotka on poistettava molemmista tietojoukoista. Pandas.DataFrame.drop()-komentoa käytetään poistamaan nämä kolme saraketta molemmista tietojoukoista.

junan_data = junan_data. pudota ( [ 'lot_size_units' , 'postinumero' , 'size_units' ] , akseli = 1 )

testi_tiedot1 = testi_tiedot1. pudota ( [ 'lot_size_units' , 'postinumero' , 'size_units' ] , akseli = 1 )

Tulosta ( juna_data. tiedot ( ) )

Tulosta ( testi_tiedot1. tiedot ( ) )

Lähtö:

Nyt tietojoukot ovat hyvässä kunnossa. Tarpeettomat sarakkeet poistetaan, eikä puuttuvia arvoja ole olemassa.

4. Tietojen visualisointi

Luodaan histogrammi junatietojen sarakkeille. Pandas.DataFrame.hist()-funktiota käytetään luomaan histogrammit kaikille määritteille.

juna_data. hist ( viikunan kokoinen = ( 4 , 9 ) )

Lähtö:

Junatietojen histogrammi luodaan vuoteille, kylpyammeille, koko-, lot_size- ja hintasarakkeille.

Luodaan korrelaatio kaikille kentälle suhteessa toisiinsa. Plotly.express-moduulia käytetään korreloitujen arvojen kuvaamiseen.

tuonti juonimainen. ilmaista

korr = juna_data. korr ( )

# Piirrä vastaavat tiedot

view_fig = juonimainen. ilmaista . imshow ( korr , text_auto = Totta )

# Näyttö

view_fig. näytä ( )

Lähtö:

  1. Sängyt korreloivat hintaan 0,2935, lot_size -0,059, koon 0,77 ja kylpyammeet 0,65.
  2. Kylpyammeet korreloivat 0,3173 hinnan kanssa, -0,054 korreloivat lot_size:n kanssa, 0,667 korreloivat kylpyjen kanssa ja 0,771 korreloivat sänkyjen kanssa.
  3. Koko korreloi hintaan 0,444, lot_size -0,044, kokoon 0,667 ja sänkyyn 0,652.

5. Mallin valmistelu

Meidän on asetettava hinta tavoitteeksi poistamalla se juna_datasta. Varmista, että Train and Test datassa olevien attribuuttien tulee olla samat tässä vaiheessa.

kohde = juna_data [ 'hinta' ]

junan_data = juna_data. pudota ( [ 'hinta' ] , akseli = 1 )

Tulosta ( juna_data. tiedot ( ) )

Tulosta ( testi_tiedot1. tiedot ( ) )

Lähtö:

Nyt on neljä riippumatonta attribuuttia (sängyt, kylpyhuoneet, koko ja lot_size), ja hinta on riippuvainen attribuutti, joka riippuu näistä neljästä attribuutista.

6. Mallin kouluttaminen

Ensin käytämme RandomForestRegressor-algoritmia. Tuo se 'sklearn.ensemble' -paketista. Se on kokoonpanotekniikka.

  1. Luo malli RandomForestRegressor(:sta). Emme välitä mitään parametria tälle mallille. Joten päätöspuiden määrä on oletusarvoisesti 100.
  2. Käytä fit()-menetelmää mallin sovittamiseksi. Se vaatii kaksi parametria. Ensimmäinen parametri on riippuvat attribuutit ja toinen parametri on luokan otsikko/kohde.
  3. Käytä score()-menetelmää nähdäksesi mallin tarkkuuden. Se ottaa myös samat parametrit, jotka ovat samanlaisia ​​kuin fit()-menetelmä.
alkaen oppinut yhtye tuonti RandomForestRegressor

# Määritä malli

malli 1 = RandomForestRegressor ( )

# Sovita malli

malli 1. sovi ( juna_data , kohde )

# Mallin tarkkuus

Tulosta ( malli 1. pisteet ( juna_data , kohde ) * 100 )

Lähtö:

86.08400889419033

7. Testaa malli ja tallenna tulokset

Tämä on viimeinen vaihe, jossa meidän on ennakoitava tulos ja tallennettava ne.

  1. Prognoosi () -menetelmää käytetään testitietojen ennustamiseen. Sitä käytetään mallin kanssa ja se ottaa sisäkkäisen arvoluettelon/DataFrame-kehyksen.
  2. Käytä menetelmää to_csv() tallentaaksesi tulokset CSV-tiedostoon.
  3. Lataa tiedosto Python-ympäristöstä (Google Colab).
# Ennusta test_data1 mallilla1.

testi_tiedot [ 'Hinta' ] = malli 1. ennustaa ( testi_tiedot1 )

# Tallenna test_data tiedostoon test_results.csv

testi_tiedot. to_csv ( 'test_results.csv' )

# Lataa tämä tiedosto Colabista

tiedostot. ladata ( 'test_results.csv' )

Lähtö:

Näytämme 20 tietuetta 505 tietueesta. Voit nähdä, että Hinta-sarakkeessa on kunkin talon ennustetut arvot.

Muut mallit

Ennustetaan talot DecisionTreeRegressorin avulla. Voit tuoda sen 'sklearn.tree' -moduulista.

alkaen oppinut puu tuonti DecisionTreeRegressor

# Määritä malli

malli 2 = DecisionTreeRegressor ( )

# Sovita malli

malli 2. sovi ( juna_data , kohde )

# Mallin tarkkuus

Tulosta ( malli 2. pisteet ( juna_data , kohde ) * 100 )

# Ennusta test_data1 mallilla1.

testi_tiedot [ 'Hinta' ] = malli 2. ennustaa ( testi_tiedot1 )

# Tallenna test_data tiedostoon test_results.csv

testi_tiedot. to_csv ( 'test_results.csv' )

# Lataa tämä tiedosto Colabista

tiedostot. ladata ( 'test_results.csv' )

Lähtö:

99,94183165335028

Ennustetun tuloksen näet täältä:

Ennustetaan talot lineaarisella egressiolla. Tuo malli 'sklearn.linear_model' -moduulista.

alkaen oppinut lineaarinen_malli tuonti Lineaarinen regressio

# Määritä malli

malli 3 = Lineaarinen regressio ( )

# Sovita malli

malli 3. sovi ( juna_data , kohde )

# Ennusta test_data1 mallilla1.

testi_tiedot [ 'Hinta' ] = malli 3. ennustaa ( testi_tiedot1 )

# Tallenna test_data tiedostoon test_results.csv

testi_tiedot. to_csv ( 'test_results.csv' )

# Lataa tämä tiedosto Colabista

tiedostot. ladata ( 'test_results.csv' )

Ennustetun tuloksen näet täältä:

Johtopäätös

Nyt voit ennustaa asuntohintasi sellaisten ominaisuuksien perusteella, kuten huoneiden lukumäärä, maasi pinta-ala jne. Tässä oppaassa tarkastelimme todellisia talotietoja Seattlesta, Washingtonista. Käyttämällä regressiotekniikoita, kuten lineaarista regressiota, päätöspuuta ja satunnaista metsää, ennustimme 505 talon hinnan. Kaikki vaiheet (tietojen esikäsittely, tietojen puhdistus ja tietojen visualisointi), jotka on suoritettava ennen mallin harjoittelua, selitetään vaihe vaiheelta koodinpätkien ja tulosteiden avulla.