Genre et déplacement interne en Haïti
En mai 2026, 796 688 femmes et filles déplacées vivent dans 135 des 140 communes du pays. Cette étude part de douze classeurs publics dont les colonnes changent de nom au fil des relevés. Elle documente leur traitement jusqu’aux six pages du rapport, avec le code utilisé à chaque étape et le recalcul de chaque affirmation affichée.
Sommaire
Sommaire
La question posée
À chaque relevé, la Matrice de suivi des déplacements de l’OIM estime le nombre de personnes déplacées dans chaque commune d’Haïti. Ce tableau de bord isole les femmes et les filles pour examiner trois questions masquées par le total.
D’où viennent-elles, et jusqu’où le déplacement se diffuse-t-il selon la commune de départ ? Vivent-elles sur un site ou chez une famille d’accueil ? Quelle population les enquêtes sur la sécurité décrivent-elles réellement ?
Une source qui change en route
Les douze classeurs publiés sur trois ans forment une série hétérogène. Les colonnes changent de nom et de position, le périmètre géographique s’étend et certaines questions disparaissent du questionnaire.
| Rupture observée | Conséquence sur le rapport |
|---|---|
| Couverture géographique | Le relevé 3 couvre la zone métropolitaine. À partir du relevé 7, la collecte couvre les dix départements. Toute série temporelle est filtrée sur les sept relevés à couverture nationale. |
| Questions de protection | Elles disparaissent après juin 2025, onze mois avant le dernier relevé. La page Protection s’arrête donc à juin 2025 et le dit dans son titre. |
| Question posée aux hommes | Le relevé 7 introduit la question masculine. Le calcul des écarts entre sexes commence en juin 2024. |
| Codage des réponses | Une même réponse binaire se présente sous quatre formes selon le relevé. |
Le rapport signale chaque rupture dans le titre ou le pied de page du visuel concerné. Les calculs s’arrêtent à chaque changement de périmètre signalé.
Quatre codages pour une réponse binaire
Selon le relevé, une réponse positive à la même question de protection peut apparaître sous la forme 1, oui ou Oui toutes les latrines. La modalité Quelques-unes désigne une réponse partielle. Une seule fonction ramène ces quatre formes à une variable binaire et consigne deux choix de codage.
Normaliser une réponse binairescripts/01_extract.py
def oui_non(serie):
valeur = pd.to_numeric(serie, errors="coerce").astype("Float64")
valeur = valeur.where(valeur.isin([0, 1]))
reponse = serie.astype(str).map(sans_accent).str.strip()
valeur[reponse.str.startswith(("oui", "yes", "toutes"))] = 1
valeur[reponse.str.startswith(("non", "no", "aucun", "quelques"))] = 0
hors_champ = reponse.str.contains("non posee|nsp|ne sait pas|sans objet", regex=True)
return valeur.where(~hors_champ)
« Quelques » vaut non. La protection est considérée comme assurée lorsque toutes les latrines du site sont séparées par sexe. La modalité brute reste dans une colonne modalite, ce qui permet de modifier ce choix sans retraiter les classeurs.
« NSP » devient une valeur manquante. Ce codage distingue l’absence de question d’une réponse négative. Une valeur zéro tirerait artificiellement la moyenne vers le bas.
Le modèle
Le modèle en étoile comprend quatre tables de faits, population, ménages, besoins et protection, reliées à deux dimensions communes : la commune et le relevé. Toutes les relations passent par ces deux dimensions. Les ratios restent ainsi limités aux tables qui couvrent les mêmes lieux.
Les 140 P-codes communaux du fond de carte CNIGS et OCHA correspondent à 100 % à ceux de la DTM. La jointure cartographique conserve ainsi toutes les communes.
Ampleur, combien elles sont et depuis quand
Les questions. Combien de femmes et de filles sont déplacées ? Sont-elles majoritaires ? Depuis combien de temps ces personnes ont-elles quitté leur domicile ?
Sur 1 466 862 personnes déplacées, 796 688 sont des femmes et des filles, soit 54,3 % et 118,9 femmes pour 100 hommes. Ce déséquilibre justifie une analyse distincte de leur situation.
Pondérer l’ancienneté par les effectifs
Chaque ligne de la source décrit un lieu, qui peut abriter douze personnes comme douze mille. Une moyenne simple donnerait le même poids à chaque lieu, quelle que soit sa population.
Pondérer par l’effectif, ignorer les non renseignésMesures.tmdl
Ancienneté du déplacement (mois) =
VAR Renseignes =
FILTER( fait_population, NOT ISBLANK( fait_population[anciennete_mois] ) )
RETURN
DIVIDE(
SUMX( Renseignes, fait_population[anciennete_mois] * fait_population[effectif] ),
SUMX( Renseignes, fait_population[effectif] )
)
Le filtre sur Renseignes retire les lieux sans ancienneté du numérateur et du dénominateur. Les laisser au dénominateur diviserait une somme partielle par un effectif complet et tirerait la moyenne vers le bas.
| Relevé | Ancienneté moyenne, mois | Lecture |
|---|---|---|
| Mars 2023 | 3,1 | vague récente, déplacements tous récents |
| Décembre 2024 | 8,7 | creux de la série, un afflux de nouveaux déplacés abaisse la moyenne |
| Mai 2026 | 20,9 | déplacements prolongés, ancienneté en hausse mécanique |
Une baisse de la moyenne peut signaler l’arrivée d’une nouvelle vague de personnes déplacées. La note placée sur le creux de décembre 2024 donne cette explication directement sur le graphique.
Comparer deux séries d’échelles différentes
Un indice ancré au premier relevé nationalMesures.tmdl
Indice base 100 =
VAR Base = CALCULATE( [PDI], ALL( dim_round ), dim_round[ordre] = 6 )
RETURN
DIVIDE( [PDI], Base ) * 100
ordre = 6 correspond au relevé de juin 2024, le premier à couvrir tout le pays. Un ancrage antérieur confondrait l’extension de la collecte, jusque-là métropolitaine, avec une croissance du déplacement.
Origines, d’où elles partent et jusqu’où elles vont
Les questions. Quelles communes perdent le plus d’habitantes ? Ces femmes restent-elles près de chez elles ? Le déplacement se diffuse-t-il de la même façon selon la commune de départ ?
Vingt-sept communes de provenance alimentent cent trente-cinq communes d’accueil. Trois d’entre elles concentrent 56,7 % du total et sept en concentrent 85 %.
Volume et dispersion
Le graphique en barres présentait d’abord les effectifs par commune de départ, déjà visibles dans la matrice voisine. Il compte désormais le nombre de communes d’accueil atteintes.
Compter les communes d’accueil atteintesMesures.tmdl
Communes touchées (femmes et filles) =
COUNTROWS( FILTER( VALUES( dim_commune[pcode_commune] ), [Femmes et filles] > 0 ) )
| Commune de départ | Femmes et filles | Communes atteintes | Forme du déplacement |
|---|---|---|---|
| Port-au-Prince | 221 009 | 63 | éclatement national |
| Gressier | 133 039 | 24 | volume élevé, diffusion limitée |
| Tabarre | 6 520 | 8 | peu de monde, largement dispersé |
| Cabaret | 10 544 | 1 | déplacement de proximité |
Les deux classements décrivent des phénomènes différents. Gressier est deuxième en volume et sixième en dispersion. Cabaret envoie dix mille femmes dans une seule commune voisine ; Tabarre en envoie deux fois moins dans huit communes. Le dimensionnement de la réponse humanitaire dépend donc de la dispersion. Chaque commune d’accueil entre dans le total de chacune des origines qu’elle héberge, comme le précise le pied de page.
Sur place ou ailleurs
Une colonne calculée compare la commune déclarée de provenance à la commune où la personne se trouve.
Qualifier chaque ligne de faitfait_population.tmdl
Déplacement =
VAR CommuneAccueil = RELATED( dim_commune[commune] )
RETURN
IF(
ISBLANK( fait_population[commune_provenance] ) || ISBLANK( CommuneAccueil ),
"Non renseigné",
IF( fait_population[commune_provenance] = CommuneAccueil, "Sur place", "Ailleurs" )
)
La part partie ailleurs valait 69,2 %, 72,2 %, 68,1 % puis 73,8 % sur les quatre premiers relevés nationaux, puis 77,1 %, 76,8 % et 75,9 %. Une ligne de repère à 75 % situe la bascule. Le titre « trois femmes déplacées sur quatre ont quitté leur commune » devient exact en septembre 2025.
Géographie, où elles vivent aujourd’hui
Les questions. Quelles communes accueillent ces femmes ? La zone métropolitaine de Port-au-Prince concentre-t-elle toujours le déplacement ?
626 741 femmes et filles vivent hors de la zone métropolitaine, soit près de quatre sur cinq. La zone métropolitaine en accueille 169 947. Port-au-Prince reste la première commune d’accueil avec 83 102 femmes et Delmas suit avec 47 748. Cinq des sept premières communes sont hors zone métropolitaine.
En deux ans, la part métropolitaine tombe de 31,8 % à 21,3 %. Les effectifs métropolitains augmentent de 99 889 à 169 947 sur la même période. La population déplacée croît plus vite dans le reste du pays. L’empilement à 100 % montre simultanément l’évolution de cette part et celle des effectifs.
La carte communale applique un dégradé explicite aux 135 communes touchées. Les cinq communes sans donnée apparaissent en gris, hors de l’échelle. Ce traitement distingue l’absence de données d’un faible effectif lorsque le lecteur cherche où intervenir.
Protection et sécurité déclarée sur les sites
Les questions. Femmes et hommes décrivent-ils le même site de la même façon ? Les écarts suivent-ils une tendance ? Quelle population cette page couvre-t-elle ?
Délimiter la population concernée
La part hors siteMesures.tmdl
Part femmes hors site =
DIVIDE(
[Femmes hors site],
CALCULATE( [Femmes et filles], NOT ISBLANK( fait_population[hebergement] ) )
)
Le dénominateur exclut les lignes sans hébergement renseigné. Leur inclusion assimilerait une absence d’information à un hébergement en site et sous-estimerait la part hors site. Au total, 84,5 % des femmes déplacées vivent chez des familles d’accueil. Ces questions couvrent uniquement les sites.
Comparer deux sexes sur le même site et au même relevé
Deux moyennes nationales peuvent porter sur des sites différents. La mesure apparie chaque couple site-relevé et retient seulement ceux pour lesquels les deux réponses existent.
Le calcul appariéMesures.tmdl
Sites discordants défavorables =
VAR Femmes = "Femmes se sentant en sécurité sur le site"
VAR Hommes = "Hommes se sentant en sécurité sur le site"
RETURN
COUNTROWS(
FILTER(
SUMMARIZE( fait_protection, fait_protection[cle_lieu], fait_protection[round] ),
VAR f = CALCULATE( MAX( fait_protection[valeur] ), fait_protection[indicateur] = Femmes )
VAR h = CALCULATE( MAX( fait_protection[valeur] ), fait_protection[indicateur] = Hommes )
RETURN NOT ISBLANK( f ) && NOT ISBLANK( h ) && f = 0 && h = 1
)
)
Sur 439 sites où la question est posée aux deux sexes, 419 donnent la même réponse. Parmi les vingt sites où les réponses divergent, dix-huit associent une réponse négative des femmes à une réponse positive des hommes. Deux présentent la situation inverse.
Les trois cartes du haut utilisent le même filtre de relevés, r07, r09 et r10. Auparavant, l’écart affiché comparait une moyenne féminine de mars 2023 à juin 2025 à une moyenne masculine de juin 2024 à juin 2025. La seconde période commence avec la collecte des réponses masculines. À périmètre égal, le recalcul produit 3,9 points. La version précédente affichait 3,2.
Le graphique des latrines réunit deux polarités. Deux barres donnent une part de conformité ; la troisième, en rouge, donne la part des sites où un risque d’accès est signalé. Un risque signalé dans 23,8 % des sites et une conformité de 23,8 % décrivent des situations opposées.
Besoins déclarés par les lieux
Les questions. Quels besoins les lieux déclarent-ils en priorité ? Ces priorités changent-elles selon la zone ? Quelles communes arrivent en tête ?
Calculer la part des lieux déclarantsMesures.tmdl
Lieux citant le besoin % =
DIVIDE(
CALCULATE( DISTINCTCOUNT( fait_besoins[cle_lieu] ), fait_besoins[signale] = 1 ),
CALCULATE( DISTINCTCOUNT( fait_besoins[cle_lieu] ) )
)
Le DISTINCTCOUNT dénombre les lieux. Comme un même lieu peut citer plusieurs besoins, la somme des taux dépasse 100 %. Le sous-titre l’indique explicitement.
Sur les 1 181 lieux interrogés en mai 2026, la nourriture est citée par 65,8 % et les moyens de subsistance par 58,8 %. La protection arrive septième sur huit, à 8,7 %.
Quand deux tiers des lieux manquent de nourriture, la hiérarchie déclarée reflète d’abord l’urgence vitale. La protection reste un besoin. Le pied de page distingue fréquence de citation et présence du besoin.
Les priorités diffèrent selon la zone. La protection est citée par 12,9 % des lieux métropolitains et par 5,3 % des lieux ailleurs, soit près de deux fois et demie plus. Hors zone métropolitaine, la nourriture à 77,3 % et les moyens de subsistance à 58,6 % dominent.
Le score de priorisation
La page Besoins classe les communes selon un score construit pour cette étude. Sa première version additionnait trois termes pondérés. Deux défauts apparaissaient dans le code et le classement obtenu.
Les données manquantes avantagées
COALESCE( [Latrines séparées %], 0.5 ) assimilait l’absence de mesure à une performance moyenne. Ce choix ajoutait un demi-point aux communes sans mesure et faisait tomber vers zéro les communes mesurées et conformes. En juin 2025, où 49 communes sur 137 ont une donnée de latrines, les 88 autres étaient ainsi avantagées.
Le volume ignoré
Le terme de composition ignorait le volume. Il saturait dès dix points d’écart à la parité, si bien qu’une commune de soixante-dix-huit déplacées obtenait le quart complet du score.
| Commune | Femmes et filles | Écart de composition | Ancien score | Rang |
|---|---|---|---|---|
| Port-Margot | 1 344 | 10,9 | 34,4 | 13 |
| Ferrier | 178 | 17,4 | 33,5 | 18 |
| Bas Limbé | 93 | 12,0 | 33,4 | 19 |
| Carice | 78 | 11,9 | 33,4 | 20 |
Toute commune dont la part de femmes dépasse 60 % obtenait un plancher de 33,3, quelle que soit sa taille. En portant la saturation de dix à vingt points, Ferrier et ses 178 déplacées obtiendraient encore 29,1, devant une commune de dix mille déplacées qui plafonnerait à 14,7. La formule corrigée intègre donc le volume.
La correction
Dans la version corrigée, la composition et la protection déterminent un coefficient appliqué au volume.
Le score, version corrigéeMesures.tmdl
Score priorisation =
VAR VolumeMax =
CALCULATE(
MAXX( VALUES( dim_commune[pcode_commune] ), [Femmes et filles] ),
ALL( dim_commune )
)
VAR TermeVolume = DIVIDE( [Femmes et filles], VolumeMax )
VAR TermeComposition = MIN( 1, MAX( 0, DIVIDE( [Part femmes et filles] - 0.5, 0.1 ) ) )
VAR Protection = [Latrines séparées %]
VAR Modulation =
IF(
ISBLANK( Protection ),
DIVIDE( 0.5 + 0.25 * TermeComposition, 0.75 ),
0.5 + 0.25 * TermeComposition + 0.25 * ( 1 - Protection )
)
RETURN
ROUND( Modulation * TermeVolume * 100, 1 )
Le calcul place ALL( dim_commune ) autour de MAXX. Une application à la table itérée laisserait actif le filtre de la ligne courante. Le maximum reprendrait alors la valeur de cette ligne et donnerait un terme de volume égal à 1 partout.
| Commune | Femmes | Ancien | Nouveau | Rang |
|---|---|---|---|---|
| Port-au-Prince | 83 102 | 72,9 | 72,9 | 1 vers 1 |
| Delmas | 47 748 | 63,3 | 52,6 | 2 vers 2 |
| Port-Margot | 1 344 | 34,4 | 1,6 | 13 vers 91 |
| Carice | 78 | 33,4 | 0,1 | 20 vers 132 |
Les pondérations de 50, 25 et 25 relèvent d’un choix de l'autrice. Elles sont affichées à côté du tableau. Le volume reste le principal déterminant du classement, conformément à l’objectif de priorisation.
Recalculer chaque affirmation
Les titres du rapport formulent des constats précis. Chacun doit donc pouvoir être recalculé à partir des fichiers sources. Neuf affirmations ont été vérifiées une à une.
| Affirmation affichée | Page | Verdict |
|---|---|---|
| Trois communes de provenance font 56,7 % du total | Origines | exact |
| Cinq des sept premières communes sont hors de la zone métropolitaine | Géographie | exact |
| L’Ouest reste le premier département, avec 30 % du total | Géographie | 29,6 %, exact |
| 18 sites contre 2 répondent différemment selon le sexe | Protection | exact |
| Le lieu pèse dix fois plus que le sexe | Protection | 23,5 points contre 2,2, tient |
| 98,8 % des déplacements sont dus aux attaques | Ampleur | exact sur douze relevés |
| La protection est citée deux fois et demie plus en zone métropolitaine | Besoins | 2,42, corrigé en « près de » |
| Hors zone métropolitaine, les abris et la nourriture dominent | Besoins | faux, les moyens de subsistance sont deuxièmes |
| Écart de perception de 3,2 points | Protection | faux, deux périmètres comparés |
Les deux affirmations erronées révélaient des problèmes de calcul. Pour la dernière, les cartes comparaient une moyenne féminine calculée de mars 2023 à juin 2025 à une moyenne masculine calculée de juin 2024 à juin 2025. La collecte des réponses masculines commence plus tard.
Le même écart, deux périmètresvérification
tel que la page le calculait femmes 70,20 % (557 obs) hommes 73,41 % ecart -3,21
a perimetre comparable femmes 69,53 % (443 obs) hommes 73,41 % ecart -3,88
Les trois cartes portent désormais le même filtre de relevés. À périmètre comparable, l’écart est de 3,9 points.
La relecture a aussi relevé deux erreurs de construction. Sur la page Origines, un graphique en barres et le premier niveau d’une matrice utilisaient le même champ, la même mesure et le même tri. Ce doublon occupait la moitié de la surface utile. Sur la page Protection, trois barres issues de la même mesure réunissaient deux indicateurs de conformité, où une valeur élevée est favorable, et un indicateur de risque, où elle est défavorable. Le sous-titre unique annonçait une part de conformité et inversait la lecture de la troisième barre.
Limites
Le tableau de bord présente chaque limite sur la page concernée.
- Protection limitée aux sites. 84,5 % des femmes déplacées vivent chez des familles d’accueil, où le questionnaire omet ces questions. La page Protection l’annonce en tête, avant les taux qu’elle affiche.
- Onze mois d’écart. Les indicateurs de protection s’arrêtent en juin 2025 quand le dernier relevé du rapport est de mai 2026.
- Le périmètre s’étend avec le temps. Toute comparaison antérieure à juin 2024 mêlerait extension de la collecte et évolution réelle, d’où le filtre de série nationale sur chaque graphique temporel.
- Les effectifs sont des estimations. La DTM les produit à partir d’entretiens avec des informateurs clés. Les écarts précis entre deux relevés dépassent le niveau de précision de la méthode.
- Le score est une construction. L'autrice définit sa formule et l’affiche à côté du tableau qu’elle classe.
Reproduire
Trois scripts s’exécutent dans l’ordre : chacun écrit ses sorties sur disque, puis le suivant les lit. Les classeurs sources restent versionnés dans le dépôt, car les URL de téléchargement finissent par expirer.
Reconstruire les tablesscripts/
pip install pandas openpyxl geopandas topojson
python scripts/01_extract.py # six tables dans data/clean/
python scripts/02_geo.py # TopoJSON communal et centroides
python scripts/03_pbit.py # template Power BI et memo des mesures
Le contrôle de fin de chaîne tient en deux nombres : si PDI sort à 1 466 862 et Femmes et filles à 796 688 sur le relevé 13, la chaîne est intacte.
Les corrections décrites sur cette page sont regroupées dans des scripts idempotents, un par page, suivis d’une passe typographique. Une seule commande les applique. Chaque script relit l’état avant d’écrire et peut être relancé sans effet de bord. Cette précaution protège le PBIR : Power BI Desktop le réécrit depuis sa mémoire lorsqu’on recharge des modifications non enregistrées, ce qui peut effacer une demi-journée de travail.