mobility-team/mobility

Vérifier la cohérence des résultats avec les données du SDES

FlxPo opened this issue · 25 comments

FlxPo commented

Il faudrait vérifier qu'on retombe bien sur des chiffres proches des résultats officiels de l'ENTD 2008 et de l'EMP 2019. On pourrait pour cela échantillonner une population représentative française (avec les données détail du recensement), et calculer des nombres de déplacements, de voyages, et des parts modales.

Pour l'instant, j'ai fait les tests pour les données INSEE et sdes 2018, avec un nombre de voitures donné par l'INSEE ( p_car non encore testé) , et sans avoir recours au remaniement d'Antoine dans les cas où les échantillons sont de taille trop faible.

Voici les résultats par CSP :
image
image
image

et par catégorie de ville (R,B,C,I) :
image
image
image
image
image

Le problème des cas "fantômes" dans l'EMP 2019 est rapidement apparu, et a été un facteur limitant des échantillons pris pour déterminer les variables de sortie ( notamment travel dist/y) . Ainsi , la taille des échantillons varie selon la CSP :
1 : 10 , 2 : 50 , 3 : 250 , 4 : 150 , 6 : 100. 5, 7 et 8 pouvaient sans problème tourner pour une taille d'échantillon à 1000: les résultats ne variaient cependant pas grandement entre 1000 et 100 pour ces CSP, la taille d'échantillon a été baissée à 100.

Ce problème s'est également présenté lorsqu'on sort des valeurs par catégorie de ville. on a ainsi une taille d'échantillon de 50 (I et R) ou 100 (C et B)

Ces tailles d'échantillons rendent les résultats moins fiables. On peut malgré tout dégager certaines tendances sur les catégories avec une taille d'échantillon suffisante .

  • dist/ déplacement :
    Notre modèle est particulièrement proche des données de l'EMP concernant les distances par déplacement, que ceux-ci aient lieu en semaine ou le weekend. Des valeurs aberrantes subsistent cependant pour les catégories R ( taille échantillon 50) et CSP 8 ( taille 100).

  • nombre dépl / jour ( mobilité locale) :
    Excepté pour les catégories de CSP 1 et 2 (échantillons les plus faibles), le nombre de déplacement en semaine est proche des résultats de l'EMP lorsqu'on inclut l'immobilité des personnes. Une variation inférieure à 10% pour chaque catégorie de ville confirme que le modèle de mobility colle aux données de l'EMP.
    En weekend, seules les données sorties par catégorie de ville sont présentées par l'EMP. La comparaison reste satisfaisante , excepté pour la catégorie I (taille 50).

  • distance totale des voyages /an :
    la distance totale parcourue en voyage est largement surestimée lorsqu'on compte la totalité des voyages (inférieurs ou supérieurs à 80 km) ET les déplacements effectués en voyage. Elle est plus proche de la donnée de l'EMP lorsqu'on compte uniquement les voyages de plus de 80 km, et qu'on intègre pas les déplacements en voyage. Ce résultat est à mettre en parallèle avec les définitions de l'EMP : " La mobilité à longue distance concerne les déplacements qui conduisent à plus de 80 km, à vol d’oiseau, du domicile. Les voyages sont définis comme une séquence de déplacements dont le premier a pour origine le domicile et le dernier a pour destination le domicile, indépendamment du nombre de nuitées"
    Etant donné la tournure de la définition, les petits déplacements effectués en voyage pourraient donc être pris en compte dans les données de l'EMP.

FlxPo commented

Merci pour tous ces tests ! Visiblement on a des choses à améliorer...

Je suis un peu perdu pour comprendre la méthode que tu as utilisé. Si j'ai bien suivi, les étapes étaient les suivantes :

  • Extraction des données CSP, age, urban_category, poids indiv des fichiers détail du recensement, pour la France entière.
  • Échantillonnage de ces données pour constituer une population représentative soit selon la CSP, soit la catégorie urbaine (je n'ai pas trop compris le problème pour les tailles d'échantillon).
  • Échantillonnage des données EMP 2018-2019 à partir de ces données de population, avec mobility.
  • Comparaison avec les résultats agrégés de l'EMP 2018-2019 (lien vers la source ?).

