English 日本語
preview
The Disagreement Problem: Diving Deeper into The Complexity Explainability in AI

The Disagreement Problem: Diving Deeper into The Complexity Explainability in AI

MetaTrader 5Maschinelles Lernen | 20 Mai 2024, 13:05
67 0
Gamuchirai Zororo Ndawana
Gamuchirai Zororo Ndawana

Das Problem von Uneinigkeiten

Diese Uneinigkeit (disagreement) ist ein offenes Forschungsgebiet in einem interdisziplinären Bereich, der als „Erklärbare Künstliche Intelligenz“ (Explainable Artificial Intelligence, XAI) bekannt ist. Die Erklärbare Künstliche Intelligenz versucht uns zu helfen, zu verstehen, wie unsere Modelle zu ihren Entscheidungen kommen, aber leider ist das alles leichter gesagt als getan. 

Wir alle wissen, dass die Modelle für maschinelles Lernen und die verfügbaren Datensätze immer größer und komplexer werden. Tatsächlich können die Datenwissenschaftler, die Algorithmen für maschinelles Lernen entwickeln, das Verhalten ihres Algorithmus nicht für alle möglichen Datensätze genau erklären.  Die Erklärbare Künstliche Intelligenz (Explainable Artificial Intelligence, XAI) hilft uns, Vertrauen in unsere Modelle aufzubauen, ihre Funktionalität zu erklären und zu überprüfen, ob die Modelle für den Einsatz in der Produktion bereit sind. So vielversprechend das auch klingen mag, dieser Artikel wird dem Leser zeigen, warum wir keiner Erklärung, die wir von einer Anwendung der Explainable Artificial Intelligence-Technologie erhalten, blind vertrauen können. 

Inhaltsverzeichnis

  1. Einführung
  2. Überblick über die Erklärungsmethoden
  3. Globale Erklärungen und lokale Erklärungen
  4. Modell-agnostische Erklärungen und modellspezifische Erklärungen
  5. Definition des Problems der Uneinigkeiten und der Faktoren, die zum Problem beitragen
  6. Fallstudie
  7. Schlussfolgerung
  8. Empfehlungen


Einführung

Mit Hilfe des maschinellen Lernens können wir Beziehungen und Interaktionen in unseren Daten lernen, aber wie können wir die Beziehungen und Interaktionen innerhalb unseres Modells lernen?  Diese Frage lässt sich am besten mit Hilfe von Erklärungsmodellen beantworten. In unserer Diskussion werden wir einige verschiedene Erklärungstechniken betrachten. Mit Hilfe von Erklärungsmodellen lassen sich Fragen der folgenden Art beantworten:

  • Welche Merkmale fand unser Modell am informativsten?
  • Wenn wir 1000 Merkmale in unserem Datensatz haben, wie können wir die informativsten von den am wenigsten informativen trennen?
  • Wie ändert sich die Ausgabe unseres Modells, wenn sich ein Merkmal ändert?
  • Welche Funktionen könnten sich für eine weitere Entwicklung lohnen?

Die Antworten auf die obigen Fragen sind von erheblichem Wert, aber es gibt ein großes Hindernis, das uns den Weg versperren könnte. Die Herausforderung besteht darin, dass wir manchmal Uneinigkeiten zwischen Erklärungen beobachten können, die dasselbe Modell bewerten. Leider gibt es zum Zeitpunkt der Abfassung dieses Artikels noch keine weltweit anerkannten Verfahren zur Lösung des Problems, aber wir werden heute beschließen, unseren eigenen Rahmen zur Abschwächung des Problems zu schaffen.

Es gibt einen weltweiten Trend, künstliche Intelligenz in ein breiteres Spektrum von Anwendungen zu integrieren. Wir müssen jedoch in der Lage sein, unsere Modelle, die von ihnen erlernten Assoziationen und ihren Entscheidungsprozess gründlich zu erklären, bevor wir überhaupt daran denken können, dem Modell zu vertrauen. Diese gewünschte Eigenschaft wird als „Erklärbarkeit“ bezeichnet. Die Erklärbare Künstliche Intelligenz (XAI) bietet ein enormes Potenzial, um nachzuvollziehen, wie ein bestimmtes Modell zu seinen Vorhersagen kommt. Es gibt sie, weil unsere Modellierungstechniken immer ausgefeilter werden, während unsere Fähigkeit, sie zu interpretieren, allmählich abnimmt. 

Um den Einstieg zu erleichtern, werden wir zunächst ein einfaches Beispiel mit Konzepten durcharbeiten, die den meisten Lesern bereits bekannt sein dürften. Indem wir zunächst gemeinsam ein einfacheres Problem bearbeiten, werden wir schnell ein Gespür für verschiedene Erklärungsmethoden entwickeln. Nach Abschluss dieses Beispiels sind wir in der Lage, unsere Fähigkeiten auf jedes maschinelle Lernmodell anzuwenden, das auf aktuellen Marktdaten trainiert wurde, die wir von unserem MetaTrader 5 Terminal abrufen.

Das Beispiel, das wir betrachten werden, ist ein einfaches Problem, bei dem es darum geht, das Gehalt eines Sportlers anhand seiner körperlichen Fähigkeiten zu schätzen. Es liegt auf der Hand, dass ein Sportler mit zunehmenden körperlichen Fähigkeiten höhere Gehälter fordern und erwarten kann, aber die Frage ist, welche körperlichen Fähigkeiten den größten Einfluss auf die Gehaltserhöhung haben.

Der Datensatz, den wir in unserem Beispielproblem verwenden werden, wurde von der Videospielfirma Electronic Arts im Rahmen ihrer erfolgreichen Videospielserie „Madden NFL“ zusammengestellt, die es den Spielern ermöglicht, Spiele in der Rolle ihres bevorzugten American-Football-Profis zu simulieren. Der Datensatz enthält detaillierte Statistiken über professionelle American-Football-Spieler. Wir werden 4 verschiedene Modelle trainieren, um das Gehalt eines Spielers auf der Grundlage von Merkmalen des Spielers wie Alter, Sprintgeschwindigkeit und Stärke vorherzusagen. Von dort aus werden wir verschiedene Techniken zur Erklärung von Modellen anwenden und beobachten, welche Erkenntnisse wir über die Beziehung zwischen den Eigenschaften des Spielers und seinem Gehalt gewinnen können. Wir werden uns damit befassen, wie die einzelnen Erklärungstechniken interpretiert werden, und dann feststellen, ob es widersprüchliche Erklärungen gibt. Wir werden die Uneinigkeiten benennen, versuchen zu entschlüsseln, was zu den Uneinigkeiten beiträgt und mögliche Lösungen diskutieren. 


El. Arts „Madden NFL“-Videospielserie

Abb. 1: Das Videospiel „Madden NFL“ von Electronic Arts.


Überblick über die Erklärungsmethoden

