Anvendelse af maskinlæring til at opbygge en score for gåvenlighed
Jeg bor i Seattle og er for nylig flyttet til et andet kvarter. Ifølge Walk Score’s proprietære algoritmer flyttede jeg fra det 9. mest gangbare kvarter i Seattle til det 30. Jeg kan stadig nemt gå til en lokal kaffebar og frisør, men det er det hele! Jeg kan se, at jeg er flyttet til et betydeligt mindre gangbart kvarter, men det er uklart, hvordan man kvantificerer omfanget, eller hvad der indgår i en walkability score.
Jeg har tidligere brugt Walk Score API’et som en datakilde til at forudsige klynger af el-scooterplaceringer. Walk Score er et websted, der tager en adresse og beregner et mål for dens gangbarhed på en skala fra 0-100 ved hjælp af proprietære algoritmer og forskellige datastrømme.
Som en person, der nyder at gå til fods for at komme til steder (og vandre!), er jeg blevet nysgerrig efter at vide, hvad der driver disse proprietære algoritmer, der genererer en gangbarhedsscore. Jeg satte mig for at stille følgende spørgsmål:
- Kan de proprietære Walk Score-algoritmer omvendt konstrueres?
2. Hvilke funktioner er vigtige i opbygningen af en walkability score?
For at besvare disse spørgsmål byggede jeg et brugerdefineret datasæt ved at indsamle et varieret sæt af granulære Seattle-bydata og Walk Score API-data for at træne maskinlæringsmodeller til at forudsige en walkability score. Jeg var i stand til at træne en model, der opnåede en R² på 0,95 på testsæt-data. R-squared forklarer, i hvor høj grad variansen i funktionssættet forklarer variansen i Walk Score.
I det væsentlige var jeg i stand til at reverse engineere Walk Score-metodologien og genskabe de proprietære algoritmer, der driver deres Walk Score. De vigtigste funktioner for en lokalitets gåvenlighed er antallet af restauranter inden for 1000 meter, befolkningstætheden i det pågældende folketællingsområde, antallet af supermarkeder inden for 1000 meter og nærheden i meter til den nærmeste kommercielle zoneinddeling.
Data
Jeg startede med tilfældigt at generere bredde- og længdegradskoordinater i Greater Seattle-området. Da jeg havde fået en liste med ~7800 unikke geolokaliseringer, brugte jeg Walk Score API’et, som returnerede en score for gåvenlighed for hver unik geolokalisering. Derefter gik jeg i gang med at indsamle data, der afspejlede gangbarheden i en lokalitets omkringliggende område.
Datakilder:
- OSMnx: Python-pakke, der giver dig mulighed for at hente rumlige geometrier og modellere, projicere, visualisere og analysere gadenetværk fra OpenStreetMaps API’er.
- Walk Score API: Returnerer en score for gåvenlighed for et hvilket som helst sted.
- LocationIQ API: Nearby Points of Interest (PoI) API returnerer specificerede PoI’er eller steder omkring et givet koordinat.
- Seattle City Zoning: Zoneringsdistrikter angiver en anvendelseskategori (f.eks. enfamiliehusområder, flerfamiliehusområder, erhvervsområder, industriområder osv.).
- Seattle Census Data: Seattle Census Data: Seattle Census: Seattle Census Data: Indeholder befolkning og areal i kvadratmil for folketællingsdistrikter inden for Census Tracts and Geographic Identifiers
- U.S. Census Geocoder API: For en given geolokalisering returnerer API’et Census tracts og unikke geografiske identifikatorer. Dette var afgørende for korrekt sammensmeltning af zoneinddelings- og folketællingsdata.
Feature Engineering
På grund af begrænsninger i LocationIQ API’s daglige anmodninger forlængede jeg dataindsamlingsfasen i to uger. Dette efterlod mig med ~7800 unikke geolokaliseringer, som jeg derefter udviklede 27 funktioner til at træne maskinlæringsmodeller til at forudsige gangbarheden i hele Seattle.
Funktionerne fordeler sig på fire kategorier:
- Amenity-based:
2) Census Derived:: Antal busstationer, parker, restauranter, skoler, samlede faciliteter inden for en bestemt radius (1000-meter radius blev brugt for de fleste faciliteter)
2) Census Derived: zoneinddelingskategori og befolkningstæthed
3) Afstandsbaseret: nærhed til nærmeste motorvej, nærmeste primære vej, nærmeste sekundære vej, nærmeste boligvej, nærmeste industrizone
4) Struktur af gangnetværk: Intersection count, average circuity, street length average, average streets per node
Modeludvikling
Jeg trænede tre maskinlæringsmodeller: en tilfældig skovregression, en gradient boosting-regression og en ekstrem gradient boosting-regression. Jeg trænede hver af disse modeller på to tredjedele af de indsamlede data og reserverede den resterende tredjedel til testning.
Den ekstreme gradient boosting-regression gjorde et godt stykke arbejde med at forudsige Walk Score, idet den opnåede en R² på 0,95 på en tredjedel af testsættet (~2300 prøver). Denne model havde den bedst præsterende nøjagtighed i testsættet (RMSE).
Hvad er der i den sorte boks?
Sigtet med reverse engineering af Walk Score-metodologien var at få en forståelse af de vigtigste funktioner, der indgår i deres algoritmer. Vi ønsker at vide, hvad der virkelig gør et sted gangbart, og ikke blot en score! Ved at undersøge feature-betydningen af den ekstreme gradient boosting-model dominerede antallet af restauranter inden for 1000 meter som den vigtigste feature. Andre vigtige modelelementer var befolkningstætheden i et givet folketællingsområde, antallet af faciliteter i alt, antallet af supermarkeder inden for 1 000 meter og afstanden i meter til nærmeste kommercielle område.
Konklusion
Gennemgangsscore er allerede et nyttigt beslutningsværktøj til at finde ud af, hvor man skal bo og udvikle fast ejendom baseret på præferencer for at gå, cykle og transportere sig til fods. Det er nu nyttigt at have en forståelse af Walk Score-metodologien, og hvilke funktioner der indgår i opbygningen af deres algoritmer. Vi kender nu de input, der gør et sted gangbart i henhold til Walk Score.
Den nuværende model er trænet inden for bygrænserne i Seattle, hvor bykarakteristika er ens. Der er yderligere funktioner, der kunne indsamles for at forbedre Walk Score’s forudsigelseskraft, f.eks. topografiske målinger og beregninger af afstanden til den nærmeste facilitet. Modelprædiktioner kan nemt udvides til andre områder, da Walk Score API’en og de underliggende datakilder til generering af funktioner (US Census, OSMnx, City Zoning, LocationIQ) er bredt tilgængelige.
Kode
Koden til dette projekt kan findes på min GitHub