My pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMa table de billard pour 9 boules Dans un message précédent , j'ai discuté des définitions de l'apprentissage automatique et si JMP le fait (oui, c'est le cas), et ici, je vais appliquer l'apprentissage automatique à certaines données réelles que j'ai collectées.
Deux de mes algorithmes d'apprentissage automatique préférés, parce qu'ils sont faciles à comprendre, sont K Nearest Neighbors et Naïve Bayes. Un algorithme n'a pas besoin d'être complexe pour obtenir de bons résultats, et pour certains problèmes, ces deux algorithmes fonctionnent rapidement et avec précision.
K Nearest Neighbors est à peu près exactement ce que cela ressemble. L'algorithme calcule lesquelles des observations de l'ensemble de données sont les « K » les plus proches du point que vous souhaitez prédire. Ensuite, la prédiction est soit la moyenne de la réponse pour ces points les plus proches (si votre variable de réponse est continue), soit la catégorie la plus fréquente (si votre variable de réponse est catégorique). En règle générale, vous adaptez une plage de K et, à l'aide de la validation croisée, choisissez le K qui offre les meilleures performances prédictives.
On me demande souvent pourquoi Naïve Bayes est appelé "Naïve". Le nom vient du fait que l'hypothèse clé qui est faite lors de l'utilisation de cet algorithme est que toutes les variables prédictives sont indépendantes les unes des autres. Dans de nombreux cas, il s'agit d'une hypothèse naïve. Par conséquent, cette méthode a tendance à mieux fonctionner lorsque cette hypothèse est plus proche de la vérité que si vous avez des variables prédictives fortement corrélées les unes aux autres. Pour faire des prédictions, la probabilité d'une catégorie de la réponse (par exemple, gagner ou perdre) compte tenu des variables prédictives observées est calculée en fonction de la probabilité d'observer ces valeurs dans les données d'apprentissage où cette catégorie est la réponse. La catégorie qui donne la probabilité calculée la plus élevée est la catégorie prédite.
Jetons un coup d'œil à ces deux méthodes en action.
Qui est mieux ?
Mon mari et moi sommes des joueurs passionnés de billard et jouons presque tous les jours lorsque nous rentrons du travail. Après environ un an de jeu, nous pensions que nous étions à peu près à égalité, avec peut-être que j'étais légèrement meilleur. J'ai dit: "Nous pouvons répondre à cette question!"
Ainsi, à partir du 1er janvier 2018, nous avons commencé à suivre nos résultats. Je garde une feuille de calcul (uniquement parce que JMP n'est pas installé sur l'ordinateur de la salle de jeux à la maison !) qui suit le mois, le jour de la semaine, la date, le nombre de jeux que j'ai gagnés, le nombre de jeux auxquels nous avons joué, si J'ai gagné cette session de jeu, et quel jeu de billard a été joué (8-ball ou 9-ball). Parce que c'était d'abord dans une feuille de calcul, il y a aussi des colonnes calculant le pourcentage global de victoires du jeu ainsi que le pourcentage de victoires de la session.
Heureusement, je peux simplement faire glisser mon fichier Excel dans ma fenêtre d'accueil JMP, et l'assistant d'importation Excel fonctionne comme par magie pour créer un tableau de données JMP. Quelques ajustements pour que la session gagne ? indicateur une variable nominale et le nombre de jeux gagnés et joués à des variables ordinales, et je suis prêt à prédire ma prochaine nuit de domination de la piscine !
Imported dataImported dataImported dataImported dataDonnées importées Sauf que je ne suis pas tout à fait prêt. Rappelez-vous que j'ai mentionné avec K Nearest Neighbors que la validation croisée est utilisée pour déterminer le meilleur ajustement K ? Je n'ai pas actuellement de colonne pour la formation et la validation. Alors que K Nearest Neighbors et Naïve Bayes ont la possibilité d'utiliser un pourcentage des données comme validation dans leurs lancements de plateforme, si je veux comparer les deux méthodes, je devrais utiliser le même ensemble de formation pour les deux. Heureusement, JMP m'a également couvert ici, avec l'utilitaire Make Validation Column.
Il existe plusieurs options dans l'utilitaire pour créer la colonne de validation. Si ma variable de réponse était très déséquilibrée, ce qui se produit dans les cas où les échecs sont rares ou à la recherche de transactions frauduleuses, je voudrais utiliser l'option Aléatoire stratifié pour être sûr d'avoir des données avec les deux réponses dans l'ensemble Formation et Validation. Dans ce cas, je sais que toutes mes colonnes sont assez bien équilibrées, il est donc peu probable qu'une catégorie soit complètement absente de mon ensemble de formation ou de validation. Par conséquent, je vais simplement créer ma colonne de validation en utilisant l'option Aléatoire fixe. Je pourrais définir une graine pour la génération aléatoire afin de pouvoir reproduire cette colonne particulière à l'avenir, mais je ne pense pas que ce soit nécessaire dans ce cas.
Temps d'analyse !
Maintenant, colonne de validation en main, je peux lancer la plateforme K Nearest Neighbors dans le menu Analyze > Predictive Modeling. Séance gagnante ? est ma variable de réponse et ce que je voudrais prédire, à savoir pour mon anniversaire, le samedi 13 octobre. [Remarque : j'ai commencé à écrire cet article avant mon anniversaire ; lisez jusqu'à la fin pour savoir si les prédictions faites ici étaient correctes !] Mois, Jour, Jeu et Joué (le nombre de jeux joués) sont mes facteurs. Je ne pense pas que Date sera utile, principalement parce que chaque combinaison Mois-Date se produit une fois (sauf quelques jours de week-end où nous avons joué plusieurs sessions). Je vais également demander à la plate-forme de calculer les voisins les plus proches jusqu'à 25 plutôt que le 10 par défaut.
KNN Launch DialogKNN Launch DialogKNN Launch DialogKNN Launch DialogBoîte de dialogue de lancement KNN
La partie Sélection de modèle du rapport trace le taux d'erreur de classification calculé sur chacun des ensembles d'apprentissage et de validation pour les modèles avec 1 à 25 voisins. La ligne de sélection est fixée à K = 20 - qui a le plus petit taux d'erreur de classification sur l'ensemble de validation. Le tableau ci-dessous montre qu'un peu plus de 44 % des observations de l'ensemble de validation ont été mal classées. La matrice de confusion montre qu'à peu près le même nombre d'observations qui étaient en fait des gains ou des pertes ont été mal classées. Le Mosaic Plot donne une représentation visuelle de la matrice de confusion.
KNN ReportKNN ReportKNN ReportKNN ReportRapport KNN Le taux de mauvaise classification n'est pas très élevé, mais je ne suis pas sûr que mes prédicteurs soient vraiment prédictifs. Si j'avais pensé à écrire ce post le 1er janvier, j'aurais peut-être suivi des choses comme le stress de la journée, si nous profitions ou non d'une boisson pour adultes avec notre jeu, et peut-être combien de temps j'avais dormi eu la veille ! Je ne vais donc pas reprocher à l'algorithme de ne pas m'avoir donné un modèle parfaitement adapté.
Je vais enregistrer la formule de prédiction dans la table de données, afin que je puisse faire ma prédiction sur mon anniversaire après avoir ajusté ces mêmes données à l'aide de Naïve Bayes.
NB Launch DialogNB Launch DialogNB Launch DialogNB Launch DialogBoîte de dialogue de lancement NB
La première chose que nous remarquons est que le taux d'erreur de classification sur l'ensemble de validation est un peu plus faible, à un peu plus de 40 %. La matrice de confusion nous montre que nous avons correctement classé sept observations de plus dans l'ensemble de validation avec le modèle Naïve Bayes qu'avec le modèle K Nearest Neighbors. Enfin, nous avons une courbe ROC pour chaque ensemble. Sur l'ensemble de validation, notre aire sous la courbe (une autre mesure de la qualité de l'ajustement du modèle) est de 0,5676. Bien que ce ne soit pas génial, c'est toujours mieux que de deviner au hasard, ce qui nous donnerait une AUC ≈ 0,5.
NB ReportNB ReportNB ReportNB ReportRapport N.-B.
J'enregistrerai à nouveau la formule de prédiction dans la table de données pour faire ma prédiction sur les performances de ma piscine d'anniversaire.
Parce que nous jouons une série "best of 9" lorsque nous jouons au 9-ball, je ne sais pas à l'avance combien de jeux nous jouerons. Vais-je gagner rapidement dans une déroute 5 – 0 ? Ou faudra-t-il les 9 jeux pour déterminer un gagnant ? Je vais ajouter une ligne pour chacun des nombres potentiels de jeux joués (5 à 9) et voir ce que prédisent nos modèles.
Added rows for predictionAdded rows for predictionAdded rows for predictionAdded rows for predictionLignes ajoutées pour la prédiction
Pour ce jour particulier, les deux modèles conviennent que je devrais être le gagnant à moins que la série ne passe à 9 matchs. Dans ce cas, K Nearest Neighbors prédit que je vais perdre. Ce sera un joyeux anniversaire !
Quelques jours plus tard, mon anniversaire est arrivé et armé de la certitude que je vais gagner, je suis entré dans la salle de jeux. Environ une heure plus tard, je suis sorti, découragé, ayant perdu trois matchs à cinq. Au moins j'ai du gâteau !
Ce qui s'est passé?
Les choses semblaient si bonnes pour moi selon les modèles! Comment ai-je pu perdre ? Le modèle Naïve Bayes me donne l'occasion d'examiner la probabilité estimée de gagner en plus de la prédiction ultime. Il semble que j'aurais dû y jeter un coup d'œil aussi, plutôt que de mettre mes espoirs si haut. J'ai enregistré les formules de probabilité dans le tableau de données, et il devient clair que même si on m'avait prédit que je gagnerais, la probabilité la plus élevée était d'un peu moins de 75 % et la plus faible était d'un peu plus de 60 %. Cela signifie que mon mari avait en fait de bonnes chances de gagner. Et en ne regardant que la prédiction finale, j'ai mal évalué mes chances réelles de gagner un anniversaire. Je prendrai cela comme un avertissement pour regarder toutes les informations dont je dispose avant de placer mes paris la prochaine fois !
Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Win probabilities. [Note: some data table columns hidden for space.]Probabilités de victoire. [Remarque : certaines colonnes de la table de données sont masquées par manque d'espace.]
Tir d'adieu
Quelques derniers mots sur ces modèles : même les algorithmes les plus avancés ne fonctionnent pas bien lorsque les variables du modèle ne sont pas très prédictives de la réponse. Nous le voyons en action avec ces données et les taux élevés d'erreurs de classification qu'elles ont. Comme je l'ai dit plus tôt, ce n'est pas la faute des algorithmes, mais une faute dans les données que j'ai collectées. La plupart des modèles avec des prédicteurs raisonnables ont beaucoup plus de succès qu'ici. Peut-être qu'en 2019 j'ajouterai quelques informations supplémentaires à ma collecte de données et que je revisiterai ces modèles.
De plus, le billard est un événement sportif où l'élément humain joue un rôle plus important dans le résultat que de nombreuses applications habituelles (peut-être même la plupart) de l'apprentissage automatique. Vous pouvez voir cela se jouer presque tous les week-ends à l'automne dans des matchs de football collégiaux et professionnels où un outsider réussit la surprise. Ceci est parfois appelé "n'importe quel dimanche". Cependant, à long terme sur de nombreux essais compte tenu de ces probabilités, je gagnerais mon pari ; tout comme la plupart du temps, l'équipe de football préférée gagne et les parieurs sportifs gagnent leur argent. Et, en fait, si je regarde les jours suivants après mon anniversaire, j'ai gagné environ 60% du temps.