Recruter un doctorant en thèse CIFRE

Quels bénéfices pour le Conseil Départemental de la Loire ?

Auteur·rice

Frédéric Cuissinat

Date de publication

22 septembre 2025

Astuce

En cliquant sur le bouton </> Code en haut à droite de cette page, vous pourrez visualiser l’intégralité du script que j’ai écrit pour réaliser ce document (y compris les calculs masqués).

Afficher le code
# définition du répertoire de travail
setwd( dir = "/home/frederic/Bureau/CIFRE/bénéfices_thèse_CIFRE/" )


##############################################################################
# traitement des librairies
##############################################################################


# énumération des librairies nécessaires
liste_librairies <- c( "car", "data.table", "gmodels", "scales" )

# création d"une fonction installant et/ou chargeant une librairie
installer.charger.librairie <- function ( nom_librairie ) {
  # chargement de la librairie et si pas déjà installée sur la machine alors installation
  if ( !( require( nom_librairie, character.only = TRUE ) ) ) {
    # si librairie absente alors installation
    install.packages( nom_librairie,
                      dependencies = TRUE,
                      clean = TRUE)
    }
  # puis chargement de la librairie nouvellement installée
  library( nom_librairie,
           character.only = TRUE )
}

# appliquer la fonction installer.charger.librairie() à liste_librairies
lapply( X = liste_librairies,
        FUN = installer.charger.librairie )

1 Terminologie

En cours de lecture, vous allez rencontrer les termes suivants :

  • Thèse de doctorat : Formation à la recherche par la recherche dans le but d’obtenir un diplôme de niveau 8 (Bac + 8), c.à.d. une formation pratique au métier de chercheur (dans le cas présent celui de chercheur en sciences sociales).

  • CIFRE : Acronyme de Convention industrielle de formation par la recherche. Convention tripartite permettant à un doctorant de mener à bien une mission de recherche scientifique en entreprise dans le cadre de sa thèse de doctorat.

  • Statistique inférentielle : sous-domaine de la statistique qui vise à connaître les caractéristiques d’une population lorsque l’on ne dispose que d’un échantillon de cette population.

  • Apprentissage automatique (en anglais : machine learning) : sous domaine de l’intelligence artificielle rassemblant des techniques permettant à un ordinateur d’identifier en toute autonomie des caractéristiques communes dans un jeu de données parfois volumineux (big data) et d’effectuer des prédictions.

  • R, SQL et Markdown : langages de programmation gratuits destinés, respectivement, à l’analyse statistique, l’exploitation de certaines bases de données et l’écriture de documents reproductibles.

Quel est le lien entre ces éléments ?

Le doctorant utilisera ceci … :

Lee, S., Ju, E., Woo Choi, S., Lee, H., Bo Shim, J., Hwan Chang, K., Hyeon Kim, K., & Yong Kim, C. (2019). Prediction of Cancer Patient Outcomes Based on Artificial Intelligence. In Artificial Intelligence - Scope and Limitations. IntechOpen. https://doi.org/10.5772/intechopen.81872

… pour mener à bien cela :

okaydoc.fr. (2024, 5 Mars). Thèse CIFRE : Un dispositif stratégique pour les entreprises. OkayDoc.fr - Connecter l’entreprise et la recherche. https://okaydoc.fr/these-cifre-strategique-pour-entreprises/

2 Bénéfices intemporels.

Le Conseil départemental pourra à tout moment capitaliser sur la thèse lors d’une campagne de communication dans la presse :

  • En mettant en avant l’effort du Conseil départemental dans la modernisation de l’action publique à travers le financement d’une thèse CIFRE portant sur l’utilisation de l’intelligence artificielle au service de l’action sociale.
  • En mettant en avant l’engagement du Conseil départemental dans son action d’aide à l’insertion professionnelle en recrutant un ligérien allocataire du RSA en tant que doctorant en convention CIFRE.

3 Bénéfices à court terme.

  • Réalisation d’un diagnostic situationnel afin d’identifier un problème concret auquel le Conseil départemental est confronté (restitution sous la forme d’une note de synthèse).
  • Caractérisation des enjeux liés à la résolution du problème (restitution sous la forme d’une note de synthèse).
  • Identification d’une problématique théorique correspondant au problème concret à résoudre (restitution sous la forme d’une note de synthèse).
  • Délimitation du cadre théorique et méthodologique qui pose les fondements de la perspective adoptée pour la résolution du problème (restitution sous la forme d’une note de synthèse).

