Hula sa Presyo ng Bahay sa US

Hula Sa Presyo Ng Bahay Sa Us



Ang pagtatayo ng bahay ay isa sa mga hamon sa ating buhay. Bago ang pagtatayo, posibleng tantiyahin ang presyo ng iyong bahay batay sa presyo ng nakaraang bahay. Kabilang sa mga salik na pangunahing nakakaapekto sa presyo ng bahay ang kabuuang bilang ng mga kuwarto (kama, paliguan, atbp.) at ang lugar ng lupa. Sa pamamagitan nito, maaari nating tantiyahin ang kinakailangang badyet para sa pagpapatayo ng bahay.

Sa gabay na ito, makikita natin kung paano mahulaan ang presyo ng mga bahay sa US gamit ang Machine Learning sa pamamagitan ng Python. Una, tinatalakay namin ang dataset na ginagamit namin at pagkatapos ay i-preprocess ang data. Pagkatapos noon, nakikita namin ang mga attribute na nasa dataset at naglalapat ng iba't ibang algorithm ng Machine Learning sa dataset ng pagsasanay (Seattle, Washington Agosto 2022 – Disyembre 2022). Sa wakas, tinatapos namin ang gabay na ito sa pamamagitan ng paghula sa presyo ng ilang bahay na nasa Test dataset. Bago ipatupad ang proyektong ito, kailangan nating maunawaan ang mga terminolohiyang Machine Learning na ginagamit sa proyektong ito.







Regression

Sa Machine Learning, kung nagtatrabaho ka sa numeric data, kailangan mong maunawaan ang Regression. Ang Regression ay isang Supervised Learning Technique sa Machine Learning na ginagamit upang maunawaan ang kaugnayan sa pagitan ng mga independiyenteng katangian at isang umaasang attribute (class label/target). Hinuhulaan ng makina ang presyo ng bahay sa pamamagitan ng pag-aaral sa bawat tala na nasa dataset. Samakatuwid, ito ay isang pinangangasiwaang pag-aaral.



Halimbawa, sa aming senaryo, ang mga independiyenteng katangian ay ang bilang ng mga kama, bilang ng mga paliguan, laki ng lupa, zip code, atbp. Batay sa mga ito, nahuhulaan namin ang presyo ng aming bahay. Kaya, ito ang mga independiyenteng katangian na hindi nakasalalay sa anumang bagay. Ang presyo ay ang target na katangian o label ng klase na nakadepende sa mga katangiang ito.



1. Linear Regression

Ang Linear Regression algorithm ay nagpapakita ng isang linear na relasyon sa pagitan ng dependent attribute (Y) at independent attribute (X) na mga variable. Sa matematika, maaari nating suriin ito bilang mga sumusunod:





AT = aX+b

Dito, ang 'a' at 'b' ay Linear Coefficients.

Sa Python, ang LinearRegression() ay available sa module na “sklearn.linear_model”. Makikita natin kung paano ito tukuyin habang ipinapatupad ang proyekto. Ang sumusunod ay ang modelo na may mga parameter:



2. Puno ng Desisyon

Karaniwan, ang Decision Tree ay isang graphical na representasyon para sa pagkuha ng lahat ng posibleng solusyon sa isang problema batay sa mga kundisyong ibinigay gamit ang mga node. Ang Decision node ay ginagamit upang gumawa ng desisyon at ang Leaf node ay tumutukoy sa output ng isang partikular na desisyon. Mahuhulaan natin ang presyo ng ating bahay gamit ang Decision Tree Regressor.

Sa Python, available ang DecisionTreeRegressor sa module na 'sklearn.tree'. Makikita natin kung paano ito tukuyin habang ipinapatupad ang proyekto. Ang sumusunod ay ang modelo na may mga parameter:

3. Random Forest

Ang Random Forest ay gumaganap ng parehong functionality na katulad ng isang Decision Tree. Ngunit kailangan ng Forest (collection of Decision Trees) at pagsamahin (mean value) ang lahat ng output ng Decision Trees. Halimbawa, ang Random Forest size ay 3. Kaya, sa loob, tatlong Decision tree ang nilikha at ang House Price na kinalabasan ng unang Decision Tree ay 20000. Ang House Price na kinalabasan ng pangalawang Decision Tree ay 20000. At ang House Price na kinalabasan ng ang huling Decision Tree ay 10000. 16,666.666 ang huling resulta ((20000+20000+10000)/3).

