Apprentissage machine piloté par des tests – Louez la Zero S Motorcycle au tarif le moins cher du marché

Louez une Zero S Motorcycle a 8€ de l’heure!

Transcription

Nauck: Je vais parler de l'apprentissage automatique. Tout d’abord, avant de commencer, je voudrais dire quelque chose sur ce que c’est ou ce que j’en comprends. Donc, voici une interprétation. Il s’agit évidemment d’utiliser des données. Elle a donc des liens avec l’analyse et la science des données et fait évidemment partie de l’intelligence artificielle. Voici ma petite taxonomie, comment je vois les choses qui s'enchaînent. Vous avez la science informatique et ses sous-domaines tels que l'IA, le génie logiciel et l'apprentissage automatique est généralement considéré comme un sous-domaine de l'IA, mais de nombreux principes du génie logiciel s'appliquent dans ce domaine.

C'est ce dont je veux parler aujourd'hui. Il est fortement utilisé dans la science des données. Ainsi, la différence entre l'IA et la science des données est quelque peu fluide si vous voulez, mais la science des données tente de comprendre le contenu des données et tente de comprendre les questions relatives aux données. Mais ensuite, il tente de prendre cette décision pour prendre des décisions, puis nous revenons à l'IA, l'intelligence artificielle, où il s'agit principalement d'automatiser la prise de décision.

Nous avons quelques définitions. L'IA signifie utiliser l'intelligence, rendre les machines intelligentes, ce qui signifie que vous pouvez en quelque sorte fonctionner de manière appropriée dans un environnement prévoyant. L'apprentissage automatique est un domaine qui recherche des algorithmes pouvant améliorer automatiquement leurs performances sans programmation explicite, mais en observant des données pertinentes. C'est ce que l'apprentissage par machine signifie généralement. Et oui, j’ai également abordé dans le domaine de la science des données, le processus scientifique consistant à transformer les données en informations permettant de prendre de meilleures décisions. Donc, c'est la région.

La dimension éthique de l'IA, du ML et de la science des données

Si vous avez ouvert un journal, vous avez sûrement assisté à la discussion sur les dimensions éthiques de l'intelligence artificielle, de l'apprentissage automatique ou de la science des données. Les tests touchent également à cela car il y a pas mal de problèmes dans cet espace, et je n'en énumère que deux ici. Donc, vous utilisez évidemment des données pour l'apprentissage automatique. D'où viennent ces données et êtes-vous autorisé à les utiliser? Violez-vous des lois sur la protection de la vie privée ou construisez-vous des modèles que vous utilisez pour prendre des décisions concernant des personnes? Dans ce cas, le règlement général de l'UE sur la protection des données stipule que vous devez être en mesure d'expliquer à un particulier si vous prenez une décision basée sur un algorithme ou une machine, si cette décision a un impact significatif. . Cela signifie qu'en apprentissage machine, de nombreux modèles sont déjà disponibles, car vous ne pouvez pas le faire. Vous ne pouvez pas expliquer pourquoi une décision donnée découle d'un modèle d'apprentissage automatique si vous utilisez des modèles particuliers.

Ensuite, l’autre grand domaine est le biais, qui est en quelque sorte une injustice, une sous-représentation ou une surreprésentation des sous-groupes dans vos données; évidemment votre parti pris racial, le parti pris sexuel est le plus évident. Vous avez peut-être entendu dire que certaines choses, comme la reconnaissance faciale, sont à préjugés raciaux et sexistes. Ainsi, si vous examinez des tests tentant d'identifier le sexe d'une personne à l'aide d'un système de reconnaissance d'image faciale, vous constaterez que les hommes blancs sont le plus souvent reconnus, mais que les femmes à la peau foncée sont plus rares. Il existe donc un fort parti pris sexiste et racial dans ces systèmes. D'où est-ce que ça vient? Comment cela peut-il arriver?

Un autre sujet de préoccupation, peut-être pour vous aussi en développement de logiciels, mais les gens ont tendance à utiliser des modules qu’ils ont obtenus quelque part. Vous obtenez une bibliothèque, vous recevez un morceau de code, vous le collez pour construire ce que vous voulez construire. Lorsque vous utilisez du code, et si vous avez le code source, vous pouvez au moins l'examiner, vous pouvez le lire. Si vous avez un code standard, vous pouvez utiliser votre programme de test.

Mais qu'en est-il des éléments générés par l'apprentissage automatique? Donc, si vous obtenez vous-même un système de reconnaissance d'image faciale et que vous le collez dans votre solution de sécurité de la maison et que vous ne reconnaissez pas le propriétaire et ne l'introduisez pas dans la maison, comment pouvez-vous être responsable de ce composant que vous possédez? inclus dans votre système? Savez-vous comment il a été construit, testé, validé? Est-ce sans parti pris? Toutes ces choses. Nous verrons donc, en particulier dans ce domaine, le collage de différents composants de différentes régions avec différents types de provenance et de qualité. Comment vous assurez-vous que ce que vous assemblez est de bonne qualité?

Un compte rendu de Coalface: Naïve Bayes – de R à Spark ML

Voici un exemple d'équipe utilisant un algorithme d'apprentissage automatique pour résoudre un problème particulier. Ils veulent prédire la propension d'un client à appeler un service d'assistance téléphonique. Ils disposaient donc de données sur les clients appelant les lignes d'assistance et de données sur les clients qui n'appelaient pas. Ensuite, ils ont essayé de prédire à un client comme vous d'appeler un service d'assistance téléphonique au cours d'une période donnée. Ils ont utilisé ici un modèle d'apprentissage automatique particulier, ou un modèle statistique, appelé classificateur de Naive Bayes. Pour les besoins de cet exemple, la façon dont cela fonctionne n'a pas d'importance, mais ils utilisaient une bibliothèque particulière. Et dans la science des données, l’apprentissage automatique, vous trouverez beaucoup de gens qui utilisent typiquement R ou Python.

