Excel et StoredProcedure pour trouver le clustering idéal…

Il n’y a grosso modo qu’un seul paramètre à optimiser pour un modèle de clustering: la cardinalité. Or s’il est des situations où une segmentation a une utilité métier immédiate, où l’évaluation du modèle est très quantitative, on se retrouve dans beaucoup de cas dans à la recherche de segmentations les plus « segmentantes » possibles (pour des applis de type bagging/boosting). Or sous BIDS, hormis regarder pendant des heures des graphes, il est relativement impossible de réaliser cela.

Sauf si l’on utilise l’attribut MSOLAP_NODE_SCORE généré dans le content au niveau de la node racine pour tout modèle de cluster qui représente la cluster-likelihood moyen de chaque cas du modèle (et donc sa qualité d’une certaine façon).

Ce que l’on peut faire, c’est d’une part générer une procedure stockée SSAS qui va créer autant de modèles que de valeurs de CLUSTER_COUNT a tester, puis visualiser cette évolution du NODE_SCORE sous Excel, en utilisant la possibilité offerte par les addins d’exécuter du DMX dans les cellules…

Bon la première étape est de créer un projet AS avec un modèle de clustering. Je ne détaille pas cette partie…

Pour la suite on va se créer une procédure stockée managée pour générer les modèles.
On crée un nouveau projet de lib C#, dans lequel on enregistre l’assembly AdomdServer.


On y crée la proc&édure stockée, nommée GenerateClusteringModels, qui prendra en paramètres le nom de la structure, la base du nom de modèle, et les valeurs min et max de Cluster Count.

[Adomd.SafeToPrepare(true)]
public void GenerateClusterin
gModels(string MiningStructureName, string RootModelName, int MinClusterCount, int MaxClusterCount)
{

Adomd.AdomdCommand cmd = new Adomd.AdomdCommand();

for (int i = MinClusterCount; i <=
MaxClusterCount; i++)
{
//Forge de la requête
cmd.CommandText = « ALTER MINING STRUCTURE [«  + MiningStructureName + « ] «  +
« ADD MINING MODEL «  + RootModelName + i.ToString() +  » «  + « USING Microsoft_Clustering(CLUSTER_COUNT= » + i.ToString() + « ) »;

//Exécution
cmd.ExecuteNonQuery();

}
}

Il suffit ensuite de compiler l’assembly et de l’enregistrer dans SSAS avec les droits adéquats.



Une fois cela fait, on peut l’utiliser dans le management studio pour créer autant de modèles de clustering que souhaité. J’en ai créé 21, allant de 4 à 25 clusters.

CALL MyProc.GenerateClusteringModels(« Logs »,« Logs »,4,25);

Une fois processé (c’est assez long!), on peut alors passer à la partie jolie de cette manipulation, à savoir représenter cela sous forme de graphe Excel. SI vous disposez d’Excel 2007 et des addins Data Mining, vous pouvez interroger AS via des formules, ce qui est aussi vrai pour la vue CONTENT. La fonction DMCONTENTQUERY(,,) renvoie la valeur de colonne de CONTENT pour le modèle consiféré (la partie connexion peut être vide si vous êtes en mode connecté).

Il suffit donc de générer les noms de modèles dans une colonne (en glissé c’est facile, pour moi Logs4 à Logs25) et d’éxécuter:

=DMCONTENTQUERY(«  »,A2, »MSOLAP_NODE_SCORE »)

Puis de tracer un graphe avec ces valeurs. On obtient:

Voila on a le modèle idéal (11 clusters) et de manière joliment jsutifiée. A bientôt🙂

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s