Predicció del preu de l'habitatge als EUA

Prediccio Del Preu De L Habitatge Als Eua



Construir una casa és un dels desafiaments de les nostres vides. Abans de la construcció, és possible estimar el preu de la seva casa en funció del preu de l'habitatge anterior. Els factors que afecten principalment al preu de l'habitatge inclouen el nombre total d'habitacions (llit, bany, etc.) i la superfície del terreny. Amb això, podem estimar el pressupost necessari per construir la casa.

En aquesta guia, veurem com predir el preu de les cases dels EUA mitjançant l'aprenentatge automàtic mitjançant Python. Primer, parlem del conjunt de dades que fem servir i després preprocessem les dades. Després d'això, visualitzem els atributs que estan presents al conjunt de dades i apliquem diferents algorismes d'aprenentatge automàtic al conjunt de dades d'entrenament (Seattle, Washington, agost de 2022 - desembre de 2022). Finalment, acabem aquesta guia predint el preu d'algunes cases que estan presents al conjunt de dades de prova. Abans d'anar a implementar aquest projecte, hem d'entendre les terminologies d'aprenentatge automàtic que s'utilitzen en aquest projecte.







Regressió

A l'aprenentatge automàtic, si esteu treballant amb dades numèriques, heu d'entendre la regressió. La regressió és una tècnica d'aprenentatge supervisat en aprenentatge automàtic que s'utilitza per entendre la relació entre atributs independents i atributs dependents (etiqueta de classe/objectiu). La màquina prediu el preu de l'habitatge aprenent cada registre que hi ha al conjunt de dades. Per tant, és un aprenentatge supervisat.



Per exemple, en el nostre escenari, els atributs independents són el nombre de llits, el nombre de banys, la mida del terreny, el codi postal, etc. A partir d'aquests, podem predir el preu de la nostra casa. Per tant, aquests són els atributs independents que no depenen de res. El preu és l'atribut objectiu o l'etiqueta de classe que depèn d'aquests atributs.



1. Regressió lineal

L'algorisme de regressió lineal mostra una relació lineal entre les variables d'atribut dependent (Y) i d'atribut independent (X). Matemàticament, podem avaluar-ho de la següent manera:





I = aX+b

Aquí, 'a' i 'b' són coeficients lineals.

A Python, LinearRegression() està disponible al mòdul 'sklearn.linear_model'. Veurem com especificar-ho durant la implementació del projecte. El següent és el model amb paràmetres:



2. Arbre de decisions

Bàsicament, un arbre de decisions és una representació gràfica per obtenir totes les solucions possibles a un problema en funció de les condicions proporcionades mitjançant els nodes. El node Decisió s'utilitza per prendre la decisió i el node Fulla es refereix a la sortida d'una decisió específica. Podem predir el preu de la nostra casa amb el Decision Tree Regressor.

A Python, el DecisionTreeRegressor està disponible al mòdul 'sklearn.tree'. Veurem com especificar-ho durant la implementació del projecte. El següent és el model amb paràmetres:

3. Bosc aleatori

Random Forest realitza la mateixa funcionalitat que és similar a un arbre de decisions. Però cal un bosc (col·lecció d'arbres de decisió) i combinar (valor mitjà) totes les sortides dels arbres de decisió. Per exemple, la mida del bosc aleatori és 3. Així, internament, es creen tres arbres de decisió i el resultat del preu de l'habitatge del primer arbre de decisió és 20.000. El resultat del preu de l'habitatge del segon arbre de decisió és 20.000. I el resultat del preu de l'habitatge de l'últim arbre de decisions és 10000. 16.666,666 és el resultat final ((20000+20000+10000)/3).

A Python, RandomForestRegressor està disponible al mòdul 'sklearn.ensemble'. El següent és el model amb paràmetres. Podem especificar el nombre d'arbres al paràmetre “n_estimators”. És 100 per defecte.

Implementació

Vegeu ràpidament els passos necessaris per predir el preu de l'habitatge als EUA. Considerem el conjunt de dades houses_train (fitxer CSV) amb registres de 2016 (utilitzat per entrenar el model d'aprenentatge automàtic). A continuació, predim els registres del preu de la casa (505) que estan presents al fitxer house_test.