Ces gars-là utilisaient R, et cette bibliothèque particulière peut travailler avec des données numériques et des données catégorielles, donc des nombres ou des chaînes si vous le souhaitez. Ils ont construit ce modèle, puis ils ont découvert le système cible dans lequel ils devaient déployer leur modèle. Malheureusement, ils ne pouvaient pas utiliser R, ils devaient utiliser Spark. Et ils ont utilisé une autre bibliothèque, Spark ML, pour tenter de reconstruire, et cette bibliothèque particulière ne peut utiliser que des chaînes de données catégoriques représentées sous forme de nombres. Donc, ils ont dit: "D'accord, nous avons des chaînes dans nos données, nous avons des chiffres, nous laissons les nombres à eux-mêmes. Nous prenons simplement les chaînes et les convertissons en chiffres. Ensuite, nous avons des nombres pour pouvoir utiliser cette bibliothèque. " Ils ont utilisé la bibliothèque. Et heureusement, leurs données contenaient des nombres négatifs. L’algorithme a donc refusé de fonctionner avec cela. Heureusement, il y avait quelques tests là-dedans, sinon, ils auraient obtenu un résultat étrange et l'ont déployé.

Si vous regardez dans la documentation, il s'agit de la documentation de la bibliothèque dans R, qui indique que cela fonctionne avec une matrice numérique ou un cadre de données de variables qualitatives et / ou numériques. Donc, c'est ce qu'il peut ingérer et travailler avec. Si vous regardez la bibliothèque Spark ML, c'est ce qui est écrit dans la documentation, un peu moins lisible, mais ici, l'entrée doit être des données, qui sont comme un tableau ou une liste de points étiquetés, et un point étiqueté semble apparemment être quelque chose qui utilise des nombres réels. Le premier numéro semble être un peu séparé du reste. Le reste semble être en vecteur. Donc, j'espère qu'ils ont mis les zéros et les uns ici. Vous ne pouvez pas vraiment dire à partir de ce type de documentation avec quel type de données cet algorithme peut fonctionner. S'il n'y a pas de test dans la procédure pour vérifier ce qui vous empêche de l'utiliser, vous risquez d'obtenir toutes sortes d'effets étranges, si vous ne comprenez pas ce que font ces méthodes.

Certains le font utilement. Voici un exemple. Ceci est, encore une fois, d'un environnement R. Ici, nous essayons de construire un certain nombre de classificateurs, et l'un d'entre eux se plaint et dit: "Il semblerait qu'une de vos variables soit constante." Lorsque vous effectuez une analyse de données, des données constantes sont inutiles car elles ne contiennent aucune information. Donc, il est très utile que les algorithmes me disent cela. Cela signifie qu'il y a des tests en cours à l'intérieur. Cela examine les données qui sont entrées et cela a-t-il un sens pour l'exécution de l'algorithme? Mais vous ne pouvez pas compter sur cela. Cela ne se produit pas nécessairement dans tous les éléments de code que vous trouvez dans une bibliothèque autour de l'apprentissage automatique.

L’apprentissage automatique peut très bien fonctionner, mais il n’en reste pas toujours.

L'apprentissage automatique fonctionne généralement assez bien, et comme vous l'avez constaté dans les médias, l'apprentissage automatique connaît beaucoup de succès. La plupart de ces jours-ci sont dus à ce qu'on appelle l'apprentissage en profondeur ou réseaux profonds, une technique qui existait déjà dans les années 1980 et qui a vraiment porté ses fruits maintenant, car nous disposons de beaucoup de puissance de calcul et de données volumineuses avec Étiquettes. D'où viennent ces données? Vous l'avez fourni utilement en téléchargeant des photos dans le nuage et en y collant des étiquettes. Donc, Google sait maintenant ce que sont les chats et les chiens parce que vous avez cliqué sur les images lorsque vous avez cherché des images d'un chat ou d'un chien, ou bien vous avez chargé des photos quelque part et apposé les étiquettes.

Ce système a appris à étiqueter des images en utilisant ce type de données, de photos et d’étiquettes qui lui sont associées. Ensuite, ils essaient d'étiqueter de nouvelles images, et cela fait un très bon travail dans les premières colonnes. Si vous regardez en haut à gauche, vous voyez une personne conduisant une motocyclette sur un chemin de terre; c'est assez bon pour étiqueter une image. Mais, évidemment, c'est faux. Ce n'est pas un chemin de terre. C'est probablement une course de moto hors route, ce qui vous donne déjà une idée du fait que ces choses-là ne comprennent probablement pas ce qu'elles voient. Si nous allons plus loin, nous voyons la deuxième colonne, deux chiens jouent dans l'herbe. Donc, d'une certaine manière, il a raté le troisième chien. Un humain ne ferait pas cette erreur. Si nous allons plus à droite, regardons celle de la deuxième rangée, une petite fille au chapeau rose souffle des bulles. Ainsi, une partie du chapeau de la dame ici a été interprétée comme une bulle. Et si vous regardez dans la même rangée, tout à droite, c'est le meilleur, un réfrigérateur rempli de nourriture et de boissons.

