Blog / Ingénierie / No.005

Scoring d'entreprises quand tous les signaux sont bruités

Les offres d'emploi périment, les journaux des changements mentent par omission, les données de levée arrivent un trimestre en retard, et la détection de pile rend compte d'une seule page vue. Voici comment nous pondérons quand même.

Mohamad · Knockwire26 mai 202611 min de lectureIngénierie

Ce texte est une traduction de l'original anglais.

Le scoring d'entreprises est la partie de ce système qui ressemble à de l'arithmétique et se comporte comme de la météorologie. Chaque signal que nous savons collecter à bas coût est peu fiable d'une manière précise et documentée, et la réponse utile n'est pas de chercher des entrées plus propres mais de pondérer les sales selon la façon dont chacune échoue. Ce qui suit est le schéma de pondération que nous avons retenu, le raisonnement derrière chaque règle, et un scoreur que nous avons livré qui rendait le même nombre pour toutes les entreprises et a semblé, pendant une semaine environ, fonctionner.

01Chaque signal bon marché ment à sa manière

Une lecture est une candidate qu'une source a renvoyée. Avant de pouvoir être qualifiée, elle doit franchir des étapes, et les étapes ont besoin de preuves. Les preuves qui nous sont accessibles sans contrat ni carte enregistrée se rangent en quatre sortes environ, et chaque sorte échoue d'une manière que nous savons nommer.

  • Les offres d'emploi périment et restent en ligne. Les systèmes de suivi des candidatures élaguent rarement, si bien qu'un poste pourvu en janvier est souvent encore affiché en juin, et une republication est indiscernable d'une première publication. Recruter trois ingénieurs data est une affirmation forte sur l'entreprise qui a rédigé l'annonce. C'est une affirmation faible sur l'entreprise d'aujourd'hui.
  • Les journaux des changements mentent par omission. Une équipe qui livre sans cesse et n'écrit rien paraît dormante. Une équipe dont le journal des changements appartient au marketing paraît infatigable avec quatre entrées par trimestre. L'absence de journal des changements ne vous dit presque rien sur la présence d'ingénierie.
  • Les données de levée arrivent en retard. L'annonce n'est pas la date du virement, le virement n'est pas la clôture, et la clôture précédait en général d'un trimestre toute publication. Au moment où un tour apparaît dans une base publique, les décisions de dépense qu'il a financées ont souvent déjà été prises.
  • La détection de pile rend compte d'une seule page vue. Une balise qui se déclenche sur le site marketing ne dit rien du produit. Une balise laissée par un fournisseur perdu il y a deux ans se déclenche exactement aussi bien que celle d'un client qui a renouvelé la semaine dernière.

Rien de tout cela n'est une raison de jeter un signal. C'est une raison d'être précis sur ce que le signal mesure, ce qui n'est en général pas ce que le nom du champ laisse entendre. Une colonne appelée job_posted_at mesure la dernière fois qu'une ligne a été touchée dans le système de suivi des candidatures de quelqu'un d'autre. Pondérez-la ainsi et elle redevient utile.

Le problème de second ordre est la corrélation. Trois de ces quatre signaux découlent du même acte de publication, si bien qu'une entreprise dotée d'une équipe marketing active en émet davantage de tous et qu'une entreprise qui livre en silence en émet moins. Les additionner ne vous donne pas trois vues d'une activité. Cela vous donne une vue d'un budget de communication, comptée trois fois, et cela refuse systématiquement les entreprises discrètes portées par l'ingénierie qui sont souvent les meilleurs comptes.

02Comment nous pondérons les signaux dans le scoring d'entreprises

Quatre règles, dans l'ordre où elles comptent.

  • Préférez les signaux dotés d'un horodatage digne de confiance. Une date de commit, une étiquette de version, un enregistrement de domaine et une entrée d'annuaire qui consigne sa date d'ajout portent tous un temps que personne n'a eu à déduire. Tout ce dont la date est une supposition reçoit une fraction du poids de ce dont la date est un fait, et nous préférons un signal daté à quatre signaux sans date.
  • Faites décroître tout avec l'âge, avec une demi-vie par classe de signal plutôt qu'une constante globale unique. Une levée de fonds gagne du poids lentement et le garde environ un an. Une offre d'emploi vaut le plus dans ses trois premières semaines et presque rien après quatre mois. Passer les deux dans la même courbe est la façon dont un site d'emploi périmé dépasse un site frais.
  • Ne laissez jamais un signal isolé qualifier une entreprise. Rien n'atteint le statut qualifié sur une seule entrée, aussi bruyante soit-elle. Une entreprise franchit l'étape quand des signaux d'au moins deux familles indépendantes concordent, indépendant signifiant que les deux ne se tromperaient pas pour la même raison. Deux fiches d'annuaire font une famille. Une fiche d'annuaire plus un SDK concurrent importé dans un dépôt public en font deux.
  • Traitez l'absence de signal comme un inconnu plutôt que comme un négatif. Nous n'avons pas détecté de SDK de scraping est une affirmation différente de cette entreprise ne fait pas de scraping, et l'essentiel de ce que nous ne voyons pas découle de l'endroit où nous avons regardé. Un signal manquant sort du numérateur et du dénominateur à la fois.

