Portfolio NYC Rental Market
17,614 listings · for renters & owners
Geographic & pricing analytics · Python (regression + clustering) + Tableau

The New York rental market — for the people who rent, and the people who own.

A real-estate client wanted the market read for two audiences. I analysed 17,614 NYC listings to answer both: for renters, where the value is; for owners, what sets your price — and, separately, what actually gets you booked. The surprising part: those last two aren't the same lever.

17,614 listingsPython · pandas · scikit-learnRegression · K-means · GeoTableau
The numbers at a glance
17,614
listings across 5 boroughs
$107
median nightly price
186
neighbourhoods mapped
42%
of price explained by the model
−0.03
price ↔ bookings — almost no link
How we read the market

The brief was open-ended: read the NYC rental market to inform renters and owners. Exploring the data first — price by room type, price by location, and a correlation check — surfaced one surprise that shaped everything: price and how often a listing books barely move together. That turned a vague brief into three sharp questions.

Q1
What sets a listing's price?
renters & owners — the pricing question
Q2
What gets a listing booked?
owners — the demand question
Q3
Are they the same lever?
can you book more by pricing lower?

Two regression models answered Q1 and Q2; a clustering model turned the answers into market segments. Here's what each found — for renters first, then owners.

Answering Q1 for renters — where the value lives

Median nightly price by neighbourhood

Darker = pricier. Manhattan and prime Brooklyn command the premium; the outer boroughs run less than half. Switch the metric, or hover any neighbourhood.

$0$200+

Median price. The premium is geographic and steep — West Village, Chelsea and the Financial District sit above $200, while much of the Bronx, Queens and outer Brooklyn fall below $80. For a renter, the value is one subway ride out.

Room type is the biggest price lever

Before location even enters, what you rent halves or doubles the price.

Cheapest neighbourhoods for value-hunters

Same city, a third of the price — the outer-borough value end.

Answering Q1 & Q2 for owners — two different levers

What sets your price

A model predicting price (R² 0.42) leans almost entirely on two structural choices — location and room type.

Takeaway: price is set by where the listing is and what it is — set those right and you've priced correctly before touching anything else.

What gets you booked

A separate model for occupancy (R² 0.59) tells a completely different story — and price is barely in it.

The counterintuitive finding
Cutting your price barely moves your bookings

Price and occupancy correlate at just −0.03 — effectively zero. What fills a calendar is availability and reviews, not a lower nightly rate. Owners chasing bookings with price cuts are pulling the wrong lever.

Answering Q3 — the market in four real segments

K-means on standardised behavioural features (price, occupancy, availability, reviews — identifiers excluded) splits the market into four groups that price alone can't separate. The revealing one is the last.

The machine learning behind the findings

Three models did the work — a random forest predicting price, a second predicting occupancy, and K-means for the segments. The driver bars above are those models' output; these charts show the models themselves.

Price vs bookings — the proof behind −0.03

Every point is a listing, coloured by segment. The line is the fitted trend — nearly flat, because price and how often a listing books barely relate. Raising or cutting the rate does almost nothing to occupancy.

Choosing the number of segments

The "elbow" method: within-cluster spread as clusters increase. It bends at four — enough structure to be meaningful without over-splitting.

How well the price model predicts

Test-set listings: predicted vs actual price. On the dashed line = a perfect call. R² 0.42 — honest: it holds the mid-market and softens at the luxury tail, where price rides on things the data doesn't hold.

The one-line brief for the client
Price on location & type; win bookings on availability & reviews; watch the 31% "dormant" listings

For renters: value sits one borough out, and a room instead of a whole home halves the price. For owners: your rate is set by location and room type, but your occupancy is won on availability and reviews — not price. Nearly a third of listings are "dormant" — always available, almost never booked — the clearest sign that price is not the thing holding them back.

What the data says to do
Renters — buy location, not size
A private room in a prime area can beat an entire home in the outer boroughs on location while costing less. Room type is the fastest saving.
Trade whole-home for a room, or move one borough out.
Owners — price structurally
Location + room type carry ~58% of the price model. Everything you fiddle with after matters far less.
Get location and room type right first; fine-tune second.
Owners — stop discounting for bookings
Price ↔ occupancy is −0.03. Availability drives 60% of the occupancy model; reviews next. Price is noise.
Open the calendar and build reviews before you cut the rate.
The client's opportunity — the dormant 31%
Nearly a third of listings sit always available, barely booked. Not a pricing problem — a visibility and reviews problem.
Target this segment with onboarding, photography and review generation.
Honest limitations & where this goes next

Limitations

  • Cross-year signals. Occupancy is measured in 2019 and availability in 2020 — a fair proxy for demand, but not the same window.
  • Price is 42% explained. Location and room type dominate, but the rest sits in things this dataset doesn't hold — photos, amenities, host quality.
  • No seasonality yet. A single snapshot can't show how demand shifts month to month.
  • Neighbourhood coverage. The map shades the neighbourhoods with enough listings to read reliably.

Next steps

  • Add the demand time-series. A monthly index would show when to raise or hold the rate, not just how to set it.
  • Test the dormant fix. Run a reviews-and-photography push on a sample of dormant listings and measure the lift in bookings.
  • Enrich the price model. Bring in amenities and photo quality to close the gap the current model leaves.