Im Großen und Ganzen lassen sich die Erklärungsmethoden auf viele verschiedene Arten klassifizieren. Am einfachsten lassen sie sich in zwei Klassen einteilen: White-Box-Erklärer und Black-Box-Erklärer. In diesem Artikel haben wir bereits über Glass-Box-Modelle und Black-Box-Modelle gesprochen. Heute konzentrieren wir uns nicht auf die Vorhersagemodelle, sodass die „Blackbox“, auf die wir uns beziehen, kein komplexes und schwer zu interpretierendes maschinelles Lernmodell ist. Wir beziehen uns auf die Erklärungsalgorithmen, die uns bei der Interpretation des zugrunde liegenden Modells helfen.

Eine Black-Box-Erklärungstechnik ist so konzipiert, dass sie für jede Art von Modell verwendet werden kann; sie werden auch als modellunabhängige Erklärer bezeichnet.

Eine White-Box-Erklärungstechnik ist so konzipiert, dass sie die Struktur einer bestimmten Art von zugrunde liegendem Modell ausnutzt, um Erklärungen zu liefern, die dem zugrunde liegenden Modell besser entsprechen.

Wie nicht anders zu erwarten, gibt es unterschiedliche Erklärungsansätze:

  • Sie gehen von unterschiedlichen Annahmen über die Form und Struktur der zugrunde liegenden Daten aus.
  • Definieren und bewerten Sie verschiedene Metriken, um das Modell zu verstehen.
  • Mehrdeutig unter verschiedenen Bedingungen.

Erklärungsalgorithmen können auch nach ihrer Methodik unterschieden werden. So gibt es beispielsweise Erklärungstechniken, bei denen man Erkenntnisse gewinnt, indem man die Eingaben jedes Merkmals einzeln anpasst und die anschließenden Änderungen in den Vorhersagen beobachtet. Diese Techniken können als störungsbasierte Techniken klassifiziert werden. Andererseits gibt es einige Erklärungsalgorithmen, die zu verstehen versuchen, wie empfindlich das Modell auf Änderungen der Merkmale reagiert. Diese Techniken können als gradientenbasierte Techniken eingestuft werden, da sie die Ableitung des Modelloutputs in Bezug auf seine Merkmale verwenden.

Heute werden wir nur einige verschiedene Arten von Erklärungsalgorithmen behandeln. Es gibt noch viele weitere Erklärungstechniken, die wir hier nicht erörtern können, und daher erhebt diese Liste keineswegs den Anspruch auf Vollständigkeit.

Schließlich ist es auch wichtig, dass wir unsere Erwartungen steuern. Die Entwicklung eines Modells, das in der Lage ist, den Kurs eines Wertpapiers mit einer Genauigkeit von mehr als 50 % vorherzusagen, garantiert nicht unbedingt einen profitablen Handel. 


Globale Erklärungen und lokale Erklärungen

Wenn wir mehr über die Bedeutung der Merkmale und das Gesamtverhalten unseres Modells wissen wollen, müssen wir globale Erklärungsmethoden anwenden. Wenn wir hingegen verstehen wollen, wie unser Modell im Detail zu einer bestimmten Vorhersage gekommen ist, benötigen wir lokale Erklärungen. 

Lokale Erklärungen helfen uns, die Beziehung zwischen den Merkmalen und dem Ziel auf granularer Ebene zu verstehen und Vertrauen in die Vorhersagen unseres Modells aufzubauen. Darüber hinaus können wir auch besser verstehen, welche Merkmale zu falschen Vorhersagen beitragen, und wir können in Erwägung ziehen, diese Merkmale zu bearbeiten, um mehr nützliche Informationen aus ihnen zu gewinnen.

Wenn wir also in unserem einfachen Beispiel wissen wollen, welche Merkmale für die Vorhersage des Gehalts eines Sportlers wichtig sind, müssen wir globale Erklärungstechniken wie die Permutationsbedeutung anwenden.  Wenn wir die Vorhersage eines bestimmten Athleten genauer verstehen wollen, benötigen wir außerdem lokale Erklärungstechniken wie LIME. 


Beginnen wir mit unserem Beispielfall, um globale Erklärungen aus unserem Modell zu verstehen.

Wie immer beginnen wir mit der Installation der Abhängigkeiten, die wir benötigen.

In diesem Fall müssen wir installieren:

  • Shap
  • eli5
  • Lime
  • Interpret
  • alibi

pip install alibi shap lime eli5 interpret

Als Nächstes laden wir unsere üblichen Abhängigkeiten.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Jetzt können wir den Datensatz einlesen, mit dem wie ‚spielen‘ wollen.

csv = pd.read_csv("/add/your/path/here/to/the/madden/csv")

Schauen wir uns einige Zeilen und Spalten des Datensatzes an.

Unser Madden-Datensatz

Abb. 2: Unser Beispiel-Datensatz 

Um die Dinge einfach zu halten, werden wir nur einige der numerischen Merkmale beibehalten. Die kategorialen Merkmale erfordern Kodierungstechniken und Details, die nicht in den Rahmen unserer Diskussion passen.

predictors = ["awareness_rating","throwPower_rating","kickReturn_rating",
              "leadBlock_rating","strength_rating","catchInTraffic_rating",
              "pursuit_rating", "catching_rating","acceleration_rating",
              "height","tackle_rating","yearsPro","throwUnderPressure_rating",
              "throwAccuracyDeep_rating","throwAccuracyShort_rating","speed_rating",
              "jumping_rating","toughness_rating","kickPower_rating",
              "kickAccuracy_rating","agility_rating","passBlock_rating","age"
             ]

csv[predictors].dtypes

awareness_rating            int64

throwPower_rating          int64

kickReturn_rating            int64

Jetzt werden wir unser Ziel definieren.

target = "totalSalary"

Nun werden wir die Modelle einrichten, die wir verwenden werden

from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.ensemble import RandomForestRegressor
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.callbacks import EarlyStopping

Nach dem Import der oben genannten Abhängigkeiten und vor der Initialisierung unserer maschinellen Lernmodelle haben wir Vorverarbeitungsschritte durchgeführt, um die Daten zu skalieren und zu standardisieren und routinemäßige Trainings-/Testsplits durchzuführen. Die Aufteilung in Training und Test ergab Trainingsdaten, die in den Variablen „x_train“ und „y_train“ gespeichert wurden, Validierungsdaten „x_valid“ und „y_valid“ und schließlich Testdaten „x_test“ und „y_test“.

Wir gehen nun dazu über, jedes der Modelle, mit denen wir heute arbeiten werden, einzurichten.

lm = LinearRegression()
rf = RandomForestRegressor()
knn = KNeighborsRegressor(n_neighbors=10)
dnn = keras.Sequential([
    layers.Dense(units=30,activation="relu",input_shape=[scaled_data.shape[1]]),
    layers.Dense(units=20,activation="relu"),
    layers.Dropout(0.3),
    layers.Dense(units=10,activation="relu"),
    layers.Dense(units=1)
])

Dann werden wir jedes Modell anpassen

#Fitting the linear regression
lm.fit(x_train,y_train)

#Fitting the k-nearest neighbor regressor
knn.fit(x_train,y_train)

#Fitting the random forest model
rf.fit(x_train,y_train)

#Fitting the deep neural network
early_stopping = EarlyStopping(
    min_delta=0.001,
    patience=20,
    restore_best_weights=True
)

dnn.compile(optimizer="adam",loss="mae")

