Quando as pessoas pensam em análise de segurança no trânsito, muitas vezes começam pelos locais dos acidentes.
- Onde ocorreram os acidentes?
- Quais cruzamentos têm o maior número de acidentes?
- Onde estão os pontos críticos atuais?
Essas são perguntas úteis. Mas nem sempre são as mais importantes. Durante nossa sessão técnica "Ciência de Dados Espaciais no ArcGIS", exploramos uma pergunta diferente:
Quais locais apresentam risco persistente ao longo do tempo?
Em vez de analisar acidentes de trânsito individualmente, usamos dados históricos de acidentes de Frankfurt am Main, de 2019 a 2024, para identificar padrões espaciais que permaneceram estáveis ao longo de vários anos. O objetivo não era explicar um único incidente. O objetivo era entender se alguns locais apresentam consistentemente risco elevado, independentemente das flutuações de curto prazo.
%load_ext dotenv
%dotenv
from arcgis.gis import GIS
from arcgis.map import Map
import dotenv
import os
import pandas as pd
from traffic_safety.utils import combine_yearly_hotspots, list_feature_classes, summarize_hotspot_bins, generate_hotspots_renderer, filter_hotspot_bins, publish_hotspot_layer
home_portal = GIS("home")
gdb_path = os.getenv("HOTSPOT_GDB")
feature_classes = list_feature_classes(gdb_path)
Indo além dos pontos críticos individuais
Uma análise de pontos críticos feita para um único ano oferece um retrato momentâneo. No entanto, as cidades são sistemas dinâmicos. O volume de tráfego muda. Obras começam e terminam. O transporte público evolui. O comportamento humano muda com o tempo. Um ponto crítico identificado em um ano pode desaparecer no seguinte. Para entender melhor os riscos de longo prazo, realizamos análises anuais de pontos críticos Getis-Ord Gi* e, em seguida, comparamos os resultados ao longo do tempo.
O desafio é que os polígonos dos pontos críticos não são idênticos de um ano para outro. Seus limites mudam conforme as condições subjacentes se alteram. Para lidar com isso, criamos um fluxo de trabalho de alinhamento espacial:
- Executar a análise anual de pontos críticos
- Calcular os centroides das áreas dos pontos críticos
- Usar uma estrutura de referência espacial comum
- Correspondência dos locais dos pontos críticos entre os anos
- Criar um perfil temporal para cada local
- Calcular pontuações de persistência dos pontos críticos
- Normalizar os resultados em um índice de risco
Isso transformou várias análises independentes em uma única superfície de risco fácil de interpretar.
from ipywidgets import HBox, VBox, Label, Layout
from traffic_safety.utils import generate_hotspots_renderer, read_feature_classes
def show_hotspot_map(portal: GIS, df: pd.DataFrame):
basemap_item_id = os.getenv("CUSTOM_BASEMAP_ITEM_ID")
if basemap_item_id:
portal_item = portal.content.get(basemap_item_id)
map_view = Map(portal_item)
else:
map_view = portal.map("Alemanha")
map_view.basemap.basemap = "osm"
drawing_info = {
"renderer": generate_hotspots_renderer()
}
fset = df.spatial.to_featureset()
map_view.content.add(fset, drawing_info=drawing_info, options={"opacity": 0.7})
map_view.zoom_to_layer(fset)
return map_view
hotspots_dict = read_feature_classes(gdb_path, [feature_classes[0], feature_classes[-1]])
hotspots_2019_df, hotspots_2025_df = hotspots_dict.values()
left_map = show_hotspot_map(home_portal, hotspots_2019_df)
right_map = show_hotspot_map(home_portal, hotspots_2025_df)
def side_by_side(left_map, left_label, right_map, right_label):
# sincronizar a navegação dos mapas
#left_map.sync_navigation(right_map)
"""
def sync_navigation(change):
if right_map.center != left_map.center:
right_map.center = left_map.center
if right_map.zoom != left_map.zoom:
right_map.zoom = left_map.zoom
left_map.observe(sync_navigation, names=["center", "zoom"])
"""
# Criar VBox para cada mapa e rótulo
box1 = VBox([Label(left_label), left_map], layout=Layout(width='50%'))
box2 = VBox([Label(right_label), right_map], layout=Layout(width='50%'))
# Colocar as VBox lado a lado usando uma HBox
hbox = HBox([box1, box2])
# Exibir a HBox
display(hbox)
side_by_side(left_map, "2019", right_map, "2025")
left_map.sync_navigation(right_map)
Dos dados de acidentes a uma camada de risco
A camada resultante não representava a contagem de acidentes. Representava algo possivelmente mais valioso: evidências de risco persistente.
Os locais que apareciam repetidamente como pontos críticos estatisticamente significativos recebiam pontuações de persistência mais altas. Os locais que ocasionalmente apresentavam esse comportamento recebiam pontuações mais baixas. Essa distinção é importante. Um único acidente grave pode chamar a atenção, mas padrões espaciais recorrentes muitas vezes revelam características mais profundas do sistema de transporte. O risco persistente pode indicar limitações de infraestrutura, padrões de comportamento no trânsito, polos de mobilidade ou outros fatores subjacentes que merecem investigação.
base_feature_class = feature_classes[0]
combined_df: pd.DataFrame = combine_yearly_hotspots(gdb_path, base_feature_class)
summarized_df: pd.DataFrame = summarize_hotspot_bins(combined_df, min_years_observed=len(feature_classes))
show_hotspot_map(home_portal, combined_df)
hottest_df = filter_hotspot_bins(summarized_df, min_value=2, max_value=3)
hottest_df.sort_values(by="Gi_Bin_median", ascending=False).head()
O que aprendemos
Uma das observações mais interessantes foi que alguns dos locais de maior risco não eram necessariamente aqueles com maior volume de tráfego. Em vez disso, o risco muitas vezes surgia da interação entre vários fatores. Em trabalhos relacionados ao Gêmeo Digital Urbano de Frankfurt, descobrimos que locais relevantes para a operação frequentemente se destacavam quando diversos indicadores reforçavam uns aos outros. Os padrões históricos de acidentes, as simulações de tráfego, o contexto da infraestrutura e o comportamento de mobilidade, em conjunto, criaram um panorama mais completo do que qualquer conjunto de dados isolado poderia oferecer.
Isso destaca um dos pontos fortes da ciência de dados espaciais: A localização oferece contexto. As relações espaciais muitas vezes revelam padrões que permanecem invisíveis quando os conjuntos de dados são analisados separadamente.
Por que isso importa
Muitas organizações enfrentam desafios semelhantes. Seja na segurança no transporte, na infraestrutura de serviços públicos, no monitoramento ambiental, na saúde pública ou na gestão de ativos, os tomadores de decisão muitas vezes precisam distinguir anomalias temporárias de padrões persistentes. A Ciência de Dados Espaciais ajuda a responder perguntas como:
- Quais locais apresentam risco elevado de forma consistente?
- Quais padrões permanecem estáveis ao longo do tempo?
- Quais áreas merecem investigação adicional?
- Onde os recursos limitados devem ser priorizados?
Essas perguntas são cada vez mais importantes à medida que as organizações buscam passar da análise descritiva para o apoio à decisão baseado em evidências.
A Ciência de Dados Espaciais como base
Para nós, a camada de risco se tornou mais do que um resultado analítico. Ela passou a ser a base para as próximas etapas da demonstração de Frankfurt. O fluxo de trabalho seguiu uma progressão simples:
- Ciência de Dados Espaciais identifica riscos persistentes.
- IA Agêntica com Fundamentação Espacial usa essas evidências para gerar recomendações explicáveis.
- GeoAI Confiável introduz governança e supervisão humana antes que qualquer ação seja tomada.
Essa progressão reflete um princípio importante: a IA não substitui as evidências. A IA se torna mais útil quando pode raciocinar com base em evidências confiáveis produzidas por meio de análises espaciais.
Considerações finais
Uma das principais mensagens da sessão foi simples:
Não estamos identificando onde os acidentes aconteceram. Estamos identificando onde o risco persiste.
Padrões espaciais persistentes fornecem as evidências necessárias para recomendações explicáveis, sistemas de IA confiáveis e, em última análise, decisões melhores. À medida que as organizações exploram a Ciência de Dados Espaciais, a GeoAI e a IA Agêntica, o desafio muitas vezes não é coletar mais dados. O desafio é identificar os padrões que importam. E, em muitos casos, esses padrões são espaciais.
Caderno de segurança no trânsito @Github