Comment ça se passe? Comment un système commet-il une erreur aussi évidente? C'est parce que ces systèmes ne comprennent rien. Ils ne comprennent pas ce qu'ils regardent. Pour eux, ce ne sont que des modèles statistiques. Sans tests et analyses appropriées, vous ne savez pas ce que ces problèmes permettent de détecter. Il existe des exemples classiques où ces systèmes ont essayé de différencier les loups des huskies, et ce qu'ils ont appris, c'est que tous les huskies sont sur des images avec de la neige. Vous avez donc construit un détecteur de neige, mais pas le différentiateur des loups ou des huskies. Mais si toutes vos données sont de ce type, vous n’avez aucun moyen de le savoir. Vous devez devenir assez intelligent sur la façon de tester.

Les gens disent que l'apprentissage machine est plus une alchimie que la science. C'est à cause de ce battage publicitaire autour de l'utilisation de choses comme les réseaux profonds. Les gens sont un peu frénétiques. Que puis-je en faire? Où puis-je l'appliquer? Quels trucs cool puis-je faire avec ces choses? Le genre de choses que vous voulez avoir est la reproductibilité. Donc, si vous entraînez un modèle sur certaines données et que vous obtenez un résultat, comme dans toute science, vous voulez qu'il soit reproductible; cela signifie que quelqu'un d'autre doit suivre le même chemin et arriver au même résultat. Cela ne signifie pas que c'est correct et que vous ne pouvez pas vraiment le prouver, mais vous pouvez montrer que quelqu'un d'autre peut arriver au même résultat. Dans ces systèmes, vous devez parfois jouer avec un grand nombre de paramètres. Les gens comprennent intuitivement comment procéder. Ils obtiennent un résultat, puis ils s'arrêtent. Et la question est: à quel point est-ce vraiment bon? Pouvez-vous montrer que ce que vous avez fait est correct et utile?

Défis en analytique

L'apprentissage automatique comporte de nombreux défis, et nous en examinons quelques-uns ici. La provenance des données signifie d'où proviennent ces données? C'est toujours la première question que vous devriez vous poser. D'où viennent les données? Qu'a-t-on fait aux données? Est-ce vraiment la première source ou quelqu'un l'a-t-il foiré? Est-il en quelque sorte déjà transformé? Interprété? Quelqu'un a-t-il apposé sa marque sur le produit et l'a changé? Aussi, pouvez-vous lui faire confiance? Comment a-t-il été généré? Est-ce comme des mesures à partir de capteurs? Peut-être avez-vous alors une idée de la qualité de ces capteurs. Quelle est l'erreur du capteur? At-il été créé par des humains? Ont-ils une incitation à mentir au sujet des données? Ce genre de questions que vous devriez vous poser et tester.

La qualité des données est alors plus sans erreur. Une fois les données enregistrées, des erreurs se sont-elles glissées? Y a-t-il des données manquantes qui ne devraient pas l'être? Le biais de données, nous en avons déjà parlé. C'est un groupe sur ou sous-représenté dans ces données, ce qui est en fait assez difficile à trouver et encore plus difficile à éliminer. Tout comme garder les données hors de la modélisation, comme garder les mains de votre pique-nique, cela reviendra toujours. Cela peut arriver via les données ou via la modélisation, car chacun de nous a un parti pris intuitif et nous avons quelques idées sur le monde. , et cela entre dans les modèles et que ce biais sont les modèles. Ainsi, la manière dont vous sélectionnez les données que vous semblez pertinentes pour la formation les biaise et, lorsque vous testez votre modèle, vous aurez des biais. Où il devrait jouer, où le spectacle ne veut pas dire tellement, n'est pas pertinent. Cela met les modèles en biais.

Vous pouvez tester le biais, vous pouvez essayer de corriger le biais, mais ce n'est pas trivial. Si vous pensez à une demande de prêt, voulez-vous que tout le monde soit évalué en fonction de ses performances financières, de ses indicateurs financiers ou voulez-vous que les rejets de prêts soient égaux pour tous les groupes de sexe, groupes raciaux, groupes d’âge? Question complètement différente. Différents types de préjugés dont vous avez besoin pour vous faire une idée.

Compréhension du modèle. Nous en avons déjà parlé. Vous devrez peut-être expliquer à quelqu'un pourquoi un modèle vous donne la réponse qu'il vous donne. Et ce n'est pas toujours possible. Il existe des approches pour cela. Vous pouvez obtenir des bibliothèques, telles que LIME ou SHAP. Mais vous devez penser à ce qui constitue une explication. Pour les gens, une explication est quelque chose de significatif dans le contexte dont ils parlent. Lorsque nous expliquons pourquoi nous avons agi de la sorte, nous les inventons toujours. Une explication est une chose que vous inventez après discussion pour expliquer à quelqu'un d'autre pourquoi vous avez fait quelque chose. Mais il est très rare que vous ayez en tête un processus de raisonnement basé sur la langue. Que vous avez dit: "D'accord, qu'est-ce que je vais faire? Je vais le faire, et c'est parce que je vais le faire." Votre prise de décision est généralement beaucoup plus vive, et vous ne vous en prenez pas à vous-même. Peut-être que si vous allez acheter une voiture, mais au final, la décision est toujours un processus émotionnel.

Une explication pour un humain est quelque chose qui a un certain type de qualité. Une explication que vous pourriez tirer d'un modèle statistique pourrait être quelque chose qui est exprimé en chiffres, pondérations et combinaisons de variables, que quelqu'un pourrait ne pas comprendre s'il ne s'agit ni d'un statisticien ni d'un mathématicien. C'est donc une autre dimension délicate. Puis la dimension éthique. Alors, êtes-vous autorisé à utiliser les données? Quel genre de décisions prenez-vous? Comment cela affecte-t-il les gens? Vous devrez peut-être également tester les effets de votre application de modèle et j'y reviendrai.

