Blog

Aborder le recrutement d'ingénieurs comme un problème d'apprentissage automatique

par Jean Laban 16 octobre 2012 | 13 min de lecture

Recruter des ingénieurs logiciels est difficile. Nous le savons tous. Si l'on parvient à surmonter le problème de la recherche et de l'embauche de bons candidats (ce qui est déjà compliqué en soi), la question de savoir si la personne avec qui je discute est suffisamment compétente pour travailler ici reste un casse-tête. Là encore, nous le savons tous. On a beaucoup écrit sur le sujet, ou plutôt, j'imagine, beaucoup réfléchi.

J'ai beaucoup réfléchi aux raisons pour lesquelles le recrutement est si difficile, et pour ce faire, j'ai commencé à l'aborder sous l'angle de l'apprentissage automatique. (Pour vous donner un peu de contexte : j'ai travaillé auparavant au service de lutte contre la fraude d'Amazon.com, où j'ai participé activement au développement des systèmes d'apprentissage automatique complexes utilisés pour identifier les commandes frauduleuses parmi les millions de commandes quotidiennes.) [1] J'ai également interviewé environ quelques centaines de personnes au fil des ans. et je continue de le faire activement pour PagerDuty. )

Alors, pourquoi considérer le recrutement comme un problème d'apprentissage automatique ? En fait, il ne s'agit pas de recourir systématiquement à l'informatique pour résoudre ce problème complexe. Simplement, l'apprentissage automatique est une méthode très formelle pour enseigner aux ordinateurs (qui sont des systèmes très formels) comment exceller dans un domaine précis ; comment devenir expert dans un domaine très spécifique. Comprendre pourquoi le recrutement serait un problème d'apprentissage automatique difficile m'aidera à comprendre pourquoi c'est un problème humain si complexe.

Alors commençons, et plongeons-nous au fur et à mesure dans les bases de l'apprentissage automatique.

Définir le problème

Lors des entretiens d'embauche de candidats en génie logiciel, notre objectif est de les classer en deux catégories : les ingénieurs « aptes à l'embauche » et les ingénieurs « non aptes à l'embauche ». Les ingénieurs « aptes à l'embauche » sont ceux qui, selon nous, possèdent les compétences, l'expérience et la personnalité nécessaires pour réussir dans notre entreprise, tandis que les ingénieurs « non aptes à l'embauche » ne le sont pas.

Donc, ceci est un problème de classification et un autre avec seulement deux classes de sortie. Nous devons construire un modèle ou un classificateur – mentalement, j'imagine – qui prendra en compte des informations sur le candidat interviewé, effectuera des calculs et/ou réfléchira. vraiment Il s'agit de déterminer si nous devrions embaucher cette personne. J'aborderai ce classificateur plus en détail ultérieurement, mais commençons par les données d'entrée nécessaires.

Collecte des données

