Crime, Police, and the Megaoperação Contenção in Rio de Janeiro
1. Context
On October 28, 2025, approximately 2,500 officers from the Civil and Military Police of Rio de Janeiro entered the Complexo do Alemão and Complexo da Penha, a favela complex in the north zone of Rio de Janeiro, in what became known as the Megaoperação Contenção. The official objective was to contain the territorial expansion of Comando Vermelho (CV, one of the biggest criminal organizations in the country) and to execute some 100 arrest warrants and 180 search and seizure warrants. By the end of the operation, over 130 people had been killed and 100 arrests, as well as 118 weapons seized, making it the deadliest police operation in the history of the state of Rio de Janeiro.
After the operation, the debate regarding the efficacy of police force as a mean to fight organized crime and ensure public safety in contested zones gained a lot of the highlights. Some defend that the police is ineffective and the killings are a prove of the lack of preparadness from the police. Others state that this action will discourage individuals to join factions due to the risk it poses to their life. Other arguments are presented from both sides, heating the dabate. The problem with the discussion is that it is mostly based on the recall of case studies, narratives, sequence of "logical" connections and sometimes data that show or not correlations favoured to an argument. As I see it, this creates a fundamental problem of communication between both sides of the discussion, specially when the topic quickly becomes polarized and defending or critizing the operation becomes a signal to being a "leftist" or "rightist".
This post aims to a first attempt at studying the relationship between police enforcement and violent crime in this contested territory using longitudinal data and a simple dynamical systems model to lay down a formalization of some hypothesis raised by the arguments in the discussion. The goal is not to produce a definitive causal analysis (that would require a more careful identification strategy and a richer model) but to establish some basic empirical patterns and to test whether a few assumptions that supposedly dominate this relationship are enough to explain the observed data. This is exploratory and preliminary work; a more rigorous version of the analysis is under development.
2. Data
Fogo Cruzado
The primary spatial data source is the Instituto Fogo Cruzado, which records georeferenced shooting incidents across the metropolitan region of Rio de Janeiro, derived from Disque Denúncia tip data. Each occurrence is classified as involving victims (dead or wounded) or not, with further breakdowns by civilian/police status, age category, and whether the incident took place during a police action. I use data covering 2022–2024 for the spatial analysis.
year_start = 2022
year_final = 2024
n_years = year_final - year_start + 1
for year in range(year_start, year_final + 1):
df_v = pd.read_csv(f'fc_api_occurrences_with_victims_{year}.csv')
df_nv = pd.read_csv(f'fc_api_occurrences__{year}.csv')
# concatenate with other-region files and accumulate
Victim counts aggregate civilians, police officers, children, teenagers, and the elderly across dead and wounded categories. All annual figures reported below are averages over the three-year period to smooth out year-specific variation.
ISP-RJ
For the time series analysis I use the monthly historical series from the Instituto de Segurança Pública do Rio de Janeiro (ISP-RJ), which reports crime statistics disaggregated by delegacia (CISP) and integrated security area (AISP) from January 2003 onward. The primary outcome variable is Crimes Violentos Letais Intencionais (CVLI), encompassing intentional homicide, robbery followed by death, and grievous bodily harm resulting in death. The enforcement intensity variable, which I call ações policiais (AMP), is the sum of monthly drug search-and-seizure warrants (cmp) and arrest warrant executions (cmba). This counts active enforcement events, not passive police presence.
df_cisp = pd.read_csv('BaseDPEvolucaoMensalCisp.csv', sep=';', encoding='iso-8859-1')
north_zone_aisps = [17, 16, 6, 4, 3, 9, 41, 22]
for y in range(begin_year, end_year + 1):
for aisp in north_zone_aisps:
filtered = df_cisp.loc[(df_cisp['aisp'] == aisp) & (df_cisp['ano'] == y)]
zones_cvlis[i, y - begin_year] += filtered['cvli'].sum()
zones_amp[i, y - begin_year] += filtered['cmp'].sum() + filtered['cmba'].sum()
Population estimates for each AISP are constructed from IBGE Census data (2000, 2010, 2022) with inter-censal values interpolated linearly. Per-capita rates are expressed per 100,000 inhabitants per year unless noted.
3. Spatial Analysis of Shooting Incidents
For each AISP in the metropolitan sample, I count the annual average number of victim-involving occurrences and total victims (dead plus wounded) over 2022–2024, then normalize by AISP population from the 2022 Census.
Favelas vs. non-favelas within the same AISPs
I use the IBGE 2022 Census shapefile of Favelas e Comunidades Urbanas (FCU) to classify each Fogo Cruzado occurrence as falling inside or outside favela boundaries, with a small buffer (approximately 55 meters) around the FCU polygons to account for geolocation error.
favelas_rio = gpd.read_file('./Favelas_Comunidades_Urbanas_Censo2022/qg_2022_670_fcu_agregPolygon.shp')
for i in range(len(favelas_rio)):
for j in range(len(df_v)):
if favelas_rio.iloc[i].geometry.buffer(0.0005).contains(
Point(df_v['longitude'][j], df_v['latitude'][j])
):
victim_occurrences += 1
4. Time Series: CVLI and Police Actions in AISP 16
I now focus on AISP 16, which covers the Complexo do Alemão and Complexo da Penha. The time series covers January 2006 through December 2025. To reduce monthly noise, I fit a Generalized Additive Model (GAM) with a single spline term to each series.
from pygam import LinearGAM, s
gam_cvli = LinearGAM(s(0)).fit(x_new, 1e5 * alemao_cvlis_percapita)
gam_amp = LinearGAM(s(0)).fit(x_new, alemao_amp)
The CVLI death rate fell sharply following the UPP occupation in 2010–2012 and remained low through roughly 2014–2015, then rose steadily as the UPP entered a period of fiscal constraint and operational contraction. Police action intensity does not track this pattern: it remains elevated throughout the post-pacification period without a corresponding reduction in CVLI. The Pearson correlation between the monthly smoothed series is not statistically significant ($r \approx 0.2$, $p > 0.05$). This absence of a simple negative correlation is the first empirical motivation for a mechanistic model.
5. A Simple Dynamical Model
Basic formulation
I start from a predator-prey-style system, which is commonly used to model relationships between police and criminals (see Sooknanan, J., Bhatt, B., & Comissiong, D. M. G. 2016), where $H(t)$ is the CVLI death rate and $P(t)$ is the police enforcement intensity:
Here $\delta$ is police effectiveness, $\alpha$ is the sensitivity of deployment to rising crime, $\tau$ is the response delay, and $\gamma$ is the intrinsic crime growth rate in the absence of enforcement. Rather than solving the full coupled system, I use the observed (GAM-smoothed) police action series directly as the input $P(t)$ and integrate only the $H(t)$ equation forward.
P = gam_amp.predict(x_new)
H = np.zeros(len(x_new) + 1)
H[0] = gam_cvli.predict(x_new)[0]
dt = x_new[1] - x_new[0]
pars = {'gamma': 0.4, 'delta': 0.028, 'Hmax': 200, 'tau': 1}
for idx, t in enumerate(x_new):
Hd = H[idx - pars['tau']] if idx >= pars['tau'] else 0
dHdt = pars['gamma'] * H[idx] * (1 - H[idx] / pars['Hmax']) \
- pars['delta'] * P[idx] * H[idx]
H[idx + 1] = H[idx] + dHdt * dt
Time-varying parameters
The empirical series shows a structural shift around 2012–2014 that a constant-coefficient model cannot reproduce. Two mechanisms can account for this: an increase in the intrinsic crime growth rate $\gamma$ as criminal organizations adapted to UPP presence, and a decline in police effectiveness $\delta$ as institutional legitimacy eroded. I model both as sigmoidal transitions centred at $t_c \approx 2012$:
Three scenarios
| Scenario | $\gamma$ | $\delta$ | Description |
|---|---|---|---|
| 1 | constant | constant | Baseline homogeneous model |
| 2 | $\gamma(t)$ | constant | Adaptive criminal growth only |
| 3 | $\gamma(t)$ | $\delta(t)$ | Adaptive growth + declining effectiveness |
Only once we allow for a structural decline in enforcement effectiveness — a declining $\delta(t)$ — does the model begin to approximate the observed trajectory. Formal calibration via nonlinear least squares and sensitivity analysis remain to be done.
6. Discussion
Several patterns emerge consistently across the spatial, time-series, and modeling components of the analysis.
Shooting violence in Rio de Janeiro is highly concentrated in favela territory. The median annual victim rate per 100,000 inhabitants inside favelas is roughly an order of magnitude higher than in non-favela areas within the same AISPs, across the full distribution of communities.
The relationship between police enforcement intensity and lethal crime in AISP 16 is not well described by simple deterrence logic. The sharp CVLI reduction following the 2010–2012 occupation was not maintained despite continued enforcement activity in subsequent years, consistent with the findings of Bellégo and Drouard (2024) at the UPP programme level.
The dynamical model provides a candidate mechanism. If police effectiveness $\delta$ declines over time as institutional legitimacy erodes, then constant or increasing enforcement intensity will produce rising crime outcomes after a threshold. The October 2025 Megaoperação Contenção fits naturally into this framework: by the time of the operation, the institutional legitimacy of the state in the Complexo do Alemão/Penha had been depleted by years of abusive enforcement and the effective collapse of the UPP community policing model. A massive enforcement operation in a low-legitimacy environment should produce a large transient spike in police-involved incidents without generating sustained reductions in community violence — because the mechanism through which enforcement reduces crime (community cooperation, information sharing, and the social embedding of formal authority) is absent. The Fogo Cruzado data in the months following the operation are consistent with this prediction.
The next steps are to extend the model to include a third state variable for institutional legitimacy, implement formal nonlinear least squares calibration, incorporate Disque Denúncia data as a reporting-correction mechanism and legitimacy proxy, and extend the comparative analysis to Rocinha to exploit the cross-territory variation that motivates the comparative case design.
Data sources
| Source | Data | Access |
|---|---|---|
| Instituto Fogo Cruzado | Georeferenced shooting incidents with victim counts, 2022–2024 | api.fogocruzado.org.br |
| ISP-RJ | Monthly CVLI, robbery, and police action statistics by CISP/AISP, 2003–2025 | ispdados.rj.gov.br |
| IBGE Censo Demográfico 2022 | Population by neighborhood; FCU shapefile | censo2022.ibge.gov.br |
| SISPOL/PMERJ | AISP and CISP boundary shapefiles (July 2024) | Via ISP-RJ |
| geobr | Rio de Janeiro municipality and state geometries | github.com/ipeaGIT/geobr |