Le processus de construction de modèles à partir de données

Voici l'image d'un processus autour de l'analyse de données, de la science des données et de l'apprentissage automatique. C'est à peu près tous les mêmes. Vous commencez avec une certaine compréhension des affaires, vous devez comprendre vos données, les préparer, puis vous passez à la modélisation. C'est le peu sexy. Tout le monde veut travailler dans cette boîte à modélisation, mais en réalité, vous perdez entre 70% et 90% de votre temps au stade de la préparation des données. Et oui, c’est également là que vos efforts de test devraient être. La modélisation est en fait assez facile. La difficulté consiste à obtenir les données appropriées pour la modélisation. Ensuite, d'accord, les autres éléments, vous devez évidemment tester ce que vous faites, l'évaluer et ensuite le déployer là où les choses peuvent mal tourner.

Il y a un problème de perception. Comme je l'ai dit, tout le monde veut faire de la modélisation. Donc, si vous pensez "Oh, je travaille en apprentissage automatique", et voici l’idée que vous avez dans l’esprit de ce à quoi ressemble votre environnement de travail, mais en réalité, cela ressemble à ceci. Vous passez la majeure partie de votre temps à fouiller dans les données, à essayer de vous faire une idée des données, à saisir les données, à déterminer la qualité des données et à la façon dont vous pouvez combiner différents types de données systèmes opérationnels. C'est très compliqué et toutes sortes d'erreurs peuvent s'y glisser.

Ce que je fais lorsque je parle d’apprentissage automatique ou de science des données à cette communauté, c’est vous qui voyez, et je vous considère comme une balise, parce que vous êtes un développeur de logiciels, vous savez tout sur les tests. Je dis: "Nous devons apprendre de ces gars-là. Ces gars-là testent ce qu'ils font, un développement piloté par des tests." Alors, comment pouvons-nous soulever et déplacer cela vers l’apprentissage automatique et la science des données? Comment savons-nous que nos données sont utiles, que notre modèle est correct? Si les décisions que nous prenons en fonction des résultats du modèle ont les impacts attendus.

Suivez les meilleures pratiques pour l'IA, le ML et la science des données: testez tout!

Voici un diagramme de données qui montre où vous pouvez tester. Cela montre à peu près le type d’étapes que vous passez lorsque vous mettez un modèle en déploiement. Vous construisez un modèle à partir de données et vous l'utilisez plus tard dans une sorte d'application. Donc, vous commencez avec le référentiel de données. C'est la première étape où vous pouvez faire des tests. Idéalement, vous évitez que de mauvaises données ne pénètrent dans votre référentiel. Plus vous commencez tôt, mieux c'est. Dans les bases de données, il y a quelque chose comme des déclencheurs. Si vous travaillez avec des bases de données, vous le savez peut-être. Cela vous règle fondamentalement. Vous écrivez, par exemple, si vous mettez une rangée de données dans cette table, ce sont des conditions auxquelles il doit satisfaire avant de pouvoir la mettre. Personne ne l'utilise plus. Mais c'est une possibilité. Vous pouvez simplement écrire, par exemple, assurez-vous que cette colonne est toujours positive ou qu'il ne manque jamais de valeur dans cette colonne. Vous pouvez le faire au niveau du référentiel de données. Si vous savez que quelqu'un le fait et dit: «Oui, je vérifie qu'aucune mauvaise chose ne va dans mon référentiel de données», alors d'accord, c'est génial, vous avez transféré la responsabilité et vous pouvez passer à autre chose.

La prochaine étape est la lutte contre les données. Cela signifie que les données ne sont jamais sous la forme que vous pouvez simplement mettre dans un algorithme d'apprentissage. Si vous apprenez votre machine à apprendre en vous rendant à Kaggle, où toutes les données sont bien préparées, il y a eu beaucoup de douleur avant que vous ne la voyiez pas. C'est donc la phase de préparation. Vous prenez les données, vous les transformez en quelque chose d'autre afin que vous puissiez les utiliser dans l'apprentissage automatique. Vous générez des fonctionnalités à partir de celui-ci et vous pouvez faire beaucoup d'erreurs dans cet espace.

Souvent, cette phase est même documentée. Donc, comme par magie, vous arrivez à un ensemble de données et vous dites: "Bon, c'est ce que j'utilise pour l'apprentissage automatique." Ensuite, vous construisez votre modèle, puis si quelqu'un veut le reproduire, alors, "Comment diable sont-ils arrivés à ces colonnes et à ce type de jeu de données?" Vous ne pouvez pas le répliquer. Mais évidemment, de votre point de vue, vous devez comprendre que vous écrivez un logiciel sur scène. Les conflits de données signifient que vous écrivez un logiciel. Le logiciel le plus simple que vous puissiez écrire à ce sujet sont les requêtes SQL. Ainsi, vous modifiez les données du référentiel pour les transformer en quelque chose d'autre qui est du code. Cela devrait être la version, devrait être testé.

