Interpretując dane wyjściowe danych predykcyjnych, należy pamiętać o dokładnym wykonaniu każdego kroku. Aby zadowolić użytkowników, musisz dostarczyć łatwe do zrozumienia spostrzeżenia. Możesz to zrobić poprzez ulepszenie procesu Twojego modelu. Dobrze jest skupić się na prostych modelach, a nie na złożonych. Na przykład, modele liniowe pomogą Ci w łatwej interpretacji. Jednakże, przy dużej ilości danych, użycie złożonych modeli przynosi wiele korzyści. Dzięki takiemu modelowi można uzyskać kompromis pomiędzy dokładnością i interpretowalnością danych wyjściowych. Możesz wybrać spośród wielu różnych metod, aby rozwiązać złożone problemy. Jednakże, rozwiązania te nie sugerują, jak te metody odnoszą się do siebie nawzajem. Co więcej, nie ma żadnych danych na poparcie tego, dlaczego jedna metoda jest lepsza od drugiej.
Konstrukcja SHAP czerpie inspirację z poprzednich zunifikowanych ram. To nowe podejście do ram SHAP wykorzystuje wartości Shapely. Poniżej można zrozumieć definicję SHAP i jak można zaimplementować tę koncepcję za pomocą pakietu Pythona.

Co to jest SHAP?

Shapley Additive exPlanations lub SHAP jest podejściem stosowanym w teorii gier. Dzięki SHAP możesz wyjaśnić dane wyjściowe swojego modelu uczenia maszynowego. Model ten łączy lokalne wyjaśnienie optymalnego przydziału kredytów za pomocą wartości Shapely. To podejście jest bardzo skuteczne w teorii gier.

Jak można obliczyć wartości Shapely Values

SHAP to wartość cechowa średniego wkładu krańcowego wśród wszystkich kombinacji cechy, które są możliwe. Poniżej omówimy, w jaki sposób SHAP lub Shapely Additive exPlanations staje się popularną techniką w uczeniu maszynowym. Pojęcie to możemy zrozumieć na następującym przykładzie:
Możemy rozważyć punkty, które drużyna zdobywa w każdym meczu w sezonie. Załóżmy, że chcemy znaleźć średni wynik gracza A i jego wkład jako wynik drużyny w meczu. Aby to zrobić, musimy znaleźć wkład gracza A w partnerstwie z graczem B i C.

UWAGA

Podczas przeprowadzania eksperymentu, musisz upewnić się, że spełnione są następujące warunki dotyczące meczów:
1. 1. Przed rozpoczęciem eksperymentu musisz założyć, że próby zawodników są już zakończone.
2. Musisz również założyć, że każdy zawodnik może wystąpić w co najmniej jednym meczu, abyśmy mogli oprzeć wynik na odpowiednich danych.
3. Powinien być mecz, w którym jeden zawodnik nie jest dostępny, podczas gdy dwaj pozostali są dostępni.
4. Poniżej znajduje się tylko przykład. Możesz przyjąć dowolną metrykę, zgodnie z rankingiem turnieju. Poniżej znajdziesz całkowitą liczbę punktów jako metrykę:
Krok 1: Kiedy gracz A nie gra, ale gracze B i C grają w kombinacji.
W tym przypadku, musimy wziąć średnią punktów z meczów. Musisz pamiętać, że gracz A nie gra, więc średnia będzie zawierać tylko wyniki gracza B, i C.Możesz również wziąć pojedynczą próbkę losową, aby znaleźć odpowiedź. W tym przykładzie, przyjmiemy, że średni wynik wynosi 60 punktów.
Krok 2: Kiedy gracz C nie gra, ale gracze A i B grają w kombinacji.
Teraz rozważymy średnią graczy A i B, podczas gdy gracz C nie gra. Załóżmy, że całkowity wynik drużyny wynosi 90 punktów.
Ponieważ wszyscy zawodnicy wystąpili w każdym z meczów, możemy teraz znaleźć całkowitą liczbę punktów zawodnika A poprzez odjęcie 85 do 65. Odpowiedzią będzie 30 punktów. Możesz również przeprowadzić eksperyment obliczając średnią z eksperymentu wiele razy i znajdując różnicę.

Implementacja kodów

Po pierwsze, musisz zaimportować wszystkie potrzebne biblioteki za pomocą poniższych kodów:
import pandas as pd
zaimportuj numpy jako np
importować shap
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

from sklearn.linear_model import LinearRegression
z sklearn.tree zaimportuj DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from xgboost.sklearn import XGBRegressor
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
z sklearn zaimportuj drzewo

zaimportuj matplotlib.pyplot jako plt
%matplotlib inline
importuj ostrzeżenia
warnings.filterwarnings(‘ignore’)

Wstępne przetwarzanie danych po odczytaniu

Poniższy przykład jest o nieruchomościach. Jednakże, możesz użyć dowolnego zestawu danych, aby znaleźć dane wyjściowe za pomocą tej metody. To jest tylko przykład, więc imputacja i wstępne przetwarzanie nie są ważne. Ale kiedy przechodzisz przez oryginalny test, musisz wykonać pełną procedurę:

# Odczytaj dane

data = pd.read_csv(‘data.csv’)# Remove features with high null values
data.drop([‘PoolQC’, ‘MiscFeature’, ‘Fence’, ‘FireplaceQu’,
‘LotFrontage’], inplace=True, axis=1)# Usuń wartości null
data.dropna(inplace=True)# Przygotuj X i Y
X = pd.get_dummies(dane)
X.drop([‘SalePrice’], inplace=True, axis=1)
y = dane[‘SalePrice’]]
Dopasuj model
W tym kroku należy dopasować model do zbioru danych:
model = XGBRegressor(n_estimators=1000, max_depth=10, learning_rate=0.001)#

Fit the Model (dopasuj model)

model.fit(X, y)
Ważne cechy wartości Shap
Teraz musisz skorzystać z biblioteki SHAP. Jest to najpotężniejsza dostępna biblioteka. Sprawdź działki, które oferują.
– Po pierwsze, musisz uruchomić kod wizualizacji JS w swojej bibliotece.
# załaduj kod wizualizacji JS do notatnika
shap.initjs()
– Teraz możesz wyjaśnić predykcję swojego modelu.
– Możesz zacząć od zebrania wartości SHAP i explainer
shap_values.
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)

Wykreślanie wyników

Wykresy sił
i = 5
shap.force_plot(explainer.expected_value, shap_values[i], features=X.iloc[i], feature_names=X.columns)

Wnioski

Z pomocą powyższego wyjaśnienia, możesz zobaczyć cechy, które przyczyniają się do znalezienia wyjścia twojego modelu i przesunięcia wartości bazowej. Wartość bazowa jest średnią wartością wyjściową modelu, którą otrzymujemy za pomocą danych treningowych.