dnn.fit(
    x_train,y_train,
    validation_data=(x_validation,y_validation),
    batch_size = 60,
    epochs=100,
    verbose=0,
    callbacks=[early_stopping]
)

Globale Erklärungen

Wir werden mit globalen Erklärungen für unser lineares Regressionsmodell beginnen. Die Technik, die wir verwenden werden, ist die Permutationsbedeutung. Es handelt sich um eine globale Blackbox-Erklärungstechnik.

import eli5
from sklearn.metrics import mean_squared_error
from eli5.sklearn import PermutationImportance
from eli5.permutation_importance import get_score_importances

Globale Erklärungen für das lineare Regressionsmodell

permutation = PermutationImportance(lm).fit(x_test,y_test)
eli5.show_weights(permutation,feature_names = predictors)

Globale Erklärungen für unser lineares Regressionsmodell

Abb. 3: Globale Erklärungen für unser lineares Regressionsmodell

Lassen Sie uns die Ergebnisse gemeinsam interpretieren. Bei der Permutationsbedeutung wird davon ausgegangen, dass die einzelnen Spalten des Datensatzes unabhängig sind. Daher ist sie der Ansicht, dass sie jeweils eine Spalte ändern kann, um die Veränderung der Fehlermetriken des Modells zu beobachten und auf dieser Grundlage zu entscheiden, welche Merkmale wichtig sind. Wenn das Merkmal wichtig war, führt die Umverteilung seiner Werte zu einem Anstieg der Fehlermetrik des Modells, und umgekehrt, wenn das Merkmal nicht wichtig war, wird die Fehlermetrik des Modells nach der Umverteilung der Werte in dieser Spalte sogar sinken. In Fällen, in denen die Annahme der Unabhängigkeit nicht zutrifft, müssen wir diese Ergebnisse mit Vorsicht interpretieren.

In der obigen Tabelle haben wichtige Merkmale positive Koeffizienten und unwichtige Merkmale negative Koeffizienten. „yearsPro“, d. h. die Jahre an Erfahrung, die der Sportler besitzt, hat einen negativen Koeffizienten, aber wir wissen, dass er in Wahrheit eine Rolle spielt: Hat unser Modell ein Phänomen entdeckt, das uns nicht bekannt ist, oder gibt unser Erklärer die Wahrheit nicht getreu wieder? 

Die Permutationsbedeutung kann die Erfahrung eines Sportlers unrealistisch mischen, sodass er möglicherweise zu jung für seine Kompetenzstufe ist oder mehr Erfahrung hat als sein Gesamtalter. Darüber hinaus ignoriert diese Methode alle Wechselwirkungen, die im Datensatz vorhanden sein können, und schreibt alle Änderungen des Modellfehlers allein diesem Merkmal zu. Daher können seine Ergebnisse möglicherweise unrealistisch sein, was unterstreicht, dass man vorsichtig sein und den Algorithmus verstehen muss, anstatt ihn blind anzuwenden.
Langfristig kann sie uns jedoch wertvolle Einblicke in die wichtigsten Merkmale des Modells geben, in diesem Fall sind die Fangfähigkeit und die Beweglichkeit des Sportlers einige der wichtigsten Merkmale. Und das macht Sinn, denn im amerikanischen Football wird erwartet, dass der Spieler in der Lage bist, weite Pässe seiner Mannschaftskameraden zu fangen, auch wenn er unter großem Druck steht. Außerdem muss er, nachdem er den Ball gefangen hat, so vielen Konkurrenten wie möglich ausweichen, ohne den Ball fallen zu lassen, sodass die Bedeutung, die diesen Merkmalen beigemessen wird, sinnvoll ist.


Lokale Erklärungen

Wie wir bereits erwähnt haben, helfen uns lokale Erklärungen zu verstehen, wie sich jedes Merkmal auf jede einzelne Vorhersage unseres Modells auswirkt,

Wir werden lokale Erklärungen für die Erwartungen unseres Deep Neural Network für das Gehalt von Richard LeCounte erhalten.


Richard Le Counte

Abb. 4: Richard LeCounte III

Zuerst importieren wir LIME.

LIME ist ein Akronym für „Locally Interpretable Model-Agnostic Explanations“. Es wird erläutert, welche Merkmale zum Ergebnis des Modells beitragen und ob diese Beiträge das Ergebnis nach oben oder unten treiben. 

import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(training_data = np.array(x_train),mode='regression',feature_names=predictors)
exp = explainer.explain_instance(data_row=scaled_data.iloc[test],predict_fn=lm.predict)
exp.show_in_notebook(show_table=True)



DNN LIME Erklärungen

Abb. 5: LIME Erklärungen für die Gehaltserwartungen unseres tiefen neuronalen Netzwerks für das Gehalt von Richard LeCounte


Die obigen Diagramme enthalten viele Informationen für uns, vor allem können wir sehen, welche von LeCountes physischen Fähigkeiten sein erwartetes Gehalt erhöhen und welche es verringern. Unser neuronales Netzwerk erwartete, dass LeCountes Härte (toughness) sein erwartetes Gehalt senken würde, was sinnvoll ist, da LeCounte eine durchschnittliche Härte hat.  Darüber hinaus erkannte das tiefe neuronale Netz die Stärken von LeCounte richtig und erwartete, dass sein Gehalt aufgrund der Stärken von LeCounte steigen würde. Das ist die Art und Weise, wie wir erwarten würden, dass unser Modell funktioniert. Lokale Erklärungen sind wirksame Instrumente, um unser Modell zu validieren, anstatt ihm blind zu vertrauen.


Modell-agnostische Erklärungen und modellspezifische Erklärungen

In Fällen, in denen uns die Struktur des zugrunde liegenden Modells bekannt ist, können wir Erklärungsmethoden verwenden, die speziell für diese Modellarchitektur entwickelt wurden. Diese werden gemeinhin als White-Box-Erklärer bezeichnet. In der Praxis können White-Box-Erklärer rechnerisch effizienter sein als ihre Black-Box-Pendants.

Black-Box-Erklärer sind modellunabhängig, d. h. sie können jedes ihnen vorgelegte Modell interpretieren und erklären. Der LIME-Algorithmus, den wir gerade behandelt haben, ist ein Beispiel für einen Black-Box-Erklärer, wie der Name schon sagt (Locally Interpretable Model-Agnostic Explanations) 

Die Verwendung von White-Box-Erklärern, wenn wir uns der Struktur des zugrunde liegenden Modells sicher sind, kann uns helfen, das Verhalten unseres Modells getreuer zu erklären. Black-Box-Erklärer hingegen werden bei der Erklärung unserer Modelle wahrscheinlich ein gewisses Maß an Verzerrung mit sich bringen. Black-Box-Erklärer machen einige vereinfachende Annahmen über die Form des Modells, mit dem sie zu tun haben; wenn diese Annahmen verletzt werden, wird der Black-Box-Erklärer unzuverlässig.

Als Faustregel gilt: Wenn Sie sich der zugrundeliegenden Eigenschaften des Modells sicher sind, sind Sie auf lange Sicht mit White-Box-Erklärern besser bedient. 