Génération de fonctionnalités. Cela signifie que vous commencez à combiner des colonnes. Au lieu des colonnes A et B, peut-être que A divisé par B est une fonctionnalité utile. Ensuite, vous créez quelque chose de nouveau. Encore une fois, même ce A divisé par B est un logiciel, que vous produisez quelque chose avec du code, en manipulant des données, et qui devrait être testé. Divisez-vous par zéro à un moment donné? Qu'est-ce que ça fait? Ensuite, vous entrez dans la construction de modèles, puis il y a beaucoup de tests sur la façon de construire un modèle, et j'y reviendrai dans un instant. Tous ces éléments doivent également être versionnés, et vous devez en assurer le suivi afin de pouvoir les répliquer. Si vous devez le remettre à quelqu'un, il doit pouvoir extraire la dernière version du référentiel et doit pouvoir vous mettre à la place.

Nous avons maintenant un modèle qui se trouve quelque part dans un système de gestion de versions. lorsque nous le déployons, il devrait être retiré. Donc, ayez toujours la dernière version du modèle. Les personnes qui apprennent en machine ne sont pas des développeurs de logiciels et ne comprennent donc généralement pas ces concepts. Ils ne savent pas nécessairement ce qu'est le référentiel de logiciels et comment orchestrer ces choses. Mais vous devriez le savoir. Vous le déployez. Vous pouvez y tester, l’environnement dans lequel vous vous êtes déployé, peut-il gérer le type de trafic qui en résulte, va-t-il évoluer? Ce genre de choses peut mal tourner.

Et puis vous allez à l'application. Cela signifie qu’il s’inscrit dans une sorte de processus opérationnel et prend des décisions. Les mêmes données que vous avez utilisées pour le construire dans la structure sont renvoyées dans le modèle. Maintenant, le temps a passé. Vous avez construit vos données. Les données sont construites à partir de données historiques et sont appliquées aux données futures, sinon, cela serait inutile. Alors, comment savez-vous que les données futures sont les mêmes que celles à partir desquelles vous avez construit votre modèle? Vous devez vérifier que la structure des données est toujours la même et que tout peut vous prendre au dépourvu.

Disons que vous avez quelque chose comme des codes de produit dans votre modèle. Les entreprises changent les codes de produits à chaque lune bleue. Alors, tout à coup, il y a peut-être quelque chose que le modèle n'a jamais vu. Comment va-t-il réagir à cela? Ou alors, vos données sont dérivées, des chiffres sont apparus, et tout à coup, les chiffres se sont éloignés de leur intervalle habituel, puis ils sont devenus plus petits ou plus grands, ou il y a des données de capteur, puis quelqu'un a décidé de mettre à jour le capteur. . Maintenant, ceci est calibré différemment, les chiffres ont changé. Peut-être que la moyenne des mesures n’est pas différente de l’écart type. Encore une fois, pas quelque chose que vous attendez. Donc, vous devez vérifier ce genre de choses.

Ensuite, vous allez prendre des décisions. Encore une fois, vous devriez tester. Si vous utilisez votre modèle pour prendre une décision, avez-vous réellement l'effet que vous souhaitez avoir? Vous pouvez tester cela en gardant un groupe de contrôle, et vous le savez en testant des médicaments. En médecine, lorsqu'ils testent de nouveaux médicaments, ils ont un régime très strict, à savoir les tests à double insu. Le médecin ne sait pas quel type de pilule il donne, et le patient ne sait pas ce qu'il reçoit. Donc, ce genre de régime, vous pouvez le reproduire dans le processus de prise de décision. Vous prenez une décision, vous appliquez votre procédure à votre groupe de traitement et vous faites la même chose à un groupe de contrôle, ou pas la même chose, vous faites simplement ce que vous avez toujours fait ou vous ne faites rien. Et puis vous comparez à la fin, est-ce la même chose?

Certaines entreprises sont très bonnes dans ce domaine. Netflix le fait sur vous tout le temps. Ils expérimentent sur vous. Donc, si vous ouvrez votre écran principal Netflix, vous verrez des films basés uniquement sur ce que vous aimez, mais les images de film ou les images de titre sont différentes. Votre ami peut voir un autre ensemble d'images. Ils essaient juste ce qui est plus intéressant. Et donc, ce sont les groupes, et ils testent ces traitements à travers les groupes. Quelle prise de décision me donne une meilleure réponse? Et vous pouvez le faire aussi.

Test de votre modèle: validation croisée

Je vais parler de deux choses: tester un modèle et tester vos données. Le modèle est, si vous travaillez dans l'apprentissage automatique, alors c'est quelque chose que vous savez, que vous avez été formé pour connaître ce genre de choses. Validation croisée. En résumé, lorsque vous créez un modèle, vous disposez d'un ensemble de données appelé vos données d'entraînement. Vous le partitionnez en K parties égales, disons 10, puis vous utilisez une partie pour tester ou valider votre modèle et les neuf autres parties que vous utilisez pour le construire. Vous faites cela 10 fois. Idéalement, vous répétez cela à nouveau. Pourquoi fait-on ça?

Nous voulons comprendre à quel point le choix des données d’entraînement influe sur le modèle créé. Donc, ce que vous faites, c’est que vos données de formation sont une sorte d’échantillon de toutes les données potentiellement disponibles. Vous avez en quelque sorte créé cet ensemble de données de formation. Vous l’utilisez pour créer un modèle. Ce modèle sera ensuite appliqué. à toutes les autres données qui sont là-bas que vous n'avez pas vu. Vous devez vous assurer que vos données d'entraînement sont représentatives de celles que le modèle verra dans le futur.