Sa Python, available ang RandomForestRegressor sa module na 'sklearn.ensemble'. Ang sumusunod ay ang modelo na may mga parameter. Maaari naming tukuyin ang bilang ng mga puno sa parameter na 'n_estimators'. Ito ay 100 bilang default.

Pagpapatupad

Mabilis na tingnan ang mga hakbang na kasangkot sa paghula sa presyo ng US House. Isinasaalang-alang namin ang dataset ng houses_train (CSV file) na may mga talaan noong 2016 (ginamit para sanayin ang modelo ng Machine Learning). Pagkatapos, hinuhulaan namin ang mga tala ng presyo ng bahay (505) na nasa house_test file.

1. Nilo-load ang Mga Dataset ng Tren at Pagsubok

Ang Pandas ay ang magagamit na module sa Python na ginagamit para sa pagsusuri ng data. Ginagamit namin ang module na ito para i-load ang mga dataset sa Python Environment. Dito, ginagamit namin ang Google Co bilang ang Code Environment. Ito ay magagamit nang libre. Google account lang ang kailangan.

Una, kailangan naming i-load ang mga file mula sa aming lokal na PC sa Colab Env. I-download ang mga dataset mula sa dito .

# Mag-upload ng mga houses_train.csv at house_test.csv file sa iyong Google Colab

# sunod sunod.

mula sa google. ET AL angkat mga file

mga file. mag-upload ( )

Ang read_csv() ay ang function na ginagamit upang i-load ang CSV data sa isang variable. Kinukuha nito ang pangalan ng file bilang parameter.

angkat mga panda

# I-load ang houses_train.csv sa variable ng train_data

tren_data = mga panda. read_csv ( 'houses_train.csv' )

# I-load ang house_test.csv sa test_data variable

test_data = mga panda. read_csv ( 'house_test.csv' )

# I-store ang test_data sa test_data1 variable

pagsubok_data1 = test_data

Tingnan natin ang bilang ng mga column at hindi null na tala sa bawat column. Ang Pandas.DataFrame.info() ay ginagamit upang makuha ang impormasyong ito.

print ( tren_data. impormasyon ( ) )

print ( pagsubok_data1. impormasyon ( ) )

Output:

2. Preprocessing ng Data

