Azure Machine Learning: Use case - Predict Wine Quality
1. Introduction
Dans cet article je vais présenter le service Cloud Azure ML de Microsoft. C’est à travers un exemple concret, une problématique bien réelle que nous aborderons l’outil : Comment prédire la qualité d’un vin en fonction de ses caractéristiques !
Avant de rentrer dans le vif du sujet nous verrons dans un premier temps ce qu’est le Machine Learning, quel est son but et quels sont les différents algorithmes utilisés en l’apprentissage automatique. Dans un second temps je ferai un focus sur l’outil Azure ML proposé par Microsoft et sur ses caractéristiques. Par la suite je présenterai le jeu de données utilisés pour notre analyse, nous testerons et évaluerons différents algorithmes de prédiction dans le but d’obtenir le « meilleur » modèle. Enfin nous publierons notre expérimentation à travers un Web Service que nous interrogerons via un ETL (SSIS) pour simuler une industrialisation, une mise en production de notre algorithme.
Remarque :
- Cet article n’a pas vocation à être un cours sur le Machine Learning.
- J’ai cherché un jeu de données pour avoir un support de rédaction. C’est après une étude de marché que j’ai écrit cet article, je me suis dit qu'au moins en France, je toucherai un large public ! (Dédicace à une chanson du groupe Java « Sexe, Accordéon Et Alcool »)
- Ayant peu de connaissances en œnologie, je ne garantis pas la véracité de mes résultats, mais n’hésitez pas à les commenter ;-)
2. Machine Learning
L’apprentissage automatique ou le Machine Learning est une discipline scientifique où l'analyse et l'implémentation de méthodes automatisables permet à une machine d'évoluer grâce à un processus d'apprentissage.
“The goal of machine learning is tbuild computer systems that can adapt and learn from their experience.” – Tom Dietterich
http://www.pulsweb.fr/wp-content/uploads/2014/08/Dilbert_MachineLearning.png
Dilbert (Jan 5, 2000)
L’utilisation de l’apprentissage automatique reste encore principalement utilisée dans le secteur de l’informatique et de la statistique. Avec la prolifération des données, de leurs nouveaux types, de leurs fréquences, ..., du Big Data, ces algorithmes commencent à être utilisés dans plusieurs domaines et dans plus en plus de sociétés. Avec cette démocratisation, il devient impératif que ceux qui utilisent ces algorithmes comprennent leur signification et leur potentiel impact.
Le principe du Machine Learning est de créer un modèle à partir d’un jeu de données, duquel on peut évaluer les performances par une méthode de validation sur un sous-ensemble de ce jeu de données. Plus la taille du jeu de données utilisé sera grande et plus le modèle entraîné sera performant. C’est surement pour cela que l’on amalgame souvent le Machine Learning avec le Big Data.
La démocratisation du Big Data aurait-elle pour incidence la démocratisation du Machine Learning ?
Voici les principales étapes quant à la construction d’un modèle prédictif : http://www.pulsweb.fr/wp-content/uploads/2014/08/MachineLearning-1024x574.png
Les algorithmes d’apprentissage sont nombreux et peuvent se catégoriser selon le mode d'apprentissage qu'ils emploient:
- Apprentissage supervisé
- Apprentissage non supervisé
- Apprentissage semi-supervisé
- Apprentissage par renforcement
Dans le domaine de l'apprentissage supervisé, voici quelques algorithmes :
Linear Classifiers : Il permet de classifier sur la base de la valeur d'une combinaison linéaire des caractéristiques.
Logical Regression : La régression logistique est une technique statistique connue utilisée pour modéliser les résultats binaires. Utilisation : Exploration et évaluation des facteurs qui contribuent à un résultat comme par exemple rechercher les facteurs qui influencent les clients à se rendre plusieurs fois dans un magasin.
Naïve Bayes Classifier : Permet de classifier facilement et rapidement. Utilisation : Catégoriser les bons et mauvais clients.
Perceptron : C’est un algorithme de techniques de séparation linéaire (Université de Lille 3)
Support Vector Machine : C’est un algorithme d'apprentissage supervisé destiné à résoudre des problèmes de discrimination et de régression reposant sur deux idées clés, la marge maximale et le fait de transformer l'espace de représentation des données d'entrée en un espace de plus grandes dimensions. Utilisation : Les SVM peuvent être utilisés pour résoudre des problèmes de discrimination, c'est-à-dire décider à quelle classe appartient un échantillon, ou de régression, c'est-à-dire prédire la valeur numérique d'une variable.
Quadratic Classifiers : Un classificateur quadratique est utilisé pour séparer en deux ou plusieurs classes d'objets à l’aide d’une surface quadratique.
K-Means Clustering : L'algorithme des k-moyennes divise des observations en K partitions (clusters) dans lesquelles chaque observation appartient à la partition avec la moyenne la plus proche. Utilisation : K-Means est utile lorsque vous avez une idée du nombre de partitions existantes dans votre espace.
Boosting : Le Boosting optimise les performances d’algorithmes de classification binaires. C’est une méthode pour convertir des règles de prédiction peu performantes en une règle de prédiction (très) performante. La prédiction finale est issue d’une combinaison (vote pondéré) de plusieurs prédictions. Utilisation : Prédiction de courses hippiques.
Decision Tree : C’est un algorithme de classification et de régression utilisé pour la modélisation prédictive d'attributs discrets et continus. L’algorithme est facile à appréhender. Utilisation : identifier les caractéristiques d’un client.
Random Forest : L'algorithme des forêts d'arbres décisionnels effectue un apprentissage sur de multiples arbres de décision entrainés sur des sous-ensembles de données légèrement différents.
Neural Networks : L’algorithme associe chaque état possible de l'attribut d'entrée avec chaque état possible de l'attribut prévisible, et il utilise les données d'apprentissage pour calculer les probabilités. Utilisation : Prédiction des stocks.
Bayesian Networks : L’algorithme calcul des probabilités conditionnel. En fonction des informations observées, il calcule la probabilité des données non observées. Par exemple, en fonction des symptômes d'un malade, on calcule les probabilités des différentes pathologies compatibles avec ses symptômes. On peut aussi calculer la probabilité de symptômes non observés, et en déduire les examens complémentaires les plus intéressants. Utilisation : Modélisation des risques.
Il existe deux types de modèle en fonction de la nature de la sortie attendue :
- Classification : La variable cible est catégorique et sa « classe » est identifié.
- Régression : La variable cible est continue.
http://www.pulsweb.fr/wp-content/uploads/2014/08/Classification_Regression.jpg
Après avoir recueilli des données, les avoir nettoyés, enrichis, avoir sélectionné leurs caractéristiques, choisit le modèle en fonction de la sortie attendue et du type de vos données, entrainer le modèle, il est désormais temps de l’évaluer à l’aide des méthodes suivantes :
Model Scoring : Processus qui applique les paramètres du modèle à un ensemble de données pour générer des prévisions.
Model Evaluation : Calcul la performance du modèle en fonction du Model Scoring et mesure la capacité d'un modèle à apprendre la relation entre les caractéristiques et les objectifs.
Tout cela reste encore très théorique… Passons à la pratique !
3. Azure ML
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML.png
Azure Machine Learning est un service permettant de réaliser des analyses prédictives. En tirant parti du Cloud, Azure ML permet à un large public d'accéder à l'apprentissage automatique depuis un navigateur internet. En effet l'apprentissage automatique requiert généralement des logiciels complexes, des ordinateurs haut de gamme et des Data ScientistPour de nombreuses start-ups et même pour de grandes entreprises, cette technologie reste trop compliquée et trop chère.
Azure ML combine des outils d'analyse, des algorithmes puissants développés pour Xbox et Bing et des années de recherches menées par Microsoft en matière d'apprentissage automatique en un service Cloud simple et convivial.
Voici un historique des actions de Microsoft sur le Machine Learning : http://www.pulsweb.fr/wp-content/uploads/2014/08/DataMiningMicrosoft.png
Vidéde présentation sur Channel 9.
Azure ML est disponible en Preview depuis le Juillet 2014, pour l’essayer : http://azure.microsoft.com/fr-fr/services/machine-learning/.
Après avoir créé un Workspace, espace de travail, il est possible d’uploader des données, créer des expérimentations, publier des Web Services… Voici à quoi ressemble la fenêtre de création d’expérimentation:
http://www.pulsweb.fr/wp-content/uploads/2014/08/ExperimentationAzureML.jpg
Un certain nombre de modules permet de formater, corréler, transformer les données… Ils sont organisés par types d’action :
- Data Format Conversions
- Data Input and Output
- Data Transformation
- Feature Selection
- Machine Learning
- R Language Modules
- Statistical Functions
- Text Analytics
- http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_Modules.png
Voici la liste exhaustive des modules : StudiAzureML
Les données d’entrée peuvent aujourd’*** être récupérées des sources suivantes : Azure Blob Storage
HTTP
- Azure Table
- SQL Azure
- Hive Query
- Power Query
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_Input.png
Il est possible d’enregistrer les résultats d’une expérimentation dans les destinations suivantes :
- Azure Blob Storage
- Azure Table
- SQL Azure
- Hive Query
Le service Azure ML est facturé par heure lors de l’expérimentation. Le service d’API est lui facturé aux 1000 appels. Pour plus de détails : https://azure.microsoft.com/fr-fr/pricing/details/machine-learning/.
4. Les données
Parlons maintenant du jeu de données sélectionnées : il a été recueilli par PaulCortez, AntoniCerdeira, FernandAlmeida, TelmMatos et Jose Reis en 2009 pour la rédaction du livre : Modeling wine preferences by data mining from physicochemical properties.
Citation for use: P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. Modeling wine preferences by data mining from physicochemical properties. In Decision Support Systems, Elsevier, 47(4):547-553, 2009.
Ils proposent une approche d'exploration de données pour prédire les préférences gustatives et la qualité de différents vins en fonction de leurs caractéristiques : fixed acidity, volatile acidity, citric acid, residual sugar, chlorides, free sulfur dioxide, total sulfur dioxide, density, pH, sulphates, alcohol.
Les échantillons proviennent de vins blanc et rouge du Portugal : VinhVerdeVinhVerde est un produit de la région de Minho, au Nord-Ouest du Portugal. Moyennement alcoolisé, il est particulièrement apprécié en raison de sa fraicheur ;-)
Les données sont publiques, vous pourriez donc reproduire mes expérimentations : http://www3.dsi.uminho.pt/pcortez/wine/winequality.zip.
Voici à quoi ressemblent les données :
http://www.pulsweb.fr/wp-content/uploads/2014/08/vinhoverde-1024x279.png
L’output variable dans notre exemple sera la qualité. Cette donnée est basée sur des données sensorielles médianes d’au moins 3 évaluations faites par des experts en vin. Chaque expert a classé la qualité du vin entre 0 (très mauvais) et 10 (excellent).
Le nombre de vins testé est de 1599 pour les rouges et de 4898 pour les blancs.
Voici les Inputs variables, leurs unités, leurs Min, Max et leurs moyennes (Il ne manque aucun attribut à un vin) :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_Data.png
5. Classification
5.1. Classification Binaire
Avant de commencer mon expérimentation, revenons sur ce que nous souhaitons faire et obtenir :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AZUREML_DATAMINING.png
Voici les différentes étapes :
- Upload du jeu de données
- Division du jeu de données : un pour entrainer le modèle et l’autre permettant de vérifier les résultats du modèle.
- Vérification des résultats de l’algorithme choisit, sinon itération.
- Définition des points d’entrées et de sorties du modèle (New Input, Output).
- Publication du Web Service.
- Utilisation de l’API.
- Validation des résultats par une dégustation ;-p
Il existe plusieurs types de classification selon le résultat souhaité, afin d’avoir un résultat binaire sur la qualité du vin j’ai initié le fichier CSV suivant : Vous pouvez le télécharger ici.
http://www.pulsweb.fr/wp-content/uploads/2014/08/MyData.png
Nous allons le corréler avec le fichier des vins rouges afin de prédire si un vin rouge est bon ou mauvais en fonction de sa composition chimique. Premièrement nous devons créer depuis le Manager Azure, le service Machine Learning :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_1-1024x563.png
Remarque : Seul le stockage South Central US est disponible pour le moment.
Une fois le Workspace créé, je m’y connecte :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_2-1024x481.png
Upload des différents fichiers et créations d’une nouvelle expérimentation :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_3-1024x520.png
Il est possible de visualiser et d’analyser les données d’un fichier d’entrée :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_4.png
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_5.png
Voici une première expérimentation :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_6.png
Détail des étapes :
- Join : Jointure entre les deux tables sur la colonne Quality.
- Project Columns : sélection de toutes les colonnes hormis les colonnes Quality (nous n’en avons plus besoin car nous souhaitons prédire la colonne Result).
- Split : split de mes données en deux échantillons, l’un pour entrainer le modèle et l’autre pour le valider.
- Train model : J’ai choisi d’entrainer le modèle avec l’algorithme Two-Class Averaged Perceptron, sur la colonne Result.
- Score Model : Permet de calculer le score du modèle.
- Evaluate Model : Permet d’évaluer le modèle.
Après exécution de mon expérimentation, voici le résultat :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_7.png
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_8.png
La qualité d'un modèle est mesurée par l'évaluation de la performance du modèle sur une partie des données sources pour mesurer la précision des prédictions et les comparer aux résultats attendus.
Receiver Operating Characteristics (ROC) est une technique permettant de visualiser, organiser et sélectionner des classificateurs sur la base de leur performance.
Pour les modèles de classification binaires, il y a quatre résultats possibles :
- Vrai positif (TP) : un vin bon est correctement classé comme bon
- Faux positif (FP) : un vin mauvais qui est incorrectement classé comme bon
- Vrai négatif (TN) : un exemple mauvais qui est correctement classé comme mauvais
- Faux négatif (FN) : un exemple bon qui est incorrectement classé comme mauvais
Il existe trois paramètres importants qui sont utilisés pour mesurer la performance : Precision : La précision est calculée par TP / (TP + FP)
- Recall : Calculé par TP / (VP + FN)
- Accuracy : La précision est calculée par TP + TN / (TP + FP + TN + FN)
En vue des résultats mon classificateur est moyennement bon. Sur 1819 bons vins, il s’est trompé 410 fois et sur les 630 mauvais vins il s’est trompé 218 fois !
Comparons les résultats avec d’autres classifieurs et itérons afin d’avoir le meilleur taux de prédiction :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_9.png
Le classifieur « Two-Class Boosted Decision Tree » offre de meilleures prédictions :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_10.png
Après avoir testé et gardé le meilleur classifieur (il s’avère que dans mon cas c’est le « Two-Class Decision Jungle ») il faut sauvegarder le modèle entrainé pour pouvoir le réutiliser :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_11.png
Remarque : la plupart des algorithmes possède des paramètres modifiables comme le nombre de Learning itération, de Learning rate, … influant sur les performances.
Réutilisation du modèle entrainé :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_12.png
Il nous reste à définir un point d’entrée et de sortie au modèle :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_13.png
Publier le Web Service :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_14.png Test du Web Service :
Il est possible de tester dès à présent l’API en rentrant les différentes caractéristiques d’un vin afin de prédire s’il est bon ou mauvais !
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_15.png
Voici les caractéristiques d’un vin :
- FIXED ACIDITY : 6.5
- VOLATILE ACIDITY : 0.36
- CITRIC ACID : 0.28
- RESIDUAL SUGAR : 3.2
- CHLORIDES : 0.037
- FREE SULFUR DIOXIDE : 29
- TOTAL SULFUR DIOXIDE : 119
- DENSITY : 0.9908
- PH : 3.25
- SULPHATES : 0.65
- ALCOHOL : 13
Résultat :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_16.png
Le vin devrait être bon à 97 % !
5.2. Classification Multi-Class
Dans l’exemple précédent nous avons classifié la qualité d’un vin avec les attributs « Bon » et « Mauvais », dans cet exemple nous analyserons la qualité d’un vin avec des chiffres entre 0 et 10. Pour ce faire nous devons utiliser d’autres algorithmes de classification Multi-Class mais le principe reste le même.
Voici l’expérimentation :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_17.png
Voici les résultats après quelques ajustements sur les propriétés des classifieurs :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_18.png
En apprentissage supervisé, le concept d’ajustement consiste à chercher une fonction de prédiction qui, au moyen des attributs prédictifs, permet d’ajuster au mieux l’attribut à prédire. Ceci conduit à s’intéresser à la distribution de la variable d’output pour les différentes combinaisons de valeur des attributs, c’est-à-dire à la représentation sous forme de table de contingence des données.
Les résultats de gauche correspondent au classifieur « Multiclass Decision Forest » celui de droite au classifieur « Multiclass Decision Jungle ».
Voici comment lire ces résultats :
Rappelons que le modèle entrainé (avec une partie des données sources) est évalué à l’aide des données source, une comparaison entre les prédictions et les données réelles est donc effectuée pour mesurer l’efficacité du modèle à prédire de nouveaux jeux de données.
Le classifieur « Multiclass Decision Forest » fournit au global de meilleures prédictions, en effet plus les données situées sur la transversale sont hautes moins le modèle se trompe.
Le classifieur « Multiclass Decision Forest » a trouvé pour des vins de qualités 3 :
20 % des vins analysés en qualité 3 : bonne prédiction
40 % des vins analysés en qualité 4 : mauvaise prédiction
20 % des vins analysés en qualité 5 : mauvaise prédiction
20 % des vins analysés en qualité 6 : mauvaise prédiction
Le classifieur « Multiclass Decision Jungle » a trouvé pour des vins de qualités 7 :
1 % des vins analysés en qualité 4 : mauvaise prédiction
11,5 % des vins analysés en qualité 5 : mauvaise prédiction
44,2 % des vins analysés en qualité 6 : mauvaise prédiction
42,3 % des vins analysés en qualité 7 : bonne prédiction
1 % des vins analysés en qualité 8 : mauvaise prédiction
Il faudrait passer plus de temps à essayer d’autres classifieurs, ajuster leurs paramètres afin d’obtenir de meilleures prédictions. D’autres informations fournies dans la sortie du module Score Model peuvent faciliter l'analyse des données / résultats :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_19.png
Remarque : Il est possible d’enregistrer le résultat d’un module dans un Dataset et donc de pouvoir le réutiliser comme entrée lors d’une expérimentation :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_20.png
6. Automatisation
Après avoir publié un Web Service, il peut être requêté de deux façons différentes : Mode requête -> réponse ou en mode Batch.
Le mode Batch permet l’upload d'un fichier dans un Azure Blob Storage. Celui ci contient les inputs, le Web Service traitera toutes les entrées du fichier et renverra un fichier en Output. Dans cet exemple je vais utiliser le mode Requête -> Réponse.
6.1. Création de la table AML_Wine
Voici le script T-SQL de la création de la table AML_Wine :
CREATE TABLE [dbo].[AML_Wine](
[PK_ID] [INT] NOT NULL,
[Quality] [NVARCHAR](50) NULL,
[fixed acidity] [FLOAT] NULL,
[volatile acidity] [FLOAT] NULL,
[citric acid] [FLOAT] NULL,
[residual sugar] [FLOAT] NULL,
[chlorides] [FLOAT] NULL,
[free sulfur dioxide] [FLOAT] NULL,
[total sulfur dioxide] [FLOAT] NULL,
[density] [FLOAT] NULL,
[pH] [FLOAT] NULL,
[sulphates] [FLOAT] NULL,
[alcohol] [FLOAT] NULL,
CONSTRAINT [PK_WINE] PRIMARY KEY CLUSTERED
([PK_ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Insertion de vins pour lesquelles le Web Service devra prédire leurs qualités:
INSERT INT[dbo].[AML_Wine]([PK_ID],[Quality],[fixed acidity],[volatile acidity],[citric acid],[residual sugar],[chlorides],[free sulfur dioxide],[total sulfur dioxide],[density],[pH],[sulphates],[alcohol]) VALUES
(1,NULL,6.8,0.29,0.16,1.4,0.038,122.5,234.5,0.9922,3.15,0.47,10)
,(2,NULL,6.5,0.33,0.72,1.1,0.061,7,151,0.993,3.09,0.57,9.5)
,(3,NULL,6.4,0.24,0.29,11.4,0.051,32,166,0.9968,3.31,0.45,9.55)
,(4,NULL,7.1,0.26,0.34,14.4,0.067,35,189,0.9986,3.07,0.53,9.1)
,(5,NULL,5.9,0.24,0.26,12.3,0.053,34,134,0.9972,3.34,0.45,9.5)
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_21.png
Le package SSIS sera en charge d’actualiser la colonne Quality, les caractéristiques des vins seront transmises au Web Service qui prédira s’ils sont bons ou mauvais.
6.2. Accès au Web Service
Voici les spécifications d’accès au Web Service :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_22.png
Code C# d’utilisation (N’oubliez pas d’inclure les références nécessaires) :
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
namespace CallRequestResponseService
{
public class ScoreData
{
public Dictionary<string, string> FeatureVector { get; set; }
public Dictionary<string, string> GlobalParameters { get; set; }
}
public class ScoreRequest
{
public string Id { get; set; }
public ScoreData Instance { get; set; }
}
class Program
{
static void Main(string[] args)
{
InvokeRequestResponseService().Wait();
}
static async Task InvokeRequestResponseService()
{
using (var client = new HttpClient())
{
ScoreData scoreData = new ScoreData()
{
FeatureVector = new Dictionary<string, string>()
{
{ "fixed acidity", "0" },
{ "volatile acidity", "0" },
{ "citric acid", "0" },
{ "residual sugar", "0" },
{ "chlorides", "0" },
{ "free sulfur dioxide", "0" },
{ "total sulfur dioxide", "0" },
{ "density", "0" },
{ "pH", "0" },
{ "sulphates", "0" },
{ "alcohol", "0" },
{ "result", "0" },
},
GlobalParameters = new Dictionary<string, string>()
{
}
};
ScoreRequest scoreRequest = new ScoreRequest()
{
Id = "score00001",
Instance = scoreData
};
const string apiKey = "abc123"; // Replace this with the API key for the web service
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Bearer", apiKey);
client.BaseAddress = new Uri("https://ussouthcentral.services.azureml.net/workspaces/fe8616914be2449087b593879bd47acf/services/da02eca7897647b09dc909671cd88d1a/score");
HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest);
if (response.IsSuccessStatusCode)
{
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine("Result: {0}", result);
}
else
{
Console.WriteLine("Failed with status code: {0}", response.StatusCode);
}
}
}
}
}
Remarque : Nous avons déjà testé ce mode d’accès pour le modèle de classification binaire.
6.3. Création du package SSIS
Le package SSIS est des plus simples, il lit la table AML_WINE, la qualité des vins n’ayant pas encore été prédit sera alors transmise à la tache de script C# qui enverra les caractéristiques des vins au Web Service. Celui-ci renverra la prédiction faite par le modèle. Enfin la dernière tache aura pour charge d’actualiser la colonne Quality (grâce à l’identifiant PK_ID) :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_SSIS.png
La partie la plus complexe se trouve au niveau de la tache de Script, la colonne Quality doit pouvoir être accessible en écriture afin d’actualiser la table AML_Wine :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureML_SSIS_C.png
Les références suivantes doivent être présentes dans la solution :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureMachineLearning_SSIS.png
Chez moi le package Microsoft.Bcl.Async ne fonctionnait pas, j’ai dû installer le AsyncBridge.
Au passage quelques commandes Nuget bien utiles :
Install-Package AsyncBridge
Uninstall-Package AsyncBridge
Résultat :
http://www.pulsweb.fr/wp-content/uploads/2014/08/AzureMachineLearning_SSIS_Result.png
7. Conclusion
Dans cet article nous avons pu créer un modèle d’analyse prédictive permettant de prédire la qualité d’un vin en fonction de ses caractéristiques chimiques. Nous avons testé et benchmarqué plusieurs algorithmes permettant de répondre binairement (Bon ou Mauvais) et numériquement (de 0 à 10). Nous avons défini un point d’entrée et un point de sortie au modèle afin de pouvoir y accéder depuis l’extérieur via une API. Enfin nous avons automatisé l’analyse de nouveaux vins.
Cet exemple d’analyse prédictible laisse entrevoir de multiples nouveaux services, imaginez que je puisse sans tester un vin savoir s’il est bon ou mauvais et donc de souhaiter l’acheter ou non… Je pourrais automatiser l’achat de vin…
En ayant peu de connaissances en Datamining j’ai réussi à créer un modèle d’analyse prédictif et à l’utiliser :-)
Remarque : Il est aisé de créer un modèle avec Azure ML via des composants graphiques, mais maitriser toute la complexité des différents algorithmes, savoir lequel utiliser, savoir optimiser un modèle… Cela reste bel et bien un métier, celui de statisticiens, de data scientistes, …
Via Azure ML Microsoft offre une plateforme d’analyse prédictive dans le Cloud conçu pour les utilisateurs débutants ou expérimentés.
8. Ressources
Voici quelques ressources sur Azure ML et le Machine Learning :
- Vidépar Franck Mercier : http://blogs.technet.com/b/franmer/archive/2014/08/01/vid-233-o-azure-machine-learning.aspx
- Introduction par le projet Boticelli : https://projectbotticelli.com/knowledge/brief-introduction-to-microsoft-azure-ml
- Article écrit par Frédéric Gisbert : http://blogs.technet.com/b/sql/archive/2014/
- 06/19/sql-server-chez-les-clients-self-service-bi-et-microsoft-azure-machine-learning.aspx
- Prise en main de l’outil par David Joubert : http://blog.cellenza.com/data/sql-server/microsoft-azure-machine-learning-premiere-prise-en-main/
- Microsoft Azure Machine Learning Release Notes : https://contosoafx.blob.core.windows.net/media/Release_Notes_MAML_PuP.pdf
- Tutorials videos : https://azure.microsoft.com/en-us/services/machine-learning/
- Azure ML Help : https://studio.azureml.net/Help/ Blog Big Data France : http://blogs.msdn.com/b/big_data_france/
- Cour de Datamining : http://eric.univ-lyon2.fr/~ricco/cours/supports_data_mining.html