Data Science in de praktijk: begin een Airbnb in IJburg

20 februari 2020 | Blog | Klaasjan Ouwens

Wat doet een Data Scientist nu in de praktijk? Vraag het aan eentje (er zijn tegenwoordig zoveel, op elke verjaardag vind je er wel een) en dikke kans dat de data scientist los gaat over de toepassing van de meest fancy machine learning modellen voor een ingenieuze manier om data te clusteren of te classificeren. Drie keer gapen en vijf zoutstengels later druip je af met het gevoel dat het wel niet zoveel zou toevoegen.

Leestijd: 8 minuten – auteur:

Klaasjan Ouwens

Data Science Consultant

Wat vaak wordt vergeten, is dat alle machine learning pas relevant wordt als er eerst nette data cleaning is gedaan. In de praktijk gaat een groot deel van de tijdsbesteding van de data scientist hieraan op, onder andere omdat het heel belangrijk is om hier goede keuzes te maken. Voor ruim 70% van data scientists neemt data opschonen meer dan een kwart van hun tijd in (zie een recente survey van Figure Eight).

“Data Cleaning, is dat ondankbaar, saai werk? Zeker niet! Ten eerste moeten er belangrijke keuzes gemaakt worden, en ten tweede kun je al tijdens het opschonen van data concrete vragen beantwoorden.”

Aan de hand van data van Airbnb Amsterdam neem ik je in deze post mee in de stappen die nodig zijn om data klaar te maken voor een informatieve analyse. Aan bod komen data cleaning (of ‘data wrangling’ zoals het ook wordt genoemd), normalisatie, feature engineering, en de eerste data-visualisaties. Daarmee kunnen al verschillende vragen beantwoord worden, zoals:

  • Hoeveel Airbnb-listings zijn er in Amsterdam?
  • In welk stadsdeel zijn de Airbnb’s het duurst?
  • Hoeveel Airbnb-listings zijn inactief?
  • Is het het waard om superhost te zijn?
  • Hoe groot is de invloed van de review score?
  • Neemt de populariteit van Airbnb af?

“Hoe diepgaand je data science ook gaat, je kunt in elke stap in het proces nuttige informatie tevoorschijn toveren waarmee businessvragen te beantwoorden zijn.”

flowchart1

Dit blog is geschreven voor mensen die zelf geen data scientist zijn, maar voor iedereen met interesse is alle Python-code beschikbaar op mijn GitHub. Wil je aan de hand van interactieve visuals zelf de data verkennen? Kijk dan eens naar het bijbehorende BI Tools dat ik heb gemaakt.

Data extractie

Via de website insideairbnb.com is per stad data te downloaden van Airbnb. Per listing zie je een groot aantal variabelen, zoals het aantal bedden, of er airco is, in welk stadsdeel het is, de scores, en natuurlijk de prijs per nacht. Met deze data moet nog veel gebeuren voordat het geschikt is voor analyse. We kunnen al wel 1 vraag beantwoorden: er zijn ongeveer 20 duizend Airbnb-listings in Amsterdam. Dat betekent ook meteen dat er aardig wat data is om verder in te duiken. Voordat we wat kunnen doen moet er data worden opgeschoond. Om te beginnen kunnen we van alle numerieke kolommen een histogram maken:

exploration_histogram

De histogram van de prijs valt gelijk op (een-na-laatste rij, tweede kolom, ‘price’). De meeste prijzen liggen tussen de 50 en 200 euro per nacht, maar er zijn enkele uitschieters naar duizenden euro’s per nacht. Meer dan duizend euro per nacht leek me onwaarschijnlijk, dus ik dacht eerst dat er iets mis was met de data. Een snelle zoektocht op Airbnb liet zien dat er wel degelijk accommodaties zijn die zoveel kosten. Zoals een volledige vuurtoren op het NDSM-terrein die, op moment van schrijven, voor een luttele 3950 euro per nacht te boeken is. De observatie dat er enkele extreme uitschieters in de prijs schieten, is alvast waardevolle informatie als data straks getransformeerd moet worden voor toepassen van machine learning modellen.

Data Cleaning

Data Cleaning is een stap die vaak over het hoofd wordt gezien, maar in de praktijk vaak het merendeel van de tijd kost. Enkele voorbeelden:

  • Er zijn kolommen die niet netjes geformatteerd zijn (bijvoorbeeld prijzen waar een dollar-teken in staat, of meerdere waarden in dezelfde kolom). Sommige data staan in een formaat waar een rekenmodel moeilijk mee overweg kan (bijvoorbeeld rare datumnotatie), of tekst-labels die kunnen worden ingedeeld in categorieën.
  • Bij sommige listings missen wat datapunten. In het geval van een missende cleaning fee mogen we aannemen dat de schoonmaakkosten 0 euro zijn. Alle missende waardes voor repsonse rate kunnen we in de categorie Unknown zetten. In andere gevallen kunnen we de gemiddelde waarde van de kolom gebruiken om missende waardes op te vullen.
  • Sommige data hebben veel te veel categorieën. Zo hebben de meeste listings een property_type dat apartment of house is, maar er zijn ook Earth House, 2 Yurts en 1 Dome House in Amsterdam. Opzich leuk om te weten, maar deze categorieën zijn zo klein dat er weinig zinnigs over te zeggen is. Om ervoor te zorgen dat categorieën niet te specifiek zijn (en daarmee nietszeggend worden), is het beter om de de 33 property types in de ruwe data te clusteren in 5 groepen: Apartment, House, Hotel, Boat, of Other.
