Forudsigelse af huspriser i USA

Forudsigelse Af Huspriser I Usa



At bygge et hus er en af ​​de udfordrende faktorer i vores liv. Inden byggeriet er det muligt at estimere prisen på dit hus ud fra det tidligere huss pris. De faktorer, der i høj grad påvirker husprisen, omfatter det samlede antal værelser (seng, bad osv.) og arealet af grunden. På den måde kan vi estimere det nødvendige budget for at bygge huset.

I denne guide vil vi se, hvordan man forudsiger prisen på de amerikanske huse ved hjælp af Machine Learning gennem Python. Først diskuterer vi det datasæt, vi bruger, og forbehandler derefter dataene. Derefter visualiserer vi de attributter, der er til stede i datasættet og anvender forskellige Machine Learning-algoritmer på træningsdatasættet (Seattle, Washington august 2022 – december 2022). Til sidst afslutter vi denne guide med at forudsige prisen på nogle huse, der er til stede i testdatasættet. Før vi går i gang med at implementere dette projekt, er vi nødt til at forstå de Machine Learning-terminologier, der bruges i dette projekt.







Regression

I Machine Learning, hvis du arbejder med numeriske data, skal du forstå regression. Regression er en overvåget læringsteknik i maskinlæring, som bruges til at forstå forholdet mellem uafhængige attributter og afhængige attributter (klasselabel/mål). Maskinen forudsiger husprisen ved at lære hver post, der er til stede i datasættet. Derfor er det en overvåget læring.



I vores scenarie er de uafhængige attributter f.eks. antal senge, antal bade, grundstørrelse, postnummer osv. Ud fra disse er vi i stand til at forudsige vores huspris. Så det er de uafhængige egenskaber, som ikke afhænger af noget. Prisen er målattributten eller klasseetiket, som afhænger af disse attributter.



1. Lineær regression

Den lineære regressionsalgoritme viser et lineært forhold mellem den afhængige attribut (Y) og den uafhængige attribut (X) variable. Matematisk kan vi vurdere det som følger:





OG = aX+b

Her er 'a' og 'b' lineære koefficienter.

I Python er LinearRegression() tilgængelig i modulet 'sklearn.linear_model'. Vi vil se, hvordan man specificerer dette, mens projektet implementeres. Følgende er modellen med parametre:



2. Beslutningstræ

Grundlæggende er et beslutningstræ en grafisk repræsentation til at få alle mulige løsninger på et problem baseret på de betingelser, der stilles til rådighed ved brug af noderne. Beslutningsknuden bruges til at træffe beslutningen, og Bladknuden refererer til outputtet af en specifik beslutning. Vi kan forudsige prisen på vores hus med Decision Tree Regressor.

I Python er DecisionTreeRegressor tilgængelig i modulet 'sklearn.tree'. Vi vil se, hvordan man specificerer dette, mens projektet implementeres. Følgende er modellen med parametre:

3. Tilfældig Skov

Random Forest udfører den samme funktionalitet, der ligner et beslutningstræ. Men det kræver en Skov (samling af beslutningstræer) og kombinere (middelværdi) alle output fra beslutningstræerne. For eksempel er den tilfældige skovstørrelse 3. Så internt oprettes tre beslutningstræer, og husprisresultatet af det første beslutningstræ er 20.000. Husprisresultatet af det andet beslutningstræ er 20.000. Og husprisresultatet af det sidste beslutningstræ er 10000. 16.666.666 er det endelige resultat ((20000+20000+10000)/3).

I Python er RandomForestRegressor tilgængelig i modulet 'sklearn.ensemble'. Følgende er modellen med parametre. Vi kan angive antallet af træer i parameteren 'n_estimators'. Det er 100 som standard.

Implementering

Se hurtigt de trin, der er involveret i at forudsige den amerikanske huspris. Vi betragter datasættet houses_train (CSV-fil) med 2016-poster (brugt til at træne Machine Learning-modellen). Derefter forudsiger vi husets pris (505) poster, der er til stede i house_test filen.

1. Indlæsning af tog- og testdatasæt

Pandas er det tilgængelige modul i Python, der bruges til dataanalyse. Vi bruger dette modul til at indlæse datasættene i Python-miljøet. Her bruger vi Google Co som Code Environment. Dette er tilgængeligt gratis. Bare en Google-konto er nødvendig.

Først skal vi indlæse filerne fra vores lokale pc til Colab Env. Download datasættene fra her .

# Upload filerne houses_train.csv og house_test.csv til din Google Colab

# den ene efter den anden.

fra google. ET AL importere filer

filer. upload ( )

Read_csv() er den funktion, der bruges til at indlæse CSV-dataene i en variabel. Det tager filnavnet som parameter.

importere pandaer

# Indlæs houses_train.csv i train_data-variablen

tog_data = pandaer. læs_csv ( 'huse_tog.csv' )

# Indlæs house_test.csv i test_data-variablen

