Site Loader

Merhaba Arkadaşlar, bugün ki yazımda Explainability (Açıklanabilirlik) ve Interpretability(yorumlanabilirlik) kavranlarının ne olduğunu ve makine öğrenme projelerimizde nasıl kullanabileceğimizi anlatacağım.

Explainability Nedir?

Explainability(açıklanabilirlik), ve yorumlanabilirlik;bir makinenin veya derin öğrenme sisteminin iç mekaniğinin insani terimlerle ne ölçüde açıklanabileceğidir. Sağlık hizmeti ve banka gibi riskli alanlar, hesap verebilirlik ve şeffaflık sorularının özellikle önemli olduğu yapay zeka ve derin öğrenme sistemleri çok önemlidir. Kısaca buradaki temel amaç siyah kutu diye tabir ettiğimiz makine öğrenme algoritmaların verdiği çıktının hangi değişkenlere göre değiştiğini vs. açıklamaktır.

Bir banka müşterilerini tanımak istiyor müşterilerinin iki yıl içinde herhangi bir gelir riski taşıyıp taşımayacağına bakarak ona göre müşterilerine kredi verip veremeyeceğini karar veriyor. Müşterinin daha önceki ödemlerdeki gecikme, aldığı konut kredileri sayısı, aylık

geliri, yaş bilgisi vs. göre eğer müşterinin risk olasılığı %50 üstünde ise kredi vermiyor. Burada biz kendimize şu soruyu sormalıyız yazdığımız algoritma ne kadar güvenilir ya da müşteri neden kredi alamadığını sorduğunda nasıl bir cevap vereceğiz. Müşteriye elbette oluşturduğumuz makine öğrenme algoritmalarından bahsetmeyeceğiz büyük ihtimalle makine öğrenme algoritmasının ne olduğunu bilmiyordur. Bu yüzden modeller açıklama yoluna giriliyor.

 

 

Birçok model açıklama yöntemleri var en çok kullanılanlar;

  • LIME
  • SHAP

Ben bu yazıda  SHAP yöntemi ile nasıl bir projemize dahil edeceğimizi ele alacağım.

SHAP(SHapley Additive exPlanations)

Makine öğrenme algoritmalarının çıktısını açıklamak için bir oyun teorisi yaklaşımıdır. Değerlerin önemlerini shapley değerleri ile yapıyor. Örneğin bireyin diyabet hastası olmasında hangi etkenler daha önemli. Burada etkenler negatif etki göstermiş olabilir pozitif etkide.

Shap Yöntemleri;

  • TreeExplainer
  • GradientExplainer
  • DeepExplainer
  • KernelExplainer
  • LinearExplainer

Bu yöntemler hangi algoritmalar üzerinde kullanabileceğinizdir. TreeExplainer ağaç tabanlı(Decision. Random Forest, XGBoodt vs.) modelleri açıklamak için TreeExplainer kullanırken. Ağaç tabanlı olmayan( Lojistik Reg, SVM, KNN) gibi algoritmalarda kullanılır. Daha önce kullandığım da TreeExplainer ve KernelExplainer arasında çok ciddi bir hız farkı olduğunu gördüm. TreeExplainer yöntemi çok daha hızlı olduğunu söyleyebilirim.

Bu yazıda daha önce önişleme işlemleri yaptığım hazır hale getirdiğim titanic veriseti üzerinden anlatacağım.

import pandas as pd
import shap
import xgboost
import sklearn
import time
from sklearn.model_selection import train_test_split
import matplotlib.pylab as pl
shap.initjs()

 

Gerekli kütüphaneleri projeye dahil ettikten sonra. Versetimizi okuyalım.

data = pd.read_csv('titanic_data.csv')
data.sample(7)

Gereksiz sütunları kaldıralım. Verisetini eğitim ve test olarak ayıralım.

X = data.drop(['Survived','Unnamed: 0'],axis=1)
Y = data['Survived']
X_train, X_test, Y_train, Y_test = train_test_split (X, Y, test_size = 0.25)


Buarada XGBoost algoritmasını kullanacağım bu yüzden ağaç tabanlı TreeExplainer yöntemini kullanıyor olacağım.

from xgboost import XGBClassifier 
xgb_model = XGBClassifier(learning_rate= 0.5,max_depth=9,min_samples_leaf=5,n_estimators=1000)
xgb_model.fit(X_train,Y_train)

xgb_accuracy = round(xgb_model.score(X_train, Y_train) * 100, 2)
xgb_accuracy
89.97

Modelimizi oluşturduk ve modelimiz %89 başarı oranı verdi.

Verisetimizin shap value değerlerini hesaplayalım.

xgb_explainer = shap.TreeExplainer(gbm_model)
xgb_shap_values = xgb_explainer.shap_values(X_test)

Şimdi sıra görselleştirmede;

a. Force plot(kuvvet grafiği): Her özelliğin, karar puanının değerinin  taban değerden (tüm girdiler eksikse karar puanının tahmini)

sınıflandırıcı tarafından öngörülen değere taşınması sürecine katkısını gösterir.

shap.force_plot(xgb_explainer.expected_value, xgb_shap_values[1,:], X_test.iloc[10,:])

b. Summary Plot:  Özelliklerin model üzerindeki etkileri en fazladan en aza doğru yukarıdan aşağıya sıralanır.

Bu grafik aynı zamanda bar plot olarak da gösterilebilir.

shap.summary_plot(xgb_shap_values, X_test)

Burada model üzerinde en etkili değişkenimz Title sonra Pclass değişkeni.

Bar Plot : Değerleri etki oranlarına göre yukardan aşağıya doğru sıralar.

shap.summary_plot(xgb_shap_values,X_test,  plot_type="bar")

 

c. Decision Plot: Bu grafikte summary plot ile çok benzerdir özellikleri önem derecelerine göre yukarıdan aşağıya doğru sıralar. Bu grafikte

katkı değerini de gösterir.

shap.decision_plot(xgb_explainer.expected_value, xgb_shap_values[:8:], X.iloc[0,:])

Dikkat ederseniz satır sayısını biz belirledik. Hemen başka bir örnek daha yapalım.

shap.decision_plot(xgb_explainer.expected_value, xgb_shap_values[::], X.iloc[0,:])

d. Waterfall Plot: her değerin etki oranı pozitif ve negatif olarak verir.

shap.waterfall_plot(xgb_explainer.expected_value, xgb_shap_values[5,:], X_test.iloc[5,:])

 

Veri Bilimi Eğitim serisinda bir yazının daha sonuna geldik. Eksik yada yanlış gördüğünüz yerler için iletişime geçmekten çekinmeyin bir sonraki yazıda görüşmek üzere.

Kaynaklar:

Scott Lundberg

Post Author: Cahit ISLEYEN

Data Scientist at @embedica.ai

One Reply to “Makine Öğrenme için Explainability(Açıklanabilirlik)”

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir