• Aucun résultat trouvé

3.2 Calcul de la précision temporelle

Une fois le graphe de séquences construit, on sait quelles sont les séquences autorisées par les contrain- tes de temps et celles qui sont interdites. Cependant, certaines séquences respectent les contraintes fortes de l'utilisateur alors que d'autres ont été construites en appliquant les contraintes étendues : elles ne sont pas équivalentes. On va donc calculer le niveau de précision temporelle de chacun des chemins (séquences maximales) et l'aecter à chacune des sous-séquences qui le composent.

3.2.1 Valuation des graphes de séquences

An de déterminer le respect des contraintes de temps par le chemin, on value chaque arc (x,y) par >(µmg(y.begin()-x.end()),µM G(y.end()-x.begin())) selon les valeurs de mg et MG qui permettent de

le construire. Chaque sommet est valué sur le même principe, par µws. Ces valuations sont réalisées par

la fonction valueGraph.

valueGraph - Input : Gd(S, A), graphe de séquences non valué d'une séquence de données d

µws, µmg, µM G, les fonctions d'appartenance des contraintes de temps.

Output : Gd(S, A), graphe de séquences valué de la séquence de données d

Pour chaque s ∈ S faire

s.valuate(µws(s.end()-s.begin()) ;

Pour chaque t ∈ s.succ() faire

arc(s,t).valuate(>( µmg(t.begin()-s.end()), µM G(t.end()-s.begin()))) ;

Fin Pour Fin Pour

Alg. 8 : valueGraph

La précision temporelle d'une séquence est alors donnée par la formule 2.5, détaillée dans la section 2.3 du chapitre précédent. Ce calcul nécessite une passe supplémentaire, après l'extraction des motifs séquentiels, pour retourner, en plus de la fréquence de chaque motif, sa précision temporelle.

3.2.2 Calcul de la précision temporelle des séquences fréquentes

Proposé dans [MCP98], l'approche PSP est une approche de type générer-élaguer qui utilise une structure d'arbre préxé pour organiser les séquences candidates et permettre de trouver plus ecacement l'ensemble des candidats inclus dans une séquence de données. Ainsi, à la k-ème étape, l'arbre est de profondeur k. Il stocke toutes les k-séquences candidates de la manière suivante : une séquence candidate est stockée sur une branche, de la racine à une feuille. Chaque n÷ud de profondeur p correspond au p-ème item de la séquence. A chaque n÷ud terminal est associé la fréquence de la séquence. On distingue deux types de ls pour un n÷ud, les ls same, dans le même itemset que leur père, et les ls other, dans un itemset ultérieur.

A la n de la phase d'extraction des motifs séquentiels, nous obtenons donc un arbre préxé des séquences fréquentes. Nous réalisons alors un parcours de la base an de valuer chaque séquence de l'arbre des fréquents. Pour cela, l'algorithme calcGenP rec compare chaque séquence incluse dans l'arbre préxé avec les plus longs chemins dans les graphes de séquences valués.

Par construction du graphe de séquences, l'existence d'un arc entre deux points garantit le respect des contraintes de temps entre les deux sommets et l'existence d'un chemin garantit qu'il existe une séquence respectant les contraintes entre la source et le puits du chemin. On utilise alors calcP rec et

76 CHAPITRE 3. GETC : GRAPH FOR EXTENDED TIME CONSTRAINTS

donc recCalcP rec pour parcourir l'arbre des fréquents et calculer la précision grâce aux graphes de séquences, par application de la formule 2.5.

calcGenPrec - Input : O, ensemble des objets et de leur graphe de séquences, T l'arbre des séquences fréquentes, µws, µmg, µM G, les fonctions d'appartenance des contraintes de temps.

Output : T l'arbre des séquences fréquentes, munies de leur degré de respect des contraintes. Pour chaque o ∈ O faire

valueGraph(go,µws,µmg,µM G) ;

calcPrec(go,T ) ;

Fin Pour

Pour chaque L ∈ T .leaves() faire L.degPrec ← L.degPrec/O ; Fin Pour

Alg. 9 : calcGenPrec

calcPrec - Input : Gd(Sd, A), graphe de séquences valué d'une séquence de données d, T l'arbre des fréquents.

Output : T l'arbre des séquences fréquentes, munies du degré de respect des contraintes pour la séquence d. Pour chaque i ∈ root.children() faire

Pour chaque S ∈ Sdfaire

Pour chaque j ∈ S.items faire

Si (i == j) Alors recCalcPrec(T ,root.children[i],S,i,Gd,1) ; Fin Si

Fin Pour Fin Pour Fin Pour

Alg. 10 : calcPrec

recCalcPrec - Input : Gd(Sd, A), graphe de séquences valué d'une séquence de données d,

T l'arbre des séquences fréquentes, N n÷ud de l'arbre pour la validation en cours, sP recsommet du graphe en cours de validation,

iP recitem précédemment vérié dans le sommet sP rec, ple degré de respect temporaire pour la séquence.

Output : T l'arbre des séquences fréquentes, munies du degré de respect pour la séquence d. Si (N.isLeaf()) Alors

N.cpt ← ⊥(N.degPrec(),p) ; Sinon

Pour chaque i ∈ sP rec faire [diérent de iP rec...]

Si (i ∈ N.same()) Alors recCalcPrec(T ,N.same[i],sP rec,i, Gd,>(p,sP rec.valuation())) ; Fin Si

Fin Pour

Pour chaque s ∈ sP rec.next() faire Pour chaque i ∈ s.items() faire

Si (i ∈ N.other()) Alors recCalcPrec(T ,N.other[i],s,i,Gd, >(p,arc(sP rec,s).valuation())) ; Fin Si

Fin Pour Fin Pour Fin Si

3.2. CALCUL DE LA PRÉCISION TEMPORELLE 77

3.2.3 Un exemple

A partir de la base de données Tab. 3.1 et des contraintes de temps spéciées dans le chapitre précédent, on construit les trois graphes de séquences correspondants. Puis on procède à l'extraction des motifs séquentiels. Les motifs séquentiels généralisés extraits avec minF req = 70%, sont les séquences : < (2 3 4) >, < (2 3)(4)(5 6) >, < (2)(4 5) >, < (3 4)(5) >, < (3 4)(6) > et < (3)(4 5) >. Tous ont une fréquence de 100%. An de pouvoir distinguer leur pertinence par rapport aux besoins de l'utilisateur, nous calculons la précision temporelle de chacun. Pour cela, les graphes de séquences sont valués comme précisé dans la section 3.2.1. Les sommets construits avec ws=0,1,2 ont un degré de 1, avec ws=3, un degré de 0.93 et avec ws=4, un degré de 0.87. De même les arcs construits avec mg=1 ont, pour mingap, un degré de 0.5 et de 1 pour mg=2. En ce qui concerne maxgap, le degré est de 1

pour MG ≤4, de 0.92 pour MG=5 et 0.84 pour MG=6. On utilise ces valuations pour calculer le degré de respect des contraintes de temps par les motifs extraits. Les résultats sont présentés sur la gure 3.5.

Fig. 3.4  Graphes de séquences valués pour les clients 1, 2 et 3 Motifs séquentiels %Cl1 %Cl2 %Cl3 Υ < (2 3 4) > 1 1 0.87 0.96 < (3 4)(5) > 0.84 1 1 0.95 < (2)(4 5) > 0.84 0.5 1 0.78 < (3 4)(6) > 0.5 0.5 1 0.67 < (3)(4 5) > 0.84 0.5 0.5 0.61 < (2 3)(4)(5 6) > 0.5 0.5 0.5 0.5

Fig. 3.5  Calcul de la précision pour les motifs séquentiels extraits

Une fois les motifs obtenus avec leur précision temporelle, on peut analyser plus précisément les contraintes qui ont permis de les générer. Plus la précision est proche de 1, plus les valeurs initiales spéciées par l'utilisateur correspondent aux dates dans la base de données. A l'inverse, une précision faible indique que les contraintes sont peu appropriées à ce jeu de données.

78 CHAPITRE 3. GETC : GRAPH FOR EXTENDED TIME CONSTRAINTS

3.3 Expérimentations

3.3.1 Données synthétiques

Ces expérimentations (implémentation C++) ont été réalisées sur un PC équipé d'un processeur 2,8GHz et de 2Go de mémoire DDR, sous système Linux, noyau 2.6. Le but de ces mesures est de comparer le comportement des algorithmes GETC (contraintes de temps étendues) et GTC (contraintes de temps simples). Pour certaines comparaisons, nous utilisons également une implémentation de PSP, intégrant ou non la gestion des contraintes de temps. Les résultats présentés ici ont été obtenus à partir du traitement de plusieurs jeux de données synthétiques comportant environ 1000 séquences de 20 transactions en moyenne. Chacune de ces transactions comporte environ 15 items choisis parmi 1000.

La première étape a consisté à comparer les temps d'exécution en l'absence de contrainte de temps, c'est-à-dire en prenant windowSize = 0, mingap = 0 et maxgap = ∞ pour GTC ainsi que pour GETC, avec une précision de 1 pour les trois paramètres. Ainsi, nous avons pu comparer le temps d'exécution de notre algorithme avec ceux de PSP et GTC et montrer que le comportement de GETC est similaire à celui de GTC et que les temps d'exécution sont quasiment identiques, pour extraire les mêmes motifs. Nous avons ensuite répété ces mesures en introduisant le traitement de contraintes de temps, tou- jours avec une précision de 1 an de comparer le comportement de GETC et GTC pour la gestion de contrainte de temps non-étendues. La Fig. 3.6(a) montre l'évolution du temps d'extraction en fonction de la valeur de windowSize. GETC a un comportement linéaire proche de celui de GTC. La diérence

provient de la phase de traitement de la précision, dont le temps augmente légèrement avecwindowSize,

le nombre de sommets dans le graphe de séquences augmentant avec ce paramètre.

Enn, la Fig. 3.6(b) montre l'évolution du temps d'extraction en fonction de la précision pour une fré- quence minimum de 0.37. On constate que le temps d'extraction atteint une valeur limite qui correspond à la valeur maximale utile des trois paramètres de contraintes de temps.

(a) (b)

Fig. 3.6 Temps d'extraction : (a) en fonction de windowSize avec mingap=2, maxgap=∞ and minF req=0.35 (pour GETC, ρws=ρM G=ρmg=1) ; (b) en fonction de la précision selon diérentes valeurs des contraintes de temps

(minF req=0.37).

La deuxième partie de nos expérimentations a porté sur l'analyse des motifs séquentiels extraits par GETC, par rapport aux motifs extraits par GTC, en fonction de la précision des diérentes contraintes. La gure Fig. 3.7(a) présente les temps d'extraction comparés de GTC et GETC en fonction de la fréquence