Werfen wir einen Blick auf einen Black-Box-Erklärer in Aktion. Die SHAP-Bibliothek enthält Implementierungen von SHAP-Black-Box-Erklärern. Im Folgenden werden wir eine davon demonstrieren. 

SHAP importieren

import shap

SHAP-Werte berechnen

explainer = shap.Explainer(xgb.predict,scaled_data.loc[test:test_end,predictors])
shap_values = explainer(scaled_data.loc[test:test_end,predictors])

Diagramm unserer Black-Box-Erklärungen

shap.plots.beeswarm(shap_values)


SHAP black-box Erklärungen

Abb. 6: SHAP-Blackbox-Erklärungen für unser XGB-Modell


Die Breite der einzelnen Zeilen wird durch Ausreißer bestimmt und sagt nichts über die Bedeutung des Merkmals aus. Wir bewerten die Wichtigkeit eines Merkmals, indem wir die vertikale Platzierung jedes Merkmals auf dem Diagramm berücksichtigen. Je weiter oben das Merkmal steht, desto wichtiger wurde es vom SHAP-Algorithmus wahrgenommen.

Außerdem ist zu beachten, dass bei einigen Merkmalen die blauen und rosa Punkte gut voneinander getrennt sind, während bei anderen Reihen die blauen und rosa Punkte durcheinander liegen. Wenn die Punkte durcheinander liegen, ist dies in der Regel ein Zeichen für einen Interaktionseffekt zwischen diesem Merkmal und einem anderen Merkmal oder einer Reihe von Merkmalen. Kurz gesagt, SHAP-Plots helfen uns dabei, eine Vielzahl von Informationen in einem einzigen Diagramm zusammenzufassen. 

Jeder Punkt stellt den Shapley-Wert für jeden unserer Datenpunkte dar. So können wir schnell nachvollziehen, wie sich jeder einzelne Datenpunkt auf die Vorhersage des Modells auswirkt. Die Farbe jedes Punktes steht für die Richtung und das Ausmaß des Einflusses, den dieser Datenpunkt auf die Vorhersage unseres Modells hatte. Blau bedeutet, dass die Leistung des Modells abnimmt, und Rosa bedeutet, dass sie zunimmt. Beachten Sie, dass der SHAP-Algorithmus davon ausgeht, dass die Merkmale unabhängig sind, d. h. er ignoriert jegliche Wechselwirkungen im Datensatz. Verstöße gegen diese Annahme können den Algorithmus unzuverlässig machen. 

Wir werden nun einen White-Box-Erklärer betrachten, der für baumbasierte Modelle wie unser XGB-Modell konzipiert ist. Wir verwenden die spezielle TreeExplainer()-Methode, die zur Erklärung von baumbasierten Modellen entwickelt wurde.

tree_explainer = shap.TreeExplainer(xgb)
tree_shap_values = explainer(x_test)

Dann können wir die White-Box-Erklärungen darstellen

shap.plots.beeswarm(tree_shap_values)

SHAP white-box Erklärung

Abb. 7: SHAP-White-Box-Erklärungen für unser XGB-Modell

Vergleichen Sie die 4 wichtigsten Merkmale der Black-Box-SHAP-Erklärung mit denen der White-Box-SHAP-Erklärung. Können Sie das Uneinigkeitsproblem in Aktion sehen? 


Definition des Problems der Uneinigkeiten und der Faktoren, die zum Problem beitragen

Da wir nun wissen, was Modellerklärungen sind, können wir uns nun direkt mit dem Problem der Uneinigkeit befassen. Lassen Sie uns zunächst klären, was eine Uneinigkeit ist.
Untersuchen wir, was eine Uneinigkeit im Bereich der Erklärungen zur Bedeutung von Merkmalen ausmacht:
  • Merkmal Permutationen: Die erste Form der Uneinigkeit liegt vor, wenn sich die Merkmalskombinationen unterscheiden. Wenn die spezifische Reihenfolge der Wichtigkeit von Merkmalen in Ihrem Arbeitsablauf von Bedeutung ist, wird das Auftauchen unterschiedlicher Permutationen bei den Erklärungen zu einem zentralen Streitpunkt. Dieser Aspekt ist besonders wichtig, wenn die nuancierte Abfolge von Merkmalen für Ihre Analyse von Bedeutung ist.
  • Bestplatzierte Feature-Sets: Bei genauerer Betrachtung erstreckt sich die Uneinigkeit auch auf die am besten bewerteten Merkmalsgruppen. Wenn die strikte Einhaltung der exakten Permutation der Merkmalsbedeutung gelockert wird, verlagert sich die Aufmerksamkeit auf die Menge der Spitzenmerkmale. Eine Diskrepanz bei den Top 3, 5 oder n Merkmalen, die von verschiedenen Erklärern für dasselbe Modell identifiziert wurden, wird zu einem bemerkenswerten Divergenzpunkt auf Ihrer analytischen Reise.
  • Koeffizient Vorzeichen Schwankung: Das Herzstück vieler Erklärer liegt in den Koeffizienten, die den Merkmalen zugewiesen werden und die ihren positiven oder negativen Beitrag zum gewünschten Ergebnis angeben. Ein Wechsel des Vorzeichens dieses Koeffizienten zwischen zwei Erklärungen für dasselbe Modell ist ein Hinweis für Ihren Arbeitsablauf. Solche Schwankungen sind ein Indikator für Uneinigkeiten, die eine genauere Untersuchung der inneren Funktionsweise des Modells erforderlich machen.
  • Relative Ordnung zwischen den Merkmalen von Interesse: Zoomt man auf bestimmte Merkmale, die von Interesse sind, nimmt die Uneinigkeit eine weitere Dimension an. Wenn Ihr Schwerpunkt auf dem Benchmarking der Bedeutung eines bestimmten Merkmals im Vergleich zu einem anderen liegt, werden Verschiebungen in der Reihenfolge dieser beiden Merkmale bei verschiedenen Erklärungen zum Schlachtfeld für Uneinigkeiten in Ihrem Arbeitsablauf.

Was ist keine Uneinigkeit?