Une partie extrêmement importante (vraiment la la plupart Un aspect important de la construction d'un classificateur avec l'apprentissage automatique est de disposer de données de qualité et de pouvoir les structurer afin qu'elles puissent servir d'entrées pour entraîner efficacement et sans ambiguïté le classificateur. [2] Nous recueillons ces entrées (ou ensembles de ce que l'on appelle, de manière confuse, « caractéristiques « dans le monde du ML » à la fois pour entraîner notre classificateur, puis plus tard lors de l’évaluation d’un candidat en génie logiciel que nous interviewons.

Quelques fonctionnalités

Alors, quelles sont ces « caractéristiques » que nous recueillons ? Pour le recrutement, il s'agit principalement des réponses aux questions posées au candidat lors de l'entretien. Selon la question, cela peut concerner l'algorithme qu'il a défini, le code qu'il a écrit, le système qu'il a conçu, ou encore un détail d'informatique qu'il a su se rappeler pour répondre. Ainsi, après quelques entretiens téléphoniques et environ cinq entretiens en personne, nous avons recueilli entre 20 et 50 questions (selon la précision des questions posées lors de chaque entretien et ce que l'on considère comme une « question »). On peut donc estimer à quelques dizaines le nombre de caractéristiques par candidat. Ce n'est pas grand-chose, en réalité.

Ces questions d'entretien sont souvent réutilisées. C'est problématique à certains égards : elles peuvent devenir obsolètes avec le temps, et au fil des années, la probabilité qu'un candidat ait déjà répondu à cette question ou à une question similaire posée par un autre candidat augmente. (Il se peut même que le sujet de la question lui-même perde de sa pertinence !) Cependant, la réutilisation des questions est également importante : comment évaluer la pertinence d'une question sans l'avoir posée à plusieurs candidats ? Comment savoir si une mauvaise réponse est révélatrice d'un « mauvais » ingénieur ? En tant qu'humains, nous pouvons faire appel à une certaine intuition, là où les machines échouent probablement, mais je ne compte plus le nombre de fois où j'ai entendu cette remarque après un entretien : « Il n'a pas très bien répondu à cette question, mais je ne l'avais jamais posée auparavant, donc je ne sais pas si elle est trop difficile ou obscure. » [3]

Le modèle

Bien, nous savons maintenant quelles données collecter (nos caractéristiques, ci-dessus) ; alors comment construire notre classificateur pour qu'il puisse prédire correctement qui embaucher et qui ne pas embaucher ?

En apprentissage automatique, l'algorithme de classification utilisé est une partie cruciale et passionnante du processus. Cependant, cet algorithme est aussi l'élément le plus dépendant du fait que l'apprentissage automatique s'effectue sur ordinateur. Pour cet exercice de réflexion, nous n'avons que notre cerveau à notre disposition pour construire ce modèle ; ignorons donc les subtilités des algorithmes de classification existants. Supposons simplement que nous utilisions un algorithme de ce type… Réseau neuronal pour construire notre modèle ici. Une fois construits, ces modèles sont de toute façon à peu près aussi opaques que l'esprit humain. 🙂

Le kit d'entraînement

Alors, comment construit-on concrètement ce classificateur mental ? Eh bien, on l’entraîne à l’aide d’un Ensemble d'entraînement Il s'agit essentiellement de la liste des personnes qui ont répondu à vos questions d'entretien par le passé. Chaque personne interviewée compte comme une « observation » dans cet ensemble.

Pour les recruteurs débutants, cet ensemble d'entraînement peut se limiter à une seule personne : le recruteur lui-même. Ils se diront mentalement : « Je peux répondre à ces questions, donc un bon candidat ingénieur devrait pouvoir y répondre de la même manière. » Cette méthode est surtout efficace pour recruter des personnes qui vous ressemblent trait pour trait. (En termes d'apprentissage automatique, vous êtes…) surapprentissage (Votre modèle.) De plus, êtes-vous sûr que vous auriez pu répondre à cette question aussi bien que vous le pensez si vous ne l'aviez pas formulée vous-même et si vous ne l'aviez pas réfléchie en détail au préalable ?

Malheureusement, même pour les recruteurs expérimentés, l'ensemble d'entraînement reste très restreint. De l'ordre de quelques centaines d'exemples, au mieux. Et, comme nous le verrons plus loin, ces exemples peuvent contenir beaucoup de bruit.

Étiquetage de l'ensemble d'entraînement

Pour chaque échantillon de notre ensemble d'entraînement (c'est-à-dire l'historique d'entretiens d'un recruteur donné), nous devons l'étiqueter comme « aurait été un bon candidat » ou « serait pas « Ce fut un bon recrutement ». C’est très difficile. Plus précisément, nos données mentales comportent de nombreuses erreurs à ce sujet.

Comment créons-nous nos étiquettes ? Nous partons de la prédiction initiale de notre classificateur : avons-nous décidé ou non d’embaucher la personne ? Ensuite, nous devons ajuster ces étiquettes a posteriori en établissant une boucle de rétroaction qui permet à notre modèle d’apprendre de ses erreurs passées. Autrement dit, nous devons corriger toutes les erreurs commises par le passé et déterminer quelles décisions ont été les bonnes. faux positifs et qui étaient faux négatifs Comment procédons-nous ?

faux négatifs

Les faux négatifs sont des personnes que nous avons refusées à l'embauche, mais qui auraient pourtant été de bons employés. Après avoir refusé une candidature, il est quasiment impossible de savoir comment une personne aurait performé au sein de notre entreprise. Les contacts ultérieurs avec ces personnes sont très rares et les interactions ne sont pas celles que l'on entretient avec des collègues. Il est donc très difficile d'intégrer ces informations erronées dans notre perception initiale afin de rectifier notre jugement.

La meilleure façon de procéder, et c'est ce que font de nombreuses entreprises performantes, est de toujours permettre aux candidats initialement refusés de retenter leur chance au processus de recrutement dans un avenir proche. Par exemple, six mois plus tard. Chez PagerDuty, nous appliquons cette méthode, et sur nos onze ingénieurs environ, deux seulement avaient été refusés lors de leur premier entretien !

Cependant, il ne s'agit que d'un faible nombre de faux commentaires négatifs, et il faut un certain temps pour pouvoir les recueillir.

faux positifs

Les faux positifs représentent le type d'erreur inverse : des personnes que nous avons embauchées à tort. À moins d'être très chanceux, vous avez forcément déjà rencontré ce genre de personnes au travail.

Il existe deux catégories de faux positifs : ceux qui ont finalement accepté l’offre d’emploi et ceux qui l’ont refusée. Pour ceux qui ont accepté l’offre, il est très facile d’intégrer cette information à votre processus de recrutement, au fur et à mesure que vous travaillez avec ces personnes (et que vous finissez par les licencier). Pour ceux qui… n'a pas Cependant, si vous acceptez l'offre, vous vous retrouvez confronté à un problème similaire à celui des faux négatifs : vous ne savez pas vraiment s'il s'agissait d'une mauvaise décision d'embauche ou non.

Frais

Lors de la définition des étiquettes « embaucher » ou « ne pas embaucher » dans votre ensemble de formation, il est recommandé de prendre en compte les frais de prendre une mauvaise décision.

Le coût d'un faux positif est considérable : embaucher une personne qui ne correspond pas à votre entreprise peut avoir un impact important sur la qualité de votre produit, sur la productivité des autres membres de l'équipe, sur le calendrier des projets, sur le moral, etc. Cela peut s'avérer désastreux dans certains cas.

Le coût d'un faux négatif se traduit principalement par un coût d'opportunité : nous avons raté l'occasion d'embaucher cet excellent ingénieur. Il est difficile d'évaluer les conséquences de ce recrutement manqué : cela nous aurait-il simplement retardé de quelques semaines le temps de trouver un autre candidat convenable, ou aurions-nous tout simplement raté une opportunité ? Paul Buchheit ?

Quelle que soit l'ampleur du coût des faux négatifs, il est certainement moins visible que celui des faux positifs. Il est beaucoup plus facile de quantifier le coût des faux positifs, et les écarts de valeur y sont bien moindres. C'est pourquoi les recruteurs ont presque tous tendance à privilégier la prudence et à préférer un faux négatif à un faux positif. Nous espérons également que la possibilité pour les candidats de réintégrer le processus de recrutement ultérieurement contribuera à atténuer ce problème.

L'ensemble de test

Enfin, il y a notre Ensemble de test En apprentissage automatique, un ensemble de test est un ensemble de données distinct (composé de caractéristiques et d'étiquettes correspondantes) et totalement indépendant de l'ensemble d'entraînement. Il est utilisé après la construction du classificateur (à partir de l'ensemble d'entraînement) afin de déterminer si le modèle obtenu est suffisamment performant pour une utilisation en production. Son utilisation permet d'éviter le surapprentissage, c'est-à-dire le fait de trop confondre le modèle avec les données d'entraînement.

En pratique, une spécialiste en apprentissage automatique compétente construirait plusieurs classificateurs et utiliserait celui qui obtient les meilleurs résultats sur l'ensemble de test. Elle utiliserait même un troisième ensemble (un validation (ensemble) pour s'assurer qu'après les itérations répétées de création + test + perfectionnement des modèles, elle n'a pas surajusté leur modèle par rapport à l'ensemble de test également !

Lorsque nous élaborons notre modèle mental du profil d'un ingénieur embauchable, un ensemble de tests est un autre luxe dont nous ne disposons pas, et nous nous retrouvons avec surapprentissage En général, plus nous effectuons d'observations (réalisons d'entretiens), plus nous avons tendance à regrouper ces observations dans l'ensemble d'entraînement.

La science qui dérange

Pour revenir à ma question initiale : pourquoi le recrutement est-il si difficile ? En résumé : nous collectons un petit nombre de caractéristiques, sur un nombre tout aussi restreint d’observations dans notre ensemble d’entraînement, nous étiquetons nos observations de manière assez imprécise en raison de la difficulté à identifier les faux positifs et les faux négatifs, nous utilisons tout cela pour construire un modèle de classification opaque, qui surapprend énormément en raison de l’absence d’un ensemble de test, et au final, nous sommes fortement enclins à ne pas embaucher le candidat en raison du coût élevé des faux positifs.

Ça a l'air plutôt sombre, non ?

Alors, comment arrive-t-on à faire un travail à peu près correct en matière de recrutement ? Eh bien, nous avons au moins un atout : nous utilisons une forme de apprentissage en ensemble Pour prendre notre décision finale, nous utilisons l'apprentissage d'ensemble. Cette technique consiste à combiner plusieurs classificateurs distincts afin d'obtenir de meilleures prédictions qu'avec un seul classificateur. Lors de nos réunions de débriefing, une fois le cycle d'entretiens terminé, les recruteurs se réunissent, passent en revue toutes les questions et réponses, et chacun décide individuellement d'embaucher ou non le candidat. La décision finale d'embauche ou de non-embauche est ensuite prise en fonction d'une agrégation de tous les votes.

 

[1] Les « commandes frauduleuses » sont celles passées par des criminels ayant volé la carte bancaire d'autrui, piraté un compte ou tentant, d'une manière ou d'une autre, de voler indirectement de l'argent à Amazon. De plus, dans certains pays, Amazon autorise les paiements par des moyens non garantis. Cela signifie qu'Amazon n'a pas la garantie d'être payé après l'expédition des marchandises commandées par des particuliers, généralement honnêtes mais en difficulté financière. Par conséquent, Amazon doit parfois recourir à des modèles d'apprentissage automatique pour évaluer la solvabilité de ses clients.

[2] Pour de nombreux problèmes d'apprentissage automatique, c'est souvent à ce stade que l'on fait appel à un expert du domaine pour obtenir des données d'entrée pertinentes et prédictives. Malheureusement, lorsqu'il s'agit de décider d'embaucher ou non quelqu'un, on ne dispose généralement que de quelques informations. nous-mêmes En tant qu'experts, ils sont souvent perçus comme tels. De plus, au moins un de ces « experts en génie logiciel » impliqués dans un processus de recrutement est souvent novice en matière d'entretiens d'embauche, voire même en génie logiciel ! Il leur faut absolument perfectionner leurs compétences en recrutement…

[3] Par ailleurs, c'est une autre raison pour laquelle les portfolios de programmation, bien qu'intéressants, ne peuvent remplacer un entretien. Ils peuvent certes révéler beaucoup de choses sur le style de programmation d'une personne, mais la nature non structurée d'un dépôt GitHub personnel, par exemple, ne permet pas de déterminer : (A) sa capacité à résoudre les problèmes posés par autrui ; (B) sa productivité et sa rapidité ; ni (C) la présence d'erreurs de logique importantes dans le code, sans une analyse approfondie et la compréhension du problème à résoudre. Même en parvenant à déduire ces informations d'un simple coup d'œil à ses anciens projets, il serait souvent difficile de les intégrer à votre évaluation mentale d'un « bon candidat », car ces caractéristiques sont propres à ce candidat et ne s'appliquent à aucun autre.