Användning av maskininlärning för att skapa ett promenadresultat
Jag bor i Seattle och har nyligen flyttat till ett annat område. Enligt Walk Scores egenutvecklade algoritmer flyttade jag från det 9:e mest promenadvänliga kvarteret i Seattle till det 30:e. Jag kan fortfarande lätt gå till ett lokalt kafé och en frisör, men det är ungefär allt! Jag kan se att jag har flyttat till ett betydligt mindre promenadvänligt område, men det är oklart hur man kan kvantifiera omfattningen eller vad som ingår i en walkability score.
Jag har tidigare använt Walk Score API som en datakälla för att förutsäga kluster av platser för elektriska skotrar. Walk Score är en webbplats som tar en adress och beräknar ett mått på dess promenadvänlighet på en skala från 0-100 med hjälp av egna algoritmer och olika dataströmmar.
Som en person som gärna går till fots för att ta sig till platser (och vandrar!) har jag blivit nyfiken på vad som ligger bakom de egna algoritmerna som genererar en promenadvänlighetspoäng. Jag har ställt följande frågor:
- Kan de proprietära Walk Score-algoritmerna göras om?
2. Vilka funktioner är viktiga för att bygga upp en walkability-poäng?
För att besvara dessa frågor byggde jag upp ett anpassat datamaterial genom att samla in en mängd olika granulära data från Seattles stad och Walk Score API-data för att träna maskininlärningsmodeller för att förutsäga en walkability-poäng. Jag kunde träna en modell som uppnådde en R² på 0,95 på testdata. R-kvadrat förklarar i vilken utsträckning variansen i funktionsuppsättningen förklarar variansen i Walk Score.
I huvudsak kunde jag omvända Walk Score-metodiken och återskapa de proprietära algoritmer som ligger till grund för deras Walk Score. De viktigaste funktionerna för en plats gångbarhet är antalet restauranger inom 1 000 meter, befolkningstäthet inom den aktuella befolkningsgruppen, antalet stormarknader inom 1 000 meter och närhet i meter till närmaste kommersiella zonindelning.
Data
Jag började med att slumpmässigt generera koordinater för latitud och longitud i området Greater Seattle. När jag hade en lista med ~7800 unika geolokaliseringar använde jag mig av Walk Score API som returnerade ett betyg för gångbarhet för varje unik geolokalisering. Därefter började jag samla in data som speglade gångbarheten i en plats omgivning.
Datakällor:
- OSMnx: Pythonpaket som låter dig ladda ner rumsliga geometrier och modellera, projicera, visualisera och analysera gatunätverk från OpenStreetMaps API:er.
- Walk Score API: Återger ett betyg för gångbarhet för en plats.
- LocationIQ API: API: Nearby Points of Interest (PoI) API returnerar specificerade PoIs eller platser runt en given koordinat.
- Seattle City Zoning: Zoneringsdistrikt anger en användningskategori (t.ex. enfamiljshus, flerfamiljshus, handel, industri etc.)
- Seattle Census Data: Seattle Census: Seattle Seattle Geocoder: Innehåller befolkning och areal i kvadratmil för folkräkningsområden inom Census Tracts and Geographic Identifiers
- U.S. Census Geocoder API: U.S. Census Geocoder API: För en given geografisk plats returnerar API:et Census tracts och unika geografiska identifierare. Detta var avgörande för att kunna sammanföra zonindelnings- och folkräkningsdata korrekt.
Feature Engineering
På grund av begränsningar i LocationIQ API:s dagliga förfrågningar förlängde jag datainsamlingsfasen med två veckor. Detta gav mig ~7800 unika geolokaliseringar som jag sedan konstruerade 27 funktioner för att träna maskininlärningsmodeller för att förutsäga gångbarhet i hela Seattle.
Funktionerna är indelade i fyra kategorier:
- Amenity-based:
2) Census Derived: Antal busstationer, parker, restauranger, skolor, totalt antal bekvämligheter inom en viss radie (1000 meters radie användes för de flesta bekvämligheter)
2) Census Derived: Census Derived: Antal bekvämligheter inom en viss radie (1000 meters radie användes för de flesta bekvämligheter): Zoningskategori och befolkningstäthet
3) Avståndsbaserat: Närhet till närmaste motorväg, närmaste primära väg, närmaste sekundära väg, närmaste bostadsväg, närmaste industriområde
4) Struktur för gångnätverk: Intersection count, average circuity, street length average, average streets per node
Modellutveckling
Jag tränade tre modeller för maskininlärning: En random forest-regression, en gradient boosting-regression och en extrem gradient boosting-regression. Jag tränade var och en av dessa modeller på två tredjedelar av de insamlade uppgifterna och reserverade den återstående tredjedelen för testning.
Den extrema gradientförstärkande regressionen gjorde ett bra jobb när det gällde att förutsäga gångpoängen och uppnådde en R² på 0,95 på en tredjedels testuppsättning (~2 300 prover). Denna modell hade den bäst presterande noggrannheten i testuppsättningen (RMSE).
Vad finns i den svarta lådan?
Syftet med att bakåtkompilera Walk Score-metodiken var att få en förståelse för de viktigaste funktionerna som ingår i deras algoritmer. Vi vill veta vad som verkligen gör en plats promenadvänlig, inte bara en poäng! Genom att undersöka funktionernas betydelse i den extrema gradient boosting-modellen dominerade antalet restauranger inom 1 000 meter som den viktigaste funktionen. Andra viktiga egenskaper i modellen var befolkningstäthet i en viss folkräkningszon, antal totala bekvämligheter, antal stormarknader inom 1 000 meter och närhet i meter till närmaste kommersiella zonering.
Slutsats
Gångresultatet är redan ett användbart verktyg för att fatta beslut om var man ska bo och utveckla fastigheter baserat på preferenser för promenader, cykling och transporter. Det är nu bra att ha en förståelse för Walk Score-metodiken och vilka funktioner som ingår i byggandet av deras algoritmer. Vi vet nu vilka indata som gör en plats promenadvänlig enligt Walk Score.
Den nuvarande modellen tränas inom Seattles stadsgränser, där de urbana egenskaperna är liknande. Det finns ytterligare funktioner som skulle kunna samlas in för att förbättra förutsägelseförmågan hos Walk Score, t.ex. topografiska mätningar och beräkningar av avståndet till närmaste bekvämlighet. Modellens förutsägelser kan lätt utvidgas till andra områden, eftersom Walk Score API och de underliggande datakällorna för att generera funktioner (US Census, OSMnx, City Zoning, LocationIQ) är allmänt tillgängliga.
Kod
Koden för det här projektet finns på min GitHub
.