From 3a14cb71a247dbe4206b3c07b2534bd32b27142c Mon Sep 17 00:00:00 2001 From: Adelson Araujo Date: Mon, 14 Sep 2026 16:18:18 +0000 Subject: [PATCH] Add get_city_shape, the Natal example notebook and the framework README - crime_mapping.get_city_shape(place_query): thin wrapper around osmnx.geocode_to_gdf returning the raw city shape (tests included) - PredictionPipeline.evaluate accepts a list of scorings and returns a DataFrame from a single time series CV pass - examples/natal.ipynb: end-to-end walkthrough on Natal with synthetic data (study area from OSM, synthetic events, grids, KDE vs QuadratCount, bandwidth comparison, features, pipeline evaluation, recursive forecasts, hotspot recovery check); examples/build_natal_notebook.py regenerates it - README reorganised: framework section summarising Chapter 3 of the thesis with Figures 7-12 (docs/assets/thesis), thesis linked in Resources, Status moved to the end - Documentation: the home page is now generated from the README (docs/hooks/readme.py) and the notebook is rendered via mkdocs-jupyter under "Examples" Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FtZdc2gGrDh4PGSLyT9yRE --- .gitignore | 2 + CHANGELOG.md | 8 + CONTRIBUTING.md | 10 +- README.md | 293 ++++--- .../thesis/fig07-dataset-preparation.png | Bin 0 -> 54050 bytes docs/assets/thesis/fig08-feature-ingest.png | Bin 0 -> 69674 bytes .../fig09-temporal-feature-extraction.png | Bin 0 -> 41286 bytes .../thesis/fig10-feature-set-example.png | Bin 0 -> 71289 bytes docs/assets/thesis/fig11-ml-modelling.png | Bin 0 -> 39625 bytes .../thesis/fig12-prediction-pipeline.png | Bin 0 -> 50485 bytes docs/examples/natal.ipynb | 1 + docs/guide/modelling.md | 2 +- docs/hooks/readme.py | 31 + docs/index.md | 64 +- examples/build_natal_notebook.py | 515 +++++++++++++ examples/natal.ipynb | 728 ++++++++++++++++++ mkdocs.yml | 9 + pyproject.toml | 2 + src/predspot/__init__.py | 2 + src/predspot/crime_mapping.py | 30 + src/predspot/ml_modelling.py | 22 +- tests/test_load_study_area.py | 16 +- tests/test_ml_modelling.py | 4 + 23 files changed, 1573 insertions(+), 166 deletions(-) create mode 100644 docs/assets/thesis/fig07-dataset-preparation.png create mode 100644 docs/assets/thesis/fig08-feature-ingest.png create mode 100644 docs/assets/thesis/fig09-temporal-feature-extraction.png create mode 100644 docs/assets/thesis/fig10-feature-set-example.png create mode 100644 docs/assets/thesis/fig11-ml-modelling.png create mode 100644 docs/assets/thesis/fig12-prediction-pipeline.png create mode 120000 docs/examples/natal.ipynb create mode 100644 docs/hooks/readme.py create mode 100644 examples/build_natal_notebook.py create mode 100644 examples/natal.ipynb diff --git a/.gitignore b/.gitignore index 73b2e17..7591d61 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ dist/ htmlcov/ .ruff_cache/ site/ +examples/cache/ +.cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md index cff9573..e400e6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,14 @@ Revival release: the code base now targets Python 3.10+ with current versions of pandas (>= 2.2), GeoPandas (>= 1.0), scikit-learn and statsmodels. ### Added +- `crime_mapping.get_city_shape("Natal, RN, Brazil")` — thin wrapper around + `osmnx.geocode_to_gdf` returning the raw city shape. +- `examples/natal.ipynb`: an executed end-to-end walkthrough on Natal with + synthetic data, also rendered in the documentation. +- `PredictionPipeline.evaluate` accepts a list of scorings and returns a + DataFrame (one CV pass for all metrics). +- README section explaining the framework (thesis, Chapter 3, Figures 7-12); + the README is now the documentation home page. - `crime_mapping.load_study_area("City, Country")` fetches a study area boundary from OpenStreetMap via `osmnx` (`pip install predspot[osm]`). - `synthetic.generate_crimes` generates synthetic events inside any study diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e578cda..06ae5fb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,15 @@ mkdocs serve # live preview at http://127.0.0.1:8000 mkdocs build --strict # what CI runs ``` -Pushing to `master` deploys the site to GitHub Pages automatically. +Pushing to `master` deploys the site to GitHub Pages automatically. The home +page is generated from `README.md` (see `docs/hooks/readme.py`), and the +example notebook is rendered from `examples/natal.ipynb`; regenerate and +re-execute it with: + +```bash +python examples/build_natal_notebook.py +jupyter nbconvert --to notebook --execute --inplace examples/natal.ipynb +``` ## Releasing diff --git a/README.md b/README.md index 39cae86..a341d08 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,44 @@ # Predspot [![CI](https://github.com/adaj/predspot/actions/workflows/ci.yml/badge.svg)](https://github.com/adaj/predspot/actions/workflows/ci.yml) +[![Docs](https://github.com/adaj/predspot/actions/workflows/docs.yml/badge.svg)](https://adaj.github.io/predspot/) [![PyPI](https://img.shields.io/pypi/v/predspot.svg)](https://pypi.org/project/predspot/) [![Python](https://img.shields.io/pypi/pyversions/predspot.svg)](https://pypi.org/project/predspot/) -[![License: BSD-3](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](LICENSE) +[![License: BSD-3](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](https://github.com/adaj/predspot/blob/master/LICENSE) ## Overview 📖 -Predspot is a Python library for spatio-temporal crime prediction and hotspot detection. It combines machine learning techniques with spatial analysis to help predict and visualize crime patterns across time and space. +Predspot is a Python library for spatio-temporal crime prediction and hotspot +detection. It turns a table of georeferenced, timestamped crime events into a +grid of *places* and a sequence of *periods*, builds time series features for +every place and trains a scikit-learn model to forecast where the next period's +hotspots will be. Key features: -- Spatial and temporal crime mapping -- Feature engineering for time series data -- Machine learning-based prediction pipeline -- Crime hotspot detection using Kernel Density Estimation -- Visualization tools for crime patterns -## Status 🚧 +- Spatio-temporal crime mapping: kernel density estimation (KDE) on point grids, + or event counts on hexagonal and square grids, at daily, weekly or monthly resolution +- Time series feature engineering: lagged autoregressive, difference, seasonal and + trend features (STL decomposition) +- A prediction pipeline that accepts any scikit-learn regressor, with time series + cross-validation and recursive multi-step forecasts +- Study areas fetched from OpenStreetMap by name +- A synthetic crime generator (hotspots, trend, annual, weekly and hourly patterns) + to try everything without real data -Predspot started as part of a master's thesis (2018-2019) and is being revived -and modernised. The code base now targets Python 3.10+ with current versions of -pandas (>= 2.2), GeoPandas (>= 1.0), scikit-learn and statsmodels, and is -covered by a test suite. It remains research software: use it as a reference -implementation and adapt it to your own data. +Full documentation, with a quickstart, a user guide and the API reference, lives at +**https://adaj.github.io/predspot/**. A complete, executed walkthrough for the city +of Natal is in [`examples/natal.ipynb`](https://github.com/adaj/predspot/blob/master/examples/natal.ipynb). ## How to use? 🚀 -Full documentation, with a quickstart, a user guide and the API reference, lives at -**https://adaj.github.io/predspot/**. +Install from PyPI (Python 3.10 or newer): + +```bash +pip install predspot # core +pip install "predspot[osm]" # + study areas from OpenStreetMap (osmnx) +pip install "predspot[contour]" # + GeoJSON contour export (geojsoncontour) +``` Basic usage example: @@ -35,15 +46,14 @@ Basic usage example: from predspot import Dataset, PredictionPipeline from predspot.crime_mapping import KDE, create_gridpoints from predspot.feature_engineering import Seasonality, Trend, Diff - from predspot.utilities import PandasFeatureUnion from sklearn.ensemble import RandomForestRegressor -# Load and prepare data: crimes_df needs `tag`, `t`, `lon`, `lat` columns and +# crimes_df needs `tag`, `t`, `lon`, `lat` columns; # study_area_gdf is a GeoDataFrame with the boundary of the study area dataset = Dataset(crimes_df, study_area_gdf) -# Create prediction pipeline (monthly KDE on a 1 km point grid) +# Monthly KDE on a 1 km point grid, lag features, random forest pipeline = PredictionPipeline( mapping=KDE(tfreq='M', grid=create_gridpoints(study_area_gdf, resolution=1)), fextraction=PandasFeatureUnion([ @@ -76,12 +86,12 @@ with spatial hotspots and realistic temporal patterns (trend, annual cycle, day-of-week and hour-of-day profiles): ```python -from predspot import Dataset, load_study_area, generate_crimes +from predspot import Dataset, get_city_shape, generate_crimes -study_area = load_study_area("Natal, Rio Grande do Norte, Brazil") -crimes = generate_crimes(study_area, n_events=5000, n_hotspots=4, +city = get_city_shape("Natal, RN, Brazil") +crimes = generate_crimes(city, n_events=5000, n_hotspots=4, start="2019-01-01", end="2020-12-31", seed=0) -dataset = Dataset(crimes, study_area) +dataset = Dataset(crimes, city) dataset.plot() ``` @@ -95,72 +105,186 @@ predictions, pipeline = run_prediction_pipeline(crimes, study_area, grid_resolut print(pipeline.evaluate('r2', cv=3)) ``` +### Input data format 📊 -## Development ⚡ +The crime data should be a pandas DataFrame with the following required columns: -Predspot has five main modules: +- `tag`: crime type +- `t`: timestamp +- `lon`: longitude (WGS84 degrees) +- `lat`: latitude (WGS84 degrees) + +The study area should be a GeoDataFrame (with a CRS) defining the boundaries +of interest. + +## The Predspot framework 🧭 + +Predspot implements the framework described in Chapter 3 of the master's +thesis [*Predspot: predicting crime hotspots with machine learning*](https://repositorio.ufrn.br/server/api/core/bitstreams/3655b8e1-2f32-4ce9-af9c-0e6b64d7af84/content) +(Araújo Jr., 2019). The framework is split into two phases, mirroring the +training and prediction steps of a machine learning system: **model +selection**, where a model is trained, evaluated and saved, and **prediction +service**, where that model is used operationally, period after period. The +figures below are reproduced from the thesis. + +### Model selection + +**1. Dataset preparation** *(Figure 7)* — everything starts from three inputs: +a crime database, the city shape and, optionally, auxiliary Points of Interest +(PoI) from OpenStreetMap. + +

Figure 7 - dataset preparation

+ +- Crime records must carry at least latitude, longitude, timestamp and crime type. +- The city shape acts as a spatial filter: events and PoI outside the boundary are dropped, + along with duplicates and "default" locations assigned to badly registered events. +- Crimes are split into **crime scenarios** (one per crime type, and possibly + per day/night period) that are modelled separately, since aggregating different + crime types blurs their distinct spatial patterns. +- In the package: `Dataset` (validation, WGS84 points) and `get_city_shape` / + `load_study_area` (city boundary from OpenStreetMap). + +**2. Feature ingest** *(Figures 8, 9 and 10)* — the step that assembles the +feature matrix `X` and the target `y`. Before it starts, two units of analysis +are chosen: the **spatial unit** (a grid derived from the crime mapping method) +and the **temporal unit** (daily, weekly or monthly samples — finer units give +sparser, harder-to-predict series). + +

Figure 8 - feature ingest

+ +- **Spatio-temporal aggregation**: the mapping method (KDE on a point grid, or + counts on polygonal cells) turns the events of each period into one value per + grid cell, producing the time series `C_ij` of cell *i* at period *j*. +- **Temporal feature extraction** *(Figure 9)*: each cell's series is decomposed + with STL into **trend** (`T`) and **seasonal** (`S`) components, and + **differenced** (`D`); the features are the *k* most recent lags of each + component, and the target is the series value one period ahead. + +

Figure 9 - temporal feature extraction

+ +- **Spatial aggregation of PoI** (optional): the density of each PoI category + around each cell (`G`) describes places geographically, complementing the + temporal features. +- **Join**: temporal and geographic features are joined into one row per + `(place, time)` pair — the layout shown in Figure 10. + +

Figure 10 - an artificial feature set

+ +- In the package: `create_gridpoints` / `create_gridhexagonal` / + `create_gridsquares` (grid), `KDE` / `QuadratCount` (spatio-temporal + aggregation), `Trend`, `Seasonality`, `Diff`, `AR` and `PandasFeatureUnion` + (temporal feature extraction and join). PoI features are not part of the + current package release. + +**3. Machine learning modelling** *(Figure 11)* — the feature set feeds a +model-agnostic training loop. + +

Figure 11 - machine learning modelling

+ +- **Feature selection** first: noisy lags and PoI layers are filtered by a + learning-based selector (an embedded, tree-based method in the thesis). +- **Several supervised algorithms** are trained and **tuned**, rather than + betting on a single one; the thesis compared random forests and gradient boosting. +- **Evaluation** uses time series K-fold cross-validation (train on the first + *k* folds, test on fold *k*+1), so no information from the future leaks into + training. The best model per crime scenario is the **golden model**, saved + together with its selected features. +- In the package: `PredictionPipeline` (with `FeatureScaling`, + `FeatureSelection` and `Model` wrappers and `evaluate()` for the time series CV). + +### Prediction service + +**4. Prediction pipeline** *(Figure 12)* — the model selection steps are +tailored for operation. + +

Figure 12 - prediction pipeline

