Récupération des jeux de données

## [1] 0.608297 0.777268 0.882875 0.839618 0.839641 0.839816

Les données étudiées représentent le taux d’accès réussi (i.e., ne générant pas de défaut de cache) au cache avec une période d’échantillonnage de 100ms lors de l’exécution d’un programme.

str(data)
##  num [1:2000] 0.608 0.777 0.883 0.84 0.84 ...

Nous disposons donc d’un échantillon de 2000 variables. Vérifions leur évolution dans le temps :

plot.ts(data)

On remarque deux phases : une phase de transition montante dans les premiers temps; puis la courbe devient relativement régulière, avec un taux d’accès réussi assez élevé, proche de 1, tout en connaissant quelques pics plutôt bas. Nous décomposons donc l’échantillon en deux parties pour le moment : la phase ascendante et la phase stationnaire.

break1 = 100
X1 = data[1:break1];
X2 = data[(break1+1):2000];

Phase stationnaire

plot.ts(X2)

On constate de nombreux pics dans cet échantillon, ces valeurs sortent du cadre relativement plat des données, qui oscillent a priori entre 1 et 0.98. Nous allons traiter ces deux informations séparément.

Xsup = X2[X2>=0.98];
Xinf = X2[X2<0.98];

On récupère les valeures supérieures pour étudier la phase stationnaire.

Valeurs régulières

plot.ts(Xsup)

Les valeurs restent très variables, mais leur domaine a été largement raccourci. Les pics n’atteignent jamais la valeur de 1. Aucune structure particulière ne se dégage, si ce n’est un léger seuil entre les 700 premières valeurs et les données suivantes. Une tendance se dégagera peut-être de manière plus précise avec un histogramme.

hist(Xsup)

hist(Xsup, breaks=20)

On voit clairement une différence de résultat dans la fréquence des valeurs obtenues. Les valeurs au delà de 0.986 semblent bien plus récurrentes que les autres. Ainsi les ruptures de régularité semblent très ponctuelles. Dans cette partie des données, les accès au cache effectués ont donc un bon taux de réussite, sans oublier que l’on a exclu quelques valeurs encore moins optimales plus haut.

Il aurait peut-être été plus pertinent de séparer les valeurs de manière précise plus tôt, en utilisant comme valeur pivot 0.985. On résume les valeurs de l’échantillon :

summary(Xsup)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.9800  0.9850  0.9868  0.9864  0.9887  0.9904

On voit bien que l’échantillon est plutôt situé entre 0.985 et 0.99. Ceci se représente graphiquement avec un boxplot :

boxplot(Xsup)

Valeurs irrégulières

Etudions maintenant les valeurs qui faisaient défaut à la phase stationnaire plus haut.

plot.ts(Xinf)

On distingue deux tendances : des valeurs proches de 0.97 mais qui donnent des résultats plutôt réguliers; et de pics bien plus bas dans les résultats, jusqu’à 0.90 voire 0.84. Visualisons l’histogramme de cet ensemble de données afin de se donner une idée de leur répartition.

hist(Xinf)

hist(Xinf, breaks=20)

On contate qu’il y a un très grand nombre de valeurs proches de 0.97, et même supérieures. Dans l’ensemble, les valeurs sont moins bonnes que celles obtenues au dessus, mais la plupart d’entre elles s’en rapprochent. On pourrait ici dire qu’il aurait été plus judicieux de sélectionner un plus grand échantillon de données en choisissant 0.97 comme valeur pivot. Vérifions ceci avec le résumé des données :

summary(Xinf)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.8373  0.9701  0.9755  0.9719  0.9773  0.9799

La moyenne des taux d’accès réussi au cache est bien de 0.97, donc très peu impactée par les valeurs extrèmes, et portée par les valeurs maximum. Ceci peut être résumé graphiquement avec un boxplot:

boxplot(Xsup)

Valeurs intermédiaires

Pour vérifier ce qui a été avancé plus tôt, on définit un ensemble de valeurs intermédiaires.

Xint = X2[X2<0.985];
Xint = Xint[Xint>0.97];
plot.ts(Xint)

Ce graphique est, comme attendu assez variable, mais nous allons surtout nous intéresser à la répartition des valeurs :

hist(Xint)

hist(Xint, breaks=60)

Les valeurs sont relativement mieux réparties qu’auparavant, même si on voit toujours la présence de deux groupements: autour de 0.975 et entre 0.98 et 0.985.

On peut donc en conclure que, sur la phase stationnaire, la plupart des valeurs sont élevées et proches de 1 (environ 0.98). On obtient également des résultats moins performants, mais moins le résultat est élevé, moins il est fréquent. Au final, les valeurs les moins bonnes n’apparaîtront qu’une seule fois dans tout l’échantillon de données.

Phase de transition

On regarde dans un premier temps l’allure de cette phase.

plot.ts(X1)

On observe deux phases d’augmentation : une qui croît rapidement jusqu’à un peu plus de 0.9, puis une croissance plus faible et régulière ensuite.

X1r = X1[X1<=0.9];
X1l = X1[X1>0.9];
plot.ts(X1r)

plot.ts(X1l)

On peut ajouter que la courbe de transition lente, augmente progressivement jusqu’à arriver aux valeurs moyennes de la phase stationnaire : autour de 0.97.