property_type_raw
property_type_clean-3

Links: de originele indeling van property types. Er zijn veel kleine categorieen die weinig informatie geven. Rechts: opgeruimde ‘property_types.

Data Exploratie

Nu de data opgeruimd is, kunnen we specifieke vragen beantwoorden. Daarnaast kunnen we op zoek gaan naar opvallende patronen. 

In welk stadsdeel zijn de Airbnb’s het duurst?

Als de data enigszins is opgeschoond, kunnen we andere vragen beantwoorden. Als we de prijzen per stadsdeel invullen in een kaartje van Amsterdam (zie onderstaande figuur), dan is al goed te zien welk stadsdeel het duurst is: Centrum-West is het duurst (145 euro), op de voet gevolgd door Centrum-Oost (142 euro). Geen verrassing dat je het meest betaalt in het centrum. Logischerwijs is hier ook veel te huren, bij elkaar 3883 listings. De laagste prijs is in Bijlmer Oost (60 euro), en hier zijn ook maar 106 listings te vinden.

airbnb_medianprice_per_neighbourhood-2
De mediane prijs per nacht per stadsdeel in Amsterdam. De top drie duurste stadsdelen zijn Centrum-West, Centrum-Oost, en IJburg. Prijzen zijn in US dollars.

Als we kijken naar de relatie tussen aantal Airbnb-listings en de prijs, zien we dat over het algemeen hogere prijzen worden gehanteerd in stadsdelen waar het aanbod groter is. Er zijn wel uitschieters: er zijn relatief veel accommodaties in de Baarsjes / Oud-West te vinden, maar de prijs een stuk lager ligt dan in Centrum, de Pijp of Zuid. Er zijn ook stadsdelen die uitschieten door relatief hoge prijzen en weinig aanbod. Dat zijn onder andere de stadsdelen IJburg en de Zuidas. Het zou natuurlijk kunnen dat in deze stadsdelen mensen hier relatief kieskeurig zijn en niet snel verhuren, tenzij ze er veel geld voor krijgen. Dit is een hypothese die gevormd wordt tijdens dit proces. Met verdere analyse kunnen we uitzoeken of dit waar is of niet.

listings_and_median-price-6-1024x408
Het aantal beschikbare accommodaties en mediane prijs voor elk stadsdeel. Er is een positief verband tussen prijs en aanbod, met IJburg en Oud-West als opvallende uitschieters.

Hoeveel Airbnb-listings zijn inactief?

Niet alle Airbnb-listings zijn even actief. Sommige mensen hebben een appartement op Airbnb staan, maar hebben die al meerdere jaren niet verhuurd. Maar liefst 3362 van de listings (oftewel 17% van het totaal) hebben de afgelopen twee jaar geen review gehad, dus die merk ik als inactief. Een even groot aantal (17%) heeft in de afgelopen twee maanden een review gehad, dus is wel degelijk actief.

activiteit_airbnb_last_review

Is het het waard om superhost te zijn?

En dan nu een belangrijke vraag voor veel mensen die via Airbnb verhuren: Is het het waard om superhost te zijn? Veel eigenaren hebben veel over voor die begeerde superhost-status. Komt dat ook tot uiting in de prijs? Het antwoord is: Nee. Of je nu superhost bent of niet, de prijs van een appartement ligt rond de 130 dollar (118 euro), en dat is niet significant hoger voor superhosts. Dat is een tegenvaller! Het is natuurlijk nog wel mogelijk dat het zijn van superhost wel belangrijk is in bepaalde stadsdelen, of voor een bepaalde klantgroep. Het zou bijvoorbeeld voor gezinnen belangrijker kunnen zijn dan voor studenten die alleen reizen. Met verdere analyse kunnen we uitzoeken of dit waar is of niet.

Is het het waard om als gast te letten op superhost-status?

Jazeker! Superhosts krijgen consistent hogere waarderingen van gasten. Zie onderstaande Power BI-visualisatie. De hoogste gemiddelde rating van non-superhosts (95.7, IJburg) is nog altijd lager dan de laagste gemiddelde score van superhosts (96.42, Bijlmer-Centrum). Het effect is niet in elk stadsdeel even groot: vooral een verblijf in Bijlmer-Oost is een stuk beter bij een superhost (een stijging van 92.34 naar 97.82). Het effect is een stuk minder groot in Noord-Oost (een stijging van 95.43 naar 96.79). Hoe dan ook blijkt dat het voor gasten altijd goed is om te kijken naar superhosts.