+ +- For each new period, only the most recent events are loaded (enough to + compute the *k* lags), filtered and split into scenarios as before. +- The spatio-temporal aggregation and temporal feature extraction are repeated; + PoI features are reused, since they do not change over time. +- The previously selected features are kept and the golden model returns the + crime incidence level `y_i` of every place *i* one period ahead — a + prediction layer ready to be mapped. The process repeats every period. +- In the package: `PredictionPipeline.predict()` appends each forecast to the + series and advances one period, so repeated calls walk forward in time. + +**5. Web service** — the thesis also outlines how to wrap the pipeline in a +decoupled service (with a file *volume* for data, models and predictions, and +an ETL controller triggering the pipeline each period) that serves predictions +as GeoJSON to existing GIS tools. That layer is outside the scope of this +package, which covers the model selection phase and the prediction pipeline. -`dataset_preparation`: Module for preparing and managing crime datasets and study areas. +## Resources 📚 -`crime_mapping`: Module for spatial and temporal crime mapping: point, hexagonal and square grids, KDE-based density surfaces and per-cell counts (`QuadratCount`). +- Master's thesis (full description of the framework, evaluation on Natal and + Boston, feature importance analysis): Araújo Jr., A. (2019). + [*Predspot: Predicting Crime Hotspots with Machine Learning*](https://repositorio.ufrn.br/server/api/core/bitstreams/3655b8e1-2f32-4ce9-af9c-0e6b64d7af84/content). + M.Sc. dissertation, PPgSC/UFRN, Natal, Brazil. +- The earlier version of the framework: Araújo et al. (2018), *Towards a crime + hotspot detection framework for patrol planning* (HPCC/SmartCity/DSS). +- Methods worth reading about: kernel density estimation for hotspot mapping + (Chainey, Tompson & Uhlig, 2008), STL time series decomposition (Cleveland + et al., 1990) and time series cross-validation (Bergmeir, Hyndman & Koo, 2018). -`feature_engineering`: Module for time series feature engineering, including seasonality, trend, and difference features. +## Cite us -`ml_modelling`: Module that implements the prediction pipeline and model evaluation. +If you use Predspot in your research, please cite us: -`synthetic`: Module that generates synthetic crime events (hotspots + temporal patterns) inside any study area. +APA: +``` +Araújo Jr., A. (2019). Predspot: Predicting Crime Hotspots with Machine Learning. Master's dissertation, UFRN (Universidade Federal do Rio Grande do Norte), Natal, Brazil. -### Installation steps 🛠️ +Araújo, A., Cacho, N., Bezerra, L., Vieira, C., & Borges, J. (2018, June). Towards a crime hotspot detection framework for patrol planning. In 2018 IEEE 20th International Conference on High Performance Computing and Communications; IEEE 16th International Conference on Smart City; IEEE 4th International Conference on Data Science and Systems (HPCC/SmartCity/DSS) (pp. 1256-1263). IEEE. +``` -Predspot requires Python 3.10 or newer. +or bibtex: +``` +@mastersthesis{araujo2019predspot, + title={Predspot: Predicting crime hotspots with machine learning}, + author={Araujo, Adelson}, + year={2019}, + school={Universidade Federal do Rio Grande do Norte}, + url={https://repositorio.ufrn.br/server/api/core/bitstreams/3655b8e1-2f32-4ce9-af9c-0e6b64d7af84/content} +} -```bash -pip install predspot # from PyPI -pip install "predspot[osm]" # + study areas from OpenStreetMap (osmnx) -pip install "predspot[contour]" # + GeoJSON contour export (geojsoncontour) +@inproceedings{araujo2018towards, + title={Towards a crime hotspot detection framework for patrol planning}, + author={Ara{\'u}jo, Adelson and Cacho, N{\'a}dia and Bezerra, Lucas and Vieira, Carlos and Borges, Jo{\~a}o}, + booktitle={2018 IEEE 20th International Conference on High Performance Computing and Communications; IEEE 16th International Conference on Smart City; IEEE 4th International Conference on Data Science and Systems (HPCC/SmartCity/DSS)}, + pages={1256--1263}, + year={2018}, + organization={IEEE} +} ``` +## Development ⚡ + +Predspot has five main modules: + +- `dataset_preparation`: preparing and managing crime datasets and study areas. +- `crime_mapping`: spatial and temporal crime mapping — point, hexagonal and + square grids, KDE density surfaces, per-cell counts (`QuadratCount`) and + study areas from OpenStreetMap. +- `feature_engineering`: time series feature engineering (seasonality, trend, + difference and autoregressive lags). +- `ml_modelling`: the prediction pipeline and model evaluation. +- `synthetic`: synthetic crime events (hotspots + temporal patterns) inside any study area. + From source, for development: ```bash git clone https://github.com/adaj/predspot.git cd predspot pip install -e ".[dev,osm,contour]" -``` - -Core dependencies (installed automatically): pandas, geopandas, shapely, -numpy, scipy, scikit-learn, statsmodels and matplotlib. - -### Tests 🧪 - -```bash ruff check src tests # lint pytest # ~10 s ``` -See [CONTRIBUTING.md](CONTRIBUTING.md) for the release process and -[CHANGELOG.md](CHANGELOG.md) for what changed between versions. - -### Input Data Format 📊 - -The crime data should be a pandas DataFrame with the following required columns: -- `tag`: Crime type -- `t`: Timestamp -- `lon`: Longitude -- `lat`: Latitude - -The study area should be a GeoDataFrame defining the geographical boundaries of interest. - -## Resources 📚 - -For more information on the methods used in Predspot, please search more about these methods: -- Kernel Density Estimation for crime hotspot detection -- Time series decomposition for feature engineering -- Spatio-temporal crime prediction techniques - -## License 📜 - -BSD 3-Clause +See [CONTRIBUTING.md](https://github.com/adaj/predspot/blob/master/CONTRIBUTING.md) +for the release process and +[CHANGELOG.md](https://github.com/adaj/predspot/blob/master/CHANGELOG.md) for +what changed between versions. ## Contributing 💡 @@ -173,35 +297,14 @@ Guidelines for contributing: 4. Push to the branch 5. Create a new Pull Request +## License 📜 -## Cite us - -If you use Predspot in your research, please cite us: - -APA: -``` -Araujo, A., & Cacho, N. (2019). Predspot: Predicting crime hotspots with machine learning. Master’s thesis, UFRN (Universidade Federal do Rio Grande do Norte), Natal, Brazil. - -Araújo, A., Cacho, N., Bezerra, L., Vieira, C., & Borges, J. (2018, June). Towards a crime hotspot detection framework for patrol planning. In 2018 IEEE 20th International Conference on High Performance Computing and Communications; IEEE 16th International Conference on Smart City; IEEE 4th International Conference on Data Science and Systems (HPCC/SmartCity/DSS) (pp. 1256-1263). IEEE. -``` - -or bibtex: -``` -@article{araujo2019predspot, - title={Predspot: Predicting crime hotspots with machine learning}, - author={Araujo, Adelson}, - year={2019}, - school={Universidade Federal do Rio Grande do Norte} -} - -@inproceedings{araujo2018towards, - title={Towards a crime hotspot detection framework for patrol planning}, - author={Ara{\'u}jo, Adelson and Cacho, N{\'a}dia and Bezerra, Lucas and Vieira, Carlos and Borges, Jo{\~a}o}, - booktitle={2018 IEEE 20th International Conference on High Performance Computing and Communications; IEEE 16th International Conference on Smart City; IEEE 4th International Conference on Data Science and Systems (HPCC/SmartCity/DSS)}, - pages={1256--1263}, - year={2018}, - organization={IEEE} -} -``` +BSD 3-Clause +## Status 🚧 +Predspot started as part of a master's thesis (2018-2019) and was revived in +2026. The code base now targets Python 3.10+ with current versions of pandas +(>= 2.2), GeoPandas (>= 1.0), scikit-learn and statsmodels, and is covered by a +test suite and continuous integration. It remains research software: use it as +a reference implementation and adapt it to your own data. diff --git a/docs/assets/thesis/fig07-dataset-preparation.png b/docs/assets/thesis/fig07-dataset-preparation.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9b663220b37c4ee78ba7518544c5d76856a9cc GIT binary patch literal 54050 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 literal 0 HcmV?d00001 diff --git a/docs/assets/thesis/fig09-temporal-feature-extraction.png b/docs/assets/thesis/fig09-temporal-feature-extraction.png new file mode 100644 index 0000000000000000000000000000000000000000..0c125189294dc7f1d12a8896b7ccc676e4cdb9e6 GIT binary patch literal 41286 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 U3}gP11ZI_Sv~#tsvALA=A19fAssI20 literal 0 HcmV?d00001 diff --git a/docs/assets/thesis/fig10-feature-set-example.png b/docs/assets/thesis/fig10-feature-set-example.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb40d4d72f2b2857db775289aa2b07514db443d GIT binary patch literal 71289 zcmeFZbzD?!yXgO@C8-ekic7*~BBlm``qY;uYDvXS z!Z&XQvP*uv%B^DIwF>``QFXJWf~rb{*I8 zx*8J<{5vb|Nz>}Av9W@yb+u*7)BOBK$G9SoG5+<{ieguG`vc3H`d?p{w)f$8|Me<( zTiS#F(|>)`UFUkxb1k+ulocGh^ST4;-xiO-&Kv@vHL`*#7V7X?Vu%c)e0_bZt6kgB z&`3(uxN%3wCqhFLlZ?aH;=X}%0=!cA;#SNoESiMEm%E<_??K4a?j}(?c++E*|Dy0w z*~LhSx*31!BghKg7boC$*wIm@Xx?Jt6CSRd@83Q$a)cB`EOkXnn=gL;x7+<9q1Jha z)Rmjjx(fY5ITH=e8XrW#A9uCWfvR!b_(F@78vcY%s+eB#+WYLD=sg+I>j#SiBVv1@ zsFXlwGQEzFZ!}-=5s!qUu0mDkf5$i*zPAl;8|8k=lrA^3|20_rnMdRLbh-Zm3?e46 zgQyG9`~3L<8jnl&>y1W~YA8&d@`nU%SdV6Dsi;?>o;oS|u5)}i_g@N)}FwK?u!H$_9%ddWyM#={iE#d*;W12^1qUD zAUh@)8?aZjQ$UhfId{-_(T=SF$k)k+3^_u+53HywVT_=WH!`cV|Q= z&)w{H?NnZ;p9o7$=dHjmUuucvL=Yj^#u(nzA&~EXqQ5;b#$cd^W#55{V0U0yyheoF zg?npJ!yaRNLVvq&jKKv~3tq$Rz*2gRP`C&8CJ2EH--Ujn#xllW`TrkB8UjfNrzE=7 zKx)|g|8(4+XliiE^4ADzth-PVoPYbge;)VGOZnS8JFv9={qz2D+&?dcB?N-y{TlHT zT<3p0?w?Eegns=P1MW=(uJb<}_s=EZ{Lj+=ZjNb01>v>+(-oUeGHqXSig(hiBMcx>a7%NCOUKDJLOfFPz3k>2X zV)zF6VbYq_Ug=z*&F&O4_ia|FDa~(d?)!@LpzfWmkT6KJJo)dLg7B9q-}2G#U}pWY zx`hb>?-ls}X}G9;_`*tjyi@EJIXQ)RMOp+J3lG09hCOYfai|`7f~il1^fkK>mYpODT^+?jL&6ljAi*h zC{F{+QywkNKn~|FWGT_v-h6ESnfbc|<&1Ard=ZYD>0Bvy*QPKZ{d>G3QquxD*cdIc z1$+vQvCrD_e2X8?P)C|XaD&HLs(bj!&fEd6kmtGa<(+_sO!NhY%Do4x{c{bT-8WZf z2WA<5ws1u?#I&1po*4d!pWV|)NS;%HVPYxInpew(wNR;R%O~7=%#)R!iKh9cyQC^o zh)bOxNkBF&8$f z&_C=v({}RVw$%*ZF{L*m#<7XoQAdPBoT;o!Dl3fy-5f3ItWSosVP&7`kGc{j5L_J4 zak&p=1jem<@jF^hznj|LrNU`FmRTG49oP6h26iM?iiCg7SiVG#kn+(?{~RTVfC#JR zXU5U0<#W4UpQBjX?`E-le6iUY^(vZ?{;ynx5QtUHc*|5cZi~1{YoR04X(5-#yEz!Y zmvFJk%r7s&vqC~4*E$hd1}0dpYHo*{*^Pdq@odRVd~{FTii&u7ax{~2mqMPX1mf^y zt?L9=IRX;N6ww{g`87}{U@n@CGn)dq{ZHtZ^;I=BnYj;K;bwiCTU))E3voQWj*QFx z&Z~VC8DChK+4SmuD(BmXiiw?U&vf5--dubBEe0vXqlctQjpkQ9n(za^9&rh39 zc4H^hO7lm9#qs8ZYJ2R{*w3_Z!>K*%T-VUDp{;&Hl1$Yi%&nz`DMOd%N~=B&Q@vhbrfWFsaO%cDKW4zI8La> zy^8&;1UKv)UCh^SPwk_BGMh)d?eF={+Ne9~hRC()=Yun&TwsKx>{aGs(af>RvyWv} z5LLr!^)kIlPx7l@GQSF8=}BbD5)rmnP(YB+mH9eu>E!>u@Z%Z5q0;$UBI_kq_qcxU z+bF67MPV6TVnEOlJ=Vi%B3_YyEF8_o)bOu6{yQ2X;N;{)FPES&hXKDkK$T(aW2D$l z6&6k-_JCt30^%$@YZ4A(LylPwdu98xjI8L>cR_l>7VqP~cA)-bxRc-BWQ1wSQlyhs zy57>B#C3O)vjL52ESvX3Hd7Mcp1~cz=iQ8Iks`wV$#t#8lO!HnrzVzztFHI(=JL0y zqchiH^Km$H9s(VHG^f#|z~9~tdc&n(E~AJ@sJRLi|Ir+mA%?+zBbq> ze3t4&-AT(T_HsWD9?{Y(46_gtupFTjBU@T#qJw=Ux*j7-W#~c$BWD+EQMONtELo9m zi?mdOM?(^Wb8+5q!>+1<{Ed>9%kNQR*-HK_b7cmRA_a;e5PY`wm5!tWht4NuS=oBR zvT_IkX_S$!d!;k+9KqjVN{n6=`oo70F6TSbAc!3=G1@Fy>SwQLx;WW6la*0Nq@Q!( zIy;|4#rNzHn}IWyz#gBow{>;pYIGWEbua4wIA|iT zwrl;#O&AJca?1bBk=|c8RQo-Om{~_bgAhMb$gDNO{7Oaz!K_d5-o#{WDlcPnzkpv= znT?yIiG@rP;nPe0i>LKqeuyFtXK}~svF3f>Wb>D5TR~ik(2@h0)Qm{gc|*GLD5~n? zuX812_`2-bA{oZ5=w*JsBg#^bcJqSeGaMo!g*W+wa8cRKPrA<;VNckSOl?tg0mMUE z*Xw<%LeD<;abJsnvq;@ zpiPuGqmGh)y*%Dwd+R(m8$dk$zuZ6v2N}!HDPn&6Srbt#+NV#3A|W}MmSYifb@Ta; zmF~ku?V4#-Fa^v?`om5c27XRGss6rt6g}pCo`Y9bw5Fu2ffE85Y?e2l7%r&!MTBOC zIaGgiHkxrG94Bd$-GxkJ8T-g!T$47n8AboN9!`{hFcZ?3A&9T{d4uGg2YqxqWF*4CJK3 zoqi+nkk^-IgBj8T0|R44`tnB!afY-?2#?Ft(7>&w&hY#Xz00<$Q2=5}J?mFo)(_U;!NJ%o-_O~f^$-1CIt z8rLZ~>jVC!%Hra8M%hYvU6E$$5s?u5unIPPidQZg?b|{&p6At=^6TY0zj_*lsRofu z-tdLpJ=dpV?k8J2eb{?s3)LxB8Gdu6!+mKDhZFy|NUZ!FcnfPU$vmC%;%L@ZIl{w z1OA=t@4H={-zwGREe1Xal%^p>`fW7d zxxlEMHj2Bjfs0NoX0OO5VVHwjnR2-MLkY9+t{|bF7>bmJ_9%VilWK z%e~gfO97=R4M{)6v8w2)RNoy;+VmosF3QRxM%*ig|BuZ=EGs$Wtpt z^nSxv*XJN|`YPvVdbSbhO9O1{`cNj%I^r^)E((Xh?#4^3EHpufL>d-@Ao? zaA+0Y72z(kpm z*iK&|E}7~IaW$uOgU{+jK(~YK>F=UM;6VBB^1Lj3A-Z zK8cTv#)`zQ8x^to=J`g6f%Flls6N7@@-eqA6**@MYk(k|@pEv49|LQJQ9s;Y=oTG z#RXX&he8ao!P=ou+b7IAn{g%@OmqIc1JrsuL0B`j>M7MrcNUXH+o@E|G&jeu{8u*@ zk~vTM7 zw|wh&5p9@Xz)=!UK2^_qb?;B07r@p{z-Ll^UIOa0n!m_zLdb z+pk?=)#)4^K+Lx9TLWL%7%RGuovlY6&uPAYeq?#ni%-F4Y?S7fqe`XP^yKm5zifrf z2h-(~h4y?E6%{Kga!)Rfx2EzcjSFIP3MZl*!EYX&(QNu)OKQRA+dVvtSfYH)4AXEs z-aOl!;HcOg$x{cas?KIRlqqXyxKO#&LRI6u(?^^njGXPrU?Al6${ZN3XJ{l#D|!=u z*v~nr+|lV1Zo(L0Ff~3o5fsO{K3c17m>aTaMjDT2yI}3KHFZ=gJoM9e^Lxpr8ey)= z%La5z8TE3p%uNaf@EYH$*L$d>y_i*Fimp62(p7Bb#1VCFRLj4!Ya-%4ixrOJ+{9%! zdJyy4h<5P|E_V@+)y(&K4!JbG`MRWCYfyK}D1-`!c;gIY{CG=Eobok(~IlCHyoKu9Z9{+t~HMDx@*3ZrclFL3Bo=cYxtJt@`&^EPrWrl z)VY7#sk$eKiiWW5=rCxFvo9~|6BkLS_gNGQB8{oy9~_iBTB=FQe;#_CU8vY)+V=og ztPcHHtz#tIZ#=Bd)eiF!<+n^t*ocJw@gF5fd0gz5?@1O+e4fcamd(A+cY_3A-EdtQ z{fR!c0b7Y_Cf_xua6C&c@jl0smA*vn{inwwAo{36zjJSyMVf&Pfrf_WO+Y63>u%Gr z_4waiC?6k;hNb=GZmq3K+qqfhGiU6}{?-2EgR_cl1KyOB6w^-qJg?K;`S`X3VMazN z%Whu#m0i_1OdYJCchIKH={RjlUOOMQBCYb=6}B{uPLDINW0h-#)N*Ffwm)PRta00Q zUzuHXpPPw6-L7kGD$9OZvA(&g!cOq!cik!F@~cnFvHT2D?h1c>Q{l;0Z6uny(>E)e zSMIUc6u7B&ADi&;&m2jpVucQS*%IvTEK)GFmV177=W>x z59#QT^@pkc($*vM;Y_Q&GB+=&VGZ&3F!6S4f1mCxuKW7p5SvOX36^AZyap;V+!*sS z{3{{T_0gFAtzuwt&&|e>&m7m+*H1*{6JM`_IQ7h069$5jQPO9ARLXy`Aj&O99Hu-j zjte3q3AMYEco%l=G=U_$!dh!l-t}WLmvkP)%V)6F|LIvWf=M>#H3G$uo}w+rF(P5i zmgA-(jv%-xd8M6qu@SaQIPZOe%MM@I%KGf_S9s>(TT8N&id^N{rS53hNV&LiYc{)X zkBac`-iT2KvYV>!-s*g|11}qve$0jP+UEu(5W9ZC(shw&Hug#Joko_t32Vy1OqA%1(~dXNQgH>THodfS2ej-4~|S0Ib|%z*lbvA7Nvm|?glMs3BYm^uUl5)lIJF^O_h)`Uq552q4F*G!Ea5w~l1u07hGC4mAa&?{~^wX>}Y`IoF zs3Tt85u+$LxIZ~3LnTMa${JL^e$3tTHfb%;uH>vVPFv_6X{=LdpVd2BCn6v)UK)(R zHum`?+9%A{p9FV3SgpUJGbJ;XwS+V2z3Xj#UiOmpWJOzc?|C5fZY3GWj(OVG+7 zuwEF;4?pq>UtzKAOIRcp8f(FmZEUcybyo; z(Kx!B4=n>Z;<=lkiuUs*8U_n$Yn%^{ttl)x4ZB*UGV4uJJ|aC*{_*LK^1V#f^+D$t z&kFKOJ+8xr%#sCTjQHn!@iz?~DaE{5q<;%>lvU~K!$@CWh4{xT71wVEEtrC+2*{-y zZiX~=_1U5&a;Yc9?VjP&nH-Tj0j4rg?r-?QiFe5Qr`-1*ls{JjeomYil+rrrv4kfu z$o{ll4Psj9Lt)*F%*Z-2@_;(YP$>T+3v4*8VD*RjyN%Iu$wIx?OT?^Lcz981Y#mrb z0ngwIKLUtHa#a^`COE1+&i1z^%gKbjJRBSxqFHl|K90b>oz-)c=&p3@JTIau)v^^* z;>^v4vlYF+UaMntV-;BHr7I&y$~ZIbLTRc(AT$ig`$Ju^{AQ1~6d}+ilmL}x>S1G_ zxvh=OY@O}_NdJ5s8I=$i4;Rb8wl(^|WzUlPmhZG@Q-JA zT7I!$g+p2}kC%DOlqo`o-ux{e(Ys&P=E_0P9(z67+JUM(S#S-W;d8^PCF`e}XkWR} zs#U9vvU$5l{K#4gjee|;B9iLF+LI4K?dn(4C}jbue#c`Qyk{)Vr(E-WJ;U+$&lI!% zq~(*C(K{=k{?vR(>yO?&Iay`PFEi~uzu0Ny;u#HtP*Uc`#(e(V;_TiT<1uP;v=gut z5NguO1B=R30b96IlRM`=FYK8F1GLFy_o%6%?83AtPSA0Fm@YmV>s7wk?S23nB#E`$ z1Lw?^*4C<7HfNADekwk0o`P^<$)FBt_tKPoB2MM+@4brT0*P6nA9wb+7ghE|4l@LO z3HSGPml{5E5VMh$QyZRw*cjwbOr_XqohUl(;Dg>T_xp(idPhHldp+$7>eDJY1$-jG zo}-&_I7Zu^y7jA@KAL$5dCk*}h2AfeqbUy?qkTHDxYd_q@#b4^RgG!25UEX@b)+;Wh*2RTHXzO z=|{`}BYDeqB7;w*QKqJO4ZGhP6CdwDSWHtdTje zf7m>&ncPS}GxBVixPWB>BT3&`f(16*NQ#Y%J2F|NUZiJAiYbex6r5z%)Sj;TC}!C` zlqG+F0PsZAwLuo)VmDS=WTpz}&lBE-hB8Lm<_BsB)%e*SEcD&y5-yT?w8e6=sa}Ux zIN0oM@WeEGaQ}kaLT94wd3eoNQQv)%`Nt1uqrvs1JO(=Dx{-QnYLv+uWwdU|38itS z0bQqM#xdjg<*s=BAV$L!t%K zRM+Y@rslGtw4}uKXgyM<{x$}E77F3A%$*&e zASX`}a7~@v1U~Q*QBr?J7)8jj@czeX-@BQ(t#pLAi# z>eUBpH8NCLRU2NW?5$0Rjxq{KGQtR$Ti?SCt;UraCN7UKmtxLIWf2{^r~zZ~q)SGK zW`h(9Z!U_E9(I0_?g4+>-*gG$_9)vzIwizU1|Vt|&~hlE6(oj&G*7=POT-QCtwLjH zjFET+-2Rn63iazm74)%|H~#5v#!F3b^ut)Rxhwoi1i!f*t#8V6KU`f!cSJBKSK7=h zEG#t8QL!o(e_Mb08boyKBYEvkaiGw%8()TepJZpaFy}7zNmih+A ztJyb!*M7FnRoPxeHBW6hki-q2L?6^O<2vu(UQP%EP3FvV{n7l#(bUF~6^Ed}vc*!_ z3T~9+F_Q+O&V#r!_niQ;R=B`AscwAhcMQ*2IbB}9s>fp*pklyK2I}h9>)WQMFMnm2 z*~xeYK8G!_w!VTJg0gO%2AjU{KW@;9Tw;f9gJ{(Kmwe+}3d+A-lf^ zV1<+#si~=_ZJW@k^v=eGB9z$EXcSky)9Zr&5r<=YirW z*Ym-9J8u9#qKf)x+*(3rdu9UbRxM;08XkKEZ^rT^kw83p6w?)uSjj4tDe7|3Y}~s1 z6!WyV*6Do_vYW?$?97>r^Y3+cp`2J|Txcq9UZo(r6}=kMJxHJZ({ucsD58c9Qe870 z0e9Cu_JgMbb+cDIaSCdMnexdEz->-d+U7+!0`=IPZ^@ENJl~!FymAcmW3uYwBIp)4 zZ%^mA3rRZ)A+LLEC@Cq09M^~Eye?$>Bj16-aS|v6GDxv24eH04|4RXATIzek*cb~} zF)-xyGhEs_l`p#Z{D_%h*KYOENVg51Zv{!c56<(B*)1)ZH1kfWMG+y4K**^lA$uP2 z-=N(lap$BG2$Gb?untsqz}pGCY@rUq7b?#{A3yfi6Ofol=M@TA0H*BbZWIUo{k@>~ zU08g+AfD1z%Op3Lt@IPZ+1+jm6sWdWjQWT3XbAoLKE#5W*&fHE(#|*;-CckPNo9gY z2`ekBRPbGZBB=u2Xz}%-mC!GttLdRh)7jJr%gLRf1lEmB^&VarNV1J9%gf8oWE|v z`KL@_k+(}>fT1?kLm+d#z=+lIH3qU3VWVD6-uH#QE?>A3#{n>jpu5zh8*bWD<$7S6 zfq6?YF#=R+QK^xZ%6{&88!0rEQN4aPb*0>LZq}2{7gi?zwjH!#!hnS$5aJYXOBj7| zR;Q|M<3=Zy&0yohf+mf+{A$31fnu2hcBldZoxo{(7NneDG9}MC?egM%+dgAC>25i9 zg%gOOqixrjQqT$&k8_O0{o#besxPCg1cmH>$R&#y!KciYeK{?M-Zn5AzUjt7T&VTB z!j_SYp6|N(dT}r>9XVKC4qsj$jHmiiEXP~=|MPB;fB<5C(Kwm=-UIy8gLU2`M(!5j z(#4bYNTixoU}zZV}LZ#z-?X8*VxkYq22Y;AWy^vfiO zE&lhm{u=RNTXP`){-aGa`eHo(==)ZAabkG;f4T&c6oTi20io-O~q zGmK3iZ!B{}fS=oHwC;iM3{3v!)7Dbq!sp+4=8qY~MWHG5uKT>jXT|x-`VUQfN_{2i zV24@Ot3p}Z9%1E=XG2M#d*|Ebpolzd)E705uo|-pyY3p?fo@ zr>C5tZwK~riD1gex{oveMBnlrcVKZL>u0;4SB{R}@Qtv_M=@92yAq^)X3f(~u6LOs z=qw?}rruCxL&&U}8x?k`6>r|;PB28_E4ma8fx?Z8`=b_D*N?u)#yD=aX=|?5m)Lb- z!H8*-(ZyZHTN=aFsuIbB{QVueZ}JJ?3)=fUBar#V(%2LmUO;0^l{i7CR<`P0aBy(C zZkH7XswK@6MtWOXW%Rykgqm=(?Wr`5#%RO^{>wBL*b4$$J%k6W7>EzhGk_c{?ZA5T z%l7497uF)o53PU!)*F6k*IzNCOfS2}VO%w~tC*PCOHvG)h+|ZEBxZMSM6jVvyu_6r zv#AE3L}sqOxCBwm8U2WReKp1!N#3CEul}Hm2ze;C65 zxA4iYH|X0O&`j01JE|bdzrC~5pK$P-$UWHHC%~JEzW4{(`k!Fg1z{MB&*AsGV=Ac} zr3|zOCaE^UxHtFw#RS;Iak0FAr;GYx1337b!Y5xcA^-;y7Tln&Z{gs2zrz*Z9vva& zTR2!LP%0mL^@%TtLTm?(I}KZ~%?EO$0B`(ouINk9t`dNQcgYqyaURB%2sku77|O89 zAkF_OaE8Mu^dxlLMA5S~cVklOA22cO!O>K)L&MtOTqPNs@!9m+Ej>-x9c7?Oz#O6v z-t#QalSoYxw7hOX=bqkPO&ZWpR|g*vbFv|Rjqz4e^5wpj%H-vKH(Ne74o<+`=aiO~ zmVk|(sX;W{3uJ)-LVVet_g_3cHR|m%R@S~-6#TP20);Ly5zmx~)ks`fSrMkjXr5sV z7`!K%ipcGjLR;c1i0>pZ%V&>E1j%>xWQ=BF-9|S4q`*&aL5g~V00sGtssOJO@ zZ_-z07z`i!uq=KhK+;e96FBa|MUAOp*ID$x&eF>#fy#_YhQza%|E-nC zz)iZNOqLIS4~VUO!sabY|fRGmI5E6?Dk$17}CE_ApA$N|2AoULY}bC z`v@+YBjB?8O)inI&c|XT7Z(ao*KhQalaur41O>}T%5P1d{+==T-;6C7kWPRAJoQb$ z-Me>nbaeqdK@E%OovyY&JCz6`&(U*P?MnpNR*5eFa?}fT6hFA!{qHY}b1+Q;pCj=# z;zgw0a@XGK&1Xz}&S*e&B#d#{Oux!#dkzM0{u}=x0~7PZW7(7cO3a1_O?k(vThoe3 z_2fxvZB+e>VpT57QO@hXT0x3%J9Y72Pc!(enSg{h1cGha8Aj)^3-Ev%%UY+cF13mA zaT4S^!~g#J5AQ-#tiIq;bYUVlMpG@~qLvp$`i%$)34AJ{>F)0CmKLMG{=8#3n(unB68M{s8YTmj zu`5%RY2=a-P<1(liNZ*)uB@dNzd(VP?Eic95CHrHw={oJQc@flJslmF)wqIl89A?= z)l7}5F({s7f}(^;OEL%0AZf=f0Li+Tv$M0`E?1HjRw&fCKG{{CWLa;t*WOV3QA3<$ zYEby6zDHwNH`bL=ZG?mQeqCpxo1>lO#%P1|Md(urL{c!pTn;&06iIW^IIUmd80#!= z8~vO$P@8+3{absSpk=EwV>tSiBe&sE&A0C^=N3gvW%`{atpKz+jQI9^d(y%jM^PNX zj3SvGFYo&OSD_Nui)1va`owWB^Ea!fAJ4}Vi{a*$vWq`MCM-dVB-DJJDGxpF`n+Tg z<$n}kk)zii>9|Dv${H{ca6&_J=*RWGEX}-QhePNvsK+O^v1mIVQt)`jeh&uh#e($U z%%^&{)03?nvv|N)9e5><=jAz15%t!%RK&kBJq6w9R%aG}^y%U0aT0FcgQH{fvB3h9 zp|*xZe%AP>$ItiNa>?lR1Sp8e#|zRV?8m-&nO?7v^pnKTM=s!v-7a%%~Ug1S$1G0f&INCURy(B zNs^_Zp<$h+(c=tM&zg6>gPK{{TO9=jg@cvevnLhm2>_^)`Ij6QS6AB+z_BI8#AMe- zMYkmZj)sn`(?mSrnB`Qgj>oC!n&srCWNvUU%zENyLCWbZQFz|YZFWRXrcI_RKb`Iv zPF7@#T2r@!rZk4wS^}F13p^yQ7q?zo*HbqZv!X8X`7WVIrSSp$x-J$#Pfh;?D|PEwVBO!TA2)Hk&iES640Z zhS;IbCVknE9MJa-`(=WJo~z)^&HGQdVCzU0!cNm z-S~#xS({d;*)ZV9H4h$0Yh&4tzK1V>DoY<7_MV)7HwsMNFpfx`tz>QXkAOL!+_7KZ zCUI|W;**#8<)nq0qTV9V@eOGF+HCurCJ~P3{rWo_#4!_k<@f+H+WJ~e?@9w`w$IT? z%hKE4_3NV+zebTu>9b;OV;{`By1#cBUjcE2Ikb`y2*a*UR}0+AbK^4v$M}j(D3F+) z7PfOU-LPlx#{W#3!CC6=#{8N37RFv55CH*r895H$uKQHM$IpN*LR0ako3})mVaAtO z_T9_!Loatv{JJ_nm5YCT8em%q;GqLw!8*Yo1hnC34Q_fgev!(7Q{H8vB zT}F;y0zPy32(-q_465(9b6h=&2iQYZJSqd*K&Y0qi zme-8g|ClY8Mg*j({S*{UYoN{+H^;Hz-d$1Gp*)eJI(c^YM-(al!Ts{t3 zG_WKc;pBn>jO+NG4}(?f9&214C-=6?9H8>Yu8s7 zaor%^iQU&kZm8V`ElQoJTB@CEl|A~A)tRK(%fg>97|~5(oE`rwzF`{;{t?&GKU}f^ znRZ=5(fBdJ`McE=ynu`{K)6j^R`->v%g!J$X5VQK`ytk{btBCi$W^(G%lYwI1Zkzk zSd7odZlM|A5Dj;(C&A;Gnnpa=-m-wR{RIDt);Ot^g1+Kg zvHn^7#1lHus=K@?6~S6m+f`n^Zm$$H?Mjzy)J+3Bf0Xzx$^%0jG?5Ebdna>)+CQ?Y z%I%9TMM1!@gXvZorl_;(m1*vVwn;~bNLZpsI{N3;#G73E0y1`qGpz#iXRvFTu5gF> zLxm=LmQZ-=hZOJ43W}+ULEVvxHymEJ2T|%hvb=9c!Bolj3S)cs2C1HDJv=D8!LS10 z)TqN2*xnbcZ{|!!cSSPL890;k8jGJ(J%0#l!h>fR2A8f!I{RexBhl%#VZ!7g5P_he z+_5ddY8(gy%;o}gyi_U^K$!CW{rg<{FCUzp%>q>lv{c7QTtGO(76SPSARRi7OWr|D(m7hx=qsUQ7ED{$Ujc{*tRqUzz zXugxxoKbMJyY@(QeXEK1+J3IB7nnRrt^JB*u}$WxU9z_VH%HNI#I|F~X*;dfVrRmy z+c`n2{v=_^w}TOuTGY6Lf6`jrxK>C(9s#G)E9Y19(63`?f~V>gtg9jm|C$$8m2@mD zclYc%A*xyZ@=lqp!QwdL9S|Hl+#A<_?zr-Yy~9{v%&VZHK*8dGE8Z%7`D5Ev!#B#- zT|&}C6{7_o?=|@X`;v2gND{boG+OgZB)xsRxTXL z$Z%$~hYP3W-I;4NOXeJRKLjQ-LGWj?=#S>+RFE+MQQqt?OS_S3R@>3tR8PclSz@3? zz~B`KlQDdYJ^iBg!Q6M6Hpr93NgekYl=0Vw%fuy9F;x#dn)EO5%4cC?y|Lc|g2Ss{gqdnr;7Ze`9YPVUinyTRk~zTX;#>AGO}j}8Y`y~OH|s0 z>Xle5u(pEc2=TRen;nFWz4_t4BMq#{Sn@{CytjNI=*^cP3PK_<6tliC&=FDD7npb7 znFWDpP4+i6GEE4YPN{V|j)=&jWcqY9Q7-0QVbYx$sBF#X&OOp?8owfYpP059?c%Y8 z|B!0o5LS(T`5QR7hw|@oRv$KN2&p@+mwQ6yF zku$psh*ZGgZ*OnE2_Ra&rlqEStwRw4c}~)Sh5c4W2BeAfNL@9*dRlP_2_`{K8VDO~ zA*pq_E6puxPoEXUBQ2l(%2bz`qUA3mVnzitN&cQ==oueRRLH4WM;#i{1?i*F{~T(>y?56=bm2tI%!eYc06RzsL}wy+vd&Y+y*UMmjfGgbucMM zDJ6Fu^F8SOWZ57I=Hh%fRIls{R9x+@JdV1A%P>?DE@5x^++bD4$Mn8DrqY2kh~u05;KbtgzmB zM^8y<5V$fhtI!)=X+HFPgbeZKjk%mhsae0!$AwmayZbYMIYmY4n>)}ZdoUmcIL9Co zc3MtO2SA-l;Y+x*cB3Bjs<1e$kNDr@NFX*}Re!Ee)|}Fy0(%l$3Jm5G*em=K#8>s1 z(z0F&+9hE>f^>LkGqLyJw28h;&K>ymrMj9AUT;t7qIT3dq9jIT}139(FvTDe4p6`r91O*G#5KBbWeN9 zH*-A7Fm_MW!XMaVwa62IbwwUOcj& z5;tvQ@>Cx?ifSqd;_-zWj{Sbg(M3a~O=TD5LmVOYEXwZQGVvi@^Nb7Zakp0Vr;Ejv)Qo$yppOX-c{azES8SlI{DM!Q3=i^&DuR8GF&hs%fXfB`mr zuQNL5?TC$)@0Me7?{GVB`WG>-36?*Yl+f zAO`EcfC2nfvbTscoHJFm4G5`L6&fW(dSi&pXsn9uR_AI2qkgr=>DOHfdguJv`pL9B zOsd!ZgLJLr3p9S{Y=wc?-~#8l(X2j%z`5n>@+ntSxSOVSo=`iOLJ@$JN$x+afEc%a zYf8!wpnbFd*6Tj5?5Qq&GFsBDI_rbM$TMS+)*B|m@NmfbB96;unduIX;X)37^0OUD zJ1G0hcZ|u(CdM2rOibMB$z`To{BVbVR=~%Z=zkC~(Fkhc6$tyoaY6RwujAc)B~7 z%KJ6iwEal-PvSK7aoqPKI^O*uzC~a!vDbDJZQ_&k?D_Nk3$xu{P3M)DyYpfI4LEHJ z4Gr~n_W`m2o$_+P-C(j(zO!8ilt|nx4GXl%EK634XFx|%9DzkS1&Ryf-;v`!2A5w6 zJ=_`(hUJ=6L5qHkP5i3-b9B+z7264y`VqxsbP-6df_{mDc+JXGJHsLeglONR04n&> z2r)uOqPwmh;St1AiLP=)hJzuoQF1*zV3JpU&HQdWgA08vEFJ|Cm?KPYyGP5*Dd9t5 z5chr|a;gTq4?iCPFx$94cE4BtUZqo*^RsI7ujoMq&({6~ldDhCT5n2xtyJ%{r-BIF zAN}scN!i&}_KRQ7z|5w2^TjocUUO=EUn;(Q%Y*YeP{sEJE$rAzgAj7P;iD)69Zq{ITSaIe03ZchJ$a|i@=OD+&K!D;7rFjkdvZF42$DGRCvR6#;Q zt8)aU(@z3f4U}(Qo*v-1Dn?VDraZzwzu5(LdFMTb!5%R_Q+_@Y{YXtsZA@Qp%wlz4 zKl<$BQ|r1ZELL$)E%dVyRN(^Qny_n$_GHv@6y#b=HGB~4Zvf?C*wB5ZcUu~=$qcWu z%$vxiV^Ucq>WyY=Z^`24v^BJYi-w0+3UOM7@Avjk&(UUB>j0B@cSs;KY;z^CUbr>L zvs^Oewwd|e7tBl9t+IS8*XOcX%PH^eA>_v)U~C>EVpQ@N%@qWxmbTh@0tC$w%6}G7 ziinf~8;TU7_#y>mL^G@MF^krnJ0HxEm_7U`SnKk!HW8qHUP8J_b2ZPdg(7qiU|cgU z8f+Jh+mrM6lnE|-$J3OKIzm-%lba{Oz++Lmxw!B1xHZ-C7`HkvZswoA+X2bwwI`U6 ze9&19Hj!L1d;9tMd73Kz4lMCc-~kT-@1T$phGyooZxa1BNfe%Zx#sJ$hspBcffLCy z=Z;2X(ag$&GLDj4@^RX5a&lEai50LD++14E*?OBb)+yhCi#C@W?eF~XOW|*kr#A$t zvhPw)K@Ewu)-6YWPg}b{j!QWdaw$s2yt)u2Jyn_yUs$f~*ql(+*TjdiUSxVJNz#!$k1&<9`F9**N;IW;H44xCx z4l;OZ`qr*ZiUnY)kHEz8*-J3yN}F%F2VVeX9q_E9)j%-0WUclaLoiEJpw80>Jml!K zt(SD9(PQDyQ}UMzS2(5-b^v$+Jx4A8*z1#d+9lieG(g!C{%SDp^C{hQJ?bzati|IJVI_0I*uf^Ws*@sfD6jm!3 zLg6=Z$z@{RQ+}Badpmx47xZy{cTg{eqz(G2dbF&AAQEWje)dsr12f8(wCE+(C7YbEPYMqiGDYMs~04otx7^IvD9U z#miQ%^x(&jRvE*CZvUtOkMGz&^1C-ES7s6kDU?;MRbGR?S$?mB)1cq^3>H;D+CoXK zd&(;zef_)RM!=C<)K~(*%4QCJatEHW-d+LjhHC5*>zi&-TOy(5*f9$OP-4=EATVjAOF%%vNrQBEBO%=&NHb~aQc_yFLApb_k?!t31J`=q^Q`?o@4NRo zpY}QX`LI5?nDd@<-ecTjT-X2lUH`GfOm@(OrP=YV^U!WAB&CYXpxEuAp!5#LxmJ;nTcnDdv?@9UH)Mob*@$(H&JfRMM!?MS$W69 zCKmH@|ETTlzC%1N_-LxJ{=>l)>4fwe`_^d!8k^zAS?P3O%?!Ws6BPgmx}g+Gj#^1P zh=#If!*1g#Rf?%d?mn=uUaO{ur->WpmME}|0UI`HOZ3XWA?f-+@aLATQ+}t>}{qx1+T80 z_wR^q-sbxJ+f8Mu!21#4IaI}LysRmFU{dbNOt!vE>^|G81FfU5RL4^>5K^^0Qgq9b zJWqsxo<=otkHevyw9uW&y(o}5AoQ!!Z4U#ry7AjP1v|_ZOat1)`b(Af3RPlkYO&;6+rJ3f&;kq2cUEhsK&#~#-BfnKwT^ev@ajVvKGK($I1D|duG@jZrwhql(WyGxE?)Kn z>K^EX8l?fxal@%nKFN=T%HJVUxsjtpZX*vuKyl{B+PnHYh@*3L52VxQo9KJtx7Ch^ z2Size3qnmU`)&lnuxU6?*Bt+Ni}K+f;)!Md(mKcEgis)V!r`yJQ@j&0+g`Kb0RTLSI(t}nR6NcslrNw1@$<98>|(Kcjc zWPq144T&CajGPy8f~w@7YtnrJowae8H~g2Iii*mJZT3VL$ey1@<(uc7H&Ny%_{TL9 zO2Qa{{X|a!AH!~e?6H_RcUk_bYA8(mBWSOpotH3 zY_b?hRi#fXWxFlMN_A5~&+J&0$s6vAHZmjxVgNgkL+dgNmR5A%hH_j)U zyb{MuH{q-fo{wkDUO&sUx^m^ppH(T7N>0~33*tJY$R@rZB~~$L`SCHkI_0Asw39-> zQ4aRXGvfl^@%tsH?S7%oO`FXT?_APel zD=|3r5%gNVxVxHFS+5v_s+CgBXkTmK0R_mAMW*onAtS-Kjf8~G3TqMA6$-Sn3@bv2 z>Ec1)S80i?w$BjwxJ!{)l_IH`5rzpF zahLu5Zu6Q<>=!#<*nVA|+uT_*WUiOGGN;~&Kg*aDL+`5SYl>Ho+?>C zx;rPuQ#^!6q%hc-{Z4GMOG2+Ta3~V(k47+PsaUGAI5AUUYd0}ZqH#R>4%$j6b~h8A z0R0+0veXCv5Fxr|G@p7W-A#50G}PtAKc_DS1-?5L?{`WAs;r;Ac9j6ae?9H!_URah zmB$$A($aZgvhMu^=6-J%2*bOJ&h$Xysh1g|bIWJD9!757<-isUJl&r0m3-J~`U<#O z22J*j@pT^$4_@*)Th&o4<)>KnS_CREk&wKYlj#q82eH{fmuTqgeAa{G-!mGX*VDEm zBtTQ(+Rqx!EkFV8(RYsQqdh6LLl1>^VJ zG&n4pmJ7L-EHG?~BAf$ydFB)0R$mH}mHOGz{*)qvlig~Lt51imiS#1$D_jI!D}^#S zV7lsqv$67rU&Wj{Sx^W6Bim>HbO%6LT>#j3Aj0ZPvs~}~p-7-30fwUOZ-Bs^y&?+u zKfuKCKRY-6$q@YeCI6$N0nvL^@0{t6T}7(5E?X|zUV+A1Nq6PT>yy- z{mGQwbxFgSg<;qsr# z^Y7XHUrd_+Ll=fveJ?Ms>FH?!0fEoN{y(nT^;-bJ=H}`O>Nddn*cOoIUj zTJZe;%Qt}DYqAFfI?CnX!;F8Xe*Ab(Nl6Ld`5j2DHs=S+AQF~}W&8^I@@oNlh4MeS zi1X2!P9|0d(nCExy|m*GV9B}nU;IRntiJZRsRi9)1qB5F=E}DCFyG|!lxg zWw$+P2V{4^gJH}u=zE*!gU(rs8`1rRR#GUoG%y&Ty@>?yoFEM2kN^4uN-gJ-=U9r0 zid1uf!{%_V62r`H>-P4Y0SSFEaM2p-ZVM&^EoMGE9wbnIu;BeG3NRa(e?`-4YG)g+_)YR z4%->&;*qP8JHxq=YHAfH8k3=kub2;9)5)*J=%GzyP0Bboo;N1u7?JqRZF6~&Eae0V zE?P)ftyY8Fv4?IkKxE5Ex(4nCxI#}X zw^R*mwUv;kSVQ2BVWn=PwT<<4s?`h!-wPK63p^Ke>l<=TdFgUl46jz zxfnIHo_vOAJlD@-F4?(UG_ZkjcPyZ;+PT8~XI_v|O@N+n3SY6b>sUmGzjUbO?!;uILojC2FHv^XX`Sa~gI2-S7=14f{Kda}~fO;-Fu-=7_?Q_Wq; zOV-oNb!$V71_=ZR_5}4C2D|*PJ+>-JOZ8FNZQsXkJc?YADlRS_q$Q8EqYQr#rVd-9 zS=w7}t`7C#%73jEa0g~FF@GsZ{+YvKpvq@rG}aaaF}hLKHOY1kwcJqDXfiy%23fCi zJ=ehKsOl-d$wc*uR^h4GppPrFuJqO?;03gXmMrNUI&-FWuwH7VFVq0R@;FF z*l{D9uOrt0-IaM0r^0PZW2LI7)8uB+b1dLKuO&5-w6F3{FV<40*iE81M{+zd0Y-$VB)Zsnu!NrkHFKb zT5)`QY|uRsvcKGo*9bhR{&Ami|KzTWJN;1+*+EBi$ui&sxNUbC$@GOn|KK^m>1gM$ zm`*L~C~)EiKgPQPS&Aaj@l$q}KS8(QURhs8VtYS+gZB0P+czGHF&oz-ee5TidA|zo z__)U^<>qlJ2Qu~(*7`%O-DBbsV}C(c+>PwTaK{__2AcqZTHL!r0D8|a>AgIa?P_~V zcHWkXxsT6hbl|At+OJE^O(nviEYfS!F7fka?9Y;VIZP|=1;84L`am%>1Am}7!j zTLC9}A~AC`gVCqc&BaTPtt4di;ECJzMI#d^ElO}(^dmj=x1va-1~grmI4mk9mMTH- znmXd?E+aIsb&9(uz2u|)i{J!$hOrbktLxKM4VMiGE-9<8Pu+K~>Yt~?D4izS^dG!D z<()fqOSaKnc?(BDE-uR!!}5E0@tDA0gi&{>OL?*m7)CFo8t%@1r`26hE{2K(R#i)_ig{yP`dW?}8iKkS z{WGN`MRhgWt1CPz=_FnEZaiJ^98_v!WP1A>?Q=Ap%Uk{myX)nvIG2c59RK z^L~DVM=TRYYdlEMw$NWQtZMjQ-APJxD;Xl(KV2eQiu~-+X}Me|X}EQRMG5-aC;?QF z`}$TkuclK5tbf9r?ewK`o5gMY@Csd=QODZ`E<(V@#@Kvr3u%Bg`{frfO*G~ z6DmetUklxuO-Bb6@bmI(@Vc1n+=;pheP;y|Zrr>iUrN{r+UD0N0xr z5H#rM?&61!Np(r@sgyF9uF{<%;bJ=@ zge!qH9wxhKeZM<6fJH=2%T?z1JXAPNsX!dR=>2m%lc}jG`>htYc0vqzN9Pp(rZiXS z8{W+u`*@rNd$LcG^iyOL(Df>7m6{=P zyd=-&_Q#eYF^sxDxps;xz+JG2BlRv!aNst)sQqa|}^G`FEAEfDM z+xE~3^A-LF4;*&BFik+|pE z@(~g=YOR&Ggu!LCSf#rYouB9_ zo!V6ev=P=Z-FEwqU*Om*rW%UtMwRLjDia9@oVlE8kuj7C(sUHl;5v5|s5dzkff~E>)El#|Qm-23}HlSa=Lxd%iFF zb1AJHFNl!7TG{)tkd+9>ED-b`S?cL6o}D?~=ut!dV{rKEUfAJfw+v1mj2@~P757s& z`46dN842~r5^<~T*U35-Ew-SMx?!L}lX3aXw4`BlVS}EO+{-Dhg?pv=?x@Ir_i6SR1$aPg)CMzSS58WS0`gxS)mw)u?9_5pxf$8dUIS1+=4GTprBMqow2LkU*8V zRVlH0u2YM}nNkdVt6Nj9b(a08NMUT71~qcd;|`3DZc@N1N6gN=26ta2?s9x=DhiVXXMwer#c8Dz*eqf z3YdDhUv6{6r#`yNFkAtu07GGBVF?Ne!DZHIq4I|KQhP%Nycri%I-j8^m{pd*dA+`3 z!@fCLiW}{O994(dJ-(&I#=J%`LWo?IretHaGZk}5W%ZqNGvzQ}gZ&IXs#$;Fg*cp} z)}0#h@I2)zDLRgl(bwocl$D^P8690bidLc8c3mU8MxDEQaH6&QGmW5qdvR|!7(JX< z7&AZocNJ}H7$zoF>z!TH(<#9it@NxWdt0tAiLBN#zQX_7C9OqlvDhQ|R&nlUa;Gh^ z?hk)TDRWUD-Uk8&uWwvbkK!})CskCH^34=7oCqsuWcKqElfp{+qEFyuixPkkkm==m--<4K#56x`!nx+k)IWIEL`J?b1gYD_4_U1-a4Svbyvs;UT( z(MDn1^`4lD_GC-TulpMzuDB z=iv^eIe7A!cwAXKiMYueH!8zzlcjdlW;0FKetq=XTz$wM%;-hU!V;-|5WdNyvhxMy zcjgB?CSVk~hM?SaXHE_LX@RlG`@wW%y64!~$A&1b+5|C}t|{@&Cu*?H4v55?{tl%1$vND4y_Yv{r1fpJ&E zBbboHGs1zftWUX*uW4<;R^OK~BoGgF09RLyR|aPI`Sycrmcw{`bq94Cb{63;G0__; z9U>jlK+NKc!*o>Rq9jl|xVsbUBxa!mu}Eq}%D2Zt-+Tf)JO9w#JcMJkq;G0!O~S-4 zGK2(mzr8+vgj$)AhD)zbolt-RdqTuD{B0>F2bi{XWa8oBMZWu7zYHv>RyhK}oqr
- ![Observed density and forecast](assets/forecast.png){ width="900" } -
Left: forecast density for the next month on a 500 m point grid. - Right: observed monthly density and the forecast at the hottest grid point.
-
- -## What it does - -- **Spatio-temporal mapping** — kernel density estimation (KDE) on a grid of - points, or event counts on hexagonal / square grids, at daily, weekly or - monthly resolution. -- **Feature engineering** — lagged autoregressive, difference, seasonal and - trend features (STL decomposition) for every place. -- **Prediction pipeline** — any scikit-learn regressor (or `Pipeline` with - scaling and feature selection) trained to forecast the next period, with - time series cross-validation. -- **Study areas from OpenStreetMap** — fetch a city boundary from a name. -- **Synthetic data** — generate realistic events (hotspots, trend, annual, - weekly and hourly patterns) inside any study area to try things out. - -## In a nutshell - -```python -from predspot import Dataset, load_study_area, generate_crimes -from predspot.pipeline import build_default_pipeline - -study_area = load_study_area("Natal, Rio Grande do Norte, Brazil") # (1)! -crimes = generate_crimes(study_area, n_events=5000, seed=0) # (2)! - -dataset = Dataset(crimes, study_area) -pipeline = build_default_pipeline(study_area, tfreq="M", grid_resolution=1) -pipeline.fit(dataset) - -print(pipeline.evaluate("r2", cv=3)) # time series cross-validation -forecast = pipeline.predict() # density per grid point, next month -``` - -1. Needs `pip install "predspot[osm]"`. Any GeoDataFrame with a boundary works too. -2. Replace with your own DataFrame with `tag`, `t`, `lon`, `lat` columns. - -Head to the [installation](getting-started/installation.md) and -[quickstart](getting-started/quickstart.md) pages, or read -[how Predspot works](guide/concepts.md). - -## About - -Predspot was created by [Adelson Araujo](https://github.com/adaj) as part of -his master's thesis at the Universidade Federal do Rio Grande do Norte (UFRN), -Brazil, and revived in 2026 for current versions of Python and its scientific -stack. It is research software released under the BSD-3-Clause license; see -[Citing Predspot](citing.md) if you use it in your work. +--- +title: Home +--- + diff --git a/examples/build_natal_notebook.py b/examples/build_natal_notebook.py new file mode 100644 index 0000000..b6e8863 --- /dev/null +++ b/examples/build_natal_notebook.py @@ -0,0 +1,515 @@ +"""Build examples/natal.ipynb from source cells. + +The notebook itself is the deliverable; this script only exists so that the +notebook can be regenerated (and re-executed) reproducibly: + + python examples/build_natal_notebook.py + jupyter nbconvert --to notebook --execute --inplace examples/natal.ipynb +""" + +from pathlib import Path + +import nbformat as nbf + +cells = [] + + +def md(text): + cells.append(nbf.v4.new_markdown_cell(text.strip())) + + +def code(text): + cells.append(nbf.v4.new_code_cell(text.strip())) + + +md(""" +# Predspot end to end: crime hotspots for Natal, Brazil + +This notebook walks through the whole Predspot workflow on the city of Natal +(Rio Grande do Norte, Brazil), using **synthetic** crime events so that it +runs anywhere without confidential police data: + +1. fetch the city boundary from OpenStreetMap; +2. generate synthetic crime events with spatial hotspots and temporal patterns; +3. build the `Dataset`, the spatial grids and the spatio-temporal series (KDE and counts); +4. extract time series features; +5. fit, evaluate and inspect a `PredictionPipeline`; +6. forecast the next months and check how well the true hotspots are recovered. + +Every intermediate object is displayed so you can see exactly what flows +between the steps. Requirements: `pip install "predspot[osm]" matplotlib`. +""") + +code(""" +import warnings + +import geopandas as gpd +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd + +import predspot +from predspot import Dataset, PredictionPipeline, PandasFeatureUnion, generate_crimes, get_city_shape +from predspot.crime_mapping import KDE, QuadratCount, create_gridhexagonal, create_gridpoints +from predspot.feature_engineering import AR, Diff, Seasonality, Trend + +warnings.filterwarnings("ignore", category=UserWarning) +pd.set_option("display.width", 120) +pd.set_option("display.max_columns", 20) +plt.rcParams["figure.dpi"] = 100 + +print("predspot", predspot.__version__, "| geopandas", gpd.__version__, "| pandas", pd.__version__) +""") + +md(""" +## 1. Study area: the boundary of Natal + +`get_city_shape` geocodes a place name with [osmnx](https://osmnx.readthedocs.io) +(Nominatim) and returns its boundary as a GeoDataFrame in WGS84. The query +should be specific enough for the first match to be the municipality. +""") + +code(""" +city = get_city_shape("Natal, RN, Brazil") +city +""") + +code(""" +polygon = city.geometry.iloc[0] +print("geometry:", polygon.geom_type, "| vertices:", len(polygon.exterior.coords)) +print("bounds (W, S, E, N):", np.round(city.total_bounds, 4)) +area_km2 = city.to_crs(city.estimate_utm_crs()).area.iloc[0] / 1e6 +print(f"area: {area_km2:.1f} km²") + +ax = city.plot(figsize=(5, 6), color="#f2f2f2", edgecolor="black") +ax.set_title("Natal, RN (OpenStreetMap boundary)") +ax.set_axis_off() +""") + +md(""" +## 2. Synthetic crime events + +`generate_crimes` draws events from a space-time point process inside the +polygon: a mixture of Gaussian **hotspots** plus a uniform background in space, +and a temporal intensity with a linear **trend**, an **annual** cycle and +**day-of-week** / **hour-of-day** profiles. With `return_hotspots=True` we also +get the hotspot centres, which lets us check later whether the model finds them. +""") + +code(""" +crimes, hotspots = generate_crimes( + city, + n_events=12_000, + start="2019-01-01", + end="2021-12-31", + n_hotspots=5, + hotspot_share=0.65, + hotspot_sd_km=0.7, + trend=0.4, # +40% events from start to end + annual_amplitude=0.25, # busier around the peak month... + annual_peak_month=12, # ...December + seed=2019, + return_hotspots=True, +) +crimes.head(10) +""") + +code(""" +print(crimes.shape) +crimes.describe(include="all").T +""") + +code(""" +hotspots +""") + +code(""" +crimes["tag"].value_counts().to_frame("events").assign(share=lambda d: (d["events"] / len(crimes)).round(3)) +""") + +md(""" +### 2.1 Where and when do the events happen? +""") + +code(""" +fig, ax = plt.subplots(figsize=(7, 8)) +city.plot(ax=ax, color="#f7f7f7", edgecolor="black") +sample = crimes.sample(4000, random_state=0) +ax.scatter(sample["lon"], sample["lat"], s=3, alpha=0.35, color="#1f4e79", label="events (sample)") +hotspots.plot(ax=ax, color="#d62728", marker="*", markersize=150, zorder=5, label="hotspot centres") +ax.legend(loc="lower left") +ax.set_title("Synthetic crime events in Natal") +ax.set_axis_off() +""") + +code(""" +monthly = crimes.set_index("t").resample("ME").size().rename("events") +fig, axes = plt.subplots(1, 3, figsize=(15, 3.6)) +monthly.plot(ax=axes[0], marker="o") +axes[0].set_title("Events per month (trend + annual cycle)") +axes[0].set_xlabel("") +crimes["t"].dt.day_name().value_counts().reindex( + ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] +).plot.bar(ax=axes[1], color="#1f4e79") +axes[1].set_title("Events per weekday") +crimes["t"].dt.hour.value_counts().sort_index().plot.bar(ax=axes[2], color="#1f4e79", width=0.9) +axes[2].set_title("Events per hour of day") +fig.tight_layout() +""") + +md(""" +## 3. Dataset, grids and the spatio-temporal series + +`Dataset` validates the events (columns `tag`, `t`, `lon`, `lat`) and turns +them into a GeoDataFrame of points in WGS84, together with the study area. +""") + +code(""" +dataset = Dataset(crimes, city) +dataset +""") + +code(""" +dataset.crimes.head() +""") + +md(""" +### 3.1 Grids + +Predspot discretises the city into **places**. Two kinds of grid are built +below: a grid of **points** every 500 m (used by `KDE`) and a grid of +**hexagons** of 1 km² (used by `QuadratCount`). Only cells intersecting the +city are kept; each grid has `lon`/`lat` columns with the cell centroid and an +index named `places`. +""") + +code(""" +points = create_gridpoints(city, resolution=0.5) +hexes = create_gridhexagonal(city, resolution=1.0) +print(f"{len(points)} grid points at 500 m | {len(hexes)} hexagons of 1 km²") +points.head() +""") + +code(""" +fig, axes = plt.subplots(1, 2, figsize=(12, 7)) +city.boundary.plot(ax=axes[0], color="black") +points.plot(ax=axes[0], markersize=4, color="#1f4e79") +axes[0].set_title(f"Point grid, 500 m ({len(points)} places)") +city.boundary.plot(ax=axes[1], color="black") +hexes.plot(ax=axes[1], facecolor="none", edgecolor="#1f4e79", linewidth=0.6) +axes[1].set_title(f"Hexagonal grid, 1 km² ({len(hexes)} places)") +for ax in axes: + ax.set_axis_off() +""") + +md(""" +### 3.2 Spatio-temporal mapping + +A mapping assigns one value to every `(period, place)` pair. `KDE` fits a +Gaussian kernel density estimate to the events of each period and evaluates it +at the grid points; `QuadratCount` counts the events inside each polygon. Both +return the same object: a `pandas.Series` named `crime_density` with a +`(t, places)` MultiIndex — the **spatio-temporal series**. +""") + +code(""" +kde = KDE(tfreq="M", grid=points, bandwidth="silverman") +stseries = kde.fit_transform(dataset.crimes) +print(type(stseries).__name__, stseries.shape, "| KDE factor:", round(kde.factor, 4)) +stseries.head(8) +""") + +code(""" +# The same series in wide form: one row per month, one column per place +wide = stseries.unstack("places") +wide.iloc[:6, :8] +""") + +code(""" +counts = QuadratCount(tfreq="M", grid=hexes).fit_transform(dataset.crimes) +counts_wide = counts.unstack("places") +print("events per month recovered by the counts:", counts_wide.sum(axis=1).astype(int).head(3).tolist(), "...") +counts_wide.iloc[:6, :8] +""") + +code(""" +month = pd.Timestamp("2021-06-30") +fig, axes = plt.subplots(1, 2, figsize=(13, 6.5)) + +g = points.copy() +g["density"] = stseries.xs(month, level="t").reindex(points.index).values +g.plot(ax=axes[0], column="density", cmap="viridis", markersize=12, marker="s", legend=True, + legend_kwds={"shrink": 0.6, "label": "KDE density"}) +city.boundary.plot(ax=axes[0], color="black", linewidth=1) +hotspots.plot(ax=axes[0], color="#d62728", marker="*", markersize=150, zorder=5) +axes[0].set_title(f"KDE on the point grid - {month:%B %Y}") + +h = hexes.copy() +h["events"] = counts.xs(month, level="t").reindex(hexes.index).values +h.plot(ax=axes[1], column="events", cmap="viridis", edgecolor="white", linewidth=0.3, legend=True, + legend_kwds={"shrink": 0.6, "label": "events in the cell"}) +city.boundary.plot(ax=axes[1], color="black", linewidth=1) +hotspots.plot(ax=axes[1], color="#d62728", marker="*", markersize=150, zorder=5) +axes[1].set_title(f"QuadratCount on hexagons - {month:%B %Y}") +for ax in axes: + ax.set_axis_off() +""") + +md(""" +### 3.3 The KDE bandwidth + +`bandwidth="silverman"` estimates the kernel width from the spread of the +events in the first period and keeps it fixed, which makes densities comparable +over time but tends to over-smooth a whole city. A numeric `bandwidth` is used +directly as the KDE factor (a multiple of the city-wide spread of the events): +smaller values give sharper maps. Compare three settings for the same month — +this is the trade-off discussed in the thesis (Chapter 2, Figure 3). +""") + +code(""" +fig, axes = plt.subplots(1, 3, figsize=(16, 5.5)) +for ax, bw in zip(axes, ["silverman", 0.2, 0.08]): + m = KDE(tfreq="M", grid=points, bandwidth=bw) + st = m.fit_transform(dataset.crimes) + g = points.copy() + g["density"] = st.xs(month, level="t").reindex(points.index).values + g.plot(ax=ax, column="density", cmap="viridis", markersize=10, marker="s") + city.boundary.plot(ax=ax, color="black", linewidth=1) + hotspots.plot(ax=ax, color="#d62728", marker="*", markersize=120, zorder=5) + ax.set_title(f"bandwidth={bw!r} (factor {m.factor:.3f})") + ax.set_axis_off() +""") + +md(""" +## 4. Time series features + +From here on we use `bandwidth=0.2`, a middle ground between the +over-smoothed Silverman estimate and a noisy small kernel. + +Each place has a monthly series. The feature classes transform it (STL trend, +STL seasonal component, first difference or the raw series) and build `lags` +lagged columns. `PandasFeatureUnion` aligns them on the `(t, places)` index and +drops the warm-up rows. Note the extra row for the month **after** the last +observed one — that is the row the model will forecast. +""") + +code(""" +BANDWIDTH = 0.2 +stseries = KDE(tfreq="M", grid=points, bandwidth=BANDWIDTH).fit_transform(dataset.crimes) + +LAGS = 6 +fextraction = PandasFeatureUnion([ + ("ar", AR(lags=3)), + ("seasonal", Seasonality(lags=LAGS)), + ("trend", Trend(lags=LAGS)), + ("diff", Diff(lags=LAGS)), +]) +X = fextraction.fit_transform(stseries) +print(X.shape, "| periods:", X.index.get_level_values("t").min().date(), "->", X.index.get_level_values("t").max().date()) +X.head(8) +""") + +code(""" +# What the decomposition looks like for the busiest place +busiest = stseries.groupby("places").mean().idxmax() +ts = stseries.xs(busiest, level="places") +from statsmodels.tsa.seasonal import STL +res = STL(ts, period=LAGS).fit() +fig, axes = plt.subplots(4, 1, figsize=(10, 7), sharex=True) +ts.plot(ax=axes[0], title=f"place {busiest}: KDE density per month") +res.trend.plot(ax=axes[1], title="STL trend") +res.seasonal.plot(ax=axes[2], title=f"STL seasonal (period={LAGS})") +ts.diff().plot(ax=axes[3], title="first difference") +for ax in axes: + ax.set_xlabel("") +fig.tight_layout() +""") + +md(""" +## 5. Fit and evaluate a prediction pipeline + +The pipeline chains the mapping, the feature extraction and a scikit-learn +estimator. Here the estimator is itself a `Pipeline`: quantile scaling, +recursive feature elimination and a random forest, each wrapped so that +DataFrames (and the `(t, places)` index) survive every step. +""") + +code(""" +from sklearn.ensemble import RandomForestRegressor +from sklearn.feature_selection import RFE +from sklearn.pipeline import Pipeline +from sklearn.preprocessing import QuantileTransformer + +from predspot.feature_engineering import FeatureScaling +from predspot.ml_modelling import FeatureSelection, Model + +pipeline = PredictionPipeline( + mapping=KDE(tfreq="M", grid=points, bandwidth=BANDWIDTH), + fextraction=PandasFeatureUnion([ + ("ar", AR(lags=3)), + ("seasonal", Seasonality(lags=LAGS)), + ("trend", Trend(lags=LAGS)), + ("diff", Diff(lags=LAGS)), + ]), + estimator=Pipeline([ + ("scaling", FeatureScaling(QuantileTransformer(n_quantiles=20, output_distribution="uniform"))), + ("selection", FeatureSelection(RFE(RandomForestRegressor(n_estimators=20, random_state=0, n_jobs=-1), + n_features_to_select=12, step=3))), + ("model", Model(RandomForestRegressor(n_estimators=100, min_samples_leaf=2, random_state=0, n_jobs=-1))), + ]), + random_state=0, +) +pipeline.fit(dataset) +print("training rows:", pipeline.features.loc[: stseries.index.get_level_values("t").max()].shape[0]) +print("next period to forecast:", pipeline.next_time.date()) +""") + +code(""" +scores = pipeline.evaluate(["r2", "mse"], cv=3) # time series CV: train on earlier folds, test on the next +scores.loc["mean"] = scores.mean() +scores +""") + +code(""" +fi = pipeline.feature_importances +ax = fi.sort_values("importance").plot.barh(figsize=(7, 5), legend=False, color="#1f4e79") +ax.set_title("Selected features and their importance") +fi.head(12) +""") + +md(""" +## 6. Forecast the next months + +`predict()` returns the density of every place for the period after the last +observed one. Each call appends its forecast to the series, recomputes the +features and moves the horizon one period forward, so calling it three times +gives a three-month recursive forecast. +""") + +code(""" +forecasts = pd.concat([pipeline.predict() for _ in range(3)]) +forecasts.groupby("t").describe().round(2) +""") + +code(""" +first_month = forecasts.index.get_level_values("t").min() +fc = points.join(forecasts.xs(first_month, level="t")) +top10 = fc.nlargest(10, "crime_density")[["lon", "lat", "crime_density"]].round(4) +print(f"Top-10 places for {first_month:%B %Y}:") +top10 +""") + +code(""" +fig, ax = plt.subplots(figsize=(7, 8)) +fc.plot(ax=ax, column="crime_density", cmap="magma", markersize=14, marker="s", legend=True, + legend_kwds={"shrink": 0.6, "label": "forecast density"}) +city.boundary.plot(ax=ax, color="black", linewidth=1) +hotspots.plot(ax=ax, color="#00e5ff", marker="*", markersize=170, zorder=5, label="true hotspot centres") +top = fc.nlargest(20, "crime_density") +ax.scatter(top["lon"], top["lat"], s=110, facecolors="none", edgecolors="#00e5ff", linewidths=1.6, label="top-20 forecast") +ax.legend(loc="lower left") +ax.set_title(f"Forecast hotspots for {first_month:%B %Y}") +ax.set_axis_off() +""") + +md(""" +### 6.1 Does the forecast find the true hotspots? + +Since the data are synthetic we know where the hotspots are. For each true +hotspot centre we look up the nearest grid point and check how it ranks in the +forecast (1 = hottest place of the city). Hotspots holding a larger share of the +events should rank near the top; small hotspots on a 500 m grid compete with the +many grid points that surround the biggest one. +""") + +code(""" +def distance_km(lon1, lat1, lon2, lat2): + dx = (lon1 - lon2) * 111.32 * np.cos(np.radians((lat1 + lat2) / 2)) + dy = (lat1 - lat2) * 110.57 + return np.hypot(dx, dy) + +ranked = fc.sort_values("crime_density", ascending=False) +ranked["rank"] = np.arange(1, len(ranked) + 1) +rows = [] +for i, h in hotspots.iterrows(): + d = distance_km(ranked["lon"].values, ranked["lat"].values, h.geometry.x, h.geometry.y) + nearest = ranked.iloc[int(d.argmin())] + rows.append({ + "hotspot": i, + "share_of_events": round(h["share"], 3), + "nearest_place": int(nearest.name), + "distance_km": round(float(d.min()), 2), + "forecast_rank": int(nearest["rank"]), + "percentile": round(100 * (1 - nearest["rank"] / len(ranked)), 1), + }) +pd.DataFrame(rows).set_index("hotspot").sort_values("forecast_rank") +""") + +code(""" +# The full history + forecast of the top forecast place +place = fc["crime_density"].idxmax() +series = pipeline.stseries.xs(place, level="places") +observed = series.loc[: stseries.index.get_level_values("t").max()] +predicted = series.loc[forecasts.index.get_level_values("t").min():] +ax = observed.plot(figsize=(10, 3.5), marker="o", label="observed (KDE)") +predicted.plot(ax=ax, marker="*", markersize=12, linestyle="--", color="#d62728", label="forecast") +ax.set_title(f"Place {place}: monthly density and 3-month recursive forecast") +ax.set_xlabel("") +ax.legend() +""") + +md(""" +## 7. The same pipeline with counts on hexagons + +`QuadratCount` is a drop-in replacement for `KDE`: swap the mapping and the +grid, keep everything else. +""") + +code(""" +hex_pipeline = PredictionPipeline( + mapping=QuadratCount(tfreq="M", grid=hexes), + fextraction=PandasFeatureUnion([ + ("ar", AR(lags=3)), + ("seasonal", Seasonality(lags=LAGS)), + ("trend", Trend(lags=LAGS)), + ]), + estimator=RandomForestRegressor(n_estimators=100, min_samples_leaf=2, random_state=0, n_jobs=-1), + random_state=0, +).fit(dataset) +print("r2 per fold:", np.round(hex_pipeline.evaluate("r2", cv=3), 3)) +hex_fc = hexes.join(hex_pipeline.predict().droplevel("t")) + +fig, ax = plt.subplots(figsize=(7, 8)) +hex_fc.plot(ax=ax, column="crime_density", cmap="magma", edgecolor="white", linewidth=0.3, legend=True, + legend_kwds={"shrink": 0.6, "label": "forecast events"}) +city.boundary.plot(ax=ax, color="black", linewidth=1) +hotspots.plot(ax=ax, color="#00e5ff", marker="*", markersize=170, zorder=5) +ax.set_title(f"Forecast events per hexagon for {hex_pipeline.stseries.index.get_level_values('t').max():%B %Y}") +ax.set_axis_off() +""") + +md(""" +## Wrapping up + +- `get_city_shape` gave us the study area; `generate_crimes` produced events with known hotspots. +- `Dataset` → grid → `KDE` / `QuadratCount` turned the events into a spatio-temporal series. +- Lagged STL trend/seasonal, difference and autoregressive features fed a scikit-learn pipeline + wrapped by `PredictionPipeline`, evaluated with time series cross-validation. +- `predict()` forecast the following months; the grid points nearest to the true hotspot + centres rank at the top of the forecast, in proportion to each hotspot's share of events. + +To run this on real data, replace the synthetic `crimes` DataFrame with your own +`tag, t, lon, lat` table and model each crime type (`tag`) separately, as the +framework recommends. See the [documentation](https://adaj.github.io/predspot/) +for the details of every step. +""") + +nb = nbf.v4.new_notebook() +nb["cells"] = cells +nb["metadata"] = { + "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, + "language_info": {"name": "python"}, +} +out = Path(__file__).with_name("natal.ipynb") +nbf.write(nb, out) +print(f"wrote {out} with {len(cells)} cells") diff --git a/examples/natal.ipynb b/examples/natal.ipynb new file mode 100644 index 0000000..e995e61 --- /dev/null +++ b/examples/natal.ipynb @@ -0,0 +1,728 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7e4e38dc", + "metadata": {}, + "source": [ + "# Predspot end to end: crime hotspots for Natal, Brazil\n", + "\n", + "This notebook walks through the whole Predspot workflow on the city of Natal\n", + "(Rio Grande do Norte, Brazil), using **synthetic** crime events so that it\n", + "runs anywhere without confidential police data:\n", + "\n", + "1. fetch the city boundary from OpenStreetMap;\n", + "2. generate synthetic crime events with spatial hotspots and temporal patterns;\n", + "3. build the `Dataset`, the spatial grids and the spatio-temporal series (KDE and counts);\n", + "4. extract time series features;\n", + "5. fit, evaluate and inspect a `PredictionPipeline`;\n", + "6. forecast the next months and check how well the true hotspots are recovered.\n", + "\n", + "Every intermediate object is displayed so you can see exactly what flows\n", + "between the steps. Requirements: `pip install \"predspot[osm]\" matplotlib`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1dac71a9", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "import geopandas as gpd\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "import predspot\n", + "from predspot import Dataset, PredictionPipeline, PandasFeatureUnion, generate_crimes, get_city_shape\n", + "from predspot.crime_mapping import KDE, QuadratCount, create_gridhexagonal, create_gridpoints\n", + "from predspot.feature_engineering import AR, Diff, Seasonality, Trend\n", + "\n", + "warnings.filterwarnings(\"ignore\", category=UserWarning)\n", + "pd.set_option(\"display.width\", 120)\n", + "pd.set_option(\"display.max_columns\", 20)\n", + "plt.rcParams[\"figure.dpi\"] = 100\n", + "\n", + "print(\"predspot\", predspot.__version__, \"| geopandas\", gpd.__version__, \"| pandas\", pd.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "cb9de6ba", + "metadata": {}, + "source": [ + "## 1. Study area: the boundary of Natal\n", + "\n", + "`get_city_shape` geocodes a place name with [osmnx](https://osmnx.readthedocs.io)\n", + "(Nominatim) and returns its boundary as a GeoDataFrame in WGS84. The query\n", + "should be specific enough for the first match to be the municipality." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0fbc889", + "metadata": {}, + "outputs": [], + "source": [ + "city = get_city_shape(\"Natal, RN, Brazil\")\n", + "city" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "88ba713c", + "metadata": {}, + "outputs": [], + "source": [ + "polygon = city.geometry.iloc[0]\n", + "print(\"geometry:\", polygon.geom_type, \"| vertices:\", len(polygon.exterior.coords))\n", + "print(\"bounds (W, S, E, N):\", np.round(city.total_bounds, 4))\n", + "area_km2 = city.to_crs(city.estimate_utm_crs()).area.iloc[0] / 1e6\n", + "print(f\"area: {area_km2:.1f} km²\")\n", + "\n", + "ax = city.plot(figsize=(5, 6), color=\"#f2f2f2\", edgecolor=\"black\")\n", + "ax.set_title(\"Natal, RN (OpenStreetMap boundary)\")\n", + "ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "e1f4ca42", + "metadata": {}, + "source": [ + "## 2. Synthetic crime events\n", + "\n", + "`generate_crimes` draws events from a space-time point process inside the\n", + "polygon: a mixture of Gaussian **hotspots** plus a uniform background in space,\n", + "and a temporal intensity with a linear **trend**, an **annual** cycle and\n", + "**day-of-week** / **hour-of-day** profiles. With `return_hotspots=True` we also\n", + "get the hotspot centres, which lets us check later whether the model finds them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "caf16e7f", + "metadata": {}, + "outputs": [], + "source": [ + "crimes, hotspots = generate_crimes(\n", + " city,\n", + " n_events=12_000,\n", + " start=\"2019-01-01\",\n", + " end=\"2021-12-31\",\n", + " n_hotspots=5,\n", + " hotspot_share=0.65,\n", + " hotspot_sd_km=0.7,\n", + " trend=0.4, # +40% events from start to end\n", + " annual_amplitude=0.25, # busier around the peak month...\n", + " annual_peak_month=12, # ...December\n", + " seed=2019,\n", + " return_hotspots=True,\n", + ")\n", + "crimes.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "256277d3", + "metadata": {}, + "outputs": [], + "source": [ + "print(crimes.shape)\n", + "crimes.describe(include=\"all\").T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb00b456", + "metadata": {}, + "outputs": [], + "source": [ + "hotspots" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "999d61a3", + "metadata": {}, + "outputs": [], + "source": [ + "crimes[\"tag\"].value_counts().to_frame(\"events\").assign(share=lambda d: (d[\"events\"] / len(crimes)).round(3))" + ] + }, + { + "cell_type": "markdown", + "id": "bd6b0177", + "metadata": {}, + "source": [ + "### 2.1 Where and when do the events happen?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4f4153c8", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(7, 8))\n", + "city.plot(ax=ax, color=\"#f7f7f7\", edgecolor=\"black\")\n", + "sample = crimes.sample(4000, random_state=0)\n", + "ax.scatter(sample[\"lon\"], sample[\"lat\"], s=3, alpha=0.35, color=\"#1f4e79\", label=\"events (sample)\")\n", + "hotspots.plot(ax=ax, color=\"#d62728\", marker=\"*\", markersize=150, zorder=5, label=\"hotspot centres\")\n", + "ax.legend(loc=\"lower left\")\n", + "ax.set_title(\"Synthetic crime events in Natal\")\n", + "ax.set_axis_off()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b15e0701", + "metadata": {}, + "outputs": [], + "source": [ + "monthly = crimes.set_index(\"t\").resample(\"ME\").size().rename(\"events\")\n", + "fig, axes = plt.subplots(1, 3, figsize=(15, 3.6))\n", + "monthly.plot(ax=axes[0], marker=\"o\")\n", + "axes[0].set_title(\"Events per month (trend + annual cycle)\")\n", + "axes[0].set_xlabel(\"\")\n", + "crimes[\"t\"].dt.day_name().value_counts().reindex(\n", + " [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\n", + ").plot.bar(ax=axes[1], color=\"#1f4e79\")\n", + "axes[1].set_title(\"Events per weekday\")\n", + "crimes[\"t\"].dt.hour.value_counts().sort_index().plot.bar(ax=axes[2], color=\"#1f4e79\", width=0.9)\n", + "axes[2].set_title(\"Events per hour of day\")\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "b0340fd2", + "metadata": {}, + "source": [ + "## 3. Dataset, grids and the spatio-temporal series\n", + "\n", + "`Dataset` validates the events (columns `tag`, `t`, `lon`, `lat`) and turns\n", + "them into a GeoDataFrame of points in WGS84, together with the study area." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a810174", + "metadata": {}, + "outputs": [], + "source": [ + "dataset = Dataset(crimes, city)\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d915daaf", + "metadata": {}, + "outputs": [], + "source": [ + "dataset.crimes.head()" + ] + }, + { + "cell_type": "markdown", + "id": "5552a527", + "metadata": {}, + "source": [ + "### 3.1 Grids\n", + "\n", + "Predspot discretises the city into **places**. Two kinds of grid are built\n", + "below: a grid of **points** every 500 m (used by `KDE`) and a grid of\n", + "**hexagons** of 1 km² (used by `QuadratCount`). Only cells intersecting the\n", + "city are kept; each grid has `lon`/`lat` columns with the cell centroid and an\n", + "index named `places`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "534bcc4d", + "metadata": {}, + "outputs": [], + "source": [ + "points = create_gridpoints(city, resolution=0.5)\n", + "hexes = create_gridhexagonal(city, resolution=1.0)\n", + "print(f\"{len(points)} grid points at 500 m | {len(hexes)} hexagons of 1 km²\")\n", + "points.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "77bc64fc", + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(1, 2, figsize=(12, 7))\n", + "city.boundary.plot(ax=axes[0], color=\"black\")\n", + "points.plot(ax=axes[0], markersize=4, color=\"#1f4e79\")\n", + "axes[0].set_title(f\"Point grid, 500 m ({len(points)} places)\")\n", + "city.boundary.plot(ax=axes[1], color=\"black\")\n", + "hexes.plot(ax=axes[1], facecolor=\"none\", edgecolor=\"#1f4e79\", linewidth=0.6)\n", + "axes[1].set_title(f\"Hexagonal grid, 1 km² ({len(hexes)} places)\")\n", + "for ax in axes:\n", + " ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "e96fee0a", + "metadata": {}, + "source": [ + "### 3.2 Spatio-temporal mapping\n", + "\n", + "A mapping assigns one value to every `(period, place)` pair. `KDE` fits a\n", + "Gaussian kernel density estimate to the events of each period and evaluates it\n", + "at the grid points; `QuadratCount` counts the events inside each polygon. Both\n", + "return the same object: a `pandas.Series` named `crime_density` with a\n", + "`(t, places)` MultiIndex — the **spatio-temporal series**." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "110f6eb3", + "metadata": {}, + "outputs": [], + "source": [ + "kde = KDE(tfreq=\"M\", grid=points, bandwidth=\"silverman\")\n", + "stseries = kde.fit_transform(dataset.crimes)\n", + "print(type(stseries).__name__, stseries.shape, \"| KDE factor:\", round(kde.factor, 4))\n", + "stseries.head(8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9cf26da", + "metadata": {}, + "outputs": [], + "source": [ + "# The same series in wide form: one row per month, one column per place\n", + "wide = stseries.unstack(\"places\")\n", + "wide.iloc[:6, :8]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b92ac677", + "metadata": {}, + "outputs": [], + "source": [ + "counts = QuadratCount(tfreq=\"M\", grid=hexes).fit_transform(dataset.crimes)\n", + "counts_wide = counts.unstack(\"places\")\n", + "print(\"events per month recovered by the counts:\", counts_wide.sum(axis=1).astype(int).head(3).tolist(), \"...\")\n", + "counts_wide.iloc[:6, :8]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef9896a8", + "metadata": {}, + "outputs": [], + "source": [ + "month = pd.Timestamp(\"2021-06-30\")\n", + "fig, axes = plt.subplots(1, 2, figsize=(13, 6.5))\n", + "\n", + "g = points.copy()\n", + "g[\"density\"] = stseries.xs(month, level=\"t\").reindex(points.index).values\n", + "g.plot(ax=axes[0], column=\"density\", cmap=\"viridis\", markersize=12, marker=\"s\", legend=True,\n", + " legend_kwds={\"shrink\": 0.6, \"label\": \"KDE density\"})\n", + "city.boundary.plot(ax=axes[0], color=\"black\", linewidth=1)\n", + "hotspots.plot(ax=axes[0], color=\"#d62728\", marker=\"*\", markersize=150, zorder=5)\n", + "axes[0].set_title(f\"KDE on the point grid - {month:%B %Y}\")\n", + "\n", + "h = hexes.copy()\n", + "h[\"events\"] = counts.xs(month, level=\"t\").reindex(hexes.index).values\n", + "h.plot(ax=axes[1], column=\"events\", cmap=\"viridis\", edgecolor=\"white\", linewidth=0.3, legend=True,\n", + " legend_kwds={\"shrink\": 0.6, \"label\": \"events in the cell\"})\n", + "city.boundary.plot(ax=axes[1], color=\"black\", linewidth=1)\n", + "hotspots.plot(ax=axes[1], color=\"#d62728\", marker=\"*\", markersize=150, zorder=5)\n", + "axes[1].set_title(f\"QuadratCount on hexagons - {month:%B %Y}\")\n", + "for ax in axes:\n", + " ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "c0a2c16f", + "metadata": {}, + "source": [ + "### 3.3 The KDE bandwidth\n", + "\n", + "`bandwidth=\"silverman\"` estimates the kernel width from the spread of the\n", + "events in the first period and keeps it fixed, which makes densities comparable\n", + "over time but tends to over-smooth a whole city. A numeric `bandwidth` is used\n", + "directly as the KDE factor (a multiple of the city-wide spread of the events):\n", + "smaller values give sharper maps. Compare three settings for the same month —\n", + "this is the trade-off discussed in the thesis (Chapter 2, Figure 3)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "859b64f4", + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(1, 3, figsize=(16, 5.5))\n", + "for ax, bw in zip(axes, [\"silverman\", 0.2, 0.08]):\n", + " m = KDE(tfreq=\"M\", grid=points, bandwidth=bw)\n", + " st = m.fit_transform(dataset.crimes)\n", + " g = points.copy()\n", + " g[\"density\"] = st.xs(month, level=\"t\").reindex(points.index).values\n", + " g.plot(ax=ax, column=\"density\", cmap=\"viridis\", markersize=10, marker=\"s\")\n", + " city.boundary.plot(ax=ax, color=\"black\", linewidth=1)\n", + " hotspots.plot(ax=ax, color=\"#d62728\", marker=\"*\", markersize=120, zorder=5)\n", + " ax.set_title(f\"bandwidth={bw!r} (factor {m.factor:.3f})\")\n", + " ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "47e84097", + "metadata": {}, + "source": [ + "## 4. Time series features\n", + "\n", + "From here on we use `bandwidth=0.2`, a middle ground between the\n", + "over-smoothed Silverman estimate and a noisy small kernel.\n", + "\n", + "Each place has a monthly series. The feature classes transform it (STL trend,\n", + "STL seasonal component, first difference or the raw series) and build `lags`\n", + "lagged columns. `PandasFeatureUnion` aligns them on the `(t, places)` index and\n", + "drops the warm-up rows. Note the extra row for the month **after** the last\n", + "observed one — that is the row the model will forecast." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d901dc3", + "metadata": {}, + "outputs": [], + "source": [ + "BANDWIDTH = 0.2\n", + "stseries = KDE(tfreq=\"M\", grid=points, bandwidth=BANDWIDTH).fit_transform(dataset.crimes)\n", + "\n", + "LAGS = 6\n", + "fextraction = PandasFeatureUnion([\n", + " (\"ar\", AR(lags=3)),\n", + " (\"seasonal\", Seasonality(lags=LAGS)),\n", + " (\"trend\", Trend(lags=LAGS)),\n", + " (\"diff\", Diff(lags=LAGS)),\n", + "])\n", + "X = fextraction.fit_transform(stseries)\n", + "print(X.shape, \"| periods:\", X.index.get_level_values(\"t\").min().date(), \"->\", X.index.get_level_values(\"t\").max().date())\n", + "X.head(8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "66dd5428", + "metadata": {}, + "outputs": [], + "source": [ + "# What the decomposition looks like for the busiest place\n", + "busiest = stseries.groupby(\"places\").mean().idxmax()\n", + "ts = stseries.xs(busiest, level=\"places\")\n", + "from statsmodels.tsa.seasonal import STL\n", + "res = STL(ts, period=LAGS).fit()\n", + "fig, axes = plt.subplots(4, 1, figsize=(10, 7), sharex=True)\n", + "ts.plot(ax=axes[0], title=f\"place {busiest}: KDE density per month\")\n", + "res.trend.plot(ax=axes[1], title=\"STL trend\")\n", + "res.seasonal.plot(ax=axes[2], title=f\"STL seasonal (period={LAGS})\")\n", + "ts.diff().plot(ax=axes[3], title=\"first difference\")\n", + "for ax in axes:\n", + " ax.set_xlabel(\"\")\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "0d3cca51", + "metadata": {}, + "source": [ + "## 5. Fit and evaluate a prediction pipeline\n", + "\n", + "The pipeline chains the mapping, the feature extraction and a scikit-learn\n", + "estimator. Here the estimator is itself a `Pipeline`: quantile scaling,\n", + "recursive feature elimination and a random forest, each wrapped so that\n", + "DataFrames (and the `(t, places)` index) survive every step." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a613809", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import RandomForestRegressor\n", + "from sklearn.feature_selection import RFE\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import QuantileTransformer\n", + "\n", + "from predspot.feature_engineering import FeatureScaling\n", + "from predspot.ml_modelling import FeatureSelection, Model\n", + "\n", + "pipeline = PredictionPipeline(\n", + " mapping=KDE(tfreq=\"M\", grid=points, bandwidth=BANDWIDTH),\n", + " fextraction=PandasFeatureUnion([\n", + " (\"ar\", AR(lags=3)),\n", + " (\"seasonal\", Seasonality(lags=LAGS)),\n", + " (\"trend\", Trend(lags=LAGS)),\n", + " (\"diff\", Diff(lags=LAGS)),\n", + " ]),\n", + " estimator=Pipeline([\n", + " (\"scaling\", FeatureScaling(QuantileTransformer(n_quantiles=20, output_distribution=\"uniform\"))),\n", + " (\"selection\", FeatureSelection(RFE(RandomForestRegressor(n_estimators=20, random_state=0, n_jobs=-1),\n", + " n_features_to_select=12, step=3))),\n", + " (\"model\", Model(RandomForestRegressor(n_estimators=100, min_samples_leaf=2, random_state=0, n_jobs=-1))),\n", + " ]),\n", + " random_state=0,\n", + ")\n", + "pipeline.fit(dataset)\n", + "print(\"training rows:\", pipeline.features.loc[: stseries.index.get_level_values(\"t\").max()].shape[0])\n", + "print(\"next period to forecast:\", pipeline.next_time.date())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eee77d05", + "metadata": {}, + "outputs": [], + "source": [ + "scores = pipeline.evaluate([\"r2\", \"mse\"], cv=3) # time series CV: train on earlier folds, test on the next\n", + "scores.loc[\"mean\"] = scores.mean()\n", + "scores" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f797ad0", + "metadata": {}, + "outputs": [], + "source": [ + "fi = pipeline.feature_importances\n", + "ax = fi.sort_values(\"importance\").plot.barh(figsize=(7, 5), legend=False, color=\"#1f4e79\")\n", + "ax.set_title(\"Selected features and their importance\")\n", + "fi.head(12)" + ] + }, + { + "cell_type": "markdown", + "id": "47c7fc5c", + "metadata": {}, + "source": [ + "## 6. Forecast the next months\n", + "\n", + "`predict()` returns the density of every place for the period after the last\n", + "observed one. Each call appends its forecast to the series, recomputes the\n", + "features and moves the horizon one period forward, so calling it three times\n", + "gives a three-month recursive forecast." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18edefe0", + "metadata": {}, + "outputs": [], + "source": [ + "forecasts = pd.concat([pipeline.predict() for _ in range(3)])\n", + "forecasts.groupby(\"t\").describe().round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "af03b229", + "metadata": {}, + "outputs": [], + "source": [ + "first_month = forecasts.index.get_level_values(\"t\").min()\n", + "fc = points.join(forecasts.xs(first_month, level=\"t\"))\n", + "top10 = fc.nlargest(10, \"crime_density\")[[\"lon\", \"lat\", \"crime_density\"]].round(4)\n", + "print(f\"Top-10 places for {first_month:%B %Y}:\")\n", + "top10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2bc5e223", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(7, 8))\n", + "fc.plot(ax=ax, column=\"crime_density\", cmap=\"magma\", markersize=14, marker=\"s\", legend=True,\n", + " legend_kwds={\"shrink\": 0.6, \"label\": \"forecast density\"})\n", + "city.boundary.plot(ax=ax, color=\"black\", linewidth=1)\n", + "hotspots.plot(ax=ax, color=\"#00e5ff\", marker=\"*\", markersize=170, zorder=5, label=\"true hotspot centres\")\n", + "top = fc.nlargest(20, \"crime_density\")\n", + "ax.scatter(top[\"lon\"], top[\"lat\"], s=110, facecolors=\"none\", edgecolors=\"#00e5ff\", linewidths=1.6, label=\"top-20 forecast\")\n", + "ax.legend(loc=\"lower left\")\n", + "ax.set_title(f\"Forecast hotspots for {first_month:%B %Y}\")\n", + "ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "822a11ea", + "metadata": {}, + "source": [ + "### 6.1 Does the forecast find the true hotspots?\n", + "\n", + "Since the data are synthetic we know where the hotspots are. For each true\n", + "hotspot centre we look up the nearest grid point and check how it ranks in the\n", + "forecast (1 = hottest place of the city). Hotspots holding a larger share of the\n", + "events should rank near the top; small hotspots on a 500 m grid compete with the\n", + "many grid points that surround the biggest one." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cb82e3a9", + "metadata": {}, + "outputs": [], + "source": [ + "def distance_km(lon1, lat1, lon2, lat2):\n", + " dx = (lon1 - lon2) * 111.32 * np.cos(np.radians((lat1 + lat2) / 2))\n", + " dy = (lat1 - lat2) * 110.57\n", + " return np.hypot(dx, dy)\n", + "\n", + "ranked = fc.sort_values(\"crime_density\", ascending=False)\n", + "ranked[\"rank\"] = np.arange(1, len(ranked) + 1)\n", + "rows = []\n", + "for i, h in hotspots.iterrows():\n", + " d = distance_km(ranked[\"lon\"].values, ranked[\"lat\"].values, h.geometry.x, h.geometry.y)\n", + " nearest = ranked.iloc[int(d.argmin())]\n", + " rows.append({\n", + " \"hotspot\": i,\n", + " \"share_of_events\": round(h[\"share\"], 3),\n", + " \"nearest_place\": int(nearest.name),\n", + " \"distance_km\": round(float(d.min()), 2),\n", + " \"forecast_rank\": int(nearest[\"rank\"]),\n", + " \"percentile\": round(100 * (1 - nearest[\"rank\"] / len(ranked)), 1),\n", + " })\n", + "pd.DataFrame(rows).set_index(\"hotspot\").sort_values(\"forecast_rank\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3350c32", + "metadata": {}, + "outputs": [], + "source": [ + "# The full history + forecast of the top forecast place\n", + "place = fc[\"crime_density\"].idxmax()\n", + "series = pipeline.stseries.xs(place, level=\"places\")\n", + "observed = series.loc[: stseries.index.get_level_values(\"t\").max()]\n", + "predicted = series.loc[forecasts.index.get_level_values(\"t\").min():]\n", + "ax = observed.plot(figsize=(10, 3.5), marker=\"o\", label=\"observed (KDE)\")\n", + "predicted.plot(ax=ax, marker=\"*\", markersize=12, linestyle=\"--\", color=\"#d62728\", label=\"forecast\")\n", + "ax.set_title(f\"Place {place}: monthly density and 3-month recursive forecast\")\n", + "ax.set_xlabel(\"\")\n", + "ax.legend()" + ] + }, + { + "cell_type": "markdown", + "id": "f01c22b2", + "metadata": {}, + "source": [ + "## 7. The same pipeline with counts on hexagons\n", + "\n", + "`QuadratCount` is a drop-in replacement for `KDE`: swap the mapping and the\n", + "grid, keep everything else." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8c8e650f", + "metadata": {}, + "outputs": [], + "source": [ + "hex_pipeline = PredictionPipeline(\n", + " mapping=QuadratCount(tfreq=\"M\", grid=hexes),\n", + " fextraction=PandasFeatureUnion([\n", + " (\"ar\", AR(lags=3)),\n", + " (\"seasonal\", Seasonality(lags=LAGS)),\n", + " (\"trend\", Trend(lags=LAGS)),\n", + " ]),\n", + " estimator=RandomForestRegressor(n_estimators=100, min_samples_leaf=2, random_state=0, n_jobs=-1),\n", + " random_state=0,\n", + ").fit(dataset)\n", + "print(\"r2 per fold:\", np.round(hex_pipeline.evaluate(\"r2\", cv=3), 3))\n", + "hex_fc = hexes.join(hex_pipeline.predict().droplevel(\"t\"))\n", + "\n", + "fig, ax = plt.subplots(figsize=(7, 8))\n", + "hex_fc.plot(ax=ax, column=\"crime_density\", cmap=\"magma\", edgecolor=\"white\", linewidth=0.3, legend=True,\n", + " legend_kwds={\"shrink\": 0.6, \"label\": \"forecast events\"})\n", + "city.boundary.plot(ax=ax, color=\"black\", linewidth=1)\n", + "hotspots.plot(ax=ax, color=\"#00e5ff\", marker=\"*\", markersize=170, zorder=5)\n", + "ax.set_title(f\"Forecast events per hexagon for {hex_pipeline.stseries.index.get_level_values('t').max():%B %Y}\")\n", + "ax.set_axis_off()" + ] + }, + { + "cell_type": "markdown", + "id": "08c02abe", + "metadata": {}, + "source": [ + "## Wrapping up\n", + "\n", + "- `get_city_shape` gave us the study area; `generate_crimes` produced events with known hotspots.\n", + "- `Dataset` → grid → `KDE` / `QuadratCount` turned the events into a spatio-temporal series.\n", + "- Lagged STL trend/seasonal, difference and autoregressive features fed a scikit-learn pipeline\n", + " wrapped by `PredictionPipeline`, evaluated with time series cross-validation.\n", + "- `predict()` forecast the following months; the grid points nearest to the true hotspot\n", + " centres rank at the top of the forecast, in proportion to each hotspot's share of events.\n", + "\n", + "To run this on real data, replace the synthetic `crimes` DataFrame with your own\n", + "`tag, t, lon, lat` table and model each crime type (`tag`) separately, as the\n", + "framework recommends. See the [documentation](https://adaj.github.io/predspot/)\n", + "for the details of every step." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mkdocs.yml b/mkdocs.yml index 78309a3..d91c589 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -48,6 +48,8 @@ nav: - Grids and spatio-temporal mapping: guide/mapping.md - Feature engineering: guide/features.md - Prediction and evaluation: guide/modelling.md + - Examples: + - Natal, Brazil (end to end): examples/natal.ipynb - API reference: - predspot: api/predspot.md - dataset_preparation: api/dataset_preparation.md @@ -62,8 +64,15 @@ nav: - Contributing: contributing.md - Citing Predspot: citing.md +hooks: + - docs/hooks/readme.py + plugins: - search + - mkdocs-jupyter: + execute: false + include_source: true + include_requirejs: true - autorefs - mkdocstrings: handlers: diff --git a/pyproject.toml b/pyproject.toml index 5c61551..89b35b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,6 +49,7 @@ docs = [ "mkdocs-material>=9.5,<10", "mkdocstrings[python]>=0.26", "mkdocs-autorefs>=1.2", + "mkdocs-jupyter>=0.25", ] dev = [ "pytest>=8", @@ -88,6 +89,7 @@ branch = true [tool.ruff] line-length = 100 +exclude = ["examples"] # tutorial code: readability over line length target-version = "py310" src = ["src", "tests"] diff --git a/src/predspot/__init__.py b/src/predspot/__init__.py index f85d774..5d2ca3d 100644 --- a/src/predspot/__init__.py +++ b/src/predspot/__init__.py @@ -23,6 +23,7 @@ create_gridhexagonal, create_gridpoints, create_gridsquares, + get_city_shape, load_study_area, ) from predspot.dataset_preparation import Dataset @@ -42,6 +43,7 @@ "create_gridhexagonal", "create_gridsquares", "load_study_area", + "get_city_shape", "generate_crimes", "synthetic", "crime_mapping", diff --git a/src/predspot/crime_mapping.py b/src/predspot/crime_mapping.py index 710d7c7..f2ccfa9 100644 --- a/src/predspot/crime_mapping.py +++ b/src/predspot/crime_mapping.py @@ -138,6 +138,36 @@ def load_study_area(place, crs=WGS84, which_result=None): return gdf.to_crs(crs) +def get_city_shape(place_query): + """ + Fetch the shape (polygon) of a city or region from OpenStreetMap. + + A thin wrapper around ``osmnx.geocode_to_gdf`` that returns the raw + Nominatim result. Prefer [`load_study_area`][predspot.crime_mapping.load_study_area] + when you want the result validated (polygon geometry, tidy columns). + Requires the optional ``osmnx`` dependency (``pip install predspot[osm]``). + + Args: + place_query (str): Name of the place, in a format Nominatim accepts, + e.g. ``"Natal, RN, Brazil"`` or ``"Rio Grande do Norte, Brazil"``. + + Returns: + GeoDataFrame: One row (or more, if the query is ambiguous) with the + place geometry (Polygon/MultiPolygon) in WGS84. + + Example: + >>> city = get_city_shape("Natal, RN, Brazil") + >>> city.geometry.iloc[0] # shapely Polygon/MultiPolygon + """ + try: + import osmnx as ox + except ImportError as exc: + raise ImportError( + "get_city_shape requires the optional dependency `osmnx`: pip install predspot[osm]" + ) from exc + return ox.geocode_to_gdf(place_query) + + def _check_bbox(bbox): if not isinstance(bbox, gpd.GeoDataFrame): raise TypeError("bbox must be a geopandas GeoDataFrame.") diff --git a/src/predspot/ml_modelling.py b/src/predspot/ml_modelling.py index ec7e4e1..32c6e6c 100644 --- a/src/predspot/ml_modelling.py +++ b/src/predspot/ml_modelling.py @@ -227,16 +227,19 @@ def evaluate(self, scoring="r2", cv=5): refitted on the original data afterwards. Args: - scoring (str): ``'r2'`` or ``'mse'``. + scoring (str or list): ``'r2'``, ``'mse'`` or a list of them. cv (int): Number of folds (must be lower than the number of periods). Returns: - list: One score per fold. + list or pandas.DataFrame: One score per fold; with a list of + scorings, a DataFrame with one column per scoring and one row + per fold. """ self._check_fitted() - if scoring not in SCORERS: + scorings = [scoring] if isinstance(scoring, str) else list(scoring) + unknown = [s for s in scorings if s not in SCORERS] + if unknown or not scorings: raise ValueError('invalid scoring. Try "r2" or "mse".') - scorer = SCORERS[scoring] timestamps = ( self._X.index.get_level_values("t") .unique() @@ -245,7 +248,7 @@ def evaluate(self, scoring="r2", cv=5): ) if not isinstance(cv, int) or cv >= len(timestamps): raise ValueError("cv must be an integer lower than the number of periods.") - scores = [] + scores = {name: [] for name in scorings} for train_t, test_t in TimeSeriesSplit(cv).split(timestamps): X_train = self._X.loc[idx[timestamps[train_t], :], :].sample( frac=1, random_state=self.random_state @@ -255,7 +258,10 @@ def evaluate(self, scoring="r2", cv=5): y_test = self._stseries.loc[X_test.index] self.estimator.fit(X_train, y_train) y_pred = self.estimator.predict(X_test) - scores.append(scorer(y_test, y_pred)) - logger.debug("%s-fold CV %s scores: %s", cv, scoring, scores) + for name in scorings: + scores[name].append(SCORERS[name](y_test, y_pred)) + logger.debug("%s-fold CV scores: %s", cv, scores) self.fit(self._dataset) # back to normal - return scores + if isinstance(scoring, str): + return scores[scoring] + return pd.DataFrame(scores, index=[f"fold {i + 1}" for i in range(cv)]) diff --git a/tests/test_load_study_area.py b/tests/test_load_study_area.py index 70efc14..92b7640 100644 --- a/tests/test_load_study_area.py +++ b/tests/test_load_study_area.py @@ -6,7 +6,7 @@ import pytest from shapely.geometry import Point, box -from predspot.crime_mapping import load_study_area +from predspot.crime_mapping import get_city_shape, load_study_area def _fake_osmnx(monkeypatch, geometry): @@ -70,3 +70,17 @@ def test_load_study_area_network(): assert len(area) == 1 assert area.geometry.iloc[0].geom_type in ("Polygon", "MultiPolygon") assert area.geometry.iloc[0].contains(Point(-35.2094, -5.7945)) # city centre + + +def test_get_city_shape_returns_raw_geocode(monkeypatch): + calls = _fake_osmnx(monkeypatch, box(-35.3, -5.9, -35.2, -5.8)) + city = get_city_shape("Natal, RN, Brazil") + assert calls["query"] == "Natal, RN, Brazil" + assert city.geometry.iloc[0].geom_type == "Polygon" + assert "place_rank" in city.columns # raw Nominatim columns are kept + + +def test_get_city_shape_without_osmnx(monkeypatch): + monkeypatch.setitem(sys.modules, "osmnx", None) + with pytest.raises(ImportError, match="predspot\\[osm\\]"): + get_city_shape("Natal, RN, Brazil") diff --git a/tests/test_ml_modelling.py b/tests/test_ml_modelling.py index 0a1479f..d6cac36 100644 --- a/tests/test_ml_modelling.py +++ b/tests/test_ml_modelling.py @@ -73,8 +73,12 @@ def test_evaluate(dataset, study_area): assert len(scores) == 3 mse = pipe.evaluate("mse", cv=3) assert all(s >= 0 for s in mse) + both = pipe.evaluate(["r2", "mse"], cv=3) + assert list(both.columns) == ["r2", "mse"] and len(both) == 3 with pytest.raises(ValueError): pipe.evaluate("mae") + with pytest.raises(ValueError): + pipe.evaluate([]) with pytest.raises(ValueError): pipe.evaluate("r2", cv=100) # evaluate refits on the full data: predictions still work afterwards

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 f|7lv!uK&WmHA((b)m{AimgZi2v` literal 0 HcmV?d00001 diff --git a/docs/assets/thesis/fig11-ml-modelling.png b/docs/assets/thesis/fig11-ml-modelling.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c1f9c5f1e84fbdef3af79d482ffad20bde97bb GIT binary patch literal 39625 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 V-g=U_Kz#G_XRi>F&)jW}1o`{RU!m`4tuw|m|M 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 literal 0 HcmV?d00001 diff --git a/docs/examples/natal.ipynb b/docs/examples/natal.ipynb new file mode 120000 index 0000000..a40a4d7 --- /dev/null +++ b/docs/examples/natal.ipynb @@ -0,0 +1 @@ +../../examples/natal.ipynb \ No newline at end of file diff --git a/docs/guide/modelling.md b/docs/guide/modelling.md index 639be8f..c3fa9c3 100644 --- a/docs/guide/modelling.md +++ b/docs/guide/modelling.md @@ -32,7 +32,7 @@ estimator sees them as independent samples. ## Evaluating ```python -pipeline.evaluate("r2", cv=5) # or "mse" +pipeline.evaluate("r2", cv=5) # or "mse", or ["r2", "mse"] for a DataFrame ``` Periods are ordered and split with scikit-learn's `TimeSeriesSplit`, so each diff --git a/docs/hooks/readme.py b/docs/hooks/readme.py new file mode 100644 index 0000000..516e311 --- /dev/null +++ b/docs/hooks/readme.py @@ -0,0 +1,31 @@ +"""MkDocs hook: the documentation home page is the repository README. + +The README is written for GitHub (paths relative to the repository root); this +hook rewrites those paths so the same content renders on the site. +""" + +import re +from pathlib import Path + +README = Path(__file__).resolve().parents[2] / "README.md" + +REPO_BLOB = "https://github.com/adaj/predspot/blob/master/" +LINKS = { + REPO_BLOB + "CONTRIBUTING.md": "contributing.md", + REPO_BLOB + "CHANGELOG.md": "changelog.md", + REPO_BLOB + "examples/natal.ipynb": "examples/natal.ipynb", + "https://adaj.github.io/predspot/": "index.md", +} + + +def on_page_markdown(markdown, page, config, files): + if page.file.src_path != "index.md": + return markdown + text = README.read_text(encoding="utf-8") + text = text.replace('src="docs/assets/', 'src="assets/') + text = text.replace("](docs/assets/", "](assets/") + for url, target in LINKS.items(): + text = text.replace(f"]({url})", f"]({target})") + # Keep the page's own front matter (title etc.), if any. + front = re.match(r"^---\n.*?\n---\n", markdown, flags=re.S) + return (front.group(0) if front else "") + text diff --git a/docs/index.md b/docs/index.md index d9ba291..c4f5189 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,60 +1,4 @@ -# Predspot - -**Predicting crime hotspots with machine learning.** - -Predspot is a Python library for spatio-temporal crime prediction. It turns a -table of georeferenced, timestamped crime events into a grid of *places* and a -sequence of *periods*, builds time series features for every place and trains a -scikit-learn model to forecast where the next period's hotspots will be. - -