4 Bénéfices à moyen terme.

  • Recueil et analyse des données (restitution sous la forme d’une note de synthèse).
  • Interprétation et évaluation des résultats (restitution sous la forme d’une note de synthèse).
  • Formulation des limitations et des implications des travaux réalisés ainsi que des recommandations pour de futures recherches (restitution sous la forme d’une note de synthèse).
  • Rédaction d’un manuscrit de thèse exhaustif apportant des éléments de réponse à la problématique qui aura été traitée durant les 3 ans.

5 Bénéfices à long terme.

Au terme des trois années de thèse, le Conseil départemental sera doté :

  • D’un réseaux de contacts au sein du monde universitaire régional et national, voire international.
  • D’un rayonnement international au sein de la fonction publique si la thèse est rédigée en anglais.
  • D’une petite bibliothèque scientifique composée des différents ouvrages scientifiques acquis au cours des trois années de thèse.
  • D’un ordinateur équipé des logiciels R et RStudio (tous deux gratuits).
  • De la totalité des fichiers contenant les commandes écrites dans les langages de programmation R et SQL.

Si, de surcroît, le docteur est recruté pour mener à bien de nouveaux projets de recherche, le Conseil départemental disposera :

  • D’un Crédit impôt recherche (CIR) qui peut représenter jusqu’à 120% du salaire chargé du chercheur pendant 24 mois.
  • D’un chercheur acculturé aux problématiques du Conseil départemental et disposant et de compétences techniques en statistiques, informatique et méthodologique en recherche quantitative qui sera en mesure :
    • D’identifier les problèmes qui peuvent, tout ou partie, résolus par des techniques statistiques ou d’apprentissage automatique (machine learning) dans le respect des contraintes techniques, légales et éthiques.
    • De formaliser ces problèmes pratiques sous forme de problématiques théoriques.
    • D’identifier les algorithmes classiques appropriés aux objectifs de recherche.
    • D’implémenter ces algorithmes afin de créer des modèles théoriques permettant de mieux appréhender la réalité.
    • D’évaluer les performances de chacun de ces modèles et d’identifier les modèles plus performants.
    • D’expliquer simplement le fonctionnement des algorithmes mis en oeuvre ainsi que les modèles produits.
    • D’utiliser ces modèles à des fins de prédiction ou de profilage dans le but d’optimiser les politiques publiques.

6 Cas d’usage.

Voici un exemple concret du type d’aide à la décision qu’un chercheur peut apporter aux fonctionnaires en charge de l’insertion professionnelle.

L’un des chercheurs du Département du Travail et des Retraites du gouvernement britannique à publié en 2013 les résultats d’une étude de faisabilité de la catégorisation des demandeurs d’emploi à l’aide de l’apprentissage automatique (machine learning) afin d’estimer la probabilité qu’un demandeur d’emploi devienne un chômeur de longue durée. Le rapport est disponible en libre accès ici.

7 Compétences techniques transférables.

Vous trouverez ci-dessous un très bref survol des compétences techniques que le doctorant utilisera pour ses travaux de recherche lors des 3 années de thèse CIFRE et qui seront immédiatement transférables au sein du pôle Vie sociale après obtention du doctorat.

Afin de garder en concision et compréhensibilité :
  1. L’intégralité des calculs qui doivent être normalement réalisés avant, pendant, et après chaque technique n’a pas été effectuée.
  2. Les calculs qui ont été réalisés et leurs résultats sont masqués.
  3. L’emploi du jargon technique est réduit au strict minimum.

7.1 Les données.

Les exemples s’appuient sur l’analyse d’un jeu de données réelles issues du recensement de la population ligérienne en 2021.

Les données ainsi qu’une description complète des variables sont gracieusement mises à disposition en libre accès sur cette page du site de l’INSEE.

