В моята предишна статия (https://medium.com/@deepaksekar_67405/data-science-mystery-how-to-move-from-death-in-dev-to-prove-in-prod-9b17dd554bf3) обсъдих жизненият цикъл на Data Science, корпоративните изисквания и преминаването от „Death in Dev“ към „Prove in Prod“.

В тази статия ще видим трите неща, които са най-важни в процеса на наука за данни.

  1. Какво — Какво е бизнес изискването? Какви са източниците на данни и характеристиките? Какъв е резултатът?
  2. Как — Как да изградим модел? Колко добър е моделът? Колко време ще отнеме?
  3. Защо — Защо моделът прогнозира такъв резултат?

Ще вземем прост случай на употреба, за да разберем защо?

Забележка: Очакват се основни познания за Python, Data Science!

Какво?

Компанията X обслужва голяма клиентска база и напоследък се сблъсква с повишен процент на оттегляне (скоростта, с която клиентите напускат). Така че CIO е помолил ръководителя на Data Science Lead да създаде модел за прогнозиране на оттеглянето и да създаде рисков профил за съществуващите клиенти.

Целта е само една променлива, която казва дали клиентът е „Изложен на риск“ или „Не е изложен на риск“

След това ръководителят на науката за данните взаимодейства със собствениците на данни/бизнес хората, за да разбере разпространението на данните и източниците. Компания X разполага с всички съответни данни в автономната база данни на Oracle.

как?

Ръководителят на Data Science предлага план!

  1. Настройване на Data Science Environment в Oracle Cloud с 2 кликвания!

а. Завъртете екземпляр на Data Science и създайте проект

b. Създайте сесия на преносим компютър на Jupyterlab и изберете необходимата инфраструктура.

(Ще използвам Intel Xeon — 2 OCPU VM със 100 GB блоково съхранение в рамките на частна подмрежа (Всеки OCPU включва пълното процесорно ядро ​​заедно с модула за хипернишки)

И ето го — готов за употреба веднага!

2. Свързване към Oracle Autonomous Data Warehouse (ADW) в облака в рамките на JupyterLab Notebook (Ще ви е необходим портфейлът на ADW база данни, съхраняван локално за удостоверяване)

%env TNS_ADMIN=/home/datascience/block_storage/ADWWallet
%env ADW_SID=<>
%env ADW_USER=<>
%env ADW_PASSWORD=<>
!echo exit | sqlplus $ADW_USER/$ADW_PASSWORD@$ADW_SID

3. Зареждане на данните от таблица в ADW

С Dask можете да профилирате изчислителната графика и също да визуализирате изхода на профилиращия. Разширението Bokeh за JupyterLab ви позволява да изобразите визуализацията във вашия бележник. ADS ви предоставя декоратор, който използва Dask Profiler, за да ви помогне да визуализирате използването на процесора и паметта от поддържаните операции.

from ads.common.analyzer import resource_analyze
from ads.dataset.factory import DatasetFactory
@resource_analyze
def fetch_data():
ds = DatasetFactory.open(uri, format="sql", table=table, target=target)
return ds
ds = fetch_data()

Едно страхотно нещо е, че можете да посочите целевата променлива, докато данните се зареждат!

%load_ext autoreload
%autoreload 2
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import logging
import os
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
from ads.dataset.factory import DatasetFactory
uri=f'oracle+cx_oracle://{os.environ["ADW_USER"]}:{os.environ["ADW_PASSWORD"]}@{os.environ["ADW_SID"]}'
table = "<>"
# Optional. Leave it as-is if you don't want to specify a target value:  
target = "<>"
if target != "":
    ds = DatasetFactory.open(uri, format="sql", table=table, target=target)
else: 
    ds = DatasetFactory.open(uri, format="sql", table=table)

4. Разбиране на данните

Използването на един метод “show_in_notebook()” от DatasetFactory дава профила на данните, тегла на характеристиките и обобщение на корелацията.

5. Подготовка на данните

Използването на метод “get_recommendations()” от DatasetFactory предлага трансформации на данни

6. Изграждане на модел

а. Изграждане на персонализиран SVM (RBF ядро) модел за двоична класификация

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import *
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
# Converting ADS Dataset object to Pandas Dataframe
dataset = ds.to_pandas_dataframe()
X = dataset.iloc[:,0:7].values
y = dataset.iloc[:,8].values
# Splitting the dataset into the Training set and Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
# Feature Scaling
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#SVM Classifier
classifiersvm = SVC(kernel = 'rbf', random_state = 0)
classifiersvm.fit(X_train, y_train)
y_pred = classifiersvm.predict(X_test)
#Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
cm
accuracy_score(y_test, y_pred)
#K-fold Cross Validation
accuracies = cross_val_score(estimator = classifiersvm, X = X_train, y = y_train, cv = 10)
accuracies

б. Използване на ADS Auto ML за изграждане на модел за прогнозиране

Това е лесно, вече сме посочили целевата променлива, докато данните са били заредени. AutoML може да приема много параметри като времеви лимит, минимални функции, списък с алгоритми, задължителни функции и т.н.

from ads.automl.driver import AutoML
from ads.automl.provider import OracleAutoMLProvider
train, test = ds.train_test_split()
model, baseline = AutoML(train, provider= OracleAutoMLProvider()).train(model_list=["LGBMClassifier", "RandomForestClassifier"])

Можете да визуализирате следите за настройка на хиперпараметъра automl с помощта на „automl.visualize_tuning_trials()“!

Резултатът от изграждането на AutoML ни дава най-добрия алгоритъм с характеристики и подробности за настроените хиперпараметри.

Така че 6-етапният процес на изграждане на персонализиран модел се свежда до 2-етапен процес с помощта на AutoML.

7. Оценете модела

Оценяването може да помогне на разработчиците на машинно обучение да:

  • Бързо сравнявайте модели в няколко стандартни показателя.

Например, каква е точността и F1-резултатът на моя модел на двоична класификация?

  • Открийте къде на даден модел му липсва обратна връзка за бъдещото развитие на модела.

Например, докато точността е висока, прецизността е ниска, поради което примерите, които ме интересуват, се провалят.

  • Подобрете разбирането на компромисите на различните типове модели.

Оценката може да помогне на крайните потребители на алгоритми за машинно обучение да:

  • Разберете визуално и числено къде моделът е вероятно да се представи добре и къде е вероятно да се провали.

Например, модел A се представя добре, когато времето е ясно, но е много по-несигурен при лоши условия.

Класът за оценка на ADS се предлага в 3 варианта: двоична класификация, многокласова класификация и регресия.

from ads.evaluations.evaluator import ADSEvaluator
from ads.common.data import MLData
evaluator = ADSEvaluator(test, models=[model, baseline], training_data=train)
evaluator.metrics

„evaluator.show_in_notebook()“ създава PR крива, ROC крива, диаграма на повишаването, диаграма на печалбата и матрица на объркването.

Защо?

Обяснимостта на машинното обучение (MLX) е процес на обяснение и тълкуване на модели на машинно обучение и дълбоко обучение.

Някои полезни термини за MLX:

  • Обяснимост: Способността да се обяснят причините зад прогнозата на модел за машинно обучение.
  • Интерпретируемост: Нивото, на което човек може да разбере обяснението.
  • Глобални обяснения: Разберете общото поведение на модел на машинно обучение като цяло.
  • Местни обяснения: Разберете защо моделът за машинно обучение е направил конкретна прогноза.
  • Агностични обяснения на модела: Обясненията третират модела за машинно обучение (и предварителната обработка на функциите) като черна кутия, вместо да използват свойства от модела за насочване на обяснението.

Модулът за обяснение на ADS предоставя интерпретируеми, независими от модела, локални/глобални обяснения.

Но тъй като ИТ директорът беше специфичен за конкретен клиент в тестовата група, ние се нуждаем от местни обяснения. „sample=31 е клиентът z тук“

Локално „възрастта“ е повлияла на резултата от прогнозата.

from ads.explanations.explainer import ADSExplainer
explainer = ADSExplainer(test, model, training_data=train)
from ads.explanations.mlx_global_explainer import MLXGlobalExplainer
global_explainer = explainer.global_explanation(provider=MLXGlobalExplainer())
importances = global_explainer.compute_feature_importance()
importances.show_in_notebook(n_features=7)
from ads.explanations.mlx_local_explainer import MLXLocalExplainer
local_explainer = explainer.local_explanation(provider=MLXLocalExplainer())
sample = 31
(X, y) = test.X.iloc[sample:sample], test.y.iloc[sample:sample]
explanation = local_explainer.explain(X, y)
explanation.show_in_notebook(labels=[0,1])

Надявам се да е било забавно — ако отговорът е да, значи мисията ми е изпълнена!

Добре дошли в света на Data Science, направен правилно!

Моля, не забравяйте да ръкопляскате, ако тази статия ви е харесала :)

Изразените възгледи са тези на автора, а не непременно тези на Oracle. Свържете се с Deepak Sekar

Допълнителни ресурси