Förutsägelse av huspris i USA

Forutsagelse Av Huspris I Usa



Att bygga ett hus är en av de utmanande faktorerna i våra liv. Innan bygget går det att uppskatta priset på ditt hus utifrån det tidigare husets pris. De faktorer som i hög grad påverkar huspriset inkluderar det totala antalet rum (säng, bad, etc.) och markens yta. Genom detta kan vi uppskatta den nödvändiga budgeten för att bygga huset.

I den här guiden kommer vi att se hur man förutsäger priset på de amerikanska husen med hjälp av Machine Learning genom Python. Först diskuterar vi datamängden som vi använder och förbearbetar sedan datan. Därefter visualiserar vi attributen som finns i datasetet och tillämpar olika maskininlärningsalgoritmer på träningsdataset (Seattle, Washington augusti 2022 – december 2022). Slutligen avslutar vi den här guiden med att förutsäga priset på några hus som finns i testdatauppsättningen. Innan vi börjar implementera detta projekt måste vi förstå maskininlärningsterminologierna som används i det här projektet.







Regression

I maskininlärning, om du arbetar med numerisk data, måste du förstå regression. Regression är en övervakad inlärningsteknik inom maskininlärning som används för att förstå sambandet mellan oberoende attribut och beroende attribut (klassetikett/mål). Maskinen förutsäger huspriset genom att lära sig varje post som finns i datamängden. Därför är det ett övervakat lärande.



Till exempel i vårt scenario är de oberoende attributen antal bäddar, antal bad, storlek på mark, postnummer etc. Utifrån dessa kan vi förutsäga vårt huspris. Så det här är de oberoende attributen som inte beror på någonting. Priset är målattributet eller klassetiketten som beror på dessa attribut.



1. Linjär regression

Algoritmen för linjär regression visar ett linjärt samband mellan variablerna för beroende attribut (Y) och oberoende attribut (X). Matematiskt kan vi utvärdera det enligt följande:





OCH = aX+b

Här är 'a' och 'b' linjära koefficienter.

I Python är LinearRegression() tillgänglig i modulen 'sklearn.linear_model'. Vi kommer att se hur man specificerar detta under genomförandet av projektet. Följande är modellen med parametrar:



2. Beslutsträd

I grund och botten är ett beslutsträd en grafisk representation för att få alla möjliga lösningar på ett problem baserat på de villkor som ges med hjälp av noderna. Beslutsnoden används för att fatta beslutet och lövnoden hänvisar till resultatet av ett specifikt beslut. Vi kan förutsäga priset på vårt hus med Decision Tree Regressor.

I Python är DecisionTreeRegressor tillgänglig i modulen 'sklearn.tree'. Vi kommer att se hur man specificerar detta under genomförandet av projektet. Följande är modellen med parametrar:

3. Random Forest

Random Forest utför samma funktionalitet som liknar ett beslutsträd. Men det krävs en skog (samling av beslutsträd) och kombinera (medelvärde) alla resultat från beslutsträden. Till exempel är Random Forest-storleken 3. Så internt skapas tre beslutsträd och husprisutfallet för det första beslutsträdet är 20000. Husprisutfallet för det andra beslutsträdet är 20000. Och husprisutfallet av det sista beslutsträdet är 10 000. 16 666 666 är det slutliga resultatet ((20000+20000+10000)/3).

I Python är RandomForestRegressor tillgänglig i modulen 'sklearn.ensemble'. Följande är modellen med parametrar. Vi kan specificera antalet träd i parametern 'n_estimators'. Det är 100 som standard.

Genomförande

Se snabbt stegen för att förutsäga det amerikanska huspriset. Vi betraktar datasetet houses_train (CSV-fil) med 2016-poster (används för att träna Machine Learning-modellen). Sedan förutsäger vi husets prisposter (505) som finns i house_test-filen.

1. Laddar tåg- och testdatauppsättningarna

Pandas är den tillgängliga modulen i Python som används för dataanalys. Vi använder den här modulen för att ladda datauppsättningarna till Python-miljön. Här använder vi Google Co som Kodmiljön. Detta är tillgängligt gratis. Bara ett Google-konto behövs.

Först måste vi ladda filerna från vår lokala PC till Colab Env. Ladda ner datamängder från här .

# Ladda upp filerna houses_train.csv och house_test.csv till din Google Colab

# en efter en.

från Google. ET AL importera filer

filer. ladda upp ( )

Read_csv() är funktionen som används för att ladda CSV-data till en variabel. Den tar filnamnet som parameter.

importera pandor

# Ladda houses_train.csv till variabeln train_data

train_data = pandor. read_csv ( 'hus_tåg.csv' )

# Ladda house_test.csv till variabeln test_data

testdata = pandor. read_csv ( 'house_test.csv' )

# Lagra test_data i variabeln test_data1