Genauso wichtig ist es, zu erkennen, dass nicht alle Verschiedenheiten auf Uneinigkeit hindeuten. Gehen wir den Fällen nach, in denen Erklärungen eine harmonische Koexistenz gewährleisten:

  • Unterschiedliche Wichtigkeitswerte: Die Erklärungen stimmen nicht wirklich überein, wenn die von verschiedenen Erklärern berechneten Merkmalswerte nicht genau übereinstimmen. Der Knackpunkt liegt in der Erkenntnis, dass verschiedene Algorithmen unterschiedliche Berechnungen liefern, was direkte Vergleiche schwierig macht. Der Schwerpunkt liegt hier nicht auf der numerischen Gleichheit der Wichtigkeitswerte, sondern auf den konsistenten Erkenntnissen, die sich aus den unterschiedlichen Erklärungen ergeben.
  • Konsistente Einsichten über exakte Werte: Das Wesen der Uneinigkeit liegt im Streben nach konsistenten Erkenntnissen und nicht in der obsessiven Suche nach exakter numerischer Gleichheit. Das Ziel besteht nicht darin, dass jeder Erklärer genau die Wichtigkeitswerte seiner Gegenstücke widerspiegelt. Stattdessen verlagert sich der Schwerpunkt auf die umfassendere Erzählung — es muss sichergestellt werden, dass die Erklärungen, obwohl sie numerisch unterschiedlich sind, konvergieren und uns zu konsistenten und zuverlässigen Modellergebnissen führen.
  • Modellkomplexität und Herausforderungen bei der Schätzung: Je mehr sich die Komplexität des Modells entfaltet, desto deutlicher wird eine grundlegende Wahrheit: Die Schwierigkeit, das Innenleben des Modells genau abzuschätzen, wächst in direktem Verhältnis. Nicht zu widersprechen ist eine Anerkennung dieser inhärenten Komplexität. Angesichts komplizierter Modelle ist die Divergenz der Erklärungswerte eher eine zu erwartende Herausforderung als ein Grund zur Sorge. Diese Sichtweise steht im Einklang mit der sich weiterentwickelnden KI, bei der das Streben nach Transparenz auf immer mehr Schwierigkeiten stößt.

Warum sind sich die Erklärer uneinig?
Es gibt viele Gründe, warum Erklärer einander nicht zustimmen können, lassen Sie uns versuchen, einige Fälle gemeinsam zu klären.

Globale und lokale Erklärer im Vergleich

Ein Grund, warum wir Uneinigkeiten beobachten können, ist, dass wir möglicherweise globale und lokale Erklärungen vergleichen. Das ist zwar ein sehr einfacher Fehler, aber ich würde gerne glauben, dass keiner der Leser dieses Artikels diesen Fehler machen sollte. Globale und lokale Erklärungen lassen sich nicht ohne weiteres direkt miteinander vergleichen. Solange Sie nicht genau wissen, wie die Algorithmen unter der Haube implementiert sind, ist es nicht ratsam, globale und lokale Erklärungen zu vergleichen, da dies wahrscheinlich zu unterschiedlichen Erklärungen führt.

Black-Box- und White-Box-Erklärer im Vergleich

Eine weitere, trügerisch harmlose Quelle für Uneinigkeiten könnte der Vergleich von Black-Box- und White-Box-Erklärern sein. Erinnern Sie sich daran, dass Black-Box-Erklärer versuchen, den Nutzen eines beliebigen Algorithmus zu erklären, weshalb sie bestimmte vereinfachende Annahmen über das Modell oder das Verhalten des Modells treffen. Diese Annahmen, die der Black-Box-Erklärer macht, ermöglichen es ihm, robust zu sein und unter einer Vielzahl von Umständen gut zu funktionieren, aber wenn die Annahmen nicht wahr sind, dann führt der Erklärer zu Verzerrungen. Diese Verzerrung kann dazu führen, dass die Black-Box- und die White-Box-Erklärung voneinander abweichen. 

Ändern der Reihenfolge der Merkmale

Unsere Probleme enden hier nicht, denn eine schlaue Ursache für Uneinigkeiten kann eine Änderung der Reihenfolge sein, in der die Merkmale präsentiert werden. Einige Erklärungstechniken reagieren empfindlich auf die Reihenfolge der Modelleingaben, andere nicht. Zum Beispiel ist die gegenseitige Information nicht empfindlich gegenüber der Reihenfolge der Eingaben, aber SHAP schon! Daher ist es möglich, dass ein SHAP-Erklärer nicht mit sich selbst übereinstimmt, obwohl er identische Modelle beobachtet.  

Nachfolgend geben wir zum Beispiel zwei SHAP-Erklärungen aus, die wir von zwei identischen XGBRegressoren erhalten haben. Der einzige Unterschied zwischen den beiden Modellen ist die Reihenfolge der Merkmale, die sie als Eingaben verwenden, abgesehen davon, dass sie aus dem gleichen Datensatz lernen und das gleiche Ziel haben. 


Ursprüngliche SHAP-Werte

Abb. 8 : Unsere ursprünglichen SHAP-Werte


SHAP Shuffled

Abb. 9: SHAP-Werte nach Änderung der Feature-Reihenfolge

Nachdem wir die Reihenfolge, in der die Merkmale dem Modell angezeigt werden, umgestellt haben, können wir feststellen, dass unsere Erklärungen nun nicht mehr übereinstimmen. Das Merkmal Größe (height) hat plötzlich an Bedeutung gewonnen, obwohl keine neuen Informationen vorgelegt wurden. Die Top 3 blieben unverändert, aber die meisten Funktionen sprangen auf und ab und wechselten die Positionen. Wenn Sie planen, Bootstrapping-Techniken oder andere Formen des Resamplings oder der Teilmengenauswahl zu verwenden, sollten Sie sich zumindest bewusst sein, dass dieses Phänomen normal und zu erwarten ist. 


Darüber hinaus kann es vorkommen, dass verschiedene Implementierungen derselben Erklärungstechnik aufgrund der geringfügigen Unterschiede in ihren Berechnungen nicht miteinander übereinstimmen. Zum Beispiel ist die Implementierung von Permutation Importance in eli5 empfindlich gegenüber der Reihenfolge der Eingaben, aber die Implementierung derselben Erklärungstechnik in sklearn ist es nicht. Dies ist möglich, weil ein und dieselbe Erklärungstechnik auf unterschiedliche Weise umgesetzt werden kann. 

Um zu zeigen, dass die eli5-Implementierung der Permutation Importance (Bedeutung einer Permutation) empfindlich auf die Reihenfolge der Eingaben reagiert, geben wir im Folgenden zwei Erklärungen aus, die mit der eli5-Implementierung der Permutation Importance gewonnen wurden. Wir haben die Ergebnisse von zwei identischen XGBRegressoren erhalten. Der einzige Unterschied zwischen den beiden Modellen ist die Reihenfolge der Merkmale, die sie als Eingaben verwenden, abgesehen davon, dass sie aus dem gleichen Datensatz lernen und das gleiche Ziel haben. 


Bedeutung der anfänglichen Permutation

Abb. 10: Bedeutung der anfänglichen Permutation


Bedeutung der gemischten Permutation

Abb. 11: Bedeutung der gemischten Permutation


Beachten Sie, dass „kickPower_rating“ ursprünglich einen positiven Koeffizienten hatte, aber nach Änderung der Reihenfolge der Merkmale nun einen negativen Koeffizienten aufweist! Solche sprunghaften Schwankungen werden als starke Uneinigkeiten betrachtet. Die wichtigsten Merkmale haben sich geändert, und auch die relative Reihenfolge zwischen den Merkmalen hat sich geändert.

Schließlich ist einer der Elefanten im Raum wahrscheinlich die methodische Divergenz — ein zentraler Faktor, der zu dem verblüffenden Phänomen führt, dass die Erklärer einander nicht zustimmen, obwohl sie beide dasselbe Modell erklären. Da jeder Erklärer unterschiedliche Metriken über das Modell berechnet, kann jeder das Modell in einem anderen Licht interpretieren.