test_data = pandaer. læs_csv ( 'hus_test.csv' )

# Gem test_data i variabelen test_data1

test_data1 = test_data

Lad os se antallet af kolonner og ikke-nul-poster i hver kolonne. Pandas.DataFrame.info() bruges til at få disse oplysninger.

Print ( tog_data. info ( ) )

Print ( test_data1. info ( ) )

Produktion:

2. Dataforbehandling

I begge datasæt indeholder kolonnen 'lot_size' værdierne med sqft og acre (Du finder variansen ved at se rækkerne i kolonnen 'lot_size_unit's'). Men formatet skal være i sqft. Så vi skal konvertere værdierne i kolonnen 'lot_size' fra acre til sqft. På samme måde skal dette gøres for 'test_data1'.

DataFrame.loc[] bruges her til at finde 'lot_size_units' med 'acre' og gange værdien, der er til stede i 'lot_size' med 43560.

# Konverter lot_size acre-værdierne til Square feet i train_data

tog_data. placere [ ( tog_data [ 'parti_størrelse_enheder' ] == 'hektar' ) , 'parti_størrelse' ] = tog_data [ 'parti_størrelse' ] * 43560

# Konverter lot_size acre-værdierne til kvadratfod i test_data1

test_data1. placere [ ( test_data1 [ 'parti_størrelse_enheder' ] == 'hektar' ) , 'parti_størrelse' ] = test_data1 [ 'parti_størrelse' ] * 43560

Print ( tog_data. hoved ( ) )

Print ( test_data1. hoved ( ) )

Produktion:

Nu vil du se, at alle værdierne i kolonnen 'lot_size' er sqft-værdier.

Du ser nogle manglende værdier i denne kolonne. Lad os erstatte NaN-værdierne, der er til stede i kolonnerne, med middelværdien af ​​den samme kolonne i begge datasæt.

DataFrame['column_name'].fillna() bruges til at udfylde de manglende værdier med middelværdien ved hjælp af mean()-funktionen. DataFrame['column_name'].mean() sendes som en parameter til finna()-funktionen. Lad os vise gennemsnittet og se tællingen nu:

# Udfyld de manglende værdier i kolonnen lot_size med Middelværdi af eksisterende værdier

tog_data [ 'parti_størrelse' ] = tog_data [ 'parti_størrelse' ] . føle ( tog_data [ 'parti_størrelse' ] . betyde ( ) )

# Vis gennemsnit

Print ( 'Togdata gennemsnitsværdi: ' , tog_data [ 'parti_størrelse' ] . betyde ( ) )

Print ( kun ( tog_data [ 'parti_størrelse' ] ) )

# Udfyld de manglende værdier i kolonnen lot_size med Middelværdi af eksisterende værdier

test_data1 [ 'parti_størrelse' ] = test_data1 [ 'parti_størrelse' ] . føle ( test_data1 [ 'parti_størrelse' ] . betyde ( ) )

# Vis gennemsnit

Print ( 'Testdata gennemsnitsværdi: ' , test_data1 [ 'parti_størrelse' ] . betyde ( ) )

Print ( kun ( test_data1 [ 'parti_størrelse' ] ) )

Produktion:

De manglende værdier, der er til stede i kolonnen 'lot_size' Togdatasæt erstattes af middelværdien på 18789.95194, og de manglende værdier, der er til stede i kolonnen 'lot_size' Testdatasæt, erstattes af middelværdien på 8961.0

3. Datarensning

Mens du træner modellen, er der nogle unødvendige egenskaber, som ikke er nødvendige for at forudsige resultatet. I vores tilfælde er der tre attributter, som er 'lot_size_units', 'zip_code' og 'size_units', der skal fjernes fra begge datasæt. Pandas.DataFrame.drop() bruges til at fjerne disse tre kolonner fra begge datasæt.

tog_data = tog_data. dråbe ( [ 'parti_størrelse_enheder' , 'postnummer' , 'størrelse_enheder' ] , akse = 1 )

test_data1 = test_data1. dråbe ( [ 'parti_størrelse_enheder' , 'postnummer' , 'størrelse_enheder' ] , akse = 1 )

Print ( tog_data. info ( ) )

Print ( test_data1. info ( ) )

Produktion:

Nu er datasættene i god stand. Unødvendige kolonner fjernes, og de manglende værdier eksisterer ikke.

4. Datavisualisering

Lad os oprette et histogram for kolonnerne i togdataene. Funktionen pandas.DataFrame.hist() bruges til at generere histogrammer for alle attributter.

tog_data. hist ( figenstørrelse = ( 4 , 9 ) )

Produktion:

Histogram genereres for senge, bade, størrelse, lot_size og priskolonner for togdata.

Lad os skabe sammenhængen for alle felter med hensyn til hinanden. Plotly.express-modulet bruges til at plotte de korrelerede værdier.

importere plottet. udtrykke

korr = tog_data. korr ( )

# Plot de korrelerede data

view_fig = plottet. udtrykke . imshow ( korr , tekst_auto = Rigtigt )

# Skærm

view_fig. at vise ( )

Produktion:

  1. Sengene er 0,2935 korreleret med prisen, -0,059 korreleret med lot_size, 0,77 korreleret med størrelsen og 0,65 korreleret med bade.
  2. Badene er 0,3173 korreleret med prisen, -0,054 korreleret med lot_size, 0,667 korreleret med badene og 0,771 korreleret med senge.
  3. Størrelsen er 0,444 korreleret med prisen, -0,044 korreleret med lot_size, 0,667 korreleret med størrelsen og 0,652 korreleret med senge.

5. Modelforberedelse

Vi skal indstille prisen som målet ved at fjerne den fra train_data. Sørg for, at de attributter, der er til stede i tog- og testdataene, skal være de samme i denne fase.

mål = tog_data [ 'pris' ]

tog_data = tog_data. dråbe ( [ 'pris' ] , akse = 1 )

Print ( tog_data. info ( ) )

Print ( test_data1. info ( ) )

Produktion:

Nu er der fire uafhængige attributter (senge, bade, størrelse og lot_size), og prisen er den afhængige attribut, der afhænger af disse fire attributter.

6. Træning af modellen

Først anvender vi RandomForestRegressor-algoritmen. Importer det fra 'sklearn.ensemble'-pakken. Det er en ensemblingsteknik.

  1. Opret en model fra RandomForestRegressor(). Vi overfører ikke nogen parameter til denne model. Så antallet af beslutningstræer er 100 som standard.
  2. Brug metoden fit() til at passe til modellen. Det kræver to parametre. Den første parameter er de afhængige attributter, og den anden parameter er klasseetiketten/målet.
  3. Brug metoden score() til at se modelnøjagtigheden. Det tager også de samme parametre svarende til metoden fit().
fra lærte ensemble importere RandomForestRegressor

# Definer modellen

model1 = RandomForestRegressor ( )

# Tilpas modellen

model1. passe ( tog_data , mål )

# Modelnøjagtighed

Print ( model1. score ( tog_data , mål ) * 100 )

Produktion:

86.08400889419033

7. Test modellen og gem resultaterne

Dette er det sidste trin, hvor vi skal forudsige resultatet og gemme dem.

  1. Predict()-metoden bruges til at forudsige testdataene. Den bruges sammen med modellen og tager den indlejrede liste over værdier/DataFrame.
  2. Brug metoden to_csv() til at gemme resultaterne i CSV-filen.
  3. Download filen fra Python-miljøet (Google Colab).
# Forudsig test_data1 med model1.

test_data [ 'Pris' ] = model1. forudsige ( test_data1 )

# Gem test_data til test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Download denne fil fra Colab

filer. Hent ( 'test_results.csv' )

Produktion:

Lad os vise 20 poster ud af 505 poster. Du kan se, at kolonnen Pris indeholder de forudsagte værdier for hvert hus.

Andre modeller

Lad os forudsige husene ved hjælp af DecisionTreeRegressor. Du er i stand til at importere det fra 'sklearn.tree' modulet.

fra lærte træ importere DecisionTreeRegressor

# Definer modellen

model 2 = DecisionTreeRegressor ( )

# Tilpas modellen

model 2. passe ( tog_data , mål )

# Modelnøjagtighed

Print ( model 2. score ( tog_data , mål ) * 100 )

# Forudsig test_data1 med model1.

test_data [ 'Pris' ] = model 2. forudsige ( test_data1 )

# Gem test_data til test_results.csv

test_data. to_csv ( 'test_results.csv' )

# Download denne fil fra Colab

filer. Hent ( 'test_results.csv' )

Produktion:

99,94183165335028

Du kan se det forventede resultat her:

Lad os forudsige husene ved hjælp af LinearrEgression. Importer modellen fra 'sklearn.linear_model'-modulet.

fra lærte lineær_model importere Lineær regression

# Definer modellen

model 3 = Lineær regression ( )

# Tilpas modellen

model 3. passe ( tog_data , mål )

# Forudsig test_data1 med model1.

test_data [ 'Pris' ] = model 3. forudsige ( test_data1 )

# Gem test_data til test_results.csv

test_data. to_csv ( 'test_resultater.csv' )

# Download denne fil fra Colab

filer. Hent ( 'test_resultater.csv' )

Du kan se det forventede resultat her:

Konklusion

Nu er du i stand til at forudsige din huspris baseret på egenskaber som antallet af værelser, arealet af din grund osv. I denne guide har vi overvejet de rigtige husdata fra Seattle, Washington. Ved at bruge regressionsteknikkerne som Lineær Regression, Decision Tree og Random Forest forudsagde vi prisen på 505 huse. Alle trin (dataforbehandling, datarensning og datavisualisering), der skal udføres før træning af modellen, forklares trin for trin med kodestykker og output.