Machine learning · Team project

Berlin Airbnb price prediction

How accurately can listing information predict nightly prices in Berlin, and how well does the model generalize to hosts it has never seen?

Team coursework using the September 2025 Inside Airbnb Berlin snapshot. Listing prices are observational platform data, not a representative sample of all Berlin accommodation or a causal pricing experiment.

View GitHub repository

Log-target random forest / holdout

MAE
€29.59
RMSE
€49.24
R²
0.645
Within €2563.2%
Within €5084.4%

Five-split sensitivity check

Random listings
MAE €29.32 ± €0.29
Previously unseen hosts
MAE €34.45 ± €1.47

Mean ± standard deviation across five splits per design. These values describe split variability, not confidence intervals or individual prediction uncertainty.

Selected 80/20 holdout results and five-split sensitivity checks. Split variability is standard deviation, not a confidence or prediction interval.

Within the team project, I was responsible for modeling, evaluation, and the final analytical summary. I compared multiple model families, selected metrics that remained interpretable in euros, and separated ordinary holdout performance from the harder unseen-host test.

Zeynep Sude Kırlı: exploratory analysis. Natasha Machate: feature engineering. Yazan Aljerro: modeling, evaluation, and final summary. Cleanup, presentation, and discussion were shared.

  1. 0180/20 listing holdout stratified by price decile, with three-fold cross-validation on training data
  2. 02Baseline, linear, and ridge models
  3. 03Random forest and gradient boosting
  4. 04PyTorch multilayer perceptron
  5. 05Additional split by previously unseen hosts
  • Selected log-target random forest: MAE €29.59, RMSE €49.24, and R² 0.645.
  • 63.2% of test predictions fell within €25; 84.4% fell within €50.
  • Across five repeated splits, random-listing MAE was €29.32 ± €0.29, versus €34.45 ± €1.47 for unseen hosts (mean ± standard deviation across splits).
  • The model estimates association, not causal pricing effects.
  • Listing data can encode neighborhood, host, and platform biases; missing prices and upper-tail observations were excluded.
  • Some preprocessing, including the upper-tail cutoff and category vocabulary, preceded the split. The evaluation should not be described as entirely leakage-free.
  • The unseen-host test reuses the selected model configuration. Split standard deviation is not a confidence interval or an individual prediction interval.
Pythonpandasscikit-learnPyTorchRandom forestGradient boosting
Next case studyLinear models for biological data