En théorie on devrait trouver des chiffres beaucoup plus proches de l'EMP, sauf si le recensement et l'échantillon EMP ne représentent pas la même population...

Et on a un gros problème sur la longue distance non ?

Merci pour ton retour !
Pour la méthode utilisée c'est bien celle que tu présentes, à quelques détails près :

  • extraction des données CSP, age, urban_category, poids indiv ET **nombre de voitures du ménage **
  • Tirage de population pour chaque CSP ou chaque catégorie urbaine.
  • lancement des get trips pour la population tirée, avec les données insee renseignées (pas de calcul de n_car lançé)
  • Calcul des valeurs moyennes ( n_trips/weekday etc) à partir des get trips
  • Comparaison des valeurs moyennes obtenues avec les valeurs de l'EMP, à l'aide d'un fichier excel (les valeurs de l'EMP sont obtenues à partir de différentes tables, je pense ajouter directement les liens dans le excel de sortie)

Le problème de taille d'échantillon se pose lorsqu'on lance les get_trips. Plus la population échantillonée était grande, plus on avait de chance de tomber sur un profil aboutissant à l'échec dans get_trips. Le problème se pose très rapidement avec certains CSP: par exemple, au bout de 10 agriculteurs exploitants, il devenait impossible de ne pas tomber sur un profil "inconnu" du get trips.
J'étais étonnée de voir que le problème se retrouvait également quand on échantillonnait pour des catégories urbaines, alors que c'est à priori un critère moins discriminant que la CSP. ( 1 chance sur ~100 de tomber sur un profil "inconnu" de get trips pour les catégories B et C, et 1 chance sur ~50 pour les catégories I et R)

Pour la longue distance, je trouve ça également étrange que nos résultats soient aussi éloignés de l'EMP, même en considérant uniquement les voyages de plus de 80 km (et donc en ignorant totalement les déplacements au cours des voyages). J'ai regardé dans la note "Mise à disposition des tables individuelles anonymisées de l'EMP 2019" et je pense que le problème peut s'expliquer par deux facteurs :

  • Le SDES a consolidé les distances parcourues en voyages, présenté dans la variable OLDKM_fin (table Kdepdet). Il est conseillé dans la note "Mise à disposition des tables individuelles anonymisées de l’EMP 2019" d'utiliser cette variable, or nous avons considéré une autre variable (représentant la distance d'oiseau) pour déterminer les km parcourus en voyage.
  • La pondération utilisée ne permet pas, selon le SDES, de calculer un nombre de voyages annuel pour chaque individu. Peut être que dès lors, utiliser cette pondération dans get trips pousse à surestimer le nombre de voyages effectués par les individus?
    Ci-joint les passages de la notes évoquant les deux problèmes cités-ci dessus
    image
    image
FlxPo commented

