Configurations urbaines et ségrégation sociale par le prisme de la modélisation
Par Omar Rifki, chercheur post-doctoral à l’École urbaine de Lyon
Actuellement aux États-Unis, le Covid-19 affecte davantage les minorités raciales, surtout les Afro-Américains. Par exemple en Louisiane, 70 % des morts de la maladie sont issus de cette minorité alors qu’ils ne représentent que 30 % de la population de la ville (Bouie 2020). Cette situation catastrophique est expliquée par la vulnérabilité économique dont souffre cette communauté, pour laquelle les emplois sont souvent dans le secteur des services, ce qui requiert un contact avec un grand nombre de personnes et donc une plus grande chance d’être contaminé (Bouie 2020). Une autre raison est liée à ségrégation résidentielle aux États unis qui, en lien avec le premier facteur, a tendance à créer des clusters de contamination. Un tour d’horizon dans la répartition des quartiers des grandes villes américaines, comme le montre Figure 1, suggère une nette division de l’espace urbain selon l’origine raciale ou ethnique. Cette ségrégation ne concerne pas que les États-Unis. Nous connaissons tous une ou deux chinatowns des métropoles mondiales, que cela soit le 13e arrondissement de Paris, ou Yokohama au sud de Tokyo. Cela s’applique également par exemple au quartier indien aux alentours de la Gare du Nord à Paris et éventuellement aux innombrables banlieues des villes européennes dont la population est souvent d’origine immigrée.
Quelles raisons poussent les personnes de la même classe / groupe / origine ethnique à se regrouper ensemble géographiquement ? Ceci est une question à laquelle Thomas Schelling, économiste états-unien et prix Nobel d’économie en 2005 pour ses contributions fondamentales en théorie des jeux, a essayé de répondre avec un modèle simple et astucieux, puisqu’il met en évidence la force subtile derrière ces configurations urbaines de ségrégation. J’ai eu le plaisir de découvrir ce modèle dans l’excellent manuel d’économie de David Easley et Jon Kleinberg « Networks, Crowds, and Markets ». Je précise à ce titre que mes recherches principales portent sur les applications de routage dans le domaine du transport. Ce post est le deuxième d’une série à visée pédagogique sur la modélisation spatiale. Dans ce qui suit, nous allons dans un premier lieu décrire le modèle de Schelling, le simuler, pour ensuite pour ceux qui veulent aller plus loin combiner ce modèle avec une structure de réseau social plus réaliste que celle du modèle de base, à savoir les réseaux dits « petit-monde ». Le code que j’ai implémenté pour les simulations est donné en fin du post dans le langage de programmation Python, à l’intention des personnes qui voudraient reproduire les résultats par eux-mêmes.
Modèle de Schelling
Le modèle se décrit comme suit. Les individus de la population sont divisés en un nombre de types, qui peuvent représenter soit l’ethnie, la religion, l’origine, la caste (au cas où nous nous plaçons dans le sous-continent indien) ou tout autre descriptif ou une combinaison des éléments précédents. Dans la modélisation nous allons considérer uniquement deux types : les jaunes et les verts . Ces individus vivent dans une grille comme le montre la Figure 2, où chacun d’eux est connecté à 4 voisins au plus (les extrémités sont liées à 2 ou à 3 voisins). Chaque sommet s’il est occupé représente alors un individu, sinon c’est un emplacement vide. La grille tout entière représente la configuration spatiale, qui est évidemment une simplification extrême de l’aire urbaine à modéliser. Ceci nous permettra néanmoins de nous focaliser sur les dynamiques d’interaction entre individus. Le paramètre essentiel du modèle est la préférence, qui est un pourcentage. Le modèle est tel que chaque individu a une préférence sur la composition éthique de son voisinage, disant qu’il est satisfait si au moins un tiers de son voisinage est du même type que le sien. Le paramètre préférence est égale alors à 1/3 dans cet exemple. La satisfaction de chaque individu (sommet) est fonction de ce paramètre.
La règle qui gouverne le modèle de Schelling est assez simple : Les individus qui sont satisfaits restent dans leurs emplacements, ceux qui ne le sont pas changent d’emplacement avec un nœud quelconque inoccupé du réseau (violet).
Une préférence égale à tiers de son voisinage est en effet une contrainte assez faible. Cela infère que les personnes acceptent de vivre en minorité dans leur entourage, bien qu’ils préfèrent ne pas être dans une extrême minorité (moins de 1/3). Schelling (1969) a démontré que ce petit biais en termes de préférence dans la configuration locale a un impact énorme dans la convergence globale du système, qui mène constamment à un monde de ségrégation spatiale, comme nous allons le voir. Ceci est à première vue un résultat contre-intuitif si nous nous restreignons à l’échelle locale, mais qui s’avère être robuste. Plusieurs variations et extensions du modèle ont en effet confirmé l’existence de ce résultat de groupement.
Dans les années 70, Schelling avait utilisé des pièces de monnaie sur une grille dessinée pour simuler ce modèle. Dans l’air du temps, ce modèle sera simulé avec un programme informatique. Notons que ce type de programme qui émule des interactions entre des individus est nommé « modèle basé sur des agents » ou bien « Agent-Based model (ABM) » en anglais. La première étape du programme de simulation est de placer les nœuds dans la grille suivant leurs types, ce qui peut être réalisé d’une manière aléatoire en spécifiant en entrée les probabilités initiales pour chaque type de nœud. Notre monde sera composé de 35 % de jaune, 35% de vert et 10 % de sommets inoccupés. On applique ensuite la règle principale du modèle de Schilling itérativement.
Ci-dessous le déroulement de la simulation pour une grille composée de 50 x 50 individus. À partir d’une même configuration initiale, l’algorithme est exécuté pour trois valeurs croissantes de préférence : 30 %, 50 % et 70 %. Les configurations finales montrent une ségrégation grandissante de l’aire urbaine en corrélation avec la préférence en entrée, de telle manière qu’avec une préférence égale à 70 %, on a quasiment un monde gouverné par deux blocs qui font face. Le résultat suivant une préférence égale à 30 % dessine déjà un monde assez séparé. Nous pouvons naviguer facilement le long de la grille en restant uniquement parmi les membres d’une même communauté.
Une des raisons derrière ce comportement paradoxal revient à l’effet de cascade et des externalités (Jackson 2019). En effet lorsqu’un individu change d’emplacement, il impacte les membres de son ancien ainsi que de son nouveau voisinage. Certains de ses anciens voisins qu’il a laissés derrière peuvent devenir insatisfaits, puisque son départ impacte le calcul de leurs propre ratio de satisfaction. La décision des individus de se déplacer a donc plusieurs répercussions, pas que sur leur satisfaction individuelle, mais surtout sur la satisfaction des voisins, donc sur la décision de ces derniers de se déplacer à leur tour, et ainsi de suite. L’effet de cascade est alors déclenché. Une ville exhibant une grande ségrégation géographique n’est ainsi pas automatiquement le fruit de l’intolérance de ses habitants nous informe Schelling par son modèle. Donc ceci est une idée à laquelle il faut tordre le cou sans doute.
Pour aller plus loin : Les réseaux petit-monde
Dans cette section, nous altérons la grille, le réseau social de base de notre modèle, par une structure plus parlante, plus réaliste. Le phénomène de petit-monde est lié au fait que la distance séparant les personnes dans un réseau social est généralement assez petite. Par distance, il faudrait comprendre le nombre de personnes intermédiaires. Cette observation connue dans la culture populaire par la maxime selon laquelle il serait possible d’entrer en contact direct avec n’importe quelle personne dans le monde grâce à six intermédiaires consécutifs a trouvé son formalisme dans les fameuses expérimentations du sociologue américain Stanley Miligram (Miligram 1967).
Plusieurs mathématiciens et informaticiens ont proposé par la suite de formaliser cette famille de modèle de graphes, qui est caractérisé en plus des distances moyennes petites, par un ratio de clustering élevé, ce qui implique l’existence de clusters de nœuds (un groupement de nœuds connectés) biens établies dans le réseau. Un des plus fameux modèles proposés à ce sujet est celui de Watts et Strogatz (Watts et Strogatz 1998) dans lequel les nœuds sont placés sur un cercle, de telle manière que chaque nœud est connecté à ses proches voisins (d’où un clustering géographique élevé), avec l’ajout en surplus d’un nombre d’arcs à longue portée qui sont affectés aléatoirement. La figure 4 fournit une image de ce type de graphe.
Jon Kleinberg a étendu ce dernier modèle de Watts et Strogatz de sorte que le graphe de base soit une grille. Son modèle a trois paramètres (p, q, r), avec p est égale pour un nœud u à la distance maximale des voisins avec qui il établit des connexions (si p=1, on se connecte uniquement aux voisins directs), q est le nombre d’arcs à longue portée pour chaque nœud, et r est un paramètre lié à la distribution de ces arcs à longue portée. Une grille basique comme celle étudiée dans la première section est complètement décrite par p = 1 et q = 0. L’exemple à droite de la Figure 4 est donné pour p = 1 et q = 2 (le nœud u a uniquement deux arcs à longue porté, vers v et w). Concernant le paramètre r, s’il est grand, les arcs à longue portée auront une plus grande probabilité de pointer vers des nœuds proches du nœud source u. Un r = 0 correspond à une répartition aléatoire de ces ars comme pour le cas du modèle de Watts et Strogatz. Nous fixons p = 1 et q = 2 dans la suite du post, et faisant varier le paramètre r, qui sera la variable principale de notre modèle de petit-monde.
Tout d’abord, voyons l’équivalent de la Figure 3 pour un réseau de petit-monde avec r = 2. En comparant visuellement Figure 3 et 5, nous notons les représentations du réseau petit-monde sont légèrement plus groupées que celles du réseau de grille. Ceci est une impression, saisir la différence nécessitera une évaluation plus rigoureuse.
Pour mesurer la ségrégation d’une configuration spatiale (donc du réseau social sous-jacent), nous utilisons deux mesures qui ont été employées par les implémentations du modèle de Schelling sur internet (les liens sont donnés ci-dessous). La première mesure permet d’évaluer la ségrégation en tant que la moyenne prise sur toute la population du ratio de satisfaction. Pour rappel, ce dernier est tout simplement égal pour chaque individu (ou nœud donné) au nombre des voisins du même type divisé par le nombre total de voisins (en général c’est le ratio sur lequel la satisfaction individuelle est établie pour appliquer la règle de Schilling). Le deuxième paramètre est le nombre de communautés dans le réseau. Par communauté nous désignons un ensemble de nœuds qui sont de même type tel qu’il existe un chemin entre chaque deux éléments de ce groupe, avec la contrainte suivante : ce chemin doit passer uniquement par les nœuds de la communauté. En d’autres termes, une communauté, c’est un îlot d’individus qui sont voisins et de même type.
Les deux tracés de la Figure 6 confirment les résultats obtenus dans les implémentations sur internet pour le cas de grille, à savoir que la satisfaction moyenne (sortie de la configuration finale) est croissante par rapport au ratio de préférence (entrée de la configuration initiale), et très largement élevé par rapport à ce dernier ratio. Pour une préférence de 10%, nous atteignons une satisfaction globale aux alentours de 50%. Pour bien saisir la correspondance entre ces deux variables, il faut garder à l’esprit que la préférence est un paramètre local des nœuds, des individus, alors que la moyenne de satisfaction traduit l’état macro du réseau, la résultante de la simulation.
La figure de satisfaction globale nous informe également que la grille constitue une borne supérieure par rapport aux réseaux de petit-monde, bien que les courbes sont proches entres elles. La grille est d’une certaine manière une configuration optimiste. Les réseaux de petit-monde nuance ce fait et nous informe que les réseaux sont en réalité moins segmentée qu’ils ont en l’air et les agents sont moins satisfaits, en notant au passage qu’un réseau petit-monde avec r = 4 a des arcs à longue portée plutôt localisé dans le voisinage proche.
Le résultat que nous venons de décrire est d’une certaine manière paradoxal avec celui du tracé du nombre de communautés. En effet, comme les réseaux petit-monde sont supposés être moins segmentés (figure à de satisfaction globale), le nombre de communautés est supposé être de ce fait plus élevé, mais nous obtenons l’inverse, un nombre de communautés exceptionnellement bas. Ce dernier pourrait s’expliquer par l’existence des arcs à longue portée qui réduisent les barrages entre les communautés. Les deux mesures utilisées sont sans doute insuffisantes, d’après ce que nous constatons. Nous sommes ramenés pour la suite de l’analyse à la question fondamentale : comment est-il possible de mesurer la ségrégation sur un réseau social ?
Enseignements
Dans ce post nous avons examiné le modèle de Schelling. Ce modèle assez simple permet d’expliquer le phénomène de ségrégation en contexte urbain. Il nous informe surtout que bien que les individus du réseau ont une vision tolérante, l’émergence collective de ségrégation apparaît assurément. L’usage des réseaux petit-monde nuance ce propos, et pose la question de mesure de la ségrégation urbaine pour un réseau social.
Pour les programmeurs : Code
Pour celles et ceux qui aimeraient reproduire les simulations du post, le code ci-dessous en Python 3 est donné. Nous nous sommes basé pour l’implémentation sur la librairie Networkx pour générer la structure de graphe. Le paradigme orienté objet du langage Python permet d’avoir une bonne visibilité du code et de faire également usage du concept d’encapsulation. Une seule classe nous a été suffisante pour implémenter l’algorithme de Schelling. Cette classe qu’on a nommée Area encapsule la structure du réseau. Les paramètres préférence et type des sommets du graphe ont été ajoutés en tant qu’attributs à la structure nœud du réseau Networkx, ce qui a entre autres facilité la lisibilité du code et le déroulement de l’algorithme. Ci-dessous la classe Area avec une fonction d’exécution exemple qui permet de reproduire les Figures 3 et 5. La simulation se déroule d’une manière itérative en appliquant la règle principale du modèle de Schilling vu précédemment, jusqu’à atteindre une convergence. Le critère de convergence dans notre contexte est défini par rapport à la satisfaction totale de la population. La simulation s’arrête si pas plus 1 % de la population reste insatisfaite. Un deuxième seuil threshold_convergence est ajouté de telle manière que l’algorithme ne soit pas bloqué dans un minimum local si le seuil principal de l’itération threshold_hapiness n’est encore pas satisfait.
import numpy as np #structure de données
import networkx as nx #structure réseau
from itertools import count #fonction de comptage
import matplotlib.pyplot as plt #dessiner figures
class Area:
def __init__(self, N, types, types_prob, preference, type_graph, r):
self.g = self.construct_graph(N, types, types_prob, preference, type_graph, r)
self.init_g = self.g
self.type_g = type_graph
self.total_nodes = len(self.g)
self.total_unhappy = len(self.g)
self.total_empty = len([x for x, n in self.g.nodes(data=True) if n['type'] == 0])
def construct_graph(self, N, types, types_prob, preference, type_graph, r=2):
if type_graph == 'grid': q=0
if type_graph == 'small-world': q=2
g = nx.navigable_small_world_graph(N, p=1, q=q, r=r)
# Add the attributes of type and preferences to nodes
d_type={}; d_pref={}
for n in g.nodes():
d_type[n] = np.random.choice(types, p=types_prob)
d_pref[n] = preference
nx.set_node_attributes(g, d_type, 'type')
nx.set_node_attributes(g, d_pref, 'preference')
return g
def init_graph(self, preference):
self.g = self.init_g
self.total_nodes = len(self.g)
self.total_unhappy = len(self.g)
self.total_empty = len([x for x, n in self.g.nodes(data=True) if n['type'] == 0])
d_pref={}
for n in self.g.nodes(): d_pref[n] = preference
nx.set_node_attributes(self.g, d_pref, 'preference')
def draw_graph(self, title, size=50):
groups = set(nx.get_node_attributes(self.g, 'type').values()) #get unique groups
mapping = dict(zip(sorted(groups), count()))
colors = [mapping[self.g.nodes[n]['type']] for n in self.g.nodes()]
pos = dict((n, n) for n in self.g.nodes())
plt.figure()
plt.title(title)
nx.draw_networkx(self.g, pos=pos, with_labels=False, node_color=colors, node_size=size)
plt.show()
plt.savefig(title+'.png', fontsize=30)
def communities_graph(self):
G = nx.Graph()
G.add_nodes_from(self.g)
for node in self.g.nodes():
type_node = self.g.nodes[node]['type']
for n in self.g.neighbors(node):
if self.hasSameType(n, type_node) and type_node != 0:
G.add_edge(node, n)
return nx.number_connected_components(G)
def isEmpty(self, node):
return self.g.nodes[node]['type'] == 0
def hasSameType(self, node, type):
return self.g.nodes[node]['type'] == type
def ratio_happiness(self, node):
""" compute ratio of happiness of 'node' """
empty=[]; same=[]
type_node = self.g.nodes[node]['type']
tot=0
for n in self.g.neighbors(node):
tot += 1
if self.isEmpty(n):
empty.append(n)
if self.hasSameType(n, type_node):
same.append(n)
tot_empty = len(empty)
tot_same = len(same)
if tot_empty == tot:
if self.isEmpty(node):
return 1.0
return 0.0
return tot_same / (tot-tot_empty) def isHappy(self, node):
""" check if 'node' is happy by comparing its ratio of happiness to its preference """
preference = self.g.nodes[node]['preference']
return self.ratio_happiness(node) >= preference def meanHapinessSociety(self):
""" return the ratio of happiness averaged over all nodes of the network """
sum = 0
for n in self.g.nodes(): sum += self.ratio_happiness(n)
return sum / len(self.g)
def iteration(self):
""" run one iteration of Schelling's model which in unhappy nodes
are affected to empty positions within the network in a random manner
"""
#1. find all unhappy anf empty nodes within the network
empty=[]; unhappy=[]
for n in self.g.nodes():
if self.isEmpty(n):
empty.append(n)
if not self.isHappy(n):
unhappy.append(n)
self.total_unhappy = len(unhappy)
np.random.shuffle(unhappy)
np.random.shuffle(empty)
#2. swap nodes (and their attributes type and preferences)
total_swap = min(self.total_unhappy, self.total_empty)
for i in range(total_swap):
tmp = self.g.nodes[unhappy[i]]['type']
self.g.nodes[unhappy[i]]['type'] = self.g.nodes[empty[i]]['type']
self.g.nodes[empty[i]]['type'] = tmp
def algo(self, threshold_hapiness=0.01, threshold_convergence=100):
""" run algorithm of Schelling's model """
iter=0; iter_conv=0; previous=0
while self.total_unhappy / self.total_nodes > threshold_hapiness \
and iter_conv < threshold_convergence:
if previous == self.total_unhappy / self.total_nodes:
iter_conv += 1
else:
iter_conv = 0
iter += 1
previous=self.total_unhappy / self.total_nodes
self.iteration()
return iterdef fig():
# type_graph='grid' pour Fig 3
# type_graph='small-world' pour Fig 5
area = Area(N=50,
types=[0, 1, 2],
types_prob=[0.1, 0.45, 0.45],
preference=0.3,
type_graph='grid',
r=2)
area.draw_graph('Configuration initiale')
for pref in 0.3, 0.5, 0.7:
area.init_graph(pref)
area.algo()
area.draw_graph('Preference '+str(pref*100)+'%')
Plusieurs pages web proposent une simulation du modèle de Schelling dans sa configuration initiale (grille). Citons par exemple :
- http://ncase.me/polygons/ : Simulations riches et interactives développées par Vi Hart et Nicky Case.
- http://nifty.stanford.edu/2014/mccown-schelling-model-segregation/ : Simulation du professeur Frank McCown de Harvard, proposée dans sa page personnelle.
L’écriture de ce post vient à la suite de la lecture d’autres approches sur internet qui ont implémenté le modèle de Schelling, bien que leurs codes soient différents du nôtre, il est important de les citer afin d’apprécier les différentes manières d’implémentation : lien1, lien2, lien3, et lien4.
Références bibliographiques.
Easley, David, and Jon Kleinberg. 2010. Networks and markets (Vol. 8). Cambridge: Cambridge university press :
Ce livre allie théorie des graphes, théorie des jeux et applications économiques. L’avantage du livre est d’être accessible pour les non-spécialistes du domaine et assez pédagogique. Le modèle de Schelling est présenté dans le chapitre 4.
Jamelle Bouie. 14 Avril 2020. Article du « The New York Times » intitulé « Why Coronavirus Is Killing African-Americans More Than Others » disponible sur le Lien.
Schelling, Thomas C. 1969. Models of segregation. The American Economic Review, 59(2), pp.488–493.
Jackson, Matthew O. 2019. The Human Network: How Your Social Position Determines Your Power, Beliefs, and Behaviors. Pantheon.
Milgram, Stanley. 1967. The small world problem. Psychology today, 2(1), pp.60–67.
Watts, Duncan J., and Steven H. Strogatz. 1998. Collective dynamics of ‘small-world’networks. nature, 393(6684), p.440.
Kleinberg, Jon. 2000, May. The small-world phenomenon: An algorithmic perspective. In Proceedings of the thirty-second annual ACM symposium on Theory of computing (pp. 163–170).