Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.


12.05.2022

Odszyfrowanie historii

Z inicjatywy prezesa IPN, dr. Karola Nawrockiego, powstało Biuro Nowych Technologii. Jego...
01.04.2022

Program partnerski

NGAGEFirma NFON, ogólnoeuropejski dostawca komunikacji głosowej w chmurze, ogłosił...
01.04.2022

SI w TFI PZU

Na platformie do inwestowania inPZU działa już nowa metoda identyfikacji tożsamości...
01.04.2022

Kooperacja w chmurze

To oparta na stworzonej przez NetApp technologii ONTAP i w pełni zarządzana przez...
01.04.2022

Nowe laptopy od Dynabook

Dynabook wprowadza do swojej oferty dwa laptopy z procesorami Intel Core 12. generacji,...
01.04.2022

Ryzen do stacji roboczych

AMD przedstawił nową gamę procesorów Ryzen Threadripper PRO 5000 serii WX.
31.03.2022

Serwery dla MŚP

Firma Lenovo wprowadziła nowe rozwiązania w zakresie infrastruktury IT Future Ready,...
31.03.2022

Innowacyjny kontroler SSD

Microchip zaprezentował nowe kontrolery SSD, które umożliwią obsługę napędów o pojemności...
31.03.2022

Wydajny jak Brother

Brother dodał do swojej oferty trzy nowe, atramentowe urządzenia wielofunkcyjne, które...

Analiza błędów modeli predykcyjnych przy użyciu Responsible AI Widgets

Data publikacji: 09-12-2021 Autor: Marcin Szeliga

Społeczne, prawne, polityczne i ekonomiczne konsekwencje stosowania sztucznej inteligencji mogą być ogromne. Z tego względu coraz większą uwagę przywiązuje się nie tylko do budowania dokładnych modeli uczenia maszynowego, ale również modeli godnych zaufania. W artykule przedstawiamy zestaw narzędzi Responsible AI Widgets, które ułatwiają wykrycie i zidentyfikowanie problemów z SI.

 

Fundamentem odpowiedzialnego podejścia do sztucznej inteligencji jest analiza działania budowanych modeli w kontekście podejmowanych przez nich decyzji (predykcji). Tylko w ten sposób możemy zabezpieczać modele uczenia maszynowego przed atakami nowego rodzaju, np. atakami polegającymi na zniekształcaniu danych treningowych bądź testowych, oraz wykryć i ograniczyć stronniczość modeli. Modele dyskryminujące użytkowników ze względu na ich płeć, grupę etniczną, wiek czy rasę niestety są używane do podejmowania ważnych decyzji, np. o udzieleniu pożyczki, zastosowaniu określonych środków nadzoru nad podejrzanymi czy zaproszeniu na rozmowę kwalifikacyjną.

 

> Responsible AI Widgets

 

Pakiet Responsible AI Widgets jest zbiorem narzędzi o otwartym kodzie źródłowym dostępnym jako biblioteki języka Python. Pozwalają one analizować działanie dowolnych modeli predykcyjnych nauczonych na danych o formatach numpy.array, pandas.DataFrame, iml.datatypes.DenseData lub scipy.sparse.csr_matrix. Możliwa jest również analiza predykcji zwracanych przez głębokie modele uczenia maszynowego utworzone przy użyciu bibliotek PyTorch, TensorFlow lub Keras. Ponadto pakiet ten pozwala analizować predykcje zwracane przez potoki uczenia maszynowego, o ile tylko zaimplantowane w nich funkcje predict (lub predict_proba) są zgodne ze standardem zdefiniowanym w bibliotece Scikit.

 

W skład zestawu wchodzą:

 

Do wytrenowania przykładowego modelu użyta została biblioteka LightGBM (bit.ly/3Ej7O7A). Zastosowany algorytm uczenia maszynowego oraz wartości jego hiperparametrów wybrane zostały za pomocą biblioteki automatycznego uczenia maszynowego FLAML (bit.ly/30UPSSf).

 

