My pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMy pool table set for 9-ballMein Billardtisch ist für 9 Bälle ausgelegt In ein früherer Beitrag Ich habe Definitionen von maschinellem Lernen besprochen und ob JMP tut es (ja, das tut es), und hier werde ich maschinelles Lernen auf einige echte Daten anwenden, die ich gesammelt habe.
Zwei meiner Lieblingsalgorithmen für maschinelles Lernen, weil sie leicht zu verstehen sind, sind K Nearest Neighbors und Naive Bayes. Ein Algorithmus muss nicht komplex sein, um gute Ergebnisse zu erzielen, und bei einigen Problemen arbeiten diese beiden Algorithmen schnell und genau.
K Nearest Neighbors ist ziemlich genau das, wonach es sich anhört. Der Algorithmus berechnet, welche der Beobachtungen im Datensatz das „K“ sind, das dem Punkt am nächsten liegt, den Sie vorhersagen möchten. Dann ist die Vorhersage entweder der Durchschnitt der Antwort für die nächstgelegenen Punkte (wenn Ihre Antwortvariable kontinuierlich ist) oder die häufigste Kategorie (wenn Ihre Antwortvariable kategorisch ist). Normalerweise passen Sie einen Bereich von Ks an und wählen mithilfe der Kreuzvalidierung aus, welcher K die beste Vorhersageleistung bietet.
Ich werde oft gefragt, warum Naive Bayes „Naiv“ genannt wird. Der Name rührt daher, dass die wichtigste Annahme bei der Verwendung dieses Algorithmus darin besteht, dass alle Prädiktorvariablen unabhängig voneinander sind. In vielen Fällen ist das eine naive Annahme. Daher ist die Leistung dieser Methode tendenziell besser, wenn diese Annahme näher an der Wahrheit liegt, als wenn Prädiktorvariablen vorliegen, die stark miteinander korrelieren. Um Vorhersagen zu treffen, wird die Wahrscheinlichkeit einer Kategorie der Antwort (z. B. Sieg oder Niederlage) angesichts der beobachteten Prädiktorvariablen basierend auf der Wahrscheinlichkeit der Beobachtung derjenigen Werte in den Trainingsdaten berechnet, bei denen diese Kategorie die Antwort ist. Die Kategorie, die zu der höheren berechneten Wahrscheinlichkeit führt, ist die vorhergesagte Kategorie.
Schauen wir uns diese beiden Methoden in Aktion an.
Wer ist besser?
Mein Mann und ich sind begeisterte Billardspieler und spielen fast jeden Tag, wenn wir von der Arbeit nach Hause kommen. Nach ungefähr einem Jahr Spielzeit waren wir der Meinung, dass wir ziemlich ausgeglichen wären, wobei ich vielleicht etwas besser war. Ich sagte: „Wir können diese Frage beantworten!“
Deshalb haben wir ab dem 1. Januar 2018 damit begonnen, unsere Ergebnisse zu verfolgen. Ich führe eine Tabelle (nur weil auf dem Computer im Spielzimmer zu Hause JMP nicht installiert ist!), in der der Monat, der Wochentag, das Datum, wie viele Spiele ich gewonnen habe, wie viele Spiele wir gespielt haben und ob Ich habe diese Spielsitzung gewonnen und welches Billardspiel gespielt wurde (8-Ball oder 9-Ball). Da dies zunächst in einer Tabelle erfolgte, gibt es auch Spalten, in denen der Gesamtgewinnprozentsatz im Spiel sowie der Sitzungsgewinnprozentsatz berechnet werden.
Zum Glück kann ich meine Excel-Datei einfach in mein JMP-Startfenster ziehen und der Excel-Import-Assistent entfaltet seine Wirkung, um eine JMP-Datentabelle zu erstellen. Ein paar Optimierungen, damit die Sitzung gewinnt? Indikator eine nominale Variable und die Anzahl der gewonnenen und gespielten Spiele eine ordinale Variable, und ich bin bereit, meine nächste Nacht der Pool-Dominanz vorherzusagen!
Imported dataImported dataImported dataImported dataImportierte Daten Außer, dass ich noch nicht ganz bereit bin. Erinnern Sie sich, dass ich bei K Nearest Neighbors erwähnt habe, dass eine Kreuzvalidierung verwendet wird, um das am besten passende K zu bestimmen? Ich habe derzeit keine Spalte für Training und Validierung. Während sowohl K Nearest Neighbors als auch Naive Bayes die Möglichkeit haben, einen Prozentsatz der Daten als Validierung bei ihren Plattformeinführungen zu verwenden, sollte ich für einen Vergleich der beiden Methoden für beide das gleiche Trainingsset verwenden. Glücklicherweise hat JMP auch hier mit dem Dienstprogramm „Make Validation Column“ für mich gesorgt.
Das Dienstprogramm bietet mehrere Optionen zum Erstellen der Validierungsspalte. Wenn meine Antwortvariable stark unausgeglichen wäre, was in Fällen vorkommt, in denen Fehler selten sind oder nach betrügerischen Transaktionen gesucht wird, möchte ich die Option „Stratified Random“ verwenden, um sicherzustellen, dass ich Daten mit beiden Antworten im Trainings- und Validierungssatz habe. In diesem Fall weiß ich, dass alle meine Spalten ziemlich ausgewogen sind, sodass es unwahrscheinlich ist, dass eine Kategorie in meinem Trainings- oder Validierungssatz vollständig fehlt. Daher erstelle ich meine Validierungsspalte einfach mit der Option „Fester Zufall“. Ich könnte einen Startwert für die Zufallsgenerierung festlegen, damit ich diese bestimmte Spalte in Zukunft erneut reproduzieren kann, aber ich glaube nicht, dass dies in diesem Fall notwendig ist.
Analysezeit!
Jetzt, mit der Validierungsspalte in der Hand, kann ich die Plattform „K Nearest Neighbors“ im Menü „Analysieren“ > „Prädiktive Modellierung“ starten. Sitzungssieg? ist meine Antwortvariable und das, was ich vorhersagen möchte, nämlich für meinen Geburtstag, Samstag, den 13. Oktober. [Hinweis: Ich habe vor meinem Geburtstag mit dem Schreiben dieses Beitrags begonnen; Lesen Sie bis zum Ende, um herauszufinden, ob die hier getroffenen Vorhersagen richtig waren!] Monat, Tag, Spiel und gespielt (die Anzahl der gespielten Spiele) sind meine Faktoren. Ich glaube nicht, dass das Datum hilfreich sein wird, vor allem, weil jede Monat-Datum-Kombination einmal vorkommt (mit Ausnahme einiger Wochenendtage, an denen wir mehrere Sitzungen gespielt haben). Außerdem werde ich die Plattform die nächsten Nachbarn bis zu 25 berechnen lassen, statt der standardmäßigen 10.
KNN Launch DialogKNN Launch DialogKNN Launch DialogKNN Launch DialogKNN-Startdialog
Der Abschnitt „Modellauswahl“ des Berichts verfolgt die Fehlklassifizierungsrate, die für jeden Trainings- und Validierungssatz für die Modelle mit 1 bis 25 Nachbarn berechnet wurde. Die Auswahllinie ist auf K = 20 eingestellt – was die kleinste Fehlklassifizierungsrate im Validierungssatz aufweist. Die folgende Tabelle zeigt, dass etwas mehr als 44 % der Beobachtungen im Validierungssatz falsch klassifiziert wurden. Die Verwirrungsmatrix zeigt, dass ungefähr die gleiche Anzahl von Beobachtungen, die tatsächlich Gewinne oder Verluste waren, falsch klassifiziert wurden. Der Mosaikplot bietet eine visuelle Darstellung der Verwirrungsmatrix.
KNN ReportKNN ReportKNN ReportKNN ReportKNN-Bericht Die Fehlklassifizierungsrate ist nicht besonders hoch, aber ich bin mir nicht sicher, ob meine Prädiktoren wirklich so prädiktiv sind. Wenn ich darüber nachgedacht hätte, diesen Beitrag bereits am 1. Januar zu schreiben, hätte ich vielleicht Dinge im Auge behalten, wie stressig der Tag gewesen war, ob wir zu unserem Spiel ein Getränk für Erwachsene genossen oder nicht und vielleicht, wie viel Schlaf ich bekommen würde hatte am Abend zuvor! Ich werde dem Algorithmus also nicht vorwerfen, dass er mir kein gut passendes Modell liefert.
Ich werde die Vorhersageformel in der Datentabelle speichern, damit ich meine Vorhersage zu meinem Geburtstag treffen kann, nachdem ich dieselben Daten mit Naive Bayes angepasst habe.
NB Launch DialogNB Launch DialogNB Launch DialogNB Launch DialogNB-Startdialog
Das erste, was uns auffällt, ist, dass die Fehlklassifizierungsrate im Validierungssatz mit knapp über 40 % etwas geringer ist. Die Verwirrungsmatrix zeigt uns, dass wir mit dem Naive Bayes-Modell sieben Beobachtungen mehr im Validierungssatz korrekt klassifiziert haben als mit dem K Nearest Neighbors-Modell. Schließlich haben wir für jeden Satz eine ROC-Kurve. Im Validierungssatz beträgt unsere Fläche unter der Kurve (ein weiteres Maß für die Qualität der Modellanpassung) 0,5676. Das ist zwar nicht großartig, aber immer noch besser als eine zufällige Schätzung, die uns eine AUC von ≈ 0,5 ergeben würde.
NB ReportNB ReportNB ReportNB ReportNB-Bericht
Ich speichere die Vorhersageformel erneut in der Datentabelle, um meine Vorhersage über die Leistung meines Geburtstagspools zu treffen.
Da wir beim 9-Ball eine „Best of 9“-Serie spielen, weiß ich nicht im Voraus, wie viele Spiele wir spielen werden. Werde ich bei einer 5:0-Niederlage schnell gewinnen? Oder braucht es alle 9 Spiele, um einen Gewinner zu ermitteln? Ich füge eine Zeile für jede der potenziell gespielten Spiele (5 bis 9) hinzu und schaue, was unsere Modelle vorhersagen.
Added rows for predictionAdded rows for predictionAdded rows for predictionAdded rows for predictionZeilen zur Vorhersage hinzugefügt
Für diesen besonderen Tag sind sich beide Modelle einig, dass ich der Gewinner sein sollte, es sei denn, die Serie geht über 9 Spiele. In diesem Fall sagt K Nearest Neighbors voraus, dass ich verlieren werde. Es wird alles Gute zum Geburtstag!
Ein paar Tage später kam mein Geburtstag und mit der Gewissheit, dass ich gewinnen werde, betrat ich das Spielzimmer. Ungefähr eine Stunde später schied ich niedergeschlagen aus, nachdem ich drei zu fünf Spielen verloren hatte. Wenigstens habe ich Kuchen!
Was ist passiert?
Den Models zufolge sah es für mich so gut aus! Wie hätte ich verlieren können? Das Naive-Bayes-Modell gibt mir die Möglichkeit, neben der endgültigen Vorhersage auch die geschätzte Gewinnwahrscheinlichkeit zu betrachten. Es sieht so aus, als hätte ich mir diese auch ansehen sollen, anstatt mir so große Hoffnungen zu machen. Ich habe die Wahrscheinlichkeitsformeln in der Datentabelle gespeichert und es wird deutlich, dass die höchste Wahrscheinlichkeit knapp unter 75 % und die niedrigste bei knapp über 60 % lag, obwohl vorhergesagt wurde, dass ich gewinne. Das bedeutet, dass mein Mann tatsächlich eine ziemlich gute Gewinnchance hatte. Und als ich mir nur die endgültige Vorhersage ansah, habe ich meine tatsächlichen Chancen auf einen Geburtstagssieg falsch eingeschätzt. Ich nehme das als Vorsichtsmaßnahme und schaue mir alle Informationen an, die mir zur Verfügung stehen, bevor ich das nächste Mal meine Wetten platziere!
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.]Gewinnwahrscheinlichkeiten. [Hinweis: Einige Datentabellenspalten sind aus Platzgründen ausgeblendet.]
Abschiedsschuss
Ein paar abschließende Worte zu diesen Modellen: Selbst die fortschrittlichsten Algorithmen funktionieren nicht gut, wenn die Variablen im Modell die Reaktion nicht sehr gut vorhersagen. Wir sehen das anhand dieser Daten und der hohen Fehlklassifizierungsraten, die sie aufweisen. Wie ich bereits sagte, liegt dies nicht an den Algorithmen, sondern an den von mir gesammelten Daten. Die meisten Modelle mit vernünftigen Prädiktoren sind viel erfolgreicher als diese hier. Vielleicht werde ich 2019 meiner Datensammlung weitere Informationen hinzufügen und diese Modelle noch einmal aufgreifen.
Darüber hinaus ist Billard ein Sportereignis, bei dem der menschliche Faktor eine größere Rolle für das Ergebnis spielt als bei vielen (vielleicht sogar den meisten) üblichen Anwendungen des maschinellen Lernens. Dies kann man fast jedes Wochenende im Herbst bei College- und Profi-Footballspielen erleben, bei denen ein Außenseiter für eine Überraschung sorgt. Dies wird manchmal als „jeder beliebige Sonntag“ bezeichnet. Langfristig würde ich jedoch bei vielen Versuchen angesichts dieser Wahrscheinlichkeiten meine Wette gewinnen; So wie in den meisten Fällen die favorisierte Fußballmannschaft gewinnt und die Sportwetter ihr Geld verdienen. Und tatsächlich, wenn ich mir die Tage nach meinem Geburtstag ansehe, habe ich in etwa 60 % der Fälle gewonnen.