is_superhost-1
Van alle accomodaties worden er 3014 (15%) gehost door een superhost, en deze hebben een mediane prijs van 131 dollar. Dat is iets lager dan de mediane prijs van 130 dollar van appartementen die niet gehost worden door een superhost.
powerbi_superhost_stadsdeel-1
Deze Power BI-visualisatie laat voor elk stadsdeel zien wat de invloed is van superhost-status op rating. Links de gemiddelde rating van accomodaties van hosts die geen superhost zijn, rechts van alle superhosts.

 Welke voorziening heeft het grootste effect op de prijs?

Een voorziening die erg veel invloed heeft op de prijs is het hebben van een open haard. Airbnbs met open haard kunnen voor ruim de helft duurder worden verhuurd. Gasten geven ook significant hogere waarderingen voor accomodaties met open haard. Een andere voorziening die hoog scoort is het hebben van fireplace guards. Het moge duidelijk zijn waarom die hoog scoort: er zijn alleen fireplace guards in een accommodatie als er een open haard is. Het heeft dus weinig nut om fireplace guards te kopen en die los in een woning zonder open haard te zetten. Er zijn nog veel meer voorzieningen die sterk met elkaar correleren. Het is belangrijk dat we dit weten zodat we in volgende stappen (bij het toepassen van Machine Learning) daarmee rekening kunnen houden.

“Wat heeft wel een significant effect op de prijs van een Airbnb? Een open haard!”

indoor_fireplace
P-value is 1.76e-55 There are 18768 without Indoor fireplace, with a median price of 130.0 There are 1099 with Indoor fireplace, with a median price of 200.0

Er zijn meer van dit soort voorzieningen die overduidelijk met elkaar te maken hebben. Zo zijn er veel voorzieningen die een positief verband hebben met de prijs die allemaal onder de categorie ‘kind-vriendelijk’ vallen: kinderbestek, kinderboeken en -speelgoed, babyfoon, aanbevelingen voor babysitters, enzovoorts. Grote kans dat die voor dezelfde mensen een positief effect hebben op de aantrekkelijkheid van de accommodatie. Tegelijk is de kans groot dat een accommodatie zichzelf promoot als kindvriendelijk, dus al deze voorzieningen biedt. Wat heeft verder een positief effect op de prijs? Met name een locatie aan het water, een hot tub, en airconditioning.

Neemt de populariteit van Airbnb af?

Tenslotte: is Airbnb nog steeds zo populair als vroeger? Als we het kijken naar de datum waarop hosts zich geregistreerd hebben, is duidelijk te zien dat de piek van beginnen met Airbnb in 2014 en 2015 lag. We kunnen het aantal registraties uitsplitsen naar een globale trend, een seasonality (een jaarlijkse cyclus) en alles wat daarna nog overblijft aan overklaarde fluctuatie (residuals). Het is duidelijk dat er iedere zomer een duidelijke boost is in het aantal registraties, waarschijnlijk om voordeel te doen met het grote aantal toeristen in de zomer. Het dalende aantal registraties zou te maken kunnen hebben met de strengere regelgeving in Amsterdam. Verder kan een grillig aantal nieuwe registraties het gevolg zijn van nieuwe wetgeving. Het is hoe dan ook duidelijk: het aantal Airbnb-registraties neemt duidelijk sterk af sinds de zomer van 2016.

airbnb_seasonality
Het aantal registraties op Airbnb per maand, uitgesplitst naar trend, seasonality en residuals.

Conclusie

Het is altijd goed na te denken welke bias in deze data kan zitten. Het klinkt logisch, maar de heel slecht scorende appartementen zullen vanzelf niet meer geboekt worden. Daarnaast kunnen we hier niets zeggen over causaliteit: hebben accomodaties een hogere prijs als ze zo goed zijn, of als de vraag heel hoog is? Of besluiten eigenaren de prijs omhoog te doen als hun review scores hoger zijn geworden? In het proces van data-exploratie kunnen we in ieder geval de hypotheses vormen, die we met verdere analyses kunnen beantwoorden. Met een slag om de arm kunnen we, op basis van deze data, al wel het volgende advies geven:

“Begin een Airbnb in IJburg, met open haard (en maak je niet druk om je superhost-status)!”

Bepaalde eigenschappen van de data zorgen ervoor dat volledige nauwkeurigheid niet mogelijk is. Zo geeft Airbnb pas het specifieke adres van een accommodatie als je een boeking doet, daarvoor zie je alleen de locatie in een cirkel van ongeveer 150 meter breed. Daarnaast is het updaten van de informatie de verantwoordelijk van de verhuurder, dus kan het goed dat er verouderde informatie bij zit. Ook kunnen reviews spam zijn.

Hoe dan ook, er bleek genoeg data om inzicht te krijgen in de prijzen van Airbnb in Amsterdam. Voor geinteresseerden: alle analyses zijn gemaakt met Python (vooral Pandas, geopandas, en matplotlib). De code is op basis van een analyse van Airbnb-prijzen in Londen door Laura Lewis die zij beschikbaar heeft gesteld op GitHub. Ik heb de code aangepast, uitgebreid en beschikbaar gesteld op mijn GitHub .