Dans le cadre de sa démarche visant à comprendre les performances des levures industrielles dans des conditions spécifiques à chaque client, Novonesis s'appuie sur des équipes de recherche et développement spécialisées dans la production de données pertinentes pour la sélection des levures candidates les plus performantes à l'échelle client. Nos scientifiques utilisent régulièrement les statistiques pour répondre à des questions complexes liées à des scénarios clients, qu'ils soient généraux ou spécifiques.
L'intégration des méthodes bayésiennes dans les bibliothèques Python a considérablement amélioré notre capacité à calculer des modèles et à faciliter la prise de décisions basées sur les données et les probabilités, même en l'absence de résultats statistiquement significatifs. De plus, les nouvelles fonctionnalités de JMP 18 permettent une intégration fluide avec Python, permettant ainsi à nos scientifiques de générer de vastes ensembles de données et de répondre aux demandes spécifiques des clients directement depuis JMP. En exploitant les données de recherche applicative, les données d'essais clients et les informations antérieures, nous nous engageons dans une démarche visant à fonder nos décisions sur des données fiables et des statistiques bayésiennes, plutôt que de nous fier à des tendances statistiquement non significatives. Cette approche vise à fournir une compréhension et une quantification plus complètes des performances, pour une prise de décision plus éclairée.
Bonjour, je m'appelle Matt Watts. Je suis chercheur principal chez Novonesis, spécialisé en bioénergie et en recherche et développement. La bioénergie consiste ici à transformer le maïs en éthanol. Mon rôle consiste à développer les levures et les enzymes de scarification qui optimisent ce processus et permettent d'obtenir le meilleur rendement possible pour nos clients.
Aujourd'hui, j'ai le plaisir de vous parler de la manière dont nous utilisons l'analyse bayésienne, ou statistique bayésienne, pour prendre des décisions basées sur les données. Nous aborderons brièvement les principes de base des statistiques bayésiennes. C'est un domaine relativement nouveau pour moi, que j'étudie depuis un an. Je ne suis absolument pas un expert, mais c'est un apprentissage que je poursuis. Avec JMP18, l'intégration de Python est encore plus poussée. Nous verrons les enseignements tirés de cette intégration et comment elle s'est améliorée, ainsi que les difficultés rencontrées au départ.
Introduction aux statistiques bayésiennes. L'objectif est d'obtenir des énoncés de probabilité pour prendre de meilleures décisions basées sur les données. C'est également très utile car on peut estimer les probabilités à partir de connaissances a priori. On peut contraindre différentes variables en fonction d'informations préalables, comme le fait que la concentration d'éthanol ne peut jamais être inférieure à zéro. C'est particulièrement important pour la modélisation et d'autres domaines où les statistiques bayésiennes excellent.
J'ai fait référence à un cours de Richard McElreath intitulé « Repenser les statistiques ». Il se trouve en bas à droite de la diapositive. Le lien n'est pas cliquable, mais j'espère que vous pouvez le voir. Il est assez court. Ce cours m'a été extrêmement utile pour comprendre les statistiques bayésiennes, et nous allons justement utiliser un exemple tiré de ce cours pour illustrer le flux de travail bayésien, ce qui vous permettra de mieux appréhender la méthodologie bayésienne.
Nous allons ici explorer un exemple de calcul de la proportion de la surface du globe recouverte d'eau. Il s'agit d'une démarche bayésienne, que vous trouverez à droite. Imaginez un artiste : il ne part pas d'une feuille blanche pour obtenir un hibou entièrement dessiné. Il procède par étapes pour ajouter progressivement des détails. Il commence par les formes, puis trace les lignes, puis dessine la structure des yeux, les plumes, etc.
C'est crucial lorsqu'on aborde le flux de travail bayésien. La première étape consiste à définir un modèle génératif ou causal pour identifier les zones terrestres ou aquatiques. On peut prendre un globe terrestre et prélever plusieurs échantillons, qui représenteront respectivement les zones terrestres et aquatiques. La deuxième étape consiste à estimer la proportion de la surface du globe recouverte d'eau. La troisième étape permet d'affiner cette estimation. On va développer un modèle statistique pour produire une estimation de cette proportion à partir de plusieurs échantillons de zones terrestres ou aquatiques.
C'est là que les choses se compliquent vraiment avec l'approche bayésienne, car il faut souvent un modèle statistique différent pour chaque estimation. Il est indispensable de bien maîtriser les modèles statistiques, leur signification et leur interaction pour fournir l'information recherchée. J'ai trouvé de nombreuses ressources utiles tout au long de mon parcours, et j'en parlerai plus en détail ultérieurement.
À l'étape trois, nous allons tester… En fait, à l'étape quatre. À l'étape quatre, nous allons ajouter des détails. Nous allons tester le modèle statistique à l'aide de notre modèle génératif. C'est exactement ce que nous avons fait au début en sélectionnant simplement le globe. Nous allons intégrer ces échantillons au modèle statistique et vérifier si la proportion de la surface du globe recouverte d'eau reste la même. Si cela fonctionne, et que c'est logique, nous pourrons alors tester le modèle statistique un grand nombre de fois.
Généralement, nous répétons cette opération 10 000 fois sur plusieurs chaînes, ce qui nous donne une distribution a posteriori. Cette distribution nous aide à déterminer la probabilité de la proportion de la surface du globe recouverte d'eau. Sur ce graphique, on constate que la probabilité la plus élevée nous amène à penser que le globe est recouvert d'eau à 75 %, ce qui est très instructif : on obtient ainsi une représentation visuelle du modèle. Avec ces étapes de travail, il est essentiel de bien comprendre les tests. Il est indispensable de documenter son travail ; cela permettra non seulement de réduire les erreurs, mais aussi de garantir la reproductibilité et de faciliter la compréhension du processus par d'autres.
Nous avons brièvement abordé la notion de distribution a posteriori, mais qu'est-ce que c'est exactement ? Une distribution a posteriori est la distribution des probabilités postérieures. C'est ici que l'approche bayésienne, et plus particulièrement les probabilités, entre en jeu. Ces probabilités sont calculées en multipliant la vraisemblance par les distributions a priori, c'est-à-dire en divisant l'information a priori par les données ou les mesures que vous avez obtenues lors de votre expérience.
Comme vous pouvez le voir en rouge, la distribution nous aide à comprendre que la Terre a une forte probabilité d'être recouverte à 75 % d'eau. Ce sont les probabilités dont je parlais au début, qui nous permettent de prendre des décisions basées sur les données. Voilà pour les bases de l'approche bayésienne. Mais je voulais surtout souligner la difficulté d'apprentissage que j'ai rencontrée lors de l'intégration de JMP et Python. Il y a eu des hauts et des bas, des points faibles, des obstacles, mais au final, j'ai constaté de nombreux avantages à utiliser Python dans JMP, notamment en combinant les scripts JSL et Python.
Je n'ai pas le temps de passer en revue toute cette diapositive, mais je voulais simplement vous recommander PyMC. Cette bibliothèque Python a non seulement été essentielle au code de l'analyse bayésienne, mais son site web propose également d'excellents exemples de modèles statistiques utilisables pour de nombreux tests. De plus, il vous oriente vers un autre logiciel de visualisation, que nous aborderons plus loin, qui vous permet de tester votre modèle avant même de commencer à développer un algorithme ou quoi que ce soit d'autre pour déterminer le résultat final.
PyMC est conçu exclusivement pour les notebooks Jupyter. Du coup, on me demande souvent : « Pourquoi utiliser l'interpréteur Python de JMP ? » La réponse est simple : faciliter la prise en main pour mes collègues. Notre entreprise utilise JMP de manière systématique. En proposant une interface intuitive dans JMP, avec un backend en Python, mes collègues disposent d'un nouvel outil pour les aider dans leurs prises de décision. Voilà pourquoi nous avons entrepris ce projet.
Programmer en Python dans JMP. La visualisation est l'un des aspects que j'apprécie le plus dans JMP. On peut observer et explorer les données. C'est d'ailleurs l'un des points les plus fastidieux, car Python propose des bibliothèques natives pour la visualisation, mais elles ne fonctionnent pas dans JMP. On doit se contenter d'envoyer une image. Nous avons écrit une partie du code pour générer des tableaux de données à partir des informations fournies par ces bibliothèques, ce qui permet d'explorer un peu les données, mais cela m'a donné du fil à retordre.
En revanche, JMP facilite grandement la saisie par l'utilisateur, notamment pour les listes de colonnes ou pour déterminer si l'utilisateur souhaite poursuivre l'exécution du script. Il s'agit simplement de fenêtres contextuelles interactives, évitant ainsi de devoir deviner où saisir le code, comment nommer les colonnes, etc.
Enfin, et c'est là que j'ai vraiment constaté un réel avantage, c'est lors de l'intégration de JSL dans un script Python. Désormais, nous pouvons afficher des images dans des panneaux, accompagnées de descriptions pour aider l'utilisateur à comprendre ce qu'il regarde. Ce sont là, à mon avis, des avancées considérables.
Passons maintenant au cœur du sujet : le script. Nous commencerons par sélectionner les facteurs qui influenceront le résultat observé. Ici, ce résultat est la production d'éthanol. Nous utiliserons un exemple de données de fermentation issues de JMP ; vous pouvez donc les télécharger une fois le script en votre possession.
Tout d'abord, concernant le flux de travail bayésien, on en revient toujours à tester, tester et encore tester. Nous allons comparer des données simulées à nos données observées pour vérifier si le modèle statistique choisi est performant. Nous constatons qu'il l'est. Il se superpose bien à nos données observées sans présenter de décalage excessif sur les axes.
Nous pouvons ensuite tester le modèle. Nous pouvons examiner les paramètres univariés du modèle pour observer comment leurs densités se superposent. Si elles se superposent parfaitement, c'est un excellent signe que le modèle fonctionne. Nous pouvons utiliser ici les graphiques de trace, fournis par la bibliothèque Python rvs, pour nous y aider.
Le dernier test que nous avons effectué consistait en un diagramme de représentation énergétique, en observant cet échantillonneur sans demi-tour. C'est cet algorithme principal qui fournit la réponse. Là encore, nous vérifiions que ces courbes, ces distributions, se superposaient, et c'était le cas.
Nous arrivons maintenant à la dernière partie : le jeu de données final. C'est crucial, car je voulais montrer comment JMP ajuste le modèle par la méthode des moindres carrés ordinaires. On constate que le niveau du réservoir et la quantité d'air ont une influence très significative sur la production d'éthanol. L'approche bayésienne confirme ce résultat : le niveau du réservoir et la quantité d'air sont significatifs, et même les valeurs les plus éloignées de zéro que l'on puisse obtenir.
Mais ce qui est intéressant avec l'approche bayésienne, c'est qu'elle permet de mieux comprendre les effets, qu'ils soient positifs ou négatifs. Ici, le niveau du réservoir étant élevé et négatif, cela signifie que plus le niveau est haut, plus la concentration d'éthanol est faible. À l'inverse, le niveau d'air étant élevé et positif, cela signifie que plus le niveau d'air est élevé, plus la concentration d'éthanol est élevée.
En tant que spécialiste de la fermentation, je ne suis pas totalement convaincu par la conclusion finale. Il s'agit bien sûr d'un échantillon de données, mais c'est vraiment intéressant d'avoir obtenu le même résultat avec les deux méthodes, et l'approche bayésienne nous apporte des informations supplémentaires précieuses pour nos décisions futures. Comme l'indique le titre, chez Novozymes (ou Novonesis), nous prenons des décisions concernant les levures.
Nous avons choisi un personnage fictif comme nom de produit : Clint Yeastwood. Grâce à l’analyse bayésienne, nous avons pu établir des probabilités pour faciliter nos décisions. Cette analyse montre que Clint Yeastwood atteint un taux d’éthanol supérieur de 1,1 % à celui de BadFerm dans 78 % des cas. Cette information est cruciale pour le développement de nos produits.
En résumé, nous avons abordé aujourd'hui l'intégration de Python dans JMP et l'exploration des méthodes bayésiennes. Nous espérons avoir suscité chez chacun l'envie d'explorer de nouvelles pistes et d'envisager de nouvelles approches, tout en rappelant l'importance cruciale des tests. Avec les méthodes bayésiennes, il est indispensable de tester et de documenter son travail afin de le comprendre soi-même, mais aussi pour que vos collègues et toute autre personne à qui vous le présentez puissent comprendre votre démarche.
Enfin, tout repose sur la prise de décision. Grâce à cela, j'espère que vous serez en mesure de prendre des décisions éclairées par les données, et nous vous aurons ouvert l'esprit à de nouvelles perspectives. Je vous remercie sincèrement de m'avoir écouté aujourd'hui. J'espère que cela vous a été utile. Veuillez consulter le site web. Vous y trouverez le script et toutes les informations nécessaires. Si toutefois vous avez des questions, n'hésitez pas à me contacter. Merci.