1. Carregant els conjunts de dades de prova i tren

Pandas és el mòdul disponible a Python que s'utilitza per a l'anàlisi de dades. Utilitzem aquest mòdul per carregar els conjunts de dades a l'entorn Python. Aquí, fem servir el Google Co com l'entorn del codi. Això està disponible de forma gratuïta. Només cal un compte de Google.

Primer, hem de carregar els fitxers des del nostre ordinador local al Colab Env. Descarrega els conjunts de dades de aquí .

# Carregueu fitxers houses_train.csv i house_test.csv al vostre Google Colab

# un darrere l'altre.

des de Google. ET AL importar Fitxers

Fitxers. carregar ( )

Read_csv() és la funció que s'utilitza per carregar les dades CSV a una variable. Pren el nom del fitxer com a paràmetre.

importar pandes

# Carregueu el fitxer houses_train.csv a la variable train_data

dades_tren = pandes. llegir_csv ( 'houses_train.csv' )

# Carregueu el fitxer house_test.csv a la variable test_data

dades_test = pandes. llegir_csv ( 'house_test.csv' )

# Emmagatzema les dades de prova a la variable dades de prova1

dades_prova1 = dades_test

Vegem el recompte de columnes i registres no nuls a cada columna. El Pandas.DataFrame.info() s'utilitza per obtenir aquesta informació.

imprimir ( dades_tren. informació ( ) )

imprimir ( dades_prova1. informació ( ) )

Sortida:

2. Preprocessament de dades