Si vous ne le faites pas bien, la sélection de ces données d'entraînement aura donc un impact sur la performance du modèle. La seule façon de vérifier cela consiste à créer plusieurs modèles et à voir leur différence et leurs performances. Et voici à quoi sert cette procédure de validation croisée. Ainsi, vous effectuez ce partitionnement en 10 sous-ensembles pour vérifier si la sélection d'un ensemble de données a un impact, puis répétez l'opération plusieurs fois pour vérifier si ce partitionnement a également un effet. Parce que tout devrait être aléatoire. Donc, dans la pratique, les gens utilisent K égal 10 ou 5 et N égal un. Mais idéalement, visez K égal 10 et N supérieur à 1 pour avoir une bonne idée de la performance de votre modèle.

Que recherchez-vous quand vous faites cela? Vous recherchez une performance d'entraînement supérieure, mais légèrement supérieure à celle du test. Vous regardez les chiffres qui indiquent la performance, et c'est ce que vous voulez voir. Et vous voulez rechercher des chiffres cohérents pour toutes les fautes. Donc, si quelque chose ressort où il est correct à 90% et toutes les autres fois que c'est correct à 70%, c'est suspect. Si les performances de l'entraînement sont bien meilleures que celles du test, alors il y a surapprentissage. Si vous obtenez systématiquement 90% de performance et d’entraînement, mais seulement 60% en test, il se produit une sur-adaptation. Cela signifie que vous devez contrôler les paramètres de votre modèle. Si les performances du test sont bien meilleures que celles de l'entraînement, toutes les sonneries d'alarme doivent sonner. Cela signifie probablement que vous avez des fuites de données; des informations que vous n'auriez pas dû avoir sont entrées dans vos données de test. Et si les chiffres varient beaucoup, vous n’avez probablement pas assez de données pour la tâche que vous essayez de résoudre.

Vous voulez également regarder le modèle que vous construisez. Parfois c'est possible, parfois non. Mais si vous pouvez regarder la structure du modèle – alors à quoi ressemble le modèle quand il a été créé – cela semble-t-il cohérent dans tous les plis? L'exemple typique serait un arbre de décision, que vous pouvez consulter. Vous pouvez le supprimer ou l'écrire sous forme de règles. Ou ce que vous pouvez faire, c’est que, dans chaque cas, les mêmes fonctionnalités sont-elles sélectionnées à plusieurs reprises? Ou voyez-vous qu'un pli prend ces variables et un autre les prend? Si vous avez la sélection automatique des fonctionnalités dans votre algorithme. Voilà le genre de choses que vous pouvez rechercher. Si cela diffère beaucoup, il est probable que vous ne disposiez pas de suffisamment de données ou que la sélection de données influence fortement le modèle créé, ce qui serait le cas si vous ne disposiez pas de suffisamment de données. Donc, vous devez revenir aux bases et vérifier si les données sont correctes? Le modèle est-il correct? Le modèle est-il trop complexe pour la tâche que j'essaie de résoudre? Des choses comme ça, vous devez regarder.

Quel est le terme le plus mal utilisé dans l'apprentissage automatique et la science des données?

Participant 1: Big data.

Nauck: Oui. Bon un. D'autres preneurs? C'était des données volumineuses. Non? Celui-ci, la précision. L'exactitude est un mauvais mot parce qu'il cache tellement. Il cache tant de péchés dans l'apprentissage automatique et la science des données. si votre classe cible ne représente que 1% dans vos données et que votre modèle est correct à 99%, précis à 99% en disant simplement que personne ne fait partie de la classe cible, oui, vous avez un modèle précis à 99% mais il est totalement inutile. Donc, exactitude, évitez de l'utiliser. Cela ne vous donne pas assez d'informations.

Si vous êtes en apprentissage automatique, imprimez-le et clouez-le sur votre lit. Ce sont les termes avec lesquels vous devez travailler. Vous devez comprendre que c'est uniquement pour les classificateurs binaires. Quel type d'erreurs commettez-vous? Quels sont les faux positifs? Les faux négatifs? Vous devez comprendre quel est l'impact de ces flèches sur votre domaine de décision. Vous voulez comprendre des éléments tels que la sensibilité et la spécificité, et vous voulez comprendre quel est le taux de base de vos données. Ce genre de choses avec lesquelles vous devez travailler. Il y a une très bonne page Voiture electrique. Si vous utilisez Google, "confusion matrix wiki", vous trouverez exactement cela. Il est donc très pratique de rester disponible lorsque vous effectuez un apprentissage automatique.

Testez vos données!

Pour tester vos données. C'est-à-dire, j'ai dit, vous avez passé 70% à 90% du temps à masser vos données pour les mettre en forme et les mettre dans un modèle. Votre effort de test doit donc également être consacré à ce domaine. C'est aussi la partie la plus difficile à tester. Vous pourriez en fait dire que tout ce que vous faites pendant l'apprentissage automatique consiste à utiliser des données ou à générer des données. Donc, tout est sur le test des données. Mais ce que j'ai dit à propos de la validation croisée génère des données; les données sont les performances statistiques de vos modèles. Donc, vous pouvez tester cela. Si vous voulez vous assurer que vos performances d’entraînement sont toujours meilleures que celles du test, c’est une règle que vous pouvez tester, mais la différence ne doit pas être trop grande. Vous pouvez tester pour cela.

Vous pouvez donc rédiger de nombreux tests sur la sortie d'une validation croisée pour vérifier que votre modèle est réellement bon avant de continuer sur votre pipeline. Et ceci teste les données issues de la validation croisée. Mais vous devriez également tester les données avec lesquelles vous travaillez. Donc, ce que vous faites avant de faire une modélisation en apprentissage automatique, vous passez par quelque chose que nous appelons l'analyse de données exploratoire, et c'est la partie où vous essayez de vous faire une idée des données avec lesquelles vous travaillez, et vous faites beaucoup de visualisation à ce stade, vous tracez des choses, vous calculez des caractéristiques statistiques, des moyennes, des variances, des tests, toutes sortes de choses. Juste pour essayer de comprendre ce que ces données me disent? D'où est ce que ça vient? Est-il bon? Quelle est la qualité, partialité? Toutes ces sortes de choses. Ainsi, vous apprenez quelque chose sur vos données et vous pouvez l'écrire sous forme de test.

