Zephyrnet-logo

Hoe een voorspellingsmodel voor onroerend goedprijzen te bouwen?

Datum:

Introductie

Als datawetenschapper heb je de macht om een ​​revolutie teweeg te brengen in de vastgoedsector door modellen te ontwikkelen die huizenprijzen nauwkeurig kunnen voorspellen. In deze blogpost leer je hoe je van begin tot eind een voorspellingsmodel voor vastgoedprijzen kunt bouwen. Maak je klaar om meer te weten te komen het verzamelen van gegevens en analyse, modelselectie en evaluatie. Met deze gids beschikt u over de vaardigheden om weloverwogen beslissingen te nemen en uw klanten te begeleiden naar de beste investeringsmogelijkheden. Laten we beginnen!

Leerdoelen:

In dit artikel zullen we:

1. Begrijp het bouwen van een prijsvoorspellingsmodel.

2. het proces van het bouwen van het model begrijpen, zoals gegevensanalyse, selectie, voorspelling, interpretatie, enz.

3. Leer hoe u een weloverwogen beslissing kunt nemen met een bepaalde dataset.

Inhoudsopgave

  1. De gegevens en de probleemstelling begrijpen
    1.1 Probleemstelling
    1.2 Gegevensbeschrijving
  2. Gegevensanalyse van prijsvoorspellingsmodel
    2.1 Ontbrekende waarden
    2.2 Omgaan met de ontbrekende waarden
    2.3 Uitschieters
    2.4 Verkennende gegevensanalyse
    2.5 Model ontwikkeling
  3. Conclusie

De gegevens en de probleemstelling begrijpen

De data die we gaan gebruiken is de Ames Housing Dataset, een dataset die 79 verklarende variabelen bevat die (bijna) elk aspect beschrijven van woonhuizen in Ames, Iowa. De dataset is beschikbaar op Kaggle en u kunt deze downloaden hier. De dataset bevat 1460 rijen en 81 kolommen; de doelvariabele is de kolom SalePrice. De dataset is opgesplitst in twee delen: train.csv en test.csv. Het bestand train.csv bevat de doelvariabele en het bestand test.csv niet. Het bestand test.csv test de prestaties van het model op ongeziene gegevens.

Probleemstelling

De probleemstelling is het voorspellen van de verkoopprijs van een huis, gegeven de kenmerken van het huis. De features zijn de kolommen in de dataset en de doelvariabele is de SalePrice-kolom. Het probleem is een regressieprobleem, aangezien de doelvariabele continu is.

Gegevensbeschrijving

De gegevensbeschrijving is beschikbaar op Kaggle en u kunt deze vinden hier. De gegevensbeschrijving bevat een gedetailleerde beschrijving van elke kolom in de gegevensset. De gegevensbeschrijving is erg handig, omdat deze een gedetailleerde beschrijving geeft van elke kolom in de gegevensset. Het geeft ook informatie over de ontbrekende waarden in de dataset.

Data-analyse van het prijsvoorspellingsmodel

In deze sectie vindt u ontbrekende waarden en uitschieters en de relatie tussen de doelvariabele en de kenmerken.

Python-code:

Ontbrekende waarden

# Een lijst maken van kolommen met ontbrekende waarden missing_values ​​= [col voor col in data.columns if data[col].isnull().any()]

# Afdrukken van het aantal ontbrekende waarden en het percentage ontbrekende waarden in elke kolom

voor col in ontbrekende_waarden:

print(col, round(data[col].isnull().mean(), 3), '% ontbrekende waarden')

code-uitvoer

uitgang

Omgaan met de ontbrekende waarden

# De kolommen laten vallen met meer dan 15% ontbrekende waarden data.drop(['Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'], axis=1, inplace=True)
# De ontbrekende waarden in de overige kolommen vullen met de meest voorkomende waarde new_missing_values ​​= [col for col in data.columns if data[col].isnull().any()] for col in new_missing_values: if data[col].dtype == 'O': data[col].fillna(data[col].mode()[0], inplace=True) else: data[col].fillna(data[col].median(), inplace=True )

Uitschieters

continuous_features = [col voor col in data.columns if data[col].dtype != 'O'] voor col in continuous_features: data_copy = data.copy() if 0 in data_copy[col].unique(): pass else: data_copy[col] = np.log(data_copy[col]) data_copy['SalePrice'] = np.log(data_copy['SalePrice']) plt.scatter(data_copy[col], data_copy['SalePrice']) plt. xlabel(col) plt.ylabel('Verkoopprijs')
Prijsvoorspellingsmodel

uitgang

Verkennende gegevensanalyse

plt.figure(figsize=(10, 15)) # De heatmap plotten met betrekking tot de correlatie van de kenmerken met de doelvariabele 'SalePrice' sns.heatmap(data.corr()[['SalePrice']].sort_values( by='SalePrice', oplopend=False), annot=True, cmap='viridis')
Prijsvoorspellingsmodel

uitgang

We kunnen zien dat 'OverallQual', 'GrLivArea' en 'TotalBsmtSF' sterk correleren met 'SalePrice'. Controleer de onderstaande spreidingsdiagrammen.

