vendredi 24 décembre 2010

ACP avec FactoMineR et dynGraph

Il y a deux manières d'appréhender la représentation graphique des données en Data Mining. La première consiste à la considérer comme un outil de présentation des résultats. Le graphique vient appuyer le texte et les tableaux pour mettre en évidence les informations produites par l'analyse. Par exemple, on annonce dans le texte que les ventes de bonnets augmentent en hiver, une petite courbe où l'on distingue les pics de ventes en fin et en début d'année vient confirmer cela.

La seconde cherche à intégrer la représentation graphique dans le processus exploratoire même. Ici, elle devient un outil supplémentaire de détection des régularités, des singularités et des relations qui peuvent exister dans les données. A cet égard, les logiciels modernes, avec des fonctionnalités graphiques de plus en plus puissantes, ouvrent des perspectives incroyables. Comme je le dis souvent : un graphique bien senti vaut largement mieux qu'une série de ratios à l'interprétation confuse ou mal maîtrisée.

Dans ce didacticiel, nous menons une analyse en composantes principale avec le logiciel R. Nous l'avions déjà réalisée précédemment avec la procédure princomp(). Ici, nous réitérons l'étude avec la procédure PCA() du package FactoMineR. De nombreux indicateurs sur les éléments (variables, individus) actifs ou illustratifs sont directement fournis maintenant, facilitant grandement la tâche du praticien. Il n'est plus nécessaire de les post-calculer à l'aide de formules plus ou moins complexes comme nous avions pu le faire dans le précédent document. Par la suite, sur la base des indicateurs livrés par PCA(), nous procéderons à une exploration graphique à l'aide de l'outil dynGraph du package éponyme. Nous constaterons que les possibilités en matière d'analyse interactive sont nombreuses.

Mots clés : logiciel R, analyse en composantes principales, ACP, cercle de corrélation, variables illustratives, factominer, dyngraph, analyse graphique interactive
Composants : PCA, dynGraph
Lien : acp_avec_factominer_dyngraph.pdf
Données : acp_avec_factominer_dyngraph.zip
Références :
G. Saporta, « Probabilités, analyse des données et statistique », Dunod, 2006 ; pages 155 à 179.
Tutoriel Tanagra, "ACP - Description de véhicules"
F. Husson, J. Josse, S. Le, J. Pages, Le package FactoMineR pour R ; http://factominer.free.fr/
S. Le, J. Durand, Le package dynGraph pour R ; http://dyngraph.free.fr/

dimanche 19 décembre 2010

Outils pour le développement d'applications

Un tutoriel un peu différent des autres cette fois-ci. J'y parle des outils et langages de programmation pour le développement d'applications de data mining.

Lancer un débat à propos du " meilleur langage de programmation " est une excellente manière de plomber une soirée entre informaticiens. La question sous-jacente est " quel est le langage qui permet de développer l'application la plus performante, la plus rapide… ".

De très bon enfant, l'atmosphère devient très vite orageuse, voire délétère. Des personnes, fort charmantes la plupart du temps, adoptent un comportement passionné, voire passionnel, montent sur leurs grands chevaux (tagada, tagada) en assénant des arguments parfois complètement irrationnels. Je sais de quoi je parle, j'en fais partie quand je me laisse aller. Pourtant, finalement, trancher dans ce genre de débat serait assez facile. Il suffit de caractériser les problèmes que l'on cherche à résoudre, écrire un code équivalent dans les différents langages, et étudier le comportement de l'exécutable généré. C'est ce que nous allons faire dans ce didacticiel en nous plaçant dans deux situations couramment rencontrées lors de la programmation d'algorithmes d'exploration de données. On verra que le résultat n'est pas du tout celui qu'on attendait (si on en attendait un, ouh là là je vois déjà certains bondir), loin de là.

Tout d'abord, corrigeons un abus de langage (si je puis dire), la performance n'est pas une affaire de langage, mais plutôt une affaire de technologie et de compilateur. Nous le verrons, le même code source, compilé avec des outils différents, peut aboutir à des exécutables avec des comportements très différents. Nous étudierons dans ce document : C# avec Visual C# Express de Microsoft ; Pascal avec Borland Delphi 6.0 ; Pascal avec le compilateur Free Pascal 2.2.4 de Lazarus 0.9.28 ; C++ avec Borland C++ Builder 4 ; C++ avec Dev C++ (compilateur G++) ; Java exécuté via la JRE1.6.0_19 sous Windows (Eclipse est l'outil de développement que j'ai utilisé). Tous ces outils, excepté Borland C++ Builer 4, sont accessibles gratuitement sur le net. Pour tous, j'ai sélectionné les options de compilations qui optimisent la rapidité d'exécution.

