Mots-clés: Airbnb, Édimbourg, ville, science des données, pandas, géopandas, géospatial, foursquare, cartes, matplotlib, modélisation, quartier, réseaux, numpy, foursquare API, planification, python, urbanisme, visualisation des donnéesDans le cadre du certificat IBM Data Science Professional, nous pouvons essayer notre propre Data Capstone, où nous avons un avant-goût de ce que c'est que de résoudre des problèmes et de répondre à des questions comme un data scientist. Pour ma mission, j'ai décidé de faire encore un autre projet qui se penche sur la relation entre les prix Airbnb et ses déterminants. Oui, il y en a plusieurs très cool comme celle de Laura Lewis ici. Je n'aurais pas pu faire le mien sans lire et comprendre le sien (et son code), alors bravo! Cependant, étant donné que je suis tout au sujet de la recherche sur les transports, j'ai ajouté une petite touche d'analyse géospatiale en examinant les caractéristiques géographiques comme prédicteurs possibles. Cet article explique un peu l'arrière-plan du projet, la collecte de données, le nettoyage et le prétraitement, la modélisation et un résumé rapide.Pour le cahier complet avec tout le code, vous pouvez consulter le repo sur mon Github.Si pour une raison que vous ne connaissez pas déjà, Airbnb est un marché Internet pour la location à court terme de maisons et d'appartements. Il vous permet, par exemple, de louer (lister) votre maison pendant une semaine pendant votre absence, ou de louer votre chambre vide. Un défi auquel les hôtes Airbnb sont confrontés est de déterminer le prix de location nocturne optimal. Dans de nombreux domaines, les locataires (hôtes) sont présentés avec une bonne sélection d'annonces et peuvent filtrer selon des critères tels que le prix, le nombre de chambres, le type de chambre, etc. Comme Airbnb est un marché, le montant qu'un hôte peut facturer est finalement lié aux prix du marché. L'expérience de recherche sur Airbnb ressemble à ceci:Bien qu'Airbnb fournisse aux hôtes des conseils généraux, il n'y a pas de méthodes faciles d'accès pour déterminer le meilleur prix pour louer un espace. Il existe des logiciels tiers disponibles, mais à un prix élevé (pour un exemple sur les logiciels disponibles, cliquez ici).Une méthode pourrait être de trouver quelques annonces similaires à l'endroit qui sera mis en location, de faire la moyenne des prix indiqués et de fixer notre prix à ce prix moyen calculé. Mais le marché est dynamique, nous voudrions donc mettre à jour le prix fréquemment et cette méthode peut devenir fastidieuse.Un autre problème? Nous allons probablement manquer les avantages concurrentiels de notre annonce sur les annonces environnantes, comme la proximité d'une épicerie, d'un pub et d'autres services supplémentaires, ou peut-être même la qualité de la comparaison de mes photos.Ainsi, ce projet utilise plusieurs fonctionnalités de listage pour essayer de prédire le prix, avec en prime un prédicteur basé sur l'espace: la proximité de la propriété avec certains sites. Cela permet au modèle de mettre un prix implicite sur des choses telles que vivre près d'un bar, d'un pub ou d'un supermarché.Airbnb ne publie aucune donnée au public, mais un groupe distinct nommé Inside Airbnb gratte et compile des informations accessibles au public sur de nombreuses listes de villes sur le site Web d'Airbnb. Pour ce projet, j'ai utilisé leur ensemble de données gratté le 21 juillet 2019 sur la ville d'Édimbourg, en Écosse. Il contient des informations sur toutes les listes d'Edimbourg Airbnb qui étaient en direct sur le site à cette date (plus de 14 000).Les données ont certaines limites. Le plus notable est qu'il gratte le prix annoncé plutôt que le prix réel payé par les clients précédents. Des données plus précises sont disponibles moyennant des frais dans des sites comme AirDNA.Chaque ligne de l'ensemble de données est une liste disponible à la location sur le site d'Airbnb pour la ville spécifique (observations). Les colonnes décrivent les différentes caractéristiques de chaque liste (caractéristiques).Certaines des fonctionnalités les plus importantes que ce projet examinera sont les suivantes:Pour modéliser la relation spatiale entre les prix de location Airbnb et la proximité de la propriété à certains sites, j'ai utilisé l'API Foursquare pour accéder aux sites de la ville et le réseau routier est disponible via OpenStreepMap (OSM).En bref, l'ensemble de données d'origine contenait 14 014 listes Airbnb et 106 fonctionnalités, mais j'ai laissé tomber un tas. Par exemple, certaines d'entre elles sont des variables de texte libre, comme la description de l'hôte de la propriété et toutes les critiques écrites. Pour inclure ces données, j'aurais dû faire un traitement en langage naturel, mais malheureusement, je ne pouvais pas. Ces fonctionnalités ont donc été supprimées. De plus, plusieurs colonnes ne contenaient qu'une seule catégorie, elles ont donc également été supprimées. La plupart des annonces n'offrent pas la fonctionnalité des expériences, donc c'était aussi gonner.Une étape complète étape par étape de cette section, comment et pourquoi j'ai nettoyé les données comme je l'ai fait est sur le cahier sur mon github ou sur ce rapport sans tout le code.Une analyse exploratoire intéressante des données est également présente. L'une des conclusions de «no sh * t Sherlock» est qu'il existe une saisonnalité claire lorsqu'il s'agit d'inscriptions sur le marché.Chaque année, il y a un pic vers des hôtes qui se rejoignent vers le milieu de l'année (été), et les points les plus bas sont le début et la fin de chaque année. En août, lors du Edinburgh Fringe Festival, le prix de location des chambres augmente considérablement. C'est un événement extrêmement populaire et une grande partie des biens loués disponibles aura été occupée en raison du nombre de personnes qui y assistent chaque année. Édimbourg a beaucoup d'autres événements tout au long de l'année, principalement entre avril et décembre. Il y a des artistes de classe de mots qui se produisent tout au long de ces mois.Pour le reste de l'année, Édimbourg occupe une place unique en tant que capitale culturelle non seulement de l'Écosse, mais du Royaume-Uni. La demande d'hébergement et de tourisme est stable, car Édimbourg est une capitale commerciale après Londres.En termes de changements de prix au fil du temps, le prix moyen par nuit pour les annonces Airbnb à Édimbourg a légèrement augmenté au cours des 10 dernières années. Mais l'extrémité supérieure des prix de l'immobilier a beaucoup augmenté, entraînant une augmentation plus importante du prix moyen par rapport à la médiane. Le prix moyen en 2010 était de 107,33 £ et la médiane de 115,0 £, tandis que le prix moyen en 2018 (la dernière année complète de données) était de 104,55 £ et la médiane de 79,0 £. Fondamentalement, les propriétaires d'hébergement coûteux ont rapidement découvert les avantages d'utiliser Airbnb (principalement moins de taxes et moins de responsabilités, mais c'est une histoire pour un autre jour).Maintenant pour les trucs sympas (pour moi). Lors de la recherche d'un logement, être proche de certaines zones touristiques est important. Mais aussi, savoir que vous aurez une épicerie ou un supermarché à distance de marche peut être un plus. Beaucoup de locataires apprécient le fait que vous puissiez préparer vos propres repas (et économiser quelques £ £) lorsque vous obtenez un Airbnb par rapport à une chambre d'hôtel.Ainsi, la proximité de certains lieux, tels que les restaurants, les cafés et les magasins pourrait nous aider à prédire le prix.Une grande partie des listes Airbnb sont centrées dans la vieille ville d'Édimbourg, ce qui correspond à l'énorme tirage des touristes, en particulier pendant le festival annuel Fringe.La distribution des prix reflète également que les listes les plus chères se trouvent dans la vieille ville.Pour obtenir des informations sur des lieux spécifiques, j'ai utilisé la latitude et la longitude des quartiers d'Edimbourg pour télécharger une liste des lieux par quartier via l'API de Foursquare.La latitude et la longitude provenaient d'une liste de quartiers accessible au public sous la forme d'un fichier geojson. J'aurais pu récupérer la latitude et la longitude de l'ensemble de données d'origine des listes Airbnb, mais je travaillais déjà avec ce fichier, j'ai donc décidé de simplement l'utiliser. Ensuite, je les ai fusionnés par quartier.J'ai d'abord dû charger les géodonnées:map_df est un GeoDataFrame. Pour récupérer les sites par quartier, j'ai extrait la latitude et la longitude ou x et y de l'objet ponctuel dans la GeoSeries. Le code suivant renvoie x et y en tant que colonnes GeoDataFrame distinctes dans le map_df d'origine.Ensuite, nous créons l'URL de demande d'API, faisons la demande GET et extrayons les informations pour chaque lieu situé à proximité de nos quartiers. Cette fonction très utile ci-dessous nous a été fournie lors du cours Data Science. Il parcourt tous les quartiers pour récupérer les données que nous voulons:Maintenant, nous exécutons la fonction ci-dessus sur chaque quartier et créons une nouvelle trame de données appelée edinburgh_venues.Une fois que nous avons cela, nous pouvons regarder les différents lieux autour de chaque quartier. Pour commencer, il y avait 182 catégories de sites uniques. Il y avait quand même assez de désordre. J'ai donc nettoyé les données récupérées, groupé les rangées par quartier et pris la moyenne et la fréquence d'occurrence de chaque catégorie.Cela m'a aidé à trouver les 5 lieux les plus courants par quartier:Et enregistrez-le dans une trame de données pandas pour voir et décider quels sites sont intéressants:En regardant de près les données, il était clair que les lieux les plus courants étaient l'hôtel, le pub, l'épicerie / supermarché et le café / café, avec un bar, un arrêt de bus et un restaurant indien derrière. Les restaurants étaient divisés en sous-catégories. Je les ai donc regroupés en une seule grande catégorie de restaurant. Je pensais qu'il était peu probable qu'un hôtel à proximité affecte le prix, car les annonces Airbnb sont censées appartenir à une autre catégorie de location à court terme. Ils offrent des avantages assez différents de ceux des hôtels. Je n'ai donc pas considéré cette catégorie de lieux.Armé de ces données, j'ai commencé le processus de mesure de la proximité des lieux dont nous avons parlé. Nous le faisons en analysant l'accessibilité.L'accessibilité est la facilité d'atteindre des destinations. Est un concept très important dans le transport avec une vaste documentation disponible. L'accessibilité façonne la capacité des gens à accéder aux opportunités et à réaliser leur plein potentiel en tant qu'êtres humains. C'est pourquoi les mesures d'accessibilité sont souvent utilisées comme substituts des inégalités spatiales et de transport.Pour faire simple, pour ce projet, j'ai mesuré l'accessibilité en mesurant l'accès aux sites ou points d'intérêt (POI) téléchargés sur Foursquare. Les pubs, restaurants, cafés et supermarchés / épiceries sont nos POI (ensemble de données de 441 POI).Pour aider à l'analyse de l'accessibilité, Pandana est la bibliothèque Python de choix. Pandana est une bibliothèque de graphes pratique qui permet aux cadres de données Pandas d'être transmis à un graphe réseau qui mappe les analyses au niveau du graphe aux opérations C sous-jacentes. Tout cela signifie que c'est beaucoup plus rapide que les graphiques traditionnels basés sur Python.Pour commencer l'analyse, nous devons obtenir les données du réseau routier de l'API OSM en utilisant les données de localisation d'Edimbourg (la boîte englobante).Un réseau avec 51 553 nœuds est ensuite téléchargé à partir d'OSM après avoir exécuté le code. Lorsque nous l'enregistrons sur HDF5, vous remarquerez que certains nœuds sont exclus. Cela peut être utile lors de l'affinement d'un réseau afin qu'il ne comprenne que des nœuds validés. J'ai utilisé la méthode low_connectivity_nodes () pour identifier les nœuds qui ne peuvent pas être connectés au plus grand réseau et les exclure.Enfin, nous calculons l'accessibilité aux POI:Le bloc de données résultant ressemble à ceci:Et quelle meilleure façon de comprendre ce que sont tous ces chiffres qu'avec de belles visualisations (qu'est-ce que l'analyse géospatiale sans vraiment?). Tout d'abord, regardons la distance jusqu'au POI le plus proche de tout type, car je ne suis pas intéressé par les différences d'accessibilité entre les sites:Nous pouvons voir qu'il y a certaines zones où les gens doivent marcher plus de 500 mètres pour atteindre les commodités les plus proches, tandis que la vieille ville d'Édimbourg a des distances de marche de moins de 100 mètres en moyenne.La carte montre la distance de marche en mètres de chaque nœud du réseau au restaurant, bar, café, pub et épicerie le plus proche. Mais, un meilleur indicateur d'accessibilité pourrait être d'avoir accès à un grand nombre de commodités. Donc, au lieu du plus proche, j'ai tracé l'accessibilité à la cinquième commodité la plus proche:Cette période est d'autant plus remarquable que la vieille ville et le centre-ville d'Édimbourg ont une meilleure accessibilité.Pour ce projet, je fais l'hypothèse que l'accès aux restaurants, boutiques, cafés, bars et pubs est important pour les utilisateurs d'Airbnb. Je pondère donc tous les points d'intérêt de manière égale et j'utilise la distance jusqu'au cinquième lieu le plus proche comme mesure composée de l'accessibilité. Cela donne une image plus claire des quartiers les plus accessibles à pied, par rapport au tracé de la distance jusqu'au lieu le plus proche.Voici le code pour définir la distance jusqu'au cinquième équipement le plus proche comme mesure composée de l'accessibilité:Tiens voilà. Une fonction de localisation a été créée puis ajoutée au jeu de données pour la modélisation.Beaucoup de préparation de données a eu lieu ici, ce qui est bien sûr sur le repo. Je n'entrerai pas dans les détails, mais en résumé, j'ai nettoyé les données, vérifié la multicolinéarité et traité les fonctionnalités problématiques, transformé les données en journal qui ont contribué à rendre le prix plus distribué normalement, les fonctionnalités catégorielles encodées à chaud et normalisées avec StandardScaler ( ). Enfin, j'ai divisé les données en train-test.Deux modèles ont été utilisés:Les mesures d'évaluation utilisées étaient l'erreur quadratique moyenne (pour la perte) et le carré r (pour la précision).J'ai choisi d'exécuter un modèle de régression hédonique car ils sont couramment utilisés dans l'évaluation immobilière et l'économie immobilière. Idéalement, des tests de multiplicateur de Lagrange devraient être effectués pour vérifier s'il y a un décalage spatial dans la variable dépendante et donc un modèle de décalage spatial est préféré pour estimer un HPM spatial (voir ce post pour la régression spatiale en utilisant Pysal). Cependant, aux fins de ce projet, j'utilise uniquement un modèle OLS conventionnel pour l'estimation des prix hédoniques qui inclut des caractéristiques spatiales et de localisation, mais pas un décalage spatial qui tient compte de la dépendance spatiale.Ainsi, les premières variables explicatives sont les caractéristiques des listes (logements, salles de bain, etc.) et le deuxième groupe de variables explicatives basées sur les caractéristiques spatiales et géographiques est Score, qui est la distance du réseau au 5ème lieu le plus proche que nous avons calculé avec Pandana; et Appartenance au quartier, 1 si l'annonce appartient au quartier spécifié, 0 sinon.Voici mon code pour le modèle de prix hédonique spatial:Et les résultats:Les caractéristiques expliquent donc environ 51% de la variance de la variable cible. L'interprétation de la valeur mean_squared_errorvalue est quelque peu plus intuitive que la valeur r au carré. En tant que racine carrée d'une variance, RMSE peut être interprété comme l'écart type de la variance inexpliquée et a la propriété utile d'être dans les mêmes unités que la variable de réponse. Dans ce cas cependant, la variable de réponse est transformée en logarithme, donc l'interprétation n'est pas dans l'unité d'origine, mais plutôt comme un écart en pourcentage. Des valeurs plus faibles de RMSE indiquent un meilleur ajustement. RMSE est une bonne mesure de la précision avec laquelle le modèle prédit la réponse. Nous pouvons voir cette relation graphiquement avec un nuage de points:J'ai également essayé d'utiliser Ridge Regularization pour diminuer l'influence des fonctionnalités moins importantes. La régularisation des crêtes est un processus qui réduit les coefficients de régression des caractéristiques moins importantes. Il prend un paramètre alpha, qui contrôle la force de la régularisation.J'ai expérimenté en parcourant quelques valeurs différentes d'alpha, et je vois comment cela change les résultats.Voici ce que j'ai obtenu:Ouais… il ne s'est pas passé grand-chose. Les valeurs RMSE et r² sont presque identiques lorsque la valeur alpha augmente, ce qui signifie que la prédiction du modèle ne s'améliore pas sensiblement avec le modèle de régression de crête.Passons au modèle d'arbres de décision boostés par gradient.XGBoost (eXtreme Gradient Boosting) est une implémentation d'arbres de décision à gradient amélioré conçus pour la vitesse et les performances. Est un algorithme très populaire qui a récemment dominé l'apprentissage automatique appliqué pour les données structurées.On s'attendait à ce que ce modèle fournisse la meilleure précision possible et une mesure d'importance des caractéristiques par rapport à la régression hédonique. Et ça l'a fait.Voici le code du modèle XGBoost:Et les résultats:Avec ce modèle, les caractéristiques expliquent environ 65% de la variance de la variable cible et ont un RMSE plus petit que le modèle de régression SHP.Outre ses performances supérieures, l’utilisation d’ensembles de méthodes d’arbre de décision comme l’amplification du gradient permet de fournir automatiquement des estimations de l’importance des caractéristiques à partir d’un modèle prédictif entraîné. Pour plus d'informations sur la façon dont l'importance des fonctionnalités est calculée dans les arbres de décision boostés, consultez cette réponse dans StackOverflow.Comme vous pouvez le voir, un bon nombre de fonctionnalités ont une importance de fonctionnalité de 0 dans ce modèle de régression XGBoost.Les 10 principales fonctionnalités les plus importantes sont:La caractéristique la plus importante pour prévoir le prix est si la location est la totalité de l'appartement. J'aime beaucoup. Ca a du sens. Le prix demandé est plus élevé si l'offre concerne tout l'appartement / la maison. Le deuxième est le nombre de personnes que la propriété peut accueillir, ce qui est également logique. C'est la première chose que vous recherchez lorsque vous recherchez un lieu.Ce qui est drôle, c'est que les fonctionnalités de localisation ne sont pas dans le top dix. L'appartenance à un certain quartier et un certain score (mesure d'accessibilité) sont d'une importance relativement faible par rapport aux trois principales caractéristiques. Cependant, Review_Scores_Location_9 / 10 a presque atteint le top dix. Assez intéressant.Il semble que le prix soit affecté par l'évaluation positive de l'emplacement par les locataires précédents plutôt que par l'accessibilité réelle de la propriété par rapport aux principaux points d'intérêt.Cela pourrait également être dû au fait qu'Édimbourg est une petite ville piétonne avec de bons services de transport. Donc, l'emplacement n'est peut-être pas un problème majeur pour atteindre les principales attractions et commodités touristiques.Le graphique de l'importance des fonctionnalités produit par le modèle XGBoost a montré que de nombreuses colonnes de revue sont d'une importance relativement faible. Alors, je les ai laissés tomber. Ensuite, j'ai exécuté à nouveau les modèles, juste sans ces colonnes.Voici les résultats:Et comme pour la tentative de régression de Ridge, il ne s'est pas passé grand-chose ici non plus. La régression hédonique spatiale et XGBoost fonctionnent presque exactement de la même manière sans les colonnes de révision supplémentaires.Si nous devons choisir un modèle pour prédire le prix, ce serait le XGBoost sans les colonnes de révision. Il fonctionne mieux que les deux modèles de régression hédonique spatiale et tout aussi bon que le premier modèle XGBoost, mais il est moins coûteux en termes de calcul. Pourtant, il ne prédit qu'environ 66% de la variation des prix. Ce qui signifie que nous avons encore 34,44% inexpliqués.Un tas de variables différentes qui ne sont pas incluses pourraient expliquer le reste de la variance.Par exemple, étant donné l'importance des avis des clients sur la fiche pour déterminer le prix, une meilleure compréhension des avis pourrait très probablement améliorer la prévision. On pourrait utiliser l'analyse des sentiments. Un score compris entre -1 (sentiment très négatif) et 1 (sentiment très positif) peut être attribué à chaque avis par annonce. Les scores sont ensuite moyennés sur tous les avis associés à cette liste et les scores finaux peuvent être inclus en tant que nouvelle fonctionnalité dans le modèle (voir ici pour un exemple).Nous pourrions également inclure la qualité d'image comme caractéristique. En utilisant la différence dans la différence avec des analyses d'apprentissage approfondi et d'apprentissage supervisé sur un ensemble de données de panel Airbnb, les chercheurs ont constaté que les unités avec des photos vérifiées (prises par les photographes d'Airbnb) génèrent en moyenne des revenus supplémentaires par an (voir ici).Je pense toujours que l'accessibilité joue un rôle important, même si ce n'était pas si clair cette fois. J'ai utilisé le réseau piéton OSM pour l'analyse de l'accessibilité, mais l'utilisation d'un réseau graphique multimodal aurait été la chose idéale à faire. De cette façon, j'aurais mesuré l'accessibilité en termes de l'ensemble du réseau de transport et pas seulement en termes de marchabilité. Peut-être que l'importance des fonctionnalités aurait été plus élevée sur la liste.Et c'est ça. Ce fut un projet très amusant à travailler.Si vous avez réussi à parcourir tout cela et que vous lisez ceci, merci pour votre temps! Toute rétroaction est très appréciée.