Sa parehong mga dataset, hawak ng column na 'lot_size' ang mga value na may sqft at acre (Makikita mo ang pagkakaiba sa pamamagitan ng pagtingin sa mga row sa column na 'lot_size_unit's'). Ngunit ang format ay dapat nasa sqft. Kaya, kailangan nating i-convert ang mga halaga sa column na 'lot_size' mula acre hanggang sqft. Katulad nito, ito ay gagawin para sa 'test_data1'.

Ang DataFrame.loc[] ay ginagamit dito upang mahanap ang 'lot_size_units' na may 'acre' at i-multiply ang value na nasa 'lot_size' na may 43560.

# I-convert ang lot_size acre values ​​sa Square feet sa train_data

tren_data. lugar [ ( tren_data [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = tren_data [ 'lot_size' ] * 43560

# I-convert ang lot_size acre values ​​sa Square feet sa test_data1

pagsubok_data1. lugar [ ( pagsubok_data1 [ 'lot_size_units' ] == 'acre' ) , 'lot_size' ] = pagsubok_data1 [ 'lot_size' ] * 43560

print ( tren_data. ulo ( ) )

print ( pagsubok_data1. ulo ( ) )

Output:

Ngayon, makikita mo na ang lahat ng value sa column na “lot_size” ay mga sqft value.

Nakikita mo ang ilang nawawalang halaga sa column na ito. Palitan natin ang mga value ng NaN na nasa column ng mean ng parehong column sa parehong dataset.

Ang DataFrame['column_name'].fillna() ay ginagamit upang punan ang mga nawawalang value ng mean gamit ang mean() function. Ang DataFrame['column_name'].mean() ay ipinapasa bilang parameter sa finna() function. Ipakita natin ang ibig sabihin at tingnan ang bilang ngayon:

# Punan ang mga nawawalang value na nasa column na lot_size ng Mean ng mga kasalukuyang value

tren_data [ 'lot_size' ] = tren_data [ 'lot_size' ] . pakiramdam ( tren_data [ 'lot_size' ] . ibig sabihin ( ) )

# Display Mean

print ( 'Halaga ng Mean ng data ng tren: ' , tren_data [ 'lot_size' ] . ibig sabihin ( ) )

print ( lamang ( tren_data [ 'lot_size' ] ) )

# Punan ang mga nawawalang value na nasa column na lot_size ng Mean ng mga kasalukuyang value

pagsubok_data1 [ 'lot_size' ] = pagsubok_data1 [ 'lot_size' ] . pakiramdam ( pagsubok_data1 [ 'lot_size' ] . ibig sabihin ( ) )

# Display Mean

print ( 'Halaga ng ibig sabihin ng data ng pagsubok: ' , pagsubok_data1 [ 'lot_size' ] . ibig sabihin ( ) )

print ( lamang ( pagsubok_data1 [ 'lot_size' ] ) )

Output:

Ang mga nawawalang value na nasa column na “lot_size” na Train Dataset ay pinapalitan ng mean value na 18789.95194 at ang mga nawawalang value na nasa column na “lot_size” na Test Dataset ay pinapalitan ng mean value na 8961.0

3. Paglilinis ng Data

Habang sinasanay ang modelo, may ilang hindi kinakailangang katangian na hindi kinakailangan upang mahulaan ang kinalabasan. Sa aming kaso, may tatlong attribute na 'lot_size_units', 'zip_code', at 'size_units' na aalisin sa parehong dataset. Ang pandas.DataFrame.drop() ay ginagamit upang alisin ang tatlong column na ito mula sa parehong mga dataset.

tren_data = tren_data. drop ( [ 'lot_size_units' , 'zip_code' , 'size_units' ] , aksis = 1 )

pagsubok_data1 = pagsubok_data1. drop ( [ 'lot_size_units' , 'zip_code' , 'size_units' ] , aksis = 1 )

print ( tren_data. impormasyon ( ) )

print ( pagsubok_data1. impormasyon ( ) )

Output:

Ngayon, ang mga dataset ay nasa mabuting kalagayan. Ang mga hindi kinakailangang column ay aalisin at ang mga nawawalang halaga ay hindi umiiral.

4. Visualization ng Data

Gumawa tayo ng histogram para sa mga column ng data ng Train. Ang pandas.DataFrame.hist() function ay ginagamit upang bumuo ng mga histogram para sa lahat ng attribute.

tren_data. hist ( laki ng figs = ( 4 , 9 ) )

Output:

Binubuo ang histogram para sa mga higaan, paliguan, laki, lot_size, at mga column ng presyo para sa data ng Train.

Gumawa tayo ng ugnayan para sa lahat ng mga patlang na may paggalang sa isa't isa. Ang Plotly.express module ay ginagamit upang i-plot ang mga nauugnay na halaga.

angkat may pakana. ipahayag

corr = tren_data. corr ( )

# I-plot ang kaugnay na data

view_fig = may pakana. ipahayag . imshow ( corr , text_auto = totoo )

# Display

view_fig. palabas ( )

Output:

  1. Ang mga kama ay 0.2935 na may kaugnayan sa presyo, -0.059 na may kaugnayan sa lot_size, 0.77 nakakaugnay sa laki, at 0.65 na nakakaugnay sa mga paliguan.
  2. Ang mga paliguan ay 0.3173 na may kaugnayan sa presyo, -0.054 na may kaugnayan sa lot_size, 0.667 nakakaugnay sa mga paliguan, at 0.771 na nakakaugnay sa mga kama.
  3. Ang laki ay 0.444 na may kaugnayan sa presyo, -0.044 na may kaugnayan sa lot_size, 0.667 na may kaugnayan sa laki, at 0.652 na nakakaugnay sa mga kama.

5. Paghahanda ng Modelo

Kailangan nating itakda ang presyo bilang target sa pamamagitan ng pag-alis nito sa train_data. Siguraduhin na ang mga katangian na naroroon sa data ng Train at Test ay dapat na pareho sa yugtong ito.

target = tren_data [ 'presyo' ]

tren_data = tren_data. drop ( [ 'presyo' ] , aksis = 1 )

print ( tren_data. impormasyon ( ) )

print ( pagsubok_data1. impormasyon ( ) )

Output:

Ngayon, may apat na independiyenteng attribute (mga kama, paliguan, laki, at lot_size) at ang presyo ay ang nakadependeng katangian na nakadepende sa apat na katangiang ito.

6. Pagsasanay sa Modelo

Una, inilalapat namin ang RandomForestRegressor algorithm. I-import ito mula sa package na 'sklearn.ensemble'. Isa itong Ensembling Technique.

  1. Lumikha ng isang modelo mula sa RandomForestRegressor(). Hindi kami nagpapasa ng anumang parameter sa modelong ito. Kaya, ang bilang ng Decision Tree ay 100 bilang default.
  2. Gamitin ang paraan ng fit() para magkasya ang modelo. Ito ay tumatagal ng dalawang parameter. Ang unang parameter ay ang mga nakadependeng katangian at ang pangalawang parameter ay ang label/target ng klase.
  3. Gamitin ang score() method para makita ang Model Accuracy. Ito rin ay tumatagal ng parehong mga parameter na katulad ng fit() na pamamaraan.
mula sa natutunan grupo angkat RandomForestRegressor

# Tukuyin ang Modelo

modelo1 = RandomForestRegressor ( )

# Pagkasyahin ang modelo

modelo1. magkasya ( tren_data , target )

# Katumpakan ng Modelo

print ( modelo1. puntos ( tren_data , target ) * 100 )

Output:

86.08400889419033

7. Subukan ang Modelo at Iimbak ang Mga Resulta

Ito ang huling hakbang kung saan kailangan nating hulaan ang resulta at iimbak ang mga ito.

  1. Ang predict() method ay ginagamit upang mahulaan ang Test data. Ginagamit ito kasama ng modelo at kinukuha ang Nested na listahan ng mga value/DataFrame.
  2. Gamitin ang to_csv() na paraan upang iimbak ang mga resulta sa CSV file.
  3. I-download ang file mula sa kapaligiran ng Python (Google Colab).
# Hulaan ang test_data1 gamit ang model1.

test_data [ 'Presyo' ] = modelo1. hulaan ( pagsubok_data1 )

# I-save ang test_data sa test_results.csv

test_data. to_csv ( 'test_results.csv' )

# I-download ang file na ito mula sa Colab

mga file. download ( 'test_results.csv' )

Output:

Magpakita tayo ng 20 record sa 505 record. Makikita mo na hawak ng column na Presyo ang mga hinulaang halaga para sa bawat bahay.

Iba pang mga Modelo

Hulaan natin ang mga bahay gamit ang DecisionTreeRegressor. Magagawa mong i-import ito mula sa module na 'sklearn.tree'.

mula sa natutunan puno angkat DecisionTreeRegressor

# Tukuyin ang Modelo

modelo2 = DecisionTreeRegressor ( )

# Pagkasyahin ang modelo

modelo2. magkasya ( tren_data , target )

# Katumpakan ng Modelo

print ( modelo2. puntos ( tren_data , target ) * 100 )

# Hulaan ang test_data1 gamit ang model1.

test_data [ 'Presyo' ] = modelo2. hulaan ( pagsubok_data1 )

# I-save ang test_data sa test_results.csv

test_data. to_csv ( 'test_results.csv' )

# I-download ang file na ito mula sa Colab

mga file. download ( 'test_results.csv' )

Output:

99.94183165335028

Maaari mong makita ang hinulaang resulta dito:

Hulaan natin ang mga bahay gamit ang LinearrEgression. I-import ang modelo mula sa module na 'sklearn.linear_model'.

mula sa natutunan linear_model angkat LinearRegression

# Tukuyin ang Modelo

modelo3 = LinearRegression ( )

# Pagkasyahin ang modelo

modelo3. magkasya ( tren_data , target )

# Hulaan ang test_data1 gamit ang model1.

test_data [ 'Presyo' ] = modelo3. hulaan ( pagsubok_data1 )

# I-save ang test_data sa test_results.csv

test_data. to_csv ( 'test_results.csv' )

# I-download ang file na ito mula sa Colab

mga file. download ( 'test_results.csv' )

Maaari mong makita ang hinulaang resulta dito:

Konklusyon

Ngayon, nahuhulaan mo na ang presyo ng iyong bahay batay sa mga katangian tulad ng bilang ng mga kuwarto, ang lugar ng iyong lupain, atbp. Sa gabay na ito, isinasaalang-alang namin ang totoong data ng bahay mula sa Seattle, Washington. Gamit ang mga diskarte sa Regression tulad ng Linear Regression, Decision Tree, at Random Forest, hinulaan namin ang presyo ng 505 na bahay. Ang lahat ng mga hakbang (Data Preprocessing, Data Cleaning, at Data Visualization) na kailangang gawin bago ang pagsasanay sa modelo ay ipinapaliwanag nang sunud-sunod na may mga snippet at output ng code.