Nous avons quelques exemples. J'utilise beaucoup R, donc ces exemples proviennent de R. Il existe une bibliothèque appelée assertr. Ce que vous pouvez faire, c’est que vous pouvez écrire des assertions dans votre code et je ne sais pas si vous utilisez des assertions dans votre propre code, typiquement quelque chose qui est utilisé au moment de la compilation ou même au moment de l’exécution. Celui-ci est utilisé ici au moment de l'exécution et vous l'utilisez pour écrire des tests sur les données. Les données avec lesquelles je joue ici sont des données sur les vols et les retards, vols au départ de New York. Il existe un exemple de jeu de données disponible dans R et je recherche ici une colonne appelée différée. Ce que j'ai ici est un pipeline dans lequel je dirige une table de données appelée mes données via un certain nombre d'opérateurs. En fait, ce que je veux calculer, c'est que je veux voir le nombre de retards que j'ai dans ces données. Quel est le ratio des délais dans mes données?

J'ai cette vérification, j'ai ces deux commandes de vérification ici. Le premier indique: "Vérifiez que le retard est égal à un ou différé à zéro", ce qui est utile si vous voulez créer un classificateur binaire, et vous indiquez que la classe positive est indiquée par un un et un la classe négative est indiquée par un zéro. Idéalement, vous ne voulez pas que d'autres nombres apparaissent là-bas, ou vous ne voulez pas de valeurs manquantes.

L'autre chose que je vérifie ici est que j'ai au moins 50% de lignes retardées dans mes données. Donc, calculez, car un et zéro est mon indication pour retardé. Je peux simplement résumer, divisé par le nombre de lignes de mon jeu de données, puis obtenir le ratio. Si tout cela passe, alors ce pipeline produira la sortie que je veux. Je veux le nombre de vols retardés dans mes données et le ratio, donc ça me dit 86%. C’est probablement biaisé, je ne suis pas trop heureux avec ça, mais juste pour le plaisir, nous allons continuer avec ça.

If it fails, you see something like this, there's an arrow, and the execution has stopped. This is what you want. Your code should throw an exception if the data that you tried to feed into it, is not what it expects. Especially, you want to do this when you apply your model later in an operational system. It's always bad to make a decision that is on wrong data. So, ideally, you want a model that says, "Oh, I've never seen that. I don't know what to do," and tells you that instead of, "Yes, don't know, but will give you a one as an output because this is the closest thing I can find.” So, this is your way of enforcing to say, "I don't know what to do with this." And that's a very useful situation to be in when you use models. It tells you it's not what you expect, but you don't know exactly where it goes wrong. But this kind of verification is very useful, just as generic checks on the data.

You can try to find the culprit, which is useful in the first stages when you try to get your head around the data. Here I'm using an assertion that says a particular column, or actually the keyword "everything" here means all the columns, they should be positive. They should be between zero and infinity, and this is what this predicate checks. If that goes through, I get my result, and you can see it doesn't go through, and I get a number of columns where this is not true, and this is the variable for dew point where you have negative value. So, the data set has information about weather, and flights, and so on. And dew point actually can be negative. So it's cool. I learned something about the data, now I can change my assertions. I can say the dew point columns is okay if it's negative.

Sometimes we need to test something that you have to compute first, there are also operators for this. This one here insists, says that the wind speed and the wind gust should be within three standard deviations. But in order to do this, you first have to take your data, you have to calculate the mean and the standard deviation of the column, and then you can test if the individual role within is three standard deviations or not. And it would show you all the ones that are not, and there's a potential outlier. Again, this is useful in the first phase when you get your head around the data.

There are a lot of packages. You can find several of those. The one that I used here is assertr. If you're working with R, you probably know the name Hadley Wickham. This is more runtime assertions for code. But there are many you can play with. If you're more a Python person, then there is a package called TDDA, test-driven data analytics, which I would recommend to have a look at this. It's very cool stuff that can even derive constraints on data or assertions on data automatically. It can look at the data and say, "Oh, I think this column is just positive numbers or so." That's the tricky bit. There's no support to help you write these test cases. You have to do this yourself, and that's one of the problems in this domain. There is not a lot of tooling that helps people to do this, and that's why it typically doesn't get done so much.

Research Trends in Data Science: Supporting Tools

There are some tools out there that try to fill this particular gap. On data quality, you get things like Quilt and TopNotch that try to do things like data quality checking or data versioning, also interesting. So, if you used your data for machine learning and you replicate the whole experiment next month when you have new data, what is the difference between the datasets? That's quite a cool idea to version your data. Obviously, quite a challenge to do if you talk about massive amounts of data. FeatureHub is the idea that you can work across teams. So, when you develop machine learning models in teams, and you have thousands of columns to go through and to turn them into features, you do this in a team. How do you record and keep these features available and share them across teams? FeatureHub is trying to look at this. And then when you build models, you have to keep track of what you're doing as well, and things like ModelDB and MLflow try to look at this.