Plusieurs suggestions pour avancer :

  • La taille d'échantillon n'est pas un problème pour le SDES puisqu'ils utilisent des pondérations : même s'ils n'avaient que 10 individus, ils calculeraient toutes les variables distance / nombre de déplacements / ... à l'échelle population en multipliant par un énorme facteur de pondération. Tant pis si certaines sous catégories qui existent dans la population ne sont pas intégrées au calcul (catégories qui font planter notre échantillonnage).

    • Est ce qu'on pourrait échantillonner avec un try / except pour éviter les erreurs ?
    • Est ce que tu penses pouvoir échantillonner avec la fonction "safe_sample" d'Antoine, qui essaie de contourner le problème des tailles d'échantillons trop faibles ?
    • Les tailles d'échantillon par sous catégorie de population ont été étudiées par Antoine : #10. Tu trouveras peut être les explications à certains des problèmes rencontrés ?
  • Le SDES dit que l'on ne peut pas utiliser les données enquêtées pour calculer les voyages pour chaque individu. Mais ce n'est pas ce qu'on essaye de faire : en échantillonnant des sous populations, on agrege des voyages d'individus différents. Cela revient au même que de sommer en fonction des pondki comme le fait le SDES, sauf que nous agrégeons nous de manière probabiliste (une sorte de méthode de monte carlo).

    • Pour la longue distance, la base du calcul est un nombre de voyages annuels par csp, calculé avec la pondération individu (https://github.com/mobility-team/mobility/blob/main/mobility/parsers/emp_2019.py#L249). Est ce qu'on retombe sur les chiffres du SDES ?
    • Il faut effectivement vérifier que nous prenons en compte les bonnes variables, que nous ne comptons pas deux fois les mêmes déplacements (courte et longue distance). @AntoineGauchot est ce que tu pourrais refaire une passe sur la logique de l'échantillonnage avec @An-So-G ?

Je peux apporter quelques éléments de réponse :

  • Pour quel variable de distance à utiliser, je pense aussi qu'il faille utiliser OLDKM_fin (j'ai utilisé la distance vol d'oiseau car c'était celle qui était utilisée pour l'ENTD 2008 et j'ai oublié de la changer)
  • Pour les catégories urbaines, de mon côté je n'arrive pas à avoir des tailles d'échantillon nulles en filtrant uniquement sur les catégories urbaines et la motorisation. Il faudra qu'on en discute
  • Les petits déplacements effectués en voyage ne sont pas présents dans la base K_VOY_DEPDET et n'apparaissent pas dans les statistiques du SDES je pense. Il ne faut pas les prendre en compte lorsque l'on fait la comparaison
FlxPo commented

En regardant de plus près les données de K_VOY_DEPDET, il me semble que seuls les déplacements de la boucle de déplacement globale du voyage sont pris en compte, mais pas les petits déplacements pour chaque destination du voyage. L'aller Lyon - Paris puis le retour Paris - Lyon, par exemple, mais pas les déplacements effectués une fois à Paris.

A moins qu'ils soient comptés côté mobilité locale, mais je ne crois pas car seuls les habitants sont enquêtés, et pas les personnes de passage sur un territoire ? A vérifier.

Il y a peut être également un problème dans notre logique d'échantillonnage : on tire des déplacements de K_VOY_DEPDET (identifiés par IDENT_DEPLD), alors qu'on devrait tirer des voyages (identifiés IDENT_VOY) et tous les déplacements qui les composent, en un seul bloc, non ?

Pour l'échantillonnage, ce que fait le programme actuellement c'est regrouper les déplacements de K_VOY_DEPDET selon le voyage auquel ils appartiennent et ensuite on tire les voyages dans la base regroupée.

FlxPo commented

Merci @AntoineGauchot pour la modification de la distance et de la pondération prises en compte pour les calculs (5c45186).

Effectivement la logique d'échantillonnage est OK, je n'avais pas suivi le fil jusqu'au bout !

J'ai refait tourner les tests avec quelques modifications :

  • utilisation du safe sample
  • prise en compte de changements d'Antoine pour les long trips
  • prise en compte des poids individus dans la base d'individus de l'INSEE
    Grâce au safe sample, les résultats ont pu être sortis pour des tailles de population plus grandes, mais un nouveau bug sur p_car apparaissait. J'ai donc fait tourner les résultats avec un n_car donné, et les résultats ont pu être sortis pour 1000 individus
    pour chaque CSP.
    Voici les résultats :

image
image
image

-Excepté pour les CSP 1 et 8, la distance parcourue par déplacement en semaine reste satisfaisante.

  • le nombre de déplacements par jour de semaine reste quasiment inchangé
  • le plus étonnant, c'est finalement que les changements effectués dans la table voyages semblent conduire désormais à sous-estimer la distance totale parcourue "en voyage" par an... à voir si ces résultats changent quand finalement on intègre les déplacements en voyage