Sur les 92 variables du jeu de données d’origine, seules celles mentionnées ci-après ont été utilisées :

  • AGEREV : Âge en années révolues
  • DIPL : Diplôme le plus élevé
  • IMMI : Situation quant à l’immigration
  • NBPI : Nombre de pièces du logement
  • RECH : Ancienneté de recherche d’emploi
  • SEXE : Sexe
  • VOIT : Nombre de voitures du ménage

De plus, deux variables fictives crées par tirages aléatoires ont été ajoutées :

  • FRAU : Situation quant au fait d’avoir déjà fraudé l’un des services de l’état
  • MONT : Montant estimé du préjudice de la fraude
Afficher le code
##############################################################################
# chargement des données
##############################################################################


# définition du chemin d'accès aux données
chemin <- "/home/frederic/Bureau/projets/CD42/RP2021_indcvize/FD_INDCVIZE_2021.csv"

# chargement de seulement certaines données du jeu de données originel
# !!!!!!!! Attention  !!!!!!!!
# taille du fichier CSV originel : 1GB (table de 4,2 millions de lignes et 92 colonnes)
recensement_region_AURA_2021 <- fread( chemin,
                                       select = c("AGEREV", "DEPT", "DIPL", "IMMI", "IPONDI", "NBPI", "RECH", "SEXE", "VOIT"),
                                       colClasses = c("AGEREV" = "integer",
                                                      "DEPT" = "character",
                                                      "DIPL" = "factor",
                                                      "IMMI" = "factor",
                                                      "IPONDI" = "numeric",
                                                      "NBPI" = "factor",
                                                      "RECH" = "factor",
                                                      "SEXE" = "factor",
                                                      "VOIT" = "factor") )

# selection des seuls individus domiciliés dans la Loire
recensement_loire_2021 <- recensement_region_AURA_2021[ DEPT == "42", ]

# suppression de la variable DEPT de la table recensement_loire_2021
recensement_loire_2021[ , DEPT := NULL ]

# suppression de la table recensement_population_region_AURA_2021 devenue superflue
rm(recensement_region_AURA_2021)

# déclenchement du ramasse miettes
gc()


##############################################################################
# data engineering
##############################################################################

# simplication des modalités de certaines variables
recensement_loire_2021[ RECH == "1" | RECH == "2", RECH := "recherche un emploi" ]
recensement_loire_2021[ RECH == "0" | RECH == "9" | RECH == "Z" , RECH := "ne recherche pas un emploi" ]
recensement_loire_2021[ VOIT == "Z", VOIT := NA ]
recensement_loire_2021[ NBPI == "ZZ", NBPI := NA ]
recensement_loire_2021[ DIPL == "ZZ", DIPL := NA ]
recensement_loire_2021[ NBPI == "YY", NBPI := NA ]

# élimination des modalités devenues superflues dans les variables qualitatives
recensement_loire_2021 <- droplevels( recensement_loire_2021 )

# modification du type de certaines variables
recensement_loire_2021[ , NBPI := as.integer(NBPI) ]
recensement_loire_2021[ , VOIT := as.integer(VOIT) ]

# fixation de la graine du générateur de nombres pseudo-aléatoires
set.seed( seed = 8 )

# création de la variable FRAU (Situation quant au fait d'avoir déjà fraudé l'un des services de l'état)
recensement_loire_2021[ , FRAU := rep( x = "0",
                                       times = nrow(recensement_loire_2021)) ]

# remplissage de le variable FRAU  par tirages aléatoires avec un biais en faveur des personnes qui recherchent un emploi
# un peu plus de fraudeurs chez les personnes qui ne recherchent pas d'emploi que chez celles qui en cherchent pas
recensement_loire_2021[ RECH == "recherche un emploi", FRAU:= sample( x = c("jamais fraudé", "déjà fraudé"),
                                                                      size = nrow( recensement_loire_2021[ RECH == "recherche un emploi", ] ),
                                                                      replace = TRUE,
                                                                      prob = c(0.97, 0.03) ) ]

recensement_loire_2021[ RECH == "ne recherche pas un emploi", ]$FRAU <- sample( x = c("jamais fraudé", "déjà fraudé"),
                                                                               size = nrow( recensement_loire_2021[ RECH == "ne recherche pas un emploi", ] ),
                                                                               replace = TRUE,
                                                                               prob = c(0.964, 0.036) )