Les performances sont évaluées en mesurant les temps de calculs des exécutables lancés via le shell, en dehors de l'EDI (Environnement de Développement Intégré) pour éviter les interférences. Ma machine étant multi-cœur, temps utilisateur et temps CPU sont quasiment les mêmes. Nous nous contenterons du premier. Chaque programme est lancé 10 fois. Nous calculons la moyenne.

Mots-clés : langage de programmation, c++, c#, delphi, pascal, java
Didacticiel : fr_Tanagra_Programming_Language.pdf
Code source : programming_language.zip

mercredi 15 décembre 2010

Régles d'association - Données transactionnelles

L’extraction des règles d’association est une des applications phares du data mining. L’idée est de mettre à jour des régularités, sous forme de cooccurrences, dans les bases de données. L’exemple emblématique est l’analyse des tickets de caisses des grandes surfaces : on veut découvrir des règles de comportement du type « si le client a acheté des couches et des lingettes, il va acheter du lait de croissance ». Auquel cas, il est peut être opportun de mettre les rayons adéquats dans la même zone du magasin (c’est le cas en ce qui concerne l’hypermarché que je fréquente habituellement). La partie « si » de la règle est appelée « antécédent », la partie « alors » est le « conséquent ».

Il est possible de rechercher des cooccurrences dans les tableaux individus – variables que l’on manipule avec les logiciels de Data Mining usuels. Mais bien souvent, surtout dans le cadre de l’induction des règles d’association, les données peuvent se présenter sous la forme d’une base transactionnelle. Si l’on reprend l’exemple de l’analyse des tickets de caisse, nous disposons d’une liste de produits par caddie.

Cette représentation des données est assez naturelle eu égard au problème que l’on souhaite traiter. Elle présente aussi l’avantage d’être plus compacte puisque seuls sont effectivement listés les produits observés dans chaque caddie. Nous n’avons pas besoin de nous préoccuper des produits qui n’y sont pas, surtout qu’ils peuvent être très nombreux si l’on se réfère aux nombre d’articles que peut proposer une enseigne de grande distribution.

Pour autant que ce mode de description soit naturel, il s’avère que de nombreux logiciels ne savent pas l’appréhender directement. On observe curieusement un vrai clivage entre les outils à vocation professionnelle et ceux issus du monde universitaire. Les premiers savent pour la plupart manipuler ce type de fichier. C’est le cas des logiciels SPAD 7.3 et SAS Enterprise Miner 4.3 que nous étudions dans ce didacticiel. Les seconds en revanche demandent une transformation préalable des données pour pouvoir fonctionner. Nous utiliserons une macro VBA fonctionnant sous Excel pour transformer nos données en base « individus – variables » binaire propice au traitement sous Tanagra 1.4.37 et Knime 2.2.2. Attention, nous devons respecter le cahier des charges initial, à savoir s’intéresser uniquement aux règles signalant la présence simultanée des produits dans les caddies. Il n’est pas question, consécutivement à un codage « présent – absent » mal maîtrisé, de produire des règles mettant en évidence l’absence simultanée de certains produits. Cela peut être intéressant dans certains cas, mais ce n’est pas l’objectif de notre analyse.

Mots-clés : règle d'association, règles d'association, spad 7.3, sas em 4.3, knime 2.2.2, filtrage des règles, lift
Composants : A PRIORI
Didacticiel : fr_Tanagra_Assoc_Rule_Transactions.pdf
Données : assoc_rule_transactions.zip
Références :
Wikipedia, "Association rule learning"

samedi 11 décembre 2010

Arbres de décision sur les grands fichiers (mise à jour)

Dans un post assez ancien ("Traitement de gros volumes - Comparaison de logiciels" - septembre 2008), je comparais le comportement de plusieurs logiciels lors du traitement d'un fichier relativement volumineux avec les arbres de décision.

J'y décrivais entres autres le comportement de Tanagra version 1.4.27 sortie en aout 2008. Depuis, ma machine de développement a changé ; Tanagra lui-même a changé, nous en sommes à ce jour à la version 1.4.37 ; et Sipina a lui aussi été modifié (version 3.5), avec l'introduction du multithreading pour certaines techniques d'induction d'arbres. Je me suis dit qu'il était temps d'étudier les performances en rééditant l'expérimentation dans les mêmes conditions.

Concernant Tanagra et Sipina, les seuls logiciels que j'ai analysés dans ce nouveau contexte, l'amélioration des temps de traitement est manifeste. Après, il faut discerner ce qui est imputable au changement de machine, et ce qui revient aux modifications dans les implémentations. Nous avançons quelques pistes dans notre document.

Les nouveaux résultats ont été ajoutés dans la dernière section (section 5) du PDF.

Lien : fr_Tanagra_Perfs_Comp_Decision_Tree.pdf