J'ai sorti une comparaisons avec les valeurs ENTD 2009 et INSEE 2011. Voici les résultats :
image

  • nombre de déplacements/ jours semaine : Notre modèle est très proche des résultats du sdes pour le avec à chaque fois une variation inférieure à 10% pour chaque CSP
  • distance par déplacement semaine : la CSP 8. de notre modèle effectue trop de km par déplacement comparativement aux données SDES. Cependant, on retrouve la même erreur pour les données 2019 :'est donc sûrement un problème lié à la définition de cette CSP. La seule explication que je vois est la suivante : la catégorie 8 étant éclatée dans les tables du sdes, j'ai
    donc regroupé les résultats de plusieurs catégories (étudiants, chômeurs et autres inactifs) pour former la CSP8 à comparer. Le regroupement explique donc peut être une partie de l'erreur. Ceci dit, même prises séparément, aucune des sous catégories formant la CSP 8 ne se déplace "aussi loin" que la CSP 8 de notre modèle... à creuser donc.
  • pour les voyages : Les catégories 1 et 2 présentent de fortes anomalies. Mise à part ces catégories, on retrouve, comme dans le test de 2019, une sous-estimation des voyages effectués par la CSP 7. La seule explication que j'ai trouvé pour les erreurs mentionnées tient du nombre de voyages: il est quasiment doublé pour la CSP 2, comparativement aux données ENTD 2008. Je n'ai pas d'autres explications pour les autres erreurs mentionnées.

J'ai également resorti des valeurs de comparaison 2019 en faisant cette fois appel à p_car. Voici les résultats :
image

pour les sources, elles sont disponibles dans le excel de comparaison Comparaison_CSP.xlsx : il suffit de cliquer sur les cellules regroupées à droite des résultats en absolu pour afficher les tables de référence du sdes. Les tables sont téléchargeables depuis ce lien :
https://github.com/mobility-team/mobility/tree/test-insee/test/test_insee/output

FlxPo commented

On s'approche mais ce n'est pas encore tout à fait ça !

Est ce que tu as pris en compte le fait qu'on tire des jours de mobilité locale lors des voyages ? Je pense que cela peut fausser un peu la comparaison avec les données SDES, puisque ce type de petits déplacements lors d'un voyage ne sont pas dans le périmètre de l'étude.

Autre idée : la méthode safe_sample permet de tirer des déplacements pour des individus qui ne sont pas dans la base ENTD/EMP, mais elle introduit un biais vu qu'on échantillonne dans une population de moins en moins spécifique. Si on échantillonne à partir des données INSEE, on ajoute un autre biais.

Est ce que tu pourrais tirer des individus directement des données ENTD/EMP, pour neutraliser les différences de populations entre ces enquêtes et les données INSEE ? Théoriquement on devrait tomber exactement sur les résultats du SDES avec un échantillon assez grand.

Concernant la mobilité locale en voyage : on a créé avec Louise une nouvelle colonne dans le trip sampler "trip_type" : on sait alors le type de déplacement ou de voyage considéré. Cette méthode permet de ne garder que les grands déplacements en voyage :)

Concernant le biais de population : Bien vu ! j'ai retesté en tirant avec une population du SDES, et effectivement, l'erreur est quasiment neutralisée pour toutes les variables testées.

Hormis les csp 1 et 2 qui possèdent des tailles d'échantillons très faibles, j'ai pu compiler les résultats de 990 individus de chaque catégorie dans les tables ci- dessus.

nombres de déplacements par jour semaine : - quasiment pas de changement comparé au données INSEE

distance par déplacement jour semaine: erreur inférieure à 10% pour l'ensemble des CSP présentées, et diminution de l'erreur de 25% pour la CSP 8 : l'erreur reste élevée, ce qui renforce le soupçon d'un manque de compréhension de ma part concernant cette catégorie ( il faudrait peut être compiler les résultats de la csp 8 avec ceux de la "no_csp" afin de retomber sur les résultats du sdes ? )

distance totale voyagée par an : erreur inférieure à 10 % pour l'ensemble des CSP présentées 🥇

FlxPo commented

C'est top merci pour ce travail !