Glücklicherweise verfügt XGB über eine Funktion, mit der wir die Wichtigkeit von Merkmalen beurteilen können. Nutzen wir diese Funktion, um zu sehen, welche Erklärungstechnik die Wahrheit am besten wiedergibt. Um dem Leser die Arbeit zu erleichtern, haben wir die Ergebnisse der vorangegangenen Erläuterungen hier eingefügt, damit Sie nicht ständig nach oben und unten scrollen müssen.


XGB-Basis-Wahrheit

Abb. 12: XGB Merkmal Bedeutung

XGB-Permutationsbedeutung

Abb. 13: XGB Permutationsbedeutung


SHAP white-box Erklärungen

Abb. 14: SHAP White-Box-Erklärungen


SHAP Black-Box-Erklärungen

Abb. 15: SHAP Black-Box-Erklärungen


Erklärbare Boosting-Maschine

Abb. 16: Ein auf einem Glass-Box Tree basierendes Modell - Bedeutung der Merkmale

Die Aufmerksamkeitseinstufung (Awareness) war das wichtigste Merkmal für unser Modell, aber unsere kleine Gruppe von Black-Box-Erklärungstechniken konnte uns das nicht erklären, da die drei wichtigsten Merkmale völlig fehlten. Dies ist eine ernüchternde Erinnerung daran, dass Erklärungen nur Schätzungen der Bedeutung von Merkmalen sind und nicht die absolute Wahrheit. Dies warnt uns vor der vereinfachenden Annahme, dass Merkmale, die in verschiedenen Tests wiederholt ganz oben stehen, von Natur aus wichtig sind. 

Die Blackbox-Erklärung, die wir auf unser XGB-Modell angewandt haben, widerspricht der Whitebox-Erklärung, die wir angewandt haben, aber letztendlich waren beide Erklärungen falsch. In einer Situation wie dieser wäre es also reine Zeitverschwendung gewesen, herauszufinden, welcher der beiden Erklärungen wahrheitsgetreuer ist, denn keine der beiden bringt den Leser näher an die Wahrheit.

Ich habe auch eine erklärbare Boosting-Maschine auf die Daten angewandt, um zu sehen, ob das Glass-Box-Modell als Proxy für die Bewertung der Merkmalsbedeutung verwendet werden kann, und obwohl es gelungen ist, das wichtigste Merkmal aus dem Datensatz korrekt zu identifizieren, ist es möglicherweise nicht immer eine praktikable Option, insbesondere wenn das Modell, das man zu erklären versucht, kein baumbasiertes Modell ist. Leider wurde aber auch im Glass-Box-Modell die Funktion „yearsPro“ als informativ empfunden, obwohl sie es nicht war. Das bedeutet, dass wir uns auch bewusst sein sollten, dass unsere Erklärer falsche Informationen übereinstimmen können!


Fallstudie

Wir sind nun bereit, mit echten Marktdaten zu arbeiten. Wir beginnen mit der Extraktion von Daten aus dem MetaTrader 5 Terminal. Unsere Strategie beinhaltet die Entwicklung eines MetaQuotes Language 5 (MQL5)-Skripts, das auf eine effiziente Datenextraktion und -umwandlung zugeschnitten ist. Wir beginnen mit der Deklaration globaler Variablen.
//---Our handlers for our indicators
int ma_handle;
int rsi_handle;
int cci_handle;
int ao_handle;
int bbands_handle;
int atr_handle;

Anschließend werden wir Arrays erstellen, um die Werte unserer technischen Indikatoren zu speichern. Diese Datenstrukturen spielen eine zentrale Rolle bei der methodischen Erfassung, Verwaltung und Nutzung der Ergebnisse der Indikatoren während der gesamten Skriptausführung. 

//---Data structures to store the readings from our indicators
double ma_reading[];
double rsi_reading[];
double cci_reading[];
double ao_reading[];
double bb_high_reading[];
double bb_low_reading[];
double bb_mid_reading[];
double atr_reading[];

Anschließend müssen wir einen Namen für unsere CSV-Datei erstellen. 

//---File name
string file_name = "The Dissagrement Problem Data.csv";

Danach müssen wir eine Variable erstellen, um zu speichern, wie viele Balken wir abfragen möchten.

//---Amount of data requested
int size = 10000;
int size_fetch = size + 50;

Weiter geht es mit dem Einrichten unserer technischen Indikatoren-Handler. Jedes Mal, wenn wir einen technischen Indikator einrichten, müssen wir das Symbol, für das wir ihn verwenden wollen, und den Zeitrahmen, den wir verwenden wollen, angeben. Von dort aus müssen wir je nach Indikator den Zeitraum des Indikators, den Verschiebungsparameter, die Glättungsmethode und den Preis, auf den der Indikator angewendet werden soll, angeben 

void OnStart()
  {
      //---Setup our technical indicators
      ma_handle = iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_EMA,PRICE_CLOSE);
      rsi_handle = iRSI(_Symbol,PERIOD_CURRENT,60,PRICE_CLOSE);
      cci_handle = iCCI(_Symbol,PERIOD_CURRENT,10,PRICE_CLOSE);
      ao_handle = iAO(_Symbol,PERIOD_CURRENT);
      bbands_handle = iBands(_Symbol,PERIOD_CURRENT,120,0,0.2,PRICE_CLOSE);
      atr_handle = iATR(_Symbol,PERIOD_CURRENT,14);

Im weiteren Verlauf der Skriptausführung besteht die Aufgabe darin, die Werte von unseren Indikator-Handles in die vorgesehenen Datenstrukturen zu übertragen.

 //---Set the values as series
      CopyBuffer(ma_handle,0,0,size_fetch,ma_reading);
      ArraySetAsSeries(ma_reading,true);
      CopyBuffer(rsi_handle,0,0,size_fetch,rsi_reading);
      ArraySetAsSeries(rsi_reading,true);
      CopyBuffer(cci_handle,0,0,size_fetch,cci_reading);
      ArraySetAsSeries(cci_reading,true);
      CopyBuffer(ao_handle,0,0,size_fetch,ao_reading);
      ArraySetAsSeries(ao_reading,true);
      CopyBuffer(bbands_handle,0,0,size_fetch,bb_mid_reading);
      ArraySetAsSeries(bb_mid_reading,true);
      CopyBuffer(bbands_handle,1,0,size_fetch,bb_high_reading);
      ArraySetAsSeries(bb_high_reading,true);
      CopyBuffer(bbands_handle,2,0,size_fetch,bb_low_reading);
      ArraySetAsSeries(bb_low_reading,true);
      CopyBuffer(atr_handle,0,0,size_fetch,atr_reading);
      ArraySetAsSeries(atr_reading,true);

Bevor wir mit dem Schreiben der Dateien beginnen, müssen wir einen Datei-Handler in unser Skript einbauen. Dieser grundlegende Schritt umfasst die Konfiguration der erforderlichen Parameter und Mechanismen, um die reibungslose Erstellung und Bearbeitung der Ausgabedatei zu ermöglichen.

      //---Write to file
       int file_handle=FileOpen(file_name,FILE_WRITE|FILE_ANSI|FILE_CSV,",");

Danach beginnt eine kritische Phase in unserem Skript, in der wir systematisch durch die Arrays der historischen Preise und Indikatorwerte navigieren, um die Daten in die gewünschte CSV-Datei zu kodieren.