# Regressieplot tussen de doelvariabele en de meest gecorreleerde variabelen die een correlatie groter dan 0.5 hebben voor col in data.corr()[data.corr()['SalePrice'] > 0.5].index: if col == 'SalePrice ': pass else: sns.regplot(x=data[col], y=data['SalePrice']) plt.show()
Prijsvoorspellingsmodel

uitgang

Alle kenmerken hebben een positieve correlatie met de doelvariabele.

Model ontwikkeling

Nu we de data hebben opgeschoond en gevisualiseerd. De volgende stap is het bouwen van een model om de verkoopprijs van een huis te voorspellen. Er kunnen verschillende voorspellingsmodellen worden gebruikt, waaronder meerdere lineaire regressie, KNN-regressor, enz. We zullen een reeks modellen en pijplijnen gebruiken om het beste model te vinden door de nauwkeurigheid, precisie en herinnering van het model te evalueren. Ik zal ook kruisvalidatie gebruiken om ervoor te zorgen dat het model goed generaliseert.
# Coderen van de categorische variabelen naar het numerieke datatype van sklearn.preprocessing import LabelEncoder voor col in data.columns: if data[col].dtype == 'O': label_encoder = LabelEncoder() data[col] = label_encoder.fit_transform(data [col])
# Laten we Ridge Regression gebruiken om het model te bouwen van sklearn.linear_model import Ridge van sklearn.model_selection import cross_val_score van sklearn.metrics import mean_squared_error
# maak X- en y-variabelen van Features en doelvariabele X = data[['OverallQual', 'GrLivArea', 'GarageCars', 'GarageArea', 'TotalBsmtSF', '1stFlrSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt ', 'YearRemodAdd']] y = data['SalePrice']
# Functie om nokregressie uit te voeren def ridge_regression(alpha, data): ridge = Ridge(alpha=alpha) ridge.fit(X, y) scores = cross_val_score(ridge, X, y, scoring='neg_mean_squared_error', cv=5) rmse = np.sqrt(-scores) geeft rmse terug
# De beste waarde vinden van de hyperparameter van Ridge - alpha alpha = [0.001, 0.01, 0.1, 1, 10, 100, 1000] voor i in alpha: print('Alpha: ', i) print('Mean RMSE: ', ridge_regression(i, data).mean()) print('Standaarddeviatie: ', ridge_regression(i, data).std()) print()
Prijsvoorspellingsmodel

uitgang

Voor alfa = 100 is de RMSE de laagste en presteert het model het beste. De RMSE is 38464. Het model presteert het beste met alpha = 100.

# Ik zal het nokregressiemodel gebruiken met alpha = 100 ridge = Ridge(alpha=100) ridge.fit(X, y)
# De testgegevens laden test_data = pd.read_csv('test.csv')
# Alle wijzigingen doorvoeren die zijn gedaan in de trainingsgegevens test_data.drop(['Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'], axis=1, inplace=True) new_missing_values ​​= [col for col in test_data.columns if test_data[col].isnull().any()] for col in new_missing_values: if test_data[col].dtype == 'O': test_data[col].fillna(test_data[col]. mode()[0], inplace=True) else: test_data[col].fillna(test_data[col].median(), inplace=True)
# Codering van de categorische variabelen van testgegevens voor col in test_data.columns: if test_data[col].dtype == 'O': label_encoder = LabelEncoder() test_data[col] = label_encoder.fit_transform(test_data[col])
# Functies selecteren X_test = test_data[['OverallQual', 'GrLivArea', 'GarageCars', 'GarageArea', 'TotalBsmtSF', '1stFlrSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt', 'YearRemodAdd']] # De doelvariabele voorspellen y_pred = ridge.predict(X_test)

# De voorspellingen opslaan in een csv-bestand output = pd.DataFrame({'Id': test_data.Id, 'SalePrice': y_pred}) output.to_csv('my_submission.csv', index=False)

In dit artikel hebben we de woningdataset van Ames gekozen als prijsvoorspellingsmodel, de probleemstelling begrijpen en uitvoeren Verkennende gegevensanalyse. We hebben ook imputatie van ontbrekende waarden en codering van categorische variabelen op de trein- en testgegevenssets uitgevoerd. Vervolgens pasten we Ridge-regressie toe met verschillende alfawaarden en vonden we de beste waarde van alfa om de RMSE te minimaliseren.

Key Takeaways:

  • Drie kenmerken, 'OverallQual', 'GrLivArea' en 'TotalBsmtSF' bleken sterke positieve correlaties te hebben met de doelvariabele 'SalePrice'.
  • Het model presteerde het beste met alpha = 100, resulterend in amses van 38464.
  • De analyse toonde aan hoe belangrijk het is om meerdere kenmerken in voorspellingsmodellen voor onroerend goed te overwegen.
  • Regularisatietechnieken zoals Ridge regressie kan de complexiteit van het model verminderen en overfitting voorkomen.
  • De resultaten van dit project benadrukken het potentieel voor het gebruik van datawetenschap in onroerend goed om beter geïnformeerde beslissingen te nemen en voorspellingen te verbeteren.

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?