В моята предишна статия (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“.
В тази статия ще видим трите неща, които са най-важни в процеса на наука за данни.
- Какво — Какво е бизнес изискването? Какви са източниците на данни и характеристиките? Какъв е резултатът?
- Как — Как да изградим модел? Колко добър е моделът? Колко време ще отнеме?
- Защо — Защо моделът прогнозира такъв резултат?
Ще вземем прост случай на употреба, за да разберем защо?
Забележка: Очакват се основни познания за Python, Data Science!
Какво?
Компанията X обслужва голяма клиентска база и напоследък се сблъсква с повишен процент на оттегляне (скоростта, с която клиентите напускат). Така че CIO е помолил ръководителя на Data Science Lead да създаде модел за прогнозиране на оттеглянето и да създаде рисков профил за съществуващите клиенти.
Целта е само една променлива, която казва дали клиентът е „Изложен на риск“ или „Не е изложен на риск“
След това ръководителят на науката за данните взаимодейства със собствениците на данни/бизнес хората, за да разбере разпространението на данните и източниците. Компания X разполага с всички съответни данни в автономната база данни на Oracle.
как?
Ръководителят на Data Science предлага план!
- *Автономна база данни — https://www.oracle.com/au/database/autonomous-database.html
- *Oracle Cloud Infrastructure Data Science Platform — https://www.oracle.com/data-science/cloud-infrastructure-data-science-product.html
- Настройване на 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
Допълнителни ресурси