update samples from Release-98 as a part of SDK release

This commit is contained in:
amlrelsa-ms
2021-05-28 03:44:25 +00:00
parent 700ab2d782
commit 8180cebd75
19 changed files with 71 additions and 484 deletions

View File

@@ -46,10 +46,9 @@
"Please see the [configuration notebook](../../configuration.ipynb) for information about creating one, if required.\n", "Please see the [configuration notebook](../../configuration.ipynb) for information about creating one, if required.\n",
"This notebook also requires the following packages:\n", "This notebook also requires the following packages:\n",
"* `azureml-contrib-fairness`\n", "* `azureml-contrib-fairness`\n",
"* `fairlearn>=0.6.2` (pre-v0.5.0 will work with minor modifications)\n", "* `fairlearn==0.4.6` (v0.5.0 will work with minor modifications)\n",
"* `joblib`\n", "* `joblib`\n",
"* `liac-arff`\n", "* `liac-arff`\n",
"* `raiwidgets==0.4.0`\n",
"\n", "\n",
"Fairlearn relies on features introduced in v0.22.1 of `scikit-learn`. If you have an older version already installed, please uncomment and run the following cell:" "Fairlearn relies on features introduced in v0.22.1 of `scikit-learn`. If you have an older version already installed, please uncomment and run the following cell:"
] ]
@@ -86,7 +85,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"from fairlearn.reductions import GridSearch, DemographicParity, ErrorRate\n", "from fairlearn.reductions import GridSearch, DemographicParity, ErrorRate\n",
"from raiwidgets import FairnessDashboard\n", "from fairlearn.widget import FairlearnDashboard\n",
"\n", "\n",
"from sklearn.compose import ColumnTransformer\n", "from sklearn.compose import ColumnTransformer\n",
"from sklearn.impute import SimpleImputer\n", "from sklearn.impute import SimpleImputer\n",
@@ -257,9 +256,9 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"FairnessDashboard(sensitive_features=A_test,\n", "FairlearnDashboard(sensitive_features=A_test, sensitive_feature_names=['Sex', 'Race'],\n",
" y_true=y_test,\n", " y_true=y_test,\n",
" y_pred={\"unmitigated\": unmitigated_predictor.predict(X_test)})" " y_pred={\"unmitigated\": unmitigated_predictor.predict(X_test)})"
] ]
}, },
{ {
@@ -312,8 +311,8 @@
"sweep.fit(X_train, y_train,\n", "sweep.fit(X_train, y_train,\n",
" sensitive_features=A_train.sex)\n", " sensitive_features=A_train.sex)\n",
"\n", "\n",
"# For Fairlearn pre-v0.5.0, need sweep._predictors\n", "# For Fairlearn v0.5.0, need sweep.predictors_\n",
"predictors = sweep.predictors_" "predictors = sweep._predictors"
] ]
}, },
{ {
@@ -330,14 +329,16 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"errors, disparities = [], []\n", "errors, disparities = [], []\n",
"for predictor in predictors:\n", "for m in predictors:\n",
" classifier = lambda X: m.predict(X)\n",
" \n",
" error = ErrorRate()\n", " error = ErrorRate()\n",
" error.load_data(X_train, pd.Series(y_train), sensitive_features=A_train.sex)\n", " error.load_data(X_train, pd.Series(y_train), sensitive_features=A_train.sex)\n",
" disparity = DemographicParity()\n", " disparity = DemographicParity()\n",
" disparity.load_data(X_train, pd.Series(y_train), sensitive_features=A_train.sex)\n", " disparity.load_data(X_train, pd.Series(y_train), sensitive_features=A_train.sex)\n",
" \n", " \n",
" errors.append(error.gamma(predictor.predict)[0])\n", " errors.append(error.gamma(classifier)[0])\n",
" disparities.append(disparity.gamma(predictor.predict).max())\n", " disparities.append(disparity.gamma(classifier).max())\n",
" \n", " \n",
"all_results = pd.DataFrame( {\"predictor\": predictors, \"error\": errors, \"disparity\": disparities})\n", "all_results = pd.DataFrame( {\"predictor\": predictors, \"error\": errors, \"disparity\": disparities})\n",
"\n", "\n",
@@ -386,9 +387,10 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"FairnessDashboard(sensitive_features=A_test, \n", "FairlearnDashboard(sensitive_features=A_test, \n",
" y_true=y_test.tolist(),\n", " sensitive_feature_names=['Sex', 'Race'],\n",
" y_pred=predictions_dominant)" " y_true=y_test.tolist(),\n",
" y_pred=predictions_dominant)"
] ]
}, },
{ {
@@ -407,7 +409,7 @@
"<a id=\"AzureUpload\"></a>\n", "<a id=\"AzureUpload\"></a>\n",
"## Uploading a Fairness Dashboard to Azure\n", "## Uploading a Fairness Dashboard to Azure\n",
"\n", "\n",
"Uploading a fairness dashboard to Azure is a two stage process. The `FairnessDashboard` invoked in the previous section relies on the underlying Python kernel to compute metrics on demand. This is obviously not available when the fairness dashboard is rendered in AzureML Studio. By default, the dashboard in Azure Machine Learning Studio also requires the models to be registered. The required stages are therefore:\n", "Uploading a fairness dashboard to Azure is a two stage process. The `FairlearnDashboard` invoked in the previous section relies on the underlying Python kernel to compute metrics on demand. This is obviously not available when the fairness dashboard is rendered in AzureML Studio. By default, the dashboard in Azure Machine Learning Studio also requires the models to be registered. The required stages are therefore:\n",
"1. Register the dominant models\n", "1. Register the dominant models\n",
"1. Precompute all the required metrics\n", "1. Precompute all the required metrics\n",
"1. Upload to Azure\n", "1. Upload to Azure\n",

View File

@@ -3,7 +3,6 @@ dependencies:
- pip: - pip:
- azureml-sdk - azureml-sdk
- azureml-contrib-fairness - azureml-contrib-fairness
- fairlearn>=0.6.2 - fairlearn==0.4.6
- joblib - joblib
- liac-arff - liac-arff
- raiwidgets==0.4.0

View File

@@ -30,7 +30,7 @@
"1. [Training Models](#TrainingModels)\n", "1. [Training Models](#TrainingModels)\n",
"1. [Logging in to AzureML](#LoginAzureML)\n", "1. [Logging in to AzureML](#LoginAzureML)\n",
"1. [Registering the Models](#RegisterModels)\n", "1. [Registering the Models](#RegisterModels)\n",
"1. [Using the Fairness Dashboard](#LocalDashboard)\n", "1. [Using the Fairlearn Dashboard](#LocalDashboard)\n",
"1. [Uploading a Fairness Dashboard to Azure](#AzureUpload)\n", "1. [Uploading a Fairness Dashboard to Azure](#AzureUpload)\n",
" 1. Computing Fairness Metrics\n", " 1. Computing Fairness Metrics\n",
" 1. Uploading to Azure\n", " 1. Uploading to Azure\n",
@@ -48,10 +48,9 @@
"Please see the [configuration notebook](../../configuration.ipynb) for information about creating one, if required.\n", "Please see the [configuration notebook](../../configuration.ipynb) for information about creating one, if required.\n",
"This notebook also requires the following packages:\n", "This notebook also requires the following packages:\n",
"* `azureml-contrib-fairness`\n", "* `azureml-contrib-fairness`\n",
"* `fairlearn>=0.6.2` (also works for pre-v0.5.0 with slight modifications)\n", "* `fairlearn==0.4.6` (should also work with v0.5.0)\n",
"* `joblib`\n", "* `joblib`\n",
"* `liac-arff`\n", "* `liac-arff`\n",
"* `raiwidgets==0.4.0`\n",
"\n", "\n",
"Fairlearn relies on features introduced in v0.22.1 of `scikit-learn`. If you have an older version already installed, please uncomment and run the following cell:" "Fairlearn relies on features introduced in v0.22.1 of `scikit-learn`. If you have an older version already installed, please uncomment and run the following cell:"
] ]
@@ -389,11 +388,12 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import FairnessDashboard\n", "from fairlearn.widget import FairlearnDashboard\n",
"\n", "\n",
"FairnessDashboard(sensitive_features=A_test, \n", "FairlearnDashboard(sensitive_features=A_test, \n",
" y_true=y_test.tolist(),\n", " sensitive_feature_names=['Sex', 'Race'],\n",
" y_pred=ys_pred)" " y_true=y_test.tolist(),\n",
" y_pred=ys_pred)"
] ]
}, },
{ {
@@ -403,7 +403,7 @@
"<a id=\"AzureUpload\"></a>\n", "<a id=\"AzureUpload\"></a>\n",
"## Uploading a Fairness Dashboard to Azure\n", "## Uploading a Fairness Dashboard to Azure\n",
"\n", "\n",
"Uploading a fairness dashboard to Azure is a two stage process. The `FairnessDashboard` invoked in the previous section relies on the underlying Python kernel to compute metrics on demand. This is obviously not available when the fairness dashboard is rendered in AzureML Studio. The required stages are therefore:\n", "Uploading a fairness dashboard to Azure is a two stage process. The `FairlearnDashboard` invoked in the previous section relies on the underlying Python kernel to compute metrics on demand. This is obviously not available when the fairness dashboard is rendered in AzureML Studio. The required stages are therefore:\n",
"1. Precompute all the required metrics\n", "1. Precompute all the required metrics\n",
"1. Upload to Azure\n", "1. Upload to Azure\n",
"\n", "\n",

View File

@@ -3,7 +3,6 @@ dependencies:
- pip: - pip:
- azureml-sdk - azureml-sdk
- azureml-contrib-fairness - azureml-contrib-fairness
- fairlearn>=0.6.2 - fairlearn==0.4.6
- joblib - joblib
- liac-arff - liac-arff
- raiwidgets==0.4.0

View File

@@ -1,420 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Copyright (c) Microsoft Corporation. All rights reserved.\n",
"\n",
"Licensed under the MIT License."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Impressions](https://PixelServer20190423114238.azurewebsites.net/api/impressions/MachineLearningNotebooks/how-to-use-azureml/automated-machine-learning/experimental/classification-credit-card-fraud/auto-ml-classification-credit-card-fraud.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Automated Machine Learning\n",
"_**Classification of credit card fraudulent transactions on local managed compute **_\n",
"\n",
"## Contents\n",
"1. [Introduction](#Introduction)\n",
"1. [Setup](#Setup)\n",
"1. [Train](#Train)\n",
"1. [Results](#Results)\n",
"1. [Test](#Test)\n",
"1. [Acknowledgements](#Acknowledgements)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction\n",
"\n",
"In this example we use the associated credit card dataset to showcase how you can use AutoML for a simple classification problem. The goal is to predict if a credit card transaction is considered a fraudulent charge.\n",
"\n",
"This notebook is using local managed compute to train the model.\n",
"\n",
"If you are using an Azure Machine Learning Compute Instance, you are all set. Otherwise, go through the [configuration](../../../configuration.ipynb) notebook first if you haven't already to establish your connection to the AzureML Workspace. \n",
"\n",
"In this notebook you will learn how to:\n",
"1. Create an experiment using an existing workspace.\n",
"2. Configure AutoML using `AutoMLConfig`.\n",
"3. Train the model using local managed compute.\n",
"4. Explore the results.\n",
"5. Test the fitted model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup\n",
"\n",
"As part of the setup you have already created an Azure ML `Workspace` object. For Automated ML you will need to create an `Experiment` object, which is a named object in a `Workspace` used to run experiments."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import logging\n",
"\n",
"import pandas as pd\n",
"\n",
"import azureml.core\n",
"from azureml.core.compute_target import LocalTarget\n",
"from azureml.core.experiment import Experiment\n",
"from azureml.core.workspace import Workspace\n",
"from azureml.core.dataset import Dataset\n",
"from azureml.train.automl import AutoMLConfig"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This sample notebook may use features that are not available in previous versions of the Azure ML SDK."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(\"This notebook was created using version 1.29.0 of the Azure ML SDK\")\n",
"print(\"You are currently using version\", azureml.core.VERSION, \"of the Azure ML SDK\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ws = Workspace.from_config()\n",
"\n",
"# choose a name for experiment\n",
"experiment_name = 'automl-local-managed'\n",
"\n",
"experiment=Experiment(ws, experiment_name)\n",
"\n",
"output = {}\n",
"output['Subscription ID'] = ws.subscription_id\n",
"output['Workspace'] = ws.name\n",
"output['Resource Group'] = ws.resource_group\n",
"output['Location'] = ws.location\n",
"output['Experiment Name'] = experiment.name\n",
"pd.set_option('display.max_colwidth', -1)\n",
"outputDf = pd.DataFrame(data = output, index = [''])\n",
"outputDf.T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Determine if local docker is configured for Linux images\n",
"\n",
"Local managed runs will leverage a Linux docker container to submit the run to. Due to this, the docker needs to be configured to use Linux containers."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Check if Docker is installed and Linux containers are enabled\n",
"import subprocess\n",
"from subprocess import CalledProcessError\n",
"try:\n",
" assert subprocess.run(\"docker -v\", shell=True).returncode == 0, 'Local Managed runs require docker to be installed.'\n",
" out = subprocess.check_output(\"docker system info\", shell=True).decode('ascii')\n",
" assert \"OSType: linux\" in out, 'Docker engine needs to be configured to use Linux containers.' \\\n",
" 'https://docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers'\n",
"except CalledProcessError as ex:\n",
" raise Exception('Local Managed runs require docker to be installed.') from ex"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Load Data\n",
"\n",
"Load the credit card dataset from a csv file containing both training features and labels. The features are inputs to the model, while the training labels represent the expected output of the model. Next, we'll split the data using random_split and extract the training data for the model."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data = \"https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv\"\n",
"dataset = Dataset.Tabular.from_delimited_files(data)\n",
"training_data, validation_data = dataset.random_split(percentage=0.8, seed=223)\n",
"label_column_name = 'Class'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train\n",
"\n",
"Instantiate a AutoMLConfig object. This defines the settings and data used to run the experiment.\n",
"\n",
"|Property|Description|\n",
"|-|-|\n",
"|**task**|classification or regression|\n",
"|**primary_metric**|This is the metric that you want to optimize. Classification supports the following primary metrics: <br><i>accuracy</i><br><i>AUC_weighted</i><br><i>average_precision_score_weighted</i><br><i>norm_macro_recall</i><br><i>precision_score_weighted</i>|\n",
"|**enable_early_stopping**|Stop the run if the metric score is not showing improvement.|\n",
"|**n_cross_validations**|Number of cross validation splits.|\n",
"|**training_data**|Input dataset, containing both features and label column.|\n",
"|**label_column_name**|The name of the label column.|\n",
"|**enable_local_managed**|Enable the experimental local-managed scenario.|\n",
"\n",
"**_You can find more information about primary metrics_** [here](https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-configure-auto-train#primary-metric)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"automl_settings = {\n",
" \"n_cross_validations\": 3,\n",
" \"primary_metric\": 'average_precision_score_weighted',\n",
" \"enable_early_stopping\": True,\n",
" \"experiment_timeout_hours\": 0.3, #for real scenarios we recommend a timeout of at least one hour \n",
" \"verbosity\": logging.INFO,\n",
"}\n",
"\n",
"automl_config = AutoMLConfig(task = 'classification',\n",
" debug_log = 'automl_errors.log',\n",
" compute_target = LocalTarget(),\n",
" enable_local_managed = True,\n",
" training_data = training_data,\n",
" label_column_name = label_column_name,\n",
" **automl_settings\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Call the `submit` method on the experiment object and pass the run configuration. Depending on the data and the number of iterations this can run for a while. Validation errors and current status will be shown when setting `show_output=True` and the execution will be synchronous."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"parent_run = experiment.submit(automl_config, show_output = True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# If you need to retrieve a run that already started, use the following code\n",
"#from azureml.train.automl.run import AutoMLRun\n",
"#parent_run = AutoMLRun(experiment = experiment, run_id = '<replace with your run id>')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"parent_run"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Results"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Explain model\n",
"\n",
"Automated ML models can be explained and visualized using the SDK Explainability library. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Analyze results\n",
"\n",
"### Retrieve the Best Child Run\n",
"\n",
"Below we select the best pipeline from our iterations. The `get_best_child` method returns the best run. Overloads on `get_best_child` allow you to retrieve the best run for *any* logged metric."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"best_run = parent_run.get_best_child()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test the fitted model\n",
"\n",
"Now that the model is trained, split the data in the same way the data was split for training (The difference here is the data is being split locally) and then run the test data through the trained model to get the predicted values."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_test_df = validation_data.drop_columns(columns=[label_column_name])\n",
"y_test_df = validation_data.keep_columns(columns=[label_column_name], validate=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Creating ModelProxy for submitting prediction runs to the training environment.\n",
"We will create a ModelProxy for the best child run, which will allow us to submit a run that does the prediction in the training environment. Unlike the local client, which can have different versions of some libraries, the training environment will have all the compatible libraries for the model already."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from azureml.train.automl.model_proxy import ModelProxy\n",
"best_model_proxy = ModelProxy(best_run)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# call the predict functions on the model proxy\n",
"y_pred = best_model_proxy.predict(X_test_df).to_pandas_dataframe()\n",
"y_pred"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Acknowledgements"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This Credit Card fraud Detection dataset is made available under the Open Database License: http://opendatacommons.org/licenses/odbl/1.0/. Any rights in individual contents of the database are licensed under the Database Contents License: http://opendatacommons.org/licenses/dbcl/1.0/ and is available at: https://www.kaggle.com/mlg-ulb/creditcardfraud\n",
"\n",
"\n",
"The dataset has been collected and analysed during a research collaboration of Worldline and the Machine Learning Group (http://mlg.ulb.ac.be) of ULB (Universit\u00c3\u0192\u00c2\u00a9 Libre de Bruxelles) on big data mining and fraud detection. More details on current and past projects on related topics are available on https://www.researchgate.net/project/Fraud-detection-5 and the page of the DefeatFraud project\n",
"Please cite the following works: \n",
"\u00c3\u00a2\u00e2\u201a\u00ac\u00c2\u00a2\tAndrea Dal Pozzolo, Olivier Caelen, Reid A. Johnson and Gianluca Bontempi. Calibrating Probability with Undersampling for Unbalanced Classification. In Symposium on Computational Intelligence and Data Mining (CIDM), IEEE, 2015\n",
"\u00c3\u00a2\u00e2\u201a\u00ac\u00c2\u00a2\tDal Pozzolo, Andrea; Caelen, Olivier; Le Borgne, Yann-Ael; Waterschoot, Serge; Bontempi, Gianluca. Learned lessons in credit card fraud detection from a practitioner perspective, Expert systems with applications,41,10,4915-4928,2014, Pergamon\n",
"\u00c3\u00a2\u00e2\u201a\u00ac\u00c2\u00a2\tDal Pozzolo, Andrea; Boracchi, Giacomo; Caelen, Olivier; Alippi, Cesare; Bontempi, Gianluca. Credit card fraud detection: a realistic modeling and a novel learning strategy, IEEE transactions on neural networks and learning systems,29,8,3784-3797,2018,IEEE\n",
"o\tDal Pozzolo, Andrea Adaptive Machine learning for credit card fraud detection ULB MLG PhD thesis (supervised by G. Bontempi)\n",
"\u00c3\u00a2\u00e2\u201a\u00ac\u00c2\u00a2\tCarcillo, Fabrizio; Dal Pozzolo, Andrea; Le Borgne, Yann-A\u00c3\u0192\u00c2\u00abl; Caelen, Olivier; Mazzer, Yannis; Bontempi, Gianluca. Scarff: a scalable framework for streaming credit card fraud detection with Spark, Information fusion,41, 182-194,2018,Elsevier\n",
"\u00c3\u00a2\u00e2\u201a\u00ac\u00c2\u00a2\tCarcillo, Fabrizio; Le Borgne, Yann-A\u00c3\u0192\u00c2\u00abl; Caelen, Olivier; Bontempi, Gianluca. Streaming active learning strategies for real-life credit card fraud detection: assessment and visualization, International Journal of Data Science and Analytics, 5,4,285-300,2018,Springer International Publishing"
]
}
],
"metadata": {
"authors": [
{
"name": "sekrupa"
}
],
"category": "tutorial",
"compute": [
"AML Compute"
],
"datasets": [
"Creditcard"
],
"deployment": [
"None"
],
"exclude_from_index": false,
"file_extension": ".py",
"framework": [
"None"
],
"friendly_name": "Classification of credit card fraudulent transactions using Automated ML",
"index_order": 5,
"kernelspec": {
"display_name": "Python 3.6",
"language": "python",
"name": "python36"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
},
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"tags": [
"AutomatedML"
],
"task": "Classification",
"version": "3.6.7"
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -1,4 +0,0 @@
name: auto-ml-classification-credit-card-fraud-local-managed
dependencies:
- pip:
- azureml-sdk

View File

@@ -217,6 +217,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from azureml.core.compute import ComputeTarget, AmlCompute\n",
"from azureml.core.compute_target import ComputeTargetException\n", "from azureml.core.compute_target import ComputeTargetException\n",
"\n", "\n",
"# Choose a name for your CPU cluster\n", "# Choose a name for your CPU cluster\n",
@@ -266,7 +267,7 @@
"available_packages = pkg_resources.working_set\n", "available_packages = pkg_resources.working_set\n",
"sklearn_ver = None\n", "sklearn_ver = None\n",
"pandas_ver = None\n", "pandas_ver = None\n",
"for dist in list(available_packages):\n", "for dist in available_packages:\n",
" if dist.key == 'scikit-learn':\n", " if dist.key == 'scikit-learn':\n",
" sklearn_ver = dist.version\n", " sklearn_ver = dist.version\n",
" elif dist.key == 'pandas':\n", " elif dist.key == 'pandas':\n",
@@ -285,6 +286,7 @@
"azureml_pip_packages.extend([sklearn_dep, pandas_dep])\n", "azureml_pip_packages.extend([sklearn_dep, pandas_dep])\n",
"run_config.environment.python.conda_dependencies = CondaDependencies.create(pip_packages=azureml_pip_packages)\n", "run_config.environment.python.conda_dependencies = CondaDependencies.create(pip_packages=azureml_pip_packages)\n",
"\n", "\n",
"from azureml.core import Run\n",
"from azureml.core import ScriptRunConfig\n", "from azureml.core import ScriptRunConfig\n",
"\n", "\n",
"src = ScriptRunConfig(source_directory=project_folder, \n", "src = ScriptRunConfig(source_directory=project_folder, \n",
@@ -414,6 +416,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"# Retrieve x_test for visualization\n", "# Retrieve x_test for visualization\n",
"import joblib\n",
"x_test_path = './x_test_boston_housing.pkl'\n", "x_test_path = './x_test_boston_housing.pkl'\n",
"run.download_file('x_test_boston_housing.pkl', output_file_path=x_test_path)" "run.download_file('x_test_boston_housing.pkl', output_file_path=x_test_path)"
] ]
@@ -441,7 +444,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import ExplanationDashboard" "from interpret_community.widget import ExplanationDashboard"
] ]
}, },
{ {
@@ -450,7 +453,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"ExplanationDashboard(global_explanation, original_model, dataset=x_test)" "ExplanationDashboard(global_explanation, original_model, datasetX=x_test)"
] ]
}, },
{ {

View File

@@ -11,4 +11,3 @@ dependencies:
- matplotlib - matplotlib
- azureml-dataset-runtime - azureml-dataset-runtime
- ipywidgets - ipywidgets
- raiwidgets==0.4.0

View File

@@ -87,6 +87,7 @@
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.svm import SVC\n", "from sklearn.svm import SVC\n",
"import pandas as pd\n", "import pandas as pd\n",
"import numpy as np\n",
"\n", "\n",
"# Explainers:\n", "# Explainers:\n",
"# 1. SHAP Tabular Explainer\n", "# 1. SHAP Tabular Explainer\n",
@@ -532,7 +533,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import ExplanationDashboard" "from interpret_community.widget import ExplanationDashboard"
] ]
}, },
{ {
@@ -541,7 +542,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"ExplanationDashboard(downloaded_global_explanation, model, dataset=x_test)" "ExplanationDashboard(downloaded_global_explanation, model, datasetX=x_test)"
] ]
}, },
{ {

View File

@@ -10,4 +10,3 @@ dependencies:
- ipython - ipython
- matplotlib - matplotlib
- ipywidgets - ipywidgets
- raiwidgets==0.4.0

View File

@@ -170,6 +170,7 @@
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.impute import SimpleImputer\n", "from sklearn.impute import SimpleImputer\n",
"from sklearn.pipeline import Pipeline\n", "from sklearn.pipeline import Pipeline\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.ensemble import RandomForestClassifier\n",
"\n", "\n",
"from interpret.ext.blackbox import TabularExplainer\n", "from interpret.ext.blackbox import TabularExplainer\n",
@@ -220,6 +221,7 @@
" ('classifier', RandomForestClassifier())])\n", " ('classifier', RandomForestClassifier())])\n",
"\n", "\n",
"# Split data into train and test\n", "# Split data into train and test\n",
"from sklearn.model_selection import train_test_split\n",
"x_train, x_test, y_train, y_test = train_test_split(attritionXData,\n", "x_train, x_test, y_train, y_test = train_test_split(attritionXData,\n",
" target,\n", " target,\n",
" test_size=0.2,\n", " test_size=0.2,\n",
@@ -294,7 +296,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import ExplanationDashboard" "from interpret_community.widget import ExplanationDashboard"
] ]
}, },
{ {
@@ -303,7 +305,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"ExplanationDashboard(global_explanation, clf, dataset=x_test)" "ExplanationDashboard(global_explanation, clf, datasetX=x_test)"
] ]
}, },
{ {
@@ -381,8 +383,10 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from azureml.core.webservice import Webservice\n",
"from azureml.core.model import InferenceConfig\n", "from azureml.core.model import InferenceConfig\n",
"from azureml.core.webservice import AciWebservice\n", "from azureml.core.webservice import AciWebservice\n",
"from azureml.core.model import Model\n",
"from azureml.core.environment import Environment\n", "from azureml.core.environment import Environment\n",
"from azureml.exceptions import WebserviceException\n", "from azureml.exceptions import WebserviceException\n",
"\n", "\n",
@@ -399,7 +403,7 @@
"# Use configs and models generated above\n", "# Use configs and models generated above\n",
"service = Model.deploy(ws, 'model-scoring-deploy-local', [scoring_explainer_model, original_model], inference_config, aciconfig)\n", "service = Model.deploy(ws, 'model-scoring-deploy-local', [scoring_explainer_model, original_model], inference_config, aciconfig)\n",
"try:\n", "try:\n",
" service.wait_for_deployment(show_output=True, timeout_sec=10*60)\n", " service.wait_for_deployment(show_output=True)\n",
"except WebserviceException as e:\n", "except WebserviceException as e:\n",
" print(e.message)\n", " print(e.message)\n",
" print(service.get_logs())\n", " print(service.get_logs())\n",

View File

@@ -10,4 +10,3 @@ dependencies:
- ipython - ipython
- matplotlib - matplotlib
- ipywidgets - ipywidgets
- raiwidgets==0.4.0

View File

@@ -218,6 +218,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from azureml.core.compute import ComputeTarget, AmlCompute\n",
"from azureml.core.compute_target import ComputeTargetException\n", "from azureml.core.compute_target import ComputeTargetException\n",
"\n", "\n",
"# Choose a name for your CPU cluster\n", "# Choose a name for your CPU cluster\n",
@@ -379,6 +380,7 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"# Retrieve x_test for visualization\n", "# Retrieve x_test for visualization\n",
"import joblib\n",
"x_test_path = './x_test.pkl'\n", "x_test_path = './x_test.pkl'\n",
"run.download_file('x_test_ibm.pkl', output_file_path=x_test_path)\n", "run.download_file('x_test_ibm.pkl', output_file_path=x_test_path)\n",
"x_test = joblib.load(x_test_path)" "x_test = joblib.load(x_test_path)"
@@ -398,7 +400,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import ExplanationDashboard" "from interpret_community.widget import ExplanationDashboard"
] ]
}, },
{ {
@@ -407,7 +409,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"ExplanationDashboard(global_explanation, original_svm_model, dataset=x_test)" "ExplanationDashboard(global_explanation, original_svm_model, datasetX=x_test)"
] ]
}, },
{ {
@@ -424,6 +426,8 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from azureml.core.conda_dependencies import CondaDependencies \n",
"\n",
"# WARNING: to install this, g++ needs to be available on the Docker image and is not by default (look at the next cell)\n", "# WARNING: to install this, g++ needs to be available on the Docker image and is not by default (look at the next cell)\n",
"azureml_pip_packages = [\n", "azureml_pip_packages = [\n",
" 'azureml-defaults', 'azureml-core', 'azureml-telemetry',\n", " 'azureml-defaults', 'azureml-core', 'azureml-telemetry',\n",
@@ -433,6 +437,7 @@
"\n", "\n",
"# Note: this is to pin the scikit-learn and pandas versions to be same as notebook.\n", "# Note: this is to pin the scikit-learn and pandas versions to be same as notebook.\n",
"# In production scenario user would choose their dependencies\n", "# In production scenario user would choose their dependencies\n",
"import pkg_resources\n",
"available_packages = pkg_resources.working_set\n", "available_packages = pkg_resources.working_set\n",
"sklearn_ver = None\n", "sklearn_ver = None\n",
"pandas_ver = None\n", "pandas_ver = None\n",
@@ -478,8 +483,10 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from azureml.core.webservice import Webservice\n",
"from azureml.core.model import InferenceConfig\n", "from azureml.core.model import InferenceConfig\n",
"from azureml.core.webservice import AciWebservice\n", "from azureml.core.webservice import AciWebservice\n",
"from azureml.core.model import Model\n",
"from azureml.core.environment import Environment\n", "from azureml.core.environment import Environment\n",
"from azureml.exceptions import WebserviceException\n", "from azureml.exceptions import WebserviceException\n",
"\n", "\n",
@@ -496,7 +503,7 @@
"# Use configs and models generated above\n", "# Use configs and models generated above\n",
"service = Model.deploy(ws, 'model-scoring-service', [scoring_explainer_model, original_model], inference_config, aciconfig)\n", "service = Model.deploy(ws, 'model-scoring-service', [scoring_explainer_model, original_model], inference_config, aciconfig)\n",
"try:\n", "try:\n",
" service.wait_for_deployment(show_output=True, timeout_sec=10*60)\n", " service.wait_for_deployment(show_output=True)\n",
"except WebserviceException as e:\n", "except WebserviceException as e:\n",
" print(e.message)\n", " print(e.message)\n",
" print(service.get_logs())\n", " print(service.get_logs())\n",

View File

@@ -12,4 +12,3 @@ dependencies:
- azureml-dataset-runtime - azureml-dataset-runtime
- azureml-core - azureml-core
- ipywidgets - ipywidgets
- raiwidgets==0.4.0

View File

@@ -35,7 +35,7 @@
"source": [ "source": [
"## Install required packages\n", "## Install required packages\n",
"\n", "\n",
"This notebook works with Fairlearn v0.6.1, but not with versions pre-v0.5.0. If needed, please uncomment and run the following cell:" "This notebook works with Fairlearn v0.4.6, and not later versions. If needed, please uncomment and run the following cell:"
] ]
}, },
{ {
@@ -44,7 +44,7 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"# %pip install --upgrade fairlearn>=0.6.2" "# %pip install --upgrade fairlearn==0.4.6"
] ]
}, },
{ {
@@ -70,18 +70,21 @@
"outputs": [], "outputs": [],
"source": [ "source": [
"from fairlearn.reductions import GridSearch\n", "from fairlearn.reductions import GridSearch\n",
"from fairlearn.reductions import DemographicParity\n", "from fairlearn.reductions import DemographicParity, ErrorRate\n",
"\n", "\n",
"from sklearn.compose import ColumnTransformer, make_column_selector\n", "from sklearn.compose import ColumnTransformer, make_column_selector\n",
"from sklearn.preprocessing import LabelEncoder, StandardScaler, OneHotEncoder\n", "from sklearn.preprocessing import LabelEncoder,StandardScaler\n",
"from sklearn.linear_model import LogisticRegression\n", "from sklearn.linear_model import LogisticRegression\n",
"from sklearn.pipeline import Pipeline\n", "from sklearn.pipeline import Pipeline\n",
"from sklearn.impute import SimpleImputer\n", "from sklearn.impute import SimpleImputer\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.svm import SVC\n",
"from sklearn.metrics import accuracy_score\n", "from sklearn.metrics import accuracy_score\n",
"\n", "\n",
"import pandas as pd\n", "import pandas as pd\n",
"\n", "\n",
"# SHAP Tabular Explainer\n", "# SHAP Tabular Explainer\n",
"from interpret.ext.blackbox import KernelExplainer\n",
"from interpret.ext.blackbox import MimicExplainer\n", "from interpret.ext.blackbox import MimicExplainer\n",
"from interpret.ext.glassbox import LGBMExplainableModel" "from interpret.ext.glassbox import LGBMExplainableModel"
] ]
@@ -337,13 +340,13 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"from raiwidgets import FairnessDashboard\n", "from fairlearn.widget import FairlearnDashboard\n",
"\n", "\n",
"y_pred = model.predict(X_test)\n", "y_pred = model.predict(X_test)\n",
"\n", "\n",
"FairnessDashboard(sensitive_features=sensitive_features_test,\n", "FairlearnDashboard(sensitive_features=sensitive_features_test,\n",
" y_true=y_test,\n", " y_true=y_test,\n",
" y_pred=y_pred)" " y_pred=y_pred)"
] ]
}, },
{ {
@@ -399,7 +402,7 @@
"sweep.fit(X_train_prep, y_train,\n", "sweep.fit(X_train_prep, y_train,\n",
" sensitive_features=sensitive_features_train.sex)\n", " sensitive_features=sensitive_features_train.sex)\n",
"\n", "\n",
"predictors = sweep.predictors_" "predictors = sweep._predictors"
] ]
}, },
{ {
@@ -465,7 +468,7 @@
"for name, predictor in dominant_models_dict.items():\n", "for name, predictor in dominant_models_dict.items():\n",
" dominant_all[name] = predictor.predict(X_test_prep)\n", " dominant_all[name] = predictor.predict(X_test_prep)\n",
"\n", "\n",
"FairnessDashboard(sensitive_features=sensitive_features_test, \n", "FairlearnDashboard(sensitive_features=sensitive_features_test, \n",
" y_true=y_test,\n", " y_true=y_test,\n",
" y_pred=dominant_all)" " y_pred=dominant_all)"
] ]
@@ -560,7 +563,7 @@
"source": [ "source": [
"import joblib\n", "import joblib\n",
"import os\n", "import os\n",
"from azureml.core import Model, Experiment\n", "from azureml.core import Model, Experiment, Run\n",
"\n", "\n",
"os.makedirs('models', exist_ok=True)\n", "os.makedirs('models', exist_ok=True)\n",
"def register_model(name, model):\n", "def register_model(name, model):\n",

View File

@@ -4,9 +4,9 @@ dependencies:
- azureml-sdk - azureml-sdk
- azureml-interpret - azureml-interpret
- azureml-contrib-fairness - azureml-contrib-fairness
- fairlearn>=0.6.2 - fairlearn==0.4.6
- matplotlib - matplotlib
- azureml-dataset-runtime - azureml-dataset-runtime
- ipywidgets - ipywidgets
- raiwidgets==0.4.0 - raiwidgets
- liac-arff - liac-arff

View File

@@ -184,12 +184,10 @@
"\n", "\n",
"env = Environment(name=\"mlflow-env\")\n", "env = Environment(name=\"mlflow-env\")\n",
"\n", "\n",
"env.docker.enabled = True\n",
"\n",
"# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions\n", "# Specify conda dependencies with scikit-learn and temporary pointers to mlflow extensions\n",
"cd = CondaDependencies.create(\n", "cd = CondaDependencies.create(\n",
" conda_packages=[\"scikit-learn\", \"matplotlib\"],\n", " conda_packages=[\"scikit-learn\", \"matplotlib\"],\n",
" pip_packages=[\"azureml-mlflow\", \"numpy\"]\n", " pip_packages=[\"azureml-mlflow\", \"pandas\", \"numpy\"]\n",
" )\n", " )\n",
"\n", "\n",
"env.python.conda_dependencies = cd" "env.python.conda_dependencies = cd"

View File

@@ -274,7 +274,7 @@
"- pip:\n", "- pip:\n",
" - azureml-defaults\n", " - azureml-defaults\n",
" - keras\n", " - keras\n",
" - tensorflow\n", " - tensorflow<=2.4.*\n",
" - numpy\n", " - numpy\n",
" - scikit-learn\n", " - scikit-learn\n",
" - pandas\n", " - pandas\n",

View File

@@ -25,7 +25,6 @@ Machine Learning notebook samples and encourage efficient retrieval of topics an
| [Forecasting away from training data](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/forecasting-forecast-function/auto-ml-forecasting-function.ipynb) | Forecasting | None | Remote | None | Azure ML AutoML | Forecasting, Confidence Intervals | | [Forecasting away from training data](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/forecasting-forecast-function/auto-ml-forecasting-function.ipynb) | Forecasting | None | Remote | None | Azure ML AutoML | Forecasting, Confidence Intervals |
| [Automated ML run with basic edition features.](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb) | Classification | Bankmarketing | AML | ACI | None | featurization, explainability, remote_run, AutomatedML | | [Automated ML run with basic edition features.](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/classification-bank-marketing-all-features/auto-ml-classification-bank-marketing-all-features.ipynb) | Classification | Bankmarketing | AML | ACI | None | featurization, explainability, remote_run, AutomatedML |
| [Classification of credit card fraudulent transactions using Automated ML](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/classification-credit-card-fraud/auto-ml-classification-credit-card-fraud.ipynb) | Classification | Creditcard | AML Compute | None | None | remote_run, AutomatedML | | [Classification of credit card fraudulent transactions using Automated ML](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/classification-credit-card-fraud/auto-ml-classification-credit-card-fraud.ipynb) | Classification | Creditcard | AML Compute | None | None | remote_run, AutomatedML |
| [Classification of credit card fraudulent transactions using Automated ML](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/experimental/classification-credit-card-fraud-local-managed/auto-ml-classification-credit-card-fraud-local-managed.ipynb) | Classification | Creditcard | AML Compute | None | None | AutomatedML |
| [Automated ML run with featurization and model explainability.](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/regression-explanation-featurization/auto-ml-regression-explanation-featurization.ipynb) | Regression | MachineData | AML | ACI | None | featurization, explainability, remote_run, AutomatedML | | [Automated ML run with featurization and model explainability.](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/automated-machine-learning/regression-explanation-featurization/auto-ml-regression-explanation-featurization.ipynb) | Regression | MachineData | AML | ACI | None | featurization, explainability, remote_run, AutomatedML |
| :star:[Azure Machine Learning Pipeline with DataTranferStep](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-data-transfer.ipynb) | Demonstrates the use of DataTranferStep | Custom | ADF | None | Azure ML | None | | :star:[Azure Machine Learning Pipeline with DataTranferStep](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-data-transfer.ipynb) | Demonstrates the use of DataTranferStep | Custom | ADF | None | Azure ML | None |
| [Getting Started with Azure Machine Learning Pipelines](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-getting-started.ipynb) | Getting Started notebook for ANML Pipelines | Custom | AML Compute | None | Azure ML | None | | [Getting Started with Azure Machine Learning Pipelines](https://github.com/Azure/MachineLearningNotebooks/blob/master//how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-getting-started.ipynb) | Getting Started notebook for ANML Pipelines | Custom | AML Compute | None | Azure ML | None |