# passage de ka variable FRAU en variable de type factor
recensement_loire_2021[ , FRAU := as.factor(FRAU) ]

# création de la variable MONT (Montant estimé du préjudice)
recensement_loire_2021$MONT <- fifelse( recensement_loire_2021$FRAU == "déjà fraudé",
                                        yes = runif (n = nrow( recensement_loire_2021 ),
                                                     min = 100,
                                                     max = 100000),
                                        no = 0 )

# élimination des observations ayant des données manquantes
sans_NA <- na.omit( recensement_loire_2021 )

7.2 Question n°1.

Y a-t-il plus de fraudeurs parmi les personnes en recherche d’emploi que parmi les personnes qui ne recherchent pas d’emploi (ex: déjà en emploi, étudiants, retraités, …) ?

Afficher le code
# définition des hypothèses : 
# - hypothèse nulle H0 : les proportions sont identiques dans la population visée.
# - hypothèse alternative H1 : les proportions sont différentes dans la population visée.

# vérification des conditions d’application du khi-2 d'homogénéité
CrossTable( recensement_loire_2021$RECH,
            recensement_loire_2021$FRAU,
            digits = 1,
            prop.r = FALSE,
            prop.t = FALSE,
            prop.c = FALSE,
            prop.chisq = FALSE,
            expected = TRUE )

# réalisation du test
res_khi_2 <- CrossTable( recensement_loire_2021$RECH,
                         recensement_loire_2021$FRAU,
                         prop.t = FALSE,
                         prop.c = FALSE,
                         prop.chisq = FALSE,
                         expected = TRUE,
                         fisher  = TRUE )

# mise en forme de la proportion de fraudeurs parmi les personnes en recherche d'emploi dans l'échantillon
prop_frau_rech <- round( res_khi_2$prop.row[ 1, 1 ] * 100,
                         digits = 2 )

# mise en forme de la proportion de fraudeurs parmi les personnes qui ne recherchent pas d'emploi dans l'échantillon
prop_frau_non_rech <- round( res_khi_2$prop.row[ 2, 1 ] * 100,
                             digits = 2 )

# affichage de la valeur p
valeur_p_khi_2 <- res_khi_2$chisq$p.value

# calcul de la proportion des ligériens qui n'ont jamais fraudé.
deja_fraude_42<- round( prop.table( table( sans_NA$FRAU ) ) * 100, digits = 1)[1] |> unname()

# calcul de la proportion des ligériens qui ont déjà fraudé.
jamais_fraude_42 <- round( prop.table( table( sans_NA$FRAU ) ) * 100, digits = 1)[2] |> unname()

# calcul de la proportion des ligériens qui recherchent un emploi
recherche_emploi_42 <- round( prop.table( table( sans_NA$RECH ) ) * 100, digits = 1)[1] |> unname()

# calcul de la proportion des ligériens qui ne recherchent pas un emploi
recherche_pas_emploi_42 <- round( prop.table( table( sans_NA$RECH ) ) * 100, digits = 1)[2] |> unname()

# calcul de la proportion de fraudeurs par statut de recherche d'emploi.
jamais_fraude_recherche_emploi_42 <- round( prop.table( table ( sans_NA$RECH, sans_NA$FRAU ) ) *100, digits = 1)[3]
jamais_fraude_recherche_pas_emploi_42 <-  round( prop.table( table ( sans_NA$RECH, sans_NA$FRAU ) ) *100, digits = 1)[4]
deja_fraude_recherche_emploi_42 <- round( prop.table( table ( sans_NA$RECH, sans_NA$FRAU ) ) *100, digits = 1)[1]
deja_fraude_recherche_pas_emploi_42 <- round( prop.table( table ( sans_NA$RECH, sans_NA$FRAU ) ) *100, digits = 1)[2]

7.2.1 Proportion de fraudeurs.

  • 96.5% des ligériens n’ont jamais fraudé.
  • 3.5% des ligériens ont déjà fraudé.

Les mêmes éléments en graphique :