test_data1 = testdata

Låt oss se kolumnerna och antalet icke-nullposter i varje kolumn. Pandas.DataFrame.info() används för att få denna information.

skriva ut ( tågdata. info ( ) )

skriva ut ( test_data1. info ( ) )

Produktion:

2. Dataförbehandling

I båda datamängderna innehåller kolumnen 'lot_size' värdena med sqft och acre (Du hittar variansen genom att se raderna i kolumnen 'lot_size_unit's'). Men formatet bör vara i sqft. Så vi måste konvertera värdena i kolumnen 'lot_size' från acre till sqft. På samma sätt ska detta göras för 'test_data1'.

DataFrame.loc[] används här för att hitta 'lot_size_units' med 'acre' och multiplicera värdet som finns i 'lot_size' med 43560.

# Konvertera lot_size acre-värdena till kvadratfot i train_data

tågdata. plats [ ( tågdata [ 'lot_size_units' ] == 'tunnland' ) , 'Partistorlek' ] = tågdata [ 'Partistorlek' ] * 43560

# Konvertera lot_size acre-värdena till kvadratfot i test_data1

test_data1. plats [ ( test_data1 [ 'lot_size_units' ] == 'tunnland' ) , 'Partistorlek' ] = test_data1 [ 'Partistorlek' ] * 43560

skriva ut ( tågdata. huvud ( ) )

skriva ut ( test_data1. huvud ( ) )

Produktion:

Nu kommer du att se att alla värden i kolumnen 'lot_size' är sqft-värden.

Du ser några saknade värden i den här kolumnen. Låt oss ersätta NaN-värdena som finns i kolumnerna med medelvärdet av samma kolumn i båda datamängderna.

DataFrame[‘column_name’].fillna() används för att fylla de saknade värdena med medelvärdet med hjälp av mean()-funktionen. DataFrame['column_name'].mean() skickas som en parameter till finna()-funktionen. Låt oss visa medelvärdet och se räkningen nu:

# Fyll i de saknade värdena i kolumnen lot_size med medelvärde av befintliga värden

tågdata [ 'Partistorlek' ] = tågdata [ 'Partistorlek' ] . fillna ( tågdata [ 'Partistorlek' ] . betyda ( ) )

# Visa medelvärde

skriva ut ( 'Tågdata medelvärde: ' , tågdata [ 'Partistorlek' ] . betyda ( ) )

skriva ut ( endast ( tågdata [ 'Partistorlek' ] ) )

# Fyll i de saknade värdena i kolumnen lot_size med medelvärde av befintliga värden

test_data1 [ 'Partistorlek' ] = test_data1 [ 'Partistorlek' ] . fillna ( test_data1 [ 'Partistorlek' ] . betyda ( ) )

# Visa medelvärde

skriva ut ( 'Testdata medelvärde: ' , test_data1 [ 'Partistorlek' ] . betyda ( ) )

skriva ut ( endast ( test_data1 [ 'Partistorlek' ] ) )

Produktion:

De saknade värdena som finns i kolumnen 'lot_size' Tågdatauppsättning ersätts med medelvärdet 18789.95194 och de saknade värdena som finns i kolumnen 'lot_size' Testdataset ersätts med medelvärdet 8961.0

3. Datarensning

När du tränar modellen finns det några onödiga attribut som inte krävs för att förutsäga resultatet. I vårt fall finns det tre attribut som är 'lot_size_units', 'zip_code' och 'size_units' som ska tas bort från båda datamängderna. Pandas.DataFrame.drop() används för att ta bort dessa tre kolumner från båda datamängderna.

tågdata = tågdata. släppa ( [ 'lot_size_units' , 'postnummer' , 'storleksenheter' ] , axel = 1 )

test_data1 = test_data1. släppa ( [ 'lot_size_units' , 'postnummer' , 'storleksenheter' ] , axel = 1 )

skriva ut ( tågdata. info ( ) )

skriva ut ( test_data1. info ( ) )

Produktion:

Nu är datauppsättningarna i gott skick. Onödiga kolumner tas bort och de saknade värdena finns inte.

4. Datavisualisering

Låt oss skapa ett histogram för kolumnerna i tågdata. Funktionen pandas.DataFrame.hist() används för att generera histogram för alla attribut.

tågdata. hist ( fikonstorlek = ( 4 , 9 ) )

Produktion:

Histogram genereras för sängar, bad, storlek, lot_size och priskolumner för tågdata.

Låt oss skapa korrelationen för alla fält med avseende på varandra. Modulen Plotly.express används för att plotta de korrelerade värdena.

importera plottrigt. uttrycka

corr = tågdata. corr ( )

# Rita de korrelerade data

view_fig = plottrigt. uttrycka . imshow ( corr , text_auto = Sann )

# Display

view_fig. show ( )

Produktion:

  1. Sängarna är 0,2935 korrelerade med priset, -0,059 korrelerade med lot_size, 0,77 korrelerade med storleken och 0,65 korrelerade med bad.
  2. Baden är 0,3173 korrelerade med priset, -0,054 korrelerade med lot_size, 0,667 korrelerade med baden och 0,771 korrelerade med sängar.
  3. Storleken är 0,444 korrelerad med priset, -0,044 korrelerad med lot_size, 0,667 korrelerad med storleken och 0,652 korrelerad med sängar.

5. Modellförberedelse

Vi måste ställa in priset som mål genom att ta bort det från train_data. Se till att attributen som finns i tåg- och testdata ska vara desamma i denna fas.

mål = tågdata [ 'pris' ]

tågdata = tågdata. släppa ( [ 'pris' ] , axel = 1 )

skriva ut ( tågdata. info ( ) )

skriva ut ( test_data1. info ( ) )

Produktion:

Nu finns det fyra oberoende attribut (sängar, bad, storlek och lot_size) och priset är det beroende attributet som beror på dessa fyra attribut.

6. Utbilda modellen

Först använder vi RandomForestRegressor-algoritmen. Importera den från paketet 'sklearn.ensemble'. Det är en ensemblingsteknik.

  1. Skapa en modell från RandomForestRegressor(). Vi skickar ingen parameter till denna modell. Så antalet beslutsträd är 100 som standard.
  2. Använd metoden fit() för att passa modellen. Det krävs två parametrar. Den första parametern är de beroende attributen och den andra parametern är klassetiketten/målet.
  3. Använd metoden score() för att se modellnoggrannheten. Det tar också samma parametrar som liknar fit()-metoden.
från lärt mig ensemble importera RandomForestRegressor

# Definiera modellen

modell1 = RandomForestRegressor ( )

# Passa in modellen

modell1. passa ( tågdata , mål )

# Modellnoggrannhet

skriva ut ( modell1. Göra ( tågdata , mål ) * 100 )

Produktion:

86.08400889419033

7. Testa modellen och lagra resultaten

Detta är det sista steget där vi måste förutsäga resultatet och lagra dem.

  1. Metoden predict() används för att förutsäga testdata. Den används med modellen och tar den kapslade värdelistan/DataFrame.
  2. Använd metoden to_csv() för att lagra resultaten i CSV-filen.
  3. Ladda ner filen från Python-miljön (Google Colab).
# Förutsäg test_data1 med modellen1.

testdata [ 'Pris' ] = modell1. förutse ( test_data1 )

# Spara test_data till test_results.csv

testdata. to_csv ( 'test_results.csv' )

# Ladda ner den här filen från Colab

filer. ladda ner ( 'test_results.csv' )

Produktion:

Låt oss visa 20 poster av 505 poster. Du kan se att kolumnen Pris innehåller de förväntade värdena för varje hus.

Andra modeller

Låt oss förutsäga husen med hjälp av DecisionTreeRegressor. Du kan importera den från modulen 'sklearn.tree'.

från lärt mig träd importera DecisionTreeRegressor

# Definiera modellen

modell2 = DecisionTreeRegressor ( )

# Passa in modellen

modell2. passa ( tågdata , mål )

# Modellnoggrannhet

skriva ut ( modell2. Göra ( tågdata , mål ) * 100 )

# Förutsäg test_data1 med modellen1.

testdata [ 'Pris' ] = modell2. förutse ( test_data1 )

# Spara test_data till test_results.csv

testdata. to_csv ( 'test_results.csv' )

# Ladda ner den här filen från Colab

filer. ladda ner ( 'test_results.csv' )

Produktion:

99,94183165335028

Du kan se det förväntade resultatet här:

Låt oss förutsäga husen med hjälp av LinearrEgression. Importera modellen från modulen 'sklearn.linear_model'.

från lärt mig linjär_modell importera Linjär regression

# Definiera modellen

modell3 = Linjär regression ( )

# Passa in modellen

modell3. passa ( tågdata , mål )

# Förutsäg test_data1 med modellen1.

testdata [ 'Pris' ] = modell3. förutse ( test_data1 )

# Spara test_data till test_results.csv

testdata. to_csv ( 'test_results.csv' )

# Ladda ner den här filen från Colab

filer. ladda ner ( 'test_results.csv' )

Du kan se det förväntade resultatet här:

Slutsats

Nu kan du förutsäga ditt huspris baserat på attribut som antalet rum, arean på din mark, etc. I den här guiden tog vi hänsyn till de riktiga husdata från Seattle, Washington. Med hjälp av regressionstekniker som linjär regression, beslutsträd och slumpmässig skog förutspådde vi priset på 505 hus. Alla steg (dataförbearbetning, datarensning och datavisualisering) som måste göras innan man tränar modellen förklaras steg för steg med kodsnuttar och utdata.