Reprise de l'ancien projet spatial¶
Cette page audite la reprise des éléments des notebooks historiques Notebooks/
dans le pipeline local parking_search_prediction.
Synthèse¶
Les éléments centraux de l'approche spatiale sont repris : préparation des legs, filtres qualité, sélection des déplacements voiture-marche vers Genève, sélection de la dernière leg voiture, seuils géométriques, distance dans le buffer, durée interpolée, passage près de l'activité, boucles, tortuosité, distance de marche après stationnement, variables descriptives PL23 et cartes de contrôle.
Les modifications principales sont :
- les notebooks historiques sont transformés en modules Python testables et scripts relançables ;
- PL23 est lu depuis le GPKG
layer_GE, pas depuis le pickle historique complet par défaut ; - l'approche Déclic ajoute une jointure temporelle waypoint-leg et une approche temporelle ReLUT qui n'existaient pas dans l'ancien projet ;
dist_excessest produit par les étapes 25 à 27 via un cachexyt_routinglocal ; les échecs de routage et cas extrêmes restent à contrôler avant validation ;- le filtre géographique Genève est explicite côté PL23, mais reste à décider et implémenter côté Déclic si les legs disponibles dépassent le périmètre institutionnel visé ;
- les cellules H3 historiques de zones tunnel sont réactivées dans les règles d'éligibilité, avec flags d'exclusion exportés ;
- les courbes cumulées, cartes H3 thématiques et graphiques survey généraux sont réintégrés via l'étape 24 ;
- l'analyse communale est prête côté code, mais reste conditionnée à la fourniture d'une couche communale validée.
Conclusion de la passe d'audit : les blocs méthodologiques utiles au protocole spatial de base sont soit repris, soit remplacés par une implémentation plus reproductible, soit explicitement mis en attente. Les seuls blocs qui restent hors pipeline actif sont ceux qui dépendent d'un matching externe, d'une pondération statistique à valider, ou d'une couche géographique supplémentaire.
Matrice de reprise¶
| Élément archive | Statut nouveau pipeline | Commentaire |
|---|---|---|
safe_merge |
Repris conceptuellement | Les merges sont désormais explicites dans les modules, avec colonnes contrôlées. |
Lecture PL23 legs.pkl |
Modifié | L'étape 23 lit 241120_legs.gpkg, couche layer_GE, pour un run plus reproductible et moins coûteux en mémoire. |
Filtres qualité usr_w_constant_bad_signal, low_quality_legs_2, extreme99_length_mode |
Repris | Appliqués si les colonnes existent dans la source. |
Conservation des lignes Track |
Repris | Appliqué dans Déclic et PL23. |
Jointure leg_id → trip_id |
Repris | Via les fichiers map disponibles dans chaque source. |
| Destination dans Genève | Partiel | PL23 utilise leading_activity_in_KT == GE et l'appariement leading_stay_id == leading_activity_id. Côté Déclic, aucun spatial join canton Genève explicite n'est encore appliqué ; ce filtre est classé comme point ouvert méthodologique. |
Modes Walk + Car |
Modifié | Repris, avec ajout explicite de Mode::Ecar. Les autres modes restent exclus par défaut. |
| Durée maximale trip 5h | Repris à l'identique | max_trip_duration_seconds: 18000. |
| Dernière leg voiture du déplacement | Repris | La sélection est faite par ordre temporel intra-trip_id. |
| Durée minimale leg 5 min | Repris à l'identique | min_leg_duration_seconds: 300. |
| Longueur minimale leg 500 m | Repris à l'identique | min_leg_length_m: 500. |
| Vitesse 1-150 km/h | Repris à l'identique | min_speed_kmh: 1, max_speed_kmh: 150. |
| Distance origine-destination minimale 75 m | Repris à l'identique | min_origin_destination_distance_m: 75. |
| Distance stationnement-activité maximale 2000 m | Repris à l'identique | max_parking_activity_distance_m: 2000. |
| Buffer destination 1000 m | Repris à l'identique | destination_buffer_m: 1000. |
| Distance suspecte dans buffer 2500 m | Repris à l'identique | suspicious_dist_buffer_m: 2500. |
| Passage près de l'activité, rayon 25 m, exclusion finale 150 m | Repris à l'identique | activity_location_radius_m: 25, exclusion_end_segment_m: 150. |
point_entry_buffer |
Repris sous forme WKB | spatial_entry_point_wkb_2056 est écrit et consommé par l'étape 25. |
dist_buffer |
Renommé | spatial_search_distance_m. |
duration_buffer |
Renommé et calcul équivalent | spatial_search_duration_seconds, calculé par fraction de longueur sous hypothèse de vitesse constante. |
| Interpolation temporelle sur LineString 3D | Modifié | Le nouveau pipeline ne stocke pas une géométrie 3D complète ; il calcule les timestamps de début/fin de portion par prorata de longueur. Hypothèse équivalente de vitesse constante. |
suspicious_cruising_activity_location |
Repris | spatial_passes_near_activity_before_end. |
| Distance parking-activité | Repris | parking_activity_distance_m. |
| Distance de marche après voiture | Repris pour PL23 et Déclic | subsequent_walk_distance_m. Côté Déclic, la variable est calculée à partir des legs postérieures à la dernière leg voiture lorsque ces legs sont en marche. |
Boucles geometry.is_simple |
Repris avec prudence | Inclus dans la règle large, exclu de la règle conservatrice. |
| Tortuosité du segment final | Repris | spatial_tortuosity_last_segment, seuil tortuosity_min: 2.0. |
| H3 résolution 8 | Repris pour les exclusions tunnel | h3_resolution: 8 est utilisé pour calculer h3_index_destination. L'EDA territoriale reste en grille métrique EPSG:2056. |
| Exclusion H3 tunnels | Repris avec traçabilité | Les destinations dans les cellules tunnel historiques sont flaggées (spatial_excluded_tunnel_zone, spatial_exclusion_reason) puis exclues de spatial_eligible. |
| Cartes H3 | Repris, sortie consolidée | Les statistiques H3 restent produites en étape 24. La carte active de restitution territoriale est désormais territorial_h3_hotspots.html, pour éviter de multiplier les cartes redondantes. |
| Cartes de legs avec buffer, activité, stationnement, portion détectée | Repris comme diagnostic | Les cartes HTML d'exemples Déclic et PL23 restent régénérables depuis les notebooks dédiés. Elles ne sont plus conservées par défaut dans Output/maps. La relecture prioritaire se fait via relut_full_leg_probability_sample.html et routing_geometry_comparison.html. |
dist_excess Google Maps |
Adapté | Aucun appel API externe par défaut. Les paires de routage sont préparées en étape 25 et peuvent être routées via xyt_routing local en étape 26. |
| Test OSRM public | Remplacé | Remplacé par l'appel à xyt_routing local, avec weighting: distance. |
| Filtre canton Genève Déclic | Non repris | À ajouter si le périmètre Déclic ne doit pas couvrir toutes les legs disponibles dans legs.parquet. |
CO2 181.9 g/km |
Modifié | Nouveau facteur par défaut 111 g/km, avec analyse de sensibilité incluant notamment 180 g/km. |
Pondération wgt_agg_trim_gps |
Partiel | Non utilisée dans les agrégations livrables actuelles ; à ajouter si les résultats PL23 doivent être extrapolés statistiquement. |
| Motif agrégé | Repris pour PL23 | purpose_agg, même regroupement que l'ancien notebook. |
| Jour de semaine | Repris pour PL23 | weekday. |
| Tranche horaire de fin | Repris pour PL23 | time_of_day_end_trip, mêmes bins. |
| Stationnement domicile/travail | Repris pour PL23 | space_home, space_work, dérivés du questionnaire. |
| Zones domicile/travail | Repris pour PL23 | zone_domicile, zone_travail. |
| Classe ARE domicile | Repris pour PL23 | KLASSE_ARE_dom. |
| Tableaux par motif, jour, heure, stationnement | Repris pour PL23 | pl23_spatial_group_summary.csv. |
Exports pickle legs_cruising_to_analyse.pkl |
Remplacé | Exports Parquet/CSV documentés et dictionnaire de variables. |
Checklist détaillée WP1 / WP2 / WP3¶
Cette checklist reprend les blocs observés dans les notebooks archivés
WP1_Data_prep.ipynb et WP2_WP3.ipynb.
| Bloc archive | Statut | Où / décision dans le nouveau pipeline |
|---|---|---|
Lecture legs.pkl, trips.csv, user_statistics.csv, map_track_trip_journey.csv, staypoints.geojson, survey.csv |
Repris avec modification | PL23 est lu par défaut depuis Data/GPS/pl23/20241120_dump_situee/241120_legs.gpkg, couche layer_GE. Les variables déjà jointes à la couche sont réutilisées. Les fichiers CSV historiques restent des sources de référence, mais ne sont plus relus systématiquement si la couche consolidée suffit. |
| Lecture frontières cantonales et communales swisstopo | Partiel | Le filtre Genève PL23 repose sur la couche layer_GE et les champs disponibles. L'analyse communale est implémentée en étape 24, mais reste inactive tant qu'une couche communale validée n'est pas configurée. |
Filtres qualité usr_w_constant_bad_signal, low_quality_legs_2, extreme99_length_mode |
Repris | Les colonnes sont appliquées quand elles existent. Le code reste tolérant aux sources qui ne portent pas exactement les mêmes champs. |
Jointure leg_id / trip_id par safe_merge |
Repris avec modification | Les jointures sont explicites dans les modules Python. safe_merge n'est pas conservé comme fonction centrale, mais son objectif de contrôle des clés est repris. |
| Projection EPSG:2056 | Repris | Les calculs métriques sont faits en EPSG:2056 pour Déclic et PL23. |
| Identification des trips arrivant dans le canton de Genève via staypoints et frontière cantonale | Partiel | Repris côté PL23 par la couche layer_GE et les champs d'activité. Non encore repris côté Déclic : TODO-METH-02. |
| Conservation des trips dont les modes sont voiture et marche uniquement | Repris avec extension | La logique voiture puis marche est conservée. Mode::Ecar est ajouté aux modes voiture. |
| Exclusion des trips de plus de 5 h | Repris | Paramètre max_trip_duration_seconds: 18000. |
Définition valid_legs et legs_study_cruising |
Repris | La dernière leg voiture du trip devient l'unité spatiale de détection. |
| Calcul origine, destination, distance O-D, distance parking-activité | Repris | Variables équivalentes exportées, dont parking_activity_distance_m. |
| Filtres durée, longueur, vitesse, distance parking-activité, distance O-D | Repris | Seuils historiques conservés. |
| Export intermédiaire pour map-matching manuel dans un autre repo | Non repris | L'archive indique que ce map-matching n'a finalement pas été appliqué. Le nouveau pipeline ne dépend pas d'un traitement manuel externe. |
| Filtre qualité map-matching OSRM, ratio trace / trace matchée et seuils de confiance | Mis de côté | Non actif dans le protocole historique final et non reproductible sans chaîne de matching locale. À réévaluer seulement si le futur routeur local fournit aussi un matching contrôlé. |
| H3 destination, résolution 8 | Repris pour exclusion | h3_index_destination est calculé pour appliquer le filtre tunnel. |
| Exclusion des cellules H3 tunnel | Repris | Les 11 cellules historiques sont conservées, avec flags spatial_excluded_tunnel_zone, spatial_exclusion_reason et compteur avant/après exclusion. |
| Vérifications visuelles initiales des legs et destinations | Repris autrement | Cartes Folium d'exemples et figures de distributions/sensibilité remplacent les plots exploratoires dispersés des notebooks archivés. |
Fonction filter_final_legs_trips et cohérence final legs / final trips |
Repris conceptuellement | La cohérence trip/legs est internalisée dans la sélection des legs candidates. Le fichier unique final_legs historique est remplacé par des bases candidates documentées. |
Ajout du poids wgt_agg_trim_gps / Weight |
Partiel | Weight est conservé côté PL23 si disponible. Les résultats livrables actuels ne sont pas pondérés. La pondération reste un point ouvert avant indicateur officiel. |
| Heure de fin du trajet et bins de moment de journée | Repris | time_of_day_end_trip est produit. |
| Jour de semaine | Repris | weekday est produit. |
| Motifs agrégés | Repris | purpose_agg est produit selon le regroupement historique. |
| Variables survey de stationnement domicile/travail | Repris pour PL23 | space_home et space_work sont exportées et utilisées dans les résumés par groupe. Non applicable tel quel à Déclic si les variables questionnaire ne sont pas présentes. |
| Zones domicile/travail et classe ARE | Repris pour PL23 | zone_domicile, zone_travail, KLASSE_ARE_dom sont exportées si disponibles. |
| Graphiques descriptifs survey stationnement général | Repris en étape 24 | geometric_survey_parking_graphs.png, à partir des variables disponibles. |
| Interpolation des timestamps sur LineString 3D | Repris avec modification | Le pipeline ne persiste pas une LineString 3D ; il calcule les heures de début/fin de portion par prorata de longueur, sous la même hypothèse de vitesse constante. |
Export legs_cruising_to_analyse.pkl |
Remplacé | Exports Parquet/CSV et dictionnaires de variables. |
Export shared_values.json avec nb_jours_obs |
Mis de côté | Nécessaire uniquement pour l'extrapolation par personne/jour. À restaurer avec la stratégie de pondération. |
| Création du buffer destination-activité | Repris | Buffer de 1000 m. |
| Extraction du dernier segment dans le buffer | Repris | Portion finale affectée exportée en WKB. |
| Point d'entrée dans le buffer | Repris | spatial_entry_point_wkb_2056, consommé par 25_prepare_routing_candidates.py. |
| Carte d'un déplacement complet et zoom destination | Repris autrement | Cartes HTML d'exemples Déclic et PL23. |
dist_buffer et seuil 2500 m |
Repris avec renommage | spatial_search_distance_m, spatial_candidate_broad / spatial_candidate_conservative. |
Cumplots dist_buffer globaux |
Repris en étape 24 | geometric_cumplots_indicators.png. Les déclinaisons par groupe restent à produire seulement si nécessaires au rapport. |
Tableaux dist_buffer par motif, jour, heure, stationnement |
Repris avec consolidation | pl23_spatial_group_summary.csv et résultats globaux par approche. |
duration_buffer |
Repris avec renommage | spatial_search_duration_seconds, calculé par interpolation linéaire temporelle. |
Cumplots et tableaux duration_buffer |
Repris en étape 24 | Courbes cumulées globales produites ; résumés par groupes disponibles côté PL23. |
| Passage près de l'activité avant la fin | Repris | spatial_passes_near_activity_before_end. |
| Distance parking-activité | Repris | parking_activity_distance_m. |
| Marche après stationnement | Repris | subsequent_walk_distance_m, y compris la logique voiture suivie de marche. |
dist_excess via Google Directions API |
Adapté | Remplacé par un contrat routeur local. Les paires entrée buffer → destination sont préparées ; Google pourra servir d'audit ponctuel si nécessaire. |
| Cache de routes Google, polyline encodée, shortest path décodé | Adapté | Cache Parquet routing_results.parquet prévu avec distance, durée, statut, versions et géométrie GeoJSON optionnelle. |
| Test OSRM public | Remplacé | Remplacé par xyt_routing local pour éviter une dépendance à un service public non contrôlé. |
Seuil suspicious_dist_excess = 200 m |
Préparé | routing.suspicious_dist_excess_m: 200; actif dans 27_apply_routing_dist_excess.py lorsque les résultats routés existent. |
CO2 historique sur dist_excess |
Modifié | Les sorties actuelles convertissent les distances affectées, pas un excès routé. Le facteur par défaut est paramétrable. |
Cartes H3 dist_buffer, marche, legs suspectes |
Repris en étape 24 | Carte H3 thématique et table H3 produites. Les couches fondées sur dist_excess pourront être ajoutées après l'étape 27. |
Sélection et visualisation des legs suspectes dist_excess |
Préparé | La sélection spatial_suspicious_dist_excess sera produite après routage. Les cartes d'exemples restent à étendre avec la géométrie routée. |
| Analyse des legs suspectes par motif, heure, jour | Partiel | Résumés par groupes disponibles côté spatial ; l'analyse spécifique dist_excess > 200 m dépend du cache routé. |
Extrapolation dist_excess par jour-personne puis population arc lémanique |
Mis de côté | Non robuste sans dist_excess, pondération validée et population de référence validée. À traiter avant indicateur officiel. |
| Analyse des profils des personnes suspectes, stationnement, classe ARE, zones | Partiel | Variables conservées et résumés généraux produits. Les profils des seuls cas dist_excess > 200 m seront restaurés lorsque cette Base_3 sera recalculée. |
Annexe boucles geometry.is_simple |
Repris avec prudence | Signal inclus dans la règle large, exclu de la règle conservatrice, documenté comme indicateur de forme non suffisant seul. |
| Annexe tortuosité | Repris | spatial_tortuosity_last_segment, seuil 2.0 configurable. |
| Annexe analyse communale | Implémenté, conditionnel | L'étape 24 produit geometric_commune_summary si une couche communale validée est fournie. |
| Annexe temps dans la dernière zone | Mis de côté | Redondant avec spatial_search_duration_seconds sauf définition territoriale différente à préciser. |
| Annexe vitesse du dernier segment | Mis de côté | Diagnostic possible, mais non utilisé dans les règles de détection. À ajouter seulement si utile pour contrôle qualité ou validation terrain. |
Seuils modifiés ou ajoutés¶
| Paramètre | Archive | Nouveau pipeline | Statut |
|---|---|---|---|
max_duration_trips |
18 000 s | 18 000 s | identique |
min_duration_leg_study_cruising |
300 s | 300 s | identique |
min_length_leg_study_cruising |
500 m | 500 m | identique |
min_speed_leg_study_cruising |
1 km/h | 1 km/h | identique |
max_speed_leg_study_cruising |
150 km/h | 150 km/h | identique |
distance_o_d_min |
75 m | 75 m | identique |
distance_parking_activity_max |
2 000 m | 2 000 m | identique |
buffer |
1 000 m | 1 000 m | identique |
exclusion_end_segment |
150 m | 150 m | identique |
radius_activity_location |
25 m | 25 m | identique |
suspicious_dist_buffer |
2 500 m | 2 500 m | identique |
suspicious_dist_excess |
200 m | 200 m | actif après application du cache routé |
co2_factor_cars |
181.9 g/km | 111 g/km par défaut, sensibilité configurable | modifié |
h3_resolution |
8 | 8 pour le filtre tunnel ; grille métrique 1 km pour l'EDA | partiel |
Conséquences analytiques¶
La règle large du nouveau pipeline est plus explicitement assumée comme règle de repérage sensible. Elle combine distance dans le buffer, passage près de l'activité, boucle et tortuosité. La règle conservatrice permet de relire les résultats sans boucles ni tortuosité.
Les chiffres produits par le nouveau pipeline ne doivent donc pas être présentés
comme une reproduction stricte du résultat PL23 historique tant que le cache
dist_excess_m n'est pas produit. L'exclusion H3 des tunnels est réactivée. Les cartes H3
thématiques, les courbes cumulées et les graphiques survey sont désormais
produits par l'étape 24. L'analyse communale dépend encore d'une couche
communale configurée.
Les points ouverts méthodologiques issus de cette reprise sont décrits dans
methodologie/points-ouverts.md : cache routé dist_excess, filtre géographique
Genève côté Déclic, pondération/extrapolation PL23, couche communale à fournir
si analyse communale, et éventuel matching qualité local.