Le marché du travail salarié en Belgique : une analyse réseau (partie 1/3)

Le marché du travail nécessite partout une attention constante de la part des autorités. Cette attention ne peut se faire qu’en ayant une connaissance descriptive approfondie du secteur, raison pour laquelle de nombreuses analyses statistiques sont faites en permanence dans ce domaine (ONSS, Statbel, SPF Emploi, Actiris…). Si ces analyses sont incontournables, nous avons montré dans nos précédents blogs [à propos de Facebook : 1, 2, à propos de la lutte contre fraude : 3, 4] à quel point un type particulier d’analyse – l’analyse réseau – pouvait apporter un nouvel éclairage particulièrement intéressant. Dans une série de trois articles, nous allons montrer toute la puissance offerte par l’analyse des réseaux, en symbiose avec les bases de données orientées graphes, dans une large gammes d’observations, qui se veulent complémentaires des analyses statistiques classiques.

Dans notre travail au quotidien pour notre principal partenaire, l’Office National de la Sécurité Sociale belge, nous sommes amenés à traiter un certain nombre de bases de données, dont celle de Dimona (Déclaration Immédiate/Onmiddellijke Aangifte), application auprès de laquelle chaque employeur (y compris les administrations) en Belgique doit déclarer, au plus tard le jour de son engagement, quel salarié il compte employer, pour quelle période et pour quel type de travail. Il s’agit donc des travailleurs salariés et pas des indépendants.

Ce type de données se prête particulièrement bien à une modélisation de réseau : nous avons deux types de nœuds ou entités (travailleurs et employeurs), et des relations entre ces nœuds, correspondant aux déclarations. Dans le cas présent, une relation connectera toujours un travailleur et un employeur (et jamais deux travailleurs ou deux employeurs) : on parlera donc d’un réseau (ou graphe) biparti.

Disclaimer : il s’agit ici d’un exemple d’analyse rapide menée par un “data scientist”, spécialiste de l’analyse réseau, et pas d’un spécialiste du monde du travail ou de l’économie. Il ne s’agit en rien d’une analyse menée par ou pour l’ONSS.

Données et modèle

Pour les besoins de notre analyse, nous avons créé un modèle (anonymisé et simplifié) d’une partie de la base de données de Dimona dans une base de données orientée graphe (Neo4j). Les requêtes “Cypher”, langage d’interrogation de Neo4j, seront visibles optionnellement en cliquant sur les liens adéquats (cliquer ici pour tout ouvrir).

La base de données de production de Dimona est une base de données Oracle, comportant principalement trois tables : une décrivant les employeurs, une décrivant les travailleurs, et une pour les déclarations, correspondant à la relation entre un employeur et un travailleur. Sont également inclus les contrats d’intérim. Les deux premières tables nous permettront de créer les entités, la dernière les relations.

Pour les employeurs, nous gardons la province de son siège social, ainsi que son code NACEBEL de premier niveau, lettre entre A et U décrivant le code d’activité principale de la société. Cette liste est donnée dans la table ci-dessous, chaque société peut en avoir un ou plusieurs.

Liste des codes NACEBEL

A Agriculture, sylviculture et pêche
B Industries extractives
C Industrie manufacturière
D Production et distribution d’électricité, de gaz, de vapeur et d’air conditionné
E Production et distribution d’eau; assainissement, gestion des déchets et dépollution
F Construction
G Commerce; réparation de véhicules automobiles et de motocycles
H Transports et entreposage
I Hébergement et restauration
J Information et communication
K Activités financières et d’assurance
L Activités immobilières
M Activités spécialisées, scientifiques et techniques
N Activités de services administratifs et de soutien
O Administration publique
P Enseignement
Q Santé humaine et action sociale
R Arts, spectacles et activités récréatives
S Autres activités de services
T Activités des ménages en tant qu’employeurs; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre
U Activités extra-territoriales

Pour les travailleurs, nous utiliserons principalement la nationalité, et la nature du numéro national : chaque citoyen a besoin, pour pouvoir travailler en Belgique, d’un numéro d’identification de la sécurité sociale (NISS), parfois appelé “numéro national“. Lorsqu’un travailleur étranger arrive en Belgique, il se voit attribuer un numéro temporaire (numéro BIS), jusqu’à ce que sa situation soit considérée comme permanente (il reçoit alors le cas échéant un numéro NISS comme chaque citoyen Belge).

Concernant les relations, nous considérons les dates de début et, si elle est définie, de fin. Les déclarations concernant des contrats à durée indéterminée, tant qu’ils ne sont pas terminés, n’ont pas de fin renseignée dans Dimona. Nous gardons également  un “worker code”, code donné par l’administration indiquant un certain nombre de catégories. En voici quelques exemples :

  • STU : travailleurs étudiants
  • BCW : travailleurs du secteur de la construction (Build & Construction Workers)
  • EXT : travailleurs occasionnels
  • IVT : travailleurs en formation (Individual vocational training)
  • OTH : autres