Cette quatrième règle explique qu'un score soit ici deux nombres au lieu d'un. Chaque entreprise porte un score et une confiance, parce qu'un signal manquant doit réduire la certitude sans prétendre être une constatation. Une entreprise à faible surface publique se retrouve avec un score peu fiable plutôt qu'avec un score bas, et les deux sont traités différemment : une confiance basse renvoie l'entreprise vers plus de recherche, un score bas la refuse avec un motif écrit dans l'index. Les fondre en un seul nombre revient à rejeter discrètement toute activité qui ne tient pas de blog.

Un classement que vous ne tracez jamais est un classement que vous n'avez pas vérifié.

03Le scoreur qui donnait la même réponse à toutes les entreprises

Pendant une semaine environ, notre scoreur a renvoyé pratiquement la même valeur pour chaque lecture du lot. Cela ne paraissait pas cassé. La file avait un ordre, l'ordre était stable d'un passage à l'autre, et les entreprises en tête étaient plausibles, parce que c'étaient celles que la source d'annuaire renvoyait en premier et que cette source penche vers les plus gros fournisseurs. Les relecteurs descendaient la liste, validaient des brouillons, et rien dans l'expérience ne suggérait que le score ne faisait aucun travail.

La cause était ordinaire. Une étape de normalisation bornait chaque facteur à un plafond avant de diviser par le maximum du lot, et le plafond était assez bas pour que presque chaque entrée arrive déjà posée dessus. Divisez une colonne de nombres presque identiques par son propre maximum et vous obtenez une colonne de nombres proches de un. L'arithmétique était correcte de bout en bout. La sortie était une constante avec du bruit d'arrondi au bout.

Nous l'avons trouvé en traçant la distribution, ce que nous n'avions jamais fait une seule fois. Un pic, rien de part et d'autre. Un histogramme qui prend quatre minutes à produire aurait attrapé cela le premier jour, et la raison pour laquelle personne ne l'a produit est que le classement paraissait raisonnable quand on le regardait comme une liste. Les listes cachent la forme. Une liste triée de valeurs identiques reste une liste triée, et elle gardera son ordre pour toujours.

MéthodeChaque changement de scoring est désormais livré avec un histogramme du lot produit, et un passage dont les scores tombent sous un écart minimal échoue au lieu d'émettre une file. Le contrôle est délibérément grossier : il ne demande pas si le classement est bon, seulement si le scoreur discrimine. Ce sont des questions différentes, et la seconde est celle qui échoue en silence.

La leçon plus large porte sur ce qu'un artefact plausible prouve réellement. Une file ordonnée est la preuve que quelque chose a produit un ordre. Ce n'est pas la preuve que la chose qui l'a produit était le scoreur. Partout où un consommateur en aval impose une structure propre, et une file impose un ordre par définition, vous pouvez perdre tout le calcul en amont sans que la sortie change de forme. L'ordre d'insertion, l'ordre alphabétique et un modèle cassé se présentent tous comme une liste classée.

04Ce sur quoi nous refusons de noter

Nous n'achetons pas de données d'intention que nous ne savons pas expliquer. Cela nous coûte de la portée, et nous acceptons ce coût.

L'offre est familière. Un fournisseur vend un flux de comptes présentés comme en poussée sur des sujets voisins de votre catégorie, tiré d'un panel d'éditeurs qu'il ne décrira que dans les grandes lignes. Le signal est peut-être réel. Le problème est qu'il est infalsifiable de notre côté : nous ne pouvons pas vous dire quelle page quelqu'un a lue, à quelle date, ni si le lecteur travaille à moins de trois étages d'une décision d'achat.

Cela casse deux choses dont nous dépendons. L'index des refus consigne un motif écrit pour chaque entreprise que nous refusons, et un motif doit être vérifiable par la personne qui le lit. Un flux tiers a dit non n'est pas un motif, c'est la citation d'une boîte noire. Et l'écran de relecture place chaque brouillon à côté des preuves à partir desquelles il a été écrit, si bien qu'un facteur qui ne peut pas y être montré ne peut pas être contesté par le relecteur dont tout le travail est de le contester.

Un score dont vous ne pouvez pas montrer le raisonnement ne peut pas être contesté, et un score que personne ne peut contester sera faux pendant des mois avant que quiconque ne s'en aperçoive. C'est le scoreur plat de nouveau, mieux habillé. La différence est que nous avons attrapé le scoreur plat avec un histogramme, et qu'aucun histogramme n'attrape un nombre acheté dont la provenance est un secret commercial.

La pondération reste donc ennuyeuse : des horodatages en qui nous avons confiance, une décroissance avec l'âge, deux familles indépendantes avant toute qualification, et l'absence consignée comme absence. Le score ordonne la file et ne fait rien d'autre. Il n'ouvre pas de porte, il n'écrit pas de brouillon, et il ne délivre certainement pas d'envoi. Un humain valide chaque message avant qu'il ne parte où que ce soit, et le score est l'une des choses avec lesquelles il a le droit d'être en désaccord.

Knockwire lit le web, écarte les entreprises qui n'achèteront jamais chez vous, et frappe à la porte de celles qui le feront. Lancez-le sur votre propre domaine et lisez vos propres refus.

L'essayer sur mon siteTous les textes