for(int i=-1;i<=size;i++){
      if(i == -1){
            FileWrite(file_handle,"Time","Open","High","Low","Close","MA 20","RSI 60","CCI 10","AO","BBANDS 120 MID","BBANDS 120 HIGH","BBANDS 120 LOW","ATR 14");
      }
      
      else{
            FileWrite(file_handle,iTime(_Symbol,PERIOD_CURRENT,i),
                                 iOpen(_Symbol,PERIOD_CURRENT,i),
                                 iHigh(_Symbol,PERIOD_CURRENT,i),
                                 iLow(_Symbol,PERIOD_CURRENT,i),
                                 iClose(_Symbol,PERIOD_CURRENT,i),
                                 ma_reading[i],
                                 rsi_reading[i],
                                 cci_reading[i],
                                 ao_reading[i],
                                 bb_mid_reading[i],
                                 bb_high_reading[i],
                                 bb_low_reading[i],
                                 atr_reading[i]);
      }
    }
    FileClose(file_handle);
  }


Marktdaten

Abb. 17: Marktdaten vom MetaTrader 5 Terminal


Wir sind nun bereit, die Daten zu verarbeiten und unsere neuen Fähigkeiten anzuwenden, die wir aus dem Beispieldatensatz gelernt haben. 

Wir importieren nun unsere Abhängigkeiten.

#Import Dependencies
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import shap
import lime
from lime import lime_tabular
import eli5
from eli5.sklearn import PermutationImportance
from sklearn.feature_selection import mutual_info_regression

Laden von Abhängigkeiten für IntepretML.

from interpret import set_visualize_provider
from interpret.provider import InlineProvider
set_visualize_provider(InlineProvider())
from interpret import show
from interpret.blackbox import MorrisSensitivity

Einlesen der csv-Datei.

csv = pd.read_csv("/enter/your/path/here")

Einrichten des Ziels.

csv["Target"] = csv["Close"].shift(-30)

Verwerfen aller Zeilen mit fehlenden Werten.

csv.dropna(axis=0,inplace=True)

Erstellen einer Liste von Prädiktoren.

drop = ["Time","Target"]
predictors = csv.columns.tolist()
predictors = [col for col in predictors if col not in drop]
predictors

Skalieren der Daten.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
print(scaler.fit(csv.loc[:,predictors]))
scaled_data =  pd.DataFrame(scaler.transform(csv.loc[:,predictors]), index = csv.index, columns = predictors)
scaled_data


Skalierte Marktdaten

Abb. 18:  Skalierte Marktdaten

Einrichten unserer Blackbox-Algorithmen

#Black box models
from xgboost import XGBRegressor
from sklearn.linear_model import LinearRegression
from xgboost import plot_importance
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.callbacks import EarlyStopping

Train/Test aufteilen

train = 0
train_end = 5000
test = train_end + 40

Aufstellen unseres linearen Modells

lm = LinearRegression()
lm.fit(scaled_data.loc[train:train_end,predictors],csv.loc[train:train_end,"Target"])

Einrichten unseres XGB-Modells

#XGBModel
xgb = XGBRegressor()
xgb.fit(scaled_data.loc[train:train_end,predictors],csv.loc[train:train_end,"Target"])

Einrichten unseres tiefen neuronalen Netzwerkmodells

dnn = keras.Sequential([
    layers.Dense(units=30,activation="relu",input_shape=[scaled_data.shape[1]]),
    layers.Dense(units=20,activation="relu"),
    layers.Dropout(0.3),
    layers.Dense(units=10,activation="relu"),
    layers.Dense(units=1)
])
early_stopping = EarlyStopping(
    min_delta=0.001,
    patience=20,
    restore_best_weights=True
)
dnn.compile(optimizer="adam",loss="mae")
dnn.fit(
    scaled_data.loc[train:train_end,predictors],csv.loc[train:train_end,"Target"],
    validation_data=(csv.loc[validation:validation_end,predictors],csv.loc[validation:validation_end,"Target"]),
    batch_size = 60,
    epochs=100,
    verbose=0,
    callbacks=[early_stopping]
)


Globale Erklärungen für unser tiefes, neuronales Netz

Wir werden das Alibi-Paket verwenden, um Erklärungen für unser tiefes, neuronales Netz zu erhalten. Das Alibi-Paket enthält eine nützliche Implementierung einer erklärenden Technik, die als Accumulated Local Effects (ALE) bekannt ist. ALE geht über alle bisher betrachteten Erklärungstechniken hinaus, weil es robust ist und mit stark korrelierten Merkmalen umgehen kann, weil es die Annahme der Merkmalsunabhängigkeit lockert, weil es visuell interpretiert werden kann, weil es rechnerisch effizient ist und weil es im Gegensatz zu einigen anderen Erklärungstechniken nicht auf Linearitätsannahmen angewiesen ist, sodass es gut geeignet ist, komplexe Beziehungen in den Daten zu erfassen.   

Zunächst berechnen wir unsere ALE-Werte.

dnn_ale = ALE(dnn.predict, feature_names  = predictors,target_names=["Close 30 Steps"])

Dann konvertieren wir unsere Eingabedaten in das NumPy-Format, bevor wir unsere ALE-Diagramme erstellen können.

X = scaled_data.loc[train:train_end,predictors].to_numpy()
dnn_alibi =dnn_ale.explain(X)
plot_ale(dnn_alibi,n_cols=4, fig_kw={'figwidth': 20, 'figheight': 10}, sharey=None)

ALE-Diagramme helfen uns bei der Interpretation, wie sich Änderungen in den einzelnen Merkmalen auf die Ausgabe des Modells auswirken. Nachfolgend sehen Sie beispielsweise das ALE-Diagramm für unseren Awesome Oscillator. Wie wir beobachten können, kann der Awesome Oscillator unserem tiefen neuronalen Netzwerk dabei helfen, zu antizipieren, wann der Preis fallen wird. Wir beobachten ein Absinken im ALE-Diagramm, wenn der Wert des Awesome Oscillators steigt.

ALE AO

Abb. 19: ALE-Diagramm für unseren Awesome Oscillator, AO


Darüber hinaus haben Merkmale, die nicht informativ sind, ein ALE-Diagramm, das einer horizontalen Linie ähnelt, was bedeutet, dass Änderungen an diesem Merkmal kaum Auswirkungen auf das Ziel haben. In unserer Fallstudie war der Relative Strength Index nicht aussagekräftig. 

ALE RSI

Abb. 20 : ALE RSI

Globale Erklärungen vom modellunabhängigen SHAP Explainer erhalten

explainer = shap.Explainer(xgb.predict,scaled_data.loc[test:,predictors])
shap_values = explainer(scaled_data.loc[test:,predictors])
shap.plots.beeswarm(shap_values)


SHAP Black-box Bienenschwarm-Diagramm unseres XGB-Modells

Abb. 21:  SHAP Black-box Bienenschwarm-Diagramm unseres XGB-Modells