Nous avons considéré les relations de 2003 à 2017, ce qui nous fait une période de 15 ans. Nous avons donc ignoré les déclarations avec une date de fin d’activité antérieure au 1er janvier 2003, ou une date de début supérieure au 31 décembre 2017. Nous avons donc des relations ayant commencé avant 2003, mais ayant une date de fin après début 2003, ou pas de date de fin. Remarquons que la déclaration Dimona ne précise pas le régime de travail (temps plein ou temps partiel).

Pour les contrats d’intérim, on considère dans le modèle que l’employeur est la société où s’effectue le travail, et pas l’agence d’intérim.

Dans l’image ci-dessous, on considère un travailleur A, de nationalité française, ayant travaillé, comme apprenti (Worker code: IVT), auprès de l’entreprise B, de 2015 à 2017. Il y a été collègue avec C, Belge, qui y a d’abord travaillé les 3 premiers mois de 2015 comme étudiant, puis jusqu’à fin 2016 avec un contrat normal, avant de changer d’employeur pour aller travailler dès début 2017 auprès de D. B est une société ICT (NACE: J), et D un société commerciale (NACE: G).

Comptage

Une première analyse simple que l’on peut faire sur le graphe (ou réseau) décrit ci-dessus consiste à compter les nœuds qui le compose. On peut dans un premier temps compter les nœuds, en distinguant bien sûr les nœuds “Travailleurs” des nœuds “Employeurs”. On trouve, dans Dimona :

  • 7 828 000 travailleurs
  • 645 634 employeurs

Requêtes Cypher

Nombre de travailleurs :

MATCH (n:People)
RETURN COUNT(n)

Nombre de sociétés/employeurs :

MATCH (n:Company)
RETURN COUNT(n)

Ce comptage reprend cependant la totalité des travailleurs et employeurs présent dans Dimona, même s’ils n’ont jamais travaillé ou engagé, ou s’ils ne l’ont plus fait depuis le début de la période que l’on considère (2003-2017). On peut s’intéresser au nombre de nœuds ayant ou moins une relation (c’est-à-dire les nœuds avec un degré supérieur ou égal à un, le degré d’un nœud désignant le nombre de relations auxquelles il est connecté), ce qui correspond aux travailleurs ayant eu un emploi durant la période, peu importe sa durée, ou aux employeurs ayant engagé du personnel :

  • 7 604 515 travailleurs
  • 611 646 employeurs

Requêtes Cypher

Nombre de travailleurs avec au moins une relation :

MATCH (n:People)--()
RETURN COUNT(DISTINCT n)

Nombre de sociétés/employeurs avec au moins une relation :

MATCH (n:Company)--()
RETURN COUNT(DISTINCT n)

Comme expliqué plus haut, les relations ont un certain nombre d’attributs, dont les dates de début et de fin. On peut donc aisément compter les travailleurs ayant eu (au moins) un employeur durant un période déterminée [a, b]. Ils doivent donc avoir une relation dont :

  • la date de début est inférieure ou égale à ‘b’ ;
  • la date de fin est supérieure ou égale à ‘a’ ou bien nulle (pour les contrats à durée indéterminée).

Nous comptons alors :

  • 4 918 234 employés pour l’année 2017 (même pour un jour) ;
  • 4 334 252 employés durant le mois de décembre 2017 ;
  • 4 276 094 employés au 1er décembre 2017.

Requêtes Cypher

MATCH (n:People)-[r]-()
WHERE r.START <= $end_period AND (r.END IS NULL or r.END >= $start_period)
return count(DISTINCT n) as nb_people

Ce comptage peut être fait mois par mois, et donner le graphique suivant :

Remarquez que le graphique n’a pas “0 travailleurs” comme base : cela permet de mieux observer la variabilité, mais peut quelque peu tromper l’impression de croissance. Le nombre de travailleurs est passé de 3.46 millions (janvier 2003), à 4.33 millions (décembre 2017), soit une progression de 25 %. En cliquant sur le graphique, vous obtiendrez une version démarrant à 0.

On constatera l’aspect périodique du tracé, avec un pic à chaque mois d’août. On peut, en décomposant les travailleurs en fonction du “worker code” de leur relations, obtenir le graphique suivant, qui montre que l’essentiel de la périodicité est imputable jobs étudiants (worker code STU), massivement disponibles en juillet et août, nettement moins durant le reste de l’année. La croissance globale est, elle, due à la croissante des relations “OTH”, largement majoritaires. On observe également une périodicité dans les emplois occasionnels (“EXT”), beaucoup exploités dans le tourisme, ou dans la collecte des fruits, deux secteurs plus actifs en été.

Notons qu’il s’agit du nombre de personnes ayant travaillé chaque mois : rien ne dit qu’ils ont travaillé tout le mois. Il se peut que le temps de travail global ait diminué, mais qu’il ait été réparti sur plus de travailleurs.

Degré

Dans un graphe, le degré d’un nœud est défini comme étant le nombre de relations liées à ce nœud. Une variante consiste à considérer le nombre de voisins au lieu du nombre de relations, ce qui peut différer s’il peut exister plusieurs arcs entre deux nœuds, typiquement parce qu’un travailleur, pour la même société, a travaillé avec plusieurs type de contrats différents. On parle alors de multi-graphe.