Afficher le code
# affichage d'un diagramme en barre de la variable FRAU
barplot( round( prop.table( table( sans_NA$FRAU ) ) * 100, digits = 1),
         main = "Proportion de fraudeurs dans la Loire",
         names.arg = c("déjà fraudé", "jamais fraudé"),
         ylab = "en %",
         ylim = c(0, 100),
         col = brewer_pal( type = "qual", palette = "Paired" )( 12 )[ c(6, 4) ] )

7.2.2 Proportion de personnes en recherche d’emploi.

  • 6.8% des ligériens recherchent un emploi.
  • 93.2% des ligériens ne recherchent pas un emploi.

Les mêmes éléments en graphique :

Afficher le code
# affichage d'un diagramme en barre de la variable RECH
barplot( round( prop.table( table( sans_NA$RECH ) ) * 100, digits = 1),
         main = "Proportion de personnes en recherche d'emploi dans la Loire",
         names.arg = c("recherche un emploi", "ne recherche pas un emploi"),
         ylim = c(0, 100),
         ylab = "en %",
         col = brewer_pal( type = "qual", palette = "Paired" )( 12 )[ c(4, 6) ] )

7.2.3 Proportion de fraudeurs par statut de recherche d’emploi.

  • 6.6% de ligériens qui recherchent un emploi et qui n’ont jamais fraudé.
  • 0.2% de ligériens qui recherchent un emploi et qui ont déjà fraudé.
  • 89.9% de ligériens qui ne recherchent pas un emploi et qui n’ont jamais fraudé.
  • 3.3% de ligériens qui ne recherchent pas un emploi et qui ont déjà fraudé.

Les mêmes éléments en graphique :

Afficher le code
# affichage d'un diagrammen en mosaïque 
mosaicplot( x = table ( sans_NA$RECH, sans_NA$FRAU ),
            main = "Proportions de fraudeurs par statut de recherche d'emploi",
            xlab = "en %",
            ylab = "en %",
            color = brewer_pal( type = "qual", palette = "Paired" )( 12 )[ c(6, 4) ] )

N’en concluez surtout pas :
  1. Qu’il y a très exactement 3.13% de fraudeurs parmi les personnes en recherche d’emploi et 3.56% de fraudeurs parmi celles qui ne recherchent pas d’emploi dans la Loire.
  2. Que ces proportions sont aussi a peu près équivalentes au niveau de l’ensemble de la population ligérienne.

Pourquoi ?

Parce que le jeu de données dont on dispose n’est qu’un échantillon de la population ligérienne et non pas l’ensemble de la population ligérienne.

Donc, d’une part, Il est strictement impossible de connaître les proportions exactes dans l’ensemble de la population ligérienne.

Et d’autre part, pour savoir si ces proportions sont a peu près égales au niveau de l’ensemble de la population ligérienne, il est nécessaire de recourir à la statistique inférentielle.

Conclusion :

Après avoir réalisé le test statistique approprié, il apparaît que, dans l’ensemble de la population ligérienne, il y a moins de fraudeurs parmi les personnes en recherche d’emploi que parmi celles qui n’en recherchent pas.

7.3 Question n°2.

Quelles sont les variables qui sont le plus fortement liées au fait d’avoir déjà fraudé un service de l’état ?

Afficher le code
# fixation de la graine du générateur de nombres pseudo-aléatoires
set.seed( seed = 8 )

# affichage des modalités des variables 
levels( sans_NA$FRAU )

# modification de la modalité de référence de la variable dépendante
# "l'évènement se produit" doit être en 2ème position
sans_NA$FRAU <- relevel( sans_NA$FRAU, ref = "jamais fraudé" )

# vérification de la prise en compte du changement de la modalité de référence de la variable dépendante
levels( sans_NA$FRAU )

# ajustement du modèle
model_reg_log <- glm( data = sans_NA,
                      family = binomial,
                      formula = FRAU ~ AGEREV + DIPL + IMMI + IPONDI + NBPI + RECH + SEXE + VOIT )

# affichage des résultats du modèles
summary( model_reg_log )

# calcul du % de variance de VD expliquée par VI
pseudo_R2 <- ( model_reg_log$null - model_reg_log$dev ) / model_reg_log$dev

# test d'adéquation du modèle : est-il bien ajusté ?
# p-value = 1 est supérieure à 0.05
# H0 (modèle bine ajustée) non rejetée
adequation <- 1 - pchisq( model_reg_log$dev, 
                          model_reg_log$df.residual )