En ambdós conjunts de dades, la columna 'lot_size' conté els valors amb peus quadrats i acres (trobareu la variància veient les files a la columna 'lot_size_unit's'). Però el format hauria de ser en peus quadrats. Per tant, hem de convertir els valors de la columna 'lot_size' de acre a peus quadrats. De la mateixa manera, això s'ha de fer per a 'test_data1'.

El DataFrame.loc[] s'utilitza aquí per trobar els 'lot_size_units' amb 'acre' i multiplicar el valor que hi ha a 'lot_size' per 43560.

# Converteix els valors de lot_size acre en peus quadrats a train_data

dades_tren. lloc [ ( dades_tren [ 'unitats_mida_del_lot' ] == 'acre' ) , 'mida_del_lot' ] = dades_tren [ 'mida_del_lot' ] * 43560

# Converteix els valors de lot_size acre en peus quadrats a test_data1

dades_prova1. lloc [ ( dades_prova1 [ 'unitats_mida_del_lot' ] == 'acre' ) , 'mida_del_lot' ] = dades_prova1 [ 'mida_del_lot' ] * 43560

imprimir ( dades_tren. cap ( ) )

imprimir ( dades_prova1. cap ( ) )

Sortida:

Ara, veureu que tots els valors de la columna 'lot_size' són valors en peus quadrats.

Trobeu alguns valors que falten en aquesta columna. Substituïm els valors de NaN que hi ha a les columnes per la mitjana de la mateixa columna en ambdós conjunts de dades.

El DataFrame['nom_columna'].fillna() s'utilitza per omplir els valors que falten amb la mitjana mitjançant la funció mean(). El DataFrame['nom_columna'].mean() es passa com a paràmetre a la funció finna(). Mostrem la mitjana i veiem el recompte ara:

# Ompliu els valors que falten presents a la columna lot_size amb la mitjana dels valors existents

dades_tren [ 'mida_del_lot' ] = dades_tren [ 'mida_del_lot' ] . sentir ( dades_tren [ 'mida_del_lot' ] . significar ( ) )

# Mostra la mitjana

imprimir ( 'Valor mitjà de les dades del tren:' , dades_tren [ 'mida_del_lot' ] . significar ( ) )

imprimir ( només ( dades_tren [ 'mida_del_lot' ] ) )

# Ompliu els valors que falten presents a la columna lot_size amb la mitjana dels valors existents

dades_prova1 [ 'mida_del_lot' ] = dades_prova1 [ 'mida_del_lot' ] . sentir ( dades_prova1 [ 'mida_del_lot' ] . significar ( ) )

# Mostra la mitjana

imprimir ( 'Valor mitjà de les dades de prova:' , dades_prova1 [ 'mida_del_lot' ] . significar ( ) )

imprimir ( només ( dades_prova1 [ 'mida_del_lot' ] ) )

Sortida:

Els valors que falten que estan presents a la columna 'lot_size' Train Dataset se substitueixen pel valor mitjà de 18789,95194 i els valors que falten que estan presents a la columna 'lot_size' Test Dataset se substitueixen pel valor mitjà de 8961,0

3. Neteja de dades

Durant l'entrenament del model, hi ha alguns atributs innecessaris que no són necessaris per predir el resultat. En el nostre cas, hi ha tres atributs que són 'lot_size_units', 'zip_code' i 'size_units' que s'han d'eliminar dels dos conjunts de dades. El pandas.DataFrame.drop() s'utilitza per eliminar aquestes tres columnes dels dos conjunts de dades.

dades_tren = dades_tren. tirar ( [ 'lot_size_unitats' , 'codi ZIP' , 'unitats_de_mida' ] , eix = 1 )

dades_prova1 = dades_prova1. tirar ( [ 'lot_size_unitats' , 'codi ZIP' , 'unitats_de_mida' ] , eix = 1 )

imprimir ( dades_tren. informació ( ) )

imprimir ( dades_prova1. informació ( ) )

Sortida:

Ara, els conjunts de dades estan en bon estat. S'eliminen les columnes innecessàries i els valors que falten no existeixen.

4. Visualització de dades

Creem un histograma per a les columnes de les dades del tren. La funció pandas.DataFrame.hist() s'utilitza per generar histogrames per a tots els atributs.

dades_tren. hist ( mida de la figa = ( 4 , 9 ) )

Sortida:

Es genera un histograma per a les columnes llits, banys, mida, mida_lot i preu per a les dades del tren.

Creem la correlació per a tots els camps entre si. El mòdul Plotly.express s'utilitza per representar els valors correlacionats.

importar trama. expressar

corr = dades_tren. corr ( )

# Traceu les dades correlacionades

vista_fig = trama. expressar . imshow ( corr , text_auto = És cert )

# Mostra

vista_fig. espectacle ( )

Sortida:

  1. Els llits tenen una correlació de 0,2935 amb el preu, -0,059 amb la mida del lot, 0,77 amb la mida i 0,65 amb els banys.
  2. Els banys estan correlacionats amb el preu de 0,3173, -0,054 amb la mida del lot, 0,667 amb els banys i 0,771 amb els llits.
  3. La mida és de 0,444 correlacionada amb el preu, -0,044 correlacionada amb el lot_size, 0,667 correlacionada amb la mida i 0,652 correlacionada amb els llits.

5. Preparació del model

Hem d'establir el preu com a objectiu eliminant-lo de train_data. Assegureu-vos que els atributs que estan presents a les dades del tren i de la prova han de ser els mateixos en aquesta fase.

objectiu = dades_tren [ 'preu' ]

dades_tren = dades_tren. tirar ( [ 'preu' ] , eix = 1 )

imprimir ( dades_tren. informació ( ) )

imprimir ( dades_prova1. informació ( ) )

Sortida:

Ara, hi ha quatre atributs independents (llits, banys, mida i mida_lot) i el preu és l'atribut dependent que depèn d'aquests quatre atributs.

6. Formació del Model

Primer, apliquem l'algorisme RandomForestRegressor. Importeu-lo des del paquet “sklearn.ensemble”. És una tècnica d'assemblatge.

  1. Creeu un model a partir de RandomForestRegressor(). No estem passant cap paràmetre a aquest model. Per tant, el nombre d'arbres de decisió és 100 per defecte.
  2. Utilitzeu el mètode fit() per ajustar el model. Pren dos paràmetres. El primer paràmetre són els atributs dependents i el segon paràmetre és l'etiqueta/destí de la classe.
  3. Utilitzeu el mètode score() per veure la precisió del model. També pren els mateixos paràmetres similars al mètode fit().
des de après conjunt importar RandomForestRegressor

# Definiu el model

model 1 = RandomForestRegressor ( )

# Encaixar el model

model 1. encaixar ( dades_tren , objectiu )

# Precisió del model

imprimir ( model 1. puntuació ( dades_tren , objectiu ) * 100 )

Sortida:

86.08400889419033

7. Prova el model i emmagatzema els resultats

Aquest és el pas final on hem de predir el resultat i emmagatzemar-los.

  1. El mètode predict() s'utilitza per predir les dades de prova. S'utilitza amb el model i pren la llista anidada de valors/DataFrame.
  2. Utilitzeu el mètode to_csv() per emmagatzemar els resultats al fitxer CSV.
  3. Baixeu el fitxer des de l'entorn Python (Google Colab).
# Prediu les dades_test1 amb el model1.

dades_test [ 'Preu' ] = model 1. predir ( dades_prova1 )

# Deseu les dades_test a test_results.csv

dades_test. a_csv ( 'test_results.csv' )

# Baixeu aquest fitxer des del Colab

Fitxers. descarregar ( 'test_results.csv' )

Sortida:

Mostrem 20 registres de 505 registres. Podeu veure que la columna Preu conté els valors previstos per a cada casa.

Altres Models

Anem a predir les cases mitjançant el DecisionTreeRegressor. Podeu importar-lo des del mòdul “sklearn.tree”.

des de après arbre importar Decision TreeRegressor

# Definiu el model

model 2 = Decision TreeRegressor ( )

# Encaixar el model

model 2. encaixar ( dades_tren , objectiu )

# Precisió del model

imprimir ( model 2. puntuació ( dades_tren , objectiu ) * 100 )

# Prediu les dades_test1 amb el model1.

dades_test [ 'Preu' ] = model 2. predir ( dades_prova1 )

# Deseu les dades_test a test_results.csv

dades_test. a_csv ( 'test_results.csv' )

# Baixeu aquest fitxer des del Colab

Fitxers. descarregar ( 'test_results.csv' )

Sortida:

99.94183165335028

Podeu veure el resultat previst aquí:

Anem a predir les cases utilitzant la LinearrEgression. Importeu el model des del mòdul “sklearn.linear_model”.

des de après model_lineal importar Regressió lineal

# Definiu el model

model 3 = Regressió lineal ( )

# Encaixar el model

model 3. encaixar ( dades_tren , objectiu )

# Prediu les dades_test1 amb el model1.

dades_test [ 'Preu' ] = model 3. predir ( dades_prova1 )

# Deseu les dades_test a test_results.csv

dades_test. a_csv ( 'test_results.csv' )

# Baixeu aquest fitxer des del Colab

Fitxers. descarregar ( 'test_results.csv' )

Podeu veure el resultat previst aquí:

Conclusió

Ara, podeu predir el preu de la vostra casa en funció d'atributs com el nombre d'habitacions, l'àrea del vostre terreny, etc. En aquesta guia, hem considerat les dades reals de la casa de Seattle, Washington. Utilitzant les tècniques de regressió com la regressió lineal, l'arbre de decisió i el bosc aleatori, vam predir el preu de 505 cases. Tots els passos (preprocessament de dades, neteja de dades i visualització de dades) que s'han de fer abans d'entrenar el model s'expliquen pas a pas amb fragments de codi i sortides.