On va considérer ci-dessous cette seconde définition : le degré d’un travailleur indique donc le nombre de ses employeurs, et le degré d’un employeur indique le nombre de ses travailleurs.

Les employeurs

Si l’on regarde le nombre d’employés par employeur, on observe les éléments suivants :

  • 136 868 entreprises ont eu, sur les 15 années considérées, uniquement un salarié. Dans de nombreux cas, il s’agit probablement d’indépendants ayant créé leur propre entreprise pour s’y engager, pour des raisons d’optimisation fiscale.
  • 382 728 employeurs ont eu 10 travailleurs ou moins.
  • 3 employeurs ont eu plus de 100 000 travailleurs (il s’agit de deux ministères et d’une grande chaîne de supermarchés).
  • 96 employeurs ont eu plus de 10 000 travailleurs, 1 721 plus de 1 000 travailleurs.
  • En moyenne, les employeurs actifs sur la période ont (eu) 33.56 travailleurs ; 50 % des entreprises ont (eu) 5 travailleurs ou moins (médiane).

Notons qu’il s’agit du nombre total : on ne fait donc pas la différence entre une petite entreprise avec un très grand turn-over et une grande entreprise avec des salariés très fidèles.

Les travailleurs

Si l’on regarde au contraire, le nombre d’employeurs par employé, et en excluant les contrats d’intérim, on observe que 3 123 405 travailleurs n’ont pas changé d’employeurs sur toute la période, soit 43 % de tous les travailleurs actifs durant cette période, et  21 % ont changé une fois d’employeur. Plus de détails dans le graphique ci-dessous :

À l’autre extrémité, toujours en excluant les contrats d’intérim, on observe un travailleur ayant eu … 110 employeurs ! 63 travailleurs ont eu 50 employeurs ou plus, 99% des travailleurs ont eu 11 employeurs ou moins.

Requête Cypher

MATCH (p:People)--(c:Company)
WITH p, COUNT(DISTINCT c) AS nb_emp
WITH nb_emp, count(p) AS nb_pers
RETURN nb_emp, nb_pers
ORDER BY nb_emp ASC

En moyenne, sur les 15 années considérées, les travailleurs belges ont eu 2.59 employeurs différents. Une analyse par “worker code” (non détaillée ici) nous montre que certains secteurs (travail étudiant, travail occasionnel, construction…) génèrent plus de rotation, ce qui, dans certains cas, n’est pas surprenant.

Cumul d’emplois

Si l’on fait le même décompte sur un seul jour, on aura une image du nombre de personnes cumulant plusieurs emplois simultanés : si l’on considère le 1er décembre 2017, 95.7% des travailleurs actifs à cette date n’ont qu’un seul employeur, 3.9 % en ont 2. On trouve encore quelques cas extrêmes : un travailleur a, à la date indiquée, 20 employeurs ; 67 en ont 10 ou plus.

Notons que ces comportement extrêmes sont susceptibles d’intéresser les administrations : il peut bien sûr s’agit de travailleurs “hyperactifs” ; il se peut aussi que les données soient de mauvaise qualité, et qu’une série de fins de contrat n’aient pas été signalées par les employeurs (pour le cas des emplois simultanés). Mais il peut aussi s’agir de comportement frauduleux, lié à de l’emploi fictif.

Requête Cypher

MATCH (p:People)-[r]-(c:Company)
WHERE r.START <= $end_period AND (r.END IS NULL or r.END >= $start_period)
WITH p, count(DISTINCT c) AS nb_emp
WITH nb_emp, count(p) AS nb_pers
RETURN nb_emp, nb_pers
ORDER BY nb_emp ASC

La suite…

Dans les deux prochains blogs, nous continuerons notre analyse du réseau du marché du travail en Belgique. Nous verrons dans un premier temps que l’écrasante majorité des salariés en Belgique sont en fait “collègues de (ex-)collègues de (ex-)collègues”, formant ainsi ce que nous appellerons une composante connexe géante. Nous examinerons les travailleurs et employeurs qui ne font pas partie de la composante géante. Nous verrons également qu’il est possible de détecter des “communautés” dans le réseau, et qu’elles ne sont pas homogènes. Nous verrons également qu’en général, les travailleurs qui changent d’employeur restent dans la même région géographique, et dans le même secteur d’activité.

This entry was posted in Big Data, E-gov and tagged , by Vandy Berten. Bookmark the permalink.
avatar

About Vandy Berten

Consultant Recherche chez Smals depuis mai 2013. Vandy était auparavant Professeur Assistant à l'ULB, où il enseignait les langages de programmation. Il a obtenu une thèse de doctorat dans la même institution en 2007. Il a été d'octobre 2015 à septembre 2018 chargé du cours de "Visualisation des données et de l'information", à l'ULB. Depuis quelques années, s'est spécialisé dans les techniques de Data Science, incluant le "(social) network analytics", le "data quality", le "machine learning", en particulier dans le domaine de la détection de la fraude.

Leave a Reply

Your email address will not be published. Required fields are marked *