Zainstalować najnowsze wersje powyższych bibliotek możemy, wykonując instrukcje:

 

pip install --upgrade flaml
pip install --upgrade fairlearn
pip install --upgrade interpret-community
pip install --upgrade raiwidgets
pip install --upgrade lightgbm

 

> Modelowanie

 

Jako danych źródłowych używamy zbioru Census. Za pomocą 14 zmiennych wejściowych opisuje on mieszkańców USA. Zmienną wyjściową jest kategoryczna zmienna binarna informująca o tym, czy dana osoba zarabia poniżej, czy powyżej 50 tysięcy dolarów rocznie. Zbiór ten jest dostępny jako przykładowy zbiór biblioteki fairlern.

 

Po jego załadowaniu wydzielamy zmienną wyjściową (y) od wejściowych (X):

 

from fairlearn.datasets import fetch_adult
import pandas as pd
dataset = fetch_adult(as_frame=True)
X_original = dataset.data
y_original = pd.DataFrame(dataset.target,columns = ['class'])


Następnie dzielimy te dane na zbiór treningowy (90% obserwacji) i testowy (pozostałe 10% obserwacji):

 

from sklearn.model_selection import train_test_split
X_train_original, X_test_original, y_train, y_test =
train_test_split(X_original, y_original, test_size=0.1,
random_state=0, , stratify=y_original)

 

Do wyczyszczenia i przygotowania danych użyta została funkcja clean_data zwracająca uzupełnione brakujące wartości. Zmienne tekstowe zostały zakodowane algorytmem kodowania z gorącą jedynką (kodowania 1 do wielu), a zmienne liczbowe przeskalowane. Dodatkowo funkcja ta zwraca listę zmiennych wejściowych i stanów zmiennej wyjściowej. Wszystkie te transformacje mogą być wykonane przez zwracany przez funkcję potok danych:

 

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
def clean_data(X, y):
features = X.columns.values.tolist()
classes = y['class'].unique().tolist()
pipe_cfg = {
'num_cols': X.dtypes[X.dtypes == 'float64'].index.values.tolist(),
'cat_cols': X.dtypes[X.dtypes == 'category'].index.values.tolist(),
}
num_pipe = Pipeline([
('num_imputer', SimpleImputer(strategy='median')),
('num_scaler', StandardScaler())
])
cat_pipe = Pipeline([
('cat_imputer', SimpleImputer(strategy='constant', fill_value='?')),
('cat_encoder', OneHotEncoder(handle_unknown='ignore', sparse=False))
])
feat_pipe = ColumnTransformer([
('num_pipe', num_pipe, pipe_cfg['num_cols']),
('cat_pipe', cat_pipe, pipe_cfg['cat_cols'])
])
X = feat_pipe.fit_transform(X)
return X, feat_pipe, features, classes
Dzięki temu przygotowanie danych do modelowania i analizy sprowadziło się do wykonania poniższych instrukcji:
X_train, feat_pipe, features, classes =
clean_data(X_train_original, y_train)
y_test = y_test['class'].to_numpy()
X_test = feat_pipe.transform(X_test_original)
features = X_train_original.columns.values[0:].tolist()
classes = y_train['class'].unique().tolist()
categorical_features =
X_train_original.dtypes[X_train_original.dtypes ==
'category'].index.values[0:].tolist()

 

Lista atrybutów (zmienna features) oraz lista stanów (zmienna classes) będą nam potrzebne do wyjaśnienia predykcji. Z kolei lista zmiennych tekstowych będzie potrzebna do wskazania zmiennych, które powinny zostać automatycznie zakodowane przez używany do analizy błędów dashboard.

 

[...]

 

Pracownik naukowy Wyższej Szkoły Bankowej w Poznaniu Wydział Zamiejscowy w Chorzowie, jest autorem książek poświęconych analizie danych i posiada tytuł Microsoft Most Valuable Professional.

Artykuł pochodzi z miesięcznika: IT Professional

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"