# résultat général de la régression logistique binomiale
res_reg_log <- Anova( model_reg_log,
                      test = "Wald" )

# calcul de la taille et du sens des effets
sens_taille_effets <- exp( cbind( OR = coef( model_reg_log ),
                                  confint( model_reg_log ) ) )

Conclusion :

Il apparaît :

  • Qu’une variable est significativement liée au fait d’avoir déjà fraudé un service de l’état, à savoir La situation quant à la recherche d’emploi.
  • Que le lien entre le fait d’avoir déjà fraudé un service de l’état et deux autres variables est plus tendancieux (à vérifier avec de plus amples investigations) : le niveau de diplôme et le sexe d’une personne.

En l’état actuel, toutes choses égales par ailleurs :

  • Les personnes qui ne recherchent pas un emploi auraient 1.13 plus de chances d’être des fraudeurs que les personnes qui recherchent un emploi.

7.4 Question n°3.

Imaginons qu’une autre personne vienne d’emménager dans la Loire et qu’elle ait les caractéristiques suivantes :

  • Age : 51 ans
  • Plus haut diplôme : doctorat de sciences de gestion
  • Situation quant à l’immigration : non immigré
  • Nombre de pièces du logement : 1
  • En recherche d’emploi : oui
  • Sexe : masculin
  • Nombre de voitures du ménage : 0

Quelle est la probabilité que ce nouvel habitant est déjà fraudé l’un des services de l’état ?

Afficher le code
# énumération des caractéristiques du nouvel arrivant
nouveau_1 <- list( AGEREV = 51, 
                   DIPL = "19",
                   IMMI = "2",
                   IPONDI = 0.001,
                   NBPI = 3,
                   RECH = "recherche un emploi",
                   SEXE = "1",
                   VOIT = 1 )

# calcul de la probabilité que ce nouvel arrivant soit un fraudeur
proba_fraudeur_1 <- round( predict( model_reg_log,
                                    newdata = nouveau_1,
                                    type = "response" ) * 100,
                           digits = 2 ) |> unname()

Conclusion :

La probabilité que ce nouvel habitant est déjà fraudé l’un des services de l’état est de 1.93%.

7.5 Question n°4.

Maintenant, imaginons que cette même personne possède beaucoup plus de véhicules qu’à la question précédente :

  • Age : 22 ans
  • Plus haut diplôme : CAP
  • Situation quant à l’immigration : immigré
  • Nombre de pièces du logement : 6
  • En recherche d’emploi : oui
  • Sexe : féminin
  • Nombre de voitures du ménage : 5
Afficher le code
# ajustement du modèle
model_reg_lin <- glm( data = sans_NA,
                      formula = MONT ~ AGEREV + DIPL + IMMI + IPONDI + NBPI + RECH + SEXE + VOIT )

# énumération des caractéristiques du nouvel arrivant
nouveau_2 <- list( AGEREV = 22, 
                   DIPL = "13",
                   IMMI = "1",
                   IPONDI = 1000,
                   NBPI = 6,
                   RECH = "recherche un emploi",
                   SEXE = "2",
                   VOIT = 5 )

# calcul de la probabilité que ce nouvel arrivant soit un fraudeur
proba_fraudeur_2 <- round( predict( model_reg_log,
                                    newdata = nouveau_2,
                                    type = "response" ) * 100,
                           digits = 2 ) |> unname()

# calcul du montant estimé du préjudice de la fraude
montant_estime <- round( predict( model_reg_lin,
                                  newdata = nouveau_2 ) * 100,
                         digits = 0 )  |>
  unname() |> 
  format(scientific = FALSE, 
         big.mark = ',')

Compte tenu des caractéristiques de cette personnes, on pourrait être tenté de penser qu’il y a une forte probabilité que cette personne ait déjà fraudé l’un des services de l’état.

Auquel cas, pourrait-on prédire le montant estimé du préjudice de sa fraude ?

Conclusion :

La probabilité que cette personne ait déjà fraudé l’un des services de l’état est de 100%.

Le montant estimé du préjudice de sa fraude est de 4,828,776 €.