recommendation system · vu amsterdam
Tourist Flow Optimisation
Nudging Amsterdam visitors away from the crowded spots. 1.9M City Card transactions, a context-aware recommender, and a counterfactual simulation to measure the effect.
Key numbers
- 1.9MCity Card transactions
- 3,617fewer visits at peak locations
- −0.054Gini change in spatial spread
what i did
What I did
Analysed 1.9M Amsterdam City Card transactions (2022 to 2024) to map visitor flows and pressure on peak locations by district and time.
Built a context-aware recommendation system combining novelty, weather, district pressure and distance signals.
Quantified policy impact with counterfactual simulation, showing 3,617 fewer visits at peak locations and a Gini change of −0.054 in spatial spread.
Shipped an interactive Streamlit dashboard with heatmaps and before-and-after comparisons for crowd-management review.
How it works.
The problem
City Card data shows where and when visitors concentrate, and which locations feel the pressure at peak times. The question: can context-aware recommendations spread that pressure out across the city?
Mapping the flows
1.9M Amsterdam City Card transactions from 2022 to 2024, used to map visitor flows and the pressure on peak locations by district and time.
A recommender with context
The recommender blends four signals: novelty, weather, current district pressure and distance, so suggestions stay relevant to the visitor while nudging them away from crowded spots.
Measuring the effect
A counterfactual simulation of the policy against the baseline showed 3,617 fewer visits at peak locations and a Gini change of −0.054 in spatial spread, meaning visits were distributed more evenly across the city.
What's next
I'm adding a natural-language layer on top of the dashboard: ask a question in plain English, a query is generated and run, and an answer comes back. It uses a text-to-SQL and function-calling setup, and it's in progress.