Unser Bienenschwarm-Diagramm zeigt uns, dass der Awesome Oscillator das wichtigste Merkmal in diesem Datensatz ist. Denken Sie daran, dass die Breite der einzelnen Zeilen im Diagramm keine Informationen enthält, da sie einfach durch Ausreißer bestimmt werden kann. Außerdem fällt auf, dass die blauen und rosafarbenen Punkte nicht durcheinandergewürfelt zu sein scheinen, was bedeutet, dass der Datensatz möglicherweise keine starken Interaktionsterme enthält.

Merkmalsbedeutung nach wechselseitigen Informationen

mi_scores = mutual_info_regression(scaled_data.loc[test:,predictors], csv.loc[test:,"Target"])
mi_scores = pd.Series(mi_scores, name="MI Scores", index=scaled_data.columns)
mi_scores = mi_scores.sort_values(ascending=False)
mi_scores

BBANDS 120 MID     1.739039

BBANDS 120 HIGH    1.731220

BBANDS 120 LOW     1.716019

MA 20                      1.525800

High                        1.172096

Open                       1.155583

Close                       1.143642

Low                         1.140613

ATR 14                     0.421772

AO                           0.232608

RSI 60                      0.181932

CCI 10                     0.016491

Die wechselseitigen Informationen stimmen nicht völlig mit unserem SHAP-Erklärer überein, was die 4 wichtigsten Merkmale betrifft. Dies wirft nur noch mehr Zweifel auf unserer ohnehin schon verwirrenden Reise auf, und zu allem Überfluss hatte unser SHAP-Erklärer auch noch Recht damit, dass der Awesome Oscillator in diesem Fall das wichtigste Merkmal ist. Der Rückgriff auf mehrere Erklärungen ist daher ein zweischneidiges Schwert: Einerseits schützt er vor der Voreingenommenheit, die von jeder verwendeten Erklärung ausgeht, andererseits schafft er einen größeren Wahrscheinlichkeitsraum für das Auftreten von Uneinigkeiten.  Es ist schwierig zu sagen, welcher Fall empirisch besser ist, da dies von dem jeweiligen Datensatz, dem jeweiligen Modell und vielen anderen Variablen abhängt.

Zum Schluss betrachten wir die Morris-Sensitivitätsanalyse als unseren letzten Global Black-Box Explainer

msa = MorrisSensitivity(xgb, scaled_data.loc[train:train_end,predictors])
show(msa.explain_global())


Morris Sensitivitätsanalyse

Abb. 22: Morris Sensitivitätsanalyse

Hier sehen Sie die aktuellen Bedeutungskennzahlen unseres XGB-Modells.

XGB Base Truth Marktdaten.

Abb. 23: XGB-Bedeutung der Marktdaten

Der gleitende Durchschnitt war das wichtigste Merkmal in unserem Datensatz, gefolgt vom Awesome Oscillator. In diesem speziellen Fall lieferte uns die Morris-Sensitivitätsanalyse also relativ gesehen die besten Erklärungen, aber in den meisten Fällen haben Sie vielleicht keinen Zugang zur Grundwahrheit, wie hätten Sie also ausgewählt, welcher Erklärung Sie mehr Gewicht geben? Wie sicher wären Sie in Ihrer Entscheidung gewesen? Wie könnten Sie Ihre Entscheidungen in Bezug auf die Bedeutung von Merkmalen validieren, wenn Sie keinen Zugang zu den echten Tabellen mit der Bedeutung der Merkmale hätten? 


Schlussfolgerung

Wie wir sehen können, gibt es hier keine einfachen Antworten, es gibt einfach zu viele Veränderliche. Die Form und Struktur Ihrer Datensätze muss berücksichtigt werden, das zugrundeliegende Modell muss ebenfalls berücksichtigt werden, das Vorhandensein von Interaktionsterms in Ihren Daten muss berücksichtigt werden und vor allem das Innenleben jeder Erklärung muss dem Praktiker für maschinelles Lernen zur Verfügung stehen. Außerdem haben wir in unserer kontrollierten Untersuchung festgestellt, dass es möglich ist, dass alle Ihre Erklärer falsch liegen, sodass in einer solchen Situation der Versuch, Uneinigkeiten zu klären, eine sinnlose Zeitverschwendung gewesen wäre. Daher rechtfertigt der Nutzen, den wir aus erklärenden Techniken ziehen, nicht immer die Komplexität, die sie mit sich bringen können. Im Laufe der Zeit werden wir jedoch vielleicht bessere Erklärungsmethoden und bessere Algorithmen beobachten können.


Empfehlung

Nachdem ich all dies in Betracht gezogen habe, bin ich davon überzeugt, dass die beste Lösung für das Problem der Uneinigkeit möglicherweise darin besteht, sich mehr auf Modelle des maschinellen Lernens zu stützen, die interpretierbar sind, wie z. B. Generalised Additive Models (GAM) oder Explainable Boosting Machines (EBM), da solche Modelle die Notwendigkeit von Erklärungen perfekt ersetzen. Bis heute gibt es keine allgemein anerkannten Lösungen für alle möglichen Fälle des Uneinigkeitsproblems, aber wenn das Bewusstsein für dieses Problem weiter wächst, werden wir vielleicht eines Tages in der Lage sein, jedes von uns erstellte Modell für maschinelles Lernen sicher zu erklären. 


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/13729

Advanced Variables and Data Types in MQL5 Advanced Variables and Data Types in MQL5
Variables and data types are very important topics not only in MQL5 programming but also in any programming language. MQL5 variables and data types can be categorized as simple and advanced ones. In this article, we will identify and learn about advanced ones because we already mentioned simple ones in a previous article.
Популяционные алгоритмы оптимизации: Гибридный алгоритм оптимизации бактериального поиска с генетическим алгоритмом (Bacterial Foraging Optimization - Genetic Algorithm, BFO-GA) Популяционные алгоритмы оптимизации: Гибридный алгоритм оптимизации бактериального поиска с генетическим алгоритмом (Bacterial Foraging Optimization - Genetic Algorithm, BFO-GA)
В статье представлен новый подход к решению оптимизационных задач, путём объединения идей алгоритмов оптимизации бактериального поиска пищи (BFO) и приёмов, используемых в генетическом алгоритме (GA), в гибридный алгоритм BFO-GA. Он использует роение бактерий для глобального поиска оптимального решения и генетические операторы для уточнения локальных оптимумов. В отличие от оригинального BFO бактерии теперь могут мутировать и наследовать гены.
Deep Learning GRU model with Python to ONNX  with EA, and GRU vs LSTM models Deep Learning GRU model with Python to ONNX with EA, and GRU vs LSTM models
We will guide you through the entire process of DL with python to make a GRU ONNX model, culminating in the creation of an Expert Advisor (EA) designed for trading, and subsequently comparing GRU model with LSTN model.
Neural networks made easy (Part 68): Offline Preference-guided Policy Optimization Neural networks made easy (Part 68): Offline Preference-guided Policy Optimization
Since the first articles devoted to reinforcement learning, we have in one way or another touched upon 2 problems: exploring the environment and determining the reward function. Recent articles have been devoted to the problem of exploration in offline learning. In this article, I would like to introduce you to an algorithm whose authors completely eliminated the reward function.