There's also a whole other area around governance around models. When you have them in production, and you need to check how they perform, or you may have to explain to somebody why they make certain decisions, you need a governance layer around this. For this, you want a certain type of APIs. You want to ask a model, who built you? What sort of data did they use? How many decisions have you made? What have you been built for? Especially in these image recognition domains, what do people do? They reuse deep networks. They chop off the top and the bottom layer and take a network that has learned to detect cats and dogs and then use it elsewhere, but retrain it on their domain by using what it has been trained for before.

But maybe somebody said, "Oh, you can't do this. If you use this model, you can only use it to recognize cats and dogs. Don't use it to diagnose x-ray images for cancer,” or something like that. And so, these indications when you have a model are important to keep track of, and these approaches look into this direction. We have a whole working group at BT that looks at model governance and tries to develop standards across industry for that.

Future of AI: Explainable AI (Xai)

The future- what I think is where things have to go to is explainability. So, explainable AI is one of the interesting keywords in the scene. This is the idea that you can ask a model, "Why are you telling me this?" Or, "What sort of data have you seen in the past that makes you give me this decision?" This is really tricky to do. It's not easy, but this is something where we have to get to, and so we need to be able to get to this sort of conversation with a model and ask it stuff so that we can develop trust in it.

So, we need to be able to trust that it has been built in a proper way, that all the tests have been done. When you buy something of a vendor, when they say, "Here's my facial image recognition system," how do you know they have built it in the proper way? If you have certain kind of quality gates for your own software, for your own machine learning, how do you know that the people you buy stuff from have the same? How can you check this? These kind of things could be introduced through explainability, and model-based design could be a way here to help ensure these kinds of things, think of explainability by design, similar to security by design, or privacy by design.

This is what I wanted to say. I hope you guys found it interesting and I'm happy to take questions. I don't know how it works, but there should be microphones coming around I think.

questions et réponses

Participant 2: A very interesting talk. One of the things that is used to correct fundamental misconceptions in the academic world, as I understand it, not being within it, is other people challenging the original results and using that attempt to reproduce as a way to discover problems. Is there any way to reproduce that kind of argumentative tension inside an organization, or is that not the right way to do it?

Nauck: Yes. What we try to do is to replicate this to some kind of peer review. So, if one of my guys builds a machine learning model, then somebody else has to check it. That means this reproducibility idea. So, where is the data that you used? What are the steps you went through, and what is the result that you have? Then trying to get to the same result. In academia, you find more and more that people are asked to publish not only the code but also the data that they used so that somebody can take it and replicate the results. You can do this inside your own team or organization.

Participant 3: Thank you for your very interesting and thought-provoking presentation. I have a question about a few of the slides that you had in there. For instance, you had the image recognition problem, and you used an example about huskies and wolves.

Nauck: This one?

Participant 3: Yes, this one. The huskies and wolves are easy to identify as a human because it's already built in us to see through our eyes that a thing is in certain order. And if they were ordered in a vector of 2 million pixel values, they would be very difficult for a human too. So, humans build their vision in layers upon layers of information, and they check their stuff. The problems here lie in the fact that they interpolate or extrapolate the area of expertise that the model is using, and it fails. Is there a way to identify when the model is exceeding its boundaries in interpolation or extrapolation?

Nauck: Yes, very good question and very difficult to answer, especially in that space when you do image recognition, once you have potentially got an infinite number of images that can possibly be entered into a system. And because these systems, they don't see or understand the image, they don't look for concepts in an image like we would. If you've been in the previous talk of the track, then Martin showed the attention, the hotspots where humans look at an image, and where the algorithms look at. It has nothing to do with each other. It's important to realize this is only a statistical pattern recognition as you say. So, if you want to build a system where you can be sure what it is they're doing, you need to think about combining different concepts.

And so, for example, let's say you have a camera in a car that is supposed to look at the road and identify only if the road is free or not, which is a similar challenge too here. Then how do you guarantee that the image is actually a road. These image processing systems can be fooled. You could have an image that looks the same to you and me, but one pixel has changed, and it classifies it completely differently. You can find examples like this. So, this is really, really challenging.

What you would typically do if you test inputs to the system, you would say, "Okay, this comes from a particular domain," so I can check that the input comes from that domain. Is it within certain intervals or whatever? You don't really have this because you don't have concepts here; you just have pixels. You can think of maybe different ways of looking at images. There could be the old-fashioned type that does image segmentation, and you use this as well, and then you check, "Okay, the system here says that's a road, but have I seen a white line in the middle, and have I seen two black stripes to other side of it?" Or things like that. You can try these things. But this is, I would say in its infancy.

Participant 3: So, you suggest that there is a certain kind of unit testing for same machine vision or machine learning? This actually takes to the diagram a few lines after this. Oui. This one. Here the three is the feature generation, and four is the model building. Say, the model building creates machine learning model, and this machine learning model is used as a feature in the next model. So, the models build on each other. And now I have a system that is not tested like you say, with the code examples you have, the system performs, statistically. Sometimes it's correct, and sometimes it's not, based on the input you have. That would require something like testing using distributions or something. Is there some kind of literature that has done this research, or something that has used models upon models upon models to create this kind of a stack of machine learning systems?

Nauck: Again, great question. I haven't seen any.

Participant 3: None?

Nauck: No. So, the typical testing that you see in machine learning is all around cross-validation. Come up with a model that has this, where you can guarantee a certain performance. That's the idea. But this idea of looking at what type of errors does this model make, and what does it mean in the application context, and how can I detect these arrows when I to use it somewhere – I have not seen any work on this.

See more presentations with transcripts

Apprentissage machine piloté par des tests – Louez la Zero S Motorcycle au tarif le moins cher du marché
4.9 (98%) 32 votes