Datasets

The London listings file

What nightly price should a London holiday rental quote, given only the facts recorded about the property before anyone books it?

← All datasets and notebooks

Where it goes. Keep the file in a data folder beside the notebook. Every notebook reads data/london.csv and is run from its own folder.

What this data answers

It is a cross-sectional benchmark: what comparable listings are quoting. It is not the revenue the property will earn, not its occupancy, and not the price that would maximise either.

Dataset overview

QuestionWhat nightly price should a London holiday rental quote, given only the facts recorded about the property before anyone books it?
ObservationOne listing, as advertised in the snapshot of 19 June 2026.
Targetprice. Quoted price per night, in pounds.
Inputsguests, bedrooms, beds, min_nights, room_type, borough
Size54,636 rows and 11 columns.
Held backlisting_id, host_id, identifiers, not information about the property; stay_nights, describes the quote window rather than the listing.

How the rows are divided

The division is by host, not by row. A host with twenty listings prices them in a recognisable way, so a random split would let the same pricing habit sit on both sides of the test and make it too easy. Each host is sent to one group by a hash of the host identifier, so no host appears in two groups and the allocation is identical on every machine without needing a seed.

GroupRowsWhat you may do with it
fitting32,749estimate baselines and coefficients
checking11,063compare finished models, once each
final10,824opened once, after every choice is frozen

Data dictionary

Every column in london.csv. The fourth column is the one to read before modelling: a variable that is not known when the prediction is needed cannot be used, however well it predicts.

ColumnTypeWhat it meansWhen is this known?
listing_idtext idInside Airbnb identifier for the listing.Assigned by the platform. Not information about the property.
host_idtext idIdentifier for the host. One host may hold many listings.Assigned by the platform. Used to divide the data, never as an input.
splitcategoryfitting, checking, or final. See the split note above.Added for this course. Not part of the published data.
room_typecategoryEntire home/apt, Private room, Shared room, or Hotel room.Set by the host when the listing is published.
boroughcategoryLondon borough. 33 levels.Fixed by where the property is.
guestswhole numberGuests the listing accommodates, 1 to 16.Set by the host when the listing is published.
bedroomsnumberBedrooms. Missing for 12,367 listings.Set by the host. Left blank by some.
bedsnumberBeds. Missing for 1,274 listings.Set by the host. Left blank by some.
min_nightsnumberShortest stay the host accepts, in nights. Missing for 2 listings.Set by the host when the listing is published.
stay_nightswhole numberLength of the quoted stay, 1 to 7 nights.A property of the price quote, not of the listing.
pricenumber, GBP (target)Quoted price per night, in pounds.Returned with the quote. This is the thing being predicted.

Source and preparation

The source is Inside Airbnb, London detailed listings, snapshot of 19 June 2026, released under CC BY 4.0. Inside Airbnb asks that its data be used for teaching and analysis and not redistributed further.

The download holds 92,638 rows. A listing is kept when it passes six checks, declared before any model was fitted and applied in the order below. Three of them act on the same rows and are shown together. Nothing else is altered: the values are the published ones.

StepRows leftWhy
Downloaded rows92,638
From the London city scrape61,587removes rows collected under other city scrapes
Marked as available60,993a withdrawn listing has no live price
Price between GBP 20 and GBP 1,000; 1 to 16 guests; host recorded58,060trims the extreme tail and rows with no host
Quoted stay of 1 to 7 nights54,636keeps short stays, which price differently from monthly lets

The price is the total quote for the sample booking window divided by the number of nights, so it includes cleaning and service fees and sits above the headline nightly rate a guest first sees.

What this data does not establish

  • The price is a quote, not a transaction. Nobody necessarily paid it.
  • The quote dates are not identical across listings. Two similar flats priced for different July weekends differ for reasons the file does not record.
  • Predicting a comparable asking price is not estimating how changing a price would change bookings or revenue. That question needs a different design.
  • The frame is not London. It is the listings that passed the six checks, and any claim describes that group.

Where it is used

  • Day 1b. Day 1b uses it for the first fitted rule and the first residuals.
  • Day 2. Day 2 fits the baseline, the capacity line and the compact six-input model on it.
  • Day 3. Day 3 grows trees, forests and boosting on it, and opens the sealed group once.
  • Day 4. Day 4 withholds the price and groups the listings by their physical facts alone.
Oxford · United Kingdom Teaching CV
University of Oxford