CrimeMap.nz
// Methodology

How It Works

Spatiotemporal deep learning on 1.33 million NZ Police records. Predicting where crime will happen next — at 500m resolution.

Ingest
1.33M
NZ Police records
Grid
4,543
500m cells (Auckland)
Train
376K
ConvLSTM params
Predict
32
months forecast
// Data Source
1,221,410
crime records
42,965
meshblocks
6
crime types

NZ Police victimisation data (Feb 2022 – Apr 2026). Cleaned from UTF-16 CSV, joined to Stats NZ 2017 Area Unit and 2018 Meshblock geographic boundaries (99.4% and 81.3% join rates respectively).

// Spatial Grid
// auckland_grid.py
grid_size = 500 # metres
rows = 77 # 38.5km
cols = 59 # 29.5km
cells = 4,543 # active
projection = NZTM2000
tensor = np.zeros((
51, # months
77, # rows
59, # cols
6 # crime types
))

A 500m x 500m regular grid overlaid on the Auckland urban area. Crime counts are allocated to cells via meshblock centroids, producing a dense spatiotemporal tensor for the models.

77 x 59
grid dimensions
4,543
active cells
51
months data
// Models

ConvLSTM

PRIMARY
Architecture
3-layer LSTM
32, 64, 32 channels
Parameters
376K
6-month lookback

Trained with MSE on log1p-transformed counts. Powers the live forecasts.

RMSE: 1.030

ST-ResNet

SECONDARY
Architecture
2-branch ResNet
Closeness + Period
Parameters
614K
4 res units/branch

Closeness (last 3 months) + Period (same month last 3 years).

RMSE: 1.000
// Results
ModelRMSETheftBurglaryAssault
Last Month (baseline)0.9572.070.800.67
Historical Average1.2953.050.660.52
ConvLSTM1.0302.340.650.64
ST-ResNet1.0002.260.660.61
// Limitations

Auckland-only grid — other cities use TA-level aggregation

Monthly granularity — finer temporal resolution could capture day/hour patterns

No external features (weather, events, demographics) included

// Ethics & Responsible Use

Crime forecasting deserves scepticism. The research literature documents real harms from “predictive policing” — feedback loops where patrolling a flagged area generates more recorded crime there, which then reinforces the model (Lum & Isaac, To predict and serve?, 2016; Ensign et al., Runaway Feedback Loops in Predictive Policing, 2018). This project is deliberately scoped to stay clear of that.

// Area-level, not person-level

It forecasts counts for 500m grid cells. It never identifies, profiles, or predicts individuals.

// Not a policing tool

A public civic-data project. It is not built for, supplied to, or used by Police to direct patrols or target anyone.

// On the feedback loop

It learns from victimisation reports (crime people say happened to them), not arrest or patrol data, and it drives no enforcement — so it can’t create a patrol-then-confirm loop.

// Patterns, not certainty

Read it as broad clusters and trends with genuine uncertainty, not a promise about any street. Accuracy degrades the further ahead it forecasts.

// Privacy by aggregation

Built only on data NZ Police already publish openly (meshblock level, CC BY 4.0), then aggregated up to 500m cells and suburbs. It exposes nothing finer than the source and respects Police suppression of sensitive low-count locations.

// Recorded ≠ all crime

Recorded victimisation undercounts unreported crime and reflects reporting behaviour, which varies by area and offence type. The model inherits those biases.