Lorsqu’on pense à l’analyse de la sécurité routière, on commence souvent par les lieux des accidents.
- Où les accidents ont-ils eu lieu ?
- Quels carrefours enregistrent le plus d’accidents ?
- Où se trouvent les points chauds actuels ?
Ce sont des questions utiles. Mais elles ne sont pas toujours les plus importantes. Lors de notre session technique « La science des données spatiales dans ArcGIS », nous avons exploré une autre question :
Quels lieux présentent un risque persistant au fil du temps ?
Au lieu d’analyser les accidents de la route individuellement, nous avons utilisé les données historiques sur les accidents à Francfort-sur-le-Main, de 2019 à 2024, pour repérer les tendances spatiales qui se maintenaient d’une année à l’autre. L’objectif n’était pas d’expliquer un incident isolé, mais de déterminer si certains lieux présentent systématiquement un risque élevé, indépendamment des fluctuations à court terme.
%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)
Au-delà des points chauds individuels
Une analyse des points chauds réalisée sur une seule année fournit un instantané. Pourtant, les villes sont des systèmes dynamiques. Les volumes de circulation changent. Des travaux de construction commencent et se terminent. Les transports en commun évoluent. Les comportements humains changent au fil du temps. Un point chaud repéré une année peut disparaître l’année suivante. Pour mieux comprendre les risques à long terme, nous avons effectué chaque année une analyse des points chauds Getis-Ord Gi*, puis comparé les résultats dans le temps.
Le problème, c’est que les polygones des points chauds ne sont pas identiques d’une année à l’autre. Leurs limites se déplacent au gré des changements des conditions sous-jacentes. Pour y remédier, nous avons créé un processus d’alignement spatial :
- Effectuer une analyse annuelle des points chauds
- Calculer les centroïdes des cellules des points chauds
- Utiliser un système de référence spatiale commun
- Apparier les lieux des points chauds d’une année à l’autre
- Établir un profil temporel pour chaque lieu
- Calculer les scores de persistance des points chauds
- Normaliser les résultats pour obtenir un indice de risque
Cette démarche a transformé plusieurs analyses indépendantes en une seule surface de risque facile à interpréter.
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("Germany")
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):
# synchroniser la navigation des cartes
#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"])
"""
# Créer des VBox pour chaque carte et son libellé
box1 = VBox([Label(left_label), left_map], layout=Layout(width='50%'))
box2 = VBox([Label(right_label), right_map], layout=Layout(width='50%'))
# Placer les VBox côte à côte à l’aide d’une HBox
hbox = HBox([box1, box2])
# Afficher la HBox
display(hbox)
side_by_side(left_map, "2019", right_map, "2025")
left_map.sync_navigation(right_map)
Des données sur les accidents à une couche de risque
La couche obtenue ne représentait pas le nombre d’accidents. Elle représentait quelque chose de potentiellement plus précieux : des signes de risque persistant.
Les lieux qui apparaissaient régulièrement comme des points chauds statistiquement significatifs obtenaient des scores de persistance plus élevés. Ceux qui n’étaient que parfois des points chauds obtenaient des scores plus faibles. Cette distinction est importante. Un accident grave isolé peut attirer l’attention, mais les tendances spatiales récurrentes révèlent souvent des caractéristiques plus profondes du système de transport. Un risque persistant peut signaler des contraintes liées aux infrastructures, des comportements de circulation, des pôles de mobilité ou d’autres facteurs sous-jacents qui méritent d’être étudiés.
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()
Ce que nous avons appris
L’une des observations les plus intéressantes était que certains des lieux présentant les risques les plus élevés n’étaient pas nécessairement ceux où le trafic était le plus dense. Le risque résultait souvent de l’interaction de plusieurs facteurs. Dans le cadre de travaux connexes menés autour du jumeau numérique urbain de Francfort, nous avons constaté que des lieux importants sur le plan opérationnel se dessinaient souvent lorsque plusieurs indicateurs se renforçaient mutuellement. Les tendances historiques des accidents, les simulations de circulation, le contexte des infrastructures et les comportements en matière de mobilité, pris ensemble, dressaient un tableau plus riche que n’importe quel jeu de données à lui seul.
Cela met en lumière l’un des atouts de la science des données spatiales : La localisation apporte du contexte. Les relations spatiales révèlent souvent des tendances invisibles lorsque les jeux de données sont analysés séparément.
Pourquoi est-ce important ?
De nombreuses organisations font face à des enjeux similaires. Qu’il s’agisse de sécurité des transports, d’infrastructures de services publics, de surveillance environnementale, de santé publique ou de gestion des actifs, les décideurs doivent souvent faire la distinction entre des anomalies temporaires et des tendances persistantes. La science des données spatiales aide à répondre à des questions telles que :
- Quels lieux présentent systématiquement un risque élevé ?
- Quelles tendances restent stables au fil du temps ?
- Quelles zones méritent d’être étudiées plus en détail ?
- Où faut-il affecter en priorité les ressources limitées ?
Ces questions prennent de plus en plus d’importance, à mesure que les organisations cherchent à passer de l’analyse descriptive à une prise de décision fondée sur des données probantes.
La science des données spatiales comme fondement
Pour nous, la couche de risque est devenue bien plus qu’un résultat analytique. Elle a servi de fondement aux étapes suivantes de la présentation de Francfort. Le processus a suivi une progression simple :
- Science des données spatiales repère les risques persistants.
- IA agentique ancrée dans le contexte spatial s’appuie sur ces éléments pour formuler des recommandations explicables.
- GéoIA fiable intègre la gouvernance et la supervision humaine avant toute action.
Cette progression illustre un principe important : l’IA ne remplace pas les preuves. Elle gagne en utilité lorsqu’elle peut raisonner à partir d’éléments fiables issus de l’analyse spatiale.
Réflexions finales
L’un des principaux messages de la session était simple :
Nous ne cherchons pas à déterminer où les accidents ont eu lieu. Nous repérons les lieux où le risque persiste.
Les tendances spatiales persistantes fournissent les éléments nécessaires à des recommandations explicables, à des systèmes d’IA fiables et, au bout du compte, à de meilleures décisions. Alors que les organisations explorent la science des données spatiales, la GéoIA et l’IA agentique, le défi ne consiste souvent pas à collecter davantage de données, mais à repérer les tendances qui comptent. Et, dans bien des cas, ces tendances sont spatiales.
Carnet sur la sécurité routière @Github